fluentui-svelte 0.3.0 → 0.5.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 (51) hide show
  1. package/README.md +1 -1
  2. package/dist/components/auto-suggest-box/docs/llms.md +76 -15
  3. package/dist/components/breadcrumb/breadcrumb-button.svelte +130 -0
  4. package/dist/components/breadcrumb/breadcrumb-button.svelte.d.ts +35 -0
  5. package/dist/components/breadcrumb/breadcrumb-divider.svelte +39 -0
  6. package/dist/components/breadcrumb/breadcrumb-divider.svelte.d.ts +14 -0
  7. package/dist/components/breadcrumb/breadcrumb-item.svelte +30 -0
  8. package/dist/components/breadcrumb/breadcrumb-item.svelte.d.ts +16 -0
  9. package/dist/components/breadcrumb/breadcrumb.svelte +101 -0
  10. package/dist/components/breadcrumb/breadcrumb.svelte.d.ts +25 -0
  11. package/dist/components/breadcrumb/docs/llms.md +193 -0
  12. package/dist/components/breadcrumb/types.d.ts +80 -0
  13. package/dist/components/breadcrumb/types.js +1 -0
  14. package/dist/components/card/card-header.svelte +2 -2
  15. package/dist/components/dropdown/dropdown.svelte +1 -0
  16. package/dist/components/list-view/docs/llms.md +79 -27
  17. package/dist/components/list-view/list-view-item.svelte +14 -11
  18. package/dist/components/list-view/list-view.svelte +3 -2
  19. package/dist/components/list-view/types.d.ts +5 -1
  20. package/dist/components/menu/docs/llms.md +16 -0
  21. package/dist/components/menu/menu-popover.svelte +7 -12
  22. package/dist/components/menu/menu-popover.svelte.d.ts +2 -10
  23. package/dist/components/menu/types.d.ts +21 -0
  24. package/dist/components/tab-view/docs/llms.md +146 -0
  25. package/dist/components/tab-view/tab-view-tab.svelte +290 -0
  26. package/dist/components/tab-view/tab-view-tab.svelte.d.ts +20 -0
  27. package/dist/components/tab-view/tab-view.svelte +188 -0
  28. package/dist/components/tab-view/tab-view.svelte.d.ts +26 -0
  29. package/dist/components/tab-view/tab-view.svelte.js +15 -0
  30. package/dist/components/tab-view/types.d.ts +79 -0
  31. package/dist/components/tab-view/types.js +1 -0
  32. package/dist/components/top-nav/docs/llms.md +176 -0
  33. package/dist/components/top-nav/top-nav-item.svelte +234 -0
  34. package/dist/components/top-nav/top-nav-item.svelte.d.ts +41 -0
  35. package/dist/components/top-nav/top-nav.svelte +259 -0
  36. package/dist/components/top-nav/top-nav.svelte.d.ts +26 -0
  37. package/dist/components/top-nav/top-nav.svelte.js +18 -0
  38. package/dist/components/top-nav/types.d.ts +89 -0
  39. package/dist/components/top-nav/types.js +1 -0
  40. package/dist/components/tree-view/docs/llms.md +166 -1
  41. package/dist/components/tree-view/tree-view-item-content.svelte +41 -8
  42. package/dist/components/tree-view/tree-view-item.svelte +10 -1
  43. package/dist/components/tree-view/tree-view.svelte +17 -2
  44. package/dist/components/tree-view/tree-view.svelte.js +4 -2
  45. package/dist/components/tree-view/types.d.ts +4 -0
  46. package/dist/css/class-darkmode.css +1 -1
  47. package/dist/css/media-darkmode.css +1 -1
  48. package/dist/css/theme.css +1 -1
  49. package/dist/index.d.ts +8 -0
  50. package/dist/index.js +14 -0
  51. package/package.json +2 -1
@@ -32,6 +32,8 @@
32
32
  type = 'item',
33
33
  open = (openItems instanceof Set ? openItems.has(id) : openItems.includes(id)) || undefined,
34
34
  checked = (checkedItems instanceof Set ? checkedItems.has(id) : checkedItems.includes(id)) || undefined,
35
+ onCheckedChange,
36
+ onOpenChange,
35
37
  children,
36
38
  ...attributes
37
39
  }: TreeViewItemProps = $props();
@@ -61,6 +63,12 @@
61
63
  get parentId() {
62
64
  return itemContext?.id;
63
65
  },
66
+ get onCheckedChange() {
67
+ return onCheckedChange;
68
+ },
69
+ get onOpenChange() {
70
+ return onOpenChange;
71
+ },
64
72
  get open() {
65
73
  return open;
66
74
  },
@@ -190,7 +198,8 @@
190
198
  outline: 2px solid var(--fs-focus-stroke-outer);
191
199
  outline-offset: 2px;
192
200
  }
193
- &.open :global(.branch-indicator) {
201
+ /* Only the chevron of this item's own row, not the ones of the branches nested inside it. */
202
+ &.open > :global(.fs-tree-view-item-content .branch-indicator) {
194
203
  rotate: 90deg;
195
204
  }
196
205
  }
@@ -89,12 +89,21 @@
89
89
  await tick();
90
90
  }
91
91
 
92
+ const wasChecked = new Map(state.TREE_NODES.entries().map(([nodeId, node]) => [nodeId, !!node.checked]));
93
+
92
94
  if (selectionMode === 'single') {
93
95
  traversalSyncSingleSelection(id, state.TREE_NODES, checkedItems);
94
- return;
96
+ } else {
97
+ traversalSync(id, state.TREE_NODES, checkedItems, checked);
95
98
  }
96
99
 
97
- traversalSync(id, state.TREE_NODES, checkedItems, checked);
100
+ // Every item the click reached reports its own change, the tree reports the resulting set.
101
+ for (const node of state.TREE_NODES.values()) {
102
+ if (!!node.checked !== wasChecked.get(node.id)) {
103
+ node.onCheckedChange?.(e as Event, { id: node.id, checked: !!node.checked });
104
+ }
105
+ }
106
+ treeViewContext.events.onCheckedChange(e as Event, Array.from(checkedItems));
98
107
  },
99
108
  openItem: (e, id) => {
100
109
  if (openItems instanceof SvelteSet) {
@@ -105,6 +114,9 @@
105
114
  const node = treeViewContext.state.TREE_NODES.get(id)!;
106
115
 
107
116
  node.open = true;
117
+
118
+ node.onOpenChange?.(e as Event, { id, open: true });
119
+ treeViewContext.events.onOpenChange(e as Event, Array.from(openItems));
108
120
  },
109
121
  closeItem: (e, id) => {
110
122
  const { state } = treeViewContext;
@@ -122,6 +134,9 @@
122
134
  if (virtualizer && state.forceVirtualRender) {
123
135
  state.forceVirtualRender = false;
124
136
  }
137
+
138
+ node.onOpenChange?.(e as Event, { id, open: false });
139
+ treeViewContext.events.onOpenChange(e as Event, Array.from(openItems));
125
140
  },
126
141
  registerItem: (node) => {
127
142
  treeViewContext.state.TREE_NODES.set(node.id, node);
@@ -102,10 +102,12 @@ export function traversalSyncSingleSelection(itemId, state, iterable) {
102
102
  node.indeterminate = false;
103
103
  if (iterable instanceof Set) {
104
104
  iterable.clear();
105
- iterable.add(node.id);
105
+ if (node.checked)
106
+ iterable.add(node.id);
106
107
  }
107
108
  else if (Array.isArray(iterable)) {
108
109
  iterable.length = 0;
109
- iterable.push(node.id);
110
+ if (node.checked)
111
+ iterable.push(node.id);
110
112
  }
111
113
  }
@@ -14,6 +14,8 @@ export type TreeViewNode = {
14
14
  checked?: boolean;
15
15
  indeterminate?: boolean;
16
16
  open?: boolean;
17
+ onCheckedChange?: TreeViewItemProps['onCheckedChange'];
18
+ onOpenChange?: TreeViewItemProps['onOpenChange'];
17
19
  };
18
20
  export type TreeViewEvent<T extends Record<string, unknown> | Iterable<unknown>> = (e: Event, data: T) => void;
19
21
  /**
@@ -179,6 +181,8 @@ export type TreeViewItemContext = {
179
181
  readonly id: string;
180
182
  readonly type: TreeViewItemType;
181
183
  readonly parentId?: string;
184
+ readonly onCheckedChange?: TreeViewItemProps['onCheckedChange'];
185
+ readonly onOpenChange?: TreeViewItemProps['onOpenChange'];
182
186
  open?: boolean;
183
187
  checked?: boolean;
184
188
  indeterminate?: boolean;
@@ -140,7 +140,7 @@
140
140
 
141
141
  /* System */
142
142
  --fs-system-attention: rgb(var(--fs-accent-light-3));
143
- --fs-system-attetion-bg: #f6f6f608;
143
+ --fs-system-attention-bg: #f6f6f608;
144
144
  --fs-system-attention-solid-bg: #2e2e2e;
145
145
 
146
146
  --fs-system-success: #6ccb5f;
@@ -141,7 +141,7 @@
141
141
 
142
142
  /* System */
143
143
  --fs-system-attention: rgb(var(--fs-accent-light-3));
144
- --fs-system-attetion-bg: #f6f6f608;
144
+ --fs-system-attention-bg: #f6f6f608;
145
145
  --fs-system-attention-solid-bg: #2e2e2e;
146
146
 
147
147
  --fs-system-success: #6ccb5f;
@@ -158,7 +158,7 @@
158
158
  /* System */
159
159
  --fs-system-attention: rgb(var(--fs-accent-base));
160
160
  /* 👇 changed from original #f6f6f608 to color mix with 75% white */
161
- --fs-system-attetion-bg: color-mix(in srgb, rgb(var(--fs-accent-base)), white 75%);
161
+ --fs-system-attention-bg: color-mix(in srgb, rgb(var(--fs-accent-base)), white 85%);
162
162
  --fs-system-attention-solid-bg: #f7f7f7;
163
163
 
164
164
  --fs-system-success: #0f7b0f;
package/dist/index.d.ts CHANGED
@@ -3,6 +3,10 @@ export { default as AutoSuggestBoxOption } from './components/auto-suggest-box/o
3
3
  export { default as Avatar } from './components/avatar/avatar.svelte';
4
4
  export { default as Badge } from './components/badge/badge.svelte';
5
5
  export { default as BadgeIcon } from './components/badge/badge-icon.svelte';
6
+ export { default as Breadcrumb } from './components/breadcrumb/breadcrumb.svelte';
7
+ export { default as BreadcrumbItem } from './components/breadcrumb/breadcrumb-item.svelte';
8
+ export { default as BreadcrumbButton } from './components/breadcrumb/breadcrumb-button.svelte';
9
+ export { default as BreadcrumbDivider } from './components/breadcrumb/breadcrumb-divider.svelte';
6
10
  export { default as Button } from './components/button/button.svelte';
7
11
  export { default as SplitButton } from './components/button/split-button.svelte';
8
12
  export { default as Card } from './components/card/card.svelte';
@@ -64,11 +68,15 @@ export { default as TableCell } from './components/table/table-cell.svelte';
64
68
  export { default as TableSelectionCell } from './components/table/table-selection-cell.svelte';
65
69
  export { default as TableCellLayout } from './components/table/table-cell-layout.svelte';
66
70
  export { default as TableCellActions } from './components/table/table-cell-actions.svelte';
71
+ export { default as TabView } from './components/tab-view/tab-view.svelte';
72
+ export { default as TabViewTab } from './components/tab-view/tab-view-tab.svelte';
67
73
  export { default as TextArea } from './components/textarea/textarea.svelte';
68
74
  export { default as TextBox } from './components/text-box/text-box.svelte';
69
75
  export { default as TextBoxButton } from './components/text-box/text-box-button.svelte';
70
76
  export { default as TimePicker } from './components/time-picker/time-picker.svelte';
71
77
  export { default as ToggleSwitch } from './components/toggle-switch/toggle-switch.svelte';
78
+ export { default as TopNav } from './components/top-nav/top-nav.svelte';
79
+ export { default as TopNavItem } from './components/top-nav/top-nav-item.svelte';
72
80
  export { default as Tooltip } from './components/tooltip/tooltip.svelte';
73
81
  export { default as TreeView } from './components/tree-view/tree-view.svelte';
74
82
  export { default as TreeViewItem } from './components/tree-view/tree-view-item.svelte';
package/dist/index.js CHANGED
@@ -9,6 +9,12 @@ export { default as Avatar } from './components/avatar/avatar.svelte';
9
9
  export { default as Badge } from './components/badge/badge.svelte';
10
10
  export { default as BadgeIcon } from './components/badge/badge-icon.svelte';
11
11
  // End Badge Component
12
+ // Start Breadcrumb Component
13
+ export { default as Breadcrumb } from './components/breadcrumb/breadcrumb.svelte';
14
+ export { default as BreadcrumbItem } from './components/breadcrumb/breadcrumb-item.svelte';
15
+ export { default as BreadcrumbButton } from './components/breadcrumb/breadcrumb-button.svelte';
16
+ export { default as BreadcrumbDivider } from './components/breadcrumb/breadcrumb-divider.svelte';
17
+ // End Breadcrumb Component
12
18
  // Start Button Component
13
19
  export { default as Button } from './components/button/button.svelte';
14
20
  export { default as SplitButton } from './components/button/split-button.svelte';
@@ -120,6 +126,10 @@ export { default as TableSelectionCell } from './components/table/table-selectio
120
126
  export { default as TableCellLayout } from './components/table/table-cell-layout.svelte';
121
127
  export { default as TableCellActions } from './components/table/table-cell-actions.svelte';
122
128
  // End Table Component
129
+ // Start TabView Component
130
+ export { default as TabView } from './components/tab-view/tab-view.svelte';
131
+ export { default as TabViewTab } from './components/tab-view/tab-view-tab.svelte';
132
+ // End TabView Component
123
133
  // Start TextArea Component
124
134
  export { default as TextArea } from './components/textarea/textarea.svelte';
125
135
  // End TextArea Component
@@ -133,6 +143,10 @@ export { default as TimePicker } from './components/time-picker/time-picker.svel
133
143
  // Start ToggleSwitch Component
134
144
  export { default as ToggleSwitch } from './components/toggle-switch/toggle-switch.svelte';
135
145
  // End ToggleSwitch Component
146
+ // Start TopNav Component
147
+ export { default as TopNav } from './components/top-nav/top-nav.svelte';
148
+ export { default as TopNavItem } from './components/top-nav/top-nav-item.svelte';
149
+ // End TopNav Component
136
150
  // Start Tooltip Component
137
151
  export { default as Tooltip } from './components/tooltip/tooltip.svelte';
138
152
  // End Tooltip Component
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fluentui-svelte",
3
- "version": "0.3.0",
3
+ "version": "0.5.0",
4
4
  "description": "Modern Fluent UI 2 Components for Svelte 5",
5
5
  "author": {
6
6
  "name": "Jorge Acosta",
@@ -83,6 +83,7 @@
83
83
  "@humanspeak/svelte-virtual-list": "^0.5.14",
84
84
  "@inlang/paraglide-js": "^2.24.1",
85
85
  "@inlang/paraglide-js-svelte": "^1.0.4",
86
+ "@jlacostaec/paraglide-markup-svelte": "0.1.0",
86
87
  "@jlacostaec/propsmith": "^0.2.0",
87
88
  "@playwright/test": "^1.62.1",
88
89
  "@sveltejs/adapter-auto": "^7.0.1",