fluentui-svelte 0.1.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/LICENSE +21 -0
- package/README.md +201 -0
- package/dist/components/auto-suggest-box/auto-suggest-box.d.ts +2 -0
- package/dist/components/auto-suggest-box/auto-suggest-box.js +2 -0
- package/dist/components/auto-suggest-box/auto-suggest-box.svelte +457 -0
- package/dist/components/auto-suggest-box/auto-suggest-box.svelte.d.ts +4 -0
- package/dist/components/auto-suggest-box/docs/llms.md +73 -0
- package/dist/components/auto-suggest-box/option.svelte +82 -0
- package/dist/components/auto-suggest-box/option.svelte.d.ts +4 -0
- package/dist/components/auto-suggest-box/types.d.ts +140 -0
- package/dist/components/auto-suggest-box/types.js +1 -0
- package/dist/components/avatar/avatar.svelte +269 -0
- package/dist/components/avatar/avatar.svelte.d.ts +20 -0
- package/dist/components/avatar/docs/llms.md +92 -0
- package/dist/components/avatar/type.d.ts +63 -0
- package/dist/components/avatar/type.js +1 -0
- package/dist/components/badge/badge-icon.svelte +103 -0
- package/dist/components/badge/badge-icon.svelte.d.ts +25 -0
- package/dist/components/badge/badge.svelte +163 -0
- package/dist/components/badge/badge.svelte.d.ts +20 -0
- package/dist/components/badge/docs/llms.md +133 -0
- package/dist/components/badge/types.d.ts +70 -0
- package/dist/components/badge/types.js +1 -0
- package/dist/components/badge/utils.svelte.d.ts +16 -0
- package/dist/components/badge/utils.svelte.js +35 -0
- package/dist/components/button/button.svelte +203 -0
- package/dist/components/button/button.svelte.d.ts +38 -0
- package/dist/components/button/docs/llms.md +102 -0
- package/dist/components/button/split-button.svelte +66 -0
- package/dist/components/button/split-button.svelte.d.ts +4 -0
- package/dist/components/button/types.d.ts +84 -0
- package/dist/components/button/types.js +1 -0
- package/dist/components/calendar-date-picker/calendar-date-picker.svelte +119 -0
- package/dist/components/calendar-date-picker/calendar-date-picker.svelte.d.ts +4 -0
- package/dist/components/calendar-date-picker/docs/llms.md +33 -0
- package/dist/components/calendar-date-picker/types.d.ts +36 -0
- package/dist/components/calendar-date-picker/types.js +1 -0
- package/dist/components/calendar-view/calendar-view-controls.svelte +115 -0
- package/dist/components/calendar-view/calendar-view-controls.svelte.d.ts +3 -0
- package/dist/components/calendar-view/calendar-view-days.svelte +210 -0
- package/dist/components/calendar-view/calendar-view-days.svelte.d.ts +3 -0
- package/dist/components/calendar-view/calendar-view-grid.d.ts +38 -0
- package/dist/components/calendar-view/calendar-view-grid.js +140 -0
- package/dist/components/calendar-view/calendar-view-header.svelte +66 -0
- package/dist/components/calendar-view/calendar-view-header.svelte.d.ts +18 -0
- package/dist/components/calendar-view/calendar-view-item.svelte +181 -0
- package/dist/components/calendar-view/calendar-view-item.svelte.d.ts +4 -0
- package/dist/components/calendar-view/calendar-view-months.svelte +165 -0
- package/dist/components/calendar-view/calendar-view-months.svelte.d.ts +3 -0
- package/dist/components/calendar-view/calendar-view-years.svelte +161 -0
- package/dist/components/calendar-view/calendar-view-years.svelte.d.ts +3 -0
- package/dist/components/calendar-view/calendar-view.svelte +451 -0
- package/dist/components/calendar-view/calendar-view.svelte.d.ts +9 -0
- package/dist/components/calendar-view/calendar-view.svelte.js +196 -0
- package/dist/components/calendar-view/docs/llms.md +121 -0
- package/dist/components/calendar-view/index.d.ts +1 -0
- package/dist/components/calendar-view/index.js +1 -0
- package/dist/components/calendar-view/types.d.ts +174 -0
- package/dist/components/calendar-view/types.js +1 -0
- package/dist/components/checkbox/checkbox.svelte +171 -0
- package/dist/components/checkbox/checkbox.svelte.d.ts +40 -0
- package/dist/components/checkbox/docs/llms.md +78 -0
- package/dist/components/checkbox/types.d.ts +50 -0
- package/dist/components/checkbox/types.js +1 -0
- package/dist/components/date-picker/date-picker.svelte +381 -0
- package/dist/components/date-picker/date-picker.svelte.d.ts +4 -0
- package/dist/components/date-picker/docs/llms.md +52 -0
- package/dist/components/date-picker/index.d.ts +1 -0
- package/dist/components/date-picker/index.js +1 -0
- package/dist/components/date-picker/types.d.ts +74 -0
- package/dist/components/date-picker/types.js +1 -0
- package/dist/components/dialog/dialog-actions.svelte +37 -0
- package/dist/components/dialog/dialog-actions.svelte.d.ts +4 -0
- package/dist/components/dialog/dialog-content.svelte +17 -0
- package/dist/components/dialog/dialog-content.svelte.d.ts +4 -0
- package/dist/components/dialog/dialog-surface.svelte +95 -0
- package/dist/components/dialog/dialog-surface.svelte.d.ts +4 -0
- package/dist/components/dialog/dialog-title.svelte +33 -0
- package/dist/components/dialog/dialog-title.svelte.d.ts +25 -0
- package/dist/components/dialog/dialog-trigger.svelte +23 -0
- package/dist/components/dialog/dialog-trigger.svelte.d.ts +4 -0
- package/dist/components/dialog/dialog.svelte +64 -0
- package/dist/components/dialog/dialog.svelte.d.ts +7 -0
- package/dist/components/dialog/dialog.svelte.js +2 -0
- package/dist/components/dialog/docs/llms.md +131 -0
- package/dist/components/dialog/types.d.ts +92 -0
- package/dist/components/dialog/types.js +1 -0
- package/dist/components/divider/divider.svelte +120 -0
- package/dist/components/divider/divider.svelte.d.ts +39 -0
- package/dist/components/divider/docs/llms.md +83 -0
- package/dist/components/divider/types.d.ts +32 -0
- package/dist/components/divider/types.js +1 -0
- package/dist/components/dropdown/docs/llms.md +70 -0
- package/dist/components/dropdown/dropdown-context.d.ts +2 -0
- package/dist/components/dropdown/dropdown-context.js +2 -0
- package/dist/components/dropdown/dropdown-option.svelte +31 -0
- package/dist/components/dropdown/dropdown-option.svelte.d.ts +4 -0
- package/dist/components/dropdown/dropdown.svelte +309 -0
- package/dist/components/dropdown/dropdown.svelte.d.ts +4 -0
- package/dist/components/dropdown/types.d.ts +82 -0
- package/dist/components/dropdown/types.js +1 -0
- package/dist/components/dropdown-select/docs/llms.md +72 -0
- package/dist/components/dropdown-select/dropdown-select-option.svelte +87 -0
- package/dist/components/dropdown-select/dropdown-select-option.svelte.d.ts +4 -0
- package/dist/components/dropdown-select/dropdown-select.svelte +165 -0
- package/dist/components/dropdown-select/dropdown-select.svelte.d.ts +4 -0
- package/dist/components/dropdown-select/dropdown-select.svelte.js +48 -0
- package/dist/components/dropdown-select/index.d.ts +2 -0
- package/dist/components/dropdown-select/index.js +2 -0
- package/dist/components/dropdown-select/types.d.ts +46 -0
- package/dist/components/dropdown-select/types.js +1 -0
- package/dist/components/expander/docs/llms.md +88 -0
- package/dist/components/expander/expander.svelte +249 -0
- package/dist/components/expander/expander.svelte.d.ts +21 -0
- package/dist/components/expander/types.d.ts +47 -0
- package/dist/components/expander/types.js +1 -0
- package/dist/components/flyout/docs/llms.md +31 -0
- package/dist/components/flyout/flyout.svelte +148 -0
- package/dist/components/flyout/flyout.svelte.d.ts +19 -0
- package/dist/components/flyout/types.d.ts +36 -0
- package/dist/components/flyout/types.js +1 -0
- package/dist/components/hyperlink/docs/llms.md +33 -0
- package/dist/components/hyperlink/hyperlink.svelte +66 -0
- package/dist/components/hyperlink/hyperlink.svelte.d.ts +16 -0
- package/dist/components/hyperlink/types.d.ts +14 -0
- package/dist/components/hyperlink/types.js +1 -0
- package/dist/components/info-bar/docs/llms.md +81 -0
- package/dist/components/info-bar/info-bar.svelte +140 -0
- package/dist/components/info-bar/info-bar.svelte.d.ts +19 -0
- package/dist/components/info-bar/types.d.ts +27 -0
- package/dist/components/info-bar/types.js +1 -0
- package/dist/components/label/docs/llms.md +67 -0
- package/dist/components/label/label.svelte +95 -0
- package/dist/components/label/label.svelte.d.ts +4 -0
- package/dist/components/label/types.d.ts +32 -0
- package/dist/components/label/types.js +1 -0
- package/dist/components/list-view/docs/llms.md +110 -0
- package/dist/components/list-view/list-view-item.svelte +168 -0
- package/dist/components/list-view/list-view-item.svelte.d.ts +25 -0
- package/dist/components/list-view/list-view.svelte +137 -0
- package/dist/components/list-view/list-view.svelte.d.ts +25 -0
- package/dist/components/list-view/types.d.ts +95 -0
- package/dist/components/list-view/types.js +1 -0
- package/dist/components/list-view/utils.d.ts +6 -0
- package/dist/components/list-view/utils.js +12 -0
- package/dist/components/menu/context-menu-trigger.svelte +84 -0
- package/dist/components/menu/context-menu-trigger.svelte.d.ts +9 -0
- package/dist/components/menu/docs/llms.md +169 -0
- package/dist/components/menu/menu-divider.svelte +9 -0
- package/dist/components/menu/menu-divider.svelte.d.ts +26 -0
- package/dist/components/menu/menu-group.svelte +31 -0
- package/dist/components/menu/menu-group.svelte.d.ts +4 -0
- package/dist/components/menu/menu-item-checkbox.svelte +143 -0
- package/dist/components/menu/menu-item-checkbox.svelte.d.ts +15 -0
- package/dist/components/menu/menu-item-radio.svelte +147 -0
- package/dist/components/menu/menu-item-radio.svelte.d.ts +15 -0
- package/dist/components/menu/menu-item-switch.svelte +194 -0
- package/dist/components/menu/menu-item-switch.svelte.d.ts +15 -0
- package/dist/components/menu/menu-item.svelte +124 -0
- package/dist/components/menu/menu-item.svelte.d.ts +18 -0
- package/dist/components/menu/menu-list.svelte +38 -0
- package/dist/components/menu/menu-list.svelte.d.ts +5 -0
- package/dist/components/menu/menu-popover.svelte +125 -0
- package/dist/components/menu/menu-popover.svelte.d.ts +12 -0
- package/dist/components/menu/menu-trigger.svelte +121 -0
- package/dist/components/menu/menu-trigger.svelte.d.ts +4 -0
- package/dist/components/menu/menu.svelte +124 -0
- package/dist/components/menu/menu.svelte.d.ts +4 -0
- package/dist/components/menu/menu.svelte.js +77 -0
- package/dist/components/menu/types.d.ts +127 -0
- package/dist/components/menu/types.js +1 -0
- package/dist/components/number-box/docs/llms.md +37 -0
- package/dist/components/number-box/number-box.svelte +115 -0
- package/dist/components/number-box/number-box.svelte.d.ts +15 -0
- package/dist/components/number-box/types.d.ts +16 -0
- package/dist/components/number-box/types.js +1 -0
- package/dist/components/persona/docs/llms.md +107 -0
- package/dist/components/persona/persona.svelte +79 -0
- package/dist/components/persona/persona.svelte.d.ts +4 -0
- package/dist/components/persona/types.d.ts +42 -0
- package/dist/components/persona/types.js +1 -0
- package/dist/components/progress-bar/docs/llms.md +67 -0
- package/dist/components/progress-bar/progress-bar.svelte +167 -0
- package/dist/components/progress-bar/progress-bar.svelte.d.ts +15 -0
- package/dist/components/progress-bar/types.d.ts +39 -0
- package/dist/components/progress-bar/types.js +1 -0
- package/dist/components/progress-ring/docs/llms.md +76 -0
- package/dist/components/progress-ring/progress-ring.svelte +145 -0
- package/dist/components/progress-ring/progress-ring.svelte.d.ts +15 -0
- package/dist/components/progress-ring/types.d.ts +42 -0
- package/dist/components/progress-ring/types.js +1 -0
- package/dist/components/radio-button/docs/llms.md +64 -0
- package/dist/components/radio-button/radio-button.svelte +129 -0
- package/dist/components/radio-button/radio-button.svelte.d.ts +19 -0
- package/dist/components/radio-button/types.d.ts +24 -0
- package/dist/components/radio-button/types.js +1 -0
- package/dist/components/skeleton/docs/llms.md +67 -0
- package/dist/components/skeleton/skeleton.svelte +106 -0
- package/dist/components/skeleton/skeleton.svelte.d.ts +39 -0
- package/dist/components/skeleton/types.d.ts +24 -0
- package/dist/components/skeleton/types.js +1 -0
- package/dist/components/slider/docs/llms.md +75 -0
- package/dist/components/slider/slider.svelte +486 -0
- package/dist/components/slider/slider.svelte.d.ts +19 -0
- package/dist/components/slider/types.d.ts +102 -0
- package/dist/components/slider/types.js +1 -0
- package/dist/components/text-box/docs/llms.md +86 -0
- package/dist/components/text-box/text-box-button.svelte +65 -0
- package/dist/components/text-box/text-box-button.svelte.d.ts +9 -0
- package/dist/components/text-box/text-box.svelte +299 -0
- package/dist/components/text-box/text-box.svelte.d.ts +16 -0
- package/dist/components/text-box/types.d.ts +60 -0
- package/dist/components/text-box/types.js +1 -0
- package/dist/components/textarea/docs/llms.md +55 -0
- package/dist/components/textarea/textarea.svelte +151 -0
- package/dist/components/textarea/textarea.svelte.d.ts +17 -0
- package/dist/components/textarea/types.d.ts +33 -0
- package/dist/components/textarea/types.js +1 -0
- package/dist/components/time-picker/docs/llms.md +47 -0
- package/dist/components/time-picker/index.d.ts +1 -0
- package/dist/components/time-picker/index.js +1 -0
- package/dist/components/time-picker/time-picker.svelte +336 -0
- package/dist/components/time-picker/time-picker.svelte.d.ts +4 -0
- package/dist/components/time-picker/types.d.ts +54 -0
- package/dist/components/time-picker/types.js +1 -0
- package/dist/components/toggle-switch/docs/llms.md +39 -0
- package/dist/components/toggle-switch/toggle-switch.svelte +151 -0
- package/dist/components/toggle-switch/toggle-switch.svelte.d.ts +17 -0
- package/dist/components/toggle-switch/types.d.ts +20 -0
- package/dist/components/toggle-switch/types.js +1 -0
- package/dist/components/tooltip/docs/llms.md +74 -0
- package/dist/components/tooltip/tooltip.svelte +246 -0
- package/dist/components/tooltip/tooltip.svelte.d.ts +18 -0
- package/dist/components/tooltip/types.d.ts +67 -0
- package/dist/components/tooltip/types.js +1 -0
- package/dist/components/tree-view/docs/llms.md +117 -0
- package/dist/components/tree-view/tree-view-item-content.svelte +158 -0
- package/dist/components/tree-view/tree-view-item-content.svelte.d.ts +4 -0
- package/dist/components/tree-view/tree-view-item.svelte +197 -0
- package/dist/components/tree-view/tree-view-item.svelte.d.ts +4 -0
- package/dist/components/tree-view/tree-view.svelte +220 -0
- package/dist/components/tree-view/tree-view.svelte.d.ts +4 -0
- package/dist/components/tree-view/tree-view.svelte.js +111 -0
- package/dist/components/tree-view/types.d.ts +185 -0
- package/dist/components/tree-view/types.js +1 -0
- package/dist/css/class-darkmode.css +186 -0
- package/dist/css/media-darkmode.css +189 -0
- package/dist/css/reset.css +53 -0
- package/dist/css/theme.css +276 -0
- package/dist/css/typography.css +67 -0
- package/dist/css/utils.d.ts +1 -0
- package/dist/css/utils.js +153 -0
- package/dist/index.d.ts +63 -0
- package/dist/index.js +129 -0
- package/dist/internal/components/dynamic-carousel/dynamic-carousel.svelte +449 -0
- package/dist/internal/components/dynamic-carousel/dynamic-carousel.svelte.d.ts +22 -0
- package/dist/internal/components/render-soc/render-soc.svelte +29 -0
- package/dist/internal/components/render-soc/render-soc.svelte.d.ts +30 -0
- package/dist/internal/constants.d.ts +26 -0
- package/dist/internal/constants.js +4036 -0
- package/dist/internal/context.d.ts +14 -0
- package/dist/internal/context.js +13 -0
- package/dist/internal/dom-utils.svelte.d.ts +6 -0
- package/dist/internal/dom-utils.svelte.js +46 -0
- package/dist/internal/floating-ui/floating.svelte.d.ts +15 -0
- package/dist/internal/floating-ui/floating.svelte.js +26 -0
- package/dist/internal/floating-ui/utils.d.ts +3 -0
- package/dist/internal/floating-ui/utils.js +30 -0
- package/dist/internal/index.d.ts +9 -0
- package/dist/internal/index.js +9 -0
- package/dist/internal/polyfills/expander.svelte.d.ts +21 -0
- package/dist/internal/polyfills/expander.svelte.js +96 -0
- package/dist/internal/transitions.d.ts +32 -0
- package/dist/internal/transitions.js +37 -0
- package/dist/internal/utils.d.ts +22 -0
- package/dist/internal/utils.js +63 -0
- package/dist/providers/fluentui-svelte/fluentui-svelte.d.ts +19 -0
- package/dist/providers/fluentui-svelte/fluentui-svelte.js +11 -0
- package/dist/providers/fluentui-svelte/fluentui-svelte.svelte +68 -0
- package/dist/providers/fluentui-svelte/fluentui-svelte.svelte.d.ts +9 -0
- package/dist/types/index.d.ts +117 -0
- package/dist/types/index.js +1 -0
- package/package.json +142 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// Start AutoSuggestBox Component
|
|
2
|
+
export { default as AutoSuggestBox } from './components/auto-suggest-box/auto-suggest-box.svelte';
|
|
3
|
+
export { default as AutoSuggestBoxOption } from './components/auto-suggest-box/option.svelte';
|
|
4
|
+
// End AutoSuggestBox Component
|
|
5
|
+
// Start Avatar Component
|
|
6
|
+
export { default as Avatar } from './components/avatar/avatar.svelte';
|
|
7
|
+
// End Avatar Component
|
|
8
|
+
// Start Badge Component
|
|
9
|
+
export { default as Badge } from './components/badge/badge.svelte';
|
|
10
|
+
export { default as BadgeIcon } from './components/badge/badge-icon.svelte';
|
|
11
|
+
// End Badge Component
|
|
12
|
+
// Start Button Component
|
|
13
|
+
export { default as Button } from './components/button/button.svelte';
|
|
14
|
+
export { default as SplitButton } from './components/button/split-button.svelte';
|
|
15
|
+
// End Button Component
|
|
16
|
+
// Start CalendarView Component
|
|
17
|
+
export { default as CalendarView } from './components/calendar-view/calendar-view.svelte';
|
|
18
|
+
export { default as CalendarViewHeader } from './components/calendar-view/calendar-view-header.svelte';
|
|
19
|
+
export { default as CalendarViewControls } from './components/calendar-view/calendar-view-controls.svelte';
|
|
20
|
+
export { default as CalendarViewDays } from './components/calendar-view/calendar-view-days.svelte';
|
|
21
|
+
export { default as CalendarViewMonths } from './components/calendar-view/calendar-view-months.svelte';
|
|
22
|
+
export { default as CalendarViewYears } from './components/calendar-view/calendar-view-years.svelte';
|
|
23
|
+
export { default as CalendarViewItem } from './components/calendar-view/calendar-view-item.svelte';
|
|
24
|
+
// End CalendarView Component
|
|
25
|
+
// Start CalendarDatePicker Component
|
|
26
|
+
export { default as CalendarDatePicker } from './components/calendar-date-picker/calendar-date-picker.svelte';
|
|
27
|
+
// End CalendarDatePicker Component
|
|
28
|
+
// Start Checkbox Component
|
|
29
|
+
export { default as Checkbox } from './components/checkbox/checkbox.svelte';
|
|
30
|
+
// End Checkbox Component
|
|
31
|
+
// Start DatePicker Component
|
|
32
|
+
export { default as DatePicker } from './components/date-picker/date-picker.svelte';
|
|
33
|
+
// End DatePicker Component
|
|
34
|
+
// Start Dialog Component
|
|
35
|
+
export { default as Dialog } from './components/dialog/dialog.svelte';
|
|
36
|
+
export { default as DialogTitle } from './components/dialog/dialog-title.svelte';
|
|
37
|
+
export { default as DialogContent } from './components/dialog/dialog-content.svelte';
|
|
38
|
+
export { default as DialogActions } from './components/dialog/dialog-actions.svelte';
|
|
39
|
+
export { default as DialogSurface } from './components/dialog/dialog-surface.svelte';
|
|
40
|
+
export { default as DialogTrigger } from './components/dialog/dialog-trigger.svelte';
|
|
41
|
+
// End Dialog Component
|
|
42
|
+
// Start Divider Component
|
|
43
|
+
export { default as Divider } from './components/divider/divider.svelte';
|
|
44
|
+
// End Divider Component
|
|
45
|
+
// Start Dropdown Component
|
|
46
|
+
export { default as Dropdown } from './components/dropdown/dropdown.svelte';
|
|
47
|
+
export { default as DropdownOption } from './components/dropdown/dropdown-option.svelte';
|
|
48
|
+
// End Dropdown Component
|
|
49
|
+
// Start DropdownSelect Component
|
|
50
|
+
export { default as DropdownSelect } from './components/dropdown-select/dropdown-select.svelte';
|
|
51
|
+
export { default as DropdownSelectOption } from './components/dropdown-select/dropdown-select-option.svelte';
|
|
52
|
+
// End DropdownSelect Component
|
|
53
|
+
// Start Expander Component
|
|
54
|
+
export { default as Expander } from './components/expander/expander.svelte';
|
|
55
|
+
// End Expander Component
|
|
56
|
+
// Start Flyout Component
|
|
57
|
+
export { default as Flyout } from './components/flyout/flyout.svelte';
|
|
58
|
+
// End Flyout Component
|
|
59
|
+
// Start Hyperlink Component
|
|
60
|
+
export { default as Hyperlink } from './components/hyperlink/hyperlink.svelte';
|
|
61
|
+
// End Hyperlink Component
|
|
62
|
+
// Start InfoBar Component
|
|
63
|
+
export { default as InfoBar } from './components/info-bar/info-bar.svelte';
|
|
64
|
+
// End InfoBar Component
|
|
65
|
+
// Start Label Component
|
|
66
|
+
export { default as Label } from './components/label/label.svelte';
|
|
67
|
+
// End Label Component
|
|
68
|
+
// Start ListView Component
|
|
69
|
+
export { default as ListView } from './components/list-view/list-view.svelte';
|
|
70
|
+
export { default as ListViewItem } from './components/list-view/list-view-item.svelte';
|
|
71
|
+
// End ListView Component
|
|
72
|
+
// Start Menu Component
|
|
73
|
+
export { default as Menu } from './components/menu/menu.svelte';
|
|
74
|
+
export { default as MenuItem } from './components/menu/menu-item.svelte';
|
|
75
|
+
export { default as MenuDivider } from './components/menu/menu-divider.svelte';
|
|
76
|
+
export { default as MenuGroup } from './components/menu/menu-group.svelte';
|
|
77
|
+
export { default as MenuTrigger } from './components/menu/menu-trigger.svelte';
|
|
78
|
+
export { default as MenuPopover } from './components/menu/menu-popover.svelte';
|
|
79
|
+
export { default as MenuList } from './components/menu/menu-list.svelte';
|
|
80
|
+
export { default as MenuItemCheckbox } from './components/menu/menu-item-checkbox.svelte';
|
|
81
|
+
export { default as MenuItemRadio } from './components/menu/menu-item-radio.svelte';
|
|
82
|
+
export { default as MenuItemSwitch } from './components/menu/menu-item-switch.svelte';
|
|
83
|
+
export { default as ContextMenuTrigger } from './components/menu/context-menu-trigger.svelte';
|
|
84
|
+
// End Menu Component
|
|
85
|
+
// Start NumberBox Component
|
|
86
|
+
export { default as NumberBox } from './components/number-box/number-box.svelte';
|
|
87
|
+
// End NumberBox Component
|
|
88
|
+
// Start Persona Component
|
|
89
|
+
export { default as Persona } from './components/persona/persona.svelte';
|
|
90
|
+
// End Persona Component
|
|
91
|
+
// Start ProgressBar Component
|
|
92
|
+
export { default as ProgressBar } from './components/progress-bar/progress-bar.svelte';
|
|
93
|
+
// End ProgressBar Component
|
|
94
|
+
// Start ProgressRing Component
|
|
95
|
+
export { default as ProgressRing } from './components/progress-ring/progress-ring.svelte';
|
|
96
|
+
// End ProgressRing Component
|
|
97
|
+
// Start RadioButton Component
|
|
98
|
+
export { default as RadioButton } from './components/radio-button/radio-button.svelte';
|
|
99
|
+
// End RadioButton Component
|
|
100
|
+
// Start Skeleton Component
|
|
101
|
+
export { default as Skeleton } from './components/skeleton/skeleton.svelte';
|
|
102
|
+
// End Skeleton Component
|
|
103
|
+
// Start Slider Component
|
|
104
|
+
export { default as Slider } from './components/slider/slider.svelte';
|
|
105
|
+
// End Slider Component
|
|
106
|
+
// Start TextArea Component
|
|
107
|
+
export { default as TextArea } from './components/textarea/textarea.svelte';
|
|
108
|
+
// End TextArea Component
|
|
109
|
+
// Start TextBox Component
|
|
110
|
+
export { default as TextBox } from './components/text-box/text-box.svelte';
|
|
111
|
+
export { default as TextBoxButton } from './components/text-box/text-box-button.svelte';
|
|
112
|
+
// End TextBox Component
|
|
113
|
+
// Start TimePicker Component
|
|
114
|
+
export { default as TimePicker } from './components/time-picker/time-picker.svelte';
|
|
115
|
+
// End TimePicker Component
|
|
116
|
+
// Start ToggleSwitch Component
|
|
117
|
+
export { default as ToggleSwitch } from './components/toggle-switch/toggle-switch.svelte';
|
|
118
|
+
// End ToggleSwitch Component
|
|
119
|
+
// Start Tooltip Component
|
|
120
|
+
export { default as Tooltip } from './components/tooltip/tooltip.svelte';
|
|
121
|
+
// End Tooltip Component
|
|
122
|
+
// Start TreeView Component
|
|
123
|
+
export { default as TreeView } from './components/tree-view/tree-view.svelte';
|
|
124
|
+
export { default as TreeViewItem } from './components/tree-view/tree-view-item.svelte';
|
|
125
|
+
export { default as TreeViewItemContent } from './components/tree-view/tree-view-item-content.svelte';
|
|
126
|
+
// End TreeView Component
|
|
127
|
+
// Start FluentUISvelte Component
|
|
128
|
+
export { default as FluentUISvelte } from './providers/fluentui-svelte/fluentui-svelte.svelte';
|
|
129
|
+
// End FluentUISvelte Component
|
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import CaretDownFilled from 'fluentui-icons-svelte/CaretDownFilled.svelte';
|
|
4
|
+
import CaretUpFilled from 'fluentui-icons-svelte/CaretUpFilled.svelte';
|
|
5
|
+
import { Button } from '../../../index.js';
|
|
6
|
+
import { on } from 'svelte/events';
|
|
7
|
+
|
|
8
|
+
let {
|
|
9
|
+
values = Array.from({ length: 12 }, (_, i) => (i + 1).toString().padStart(2, '0')),
|
|
10
|
+
selectedIndex = $bindable(0),
|
|
11
|
+
disabledIndices = [],
|
|
12
|
+
onSelected,
|
|
13
|
+
visibleItems = 7,
|
|
14
|
+
itemHeight = 40,
|
|
15
|
+
infinite = true,
|
|
16
|
+
inertia = true,
|
|
17
|
+
children
|
|
18
|
+
}: {
|
|
19
|
+
values?: string[];
|
|
20
|
+
selectedIndex?: number;
|
|
21
|
+
/** Real (0-based, unwrapped) indices the carousel must never rest on. */
|
|
22
|
+
disabledIndices?: number[];
|
|
23
|
+
onSelected?: (value: string, index: number) => void;
|
|
24
|
+
visibleItems?: number;
|
|
25
|
+
itemHeight?: number;
|
|
26
|
+
/** When false, the wheel is bounded (no wrap) and stops at the first/last item. */
|
|
27
|
+
infinite?: boolean;
|
|
28
|
+
/** When false, releasing snaps immediately with no momentum coasting. */
|
|
29
|
+
inertia?: boolean;
|
|
30
|
+
children?: Snippet<[{ value: string; index: number; selected: boolean }]>;
|
|
31
|
+
} = $props();
|
|
32
|
+
|
|
33
|
+
// Reactive state — read by the template and deriveds.
|
|
34
|
+
let scrolling = $state(false);
|
|
35
|
+
// Continuous position for smooth scrolling (in item units, unbounded for infinite scroll).
|
|
36
|
+
// Starts centred on the initially-selected index.
|
|
37
|
+
let displayPos = $state(selectedIndex);
|
|
38
|
+
|
|
39
|
+
// Internal bookkeeping — never read reactively, so plain `let` skips the reactive overhead.
|
|
40
|
+
let isTouching = false;
|
|
41
|
+
let lastTouchY = 0;
|
|
42
|
+
let touchSamples: { t: number; pos: number }[] = [];
|
|
43
|
+
let targetPos = 0;
|
|
44
|
+
let smoothRaf: number | undefined;
|
|
45
|
+
let lastTime = 0;
|
|
46
|
+
|
|
47
|
+
// Inertia
|
|
48
|
+
let wheelTimestamps: number[] = [];
|
|
49
|
+
let wheelDirections: number[] = [];
|
|
50
|
+
let wheelEndTimer: ReturnType<typeof setTimeout> | undefined;
|
|
51
|
+
let inertiaVelocity = 0;
|
|
52
|
+
|
|
53
|
+
const halfVisible = $derived(Math.floor(visibleItems / 2));
|
|
54
|
+
const containerHeight = $derived(visibleItems * itemHeight);
|
|
55
|
+
// Absolute (unwrapped) index of the centred slot — drives the virtual items and the
|
|
56
|
+
// stable, unique DOM ids / aria-activedescendant target.
|
|
57
|
+
const centerIndex = $derived(Math.round(displayPos));
|
|
58
|
+
const disabledSet = $derived(new Set(disabledIndices));
|
|
59
|
+
const maxPos = $derived(values.length - 1);
|
|
60
|
+
|
|
61
|
+
// Map an (unbounded) slot index to a real value index: wrap when infinite, clamp when not.
|
|
62
|
+
function wrapIndex(index: number): number {
|
|
63
|
+
const n = values.length;
|
|
64
|
+
return infinite ? ((index % n) + n) % n : Math.max(0, Math.min(n - 1, index));
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Clamp a continuous position to the valid range when the carousel is bounded.
|
|
68
|
+
function clampPos(pos: number): number {
|
|
69
|
+
return infinite ? pos : Math.max(0, Math.min(maxPos, pos));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Generate virtual items around displayPos for rendering
|
|
73
|
+
const virtualItems = $derived.by(() => {
|
|
74
|
+
const items: { value: string; realIndex: number; visualOffset: number; key: number }[] = [];
|
|
75
|
+
const buffer = halfVisible + 3;
|
|
76
|
+
for (let i = -buffer; i <= buffer; i++) {
|
|
77
|
+
const itemIndex = centerIndex + i;
|
|
78
|
+
// Bounded mode renders empty space past the ends instead of wrapping around.
|
|
79
|
+
if (!infinite && (itemIndex < 0 || itemIndex >= values.length)) continue;
|
|
80
|
+
const realIndex = wrapIndex(itemIndex);
|
|
81
|
+
// Position relative to display center
|
|
82
|
+
const visualOffset = (itemIndex - displayPos) * itemHeight;
|
|
83
|
+
// Key by the absolute (unwrapped) index so each slot keeps its DOM node while
|
|
84
|
+
// scrolling — only its offset moves — instead of remounting at every half-item step.
|
|
85
|
+
items.push({ value: values[realIndex], realIndex, visualOffset, key: itemIndex });
|
|
86
|
+
}
|
|
87
|
+
return items;
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
const currentSelectedIndex = $derived(wrapIndex(centerIndex));
|
|
91
|
+
|
|
92
|
+
// Commit the item nearest `pos` as the selection, notifying the consumer once.
|
|
93
|
+
function commitIndex(pos: number) {
|
|
94
|
+
const newIndex = wrapIndex(Math.round(pos));
|
|
95
|
+
if (newIndex !== selectedIndex) {
|
|
96
|
+
selectedIndex = newIndex;
|
|
97
|
+
onSelected?.(values[newIndex], newIndex);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// Nearest integer position to `pos` whose (wrapped) item is enabled, searching outward
|
|
102
|
+
// with a bias toward `dir`. Returns Math.round(pos) when nothing is disabled (or all is).
|
|
103
|
+
function nearestEnabled(pos: number, dir = 1) {
|
|
104
|
+
const base = Math.round(pos);
|
|
105
|
+
const n = values.length;
|
|
106
|
+
if (disabledSet.size === 0 || disabledSet.size >= n) return base;
|
|
107
|
+
if (!disabledSet.has(wrapIndex(base))) return base;
|
|
108
|
+
const step = dir >= 0 ? 1 : -1;
|
|
109
|
+
for (let d = 1; d <= n; d++) {
|
|
110
|
+
if (!disabledSet.has(wrapIndex(base + d * step))) return base + d * step;
|
|
111
|
+
if (!disabledSet.has(wrapIndex(base - d * step))) return base - d * step;
|
|
112
|
+
}
|
|
113
|
+
return base;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function startSmoothLoop() {
|
|
117
|
+
if (smoothRaf) return;
|
|
118
|
+
lastTime = performance.now();
|
|
119
|
+
function tick(now: number) {
|
|
120
|
+
const dt = Math.min(now - lastTime, 50) / 16.67; // normalize to ~60fps
|
|
121
|
+
lastTime = now;
|
|
122
|
+
|
|
123
|
+
if (inertiaVelocity !== 0) {
|
|
124
|
+
// Inertia mode: apply velocity with decay
|
|
125
|
+
inertiaVelocity *= Math.pow(0.93, dt);
|
|
126
|
+
if (Math.abs(inertiaVelocity) < 0.01) {
|
|
127
|
+
// Snap to the nearest enabled item, keeping the coasting direction.
|
|
128
|
+
targetPos = nearestEnabled(displayPos, inertiaVelocity);
|
|
129
|
+
inertiaVelocity = 0;
|
|
130
|
+
} else {
|
|
131
|
+
targetPos = clampPos(targetPos + inertiaVelocity * dt);
|
|
132
|
+
displayPos = clampPos(displayPos + inertiaVelocity * dt);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Lerp displayPos toward targetPos
|
|
137
|
+
const diff = targetPos - displayPos;
|
|
138
|
+
if (Math.abs(diff) < 0.001) {
|
|
139
|
+
displayPos = targetPos;
|
|
140
|
+
commitIndex(targetPos);
|
|
141
|
+
if (inertiaVelocity === 0) {
|
|
142
|
+
smoothRaf = undefined;
|
|
143
|
+
scrolling = false;
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
} else {
|
|
147
|
+
displayPos += diff * Math.min(0.25 * dt, 1);
|
|
148
|
+
commitIndex(displayPos);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
smoothRaf = requestAnimationFrame(tick);
|
|
152
|
+
}
|
|
153
|
+
smoothRaf = requestAnimationFrame(tick);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function moveBy(delta: number) {
|
|
157
|
+
targetPos = clampPos(nearestEnabled(targetPos + delta, delta));
|
|
158
|
+
inertiaVelocity = 0;
|
|
159
|
+
startSmoothLoop();
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
function stopSmooth() {
|
|
163
|
+
if (smoothRaf) {
|
|
164
|
+
cancelAnimationFrame(smoothRaf);
|
|
165
|
+
smoothRaf = undefined;
|
|
166
|
+
}
|
|
167
|
+
inertiaVelocity = 0;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
function handleWheel(e: WheelEvent) {
|
|
171
|
+
e.preventDefault();
|
|
172
|
+
stopSmooth();
|
|
173
|
+
scrolling = true;
|
|
174
|
+
|
|
175
|
+
const now = performance.now();
|
|
176
|
+
const direction = e.deltaY > 0 ? 1 : -1;
|
|
177
|
+
|
|
178
|
+
wheelTimestamps.push(now);
|
|
179
|
+
wheelDirections.push(direction);
|
|
180
|
+
|
|
181
|
+
// Keep only recent events
|
|
182
|
+
const cutoff = now - 300;
|
|
183
|
+
while (wheelTimestamps.length > 0 && wheelTimestamps[0] < cutoff) {
|
|
184
|
+
wheelTimestamps.shift();
|
|
185
|
+
wheelDirections.shift();
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Move directly 1 step
|
|
189
|
+
targetPos = clampPos(targetPos + direction);
|
|
190
|
+
displayPos = clampPos(displayPos + direction);
|
|
191
|
+
commitIndex(displayPos);
|
|
192
|
+
|
|
193
|
+
clearTimeout(wheelEndTimer);
|
|
194
|
+
wheelEndTimer = setTimeout(() => {
|
|
195
|
+
// Calculate inertia from recent events (only when inertia is enabled).
|
|
196
|
+
if (inertia && wheelTimestamps.length >= 3) {
|
|
197
|
+
const elapsed = wheelTimestamps[wheelTimestamps.length - 1] - wheelTimestamps[0];
|
|
198
|
+
if (elapsed > 0) {
|
|
199
|
+
const avgDir = wheelDirections.reduce((a, b) => a + b, 0) / wheelDirections.length;
|
|
200
|
+
const rate = wheelTimestamps.length / elapsed; // events per ms
|
|
201
|
+
const vel = avgDir * rate * 16 * 1.5; // per-frame velocity
|
|
202
|
+
if (Math.abs(vel) > 0.3) {
|
|
203
|
+
inertiaVelocity = vel;
|
|
204
|
+
targetPos = displayPos;
|
|
205
|
+
startSmoothLoop();
|
|
206
|
+
} else {
|
|
207
|
+
// Snap to nearest enabled item
|
|
208
|
+
targetPos = clampPos(nearestEnabled(displayPos, direction));
|
|
209
|
+
startSmoothLoop();
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
} else {
|
|
213
|
+
targetPos = clampPos(nearestEnabled(displayPos, direction));
|
|
214
|
+
startSmoothLoop();
|
|
215
|
+
}
|
|
216
|
+
wheelTimestamps = [];
|
|
217
|
+
wheelDirections = [];
|
|
218
|
+
}, 80);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
function handleTouchStart(e: TouchEvent) {
|
|
222
|
+
e.preventDefault();
|
|
223
|
+
stopSmooth();
|
|
224
|
+
scrolling = true;
|
|
225
|
+
isTouching = true;
|
|
226
|
+
lastTouchY = e.touches[0].clientY;
|
|
227
|
+
touchSamples = [{ t: performance.now(), pos: displayPos }];
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
function handleTouchMove(e: TouchEvent) {
|
|
231
|
+
if (!isTouching) return;
|
|
232
|
+
e.preventDefault();
|
|
233
|
+
const y = e.touches[0].clientY;
|
|
234
|
+
// Drag 1:1 with the finger by moving the continuous position directly.
|
|
235
|
+
displayPos = clampPos(displayPos - (y - lastTouchY) / itemHeight);
|
|
236
|
+
lastTouchY = y;
|
|
237
|
+
commitIndex(displayPos);
|
|
238
|
+
|
|
239
|
+
const now = performance.now();
|
|
240
|
+
touchSamples.push({ t: now, pos: displayPos });
|
|
241
|
+
const cutoff = now - 90;
|
|
242
|
+
while (touchSamples.length > 2 && touchSamples[0].t < cutoff) touchSamples.shift();
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
function handleTouchEnd() {
|
|
246
|
+
if (!isTouching) return;
|
|
247
|
+
isTouching = false;
|
|
248
|
+
|
|
249
|
+
// Release velocity in item-units per frame (~60fps reference) from recent samples.
|
|
250
|
+
let velocity = 0;
|
|
251
|
+
if (touchSamples.length >= 2) {
|
|
252
|
+
const first = touchSamples[0];
|
|
253
|
+
const last = touchSamples[touchSamples.length - 1];
|
|
254
|
+
const dt = Math.max(1, last.t - first.t);
|
|
255
|
+
velocity = ((last.pos - first.pos) / dt) * 16;
|
|
256
|
+
}
|
|
257
|
+
touchSamples = [];
|
|
258
|
+
|
|
259
|
+
if (inertia && Math.abs(velocity) > 0.05) {
|
|
260
|
+
// Fling: coast with momentum; the inertia loop snaps to the nearest enabled item.
|
|
261
|
+
inertiaVelocity = velocity;
|
|
262
|
+
targetPos = displayPos;
|
|
263
|
+
} else {
|
|
264
|
+
// Released at rest: snap straight to the nearest enabled item.
|
|
265
|
+
inertiaVelocity = 0;
|
|
266
|
+
targetPos = clampPos(nearestEnabled(displayPos, 1));
|
|
267
|
+
}
|
|
268
|
+
startSmoothLoop();
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
function handleKeydown(e: KeyboardEvent) {
|
|
272
|
+
if (e.key === 'ArrowUp') {
|
|
273
|
+
e.preventDefault();
|
|
274
|
+
moveBy(-1);
|
|
275
|
+
} else if (e.key === 'ArrowDown') {
|
|
276
|
+
e.preventDefault();
|
|
277
|
+
moveBy(1);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
// Attach wheel/touch listeners imperatively so they are non-passive: Svelte's declarative
|
|
282
|
+
// on* handlers are passive by default for these events, which forbids preventDefault().
|
|
283
|
+
function bindGestures(node: HTMLDivElement) {
|
|
284
|
+
const off = [
|
|
285
|
+
on(node, 'wheel', handleWheel, { passive: false }),
|
|
286
|
+
on(node, 'touchstart', handleTouchStart, { passive: false }),
|
|
287
|
+
on(node, 'touchmove', handleTouchMove, { passive: false }),
|
|
288
|
+
on(node, 'touchend', handleTouchEnd),
|
|
289
|
+
on(node, 'touchcancel', handleTouchEnd)
|
|
290
|
+
];
|
|
291
|
+
return () => off.forEach((remove) => remove());
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
// Stop any in-flight animation frame and pending wheel-inertia timer on unmount.
|
|
295
|
+
$effect(() => {
|
|
296
|
+
return () => {
|
|
297
|
+
if (smoothRaf) cancelAnimationFrame(smoothRaf);
|
|
298
|
+
clearTimeout(wheelEndTimer);
|
|
299
|
+
};
|
|
300
|
+
});
|
|
301
|
+
</script>
|
|
302
|
+
|
|
303
|
+
<div class="fs-dynamic-carousel" style:--item-height="{itemHeight}px" style:--container-height="{containerHeight}px">
|
|
304
|
+
<Button class="fs-dynamic-carousel-btn" appearance="subtle" aria-label="Previous" onclick={() => moveBy(-1)}>
|
|
305
|
+
<CaretUpFilled />
|
|
306
|
+
</Button>
|
|
307
|
+
<div
|
|
308
|
+
class={['fs-dynamic-carousel-viewport', { scrolling }]}
|
|
309
|
+
{@attach bindGestures}
|
|
310
|
+
onkeydown={handleKeydown}
|
|
311
|
+
role="listbox"
|
|
312
|
+
tabindex="0"
|
|
313
|
+
aria-label="Selector"
|
|
314
|
+
aria-activedescendant="carousel-item-{centerIndex}"
|
|
315
|
+
>
|
|
316
|
+
<div class="fs-dynamic-carousel-track">
|
|
317
|
+
{#each virtualItems as item (item.key)}
|
|
318
|
+
<div
|
|
319
|
+
id="carousel-item-{item.key}"
|
|
320
|
+
class={[
|
|
321
|
+
'fs-dynamic-carousel-item',
|
|
322
|
+
item.realIndex === currentSelectedIndex && 'selected',
|
|
323
|
+
disabledSet.has(item.realIndex) && 'disabled'
|
|
324
|
+
]}
|
|
325
|
+
role="option"
|
|
326
|
+
tabindex="-1"
|
|
327
|
+
aria-selected={item.realIndex === currentSelectedIndex}
|
|
328
|
+
aria-disabled={disabledSet.has(item.realIndex)}
|
|
329
|
+
style:top="{halfVisible * itemHeight + item.visualOffset}px"
|
|
330
|
+
onclick={() => {
|
|
331
|
+
const offset = Math.round(item.visualOffset / itemHeight);
|
|
332
|
+
moveBy(offset);
|
|
333
|
+
}}
|
|
334
|
+
onkeydown={(e) => {
|
|
335
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
336
|
+
e.preventDefault();
|
|
337
|
+
const offset = Math.round(item.visualOffset / itemHeight);
|
|
338
|
+
moveBy(offset);
|
|
339
|
+
}
|
|
340
|
+
}}
|
|
341
|
+
>
|
|
342
|
+
{#if children}
|
|
343
|
+
{@render children({
|
|
344
|
+
value: item.value,
|
|
345
|
+
index: item.realIndex,
|
|
346
|
+
selected: item.realIndex === currentSelectedIndex
|
|
347
|
+
})}
|
|
348
|
+
{:else}
|
|
349
|
+
{item.value}
|
|
350
|
+
{/if}
|
|
351
|
+
</div>
|
|
352
|
+
{/each}
|
|
353
|
+
</div>
|
|
354
|
+
</div>
|
|
355
|
+
<Button class="fs-dynamic-carousel-btn" appearance="subtle" aria-label="Next" onclick={() => moveBy(1)}>
|
|
356
|
+
<CaretDownFilled />
|
|
357
|
+
</Button>
|
|
358
|
+
</div>
|
|
359
|
+
|
|
360
|
+
<style>
|
|
361
|
+
.fs-dynamic-carousel {
|
|
362
|
+
display: flex;
|
|
363
|
+
flex-direction: column;
|
|
364
|
+
align-items: center;
|
|
365
|
+
user-select: none;
|
|
366
|
+
width: fit-content;
|
|
367
|
+
position: relative;
|
|
368
|
+
& :global(.fs-button.fs-dynamic-carousel-btn) {
|
|
369
|
+
padding: 0.6rem;
|
|
370
|
+
position: absolute;
|
|
371
|
+
top: 0;
|
|
372
|
+
left: 0;
|
|
373
|
+
width: 100%;
|
|
374
|
+
z-index: 10;
|
|
375
|
+
justify-content: center;
|
|
376
|
+
align-items: center;
|
|
377
|
+
visibility: hidden;
|
|
378
|
+
background: var(--fs-acrylic-background-default);
|
|
379
|
+
&::before {
|
|
380
|
+
content: '';
|
|
381
|
+
border-radius: calc(var(--fs-control-overlay-border-radius) - 0.063rem);
|
|
382
|
+
width: 100%;
|
|
383
|
+
height: 100%;
|
|
384
|
+
position: absolute;
|
|
385
|
+
inset: 0;
|
|
386
|
+
background: var(--fs-acrilic-noise);
|
|
387
|
+
background-size: 2.5rem;
|
|
388
|
+
opacity: 0.1;
|
|
389
|
+
filter: grayscale(1);
|
|
390
|
+
z-index: 0;
|
|
391
|
+
pointer-events: none;
|
|
392
|
+
}
|
|
393
|
+
&:last-child {
|
|
394
|
+
top: auto;
|
|
395
|
+
bottom: 0;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
& :global(svg) {
|
|
399
|
+
width: 16px;
|
|
400
|
+
height: 16px;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
&:hover :global(.fs-dynamic-carousel-btn) {
|
|
404
|
+
visibility: visible !important;
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
.fs-dynamic-carousel-viewport {
|
|
409
|
+
height: var(--container-height);
|
|
410
|
+
position: relative;
|
|
411
|
+
touch-action: none;
|
|
412
|
+
outline: none;
|
|
413
|
+
overflow: hidden;
|
|
414
|
+
width: 100%;
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
.fs-dynamic-carousel-track {
|
|
418
|
+
position: relative;
|
|
419
|
+
height: 100%;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
.fs-dynamic-carousel-item {
|
|
423
|
+
position: absolute;
|
|
424
|
+
left: 0;
|
|
425
|
+
right: 0;
|
|
426
|
+
height: var(--item-height);
|
|
427
|
+
display: flex;
|
|
428
|
+
align-items: center;
|
|
429
|
+
justify-content: center;
|
|
430
|
+
cursor: pointer;
|
|
431
|
+
border-radius: var(--fs-control-border-radius);
|
|
432
|
+
color: var(--fs-text-secondary);
|
|
433
|
+
|
|
434
|
+
&.selected {
|
|
435
|
+
color: var(--fs-text-on-accent-primary);
|
|
436
|
+
}
|
|
437
|
+
&.disabled {
|
|
438
|
+
color: var(--fs-text-disabled);
|
|
439
|
+
pointer-events: none;
|
|
440
|
+
}
|
|
441
|
+
&:hover:not(.selected) {
|
|
442
|
+
background: var(--fs-control-fill-secondary);
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
.scrolling & {
|
|
446
|
+
pointer-events: none;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
</style>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
values?: string[];
|
|
4
|
+
selectedIndex?: number;
|
|
5
|
+
/** Real (0-based, unwrapped) indices the carousel must never rest on. */
|
|
6
|
+
disabledIndices?: number[];
|
|
7
|
+
onSelected?: (value: string, index: number) => void;
|
|
8
|
+
visibleItems?: number;
|
|
9
|
+
itemHeight?: number;
|
|
10
|
+
/** When false, the wheel is bounded (no wrap) and stops at the first/last item. */
|
|
11
|
+
infinite?: boolean;
|
|
12
|
+
/** When false, releasing snaps immediately with no momentum coasting. */
|
|
13
|
+
inertia?: boolean;
|
|
14
|
+
children?: Snippet<[{
|
|
15
|
+
value: string;
|
|
16
|
+
index: number;
|
|
17
|
+
selected: boolean;
|
|
18
|
+
}]>;
|
|
19
|
+
};
|
|
20
|
+
declare const DynamicCarousel: import("svelte").Component<$$ComponentProps, {}, "selectedIndex">;
|
|
21
|
+
type DynamicCarousel = ReturnType<typeof DynamicCarousel>;
|
|
22
|
+
export default DynamicCarousel;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<!-- eslint-disable @typescript-eslint/no-explicit-any -->
|
|
2
|
+
<script lang="ts" generics="T extends Snippet<unknown[]> | Component<any>">
|
|
3
|
+
import type { Component, Snippet } from 'svelte';
|
|
4
|
+
|
|
5
|
+
// Read more about this here: https://github.com/sveltejs/svelte/issues/9774#issuecomment-2266700153
|
|
6
|
+
const isSnippet = <T extends unknown[]>(value: Snippet<T> | Component): value is Snippet<T> => value.length === 1;
|
|
7
|
+
|
|
8
|
+
const isComponent = <T extends Record<string, any>>(value: Component<T> | Snippet): value is Component<T> =>
|
|
9
|
+
value.length === 2;
|
|
10
|
+
|
|
11
|
+
type SOCProps<G> =
|
|
12
|
+
G extends Snippet<infer A> ? { SoC: T; args: A } : G extends Component<infer P> ? { SoC: T } & P : never;
|
|
13
|
+
|
|
14
|
+
let { SoC, args, ...props }: SOCProps<T> = $props();
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
{#if SoC}
|
|
18
|
+
{#if isSnippet(SoC)}
|
|
19
|
+
{#if args && Array.isArray(args)}
|
|
20
|
+
{/* @ts-expect-error - [any[]] no assignable to never */ null}
|
|
21
|
+
{@render SoC(args)}
|
|
22
|
+
{:else}
|
|
23
|
+
{/* @ts-expect-error - [] is not assignable to never */ null}
|
|
24
|
+
{@render SoC()}
|
|
25
|
+
{/if}
|
|
26
|
+
{:else if isComponent(SoC)}
|
|
27
|
+
<SoC {...props} />
|
|
28
|
+
{/if}
|
|
29
|
+
{/if}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Component, Snippet } from 'svelte';
|
|
2
|
+
declare function $$render<T extends Snippet<unknown[]> | Component<any>>(): {
|
|
3
|
+
props: T extends Snippet<infer A extends unknown[]> ? {
|
|
4
|
+
SoC: T;
|
|
5
|
+
args: A;
|
|
6
|
+
} : T extends Component<infer P extends Record<string, any>, {}, string> ? {
|
|
7
|
+
SoC: T;
|
|
8
|
+
} & P : never;
|
|
9
|
+
exports: {};
|
|
10
|
+
bindings: "";
|
|
11
|
+
slots: {};
|
|
12
|
+
events: {};
|
|
13
|
+
};
|
|
14
|
+
declare class __sveltets_Render<T extends Snippet<unknown[]> | Component<any>> {
|
|
15
|
+
props(): ReturnType<typeof $$render<T>>['props'];
|
|
16
|
+
events(): ReturnType<typeof $$render<T>>['events'];
|
|
17
|
+
slots(): ReturnType<typeof $$render<T>>['slots'];
|
|
18
|
+
bindings(): "";
|
|
19
|
+
exports(): {};
|
|
20
|
+
}
|
|
21
|
+
interface $$IsomorphicComponent {
|
|
22
|
+
new <T extends Snippet<unknown[]> | Component<any>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
|
|
23
|
+
$$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
|
|
24
|
+
} & ReturnType<__sveltets_Render<T>['exports']>;
|
|
25
|
+
<T extends Snippet<unknown[]> | Component<any>>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
|
|
26
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
27
|
+
}
|
|
28
|
+
declare const RenderSoc: $$IsomorphicComponent;
|
|
29
|
+
type RenderSoc<T extends Snippet<unknown[]> | Component<any>> = InstanceType<typeof RenderSoc<T>>;
|
|
30
|
+
export default RenderSoc;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { VirtualElement } from '@floating-ui/dom';
|
|
2
|
+
export declare const EASING: {
|
|
3
|
+
readonly EASE_IN: "ease-in";
|
|
4
|
+
readonly EASE_OUT: "ease-out";
|
|
5
|
+
readonly EASE_IN_OUT: "ease-in-out";
|
|
6
|
+
readonly LINEAR: "linear";
|
|
7
|
+
};
|
|
8
|
+
export declare const DURATION: {
|
|
9
|
+
readonly REDUCED: 0;
|
|
10
|
+
readonly FAST: 167;
|
|
11
|
+
readonly NORMAL: 333;
|
|
12
|
+
readonly SLOW: 500;
|
|
13
|
+
};
|
|
14
|
+
export declare const DIRECTION: {
|
|
15
|
+
readonly DOWN: "down";
|
|
16
|
+
readonly UP: "up";
|
|
17
|
+
readonly LEFT: "left";
|
|
18
|
+
readonly RIGHT: "right";
|
|
19
|
+
};
|
|
20
|
+
export declare const PREFIX = "fs";
|
|
21
|
+
export declare const DEFAULT_OFFSET = 8;
|
|
22
|
+
export declare const VIRTUAL_ELEMENT: VirtualElement;
|
|
23
|
+
export declare const fake: {
|
|
24
|
+
id: string;
|
|
25
|
+
name: string;
|
|
26
|
+
}[];
|