diff --git a/src/uix/eidos/components/calendar/calendar-heading-trigger.svelte b/src/uix/eidos/components/calendar/calendar-heading-trigger.svelte new file mode 100644 index 000000000..98634d587 --- /dev/null +++ b/src/uix/eidos/components/calendar/calendar-heading-trigger.svelte @@ -0,0 +1,28 @@ + + + diff --git a/src/uix/eidos/components/calendar/calendar-month-select.svelte b/src/uix/eidos/components/calendar/calendar-month-select.svelte index 9c7e8194b..04350eb44 100644 --- a/src/uix/eidos/components/calendar/calendar-month-select.svelte +++ b/src/uix/eidos/components/calendar/calendar-month-select.svelte @@ -1,16 +1,64 @@ -{#if bodyContent} - - {#snippet children(snippetProps: CalendarMonthSelectSnippetProps)} - {@render bodyContent(snippetProps)} + + + {#snippet child({ props }: { props: Record })} + {/snippet} - -{:else} - -{/if} + + + + + {#snippet children({ months }: MonthGridProviderSnippetProps)} + + {#each months as month (month)} + + {/each} + + {/snippet} + + + + diff --git a/src/uix/eidos/components/calendar/calendar-month-view.svelte b/src/uix/eidos/components/calendar/calendar-month-view.svelte new file mode 100644 index 000000000..61a516dcb --- /dev/null +++ b/src/uix/eidos/components/calendar/calendar-month-view.svelte @@ -0,0 +1,60 @@ + + +{#if provider.view === 'month'} + + {#snippet children({ months }: MonthGridProviderSnippetProps)} + + ‹ + + › + + + {#each months as month (month)} + + {/each} + + {/snippet} + +{/if} diff --git a/src/uix/eidos/components/calendar/calendar-next-button.svelte b/src/uix/eidos/components/calendar/calendar-next-button.svelte index ebf44eee3..06c0f9650 100644 --- a/src/uix/eidos/components/calendar/calendar-next-button.svelte +++ b/src/uix/eidos/components/calendar/calendar-next-button.svelte @@ -1,10 +1,30 @@ - {@render bodyContent?.()} + {#snippet child({ props }: { props: Record })} + + {#if bodyContent}{@render bodyContent()}{:else}{/if} + + {/snippet} diff --git a/src/uix/eidos/components/calendar/calendar-prev-button.svelte b/src/uix/eidos/components/calendar/calendar-prev-button.svelte index 8b78df67e..ebb8861ea 100644 --- a/src/uix/eidos/components/calendar/calendar-prev-button.svelte +++ b/src/uix/eidos/components/calendar/calendar-prev-button.svelte @@ -1,10 +1,30 @@ - {@render bodyContent?.()} + {#snippet child({ props }: { props: Record })} + + {#if bodyContent}{@render bodyContent()}{:else}{/if} + + {/snippet} diff --git a/src/uix/eidos/components/calendar/calendar-year-select.svelte b/src/uix/eidos/components/calendar/calendar-year-select.svelte index 68f0258b4..5a70f6c55 100644 --- a/src/uix/eidos/components/calendar/calendar-year-select.svelte +++ b/src/uix/eidos/components/calendar/calendar-year-select.svelte @@ -1,16 +1,80 @@ -{#if bodyContent} - - {#snippet children(snippetProps: CalendarYearSelectSnippetProps)} - {@render bodyContent(snippetProps)} + + + {#snippet child({ props }: { props: Record })} + {/snippet} - -{:else} - -{/if} + + + + + {#snippet children({ years }: YearGridProviderSnippetProps)} + + + + + + + {#each years as year (year)} + + {/each} + + {/snippet} + + + + diff --git a/src/uix/eidos/components/calendar/calendar-year-view.svelte b/src/uix/eidos/components/calendar/calendar-year-view.svelte new file mode 100644 index 000000000..15a6a1378 --- /dev/null +++ b/src/uix/eidos/components/calendar/calendar-year-view.svelte @@ -0,0 +1,50 @@ + + +{#if provider.view === 'year'} + + {#snippet children({ years }: YearGridProviderSnippetProps)} + + ‹ + + › + + + {#each years as year (year)} + + {/each} + + {/snippet} + +{/if} diff --git a/src/uix/eidos/components/calendar/calendar.css b/src/uix/eidos/components/calendar/calendar.css index 8bbac7f95..a489609d7 100644 --- a/src/uix/eidos/components/calendar/calendar.css +++ b/src/uix/eidos/components/calendar/calendar.css @@ -153,84 +153,49 @@ text-align: center; } -[data-calendar-prev-button], -[data-calendar-next-button] { - display: inline-flex; - align-items: center; - justify-content: center; - flex: 0 0 auto; - inline-size: var(--_calendar-control-size); - block-size: var(--_calendar-control-size); - padding: 0; - border: var(--calendar-control-border-width) solid var(--calendar-control-border); - border-radius: var(--calendar-control-radius); - background: var(--calendar-control-bg); - color: var(--calendar-control-color); - cursor: pointer; - transition: - background var(--calendar-transition-duration) var(--calendar-transition-ease), - border-color var(--calendar-transition-duration) var(--calendar-transition-ease), - color var(--calendar-transition-duration) var(--calendar-transition-ease), - box-shadow var(--calendar-transition-duration) var(--calendar-transition-ease); -} +/* Prev / Next compose the system (see calendar-prev-button.svelte / + calendar-next-button.svelte). Their box, hover, focus-ring, disabled and a11y + all come from the primitive — no bespoke chrome here. */ -[data-calendar-prev-button]:hover, -[data-calendar-next-button]:hover { - border-color: var(--calendar-control-border-hover); - background: var(--calendar-control-bg-hover); - color: var(--calendar-control-color-hover); -} - -[data-calendar-prev-button]:focus-visible, -[data-calendar-next-button]:focus-visible, -[data-calendar-month-select]:focus-visible, -[data-calendar-year-select]:focus-visible, [data-calendar-day]:focus-visible { outline: var(--focus-ring-width) solid var(--focus-ring-color); outline-offset: 0; } -[data-calendar-prev-button][data-disabled], -[data-calendar-next-button][data-disabled], -[data-calendar-month-select][data-disabled], -[data-calendar-year-select][data-disabled] { - cursor: not-allowed; - opacity: var(--calendar-disabled-opacity); -} +/* The month / year trigger is now the system