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.
Files changed (283) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +201 -0
  3. package/dist/components/auto-suggest-box/auto-suggest-box.d.ts +2 -0
  4. package/dist/components/auto-suggest-box/auto-suggest-box.js +2 -0
  5. package/dist/components/auto-suggest-box/auto-suggest-box.svelte +457 -0
  6. package/dist/components/auto-suggest-box/auto-suggest-box.svelte.d.ts +4 -0
  7. package/dist/components/auto-suggest-box/docs/llms.md +73 -0
  8. package/dist/components/auto-suggest-box/option.svelte +82 -0
  9. package/dist/components/auto-suggest-box/option.svelte.d.ts +4 -0
  10. package/dist/components/auto-suggest-box/types.d.ts +140 -0
  11. package/dist/components/auto-suggest-box/types.js +1 -0
  12. package/dist/components/avatar/avatar.svelte +269 -0
  13. package/dist/components/avatar/avatar.svelte.d.ts +20 -0
  14. package/dist/components/avatar/docs/llms.md +92 -0
  15. package/dist/components/avatar/type.d.ts +63 -0
  16. package/dist/components/avatar/type.js +1 -0
  17. package/dist/components/badge/badge-icon.svelte +103 -0
  18. package/dist/components/badge/badge-icon.svelte.d.ts +25 -0
  19. package/dist/components/badge/badge.svelte +163 -0
  20. package/dist/components/badge/badge.svelte.d.ts +20 -0
  21. package/dist/components/badge/docs/llms.md +133 -0
  22. package/dist/components/badge/types.d.ts +70 -0
  23. package/dist/components/badge/types.js +1 -0
  24. package/dist/components/badge/utils.svelte.d.ts +16 -0
  25. package/dist/components/badge/utils.svelte.js +35 -0
  26. package/dist/components/button/button.svelte +203 -0
  27. package/dist/components/button/button.svelte.d.ts +38 -0
  28. package/dist/components/button/docs/llms.md +102 -0
  29. package/dist/components/button/split-button.svelte +66 -0
  30. package/dist/components/button/split-button.svelte.d.ts +4 -0
  31. package/dist/components/button/types.d.ts +84 -0
  32. package/dist/components/button/types.js +1 -0
  33. package/dist/components/calendar-date-picker/calendar-date-picker.svelte +119 -0
  34. package/dist/components/calendar-date-picker/calendar-date-picker.svelte.d.ts +4 -0
  35. package/dist/components/calendar-date-picker/docs/llms.md +33 -0
  36. package/dist/components/calendar-date-picker/types.d.ts +36 -0
  37. package/dist/components/calendar-date-picker/types.js +1 -0
  38. package/dist/components/calendar-view/calendar-view-controls.svelte +115 -0
  39. package/dist/components/calendar-view/calendar-view-controls.svelte.d.ts +3 -0
  40. package/dist/components/calendar-view/calendar-view-days.svelte +210 -0
  41. package/dist/components/calendar-view/calendar-view-days.svelte.d.ts +3 -0
  42. package/dist/components/calendar-view/calendar-view-grid.d.ts +38 -0
  43. package/dist/components/calendar-view/calendar-view-grid.js +140 -0
  44. package/dist/components/calendar-view/calendar-view-header.svelte +66 -0
  45. package/dist/components/calendar-view/calendar-view-header.svelte.d.ts +18 -0
  46. package/dist/components/calendar-view/calendar-view-item.svelte +181 -0
  47. package/dist/components/calendar-view/calendar-view-item.svelte.d.ts +4 -0
  48. package/dist/components/calendar-view/calendar-view-months.svelte +165 -0
  49. package/dist/components/calendar-view/calendar-view-months.svelte.d.ts +3 -0
  50. package/dist/components/calendar-view/calendar-view-years.svelte +161 -0
  51. package/dist/components/calendar-view/calendar-view-years.svelte.d.ts +3 -0
  52. package/dist/components/calendar-view/calendar-view.svelte +451 -0
  53. package/dist/components/calendar-view/calendar-view.svelte.d.ts +9 -0
  54. package/dist/components/calendar-view/calendar-view.svelte.js +196 -0
  55. package/dist/components/calendar-view/docs/llms.md +121 -0
  56. package/dist/components/calendar-view/index.d.ts +1 -0
  57. package/dist/components/calendar-view/index.js +1 -0
  58. package/dist/components/calendar-view/types.d.ts +174 -0
  59. package/dist/components/calendar-view/types.js +1 -0
  60. package/dist/components/checkbox/checkbox.svelte +171 -0
  61. package/dist/components/checkbox/checkbox.svelte.d.ts +40 -0
  62. package/dist/components/checkbox/docs/llms.md +78 -0
  63. package/dist/components/checkbox/types.d.ts +50 -0
  64. package/dist/components/checkbox/types.js +1 -0
  65. package/dist/components/date-picker/date-picker.svelte +381 -0
  66. package/dist/components/date-picker/date-picker.svelte.d.ts +4 -0
  67. package/dist/components/date-picker/docs/llms.md +52 -0
  68. package/dist/components/date-picker/index.d.ts +1 -0
  69. package/dist/components/date-picker/index.js +1 -0
  70. package/dist/components/date-picker/types.d.ts +74 -0
  71. package/dist/components/date-picker/types.js +1 -0
  72. package/dist/components/dialog/dialog-actions.svelte +37 -0
  73. package/dist/components/dialog/dialog-actions.svelte.d.ts +4 -0
  74. package/dist/components/dialog/dialog-content.svelte +17 -0
  75. package/dist/components/dialog/dialog-content.svelte.d.ts +4 -0
  76. package/dist/components/dialog/dialog-surface.svelte +95 -0
  77. package/dist/components/dialog/dialog-surface.svelte.d.ts +4 -0
  78. package/dist/components/dialog/dialog-title.svelte +33 -0
  79. package/dist/components/dialog/dialog-title.svelte.d.ts +25 -0
  80. package/dist/components/dialog/dialog-trigger.svelte +23 -0
  81. package/dist/components/dialog/dialog-trigger.svelte.d.ts +4 -0
  82. package/dist/components/dialog/dialog.svelte +64 -0
  83. package/dist/components/dialog/dialog.svelte.d.ts +7 -0
  84. package/dist/components/dialog/dialog.svelte.js +2 -0
  85. package/dist/components/dialog/docs/llms.md +131 -0
  86. package/dist/components/dialog/types.d.ts +92 -0
  87. package/dist/components/dialog/types.js +1 -0
  88. package/dist/components/divider/divider.svelte +120 -0
  89. package/dist/components/divider/divider.svelte.d.ts +39 -0
  90. package/dist/components/divider/docs/llms.md +83 -0
  91. package/dist/components/divider/types.d.ts +32 -0
  92. package/dist/components/divider/types.js +1 -0
  93. package/dist/components/dropdown/docs/llms.md +70 -0
  94. package/dist/components/dropdown/dropdown-context.d.ts +2 -0
  95. package/dist/components/dropdown/dropdown-context.js +2 -0
  96. package/dist/components/dropdown/dropdown-option.svelte +31 -0
  97. package/dist/components/dropdown/dropdown-option.svelte.d.ts +4 -0
  98. package/dist/components/dropdown/dropdown.svelte +309 -0
  99. package/dist/components/dropdown/dropdown.svelte.d.ts +4 -0
  100. package/dist/components/dropdown/types.d.ts +82 -0
  101. package/dist/components/dropdown/types.js +1 -0
  102. package/dist/components/dropdown-select/docs/llms.md +72 -0
  103. package/dist/components/dropdown-select/dropdown-select-option.svelte +87 -0
  104. package/dist/components/dropdown-select/dropdown-select-option.svelte.d.ts +4 -0
  105. package/dist/components/dropdown-select/dropdown-select.svelte +165 -0
  106. package/dist/components/dropdown-select/dropdown-select.svelte.d.ts +4 -0
  107. package/dist/components/dropdown-select/dropdown-select.svelte.js +48 -0
  108. package/dist/components/dropdown-select/index.d.ts +2 -0
  109. package/dist/components/dropdown-select/index.js +2 -0
  110. package/dist/components/dropdown-select/types.d.ts +46 -0
  111. package/dist/components/dropdown-select/types.js +1 -0
  112. package/dist/components/expander/docs/llms.md +88 -0
  113. package/dist/components/expander/expander.svelte +249 -0
  114. package/dist/components/expander/expander.svelte.d.ts +21 -0
  115. package/dist/components/expander/types.d.ts +47 -0
  116. package/dist/components/expander/types.js +1 -0
  117. package/dist/components/flyout/docs/llms.md +31 -0
  118. package/dist/components/flyout/flyout.svelte +148 -0
  119. package/dist/components/flyout/flyout.svelte.d.ts +19 -0
  120. package/dist/components/flyout/types.d.ts +36 -0
  121. package/dist/components/flyout/types.js +1 -0
  122. package/dist/components/hyperlink/docs/llms.md +33 -0
  123. package/dist/components/hyperlink/hyperlink.svelte +66 -0
  124. package/dist/components/hyperlink/hyperlink.svelte.d.ts +16 -0
  125. package/dist/components/hyperlink/types.d.ts +14 -0
  126. package/dist/components/hyperlink/types.js +1 -0
  127. package/dist/components/info-bar/docs/llms.md +81 -0
  128. package/dist/components/info-bar/info-bar.svelte +140 -0
  129. package/dist/components/info-bar/info-bar.svelte.d.ts +19 -0
  130. package/dist/components/info-bar/types.d.ts +27 -0
  131. package/dist/components/info-bar/types.js +1 -0
  132. package/dist/components/label/docs/llms.md +67 -0
  133. package/dist/components/label/label.svelte +95 -0
  134. package/dist/components/label/label.svelte.d.ts +4 -0
  135. package/dist/components/label/types.d.ts +32 -0
  136. package/dist/components/label/types.js +1 -0
  137. package/dist/components/list-view/docs/llms.md +110 -0
  138. package/dist/components/list-view/list-view-item.svelte +168 -0
  139. package/dist/components/list-view/list-view-item.svelte.d.ts +25 -0
  140. package/dist/components/list-view/list-view.svelte +137 -0
  141. package/dist/components/list-view/list-view.svelte.d.ts +25 -0
  142. package/dist/components/list-view/types.d.ts +95 -0
  143. package/dist/components/list-view/types.js +1 -0
  144. package/dist/components/list-view/utils.d.ts +6 -0
  145. package/dist/components/list-view/utils.js +12 -0
  146. package/dist/components/menu/context-menu-trigger.svelte +84 -0
  147. package/dist/components/menu/context-menu-trigger.svelte.d.ts +9 -0
  148. package/dist/components/menu/docs/llms.md +169 -0
  149. package/dist/components/menu/menu-divider.svelte +9 -0
  150. package/dist/components/menu/menu-divider.svelte.d.ts +26 -0
  151. package/dist/components/menu/menu-group.svelte +31 -0
  152. package/dist/components/menu/menu-group.svelte.d.ts +4 -0
  153. package/dist/components/menu/menu-item-checkbox.svelte +143 -0
  154. package/dist/components/menu/menu-item-checkbox.svelte.d.ts +15 -0
  155. package/dist/components/menu/menu-item-radio.svelte +147 -0
  156. package/dist/components/menu/menu-item-radio.svelte.d.ts +15 -0
  157. package/dist/components/menu/menu-item-switch.svelte +194 -0
  158. package/dist/components/menu/menu-item-switch.svelte.d.ts +15 -0
  159. package/dist/components/menu/menu-item.svelte +124 -0
  160. package/dist/components/menu/menu-item.svelte.d.ts +18 -0
  161. package/dist/components/menu/menu-list.svelte +38 -0
  162. package/dist/components/menu/menu-list.svelte.d.ts +5 -0
  163. package/dist/components/menu/menu-popover.svelte +125 -0
  164. package/dist/components/menu/menu-popover.svelte.d.ts +12 -0
  165. package/dist/components/menu/menu-trigger.svelte +121 -0
  166. package/dist/components/menu/menu-trigger.svelte.d.ts +4 -0
  167. package/dist/components/menu/menu.svelte +124 -0
  168. package/dist/components/menu/menu.svelte.d.ts +4 -0
  169. package/dist/components/menu/menu.svelte.js +77 -0
  170. package/dist/components/menu/types.d.ts +127 -0
  171. package/dist/components/menu/types.js +1 -0
  172. package/dist/components/number-box/docs/llms.md +37 -0
  173. package/dist/components/number-box/number-box.svelte +115 -0
  174. package/dist/components/number-box/number-box.svelte.d.ts +15 -0
  175. package/dist/components/number-box/types.d.ts +16 -0
  176. package/dist/components/number-box/types.js +1 -0
  177. package/dist/components/persona/docs/llms.md +107 -0
  178. package/dist/components/persona/persona.svelte +79 -0
  179. package/dist/components/persona/persona.svelte.d.ts +4 -0
  180. package/dist/components/persona/types.d.ts +42 -0
  181. package/dist/components/persona/types.js +1 -0
  182. package/dist/components/progress-bar/docs/llms.md +67 -0
  183. package/dist/components/progress-bar/progress-bar.svelte +167 -0
  184. package/dist/components/progress-bar/progress-bar.svelte.d.ts +15 -0
  185. package/dist/components/progress-bar/types.d.ts +39 -0
  186. package/dist/components/progress-bar/types.js +1 -0
  187. package/dist/components/progress-ring/docs/llms.md +76 -0
  188. package/dist/components/progress-ring/progress-ring.svelte +145 -0
  189. package/dist/components/progress-ring/progress-ring.svelte.d.ts +15 -0
  190. package/dist/components/progress-ring/types.d.ts +42 -0
  191. package/dist/components/progress-ring/types.js +1 -0
  192. package/dist/components/radio-button/docs/llms.md +64 -0
  193. package/dist/components/radio-button/radio-button.svelte +129 -0
  194. package/dist/components/radio-button/radio-button.svelte.d.ts +19 -0
  195. package/dist/components/radio-button/types.d.ts +24 -0
  196. package/dist/components/radio-button/types.js +1 -0
  197. package/dist/components/skeleton/docs/llms.md +67 -0
  198. package/dist/components/skeleton/skeleton.svelte +106 -0
  199. package/dist/components/skeleton/skeleton.svelte.d.ts +39 -0
  200. package/dist/components/skeleton/types.d.ts +24 -0
  201. package/dist/components/skeleton/types.js +1 -0
  202. package/dist/components/slider/docs/llms.md +75 -0
  203. package/dist/components/slider/slider.svelte +486 -0
  204. package/dist/components/slider/slider.svelte.d.ts +19 -0
  205. package/dist/components/slider/types.d.ts +102 -0
  206. package/dist/components/slider/types.js +1 -0
  207. package/dist/components/text-box/docs/llms.md +86 -0
  208. package/dist/components/text-box/text-box-button.svelte +65 -0
  209. package/dist/components/text-box/text-box-button.svelte.d.ts +9 -0
  210. package/dist/components/text-box/text-box.svelte +299 -0
  211. package/dist/components/text-box/text-box.svelte.d.ts +16 -0
  212. package/dist/components/text-box/types.d.ts +60 -0
  213. package/dist/components/text-box/types.js +1 -0
  214. package/dist/components/textarea/docs/llms.md +55 -0
  215. package/dist/components/textarea/textarea.svelte +151 -0
  216. package/dist/components/textarea/textarea.svelte.d.ts +17 -0
  217. package/dist/components/textarea/types.d.ts +33 -0
  218. package/dist/components/textarea/types.js +1 -0
  219. package/dist/components/time-picker/docs/llms.md +47 -0
  220. package/dist/components/time-picker/index.d.ts +1 -0
  221. package/dist/components/time-picker/index.js +1 -0
  222. package/dist/components/time-picker/time-picker.svelte +336 -0
  223. package/dist/components/time-picker/time-picker.svelte.d.ts +4 -0
  224. package/dist/components/time-picker/types.d.ts +54 -0
  225. package/dist/components/time-picker/types.js +1 -0
  226. package/dist/components/toggle-switch/docs/llms.md +39 -0
  227. package/dist/components/toggle-switch/toggle-switch.svelte +151 -0
  228. package/dist/components/toggle-switch/toggle-switch.svelte.d.ts +17 -0
  229. package/dist/components/toggle-switch/types.d.ts +20 -0
  230. package/dist/components/toggle-switch/types.js +1 -0
  231. package/dist/components/tooltip/docs/llms.md +74 -0
  232. package/dist/components/tooltip/tooltip.svelte +246 -0
  233. package/dist/components/tooltip/tooltip.svelte.d.ts +18 -0
  234. package/dist/components/tooltip/types.d.ts +67 -0
  235. package/dist/components/tooltip/types.js +1 -0
  236. package/dist/components/tree-view/docs/llms.md +117 -0
  237. package/dist/components/tree-view/tree-view-item-content.svelte +158 -0
  238. package/dist/components/tree-view/tree-view-item-content.svelte.d.ts +4 -0
  239. package/dist/components/tree-view/tree-view-item.svelte +197 -0
  240. package/dist/components/tree-view/tree-view-item.svelte.d.ts +4 -0
  241. package/dist/components/tree-view/tree-view.svelte +220 -0
  242. package/dist/components/tree-view/tree-view.svelte.d.ts +4 -0
  243. package/dist/components/tree-view/tree-view.svelte.js +111 -0
  244. package/dist/components/tree-view/types.d.ts +185 -0
  245. package/dist/components/tree-view/types.js +1 -0
  246. package/dist/css/class-darkmode.css +186 -0
  247. package/dist/css/media-darkmode.css +189 -0
  248. package/dist/css/reset.css +53 -0
  249. package/dist/css/theme.css +276 -0
  250. package/dist/css/typography.css +67 -0
  251. package/dist/css/utils.d.ts +1 -0
  252. package/dist/css/utils.js +153 -0
  253. package/dist/index.d.ts +63 -0
  254. package/dist/index.js +129 -0
  255. package/dist/internal/components/dynamic-carousel/dynamic-carousel.svelte +449 -0
  256. package/dist/internal/components/dynamic-carousel/dynamic-carousel.svelte.d.ts +22 -0
  257. package/dist/internal/components/render-soc/render-soc.svelte +29 -0
  258. package/dist/internal/components/render-soc/render-soc.svelte.d.ts +30 -0
  259. package/dist/internal/constants.d.ts +26 -0
  260. package/dist/internal/constants.js +4036 -0
  261. package/dist/internal/context.d.ts +14 -0
  262. package/dist/internal/context.js +13 -0
  263. package/dist/internal/dom-utils.svelte.d.ts +6 -0
  264. package/dist/internal/dom-utils.svelte.js +46 -0
  265. package/dist/internal/floating-ui/floating.svelte.d.ts +15 -0
  266. package/dist/internal/floating-ui/floating.svelte.js +26 -0
  267. package/dist/internal/floating-ui/utils.d.ts +3 -0
  268. package/dist/internal/floating-ui/utils.js +30 -0
  269. package/dist/internal/index.d.ts +9 -0
  270. package/dist/internal/index.js +9 -0
  271. package/dist/internal/polyfills/expander.svelte.d.ts +21 -0
  272. package/dist/internal/polyfills/expander.svelte.js +96 -0
  273. package/dist/internal/transitions.d.ts +32 -0
  274. package/dist/internal/transitions.js +37 -0
  275. package/dist/internal/utils.d.ts +22 -0
  276. package/dist/internal/utils.js +63 -0
  277. package/dist/providers/fluentui-svelte/fluentui-svelte.d.ts +19 -0
  278. package/dist/providers/fluentui-svelte/fluentui-svelte.js +11 -0
  279. package/dist/providers/fluentui-svelte/fluentui-svelte.svelte +68 -0
  280. package/dist/providers/fluentui-svelte/fluentui-svelte.svelte.d.ts +9 -0
  281. package/dist/types/index.d.ts +117 -0
  282. package/dist/types/index.js +1 -0
  283. 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 {};