svelte-fluentui 1.0.0-rc01

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 (177) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +191 -0
  3. package/dist/actions/use-actions.d.ts +1 -0
  4. package/dist/actions/use-actions.js +6 -0
  5. package/dist/components/Accordion.svelte +68 -0
  6. package/dist/components/Accordion.svelte.d.ts +11 -0
  7. package/dist/components/AccordionItem.svelte +52 -0
  8. package/dist/components/AccordionItem.svelte.d.ts +17 -0
  9. package/dist/components/Anchor.svelte +53 -0
  10. package/dist/components/Anchor.svelte.d.ts +25 -0
  11. package/dist/components/Badge.svelte +14 -0
  12. package/dist/components/Badge.svelte.d.ts +15 -0
  13. package/dist/components/Breadcrumb.svelte +8 -0
  14. package/dist/components/Breadcrumb.svelte.d.ts +8 -0
  15. package/dist/components/BreadcrumbItem.svelte +17 -0
  16. package/dist/components/BreadcrumbItem.svelte.d.ts +10 -0
  17. package/dist/components/Button.svelte +31 -0
  18. package/dist/components/Button.svelte.d.ts +24 -0
  19. package/dist/components/Calendar.svelte +442 -0
  20. package/dist/components/Calendar.svelte.d.ts +27 -0
  21. package/dist/components/Card.svelte +14 -0
  22. package/dist/components/Card.svelte.d.ts +14 -0
  23. package/dist/components/Checkbox.svelte +38 -0
  24. package/dist/components/Checkbox.svelte.d.ts +17 -0
  25. package/dist/components/Combobox.svelte +91 -0
  26. package/dist/components/Combobox.svelte.d.ts +21 -0
  27. package/dist/components/ContentRegion.svelte +7 -0
  28. package/dist/components/ContentRegion.svelte.d.ts +7 -0
  29. package/dist/components/DataGrid.svelte +26 -0
  30. package/dist/components/DataGrid.svelte.d.ts +16 -0
  31. package/dist/components/DataGridCell.svelte +33 -0
  32. package/dist/components/DataGridCell.svelte.d.ts +20 -0
  33. package/dist/components/DataGridRow.svelte +33 -0
  34. package/dist/components/DataGridRow.svelte.d.ts +16 -0
  35. package/dist/components/Dialog.svelte +86 -0
  36. package/dist/components/Dialog.svelte.d.ts +27 -0
  37. package/dist/components/Divider.svelte +9 -0
  38. package/dist/components/Divider.svelte.d.ts +4 -0
  39. package/dist/components/Listbox.svelte +34 -0
  40. package/dist/components/Listbox.svelte.d.ts +13 -0
  41. package/dist/components/Menu.svelte +9 -0
  42. package/dist/components/Menu.svelte.d.ts +4 -0
  43. package/dist/components/MenuItem.svelte +9 -0
  44. package/dist/components/MenuItem.svelte.d.ts +4 -0
  45. package/dist/components/NumberField.svelte +57 -0
  46. package/dist/components/NumberField.svelte.d.ts +29 -0
  47. package/dist/components/Option.svelte +28 -0
  48. package/dist/components/Option.svelte.d.ts +13 -0
  49. package/dist/components/Paginator.svelte +85 -0
  50. package/dist/components/Paginator.svelte.d.ts +21 -0
  51. package/dist/components/PositioningRegion.svelte +7 -0
  52. package/dist/components/PositioningRegion.svelte.d.ts +8 -0
  53. package/dist/components/Progress.svelte +9 -0
  54. package/dist/components/Progress.svelte.d.ts +4 -0
  55. package/dist/components/README.md +75 -0
  56. package/dist/components/Radio.svelte +23 -0
  57. package/dist/components/Radio.svelte.d.ts +11 -0
  58. package/dist/components/RadioGroup.svelte +26 -0
  59. package/dist/components/RadioGroup.svelte.d.ts +13 -0
  60. package/dist/components/Search.svelte +51 -0
  61. package/dist/components/Search.svelte.d.ts +30 -0
  62. package/dist/components/Select.svelte +41 -0
  63. package/dist/components/Select.svelte.d.ts +23 -0
  64. package/dist/components/Slider.svelte +9 -0
  65. package/dist/components/Slider.svelte.d.ts +4 -0
  66. package/dist/components/Switch.svelte +45 -0
  67. package/dist/components/Switch.svelte.d.ts +22 -0
  68. package/dist/components/Tab.svelte +52 -0
  69. package/dist/components/Tab.svelte.d.ts +23 -0
  70. package/dist/components/TabPanel.svelte +10 -0
  71. package/dist/components/TabPanel.svelte.d.ts +13 -0
  72. package/dist/components/Tabs.svelte +35 -0
  73. package/dist/components/Tabs.svelte.d.ts +21 -0
  74. package/dist/components/TextField.svelte +57 -0
  75. package/dist/components/TextField.svelte.d.ts +27 -0
  76. package/dist/components/Textarea.svelte +53 -0
  77. package/dist/components/Textarea.svelte.d.ts +32 -0
  78. package/dist/components/Toast.svelte +90 -0
  79. package/dist/components/Toast.svelte.d.ts +18 -0
  80. package/dist/components/Toolbar.svelte +16 -0
  81. package/dist/components/Toolbar.svelte.d.ts +12 -0
  82. package/dist/components/Tooltip.svelte +28 -0
  83. package/dist/components/Tooltip.svelte.d.ts +18 -0
  84. package/dist/components/Tree.svelte +9 -0
  85. package/dist/components/Tree.svelte.d.ts +4 -0
  86. package/dist/components/TreeItem.svelte +9 -0
  87. package/dist/components/TreeItem.svelte.d.ts +4 -0
  88. package/dist/components/icons/ChevronDoubleRight.svelte +1 -0
  89. package/dist/components/icons/ChevronDoubleRight.svelte.d.ts +26 -0
  90. package/dist/components/icons/ExpandIcon.svelte +9 -0
  91. package/dist/components/icons/ExpandIcon.svelte.d.ts +26 -0
  92. package/dist/components/icons/HamburgerIcon.svelte +8 -0
  93. package/dist/components/icons/HamburgerIcon.svelte.d.ts +26 -0
  94. package/dist/components/icons/ResourcesIcon.svelte +17 -0
  95. package/dist/components/icons/ResourcesIcon.svelte.d.ts +6 -0
  96. package/dist/components/icons/index.d.ts +4 -0
  97. package/dist/components/icons/index.js +4 -0
  98. package/dist/components/index.d.ts +45 -0
  99. package/dist/components/index.js +45 -0
  100. package/dist/components/layout/BodyContent.svelte +20 -0
  101. package/dist/components/layout/BodyContent.svelte.d.ts +7 -0
  102. package/dist/components/layout/Footer.svelte +13 -0
  103. package/dist/components/layout/Footer.svelte.d.ts +8 -0
  104. package/dist/components/layout/Header.svelte +13 -0
  105. package/dist/components/layout/Header.svelte.d.ts +8 -0
  106. package/dist/components/layout/Layout.svelte +10 -0
  107. package/dist/components/layout/Layout.svelte.d.ts +8 -0
  108. package/dist/components/layout/Spacer.svelte +18 -0
  109. package/dist/components/layout/Spacer.svelte.d.ts +6 -0
  110. package/dist/components/layout/Stack.svelte +19 -0
  111. package/dist/components/layout/Stack.svelte.d.ts +18 -0
  112. package/dist/components/layout/index.d.ts +6 -0
  113. package/dist/components/layout/index.js +6 -0
  114. package/dist/components/nav/AppBar.svelte +15 -0
  115. package/dist/components/nav/AppBar.svelte.d.ts +10 -0
  116. package/dist/components/nav/AppBarItem.svelte +34 -0
  117. package/dist/components/nav/AppBarItem.svelte.d.ts +14 -0
  118. package/dist/components/nav/NavExpander.svelte +18 -0
  119. package/dist/components/nav/NavExpander.svelte.d.ts +7 -0
  120. package/dist/components/nav/NavGroup.svelte +244 -0
  121. package/dist/components/nav/NavGroup.svelte.d.ts +12 -0
  122. package/dist/components/nav/NavIcon.svelte +7 -0
  123. package/dist/components/nav/NavIcon.svelte.d.ts +7 -0
  124. package/dist/components/nav/NavItem.svelte +17 -0
  125. package/dist/components/nav/NavItem.svelte.d.ts +11 -0
  126. package/dist/components/nav/NavLink.svelte +31 -0
  127. package/dist/components/nav/NavLink.svelte.d.ts +13 -0
  128. package/dist/components/nav/NavLinkItem.svelte +23 -0
  129. package/dist/components/nav/NavLinkItem.svelte.d.ts +17 -0
  130. package/dist/components/nav/NavMenu.svelte +19 -0
  131. package/dist/components/nav/NavMenu.svelte.d.ts +11 -0
  132. package/dist/components/nav/index.d.ts +8 -0
  133. package/dist/components/nav/index.js +8 -0
  134. package/dist/constants/date.d.ts +1 -0
  135. package/dist/constants/date.js +1 -0
  136. package/dist/data/selected-options.svelte.d.ts +8 -0
  137. package/dist/data/selected-options.svelte.js +51 -0
  138. package/dist/fluent-ui/calendar/calendar-day.d.ts +17 -0
  139. package/dist/fluent-ui/calendar/calendar-day.js +56 -0
  140. package/dist/fluent-ui/calendar/calendar-month.d.ts +12 -0
  141. package/dist/fluent-ui/calendar/calendar-month.js +56 -0
  142. package/dist/fluent-ui/calendar/calendar-titles.d.ts +15 -0
  143. package/dist/fluent-ui/calendar/calendar-titles.js +99 -0
  144. package/dist/fluent-ui/calendar/calendar-year.d.ts +12 -0
  145. package/dist/fluent-ui/calendar/calendar-year.js +46 -0
  146. package/dist/fluent-ui/calendar/day-format.d.ts +4 -0
  147. package/dist/fluent-ui/calendar/day-format.js +3 -0
  148. package/dist/fluent-ui/calendar/fluent-calendar-extended.d.ts +44 -0
  149. package/dist/fluent-ui/calendar/fluent-calendar-extended.js +170 -0
  150. package/dist/fluent-ui/calendar/fluent-calendar.d.ts +18 -0
  151. package/dist/fluent-ui/calendar/fluent-calendar.js +1 -0
  152. package/dist/fluent-ui/calendar/range-of-dates.d.ts +8 -0
  153. package/dist/fluent-ui/calendar/range-of-dates.js +34 -0
  154. package/dist/fluent-ui/constants/app-bar.d.ts +4 -0
  155. package/dist/fluent-ui/constants/app-bar.js +5 -0
  156. package/dist/fluent-ui/constants/button.d.ts +7 -0
  157. package/dist/fluent-ui/constants/button.js +8 -0
  158. package/dist/fluent-ui/constants/calendar-vertical-position.d.ts +5 -0
  159. package/dist/fluent-ui/constants/calendar-vertical-position.js +6 -0
  160. package/dist/fluent-ui/constants/stack.d.ts +20 -0
  161. package/dist/fluent-ui/constants/stack.js +23 -0
  162. package/dist/fluent-ui/setup.d.ts +1 -0
  163. package/dist/fluent-ui/setup.js +7 -0
  164. package/dist/fluent-ui/util/range-of.d.ts +21 -0
  165. package/dist/fluent-ui/util/range-of.js +84 -0
  166. package/dist/helpers/array.d.ts +2 -0
  167. package/dist/helpers/array.js +6 -0
  168. package/dist/helpers/html.d.ts +2 -0
  169. package/dist/helpers/html.js +10 -0
  170. package/dist/index.d.ts +1 -0
  171. package/dist/index.js +1 -0
  172. package/dist/main.scss +1 -0
  173. package/dist/types/combobox.d.ts +7 -0
  174. package/dist/types/combobox.js +1 -0
  175. package/dist/types/index.d.ts +10 -0
  176. package/dist/types/index.js +1 -0
  177. package/package.json +83 -0
@@ -0,0 +1,26 @@
1
+ <script lang="ts">import { provideFluentDesignSystem, fluentDataGrid } from "@fluentui/web-components";
2
+ provideFluentDesignSystem().register(fluentDataGrid());
3
+ let { class: className = "", style = "", id = undefined, ariaRowCount = undefined, generateHeader = undefined, role = "grid", onCloseColumnOptions = undefined, onCloseColumnResize = undefined, children = undefined, ...restProps } = $props();
4
+ function handleCloseColumnOptions(e) {
5
+ onCloseColumnOptions?.(e);
6
+ }
7
+ function handleCloseColumnResize(e) {
8
+ onCloseColumnResize?.(e);
9
+ }
10
+ </script>
11
+
12
+ <fluent-data-grid
13
+ class={className}
14
+ {style}
15
+ {id}
16
+ aria-rowcount={ariaRowCount}
17
+ generate-header={generateHeader}
18
+ role={role}
19
+ on:closecolumnoptions={handleCloseColumnOptions}
20
+ on:closecolumnresize={handleCloseColumnResize}
21
+ {...restProps}
22
+ >
23
+ {#if children}
24
+ {@render children?.()}
25
+ {/if}
26
+ </fluent-data-grid>
@@ -0,0 +1,16 @@
1
+ import type { SlotType } from "../types/index.js";
2
+ type Props = {
3
+ class?: string;
4
+ style?: string;
5
+ id?: string;
6
+ ariaRowCount?: number;
7
+ generateHeader?: "none" | "default" | "sticky";
8
+ role?: string;
9
+ onCloseColumnOptions?: (e: Event) => void;
10
+ onCloseColumnResize?: (e: Event) => void;
11
+ children?: SlotType;
12
+ [prop: string]: any;
13
+ };
14
+ declare const DataGrid: import("svelte").Component<Props, {}, "">;
15
+ type DataGrid = ReturnType<typeof DataGrid>;
16
+ export default DataGrid;
@@ -0,0 +1,33 @@
1
+ <script lang="ts">import { provideFluentDesignSystem, fluentDataGridCell } from "@fluentui/web-components";
2
+ provideFluentDesignSystem().register(fluentDataGridCell());
3
+ let { class: className = "", style = "", gridColumn = undefined, cellType = "default", colIndex = undefined, role = undefined, tabIndex = undefined, title = undefined, ariaLabel = undefined, onKeyDown = undefined, onClick = undefined, onFocus = undefined, children = undefined, ...restProps } = $props();
4
+ function handleKeyDown(e) {
5
+ onKeyDown?.(e);
6
+ }
7
+ function handleClick(e) {
8
+ onClick?.(e);
9
+ }
10
+ function handleFocus(e) {
11
+ onFocus?.(e);
12
+ }
13
+ </script>
14
+
15
+ <fluent-data-grid-cell
16
+ class={className}
17
+ {style}
18
+ grid-column={gridColumn}
19
+ cell-type={cellType}
20
+ col-index={colIndex}
21
+ {role}
22
+ tabindex={tabIndex}
23
+ {title}
24
+ aria-label={ariaLabel}
25
+ on:keydown={handleKeyDown}
26
+ on:click={handleClick}
27
+ on:focus={handleFocus}
28
+ {...restProps}
29
+ >
30
+ {#if children}
31
+ {@render children?.()}
32
+ {/if}
33
+ </fluent-data-grid-cell>
@@ -0,0 +1,20 @@
1
+ import type { SlotType } from "../types/index.js";
2
+ type Props = {
3
+ class?: string;
4
+ style?: string;
5
+ gridColumn?: number | string;
6
+ cellType?: "default" | "columnheader";
7
+ colIndex?: number;
8
+ role?: string;
9
+ tabIndex?: number;
10
+ title?: string;
11
+ ariaLabel?: string;
12
+ onKeyDown?: (e: KeyboardEvent) => void;
13
+ onClick?: (e: MouseEvent) => void;
14
+ onFocus?: (e: FocusEvent) => void;
15
+ children?: SlotType;
16
+ [prop: string]: any;
17
+ };
18
+ declare const DataGridCell: import("svelte").Component<Props, {}, "">;
19
+ type DataGridCell = ReturnType<typeof DataGridCell>;
20
+ export default DataGridCell;
@@ -0,0 +1,33 @@
1
+ <script lang="ts">import { provideFluentDesignSystem, fluentDataGridRow } from "@fluentui/web-components";
2
+ provideFluentDesignSystem().register(fluentDataGridRow());
3
+ let { class: className = "", style = "", rowIndex = undefined, rowType = undefined, onKeyDown = undefined, onClick = undefined, onDblClick = undefined, onFocus = undefined, children = undefined, ...restProps } = $props();
4
+ function handleKeyDown(e) {
5
+ onKeyDown?.(e);
6
+ }
7
+ function handleClick(e) {
8
+ onClick?.(e);
9
+ }
10
+ function handleDblClick(e) {
11
+ onDblClick?.(e);
12
+ }
13
+ function handleFocus(e) {
14
+ onFocus?.(e);
15
+ }
16
+ </script>
17
+
18
+ <fluent-data-grid-row
19
+ class={className}
20
+ {style}
21
+ data-row-index={rowIndex}
22
+ row-type={rowType}
23
+ role="row"
24
+ on:keydown={handleKeyDown}
25
+ on:click={handleClick}
26
+ on:dblclick={handleDblClick}
27
+ on:focus={handleFocus}
28
+ {...restProps}
29
+ >
30
+ {#if children}
31
+ {@render children?.()}
32
+ {/if}
33
+ </fluent-data-grid-row>
@@ -0,0 +1,16 @@
1
+ import type { SlotType } from "../types/index.js";
2
+ type Props = {
3
+ class?: string;
4
+ style?: string;
5
+ rowIndex?: number;
6
+ rowType?: string;
7
+ onKeyDown?: (e: KeyboardEvent) => void;
8
+ onClick?: (e: MouseEvent) => void;
9
+ onDblClick?: (e: MouseEvent) => void;
10
+ onFocus?: (e: FocusEvent) => void;
11
+ children?: SlotType;
12
+ [prop: string]: any;
13
+ };
14
+ declare const DataGridRow: import("svelte").Component<Props, {}, "">;
15
+ type DataGridRow = ReturnType<typeof DataGridRow>;
16
+ export default DataGridRow;
@@ -0,0 +1,86 @@
1
+ <script lang="ts" module>export {};
2
+ </script>
3
+
4
+ <script lang="ts">import { fluentDialog, provideFluentDesignSystem } from "@fluentui/web-components";
5
+ import Button from "./Button.svelte";
6
+ provideFluentDesignSystem().register(fluentDialog());
7
+ let { modal = undefined, visible = $bindable(undefined), trapFocus = undefined, ariaDescribedby = undefined, ariaLabelledby = undefined, ariaLabel = undefined, preventClose = false, dismissable = false, children = undefined, actions = undefined, dismissButtonText = undefined, ...restProps } = $props();
8
+ let element = undefined;
9
+ export function show() {
10
+ if (!element) {
11
+ return;
12
+ }
13
+ visible = true;
14
+ element.show();
15
+ }
16
+ export function hide() {
17
+ if (!element) {
18
+ return;
19
+ }
20
+ visible = false;
21
+ element.hide();
22
+ }
23
+ export function toggle() {
24
+ if (!element) {
25
+ return;
26
+ }
27
+ visible = !visible;
28
+ if (visible) {
29
+ element.show();
30
+ }
31
+ else {
32
+ element.hide();
33
+ }
34
+ }
35
+ </script>
36
+
37
+ <fluent-dialog
38
+ bind:this={element}
39
+ {...restProps}
40
+ {modal}
41
+ hidden={!visible}
42
+ {trapFocus}
43
+ {ariaDescribedby}
44
+ {ariaLabelledby}
45
+ {ariaLabel}
46
+ >
47
+ <div class="tw:flex tw:flex-col tw:h-full">
48
+ {#if !preventClose}
49
+ <div class="close-button-parent tw:self-end tw:flex-none tw:mt-1 tw:mr-1">
50
+ <!-- todo: proper close button -->
51
+ X
52
+ </div>
53
+ {/if}
54
+
55
+ <div class="tw:flex-1">
56
+ {@render children?.()}
57
+ </div>
58
+
59
+ {#if dismissable || actions}
60
+ <div class="tw:flex-none tw:flex tw:justify-between tw:flex-wrap gaptw:-2">
61
+ {#if dismissable}
62
+ <div class="close-button-parent tw:flex tw:justify-end tw:flex-none">
63
+ <Button onClick={hide}>
64
+ {#if dismissButtonText}
65
+ {@render dismissButtonText()}
66
+ {:else}
67
+ Dismiss
68
+ {/if}
69
+ </Button>
70
+ </div>
71
+ {/if}
72
+ {#if actions}
73
+ <div class="actions tw:flex-1 tw:flex tw:items-baseline tw:gap-1">
74
+ {@render actions()}
75
+ </div>
76
+ {/if}
77
+ </div>
78
+ {/if}
79
+ </div>
80
+ </fluent-dialog>
81
+
82
+ <style>
83
+ @reference "tailwindcss";
84
+
85
+ </style>
86
+
@@ -0,0 +1,27 @@
1
+ export type HTMLDialogElement = HTMLElement & {
2
+ show: VoidFunction;
3
+ hide: VoidFunction;
4
+ toggle: VoidFunction;
5
+ };
6
+ import type { SlotType } from "../types/index.js";
7
+ type Props = {
8
+ modal?: boolean;
9
+ visible?: boolean;
10
+ preventClose?: boolean;
11
+ dismissable?: boolean;
12
+ trapFocus?: boolean;
13
+ ariaDescribedby?: string;
14
+ ariaLabelledby?: string;
15
+ ariaLabel?: string;
16
+ children?: SlotType;
17
+ actions?: SlotType;
18
+ dismissButtonText?: SlotType;
19
+ [prop: string]: any;
20
+ };
21
+ declare const Dialog: import("svelte").Component<Props, {
22
+ show: () => void;
23
+ hide: () => void;
24
+ toggle: () => void;
25
+ }, "visible">;
26
+ type Dialog = ReturnType<typeof Dialog>;
27
+ export default Dialog;
@@ -0,0 +1,9 @@
1
+ <script lang="ts">import { fluentDivider, provideFluentDesignSystem } from "@fluentui/web-components";
2
+ provideFluentDesignSystem().register(fluentDivider());
3
+ let {} = $props();
4
+ </script>
5
+
6
+ <fluent-divider>
7
+ <!-- todo: finish Divider -->
8
+ </fluent-divider>
9
+
@@ -0,0 +1,4 @@
1
+ type Props = {};
2
+ declare const Divider: import("svelte").Component<Props, {}, "">;
3
+ type Divider = ReturnType<typeof Divider>;
4
+ export default Divider;
@@ -0,0 +1,34 @@
1
+ <script lang="ts">import { fluentListbox, provideFluentDesignSystem } from "@fluentui/web-components";
2
+ import { setContext, untrack } from "svelte";
3
+ import { createSelectedOptions } from "../data/selected-options.svelte.js";
4
+ provideFluentDesignSystem().register(fluentListbox());
5
+ let { value = $bindable(), multi = undefined, disabled = undefined, readonly = undefined, children = undefined, ...restProps } = $props();
6
+ let element = $state();
7
+ const selectedOptions = createSelectedOptions(value, multi);
8
+ setContext("selected-options", selectedOptions);
9
+ $effect(() => {
10
+ const current = selectedOptions.value;
11
+ if (JSON.stringify(current) !== JSON.stringify(value)) {
12
+ value = current;
13
+ }
14
+ });
15
+ let selectedOptionsAttr = $derived(() => typeof value === "string" ? value : Array.isArray(value) ? value.join(",") : undefined);
16
+ function handleOnChange(ev) {
17
+ const target = ev.target;
18
+ if (!target)
19
+ return;
20
+ const selected = Array.from(target.selectedOptions).map((opt) => opt.value);
21
+ value = multi ? selected : selected[0];
22
+ }
23
+ </script>
24
+
25
+ <fluent-listbox
26
+ bind:this={element}
27
+ selected-options={selectedOptionsAttr}
28
+ {disabled}
29
+ multiple={multi}
30
+ {...restProps}
31
+ onchange={handleOnChange}
32
+ >
33
+ {@render children?.()}
34
+ </fluent-listbox>
@@ -0,0 +1,13 @@
1
+ import type { SlotType } from "../types/index.js";
2
+ type ValueType = string | string[] | null | undefined;
3
+ type Props = {
4
+ value: ValueType;
5
+ multi?: boolean;
6
+ readonly?: boolean;
7
+ disabled?: boolean;
8
+ children?: SlotType;
9
+ [prop: string]: any;
10
+ };
11
+ declare const Listbox: import("svelte").Component<Props, {}, "value">;
12
+ type Listbox = ReturnType<typeof Listbox>;
13
+ export default Listbox;
@@ -0,0 +1,9 @@
1
+ <script lang="ts">import { fluentMenu, fluentMenuItem, provideFluentDesignSystem } from "@fluentui/web-components";
2
+ provideFluentDesignSystem().register(fluentMenu(), fluentMenuItem());
3
+ let {} = $props();
4
+ </script>
5
+
6
+ <fluent-menu>
7
+ <!-- todo: finish Menu -->
8
+ </fluent-menu>
9
+
@@ -0,0 +1,4 @@
1
+ type Props = {};
2
+ declare const Menu: import("svelte").Component<Props, {}, "">;
3
+ type Menu = ReturnType<typeof Menu>;
4
+ export default Menu;
@@ -0,0 +1,9 @@
1
+ <script lang="ts">import { fluentMenuItem, provideFluentDesignSystem } from "@fluentui/web-components";
2
+ provideFluentDesignSystem().register(fluentMenuItem());
3
+ let {} = $props();
4
+ </script>
5
+
6
+ <fluent-menu-item>
7
+ <!-- todo: finish MenuItem -->
8
+ </fluent-menu-item>
9
+
@@ -0,0 +1,4 @@
1
+ type Props = {};
2
+ declare const MenuItem: import("svelte").Component<Props, {}, "">;
3
+ type MenuItem = ReturnType<typeof MenuItem>;
4
+ export default MenuItem;
@@ -0,0 +1,57 @@
1
+ <script lang="ts">import { fluentNumberField, provideFluentDesignSystem } from "@fluentui/web-components";
2
+ provideFluentDesignSystem().register(fluentNumberField());
3
+ let { value = $bindable(), placeholder, appearance, style, disabled, readonly, required, name, label, autofocus, step, min, max, hideStep, children, onInput, onChange, } = $props();
4
+ step ??= 1;
5
+ min ??= -Infinity;
6
+ max ??= Infinity;
7
+ let element;
8
+ // Exposed methods
9
+ export function stepUp() {
10
+ element?.stepUp();
11
+ }
12
+ export function stepDown() {
13
+ element?.stepDown();
14
+ }
15
+ export function checkValidity() {
16
+ return element?.checkValidity();
17
+ }
18
+ export function reportValidity() {
19
+ return element?.reportValidity();
20
+ }
21
+ export function setCustomValidity(message) {
22
+ element?.setCustomValidity(message);
23
+ }
24
+ function handleOnInput(event) {
25
+ const target = event.target;
26
+ value = target.value;
27
+ onInput?.(event);
28
+ }
29
+ function handleOnChange(event) {
30
+ onChange?.(event);
31
+ }
32
+ </script>
33
+
34
+ <fluent-number-field
35
+ bind:this={element}
36
+ {placeholder}
37
+ {appearance}
38
+ {style}
39
+ {disabled}
40
+ {readonly}
41
+ {required}
42
+ {autofocus}
43
+ {step}
44
+ {min}
45
+ {max}
46
+ {hideStep}
47
+ {name}
48
+ value={value}
49
+ oninput={handleOnInput}
50
+ onchange={handleOnChange}
51
+ >
52
+ {#if children}
53
+ {@render children()}
54
+ {:else}
55
+ {label}
56
+ {/if}
57
+ </fluent-number-field>
@@ -0,0 +1,29 @@
1
+ import type { SlotType } from "../types/index.js";
2
+ type Props = {
3
+ value?: string;
4
+ placeholder?: string;
5
+ appearance?: string;
6
+ style?: string;
7
+ disabled?: boolean;
8
+ readonly?: boolean;
9
+ required?: boolean;
10
+ name?: string;
11
+ label?: string;
12
+ autofocus?: boolean;
13
+ step?: number;
14
+ min?: number;
15
+ max?: number;
16
+ hideStep?: boolean;
17
+ children?: SlotType;
18
+ onInput?: (ev: InputEvent) => void;
19
+ onChange?: (ev: Event) => void;
20
+ };
21
+ declare const NumberField: import("svelte").Component<Props, {
22
+ stepUp: () => void;
23
+ stepDown: () => void;
24
+ checkValidity: () => boolean;
25
+ reportValidity: () => boolean;
26
+ setCustomValidity: (message: string) => void;
27
+ }, "value">;
28
+ type NumberField = ReturnType<typeof NumberField>;
29
+ export default NumberField;
@@ -0,0 +1,28 @@
1
+ <script lang="ts">import { fluentOption, provideFluentDesignSystem } from "@fluentui/web-components";
2
+ import { getContext } from "svelte";
3
+ provideFluentDesignSystem().register(fluentOption());
4
+ let { value, label = undefined, disabled = false, selected = undefined, onClick = undefined, children, ...restProps } = $props();
5
+ const selectedValue = getContext("selected-options");
6
+ function handleOnClick(ev) {
7
+ if (disabled) {
8
+ return;
9
+ }
10
+ console.log("Option on click", {
11
+ ev,
12
+ selectedValue: selectedValue.value
13
+ });
14
+ selectedValue.toggle(value);
15
+ onClick?.(ev);
16
+ }
17
+ </script>
18
+
19
+ <fluent-option
20
+ {value}
21
+ selected={selected !== undefined ? selected : selectedValue.value?.includes(value)}
22
+ data-option-label={label}
23
+ {disabled}
24
+ {...restProps}
25
+ onclick={handleOnClick}
26
+ >
27
+ {@render children()}
28
+ </fluent-option>
@@ -0,0 +1,13 @@
1
+ type Props = {
2
+ value: string;
3
+ label?: string;
4
+ style?: string;
5
+ onClick?: Function;
6
+ selected?: boolean;
7
+ disabled?: boolean;
8
+ children: any;
9
+ [prop: string]: any;
10
+ };
11
+ declare const Option: import("svelte").Component<Props, {}, "">;
12
+ type Option = ReturnType<typeof Option>;
13
+ export default Option;
@@ -0,0 +1,85 @@
1
+ <script lang="ts">import { fluentButton, provideFluentDesignSystem } from "@fluentui/web-components";
2
+ provideFluentDesignSystem().register(fluentButton());
3
+ let { class: className = "", style = "", disabled = false, totalItemCount = undefined, currentPageIndex = 0, lastPageIndex = 0, canGoBack = true, canGoForwards = true, onFirst = undefined, onPrevious = undefined, onNext = undefined, onLast = undefined, summaryTemplate = undefined, paginationTextTemplate = undefined, ...restProps } = $props();
4
+ </script>
5
+
6
+ <div class="paginator {className}" {style} {...restProps}>
7
+ {#if totalItemCount !== undefined}
8
+ <div class="summary">
9
+ {#if summaryTemplate}
10
+ {@render summaryTemplate?.()}
11
+ {:else}
12
+ <strong>{totalItemCount}</strong> items
13
+ {/if}
14
+ </div>
15
+ {/if}
16
+
17
+ <nav role="navigation" class="paginator-nav">
18
+ <fluent-button
19
+ on:click={() => onFirst?.()}
20
+ disabled={!canGoBack || disabled}
21
+ title="Go to first page"
22
+ aria-label="Go to first page"
23
+ >
24
+ <span>&laquo;</span>
25
+ </fluent-button>
26
+
27
+ <fluent-button
28
+ on:click={() => onPrevious?.()}
29
+ disabled={!canGoBack || disabled}
30
+ title="Go to previous page"
31
+ aria-label="Go to previous page"
32
+ >
33
+ <span>&lsaquo;</span>
34
+ </fluent-button>
35
+
36
+ <div class="pagination-text">
37
+ {#if paginationTextTemplate}
38
+ {@render paginationTextTemplate?.()}
39
+ {:else}
40
+ Page <strong>{currentPageIndex + 1}</strong> of <strong>{lastPageIndex + 1}</strong>
41
+ {/if}
42
+ </div>
43
+
44
+ <fluent-button
45
+ on:click={() => onNext?.()}
46
+ disabled={!canGoForwards || disabled}
47
+ title="Go to next page"
48
+ aria-label="Go to next page"
49
+ >
50
+ <span>&rsaquo;</span>
51
+ </fluent-button>
52
+
53
+ <fluent-button
54
+ on:click={() => onLast?.()}
55
+ disabled={!canGoForwards || disabled}
56
+ title="Go to last page"
57
+ aria-label="Go to last page"
58
+ >
59
+ <span>&raquo;</span>
60
+ </fluent-button>
61
+ </nav>
62
+ </div>
63
+
64
+ <style>
65
+ .paginator {
66
+ display: flex;
67
+ flex-direction: column;
68
+ gap: 0.5rem;
69
+ }
70
+
71
+ .summary {
72
+ font-size: 0.9rem;
73
+ }
74
+
75
+ .paginator-nav {
76
+ display: flex;
77
+ align-items: center;
78
+ gap: 0.25rem;
79
+ }
80
+
81
+ .pagination-text {
82
+ margin: 0 0.5rem;
83
+ }
84
+
85
+ </style>
@@ -0,0 +1,21 @@
1
+ import type { SlotType } from "../types/index.js";
2
+ type Props = {
3
+ class?: string;
4
+ style?: string;
5
+ disabled?: boolean;
6
+ totalItemCount?: number;
7
+ currentPageIndex?: number;
8
+ lastPageIndex?: number;
9
+ canGoBack?: boolean;
10
+ canGoForwards?: boolean;
11
+ onFirst?: () => void;
12
+ onPrevious?: () => void;
13
+ onNext?: () => void;
14
+ onLast?: () => void;
15
+ summaryTemplate?: SlotType;
16
+ paginationTextTemplate?: SlotType;
17
+ [prop: string]: any;
18
+ };
19
+ declare const Paginator: import("svelte").Component<Props, {}, "">;
20
+ type Paginator = ReturnType<typeof Paginator>;
21
+ export default Paginator;
@@ -0,0 +1,7 @@
1
+ <script lang="ts">let { title = undefined, children = undefined } = $props();
2
+ export {};
3
+ </script>
4
+
5
+ <div class="positioning-region" {title}>
6
+ {@render children?.()}
7
+ </div>
@@ -0,0 +1,8 @@
1
+ import type { SlotType } from "../types/index.js";
2
+ type Props = {
3
+ title?: string;
4
+ children?: SlotType;
5
+ };
6
+ declare const PositioningRegion: import("svelte").Component<Props, {}, "">;
7
+ type PositioningRegion = ReturnType<typeof PositioningRegion>;
8
+ export default PositioningRegion;
@@ -0,0 +1,9 @@
1
+ <script lang="ts">import { fluentProgress, provideFluentDesignSystem } from "@fluentui/web-components";
2
+ provideFluentDesignSystem().register(fluentProgress());
3
+ let {} = $props();
4
+ </script>
5
+
6
+ <fluent-progress-bar>
7
+ <!-- todo: finish ProgressBar -->
8
+ </fluent-progress-bar>
9
+
@@ -0,0 +1,4 @@
1
+ type Props = {};
2
+ declare const Progress: import("svelte").Component<Props, {}, "">;
3
+ type Progress = ReturnType<typeof Progress>;
4
+ export default Progress;