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
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Calendar View
|
|
2
|
+
|
|
3
|
+
An inline calendar for browsing days, months, and years and selecting one date, several
|
|
4
|
+
dates, or a range.
|
|
5
|
+
|
|
6
|
+
## Usage
|
|
7
|
+
|
|
8
|
+
```svelte
|
|
9
|
+
<script>
|
|
10
|
+
import { CalendarView } from 'fluentui-svelte';
|
|
11
|
+
|
|
12
|
+
let value = $state(null);
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<CalendarView bind:value onChange={(e, selection) => console.log(selection)} />
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Examples
|
|
19
|
+
|
|
20
|
+
### Multiple Selection
|
|
21
|
+
|
|
22
|
+
Set `selectionMode` to `multiple` to allow selecting more than one date. `value` then
|
|
23
|
+
holds an array.
|
|
24
|
+
|
|
25
|
+
```svelte
|
|
26
|
+
<CalendarView selectionMode="multiple" />
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Range Selection
|
|
30
|
+
|
|
31
|
+
Set `selectionMode` to `range` to pick a start and an end. The range has its own binding
|
|
32
|
+
rather than sharing `value`, and `end` stays `null` between the two clicks so you can
|
|
33
|
+
tell a half-built range from a range of a single day.
|
|
34
|
+
|
|
35
|
+
```svelte
|
|
36
|
+
<script>
|
|
37
|
+
let range = $state({ start: null, end: null });
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<CalendarView selectionMode="range" bind:range />
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
A range spans blacked-out dates by default, since a blackout usually marks a day that
|
|
44
|
+
cannot be _picked_ rather than one that breaks the period. Set `blackoutBreaksRange`
|
|
45
|
+
for the range to stop at the first blackout.
|
|
46
|
+
|
|
47
|
+
```svelte
|
|
48
|
+
<CalendarView selectionMode="range" bind:range {blackoutDates} blackoutBreaksRange />
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Week Start
|
|
52
|
+
|
|
53
|
+
Use the `weekStart` prop to change the first day of the week (0 = Sunday, 1 = Monday).
|
|
54
|
+
|
|
55
|
+
```svelte
|
|
56
|
+
<CalendarView weekStart={0} />
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Keyboard
|
|
60
|
+
|
|
61
|
+
The grid is driven by [Tabspot](https://github.com/JLAcostaEC/tabspot): the calendar
|
|
62
|
+
registers its table as a grid mover and only adds the paging on top of it.
|
|
63
|
+
|
|
64
|
+
| Key | Action |
|
|
65
|
+
| -------------------------- | ----------------------------------------------------------- |
|
|
66
|
+
| `ArrowLeft` / `ArrowRight` | Previous / next cell, continuing into the neighbouring row. |
|
|
67
|
+
| `ArrowUp` / `ArrowDown` | Same column, one row up / down. |
|
|
68
|
+
| `Home` / `End` | First / last cell of the current row. |
|
|
69
|
+
| `Ctrl` + `ArrowUp` | Zoom out: days to months, months to years. |
|
|
70
|
+
| `Ctrl` + `ArrowDown` | Zoom in: years to months. |
|
|
71
|
+
| `Delete` / `Backspace` | Clear the range. Range selection only. |
|
|
72
|
+
|
|
73
|
+
Moving past the edge of the visible month, year or decade turns the page and keeps
|
|
74
|
+
focus on the date you moved to. Dates outside `minDate`/`maxDate` cannot be focused,
|
|
75
|
+
and `blackoutDates` are stepped over.
|
|
76
|
+
|
|
77
|
+
Focus follows the grid. Opening the calendar as a popup (`floating`) puts focus on the
|
|
78
|
+
selected date, on today, or on the first date of the page, in that order; an inline
|
|
79
|
+
calendar never takes focus on its own. Changing the view from a cell — `Ctrl` + arrow,
|
|
80
|
+
or picking a month or year — carries focus to the matching cell of the new view, while
|
|
81
|
+
changing it from the header button leaves focus on the button.
|
|
82
|
+
|
|
83
|
+
## CalendarView Props
|
|
84
|
+
|
|
85
|
+
| Name | Type | Default | Description |
|
|
86
|
+
| --------------------- | ----------------------------------------------------- | ---------------------------- | ------------------------------------------------------------------------------ |
|
|
87
|
+
| `ref` | bindable `HTMLDivElement` | | The DOM reference of the calendar element. |
|
|
88
|
+
| `value` | bindable `Date \| Date[] \| null` | `null` | The selected date, or an array of dates in `multiple` mode. Unused by `range`. |
|
|
89
|
+
| `selectionMode` | `'single' \| 'multiple' \| 'range'` | `'single'` | How many dates the grid hands out, and in what shape. |
|
|
90
|
+
| `range` | bindable `{ start: Date \| null; end: Date \| null }` | `{ start: null, end: null }` | The picked range. `end` is `null` until the range is closed. |
|
|
91
|
+
| `blackoutBreaksRange` | `boolean` | `false` | Stop a range from spanning a blacked-out date. |
|
|
92
|
+
| `blackoutDates` | `Date[]` | | Dates that are rendered but cannot be selected. |
|
|
93
|
+
| `headers` | `boolean` | | Labels the first cell of a month or a year with its name. |
|
|
94
|
+
| `minDate` | `Date` | | The earliest selectable date. |
|
|
95
|
+
| `maxDate` | `Date` | | The latest selectable date. |
|
|
96
|
+
| `view` | `'days' \| 'months' \| 'years'` | `'days'` | The calendar page the view opens on. |
|
|
97
|
+
| `locale` | `string` | `'en-US'` | The locale used to format weekday and month names. |
|
|
98
|
+
| `weekStart` | `number` | `1` | The first day of the week, where 0 is Sunday. |
|
|
99
|
+
| `floating` | `CalendarViewFloating` | | Renders the calendar as a popup anchored to a reference element. |
|
|
100
|
+
| `onChange` | `(event, value) => void` | | Called whenever the selection changes. Not called in `range` mode. |
|
|
101
|
+
| `onRangeChange` | `(event, range) => void` | | Fired on every step of a range, including the one that leaves `end` null. |
|
|
102
|
+
| `onViewChange` | `(event, view) => void` | | Called whenever the active calendar page changes. |
|
|
103
|
+
|
|
104
|
+
All `div` HTML attributes are forwarded to the root element.
|
|
105
|
+
|
|
106
|
+
## CalendarViewItem Props
|
|
107
|
+
|
|
108
|
+
| Name | Type | Default | Description |
|
|
109
|
+
| ------------------ | ------------------------------- | ------- | --------------------------------------------------------------------------------- |
|
|
110
|
+
| `selected` | `boolean` | | Renders the cell as the selected one. |
|
|
111
|
+
| `disabled` | `boolean` | | Disables the user interaction. |
|
|
112
|
+
| `current` | `boolean` | | Marks the cell as the current date. |
|
|
113
|
+
| `outOfRange` | `boolean` | | Renders the cell as belonging to a neighbouring page. |
|
|
114
|
+
| `blackout` | `boolean` | | Renders the cell as blacked out, so it reads as unavailable rather than disabled. |
|
|
115
|
+
| `rangePosition` | `'start' \| 'between' \| 'end'` | | Set on the days a range covers, which paints the band behind them. |
|
|
116
|
+
| `header` | `string` | | A small label rendered above the cell content. |
|
|
117
|
+
| `variant` | `'day' \| 'monthYear'` | `'day'` | Which shape the cell takes: a circle for a day, a rounded rectangle otherwise. |
|
|
118
|
+
| `children` | `Snippet` | | The content of the cell. |
|
|
119
|
+
| `buttonAttributes` | `HTMLButtonAttributes` | | The attributes to spread on the inner button element. |
|
|
120
|
+
|
|
121
|
+
All `div` HTML attributes are forwarded to the cell element.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as CalendarView } from './calendar-view.svelte';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as CalendarView } from './calendar-view.svelte';
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import type { HTMLAttributes, HTMLButtonAttributes } from 'svelte/elements';
|
|
2
|
+
import type { FSContext } from '../../internal/index.js';
|
|
3
|
+
import type { Snippet } from 'svelte';
|
|
4
|
+
import type { ComputePositionConfig, VirtualElement } from '@floating-ui/dom';
|
|
5
|
+
export type View = 'days' | 'months' | 'years';
|
|
6
|
+
export type AnimationDirection = 'up' | 'down' | 'neutral';
|
|
7
|
+
export type CalendarSelectionMode = 'single' | 'multiple' | 'range';
|
|
8
|
+
export type DateTimeWeekdayFormat = 'long' | 'short' | 'narrow';
|
|
9
|
+
export type DateTimeMonthFormat = 'long' | 'short' | 'narrow' | 'numeric' | '2-digit';
|
|
10
|
+
export type DateComparisonPrecision = 'time' | 'day' | 'month' | 'year' | 'decade';
|
|
11
|
+
export interface WeekdayLocaleOptions {
|
|
12
|
+
locale?: string;
|
|
13
|
+
format?: DateTimeWeekdayFormat;
|
|
14
|
+
offset?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface MonthLocaleOptions {
|
|
17
|
+
locale?: string;
|
|
18
|
+
format?: DateTimeMonthFormat;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* A range of days.
|
|
22
|
+
*
|
|
23
|
+
* `end` stays `null` while the range is half-built
|
|
24
|
+
*/
|
|
25
|
+
export interface CalendarDateRange {
|
|
26
|
+
start: Date | null;
|
|
27
|
+
end: Date | null;
|
|
28
|
+
}
|
|
29
|
+
/** Where a day sits in the painted range: its two ends, or somewhere in between. */
|
|
30
|
+
export type RangePosition = 'start' | 'between' | 'end';
|
|
31
|
+
/** Anchors the calendar to a reference element and positions it with floating-ui. */
|
|
32
|
+
export interface CalendarViewFloating {
|
|
33
|
+
/** The ref element to which the calendar is anchored */
|
|
34
|
+
ref?: HTMLElement | VirtualElement | null;
|
|
35
|
+
/** The floating UI configuration object of the calendar */
|
|
36
|
+
positionConfig?: Partial<ComputePositionConfig>;
|
|
37
|
+
}
|
|
38
|
+
/** Shape of one rendered calendar page, as seen by keyboard navigation. */
|
|
39
|
+
export interface CalendarGrid {
|
|
40
|
+
/** Cells per row. */
|
|
41
|
+
columns: number;
|
|
42
|
+
/** Cells rendered per page. */
|
|
43
|
+
size: number;
|
|
44
|
+
/** Precision at which a date still belongs to the rendered page. */
|
|
45
|
+
precision: DateComparisonPrecision;
|
|
46
|
+
/** `date` moved by `amount` cells along the row axis. */
|
|
47
|
+
shift: (date: Date, amount: number) => Date;
|
|
48
|
+
}
|
|
49
|
+
export interface CalendarNavigationOptions {
|
|
50
|
+
grid: CalendarGrid;
|
|
51
|
+
/** The element rendering the live page. */
|
|
52
|
+
body: () => HTMLElement | null;
|
|
53
|
+
/** The page currently rendered. */
|
|
54
|
+
page: () => Date;
|
|
55
|
+
/** Whether a date is out of the `minDate`/`maxDate` range. */
|
|
56
|
+
disabled: (date: Date) => boolean;
|
|
57
|
+
/** Whether a date is rendered but not selectable. */
|
|
58
|
+
blackout: (date: Date) => boolean;
|
|
59
|
+
updatePage: (amount: number, direction: AnimationDirection) => void;
|
|
60
|
+
}
|
|
61
|
+
/** @propsmith CalendarViewProps */
|
|
62
|
+
export type CalendarViewProps = {
|
|
63
|
+
/** The DOM reference of the calendar element.
|
|
64
|
+
* @bindable
|
|
65
|
+
*/
|
|
66
|
+
ref?: HTMLDivElement;
|
|
67
|
+
/** The selected date, or an array of dates when `selectionMode` is `'multiple'`. Unused by `'range'`.
|
|
68
|
+
* @default null
|
|
69
|
+
* @bindable
|
|
70
|
+
*/
|
|
71
|
+
value?: Date | Date[] | null;
|
|
72
|
+
/** How many dates the grid hands out, and in what shape.
|
|
73
|
+
* @default 'single'
|
|
74
|
+
*/
|
|
75
|
+
selectionMode?: CalendarSelectionMode;
|
|
76
|
+
/** The picked range. Only read and written when `selectionMode` is `'range'`, and `end` stays `null` until the range is closed.
|
|
77
|
+
* @default { start: null, end: null }
|
|
78
|
+
* @bindable
|
|
79
|
+
*/
|
|
80
|
+
range?: CalendarDateRange;
|
|
81
|
+
/** Stop a range from spanning a blacked-out date.
|
|
82
|
+
* @default false
|
|
83
|
+
*/
|
|
84
|
+
blackoutBreaksRange?: boolean;
|
|
85
|
+
/** Dates that are rendered but cannot be selected. */
|
|
86
|
+
blackoutDates?: Date[];
|
|
87
|
+
/** Labels the first cell of a month or a year with its name. */
|
|
88
|
+
headers?: boolean;
|
|
89
|
+
/** The earliest selectable date. */
|
|
90
|
+
minDate?: Date;
|
|
91
|
+
/** The latest selectable date. */
|
|
92
|
+
maxDate?: Date;
|
|
93
|
+
/** The calendar page the view opens on.
|
|
94
|
+
* @default 'days'
|
|
95
|
+
*/
|
|
96
|
+
view?: View;
|
|
97
|
+
/** The locale used to format weekday and month names.
|
|
98
|
+
* @default 'en-US'
|
|
99
|
+
*/
|
|
100
|
+
locale?: string;
|
|
101
|
+
/** The first day of the week, where 0 is Sunday.
|
|
102
|
+
* @default 1
|
|
103
|
+
*/
|
|
104
|
+
weekStart?: number;
|
|
105
|
+
/** Renders the calendar as a popup anchored to a reference element instead of inline.
|
|
106
|
+
* @type CalendarViewFloating
|
|
107
|
+
*/
|
|
108
|
+
floating?: CalendarViewFloating;
|
|
109
|
+
/** Called whenever the selection changes. Not called in `'range'` mode. */
|
|
110
|
+
onChange?: (event: Event, value: Date | Date[] | null) => void;
|
|
111
|
+
/** Fired on every step of a range, including the one that leaves `end` null. */
|
|
112
|
+
onRangeChange?: (event: Event, range: CalendarDateRange) => void;
|
|
113
|
+
/** Called whenever the active calendar page changes. */
|
|
114
|
+
onViewChange?: (event: Event, view: View) => void;
|
|
115
|
+
} & HTMLAttributes<HTMLDivElement>;
|
|
116
|
+
export type CalendarViewContext = FSContext<{
|
|
117
|
+
locale: string;
|
|
118
|
+
weekStart: number;
|
|
119
|
+
minDate?: Date;
|
|
120
|
+
maxDate?: Date;
|
|
121
|
+
headers?: boolean;
|
|
122
|
+
blackoutDates?: Date[];
|
|
123
|
+
selectionMode: CalendarSelectionMode;
|
|
124
|
+
blackoutBreaksRange?: boolean;
|
|
125
|
+
}, CalendarViewState, {
|
|
126
|
+
onChange: (e: Event, value: Date) => void;
|
|
127
|
+
onViewChange: (e: Event, newView: View) => void;
|
|
128
|
+
}, {
|
|
129
|
+
/** `focusDate` carries focus into the new view; omit it to leave focus where it is. */
|
|
130
|
+
updateView: (e: Event, newView: View, focusDate?: Date) => void;
|
|
131
|
+
updatePage: (amount?: number, directionOverride?: AnimationDirection) => void;
|
|
132
|
+
selectDay: (e: Event, day: Date) => void;
|
|
133
|
+
selectMonth: (e: Event, month: Date) => void;
|
|
134
|
+
selectYear: (e: Event, year: Date) => void;
|
|
135
|
+
/** Empties whatever the current `selectionMode` holds. */
|
|
136
|
+
clearSelection: (e: Event) => void;
|
|
137
|
+
}>;
|
|
138
|
+
export type CalendarViewState = {
|
|
139
|
+
value: Date | Date[] | null;
|
|
140
|
+
range: CalendarDateRange;
|
|
141
|
+
view: View;
|
|
142
|
+
page: Date;
|
|
143
|
+
viewAnimationDirection: AnimationDirection;
|
|
144
|
+
pageAnimationDirection: AnimationDirection;
|
|
145
|
+
};
|
|
146
|
+
/** @propsmith CalendarViewItemProps */
|
|
147
|
+
export type CalendarViewItemProps = {
|
|
148
|
+
/** Renders the cell as the selected one. */
|
|
149
|
+
selected?: boolean;
|
|
150
|
+
/** Disables the user interaction. */
|
|
151
|
+
disabled?: boolean;
|
|
152
|
+
/** Marks the cell as the current date. */
|
|
153
|
+
current?: boolean;
|
|
154
|
+
/** Renders the cell as belonging to a neighbouring page. */
|
|
155
|
+
outOfRange?: boolean;
|
|
156
|
+
/** Renders the cell as blacked out, so it reads as unavailable rather than disabled. */
|
|
157
|
+
blackout?: boolean;
|
|
158
|
+
/** Set on the days a range covers, which paints the band behind them. */
|
|
159
|
+
rangePosition?: RangePosition;
|
|
160
|
+
/** A small label rendered above the cell content. */
|
|
161
|
+
header?: string;
|
|
162
|
+
/** Which shape the cell takes: a circle for a day, a rounded rectangle for a month or a year.
|
|
163
|
+
* @default 'day'
|
|
164
|
+
*/
|
|
165
|
+
variant?: 'day' | 'monthYear';
|
|
166
|
+
/** The content of the cell.
|
|
167
|
+
* @type Snippet
|
|
168
|
+
*/
|
|
169
|
+
children?: Snippet;
|
|
170
|
+
/** The attributes to spread on the inner button element.
|
|
171
|
+
* @type HTMLButtonAttributes
|
|
172
|
+
*/
|
|
173
|
+
buttonAttributes?: HTMLButtonAttributes;
|
|
174
|
+
} & HTMLAttributes<HTMLDivElement>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
<script lang="ts" generics="T extends 'div' | 'label' = 'label'">
|
|
2
|
+
import CheckmarkFilled from 'fluentui-icons-svelte/CheckmarkFilled.svelte';
|
|
3
|
+
import SubtractFilled from 'fluentui-icons-svelte/SubtractFilled.svelte';
|
|
4
|
+
import { PREFIX } from '../../internal/constants.js';
|
|
5
|
+
import type { CheckboxProps } from './types.js';
|
|
6
|
+
import type { PolymorphicProps } from '../../types/index.js';
|
|
7
|
+
|
|
8
|
+
const FALLBACK_ID = $props.id();
|
|
9
|
+
const COMPONENT_NAME = 'checkbox';
|
|
10
|
+
const ID = `${PREFIX}${COMPONENT_NAME}-${FALLBACK_ID}`;
|
|
11
|
+
|
|
12
|
+
let {
|
|
13
|
+
ref = $bindable(),
|
|
14
|
+
wrapperRef = $bindable(),
|
|
15
|
+
checked = $bindable(),
|
|
16
|
+
indeterminate = $bindable(),
|
|
17
|
+
id = ID,
|
|
18
|
+
name = id,
|
|
19
|
+
'aria-hidden': ariaHidden,
|
|
20
|
+
disabled,
|
|
21
|
+
wrapperAs = 'label' as T,
|
|
22
|
+
wrapperAttributes,
|
|
23
|
+
children,
|
|
24
|
+
...attributes
|
|
25
|
+
}: CheckboxProps<T> = $props();
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<!--
|
|
29
|
+
@component
|
|
30
|
+
The Fluent UI Checkbox is a customizable input element that allows users to select one or more options from a set.
|
|
31
|
+
It is designed to be consistent with the Fluent Design System.
|
|
32
|
+
|
|
33
|
+
If a `name` attribute isn't passed, `id` attribute will be used instead. If `name` & `id` aren't passed, the component will generate one and apply it to both.
|
|
34
|
+
|
|
35
|
+
- Usage:
|
|
36
|
+
```tsx
|
|
37
|
+
<script>
|
|
38
|
+
import { Checkbox } from 'fluentui-svelte';
|
|
39
|
+
</script>
|
|
40
|
+
|
|
41
|
+
<Checkbox label="Checkbox label" />
|
|
42
|
+
```
|
|
43
|
+
-->
|
|
44
|
+
|
|
45
|
+
<svelte:element
|
|
46
|
+
this={wrapperAs}
|
|
47
|
+
bind:this={wrapperRef}
|
|
48
|
+
{...wrapperAttributes as PolymorphicProps<T>}
|
|
49
|
+
class={['fs-checkbox', wrapperAttributes?.class, wrapperAs === 'label' && 'label-wrapper']}
|
|
50
|
+
>
|
|
51
|
+
<input
|
|
52
|
+
{id}
|
|
53
|
+
{name}
|
|
54
|
+
{disabled}
|
|
55
|
+
type="checkbox"
|
|
56
|
+
aria-hidden={ariaHidden}
|
|
57
|
+
bind:checked
|
|
58
|
+
bind:this={ref}
|
|
59
|
+
{indeterminate}
|
|
60
|
+
{...attributes}
|
|
61
|
+
/>
|
|
62
|
+
<div style="pointer-events: none;" aria-hidden="true">
|
|
63
|
+
<SubtractFilled class="indeterminate" />
|
|
64
|
+
<CheckmarkFilled class="checked" />
|
|
65
|
+
</div>
|
|
66
|
+
{@render children?.()}
|
|
67
|
+
</svelte:element>
|
|
68
|
+
|
|
69
|
+
<style>
|
|
70
|
+
.fs-checkbox {
|
|
71
|
+
display: inline-flex;
|
|
72
|
+
align-items: center;
|
|
73
|
+
border-radius: 0.25rem;
|
|
74
|
+
outline: none;
|
|
75
|
+
cursor: pointer;
|
|
76
|
+
position: relative;
|
|
77
|
+
gap: 0.75rem;
|
|
78
|
+
&:has(input:focus-visible) {
|
|
79
|
+
outline: 0.125rem var(--fs-focus-stroke-outer) solid;
|
|
80
|
+
outline-offset: 0.125rem;
|
|
81
|
+
&.label-wrapper {
|
|
82
|
+
border-radius: 0.063rem;
|
|
83
|
+
outline-offset: 0.313rem;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
&:hover div {
|
|
87
|
+
background-color: var(--fs-control-alt-fill-tertiary);
|
|
88
|
+
}
|
|
89
|
+
&:has(input:active) div {
|
|
90
|
+
background-color: var(--fs-control-alt-fill-quaternary);
|
|
91
|
+
border-color: var(--fs-control-strong-disabled);
|
|
92
|
+
}
|
|
93
|
+
& input {
|
|
94
|
+
position: absolute;
|
|
95
|
+
inset: 0;
|
|
96
|
+
border: unset;
|
|
97
|
+
outline: 0 !important;
|
|
98
|
+
opacity: 0;
|
|
99
|
+
appearance: none;
|
|
100
|
+
-webkit-appearance: none;
|
|
101
|
+
-moz-appearance: none;
|
|
102
|
+
&:indeterminate + div :global(svg.indeterminate),
|
|
103
|
+
&:checked + div :global(svg.checked) {
|
|
104
|
+
clip-path: ellipse(60px 60px at 0% 50%);
|
|
105
|
+
transition: var(--fs-slower-duration, 1s) cubic-bezier(0.55, 0, 0, 1) clip-path;
|
|
106
|
+
}
|
|
107
|
+
&:is(:checked, :indeterminate) {
|
|
108
|
+
& + div {
|
|
109
|
+
background-color: var(--fs-accent-fill-default);
|
|
110
|
+
border-color: var(--fs-accent-fill-default);
|
|
111
|
+
& :global(svg.indeterminate),
|
|
112
|
+
& :global(svg.checked) {
|
|
113
|
+
height: auto;
|
|
114
|
+
& :global(path) {
|
|
115
|
+
fill: var(--fs-text-on-accent-primary);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
&:hover {
|
|
120
|
+
& + div {
|
|
121
|
+
background-color: var(--fs-accent-fill-secondary);
|
|
122
|
+
border-color: var(--fs-accent-fill-secondary);
|
|
123
|
+
}
|
|
124
|
+
&:active + div {
|
|
125
|
+
background-color: var(--fs-accent-fill-tertiary);
|
|
126
|
+
border-color: var(--fs-accent-fill-tertiary);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
&:checked + div :global(svg.checked) {
|
|
131
|
+
width: 1rem;
|
|
132
|
+
}
|
|
133
|
+
&:indeterminate + div :global(svg.indeterminate) {
|
|
134
|
+
width: 0.8rem;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
& div {
|
|
138
|
+
position: relative;
|
|
139
|
+
width: 1.25rem;
|
|
140
|
+
height: 1.25rem;
|
|
141
|
+
border: 1px solid var(--fs-control-strong-stroke-default);
|
|
142
|
+
border-radius: var(--fs-control-border-radius);
|
|
143
|
+
background-color: var(--fs-control-alt-fill-secondary);
|
|
144
|
+
display: flex;
|
|
145
|
+
align-items: center;
|
|
146
|
+
justify-content: center;
|
|
147
|
+
& :global(svg) {
|
|
148
|
+
width: 0;
|
|
149
|
+
fill: var(--fs-text-on-accent-primary);
|
|
150
|
+
transform-origin: 80% 20%;
|
|
151
|
+
clip-path: ellipse(0 0 at 0% 90%);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
&:has(input:disabled) {
|
|
155
|
+
pointer-events: none;
|
|
156
|
+
color: var(--fs-text-disabled);
|
|
157
|
+
& input + div {
|
|
158
|
+
background-color: var(--fs-control-alt-fill-disabled);
|
|
159
|
+
border-color: var(--fs-control-strong-stroke-disabled);
|
|
160
|
+
}
|
|
161
|
+
& input:checked + div,
|
|
162
|
+
& input:indeterminate + div {
|
|
163
|
+
background-color: var(--fs-accent-fill-disabled);
|
|
164
|
+
border-color: var(--fs-control-fill-transparent);
|
|
165
|
+
}
|
|
166
|
+
& :global(svg path) {
|
|
167
|
+
fill: var(--fs-text-on-accent-disabled);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
</style>
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { CheckboxProps } from './types.ts';
|
|
2
|
+
declare function $$render<T extends 'div' | 'label' = 'label'>(): {
|
|
3
|
+
props: CheckboxProps<T>;
|
|
4
|
+
exports: {};
|
|
5
|
+
bindings: "ref" | "checked" | "indeterminate" | "wrapperRef";
|
|
6
|
+
slots: {};
|
|
7
|
+
events: {};
|
|
8
|
+
};
|
|
9
|
+
declare class __sveltets_Render<T extends 'div' | 'label' = 'label'> {
|
|
10
|
+
props(): ReturnType<typeof $$render<T>>['props'];
|
|
11
|
+
events(): ReturnType<typeof $$render<T>>['events'];
|
|
12
|
+
slots(): ReturnType<typeof $$render<T>>['slots'];
|
|
13
|
+
bindings(): "ref" | "checked" | "indeterminate" | "wrapperRef";
|
|
14
|
+
exports(): {};
|
|
15
|
+
}
|
|
16
|
+
interface $$IsomorphicComponent {
|
|
17
|
+
new <T extends 'div' | 'label' = 'label'>(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']>> & {
|
|
18
|
+
$$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
|
|
19
|
+
} & ReturnType<__sveltets_Render<T>['exports']>;
|
|
20
|
+
<T extends 'div' | 'label' = 'label'>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
|
|
21
|
+
z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* The Fluent UI Checkbox is a customizable input element that allows users to select one or more options from a set.
|
|
25
|
+
* It is designed to be consistent with the Fluent Design System.
|
|
26
|
+
*
|
|
27
|
+
* If a `name` attribute isn't passed, `id` attribute will be used instead. If `name` & `id` aren't passed, the component will generate one and apply it to both.
|
|
28
|
+
*
|
|
29
|
+
* - Usage:
|
|
30
|
+
* ```tsx
|
|
31
|
+
* <script>
|
|
32
|
+
* import { Checkbox } from 'fluentui-svelte';
|
|
33
|
+
* </script>
|
|
34
|
+
*
|
|
35
|
+
* <Checkbox label="Checkbox label" />
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
declare const Checkbox: $$IsomorphicComponent;
|
|
39
|
+
type Checkbox<T extends 'div' | 'label' = 'label'> = InstanceType<typeof Checkbox<T>>;
|
|
40
|
+
export default Checkbox;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Checkbox
|
|
2
|
+
|
|
3
|
+
Represents a control that a user can select (check) or clear (uncheck). A CheckBox can also report its value as indeterminate.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```svelte
|
|
8
|
+
<script>
|
|
9
|
+
import { Checkbox } from 'fluentui-svelte';
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<Checkbox wrapperAs="label">Default</Checkbox>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Component API
|
|
16
|
+
|
|
17
|
+
A brief explanation of the props that really need explaining. You can see the rest of the props in the Checkbox Props table below.
|
|
18
|
+
|
|
19
|
+
## Examples
|
|
20
|
+
|
|
21
|
+
### Label
|
|
22
|
+
|
|
23
|
+
To display a visible label, set `wrapperAs="label"` and pass the label text as children. The wrapper then renders as a `<label>` element that wraps the input.
|
|
24
|
+
|
|
25
|
+
```svelte
|
|
26
|
+
<Checkbox />
|
|
27
|
+
<Checkbox wrapperAs="label">FluentUI Checkbox</Checkbox>
|
|
28
|
+
<Checkbox wrapperAs="label">Another Checkbox</Checkbox>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Checked
|
|
32
|
+
|
|
33
|
+
The `checked` prop determines whether the checkbox is checked or not. It accepts a boolean value.
|
|
34
|
+
|
|
35
|
+
```svelte
|
|
36
|
+
<Checkbox wrapperAs="label">Unchecked</Checkbox>
|
|
37
|
+
<Checkbox wrapperAs="label" checked>Checked</Checkbox>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Indeterminate
|
|
41
|
+
|
|
42
|
+
The `indeterminate` prop sets the checkbox to an indeterminate state, which is useful for representing a mixed selection.
|
|
43
|
+
|
|
44
|
+
```svelte
|
|
45
|
+
<Checkbox wrapperAs="label" indeterminate>Indeterminate</Checkbox>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Disabled
|
|
49
|
+
|
|
50
|
+
The `disabled` prop disables the checkbox, preventing user interaction. It accepts a boolean value.
|
|
51
|
+
|
|
52
|
+
```svelte
|
|
53
|
+
<Checkbox wrapperAs="label" disabled>Disabled</Checkbox>
|
|
54
|
+
<Checkbox wrapperAs="label" checked disabled>Checked & Disabled</Checkbox>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Value
|
|
58
|
+
|
|
59
|
+
The `value` prop sets the value of the checkbox input. It is useful when the checkbox is part of a form submission.
|
|
60
|
+
|
|
61
|
+
```svelte
|
|
62
|
+
<Checkbox wrapperAs="label" value="checkbox-value">Checkbox with Value</Checkbox>
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Checkbox Props
|
|
66
|
+
|
|
67
|
+
| Name | Type | Description |
|
|
68
|
+
| ------------------- | --------------------------------------------- | ---------------------------------------------------------------------------------------------- |
|
|
69
|
+
| `wrapperAs` | `'div' \| 'label'` | The element the wrapper renders as. Set to `label` to show a visible label. Defaults to `div`. |
|
|
70
|
+
| `children` | `Snippet` | Label content rendered next to the input. Only allowed when `wrapperAs="label"`. |
|
|
71
|
+
| `checked` | `boolean` | Determines if the checkbox is checked. |
|
|
72
|
+
| `indeterminate` | `boolean` | Sets the checkbox to an indeterminate state. |
|
|
73
|
+
| `disabled` | `boolean` | Disables the checkbox, preventing user interaction. |
|
|
74
|
+
| `value` | `string` | The value of the checkbox input, useful for form submissions. |
|
|
75
|
+
| `wrapperAttributes` | `object` | Additional attributes for the wrapper element. |
|
|
76
|
+
| `ref` | bindable `HTMLInputElement` | The DOM reference of the checkbox input element. |
|
|
77
|
+
| `wrapperRef` | bindable `HTMLDivElement \| HTMLLabelElement` | The DOM reference of the checkbox wrapper element. |
|
|
78
|
+
| Input Attributes | | Additional attributes for the checkbox input element. |
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { HTMLInputAttributes } from 'svelte/elements';
|
|
2
|
+
import type { PolymorphicProps } from '../../types/index.js';
|
|
3
|
+
import type { Snippet } from 'svelte';
|
|
4
|
+
/** @propsmith CheckboxProps */
|
|
5
|
+
export type CheckboxProps<T extends 'div' | 'label' = 'div'> = {
|
|
6
|
+
/** The DOM reference of the checkbox element.
|
|
7
|
+
* @bindable
|
|
8
|
+
*/
|
|
9
|
+
ref?: HTMLInputElement;
|
|
10
|
+
/** The DOM element used to wrap the checkbox. `label` associates the children with the
|
|
11
|
+
* input; switch to `div` when the field is wrapped in a `<Label>` of its own.
|
|
12
|
+
* @default 'label'
|
|
13
|
+
* @type 'div' | 'label'
|
|
14
|
+
* @default 'div'
|
|
15
|
+
*/
|
|
16
|
+
wrapperAs?: T;
|
|
17
|
+
/** The DOM reference of the checkbox wrapper element.
|
|
18
|
+
* @type HTMLDivElement | HTMLLabelElement
|
|
19
|
+
* @bindable
|
|
20
|
+
*/
|
|
21
|
+
wrapperRef?: WrapperRef[T];
|
|
22
|
+
/** The attributes to spread on the wrapper element.
|
|
23
|
+
* @type PolymorphicProps
|
|
24
|
+
*/
|
|
25
|
+
wrapperAttributes?: PolymorphicProps<T>;
|
|
26
|
+
/** Renders the checkbox in its mixed state, neither checked nor unchecked.
|
|
27
|
+
* @bindable
|
|
28
|
+
*/
|
|
29
|
+
indeterminate?: boolean;
|
|
30
|
+
/** The name submitted with the form. Falls back to the id of the checkbox.
|
|
31
|
+
* @default id
|
|
32
|
+
*/
|
|
33
|
+
name?: string | null;
|
|
34
|
+
/** The value of the group of checkboxes this input belongs to. */
|
|
35
|
+
group?: string | null;
|
|
36
|
+
/** Whether the checkbox is checked.
|
|
37
|
+
* @bindable
|
|
38
|
+
*/
|
|
39
|
+
checked?: boolean;
|
|
40
|
+
/** Disables the user interaction. */
|
|
41
|
+
disabled?: boolean;
|
|
42
|
+
/** The content of the label. Only rendered when wrapperAs is set to label.
|
|
43
|
+
* @type Snippet
|
|
44
|
+
*/
|
|
45
|
+
children?: T extends 'label' ? Snippet : never;
|
|
46
|
+
} & Omit<HTMLInputAttributes, 'on:' | 'children'>;
|
|
47
|
+
export type WrapperRef = {
|
|
48
|
+
label: HTMLLabelElement;
|
|
49
|
+
div: HTMLDivElement;
|
|
50
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|