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,4 @@
1
+ import type { TreeViewProps } from './types.js';
2
+ declare const TreeView: import("svelte").Component<TreeViewProps, {}, "ref" | "openItems" | "checkedItems">;
3
+ type TreeView = ReturnType<typeof TreeView>;
4
+ export default TreeView;
@@ -0,0 +1,111 @@
1
+ import { createFSContext } from '../../internal/index.js';
2
+ export const [getTreeViewContext, setTreeViewContext] = createFSContext();
3
+ export const [getTreeViewDepth, setTreeViewDepth] = createFSContext();
4
+ export const [getTreeViewItemContext, setTreeViewItemContext] = createFSContext();
5
+ /** */
6
+ export function cascadeCheck(itemId, state, checked) {
7
+ const node = state.get(itemId);
8
+ if (!node)
9
+ throw new Error(`Node with id ${itemId} not found in TREE_NODES.`);
10
+ if (node.disabled)
11
+ return true;
12
+ let indeterminate = false;
13
+ function checkItem(id, _checked, _indeterminate = false) {
14
+ const _node = state.get(id);
15
+ if (!_node)
16
+ throw new Error(`[checkItem()] - Node with id ${id} not found in TREE_NODES.`);
17
+ _node.checked = _checked;
18
+ _node.indeterminate = _indeterminate;
19
+ state.set(id, _node);
20
+ }
21
+ if (node.type === 'branch') {
22
+ const children = state.values().filter((n) => n.parentId === itemId);
23
+ for (const child of children) {
24
+ if (child.disabled) {
25
+ indeterminate = true;
26
+ continue;
27
+ }
28
+ let childIndeterminate = false;
29
+ if (child.type === 'branch') {
30
+ childIndeterminate = cascadeCheck(child.id, state, checked);
31
+ indeterminate = indeterminate || childIndeterminate;
32
+ }
33
+ checkItem(child.id, checked, childIndeterminate);
34
+ }
35
+ }
36
+ // Check Current (leaf or branch) Node
37
+ checkItem(itemId, checked, checked ? indeterminate : false);
38
+ return indeterminate;
39
+ }
40
+ export function bubbleCheck(itemId, state, checked, indeterminate = false) {
41
+ const node = state.get(itemId);
42
+ if (!node)
43
+ throw new Error(`Node with id ${itemId} not found in TREE_NODES.`);
44
+ // Get parent here to avoid infinite recursion if parent is not found in TREE_NODES
45
+ const parent = state.get(node?.parentId || '');
46
+ if (!parent) {
47
+ return;
48
+ }
49
+ let _indeterminate = indeterminate;
50
+ if (!_indeterminate) {
51
+ const siblings = state.values().filter((n) => n.parentId === node.parentId);
52
+ const { someSiblingsChecked, allSiblingsChecked } = siblings.reduce((acc, sibling) => {
53
+ if (sibling.disabled) {
54
+ acc.allSiblingsChecked = false;
55
+ return acc;
56
+ }
57
+ if (sibling.checked)
58
+ acc.someSiblingsChecked = true;
59
+ else
60
+ acc.allSiblingsChecked = false;
61
+ return acc;
62
+ }, { someSiblingsChecked: false, allSiblingsChecked: true });
63
+ _indeterminate = !allSiblingsChecked && someSiblingsChecked;
64
+ parent.checked = allSiblingsChecked;
65
+ }
66
+ parent.indeterminate = _indeterminate;
67
+ bubbleCheck(parent.id, state, checked, _indeterminate);
68
+ }
69
+ export function traversalSync(itemId, state, iterable, checked) {
70
+ const node = state.get(itemId);
71
+ if (!node)
72
+ return;
73
+ const isIndeterminate = cascadeCheck(itemId, state, checked);
74
+ if (node.parentId) {
75
+ bubbleCheck(node.id, state, checked, isIndeterminate);
76
+ }
77
+ const checkedItems = Array.from(state.values()).filter((n) => n.checked);
78
+ if (iterable instanceof Set) {
79
+ iterable.clear();
80
+ for (const { id } of checkedItems) {
81
+ iterable.add(id);
82
+ }
83
+ }
84
+ else if (Array.isArray(iterable)) {
85
+ iterable.length = 0;
86
+ iterable.push(...checkedItems.map(({ id }) => id));
87
+ }
88
+ }
89
+ export function traversalSyncSingleSelection(itemId, state, iterable) {
90
+ const node = state.get(itemId);
91
+ if (!node)
92
+ return;
93
+ // Uncheck all other nodes
94
+ for (const n of state.values()) {
95
+ if (n.id !== itemId && n.checked) {
96
+ n.checked = false;
97
+ n.indeterminate = false;
98
+ }
99
+ }
100
+ // Check the current node
101
+ node.checked = !node.checked;
102
+ node.indeterminate = false;
103
+ if (iterable instanceof Set) {
104
+ iterable.clear();
105
+ iterable.add(node.id);
106
+ }
107
+ else if (Array.isArray(iterable)) {
108
+ iterable.length = 0;
109
+ iterable.push(node.id);
110
+ }
111
+ }
@@ -0,0 +1,185 @@
1
+ import type { HTMLAttributes } from 'svelte/elements';
2
+ import type { FSContext } from '../../internal/index.js';
3
+ import type { Component, Snippet } from 'svelte';
4
+ import type { SvelteMap, SvelteSet } from 'svelte/reactivity';
5
+ import type { Sizes } from '../../types/index.js';
6
+ export type TreeViewNavigation = 'tree' | 'treegrid';
7
+ export type TreeViewSelectionMode = 'single' | 'multiple';
8
+ export type TreeViewItemType = 'item' | 'branch';
9
+ export type TreeViewNode = {
10
+ id: string;
11
+ type: TreeViewItemType;
12
+ parentId?: string;
13
+ disabled?: boolean;
14
+ checked?: boolean;
15
+ indeterminate?: boolean;
16
+ open?: boolean;
17
+ };
18
+ export type TreeViewEvent<T extends Record<string, unknown> | Iterable<unknown>> = (e: Event, data: T) => void;
19
+ /**
20
+ * Bridge to a windowing/virtual-list library. When provided to `TreeView`, only the
21
+ * rendered slice of items lives in the DOM; the tree exposes the real index per item
22
+ * (`data-index`) and registers this adapter so keyboard navigation can scroll the
23
+ * target into view before activating it.
24
+ */
25
+ export type TreeViewVirtualizer = {
26
+ /** Total number of real items (the whole data set, not just the rendered window). */
27
+ size: number;
28
+ /** Scroll so the item at `index` renders. May be async. */
29
+ scrollToIndex?: (index: number) => void | Promise<void>;
30
+ scrollToTop?: () => void | Promise<void>;
31
+ scrollToBottom?: () => void | Promise<void>;
32
+ };
33
+ /** The state shape of a virtualized tree: Sets, for the lookups a windowed list does on every render. */
34
+ export type TreeViewVirtualProps = {
35
+ virtualizer?: TreeViewVirtualizer;
36
+ openItems?: SvelteSet<string>;
37
+ checkedItems?: SvelteSet<string>;
38
+ };
39
+ /** The state shape of a tree that renders every item. */
40
+ export type TreeViewStaticProps = {
41
+ virtualizer?: never;
42
+ openItems?: string[];
43
+ checkedItems?: string[];
44
+ };
45
+ /** @propsmith TreeViewProps */
46
+ export type TreeViewProps = {
47
+ /** The DOM reference of the tree element.
48
+ * @bindable
49
+ */
50
+ ref?: HTMLUListElement;
51
+ /** The size of every item in the tree.
52
+ * @default 'medium'
53
+ */
54
+ size?: Sizes;
55
+ /** Whether the tree takes a single tab stop, or every row is reachable on its own.
56
+ * @default 'tree'
57
+ */
58
+ navigationMode?: TreeViewNavigation;
59
+ /** Called whenever a branch opens or closes.
60
+ * @type (e: Event, openItems: string[]) => void
61
+ */
62
+ onOpenChange?: TreeViewEvent<string[]>;
63
+ /** How many items can be checked at a time.
64
+ * @default 'multiple'
65
+ */
66
+ selectionMode?: TreeViewSelectionMode;
67
+ /** Called whenever an item is checked or unchecked.
68
+ * @type (e: Event, checkedItems: string[]) => void
69
+ */
70
+ onCheckedChange?: TreeViewEvent<string[]>;
71
+ /** Bridge to a windowing library. Only the rendered slice of items lives in the DOM.
72
+ * @type TreeViewVirtualizer
73
+ */
74
+ virtualizer?: TreeViewVirtualizer;
75
+ /** The ids of the open branches. A `SvelteSet` is required when a `virtualizer` is set.
76
+ * @type string[] | SvelteSet<string>
77
+ * @bindable
78
+ */
79
+ openItems?: string[] | SvelteSet<string>;
80
+ /** The ids of the checked items. A `SvelteSet` is required when a `virtualizer` is set.
81
+ * @type string[] | SvelteSet<string>
82
+ * @bindable
83
+ */
84
+ checkedItems?: string[] | SvelteSet<string>;
85
+ /** The items of the tree. */
86
+ children?: Snippet;
87
+ } & (TreeViewVirtualProps | TreeViewStaticProps) & HTMLAttributes<HTMLUListElement>;
88
+ /** @propsmith TreeViewItemProps */
89
+ export type TreeViewItemProps = {
90
+ /** The id of the item, used by the tree to track its state. Falls back to a generated id. */
91
+ id?: string;
92
+ /** Whether the item holds children, and can therefore be opened.
93
+ * @default 'item'
94
+ */
95
+ type?: TreeViewItemType;
96
+ /** The DOM reference of the item element. */
97
+ ref?: HTMLLIElement;
98
+ /** The value reported by the tree events. Falls back to the id of the item.
99
+ * @default id
100
+ */
101
+ value?: string | number;
102
+ /** The label of the item, used by the type-ahead navigation. */
103
+ text?: string;
104
+ /** Whether the branch is open. */
105
+ open?: boolean;
106
+ /** Whether the item is checked. */
107
+ checked?: boolean;
108
+ /** Renders the checkbox in its mixed state, when only some children are checked. */
109
+ indeterminate?: boolean;
110
+ /** Disables the user interaction. */
111
+ disabled?: boolean;
112
+ /** The real index of the item in the data set. Required when the tree is virtualized. */
113
+ index?: number;
114
+ /** Called when this branch opens or closes.
115
+ * @type (e: Event, data: { id: string; open: boolean }) => void
116
+ */
117
+ onOpenChange?: TreeViewEvent<{
118
+ id: string;
119
+ open: boolean;
120
+ }>;
121
+ /** Called when this item is checked or unchecked.
122
+ * @type (e: Event, data: { id: string; checked: boolean }) => void
123
+ */
124
+ onCheckedChange?: TreeViewEvent<{
125
+ id: string;
126
+ checked: boolean;
127
+ }>;
128
+ } & HTMLAttributes<HTMLLIElement>;
129
+ /** @propsmith TreeViewItemLayoutProps */
130
+ export type TreeViewItemLayoutProps = {
131
+ /** The DOM reference of the layout element. */
132
+ ref?: HTMLDivElement;
133
+ /** Custom icon for the control that opens a branch.
134
+ * @type Snippet | Component
135
+ */
136
+ expandIcon?: Snippet | Component;
137
+ /** Content rendered before the label.
138
+ * @type Snippet | Component
139
+ */
140
+ iconBefore?: Snippet | Component;
141
+ /** Content rendered after the label.
142
+ * @type Snippet | Component
143
+ */
144
+ iconAfter?: Snippet | Component;
145
+ /** Content pinned to the end of the row.
146
+ * @type Snippet | Component
147
+ */
148
+ aside?: Snippet | Component;
149
+ /** Content pinned to the end of the row, revealed on hover and on focus.
150
+ * @type Snippet | Component
151
+ */
152
+ actions?: Snippet | Component;
153
+ } & HTMLAttributes<HTMLDivElement>;
154
+ export type TreeViewContext = FSContext<{
155
+ navigationMode: TreeViewNavigation;
156
+ size: Sizes;
157
+ virtualized: boolean;
158
+ virtualCount?: number;
159
+ }, {
160
+ readonly selectionMode?: TreeViewSelectionMode;
161
+ readonly openItems: NonNullable<TreeViewProps['openItems']>;
162
+ readonly checkedItems: NonNullable<TreeViewProps['checkedItems']>;
163
+ readonly TREE_NODES: SvelteMap<string, TreeViewNode>;
164
+ forceVirtualRender: boolean;
165
+ }, {
166
+ onOpenChange: TreeViewEvent<string[]>;
167
+ onCheckedChange: TreeViewEvent<string[]>;
168
+ }, {
169
+ handleCheck: (e: Event | null, id: string, checked: boolean) => Promise<void>;
170
+ openItem: (e: Event | null, id: string) => void;
171
+ closeItem: (e: Event | null, id: string) => void;
172
+ registerItem: (node: TreeViewNode) => void;
173
+ unregisterItem: (id: string) => void;
174
+ }>;
175
+ export type TreeViewItemContext = {
176
+ readonly disabled?: boolean;
177
+ readonly value: string | number;
178
+ readonly depth: number;
179
+ readonly id: string;
180
+ readonly type: TreeViewItemType;
181
+ readonly parentId?: string;
182
+ open?: boolean;
183
+ checked?: boolean;
184
+ indeterminate?: boolean;
185
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,186 @@
1
+ :is(html:has(.dark), html.dark):root {
2
+ /* Text Colors */
3
+ --fs-text-primary: #fff;
4
+ --fs-text-secondary: #ffffffc5;
5
+ --fs-text-tertiary: #ffffff87;
6
+ --fs-text-disabled: #ffffff5d;
7
+
8
+ --fs-accent-text-primary: rgb(var(--fs-accent-light-3));
9
+ --fs-accent-text-secondary: rgb(var(--fs-accent-light-3));
10
+ --fs-accent-text-tertiary: rgb(var(--fs-accent-light-2));
11
+
12
+ --fs-text-on-accent-primary: #000;
13
+ --fs-text-on-accent-secondary: #00000080;
14
+ --fs-text-on-accent-disabled: #ffffff87;
15
+ /* --fs-text-on-accent-selected: #fff; <- Same on light/dark */
16
+
17
+ /* Control Fill Colors
18
+ * These colors are used for standard controls like buttons, dropdowns, search, etc.
19
+ */
20
+ --fs-control-fill-default: #ffffff0f;
21
+ --fs-control-fill-secondary: #ffffff15;
22
+ --fs-control-fill-tertiary: #ffffff0b;
23
+ --fs-control-fill-quaternary: #ffffff0f;
24
+ --fs-control-fill-disabled: #f9f9f90b;
25
+ /* --fs-control-fill-transparent: transparent; <- Same on light/dark */
26
+ --fs-control-fill-input-active: #1e1e1eb3;
27
+
28
+ /* Control Alt Fill Colors
29
+ * These colors are used for standard controls like toggle, radio, checkbox, rating, etc.
30
+ */
31
+ --fs-control-alt-fill-transparent: transparent;
32
+ --fs-control-alt-fill-secondary: #00000019;
33
+ --fs-control-alt-fill-tertiary: #ffffff0b;
34
+ --fs-control-alt-fill-quaternary: #ffffff12;
35
+ --fs-control-alt-fill-disabled: transparent;
36
+
37
+ /* Special Control Colors (Control solid and control strong fill)
38
+ * --fs-control-solid Fills used for Sliders thumb control to cover the track beneath it.
39
+ ---------------------------
40
+ * --fs-control-strong-default and --fs-control-strong-disabled Used for control fills that must meet contrast ratio requirements of 3:1 Examples: Scroll bar, Slider, Flip view
41
+ */
42
+ --fs-control-solid: #454545;
43
+ --fs-control-strong-default: #ffffff8b;
44
+ --fs-control-strong-disabled: #ffffff3f;
45
+
46
+ /* Subtle Colors */
47
+ /* --fs-subtle-fill-transparent: transparent; <- Same on light/dark */
48
+ --fs-subtle-fill-secondary: #ffffff0f;
49
+ --fs-subtle-fill-tertiary: #ffffff0a;
50
+ /* --fs-subtle-fill-disabled: transparent; <- Same on light/dark */
51
+
52
+ /* Control On Image Fill
53
+ * These colors are used for controls that are placed on top of images.
54
+ */
55
+ --fs-control-on-image-fill-default: #1c1c1cb3;
56
+ --fs-control-on-image-fill-secondary: #1a1a1a;
57
+ --fs-control-on-image-fill-tertiary: #131313;
58
+ --fs-control-on-image-fill-disabled: #1e1e1e;
59
+
60
+ /* Accent Fill Colors */
61
+ --fs-accent-fill-default: rgb(var(--fs-accent-light-2));
62
+ --fs-accent-fill-secondary: rgba(var(--fs-accent-light-2), 0.7);
63
+ --fs-accent-fill-tertiary: rgba(var(--fs-accent-light-2), 0.6);
64
+ --fs-accent-fill-disabled: #ffffff28;
65
+ /* --fs-accent-fill-selected-text-bg: rgb(var(--fs-accent-base)); <- Same on light/dark */
66
+
67
+ /* Elevation */
68
+ --fs-elevation-control-border: linear-gradient(180deg, rgba(255, 255, 255, 0.09) 0%, rgba(255, 255, 255, 0.07) 10%);
69
+ --fs-elevation-accent-control-border: linear-gradient(
70
+ 180deg,
71
+ rgba(255, 255, 255, 0.1) 91%,
72
+ /* Changed opacity to 0.1 from original 0.08 */ rgba(0, 0, 0, 0.14) 100%
73
+ );
74
+ --fs-elevation-circle-border: linear-gradient(180deg, rgba(255, 255, 255, 0.09) 0%, rgba(255, 255, 255, 0.07) 50%);
75
+ --fs-elevation-text-border: linear-gradient(
76
+ 180deg,
77
+ rgba(255, 255, 255, 0.03) calc(100% - 0.07rem),
78
+ rgba(255, 255, 255, 0.54) calc(100% - 0.07rem)
79
+ );
80
+ --fs-elevation-text-border-focused: linear-gradient(
81
+ 180deg,
82
+ rgba(255, 255, 255, 0.08) 94.5%,
83
+ rgb(var(--fs-accent-light-1)) 94.5%
84
+ );
85
+
86
+ /* Control Stroke */
87
+ --fs-control-stroke-default: #ffffff12;
88
+ --fs-control-stroke-secondary: #ffffff18;
89
+ --fs-control-stroke-on-accent-default: #ffffff14;
90
+ --fs-control-stroke-on-accent-secondary: #00000023;
91
+ --fs-control-stroke-on-accent-tertiary: #00000037;
92
+ --fs-control-stroke-on-accent-disabled: #00000033;
93
+ --fs-control-stroke-on-image: #0000006b;
94
+ --fs-card-stroke-default: #00000019;
95
+ --fs-card-stroke-solid: #1c1c1c;
96
+
97
+ /* Control Strong Stroke */
98
+ --fs-control-strong-stroke-default: #ffffff8b;
99
+ --fs-control-strong-stroke-disabled: #ffffff28;
100
+
101
+ /* Control Surface Stroke */
102
+ /* --fs-control-surface-stroke-default: #75757566; <- Same on light/dark */
103
+ --fs-control-surface-stroke-flyout: #00000033;
104
+
105
+ /* Divider Stroke */
106
+ --fs-divider-stroke-default: #ffffff15;
107
+
108
+ /* Focus Stroke */
109
+ --fs-focus-stroke-outer: #fff;
110
+ --fs-focus-stroke-inner: #000000b3;
111
+
112
+ /* Card Background */
113
+ --fs-card-background-default: #ffffff0d;
114
+ --fs-card-background-secondary: #ffffff08;
115
+
116
+ /* Smoke Background */
117
+ /* --fs-smoke-background-default: #0000004d; <- Same on light/dark */
118
+
119
+ /* Layer */
120
+ --fs-layer-default: #3a3a3a4c;
121
+ --fs-layer-alt: #ffffff0d;
122
+
123
+ /* Layer on Acrylic */
124
+ --fs-layer-on-acrylic-default: #ffffff09;
125
+
126
+ /* Solid Background */
127
+ --fs-solid-background-base: #202020;
128
+ --fs-solid-background-secondary: #1c1c1c;
129
+ --fs-solid-background-tertiary: #282828;
130
+ --fs-solid-background-quaternary: #2c2c2c;
131
+
132
+ /* Acrylic Background */
133
+ --fs-acrylic-background-base: #202020;
134
+ --fs-acrylic-background-default: #2c2c2c;
135
+
136
+ /* Accent Acrylic Background */
137
+ --fs-accent-acrylic-background-base: rgba(var(--fs-accent-dark-2), 0.8);
138
+ --fs-accent-acrylic-background-default: rgba(var(--fs-accent-dark-1), 0.8);
139
+
140
+ /* System */
141
+ --fs-system-attention: rgb(var(--fs-accent-light-3));
142
+ --fs-system-attetion-bg: #f6f6f608;
143
+ --fs-system-attention-solid-bg: #2e2e2e;
144
+
145
+ --fs-system-success: #6ccb5f;
146
+ --fs-system-success-bg: #393d1b;
147
+
148
+ --fs-system-caution: #fce100;
149
+ --fs-system-caution-bg: #433519;
150
+
151
+ --fs-system-critical: #ff99a4;
152
+ --fs-system-critical-bg: #442726;
153
+
154
+ --fs-system-neutral: #ffffff8b;
155
+ --fs-system-neutral-bg: #ffffff08;
156
+
157
+ --fs-system-solid-neutral: #9d9d9d;
158
+ --fs-system-solid-neutral-bg: #2e2e2e;
159
+
160
+ /* Shadows */
161
+ --fs-shadow-card: 0 0.125rem 0.25rem #00000021; /* 13% opacity */
162
+ --fs-shadow-tooltip: 0 0.25rem 0.5rem #00000042; /* 26% opacity */
163
+ --fs-shadow-flyout: 0 0.5rem 1rem #00000042; /* 26% opacity */
164
+ --fs-shadow-dialog: 0 2rem 4rem #0000005e, 0 1.125rem 1.313rem #0000005e; /* 37% opacity */
165
+
166
+ /* Shell Shadows */
167
+ --fs-shell-shadow-inactive: 0 1rem 2rem #0000005e, 0 0.125rem 0.625rem #0000005e; /* 37% opacity */
168
+ --fs-shell-shadow-active: 0 2rem 4rem #0000008f, 0 0.125rem 1.313rem #0000008c; /* 56% and 55% opacity respectively */
169
+
170
+ /* Customs Variables */
171
+ --fs-radial-mica-bg: radial-gradient(
172
+ circle,
173
+ rgba(28, 35, 42, 1) 0%,
174
+ rgba(30, 35, 43, 1) 30%,
175
+ rgba(27, 33, 41, 1) 43%,
176
+ rgba(27, 32, 40, 1) 63%,
177
+ rgba(27, 33, 41, 1) 72%,
178
+ rgba(27, 33, 41, 1) 100%
179
+ );
180
+
181
+ --fs-system-neutral-text: color-mix(in srgb, var(--fs-system-neutral), white 50%);
182
+ --fs-system-attention-text: color-mix(in srgb, var(--fs-system-attention), white 50%);
183
+ --fs-system-caution-text: color-mix(in srgb, var(--fs-system-caution), white 50%);
184
+ --fs-system-success-text: color-mix(in srgb, var(--fs-system-success), white 50%);
185
+ --fs-system-critical-text: color-mix(in srgb, var(--fs-system-critical), white 50%);
186
+ }
@@ -0,0 +1,189 @@
1
+ @media (prefers-color-scheme: dark) {
2
+ :root {
3
+ /* Text Colors */
4
+ --fs-text-primary: #fff;
5
+ --fs-text-secondary: #ffffffc5;
6
+ --fs-text-tertiary: #ffffff87;
7
+ --fs-text-disabled: #ffffff5d;
8
+
9
+ --fs-accent-text-primary: rgb(var(--fs-accent-light-3));
10
+ --fs-accent-text-secondary: rgb(var(--fs-accent-light-3));
11
+ --fs-accent-text-tertiary: rgb(var(--fs-accent-light-2));
12
+
13
+ --fs-text-on-accent-primary: #000;
14
+ --fs-text-on-accent-secondary: #00000080;
15
+ --fs-text-on-accent-disabled: #ffffff87;
16
+ /* --fs-text-on-accent-selected: #fff; <- Same on light/dark */
17
+
18
+ /* Control Fill Colors
19
+ * These colors are used for standard controls like buttons, dropdowns, search, etc.
20
+ */
21
+ --fs-control-fill-default: #ffffff0f;
22
+ --fs-control-fill-secondary: #ffffff15;
23
+ --fs-control-fill-tertiary: #ffffff0b;
24
+ --fs-control-fill-quaternary: #ffffff0f;
25
+ --fs-control-fill-disabled: #f9f9f90b;
26
+ /* --fs-control-fill-transparent: transparent; <- Same on light/dark */
27
+ --fs-control-fill-input-active: #1e1e1eb3;
28
+
29
+ /* Control Alt Fill Colors
30
+ * These colors are used for standard controls like toggle, radio, checkbox, rating, etc.
31
+ */
32
+ --fs-control-alt-fill-transparent: transparent;
33
+ --fs-control-alt-fill-secondary: #00000019;
34
+ --fs-control-alt-fill-tertiary: #ffffff0b;
35
+ --fs-control-alt-fill-quaternary: #ffffff12;
36
+ --fs-control-alt-fill-disabled: transparent;
37
+
38
+ /* Special Control Colors (Control solid and control strong fill)
39
+ * --fs-control-solid Fills used for Sliders thumb control to cover the track beneath it.
40
+ ---------------------------
41
+ * --fs-control-strong-default and --fs-control-strong-disabled Used for control fills that must meet contrast ratio requirements of 3:1 Examples: Scroll bar, Slider, Flip view
42
+ */
43
+ --fs-control-solid: #454545;
44
+ --fs-control-strong-default: #ffffff8b;
45
+ --fs-control-strong-disabled: #ffffff3f;
46
+
47
+ /* Subtle Colors */
48
+ /* --fs-subtle-fill-transparent: transparent; <- Same on light/dark */
49
+ --fs-subtle-fill-secondary: #ffffff0f;
50
+ --fs-subtle-fill-tertiary: #ffffff0a;
51
+ /* --fs-subtle-fill-disabled: transparent; <- Same on light/dark */
52
+
53
+ /* Control On Image Fill
54
+ * These colors are used for controls that are placed on top of images.
55
+ */
56
+ --fs-control-on-image-fill-default: #1c1c1cb3;
57
+ --fs-control-on-image-fill-secondary: #1a1a1a;
58
+ --fs-control-on-image-fill-tertiary: #131313;
59
+ --fs-control-on-image-fill-disabled: #1e1e1e;
60
+
61
+ /* Accent Fill Colors */
62
+ --fs-accent-fill-default: rgb(var(--fs-accent-light-2));
63
+ --fs-accent-fill-secondary: rgba(var(--fs-accent-light-2), 0.7);
64
+ --fs-accent-fill-tertiary: rgba(var(--fs-accent-light-2), 0.6);
65
+ --fs-accent-fill-disabled: #ffffff28;
66
+ /* --fs-accent-fill-selected-text-bg: rgb(var(--fs-accent-base)); <- Same on light/dark */
67
+
68
+ /* Elevation */
69
+ --fs-elevation-control-border: linear-gradient(180deg, rgba(255, 255, 255, 0.09) 0%, rgba(255, 255, 255, 0.07) 10%);
70
+ --fs-elevation-accent-control-border: linear-gradient(
71
+ 180deg,
72
+ rgba(255, 255, 255, 0.1) 91%,
73
+ /* Changed opacity to 0.1 from original 0.08 */ rgba(0, 0, 0, 0.14) 100%
74
+ );
75
+ --fs-elevation-circle-border: linear-gradient(180deg, rgba(255, 255, 255, 0.09) 0%, rgba(255, 255, 255, 0.07) 50%);
76
+ --fs-elevation-text-border: linear-gradient(
77
+ 180deg,
78
+ rgba(255, 255, 255, 0.03) calc(100% - 0.07rem),
79
+ rgba(255, 255, 255, 0.54) calc(100% - 0.07rem)
80
+ );
81
+ --fs-elevation-text-border-focused: linear-gradient(
82
+ 180deg,
83
+ rgba(255, 255, 255, 0.08) 94.5%,
84
+ rgb(var(--fs-accent-light-1)) 94.5%
85
+ );
86
+
87
+ /* Control Stroke */
88
+ --fs-control-stroke-default: #ffffff12;
89
+ --fs-control-stroke-secondary: #ffffff18;
90
+ --fs-control-stroke-on-accent-default: #ffffff14;
91
+ --fs-control-stroke-on-accent-secondary: #00000023;
92
+ --fs-control-stroke-on-accent-tertiary: #00000037;
93
+ --fs-control-stroke-on-accent-disabled: #00000033;
94
+ --fs-control-stroke-on-image: #0000006b;
95
+ --fs-card-stroke-default: #00000019;
96
+ --fs-card-stroke-solid: #1c1c1c;
97
+
98
+ /* Control Strong Stroke */
99
+ --fs-control-strong-stroke-default: #ffffff8b;
100
+ --fs-control-strong-stroke-disabled: #ffffff28;
101
+
102
+ /* Control Surface Stroke */
103
+ /* --fs-control-surface-stroke-default: #75757566; <- Same on light/dark */
104
+ --fs-control-surface-stroke-flyout: #00000033;
105
+
106
+ /* Divider Stroke */
107
+ --fs-divider-stroke-default: #ffffff15;
108
+
109
+ /* Focus Stroke */
110
+ --fs-focus-stroke-outer: #fff;
111
+ --fs-focus-stroke-inner: #000000b3;
112
+
113
+ /* Card Background */
114
+ --fs-card-background-default: #ffffff0d;
115
+ --fs-card-background-secondary: #ffffff08;
116
+
117
+ /* Smoke Background */
118
+ /* --fs-smoke-background-default: #0000004d; <- Same on light/dark */
119
+
120
+ /* Layer */
121
+ --fs-layer-default: #3a3a3a4c;
122
+ --fs-layer-alt: #ffffff0d;
123
+
124
+ /* Layer on Acrylic */
125
+ --fs-layer-on-acrylic-default: #ffffff09;
126
+
127
+ /* Solid Background */
128
+ --fs-solid-background-base: #202020;
129
+ --fs-solid-background-secondary: #1c1c1c;
130
+ --fs-solid-background-tertiary: #282828;
131
+ --fs-solid-background-quaternary: #2c2c2c;
132
+
133
+ /* Acrylic Background */
134
+ --fs-acrylic-background-base: #202020;
135
+ --fs-acrylic-background-default: #2c2c2c;
136
+
137
+ /* Accent Acrylic Background */
138
+ --fs-accent-acrylic-background-base: rgba(var(--fs-accent-dark-2), 0.8);
139
+ --fs-accent-acrylic-background-default: rgba(var(--fs-accent-dark-1), 0.8);
140
+
141
+ /* System */
142
+ --fs-system-attention: rgb(var(--fs-accent-light-3));
143
+ --fs-system-attetion-bg: #f6f6f608;
144
+ --fs-system-attention-solid-bg: #2e2e2e;
145
+
146
+ --fs-system-success: #6ccb5f;
147
+ --fs-system-success-bg: #393d1b;
148
+
149
+ --fs-system-caution: #fce100;
150
+ --fs-system-caution-bg: #433519;
151
+
152
+ --fs-system-critical: #ff4658; /* Changed from #ff99a4 to #ff4658 for better visibility */
153
+ --fs-system-critical-bg: #442726;
154
+
155
+ --fs-system-neutral: #ffffff8b;
156
+ --fs-system-neutral-bg: #ffffff08;
157
+
158
+ --fs-system-solid-neutral: #9d9d9d;
159
+ --fs-system-solid-neutral-bg: #2e2e2e;
160
+
161
+ /* Shadows */
162
+ --fs-shadow-card: 0 0.125rem 0.25rem #00000021; /* 13% opacity */
163
+ --fs-shadow-tooltip: 0 0.25rem 0.5rem #00000042; /* 26% opacity */
164
+ --fs-shadow-flyout: 0 0.5rem 1rem #00000042; /* 26% opacity */
165
+ --fs-shadow-dialog: 0 2rem 4rem #0000005e, 0 1.125rem 1.313rem #0000005e; /* 37% opacity */
166
+
167
+ /* Shell Shadows */
168
+ --fs-shell-shadow-inactive: 0 1rem 2rem #0000005e, 0 0.125rem 0.625rem #0000005e; /* 37% opacity */
169
+ --fs-shell-shadow-active:
170
+ 0 2rem 4rem #0000008f, 0 0.125rem 1.313rem #0000008c; /* 56% and 55% opacity respectively */
171
+
172
+ /* Customs Variables */
173
+ --fs-radial-mica-bg: radial-gradient(
174
+ circle,
175
+ rgba(28, 35, 42, 1) 0%,
176
+ rgba(30, 35, 43, 1) 30%,
177
+ rgba(27, 33, 41, 1) 43%,
178
+ rgba(27, 32, 40, 1) 63%,
179
+ rgba(27, 33, 41, 1) 72%,
180
+ rgba(27, 33, 41, 1) 100%
181
+ );
182
+
183
+ --fs-system-neutral-text: color-mix(in srgb, var(--fs-system-neutral), white 50%);
184
+ --fs-system-attention-text: color-mix(in srgb, var(--fs-system-attention), white 50%);
185
+ --fs-system-caution-text: color-mix(in srgb, var(--fs-system-caution), white 50%);
186
+ --fs-system-success-text: color-mix(in srgb, var(--fs-system-success), white 50%);
187
+ --fs-system-critical-text: color-mix(in srgb, var(--fs-system-critical), white 20%);
188
+ }
189
+ }