fluentui-svelte 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/app-surface/app-surface.svelte +96 -0
- package/dist/components/app-surface/app-surface.svelte.d.ts +22 -0
- package/dist/components/app-surface/docs/llms.md +73 -0
- package/dist/components/app-surface/types.d.ts +19 -0
- package/dist/components/app-surface/types.js +1 -0
- package/dist/components/app-window/app-window.d.ts +3 -0
- package/dist/components/app-window/app-window.js +3 -0
- package/dist/components/app-window/app-window.svelte +193 -0
- package/dist/components/app-window/app-window.svelte.d.ts +25 -0
- package/dist/components/app-window/docs/llms.md +119 -0
- package/dist/components/app-window/types.d.ts +66 -0
- package/dist/components/app-window/types.js +1 -0
- package/dist/components/auto-suggest-box/auto-suggest-box.svelte +47 -31
- package/dist/components/auto-suggest-box/auto-suggest-box.svelte.d.ts +2 -2
- package/dist/components/auto-suggest-box/docs/llms.md +34 -33
- package/dist/components/auto-suggest-box/option.svelte +6 -4
- package/dist/components/auto-suggest-box/types.d.ts +13 -16
- package/dist/components/avatar/avatar.svelte +4 -3
- package/dist/components/avatar/docs/llms.md +1 -1
- package/dist/components/avatar/type.d.ts +1 -1
- package/dist/components/badge/badge-icon.svelte +2 -2
- package/dist/components/badge/badge.svelte +2 -2
- package/dist/components/badge/docs/llms.md +2 -2
- package/dist/components/badge/types.d.ts +2 -2
- package/dist/components/breadcrumb/breadcrumb-button.svelte +2 -2
- package/dist/components/breadcrumb/breadcrumb-divider.svelte +2 -2
- package/dist/components/breadcrumb/breadcrumb-item.svelte +2 -2
- package/dist/components/breadcrumb/breadcrumb.svelte +10 -5
- package/dist/components/breadcrumb/docs/llms.md +11 -11
- package/dist/components/breadcrumb/types.d.ts +7 -7
- package/dist/components/button/button.svelte +2 -2
- package/dist/components/button/docs/llms.md +17 -17
- package/dist/components/button/split-button.svelte +7 -7
- package/dist/components/button/types.d.ts +5 -5
- package/dist/components/calendar-date-picker/calendar-date-picker.svelte +98 -10
- package/dist/components/calendar-date-picker/calendar-date-picker.svelte.d.ts +1 -1
- package/dist/components/calendar-date-picker/docs/llms.md +19 -14
- package/dist/components/calendar-date-picker/types.d.ts +22 -8
- package/dist/components/calendar-view/calendar-view-days.svelte +3 -2
- package/dist/components/calendar-view/calendar-view-grid.js +8 -3
- package/dist/components/calendar-view/calendar-view-item.svelte +10 -4
- package/dist/components/calendar-view/calendar-view-months.svelte +3 -2
- package/dist/components/calendar-view/calendar-view-years.svelte +3 -2
- package/dist/components/calendar-view/calendar-view.svelte +11 -4
- package/dist/components/calendar-view/calendar-view.svelte.js +5 -0
- package/dist/components/calendar-view/docs/llms.md +20 -19
- package/dist/components/calendar-view/types.d.ts +6 -1
- package/dist/components/card/card-footer.svelte +2 -2
- package/dist/components/card/card-header.svelte +5 -4
- package/dist/components/card/card-preview.svelte +13 -2
- package/dist/components/card/card.svelte +5 -5
- package/dist/components/card/docs/llms.md +22 -21
- package/dist/components/card/types.d.ts +8 -4
- package/dist/components/checkbox/checkbox.svelte +47 -26
- package/dist/components/checkbox/checkbox.svelte.d.ts +3 -24
- package/dist/components/checkbox/docs/llms.md +24 -23
- package/dist/components/checkbox/types.d.ts +10 -23
- package/dist/components/date-picker/date-picker.svelte +98 -27
- package/dist/components/date-picker/date-picker.svelte.d.ts +1 -1
- package/dist/components/date-picker/docs/llms.md +23 -20
- package/dist/components/date-picker/types.d.ts +24 -15
- package/dist/components/dialog/dialog-actions.svelte +2 -2
- package/dist/components/dialog/dialog-content.svelte +2 -2
- package/dist/components/dialog/dialog-surface.svelte +102 -9
- package/dist/components/dialog/dialog-title.svelte +2 -2
- package/dist/components/dialog/dialog-trigger.svelte +2 -2
- package/dist/components/dialog/dialog.svelte +22 -11
- package/dist/components/dialog/docs/llms.md +56 -19
- package/dist/components/dialog/types.d.ts +25 -7
- package/dist/components/divider/divider.svelte +6 -4
- package/dist/components/divider/types.d.ts +1 -1
- package/dist/components/dropdown/docs/llms.md +30 -28
- package/dist/components/dropdown/dropdown-option.svelte +17 -5
- package/dist/components/dropdown/dropdown.svelte +182 -84
- package/dist/components/dropdown/dropdown.svelte.d.ts +1 -1
- package/dist/components/dropdown/types.d.ts +26 -20
- package/dist/components/dropdown-select/docs/llms.md +24 -22
- package/dist/components/dropdown-select/dropdown-select-option.svelte +2 -2
- package/dist/components/dropdown-select/dropdown-select.svelte +42 -7
- package/dist/components/dropdown-select/types.d.ts +4 -4
- package/dist/components/expander/docs/llms.md +3 -3
- package/dist/components/expander/expander.svelte +13 -8
- package/dist/components/expander/types.d.ts +5 -5
- package/dist/components/flyout/docs/llms.md +1 -1
- package/dist/components/flyout/flyout.svelte +17 -6
- package/dist/components/flyout/types.d.ts +1 -1
- package/dist/components/hyperlink/docs/llms.md +6 -6
- package/dist/components/hyperlink/hyperlink.svelte +13 -4
- package/dist/components/hyperlink/types.d.ts +1 -1
- package/dist/components/info-bar/docs/llms.md +11 -10
- package/dist/components/info-bar/info-bar.svelte +3 -2
- package/dist/components/info-bar/types.d.ts +4 -0
- package/dist/components/label/docs/llms.md +75 -22
- package/dist/components/label/label-context.d.ts +14 -0
- package/dist/components/label/label-context.js +10 -0
- package/dist/components/label/label.svelte +153 -30
- package/dist/components/label/label.svelte.d.ts +1 -1
- package/dist/components/label/types.d.ts +48 -4
- package/dist/components/list-view/docs/llms.md +103 -33
- package/dist/components/list-view/list-view-item-branch.svelte +257 -0
- package/dist/components/list-view/list-view-item-branch.svelte.d.ts +4 -0
- package/dist/components/list-view/list-view-item.svelte +164 -46
- package/dist/components/list-view/list-view-item.svelte.d.ts +5 -5
- package/dist/components/list-view/list-view.svelte +73 -25
- package/dist/components/list-view/types.d.ts +71 -8
- package/dist/components/list-view/utils.d.ts +10 -0
- package/dist/components/list-view/utils.js +17 -1
- package/dist/components/menu/docs/llms.md +98 -15
- package/dist/components/menu/menu-command-bar-item.svelte +61 -0
- package/dist/components/menu/menu-command-bar-item.svelte.d.ts +14 -0
- package/dist/components/menu/menu-command-bar.svelte +218 -0
- package/dist/components/menu/menu-command-bar.svelte.d.ts +21 -0
- package/dist/components/menu/menu-group.svelte +6 -3
- package/dist/components/menu/menu-item-checkbox.svelte +5 -4
- package/dist/components/menu/menu-item-radio.svelte +5 -4
- package/dist/components/menu/menu-item-switch.svelte +5 -4
- package/dist/components/menu/menu-item.svelte +5 -5
- package/dist/components/menu/menu-item.svelte.d.ts +2 -3
- package/dist/components/menu/menu-list.svelte +10 -1
- package/dist/components/menu/menu-popover.svelte +9 -5
- package/dist/components/menu/menu-trigger.svelte +2 -1
- package/dist/components/menu/menu.svelte.js +1 -0
- package/dist/components/menu/types.d.ts +62 -7
- package/dist/components/number-box/docs/llms.md +6 -4
- package/dist/components/number-box/number-box.svelte +35 -29
- package/dist/components/number-box/number-box.svelte.d.ts +1 -1
- package/dist/components/number-box/types.d.ts +1 -1
- package/dist/components/persona/docs/llms.md +29 -25
- package/dist/components/persona/persona.svelte +8 -6
- package/dist/components/persona/types.d.ts +4 -3
- package/dist/components/progress-bar/docs/llms.md +13 -13
- package/dist/components/progress-bar/progress-bar.svelte +6 -6
- package/dist/components/progress-bar/types.d.ts +4 -4
- package/dist/components/progress-ring/docs/llms.md +14 -14
- package/dist/components/progress-ring/progress-ring.svelte +5 -5
- package/dist/components/progress-ring/types.d.ts +3 -3
- package/dist/components/radio-button/docs/llms.md +11 -8
- package/dist/components/radio-button/radio-button.svelte +38 -12
- package/dist/components/radio-button/radio-button.svelte.d.ts +1 -1
- package/dist/components/radio-button/types.d.ts +11 -8
- package/dist/components/rating/docs/llms.md +15 -14
- package/dist/components/rating/rating.svelte +66 -29
- package/dist/components/rating/rating.svelte.d.ts +1 -1
- package/dist/components/rating/types.d.ts +8 -8
- package/dist/components/side-nav/docs/llms.md +110 -0
- package/dist/components/side-nav/side-nav-branch.svelte +43 -0
- package/dist/components/side-nav/side-nav-branch.svelte.d.ts +4 -0
- package/dist/components/side-nav/side-nav-item.svelte +75 -0
- package/dist/components/side-nav/side-nav-item.svelte.d.ts +25 -0
- package/dist/components/side-nav/side-nav-list.svelte +32 -0
- package/dist/components/side-nav/side-nav-list.svelte.d.ts +7 -0
- package/dist/components/side-nav/side-nav.d.ts +2 -0
- package/dist/components/side-nav/side-nav.js +2 -0
- package/dist/components/side-nav/side-nav.svelte +355 -0
- package/dist/components/side-nav/side-nav.svelte.d.ts +24 -0
- package/dist/components/side-nav/types.d.ts +149 -0
- package/dist/components/side-nav/types.js +1 -0
- package/dist/components/skeleton/docs/llms.md +1 -1
- package/dist/components/skeleton/skeleton.svelte +2 -2
- package/dist/components/skeleton/types.d.ts +1 -1
- package/dist/components/slider/docs/llms.md +31 -28
- package/dist/components/slider/slider.svelte +126 -61
- package/dist/components/slider/slider.svelte.d.ts +1 -3
- package/dist/components/slider/types.d.ts +21 -14
- package/dist/components/tab-view/docs/llms.md +7 -7
- package/dist/components/tab-view/tab-view-tab.svelte +16 -14
- package/dist/components/tab-view/tab-view.svelte +16 -9
- package/dist/components/tab-view/types.d.ts +6 -6
- package/dist/components/table/docs/llms.md +38 -33
- package/dist/components/table/table-body.svelte +2 -2
- package/dist/components/table/table-cell-actions.svelte +8 -2
- package/dist/components/table/table-cell-layout.svelte +2 -2
- package/dist/components/table/table-cell.svelte +2 -2
- package/dist/components/table/table-header-cell.svelte +2 -2
- package/dist/components/table/table-header.svelte +2 -2
- package/dist/components/table/table-row.svelte +2 -2
- package/dist/components/table/table-selection-cell.svelte +6 -6
- package/dist/components/table/table.svelte +2 -2
- package/dist/components/table/types.d.ts +11 -11
- package/dist/components/tag/docs/llms.md +26 -26
- package/dist/components/tag/tag-group.svelte +2 -2
- package/dist/components/tag/tag.svelte +13 -12
- package/dist/components/tag/types.d.ts +6 -4
- package/dist/components/tag-picker/docs/llms.md +61 -55
- package/dist/components/tag-picker/option-group.svelte +17 -4
- package/dist/components/tag-picker/option-group.svelte.d.ts +1 -1
- package/dist/components/tag-picker/option.svelte +15 -4
- package/dist/components/tag-picker/tag-picker.svelte +137 -65
- package/dist/components/tag-picker/tag-picker.svelte.d.ts +2 -2
- package/dist/components/tag-picker/types.d.ts +36 -16
- package/dist/components/text-box/docs/llms.md +31 -4
- package/dist/components/text-box/text-box-button.svelte +3 -3
- package/dist/components/text-box/text-box-button.svelte.d.ts +1 -1
- package/dist/components/text-box/text-box.svelte +41 -14
- package/dist/components/text-box/types.d.ts +5 -5
- package/dist/components/textarea/docs/llms.md +4 -3
- package/dist/components/textarea/textarea.svelte +14 -6
- package/dist/components/textarea/types.d.ts +2 -4
- package/dist/components/time-picker/docs/llms.md +18 -15
- package/dist/components/time-picker/time-picker.svelte +133 -33
- package/dist/components/time-picker/time-picker.svelte.d.ts +1 -1
- package/dist/components/time-picker/types.d.ts +23 -13
- package/dist/components/title-bar/docs/llms.md +382 -0
- package/dist/components/title-bar/title-bar-left-controls.svelte +215 -0
- package/dist/components/title-bar/title-bar-left-controls.svelte.d.ts +22 -0
- package/dist/components/title-bar/title-bar-right-controls.svelte +190 -0
- package/dist/components/title-bar/title-bar-right-controls.svelte.d.ts +27 -0
- package/dist/components/title-bar/title-bar.d.ts +3 -0
- package/dist/components/title-bar/title-bar.js +4 -0
- package/dist/components/title-bar/title-bar.svelte +224 -0
- package/dist/components/title-bar/title-bar.svelte.d.ts +26 -0
- package/dist/components/title-bar/types.d.ts +165 -0
- package/dist/components/title-bar/types.js +1 -0
- package/dist/components/toggle-switch/docs/llms.md +11 -9
- package/dist/components/toggle-switch/toggle-switch.svelte +23 -14
- package/dist/components/toggle-switch/toggle-switch.svelte.d.ts +1 -1
- package/dist/components/toggle-switch/types.d.ts +12 -10
- package/dist/components/tooltip/docs/llms.md +1 -1
- package/dist/components/tooltip/tooltip.svelte +5 -4
- package/dist/components/tooltip/types.d.ts +1 -1
- package/dist/components/top-nav/docs/llms.md +1 -1
- package/dist/components/top-nav/top-nav-item.svelte +2 -2
- package/dist/components/top-nav/top-nav.svelte +2 -2
- package/dist/components/top-nav/types.d.ts +2 -2
- package/dist/components/tree-view/docs/llms.md +11 -11
- package/dist/components/tree-view/tree-view-item-content.svelte +3 -3
- package/dist/components/tree-view/tree-view-item.svelte +13 -5
- package/dist/components/tree-view/tree-view.svelte +20 -5
- package/dist/components/tree-view/tree-view.svelte.d.ts +1 -1
- package/dist/components/tree-view/tree-view.svelte.js +31 -3
- package/dist/components/tree-view/types.d.ts +7 -3
- package/dist/index.d.ts +18 -0
- package/dist/index.js +20 -0
- package/dist/internal/components/dynamic-carousel/dynamic-carousel.svelte +26 -5
- package/dist/internal/components/dynamic-carousel/dynamic-carousel.svelte.d.ts +2 -0
- package/dist/internal/index.d.ts +1 -0
- package/dist/internal/index.js +1 -0
- package/dist/internal/native-field.svelte.d.ts +44 -0
- package/dist/internal/native-field.svelte.js +85 -0
- package/dist/internal/utils.d.ts +16 -2
- package/dist/internal/utils.js +25 -3
- package/dist/types/index.d.ts +3 -3
- package/package.json +50 -36
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { tick } from 'svelte';
|
|
2
2
|
import { SvelteDate } from 'svelte/reactivity';
|
|
3
|
-
import { compareDates } from './calendar-view.svelte.js';
|
|
3
|
+
import { compareDates, dateKey } from './calendar-view.svelte.js';
|
|
4
4
|
export const CALENDAR_GRID_CONFIG = {
|
|
5
5
|
root: { manageSpecialKeys: { Home: true, End: true } },
|
|
6
6
|
mover: {
|
|
@@ -53,7 +53,10 @@ function amountFor(direction, columns) {
|
|
|
53
53
|
/** The date a rendered cell stands for. */
|
|
54
54
|
export function cellDate(element) {
|
|
55
55
|
const value = element?.getAttribute?.('data-date');
|
|
56
|
-
|
|
56
|
+
if (!value)
|
|
57
|
+
return null;
|
|
58
|
+
const [year, month, day] = value.split('-').map(Number);
|
|
59
|
+
return new SvelteDate(year, month - 1, day);
|
|
57
60
|
}
|
|
58
61
|
/** Precision at which a date names exactly one cell of a view. */
|
|
59
62
|
export const VIEW_PRECISION = {
|
|
@@ -115,7 +118,9 @@ export function createCalendarNavigation({ grid, body, page, disabled, blackout,
|
|
|
115
118
|
updatePage(Math.sign(amount), 'neutral');
|
|
116
119
|
await tick();
|
|
117
120
|
}
|
|
118
|
-
body()
|
|
121
|
+
body()
|
|
122
|
+
?.querySelector(`button[data-date="${dateKey(target)}"]`)
|
|
123
|
+
?.focus();
|
|
119
124
|
}
|
|
120
125
|
return (event) => {
|
|
121
126
|
const amount = amountFor(event.direction, grid.columns);
|
|
@@ -17,21 +17,27 @@
|
|
|
17
17
|
</script>
|
|
18
18
|
|
|
19
19
|
<div
|
|
20
|
+
{...attributes}
|
|
20
21
|
class={[
|
|
21
22
|
'fs-calendar-view-item',
|
|
22
23
|
`variant-${variant === 'day' ? 'day' : 'month-year'}`,
|
|
23
|
-
rangePosition && `in-range range-${rangePosition}
|
|
24
|
+
rangePosition && `in-range range-${rangePosition}`,
|
|
25
|
+
attributes?.class
|
|
24
26
|
]}
|
|
25
27
|
role="gridcell"
|
|
26
28
|
aria-selected={!!selected || rangePosition !== undefined}
|
|
27
|
-
{...attributes}
|
|
28
29
|
>
|
|
29
30
|
<button
|
|
31
|
+
{...buttonAttributes}
|
|
30
32
|
type="button"
|
|
31
|
-
class={[
|
|
33
|
+
class={[
|
|
34
|
+
'calendar-item-button',
|
|
35
|
+
{ selected, disabled, current, blackout },
|
|
36
|
+
outOfRange && 'out-of-range',
|
|
37
|
+
buttonAttributes?.class
|
|
38
|
+
]}
|
|
32
39
|
aria-disabled={disabled}
|
|
33
40
|
{disabled}
|
|
34
|
-
{...buttonAttributes}
|
|
35
41
|
>
|
|
36
42
|
{#if header}
|
|
37
43
|
<small>{header}</small>
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import CalendarViewItem from './calendar-view-item.svelte';
|
|
5
5
|
import {
|
|
6
6
|
compareDates,
|
|
7
|
+
dateKey,
|
|
7
8
|
getCalendarMonths,
|
|
8
9
|
getCalendarViewContext,
|
|
9
10
|
getMonthLocale,
|
|
@@ -124,11 +125,11 @@
|
|
|
124
125
|
{selected}
|
|
125
126
|
variant="monthYear"
|
|
126
127
|
outOfRange={!inYear}
|
|
127
|
-
current={compareDates(month,
|
|
128
|
+
current={compareDates(month, CalendarContext.config.today, 'month')}
|
|
128
129
|
buttonAttributes={{
|
|
129
130
|
tabindex: firstFocusableMonth && compareDates(firstFocusableMonth, month, 'month') ? 0 : -1,
|
|
130
131
|
'aria-label': monthLabel(month),
|
|
131
|
-
'data-date': month
|
|
132
|
+
'data-date': dateKey(month),
|
|
132
133
|
onclick: (e: MouseEvent) => {
|
|
133
134
|
selectMonth(e, month);
|
|
134
135
|
}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import CalendarViewItem from './calendar-view-item.svelte';
|
|
5
5
|
import {
|
|
6
6
|
compareDates,
|
|
7
|
+
dateKey,
|
|
7
8
|
getCalendarViewContext,
|
|
8
9
|
getCalendarYears,
|
|
9
10
|
indexOfDate,
|
|
@@ -123,11 +124,11 @@
|
|
|
123
124
|
{selected}
|
|
124
125
|
variant="monthYear"
|
|
125
126
|
outOfRange={!inDecade}
|
|
126
|
-
current={compareDates(year,
|
|
127
|
+
current={compareDates(year, CalendarContext.config.today, 'year')}
|
|
127
128
|
buttonAttributes={{
|
|
128
129
|
tabindex: firstFocusableYear && compareDates(firstFocusableYear, year, 'year') ? 0 : -1,
|
|
129
130
|
'aria-label': yearLabel(year),
|
|
130
|
-
'data-date': year
|
|
131
|
+
'data-date': dateKey(year),
|
|
131
132
|
onclick: (e: MouseEvent) => {
|
|
132
133
|
selectYear(e, year);
|
|
133
134
|
}
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
} from './types.js';
|
|
39
39
|
|
|
40
40
|
let {
|
|
41
|
-
ref = $bindable(),
|
|
41
|
+
ref = $bindable(null),
|
|
42
42
|
value = $bindable(null),
|
|
43
43
|
range = $bindable({ start: null, end: null }),
|
|
44
44
|
view = 'days',
|
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
blackoutBreaksRange,
|
|
47
47
|
minDate,
|
|
48
48
|
maxDate,
|
|
49
|
+
today,
|
|
49
50
|
locale = 'en-US',
|
|
50
51
|
weekStart = 1,
|
|
51
52
|
blackoutDates,
|
|
@@ -65,7 +66,9 @@
|
|
|
65
66
|
|
|
66
67
|
let pageAnimationDuration = $state(333);
|
|
67
68
|
|
|
68
|
-
|
|
69
|
+
const _today = $derived(today ?? new Date());
|
|
70
|
+
|
|
71
|
+
let firstValue = $derived((Array.isArray(value) ? value[0] : value) ?? _today);
|
|
69
72
|
|
|
70
73
|
// svelte-ignore state_referenced_locally
|
|
71
74
|
let page = $state(
|
|
@@ -205,6 +208,9 @@
|
|
|
205
208
|
get maxDate() {
|
|
206
209
|
return maxDate;
|
|
207
210
|
},
|
|
211
|
+
get today() {
|
|
212
|
+
return _today;
|
|
213
|
+
},
|
|
208
214
|
get locale() {
|
|
209
215
|
return locale;
|
|
210
216
|
},
|
|
@@ -340,7 +346,8 @@ A calendar view lets a user view and interact with a calendar that they can navi
|
|
|
340
346
|
This implementation is originally made by Tropix126 in his FluentSvelte library, I have changed several things but thanks to him for the original work.
|
|
341
347
|
-->
|
|
342
348
|
<div
|
|
343
|
-
|
|
349
|
+
{...attributes}
|
|
350
|
+
class={['fs-calendar-view', { floating }, attributes?.class]}
|
|
344
351
|
bind:this={ref}
|
|
345
352
|
in:flyToOffset={floating && floating.ref
|
|
346
353
|
? {
|
|
@@ -356,7 +363,6 @@ This implementation is originally made by Tropix126 in his FluentSvelte library,
|
|
|
356
363
|
}
|
|
357
364
|
: undefined}
|
|
358
365
|
{@attach floating?.ref ? _floating(floating.ref, floating.positionConfig) : undefined}
|
|
359
|
-
{...attributes}
|
|
360
366
|
>
|
|
361
367
|
<Flyout>
|
|
362
368
|
<CalendarViewControls />
|
|
@@ -418,6 +424,7 @@ This implementation is originally made by Tropix126 in his FluentSvelte library,
|
|
|
418
424
|
position: absolute;
|
|
419
425
|
top: 0;
|
|
420
426
|
left: 0;
|
|
427
|
+
z-index: 110;
|
|
421
428
|
}
|
|
422
429
|
& .calendar-wrapper {
|
|
423
430
|
overflow: hidden;
|
|
@@ -10,6 +10,11 @@ const DAY_MS = 86_400_000;
|
|
|
10
10
|
* `range` or a `value` carrying a time, and a range must not change meaning because
|
|
11
11
|
* one of its ends happens to be half past two.
|
|
12
12
|
*/
|
|
13
|
+
/** The local calendar date of a cell as `yyyy-mm-dd`: unlike a timestamp, the server and the browser agree on it. */
|
|
14
|
+
export function dateKey(date) {
|
|
15
|
+
const pad = (n) => String(n).padStart(2, '0');
|
|
16
|
+
return `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;
|
|
17
|
+
}
|
|
13
18
|
export function startOfDay(date) {
|
|
14
19
|
return new SvelteDate(date.getFullYear(), date.getMonth(), date.getDate());
|
|
15
20
|
}
|
|
@@ -85,25 +85,26 @@ changing it from the header button leaves focus on the button.
|
|
|
85
85
|
<!-- DO NOT EDIT THIS SECTION (propsmith generated) -->
|
|
86
86
|
<!-- props:CalendarViewProps -->
|
|
87
87
|
|
|
88
|
-
| Name | Type | Default | Description
|
|
89
|
-
| -------------------------- | ------------------------------------------------------------------- | ---------------------------- |
|
|
90
|
-
| `ref` _bindable_ | `HTMLDivElement`
|
|
91
|
-
| `value` _bindable_ | `Date` | `Date[]` | `null` | `null` | The selected date, or an array of dates when `selectionMode` is `'multiple'`. Unused by `'range'`.
|
|
92
|
-
| `selectionMode` | `'single'` | `'multiple'` | `'range'` | `'single'` | How many dates the grid hands out, and in what shape.
|
|
93
|
-
| `range` _bindable_ | `{ start: Date` | `null; end: Date` | `null; }` | `{ start: null, end: null }` | The picked range. Only read and written when `selectionMode` is `'range'`, and `end` stays `null` until the range is closed.
|
|
94
|
-
| `blackoutBreaksRange` | `boolean` | `false` | Stop a range from spanning a blacked-out date.
|
|
95
|
-
| `blackoutDates` | `Date[]` | | Dates that are rendered but cannot be selected.
|
|
96
|
-
| `headers` | `boolean` | | Labels the first cell of a month or a year with its name.
|
|
97
|
-
| `minDate` | `Date` | | The earliest selectable date.
|
|
98
|
-
| `maxDate` | `Date` | | The latest selectable date.
|
|
99
|
-
| `
|
|
100
|
-
| `
|
|
101
|
-
| `
|
|
102
|
-
| `
|
|
103
|
-
| `
|
|
104
|
-
| `
|
|
105
|
-
| `
|
|
106
|
-
|
|
|
88
|
+
| Name | Type | Default | Description |
|
|
89
|
+
| -------------------------- | ------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
90
|
+
| `ref` _bindable_ | `HTMLDivElement` | `null` | | The DOM reference of the calendar element. |
|
|
91
|
+
| `value` _bindable_ | `Date` | `Date[]` | `null` | `null` | The selected date, or an array of dates when `selectionMode` is `'multiple'`. Unused by `'range'`. |
|
|
92
|
+
| `selectionMode` | `'single'` | `'multiple'` | `'range'` | `'single'` | How many dates the grid hands out, and in what shape. |
|
|
93
|
+
| `range` _bindable_ | `{ start: Date` | `null; end: Date` | `null; }` | `{ start: null, end: null }` | The picked range. Only read and written when `selectionMode` is `'range'`, and `end` stays `null` until the range is closed. |
|
|
94
|
+
| `blackoutBreaksRange` | `boolean` | `false` | Stop a range from spanning a blacked-out date. |
|
|
95
|
+
| `blackoutDates` | `Date[]` | | Dates that are rendered but cannot be selected. |
|
|
96
|
+
| `headers` | `boolean` | | Labels the first cell of a month or a year with its name. |
|
|
97
|
+
| `minDate` | `Date` | | The earliest selectable date. |
|
|
98
|
+
| `maxDate` | `Date` | | The latest selectable date. |
|
|
99
|
+
| `today` | `Date` | `new Date()` | The date the view treats as today: it is highlighted, and the view opens on its month when there is no `value`. Pass it when rendering on the server, built from a year, month and day on both sides, as in `new Date(2024, 2, 5)`: the same instant falls on different days in different time zones. |
|
|
100
|
+
| `view` | `'days'` | `'months'` | `'years'` | `'days'` | The calendar page the view opens on. |
|
|
101
|
+
| `locale` | `string` | `'en-US'` | The locale used to format weekday and month names. |
|
|
102
|
+
| `weekStart` | `number` | `1` | The first day of the week, where 0 is Sunday. |
|
|
103
|
+
| `floating` | `CalendarViewFloating` | | Renders the calendar as a popup anchored to a reference element instead of inline. |
|
|
104
|
+
| `onChange` | `(event: Event, value: Date` | `Date[]` | `null) => void` | | Called whenever the selection changes. Not called in `'range'` mode. |
|
|
105
|
+
| `onRangeChange` | `(event: Event, range: CalendarDateRange) => void` | | Fired on every step of a range, including the one that leaves `end` null. |
|
|
106
|
+
| `onViewChange` | `(event: Event, view: View) => void` | | Called whenever the active calendar page changes. |
|
|
107
|
+
| Element Attributes (`div`) | | | |
|
|
107
108
|
|
|
108
109
|
<!-- /props:CalendarViewProps -->
|
|
109
110
|
|
|
@@ -63,7 +63,7 @@ export type CalendarViewProps = {
|
|
|
63
63
|
/** The DOM reference of the calendar element.
|
|
64
64
|
* @bindable
|
|
65
65
|
*/
|
|
66
|
-
ref?: HTMLDivElement;
|
|
66
|
+
ref?: HTMLDivElement | null;
|
|
67
67
|
/** The selected date, or an array of dates when `selectionMode` is `'multiple'`. Unused by `'range'`.
|
|
68
68
|
* @default null
|
|
69
69
|
* @bindable
|
|
@@ -90,6 +90,10 @@ export type CalendarViewProps = {
|
|
|
90
90
|
minDate?: Date;
|
|
91
91
|
/** The latest selectable date. */
|
|
92
92
|
maxDate?: Date;
|
|
93
|
+
/** The date the view treats as today: it is highlighted, and the view opens on its month when there is no `value`. Pass it when rendering on the server, built from a year, month and day on both sides, as in `new Date(2024, 2, 5)`: the same instant falls on different days in different time zones.
|
|
94
|
+
* @default new Date()
|
|
95
|
+
*/
|
|
96
|
+
today?: Date;
|
|
93
97
|
/** The calendar page the view opens on.
|
|
94
98
|
* @default 'days'
|
|
95
99
|
*/
|
|
@@ -118,6 +122,7 @@ export type CalendarViewContext = FSContext<{
|
|
|
118
122
|
weekStart: number;
|
|
119
123
|
minDate?: Date;
|
|
120
124
|
maxDate?: Date;
|
|
125
|
+
today: Date;
|
|
121
126
|
headers?: boolean;
|
|
122
127
|
blackoutDates?: Date[];
|
|
123
128
|
selectionMode: CalendarSelectionMode;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { RenderSoC } from '../../internal/index.js';
|
|
4
4
|
import { getCardContext } from './card-context.svelte.js';
|
|
5
5
|
|
|
6
|
-
let { ref = $bindable(), class: classes, action, ...attributes }: CardFooterProps = $props();
|
|
6
|
+
let { ref = $bindable(null), class: classes, action, ...attributes }: CardFooterProps = $props();
|
|
7
7
|
|
|
8
8
|
const context = getCardContext();
|
|
9
9
|
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
});
|
|
22
22
|
</script>
|
|
23
23
|
|
|
24
|
-
<div bind:this={ref} class={['fs-card-footer', showFloatingAction && 'with-action', classes]}
|
|
24
|
+
<div {...attributes} bind:this={ref} class={['fs-card-footer', showFloatingAction && 'with-action', classes]}>
|
|
25
25
|
{#if _action}
|
|
26
26
|
<RenderSoC SoC={_action} />
|
|
27
27
|
{/if}
|
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
import { getCardContext } from './card-context.svelte.js';
|
|
5
5
|
|
|
6
6
|
let {
|
|
7
|
-
ref = $bindable(),
|
|
7
|
+
ref = $bindable(null),
|
|
8
8
|
class: classes,
|
|
9
9
|
title,
|
|
10
|
+
headingLevel = 4,
|
|
10
11
|
image,
|
|
11
12
|
imageAlt = '',
|
|
12
13
|
description,
|
|
@@ -31,7 +32,7 @@
|
|
|
31
32
|
});
|
|
32
33
|
</script>
|
|
33
34
|
|
|
34
|
-
<div bind:this={ref} class={['fs-card-header', showFloatingAction && 'with-action', classes]}
|
|
35
|
+
<div {...attributes} bind:this={ref} class={['fs-card-header', showFloatingAction && 'with-action', classes]}>
|
|
35
36
|
{#if typeof image === 'string'}
|
|
36
37
|
<img src={image} alt={imageAlt} />
|
|
37
38
|
{:else if image}
|
|
@@ -40,7 +41,7 @@
|
|
|
40
41
|
{#if description}
|
|
41
42
|
<div class="fs-card-header-content">
|
|
42
43
|
{#if typeof title === 'string'}
|
|
43
|
-
<
|
|
44
|
+
<svelte:element this={`h${headingLevel}`} class="body" id={`${id}-title`}>{title}</svelte:element>
|
|
44
45
|
{:else if title}
|
|
45
46
|
<RenderSoC SoC={title} args={{ id: `${id}-title` }} />
|
|
46
47
|
{/if}
|
|
@@ -51,7 +52,7 @@
|
|
|
51
52
|
{/if}
|
|
52
53
|
</div>
|
|
53
54
|
{:else if typeof title === 'string'}
|
|
54
|
-
<
|
|
55
|
+
<svelte:element this={`h${headingLevel}`} class="body" id={`${id}-title`}>{title}</svelte:element>
|
|
55
56
|
{:else if title}
|
|
56
57
|
<RenderSoC SoC={title} args={{ id: `${id}-title` }} />
|
|
57
58
|
{/if}
|
|
@@ -2,7 +2,14 @@
|
|
|
2
2
|
import type { CardPreviewProps } from './types.js';
|
|
3
3
|
import { getCardContext } from './card-context.svelte.js';
|
|
4
4
|
|
|
5
|
-
let {
|
|
5
|
+
let {
|
|
6
|
+
ref = $bindable(null),
|
|
7
|
+
logoSrc,
|
|
8
|
+
logoAlt = '',
|
|
9
|
+
class: classes,
|
|
10
|
+
children,
|
|
11
|
+
...attributes
|
|
12
|
+
}: CardPreviewProps = $props();
|
|
6
13
|
|
|
7
14
|
const context = getCardContext();
|
|
8
15
|
|
|
@@ -15,7 +22,11 @@
|
|
|
15
22
|
const orientation = $derived(_state.orientation);
|
|
16
23
|
</script>
|
|
17
24
|
|
|
18
|
-
<div
|
|
25
|
+
<div
|
|
26
|
+
{...attributes}
|
|
27
|
+
class={['fs-card-preview', showFloatingAction && 'with-action', orientation, classes]}
|
|
28
|
+
bind:this={ref}
|
|
29
|
+
>
|
|
19
30
|
{@render children?.()}
|
|
20
31
|
<img src={logoSrc} alt={logoAlt} class="fs-card-preview-logo" />
|
|
21
32
|
</div>
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
let {
|
|
13
13
|
as = 'div' as Tag,
|
|
14
|
-
ref = $bindable(),
|
|
14
|
+
ref = $bindable(null),
|
|
15
15
|
orientation = 'horizontal',
|
|
16
16
|
id = FALLBACK_ID,
|
|
17
17
|
selectable = false,
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
class: classes,
|
|
23
23
|
children,
|
|
24
24
|
onclick,
|
|
25
|
+
onkeydown,
|
|
25
26
|
onSelectionChange,
|
|
26
27
|
...attributes
|
|
27
28
|
}: CardProps<Tag> = $props();
|
|
@@ -102,7 +103,7 @@
|
|
|
102
103
|
* consumer named the card itself.
|
|
103
104
|
*/
|
|
104
105
|
let rootLabelledBy = $derived(
|
|
105
|
-
|
|
106
|
+
attributes['aria-labelledby'] ?? (isRootControl && !attributes['aria-label'] ? `${id}-title` : undefined)
|
|
106
107
|
);
|
|
107
108
|
|
|
108
109
|
/** Enter and Space toggle the selection, the same way a pointer click does. */
|
|
@@ -130,6 +131,7 @@
|
|
|
130
131
|
-->
|
|
131
132
|
<svelte:element
|
|
132
133
|
this={_card.as}
|
|
134
|
+
{...attributes}
|
|
133
135
|
class={['fs-card', { actionable, disabled, selected: _card.selected }, orientation, appearance, classes]}
|
|
134
136
|
bind:this={ref}
|
|
135
137
|
{id}
|
|
@@ -139,12 +141,10 @@
|
|
|
139
141
|
aria-disabled={disabled || undefined}
|
|
140
142
|
tabindex={isRootControl && !disabled ? 0 : undefined}
|
|
141
143
|
onclick={(e: MouseEvent) => invokeHandlers(e, [disabled], [context.methods.handleAction])}
|
|
142
|
-
onkeydown={isRootControl
|
|
143
|
-
{...attributes}
|
|
144
|
+
onkeydown={(event: KeyboardEvent) => invokeHandlers(event, disabled, [isRootControl && handleKeydown, onkeydown])}
|
|
144
145
|
>
|
|
145
146
|
{#if selectable && _card.showFloatingAction && as !== 'a'}
|
|
146
147
|
<Checkbox
|
|
147
|
-
wrapperAs="div"
|
|
148
148
|
aria-labelledby={`${id}-title`}
|
|
149
149
|
bind:checked={selected}
|
|
150
150
|
{disabled}
|
|
@@ -177,13 +177,13 @@ The media shown at one edge of the card, with an optional logo overlaid on it.
|
|
|
177
177
|
<!-- DO NOT EDIT THIS SECTION (propsmith generated) -->
|
|
178
178
|
<!-- props:CardPreviewProps -->
|
|
179
179
|
|
|
180
|
-
| Name | Type
|
|
181
|
-
| --------------------------------------------------- |
|
|
182
|
-
| `ref` _bindable_ | `HTMLDivElement` | | The DOM reference of the preview element. |
|
|
183
|
-
| `logoSrc` | `string`
|
|
184
|
-
| `logoAlt` | `string`
|
|
185
|
-
| `children` | `Snippet`
|
|
186
|
-
| `HTMLAttributes<HTMLDivElement>` without `children` |
|
|
180
|
+
| Name | Type | Default | Description |
|
|
181
|
+
| --------------------------------------------------- | ------------------------------ | ------- | --------------------------------------------------------------------------------------- |
|
|
182
|
+
| `ref` _bindable_ | `HTMLDivElement` | `null` | | The DOM reference of the preview element. |
|
|
183
|
+
| `logoSrc` | `string` | | The URL of the logo overlaid on the bottom left corner of the preview. |
|
|
184
|
+
| `logoAlt` | `string` | `''` | The alternative text of the logo. Empty by default, which marks the logo as decorative. |
|
|
185
|
+
| `children` | `Snippet` | | The media to preview, usually an image. |
|
|
186
|
+
| `HTMLAttributes<HTMLDivElement>` without `children` | | | |
|
|
187
187
|
|
|
188
188
|
<!-- /props:CardPreviewProps -->
|
|
189
189
|
|
|
@@ -196,15 +196,16 @@ The title of the card, with an optional image, description and action.
|
|
|
196
196
|
<!-- DO NOT EDIT THIS SECTION (propsmith generated) -->
|
|
197
197
|
<!-- props:CardHeaderProps -->
|
|
198
198
|
|
|
199
|
-
| Name | Type
|
|
200
|
-
| ------------------------------------------------------------ |
|
|
201
|
-
| `ref` _bindable_ | `HTMLDivElement` | | The DOM reference of the header element. |
|
|
202
|
-
| `title` | `Snippet` | `Component` | `string`
|
|
203
|
-
| `
|
|
204
|
-
| `
|
|
205
|
-
| `
|
|
206
|
-
| `
|
|
207
|
-
| `
|
|
199
|
+
| Name | Type | Default | Description |
|
|
200
|
+
| ------------------------------------------------------------ | ---------------------------------------------------------- | ------- | ----------------------------------------------------------------------------------------------------- |
|
|
201
|
+
| `ref` _bindable_ | `HTMLDivElement` | `null` | | The DOM reference of the header element. |
|
|
202
|
+
| `title` | `Snippet` | `Component` | `string` | | The title of the card. A snippet or a component receives the id the floating checkbox is labelled by. |
|
|
203
|
+
| `headingLevel` | `1` | `2` | `3` | `4` | `5` | `6` | `4` | The level of the heading that holds a string title, to fit the headings of the page around it. |
|
|
204
|
+
| `image` | `Snippet` | `Component` | `string` | | The image rendered before the title. A string is used as the `src` of an `<img>`. |
|
|
205
|
+
| `imageAlt` | `string` | `''` | The alternative text of a string image. Empty by default, which marks the image as decorative. |
|
|
206
|
+
| `description` | `Snippet` | `Component` | `string` | | A second line of text below the title. |
|
|
207
|
+
| `action` | `Snippet` | `Component` | | The action rendered at the end of the header. Not available on selectable cards. |
|
|
208
|
+
| `HTMLAttributes<HTMLDivElement>` without `children`, `title` | | | |
|
|
208
209
|
|
|
209
210
|
<!-- /props:CardHeaderProps -->
|
|
210
211
|
|
|
@@ -217,10 +218,10 @@ The actions shown at the bottom of the card.
|
|
|
217
218
|
<!-- DO NOT EDIT THIS SECTION (propsmith generated) -->
|
|
218
219
|
<!-- props:CardFooterProps -->
|
|
219
220
|
|
|
220
|
-
| Name | Type
|
|
221
|
-
| --------------------------------------------------- |
|
|
222
|
-
| `ref` _bindable_ | `HTMLDivElement`
|
|
223
|
-
| `action` | `Snippet` | `Component`
|
|
224
|
-
| `HTMLAttributes<HTMLDivElement>` without `children` |
|
|
221
|
+
| Name | Type | Default | Description |
|
|
222
|
+
| --------------------------------------------------- | ------------------------------ | ------- | -------------------------------------------------------------------------- |
|
|
223
|
+
| `ref` _bindable_ | `HTMLDivElement` | `null` | | The DOM reference of the footer element. |
|
|
224
|
+
| `action` | `Snippet` | `Component` | | The actions rendered inside the footer. Not available on selectable cards. |
|
|
225
|
+
| `HTMLAttributes<HTMLDivElement>` without `children` | | | |
|
|
225
226
|
|
|
226
227
|
<!-- /props:CardFooterProps -->
|
|
@@ -9,7 +9,7 @@ export type CardProps<Tag extends CardTagTypes = 'div'> = {
|
|
|
9
9
|
* @type CardElementDOMType[Tag]
|
|
10
10
|
* @bindable
|
|
11
11
|
*/
|
|
12
|
-
ref?: CardElementDOMType[Tag];
|
|
12
|
+
ref?: CardElementDOMType[Tag] | null;
|
|
13
13
|
/** The DOM element to render.
|
|
14
14
|
* @type 'div' | 'article' | 'section' | 'a'
|
|
15
15
|
* @default 'div'
|
|
@@ -75,7 +75,7 @@ export type CardPreviewProps = {
|
|
|
75
75
|
/** The DOM reference of the preview element.
|
|
76
76
|
* @bindable
|
|
77
77
|
*/
|
|
78
|
-
ref?: HTMLDivElement;
|
|
78
|
+
ref?: HTMLDivElement | null;
|
|
79
79
|
/** The URL of the logo overlaid on the bottom left corner of the preview. */
|
|
80
80
|
logoSrc: string;
|
|
81
81
|
/** The alternative text of the logo. Empty by default, which marks the logo as decorative.
|
|
@@ -90,7 +90,7 @@ export type CardHeaderProps = {
|
|
|
90
90
|
/** The DOM reference of the header element.
|
|
91
91
|
* @bindable
|
|
92
92
|
*/
|
|
93
|
-
ref?: HTMLDivElement;
|
|
93
|
+
ref?: HTMLDivElement | null;
|
|
94
94
|
/** The title of the card. A snippet or a component receives the id the floating checkbox is labelled by.
|
|
95
95
|
* @type Snippet | Component | string
|
|
96
96
|
*/
|
|
@@ -99,6 +99,10 @@ export type CardHeaderProps = {
|
|
|
99
99
|
}]> | Component<{
|
|
100
100
|
id: string;
|
|
101
101
|
}> | string;
|
|
102
|
+
/** The level of the heading that holds a string title, to fit the headings of the page around it.
|
|
103
|
+
* @default 4
|
|
104
|
+
*/
|
|
105
|
+
headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;
|
|
102
106
|
/** The image rendered before the title. A string is used as the `src` of an `<img>`.
|
|
103
107
|
* @type Snippet | Component | string
|
|
104
108
|
*/
|
|
@@ -121,7 +125,7 @@ export type CardFooterProps = {
|
|
|
121
125
|
/** The DOM reference of the footer element.
|
|
122
126
|
* @bindable
|
|
123
127
|
*/
|
|
124
|
-
ref?: HTMLDivElement;
|
|
128
|
+
ref?: HTMLDivElement | null;
|
|
125
129
|
/** The actions rendered inside the footer. Not available on selectable cards.
|
|
126
130
|
* @type Snippet | Component
|
|
127
131
|
*/
|