zabi-components 6.0.0 → 7.0.1

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 (200) hide show
  1. package/README.md +137 -1473
  2. package/dist/atoms/ActionPanel.svelte +116 -0
  3. package/dist/atoms/ActionPanel.svelte.d.ts +19 -0
  4. package/dist/atoms/Badge.svelte +1 -1
  5. package/dist/atoms/Badge.svelte.d.ts +1 -1
  6. package/dist/atoms/Button.svelte +38 -21
  7. package/dist/atoms/Button.svelte.d.ts +6 -6
  8. package/dist/atoms/Card.svelte +12 -3
  9. package/dist/atoms/Card.svelte.d.ts +2 -2
  10. package/dist/atoms/CardHeader.svelte +8 -4
  11. package/dist/atoms/CardHeader.svelte.d.ts +4 -2
  12. package/dist/atoms/Checkbox.svelte +50 -76
  13. package/dist/atoms/Checkbox.svelte.d.ts +7 -2
  14. package/dist/atoms/CodeBlock.svelte +20 -34
  15. package/dist/atoms/CodeBlock.svelte.d.ts +1 -0
  16. package/dist/atoms/ColorPicker.svelte +2 -6
  17. package/dist/atoms/Container.svelte +41 -0
  18. package/dist/atoms/Container.svelte.d.ts +12 -0
  19. package/dist/atoms/Divider.svelte +68 -0
  20. package/dist/atoms/Divider.svelte.d.ts +13 -0
  21. package/dist/atoms/FeatureCard.svelte +35 -50
  22. package/dist/atoms/FeatureCard.svelte.d.ts +9 -4
  23. package/dist/atoms/IconButton.svelte +36 -29
  24. package/dist/atoms/IconButton.svelte.d.ts +7 -13
  25. package/dist/atoms/Input.svelte +58 -26
  26. package/dist/atoms/Input.svelte.d.ts +6 -1
  27. package/dist/atoms/List.svelte +2 -7
  28. package/dist/atoms/List.svelte.d.ts +1 -6
  29. package/dist/atoms/ListItem.svelte +54 -65
  30. package/dist/atoms/ListItem.svelte.d.ts +7 -13
  31. package/dist/atoms/ListItemLeading.svelte +19 -0
  32. package/dist/atoms/ListItemLeading.svelte.d.ts +9 -0
  33. package/dist/atoms/Progress.svelte +1 -1
  34. package/dist/atoms/Radio.svelte +51 -0
  35. package/dist/atoms/Radio.svelte.d.ts +14 -0
  36. package/dist/atoms/Select.svelte +23 -30
  37. package/dist/atoms/Select.svelte.d.ts +0 -10
  38. package/dist/atoms/SelectionControl.svelte +98 -0
  39. package/dist/atoms/SelectionControl.svelte.d.ts +26 -0
  40. package/dist/atoms/Skeleton.svelte +39 -15
  41. package/dist/atoms/Skeleton.svelte.d.ts +7 -3
  42. package/dist/atoms/Table.svelte +27 -0
  43. package/dist/atoms/Table.svelte.d.ts +10 -0
  44. package/dist/atoms/Text.svelte +46 -0
  45. package/dist/atoms/Text.svelte.d.ts +13 -0
  46. package/dist/atoms/Textarea.svelte +74 -53
  47. package/dist/atoms/Textarea.svelte.d.ts +6 -2
  48. package/dist/atoms/ThemeToggle.svelte +35 -24
  49. package/dist/atoms/ThemeToggle.svelte.d.ts +1 -0
  50. package/dist/atoms/Toast.svelte +55 -31
  51. package/dist/atoms/Toast.svelte.d.ts +4 -1
  52. package/dist/atoms/Toggle.svelte +37 -22
  53. package/dist/atoms/Toggle.svelte.d.ts +2 -1
  54. package/dist/atoms/Tooltip.svelte +97 -14
  55. package/dist/atoms/Tooltip.svelte.d.ts +6 -5
  56. package/dist/atoms/index.d.ts +6 -0
  57. package/dist/atoms/index.js +6 -0
  58. package/dist/atoms/selection-control.styles.d.ts +25 -0
  59. package/dist/atoms/selection-control.styles.js +30 -0
  60. package/dist/components/atoms/index.d.ts +6 -0
  61. package/dist/components/atoms/index.d.ts.map +1 -1
  62. package/dist/components/atoms/selection-control.styles.d.ts +26 -0
  63. package/dist/components/atoms/selection-control.styles.d.ts.map +1 -0
  64. package/dist/components/index.d.ts +41 -5
  65. package/dist/components/index.d.ts.map +1 -1
  66. package/dist/components/molecules/index.d.ts +10 -0
  67. package/dist/components/molecules/index.d.ts.map +1 -1
  68. package/dist/components/molecules/navigation-menu-context.d.ts +11 -0
  69. package/dist/components/molecules/navigation-menu-context.d.ts.map +1 -1
  70. package/dist/components/molecules/toast-store.d.ts +39 -0
  71. package/dist/components/molecules/toast-store.d.ts.map +1 -0
  72. package/dist/components/organisms/index.d.ts +2 -1
  73. package/dist/components/organisms/index.d.ts.map +1 -1
  74. package/dist/components/types/page.types.d.ts +69 -0
  75. package/dist/components/types/page.types.d.ts.map +1 -0
  76. package/dist/components/types/page.types.js +1 -0
  77. package/dist/components/types/variants.d.ts +64 -0
  78. package/dist/components/types/variants.d.ts.map +1 -0
  79. package/dist/components/types/variants.js +44 -0
  80. package/dist/components/util/fixed-sidebar-flyout.d.ts +23 -0
  81. package/dist/components/util/fixed-sidebar-flyout.d.ts.map +1 -0
  82. package/dist/components/util/focus-utils.d.ts +12 -0
  83. package/dist/components/util/focus-utils.d.ts.map +1 -0
  84. package/dist/components/util/ssr-safe.d.ts +17 -0
  85. package/dist/components/util/ssr-safe.d.ts.map +1 -0
  86. package/dist/index.d.ts +41 -5
  87. package/dist/index.js +44 -8
  88. package/dist/lib/layout-width-tokens.d.ts +17 -0
  89. package/dist/lib/layout-width-tokens.d.ts.map +1 -0
  90. package/dist/lib/showcase/component-docs/Button.d.ts +3 -0
  91. package/dist/lib/showcase/component-docs/Button.d.ts.map +1 -0
  92. package/dist/lib/showcase/component-docs/Input.d.ts +3 -0
  93. package/dist/lib/showcase/component-docs/Input.d.ts.map +1 -0
  94. package/dist/lib/showcase/component-docs/List.d.ts +3 -0
  95. package/dist/lib/showcase/component-docs/List.d.ts.map +1 -0
  96. package/dist/lib/showcase/component-docs/Modal.d.ts +3 -0
  97. package/dist/lib/showcase/component-docs/Modal.d.ts.map +1 -0
  98. package/dist/lib/showcase/component-docs/Radio.d.ts +3 -0
  99. package/dist/lib/showcase/component-docs/Radio.d.ts.map +1 -0
  100. package/dist/lib/showcase/component-docs/SidebarNavigation.d.ts +3 -0
  101. package/dist/lib/showcase/component-docs/SidebarNavigation.d.ts.map +1 -0
  102. package/dist/lib/showcase/component-docs/Skeleton.d.ts +3 -0
  103. package/dist/lib/showcase/component-docs/Skeleton.d.ts.map +1 -0
  104. package/dist/lib/showcase/component-docs/_shared.d.ts +12 -0
  105. package/dist/lib/showcase/component-docs/_shared.d.ts.map +1 -0
  106. package/dist/lib/showcase/component-docs/index.d.ts +4 -0
  107. package/dist/lib/showcase/component-docs/index.d.ts.map +1 -0
  108. package/dist/lib/showcase/components-catalog.d.ts.map +1 -1
  109. package/dist/lib/showcase/components-showcase-constants.d.ts +26 -0
  110. package/dist/lib/showcase/components-showcase-constants.d.ts.map +1 -1
  111. package/dist/molecules/Alert.svelte +50 -23
  112. package/dist/molecules/Alert.svelte.d.ts +1 -1
  113. package/dist/molecules/ComponentDemo.svelte +2 -2
  114. package/dist/molecules/ContactForm.svelte +1 -1
  115. package/dist/molecules/Dropdown.svelte +99 -109
  116. package/dist/molecules/Dropdown.svelte.d.ts +12 -6
  117. package/dist/molecules/EmptyState.svelte +44 -0
  118. package/dist/molecules/EmptyState.svelte.d.ts +11 -0
  119. package/dist/molecules/FormField.svelte +89 -0
  120. package/dist/molecules/FormField.svelte.d.ts +23 -0
  121. package/dist/molecules/Header.svelte +41 -0
  122. package/dist/molecules/Header.svelte.d.ts +10 -0
  123. package/dist/molecules/Modal.svelte +37 -24
  124. package/dist/molecules/Modal.svelte.d.ts +4 -2
  125. package/dist/molecules/NavigationMenu.svelte +16 -0
  126. package/dist/molecules/NavigationMenu.svelte.d.ts +2 -0
  127. package/dist/molecules/NavigationMenuContent.svelte +9 -1
  128. package/dist/molecules/NavigationMenuLink.svelte +1 -1
  129. package/dist/molecules/NavigationMenuTrigger.svelte +9 -1
  130. package/dist/molecules/Page.svelte +16 -0
  131. package/dist/molecules/Page.svelte.d.ts +8 -0
  132. package/dist/molecules/PropsTable.svelte +61 -0
  133. package/dist/molecules/PropsTable.svelte.d.ts +8 -0
  134. package/dist/molecules/RadioGroup.svelte +197 -0
  135. package/dist/molecules/RadioGroup.svelte.d.ts +20 -0
  136. package/dist/molecules/Section.svelte +2 -11
  137. package/dist/molecules/Section.svelte.d.ts +2 -11
  138. package/dist/molecules/SidebarBrandHeader.svelte +68 -0
  139. package/dist/molecules/SidebarBrandHeader.svelte.d.ts +10 -0
  140. package/dist/molecules/SidebarFooter.svelte +119 -0
  141. package/dist/molecules/SidebarFooter.svelte.d.ts +23 -0
  142. package/dist/molecules/SidebarNavSection.svelte +49 -0
  143. package/dist/molecules/SidebarNavSection.svelte.d.ts +14 -0
  144. package/dist/molecules/SlideUp.svelte +19 -14
  145. package/dist/molecules/SlideUp.svelte.d.ts +1 -1
  146. package/dist/molecules/Tabs.svelte +4 -9
  147. package/dist/molecules/Toaster.svelte +21 -0
  148. package/dist/molecules/Toaster.svelte.d.ts +6 -0
  149. package/dist/molecules/ToasterToast.svelte +217 -0
  150. package/dist/molecules/ToasterToast.svelte.d.ts +7 -0
  151. package/dist/molecules/index.d.ts +10 -0
  152. package/dist/molecules/index.js +10 -0
  153. package/dist/molecules/navigation-menu-context.d.ts +11 -0
  154. package/dist/molecules/navigation-menu-context.js +18 -0
  155. package/dist/molecules/toast-store.d.ts +38 -0
  156. package/dist/molecules/toast-store.js +34 -0
  157. package/dist/organisms/SidebarAccountPanel.svelte +118 -0
  158. package/dist/organisms/SidebarAccountPanel.svelte.d.ts +20 -0
  159. package/dist/organisms/SidebarNavigation.svelte +267 -237
  160. package/dist/organisms/SidebarNavigation.svelte.d.ts +21 -5
  161. package/dist/organisms/SidebarPanel.svelte +54 -22
  162. package/dist/organisms/SidebarPanel.svelte.d.ts +3 -0
  163. package/dist/organisms/{Navbar.svelte → TopNavbar.svelte} +22 -17
  164. package/dist/organisms/TopNavbar.svelte.d.ts +35 -0
  165. package/dist/organisms/index.d.ts +2 -1
  166. package/dist/organisms/index.js +2 -1
  167. package/dist/routes/lib/focus-utils.d.ts +7 -18
  168. package/dist/routes/lib/focus-utils.ts +32 -34
  169. package/dist/routes/lib/ssr-safe.ts +5 -4
  170. package/dist/routes/lib/variant-utils.ts +48 -39
  171. package/dist/types/components.d.ts +187 -0
  172. package/dist/types/components.d.ts.map +1 -0
  173. package/dist/types/events.d.ts +200 -0
  174. package/dist/types/events.d.ts.map +1 -0
  175. package/dist/types/index.d.ts +171 -0
  176. package/dist/types/index.d.ts.map +1 -0
  177. package/dist/types/page.types.d.ts +2 -31
  178. package/dist/types/page.types.d.ts.map +1 -1
  179. package/dist/types/page.types.js +1 -0
  180. package/dist/types/page.types.ts +79 -0
  181. package/dist/types/variants.d.ts +3 -0
  182. package/dist/types/variants.d.ts.map +1 -0
  183. package/dist/types/variants.js +1 -0
  184. package/dist/types/variants.ts +5 -6
  185. package/dist/util/fixed-sidebar-flyout.d.ts +22 -0
  186. package/dist/util/fixed-sidebar-flyout.js +148 -0
  187. package/dist/util/focus-utils.d.ts +11 -0
  188. package/dist/util/focus-utils.js +94 -0
  189. package/dist/util/ssr-safe.d.ts +16 -0
  190. package/dist/util/ssr-safe.js +48 -0
  191. package/dist/zabi-components-colors.css +128 -115
  192. package/dist/zabi-components-theme-dark-only.css +77 -72
  193. package/dist/zabi-components-theme-dark.css +77 -72
  194. package/dist/zabi-components-theme-only.css +51 -43
  195. package/dist/zabi-components-theme.css +51 -43
  196. package/dist/zabi-components.css +952 -249
  197. package/docs/lucide-icons.md +24 -0
  198. package/package.json +22 -9
  199. package/scripts/fix-lucide-svelte-icon-dts.js +35 -0
  200. package/dist/organisms/Navbar.svelte.d.ts +0 -41
@@ -1,17 +1,19 @@
1
1
  <script lang="ts">
2
- import { generateId } from "../../routes/lib/ssr-safe.js";
2
+ import { generateId } from "../util/ssr-safe.js";
3
3
 
4
4
  interface Props {
5
5
  checked?: boolean;
6
6
  disabled?: boolean;
7
+ loading?: boolean;
7
8
  label?: string;
8
9
  onclick?: (event: MouseEvent) => void;
9
10
  onchange?: (event: { checked: boolean }) => void;
10
11
  }
11
12
 
12
13
  let {
13
- checked = false,
14
+ checked = $bindable(false),
14
15
  disabled = false,
16
+ loading = false,
15
17
  label = "",
16
18
  onclick,
17
19
  onchange,
@@ -19,38 +21,40 @@
19
21
  }: Props = $props();
20
22
 
21
23
  const toggleId = generateId("toggle");
24
+ const isDisabled = $derived(disabled || loading);
22
25
 
23
26
  function handleClick(event: MouseEvent) {
24
- if (disabled) return;
27
+ if (isDisabled) return;
25
28
  checked = !checked;
26
29
 
27
30
  if (onclick) onclick(event);
28
31
  if (onchange) onchange({ checked });
29
32
  }
30
33
 
31
- const toggleButtonClasses = $derived(() =>
32
- [
33
- "relative inline-flex w-10 h-6 flex-shrink-0 cursor-pointer rounded-full border-0 transition-colors duration-200 ease-in-out focus:outline-none focus:ring-2 focus:ring-brand-500 focus:ring-offset-2",
34
- checked ? "bg-action-primary" : "bg-base-400",
35
- disabled && "opacity-50 cursor-not-allowed",
36
- ]
37
- .filter(Boolean)
38
- .join(" "),
39
- );
34
+ const toggleButtonClasses = $derived(() => {
35
+ const base =
36
+ "focus-ring relative inline-flex w-10 h-6 flex-shrink-0 rounded-full border-0 transition-colors duration-200 ease-in-out focus:outline-none focus-visible:outline-none";
37
+ const colorClass = checked
38
+ ? "bg-action-primary hover:bg-action-primary-hover active:bg-action-primary-active"
39
+ : "bg-base-400 hover:bg-base-500 active:bg-base-500";
40
+ const stateClass = isDisabled
41
+ ? "opacity-50 cursor-not-allowed"
42
+ : "cursor-pointer";
43
+ return `${base} ${colorClass} ${stateClass}`;
44
+ });
40
45
 
41
46
  const toggleThumbClasses = $derived(() => {
42
- const baseClasses =
43
- "pointer-events-none absolute top-0.5 left-0.5 w-5 h-5 rounded-full bg-card transition-transform duration-200 ease-in-out";
47
+ const base =
48
+ "pointer-events-none absolute top-0.5 left-0.5 w-5 h-5 rounded-full bg-card shadow transition-transform duration-200 ease-in-out flex items-center justify-center";
44
49
  const positionClasses = checked ? "translate-x-4" : "translate-x-0";
45
-
46
- return `${baseClasses} ${positionClasses}`.trim();
50
+ return `${base} ${positionClasses}`;
47
51
  });
48
52
 
49
53
  function handleKeydown(event: KeyboardEvent) {
50
- if (disabled) return;
54
+ if (isDisabled) return;
51
55
  if (event.key === " " || event.key === "Enter") {
52
56
  event.preventDefault();
53
- handleClick(event as any);
57
+ handleClick(event as unknown as MouseEvent);
54
58
  }
55
59
  }
56
60
  </script>
@@ -61,19 +65,30 @@
61
65
  role="switch"
62
66
  id={toggleId}
63
67
  aria-checked={checked}
64
- aria-label={label || "Toggle"}
65
- {disabled}
68
+ aria-label={label ? undefined : "Toggle"}
69
+ aria-busy={loading ? "true" : undefined}
70
+ disabled={isDisabled}
66
71
  onclick={handleClick}
67
72
  onkeydown={handleKeydown}
68
73
  class={toggleButtonClasses()}
74
+ {...restProps}
69
75
  >
70
- <span class={toggleThumbClasses()}></span>
76
+ <span class={toggleThumbClasses()}>
77
+ {#if loading}
78
+ <span
79
+ class="inline-block size-3 shrink-0 animate-spin rounded-full border-2 border-brand-500 border-t-transparent"
80
+ aria-hidden="true"
81
+ ></span>
82
+ {/if}
83
+ </span>
71
84
  </button>
72
85
 
73
86
  {#if label}
74
87
  <label
75
88
  for={toggleId}
76
- class="text-sm font-medium text-label cursor-pointer"
89
+ class="text-sm font-medium text-label {isDisabled
90
+ ? 'cursor-not-allowed opacity-50'
91
+ : 'cursor-pointer'}"
77
92
  >
78
93
  {label}
79
94
  </label>
@@ -1,12 +1,13 @@
1
1
  interface Props {
2
2
  checked?: boolean;
3
3
  disabled?: boolean;
4
+ loading?: boolean;
4
5
  label?: string;
5
6
  onclick?: (event: MouseEvent) => void;
6
7
  onchange?: (event: {
7
8
  checked: boolean;
8
9
  }) => void;
9
10
  }
10
- declare const Toggle: import("svelte").Component<Props, {}, "">;
11
+ declare const Toggle: import("svelte").Component<Props, {}, "checked">;
11
12
  type Toggle = ReturnType<typeof Toggle>;
12
13
  export default Toggle;
@@ -1,12 +1,21 @@
1
1
  <script lang="ts">
2
- import { generateId } from "../../routes/lib/ssr-safe.js";
2
+ import type { Snippet } from "svelte";
3
+ import type { HTMLAttributes } from "svelte/elements";
4
+ import { onDestroy } from "svelte";
5
+ import { generateId } from "../util/ssr-safe.js";
3
6
 
4
- interface Props {
7
+ type Props = Omit<HTMLAttributes<HTMLDivElement>, "class"> & {
5
8
  content?: string;
6
9
  placement?: "top" | "bottom" | "left" | "right";
7
10
  delay?: number;
8
11
  disabled?: boolean;
9
- }
12
+ class?: string;
13
+ children?: Snippet;
14
+ };
15
+
16
+ /** First matching focusable inside the slot receives `aria-describedby` (wrapper div is skipped). */
17
+ const FOCUSABLE_SELECTOR =
18
+ 'button:not([disabled]), a[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
10
19
 
11
20
  let {
12
21
  content = "",
@@ -15,36 +24,110 @@
15
24
  disabled = false,
16
25
  children,
17
26
  ...restProps
18
- }: Props & { children?: any } = $props();
27
+ }: Props = $props();
19
28
 
20
29
  const triggerId = generateId("tooltip-trigger");
21
30
  const tooltipId = generateId("tooltip");
22
31
  let isVisible = $state(false);
23
32
  let triggerElement: HTMLElement | null = $state(null);
33
+ let showDelayTimeout: ReturnType<typeof setTimeout> | null = null;
34
+ let hideBlurTimeout: ReturnType<typeof setTimeout> | null = null;
35
+
36
+ function clearShowDelay(): void {
37
+ if (showDelayTimeout !== null) {
38
+ clearTimeout(showDelayTimeout);
39
+ showDelayTimeout = null;
40
+ }
41
+ }
42
+
43
+ function clearHideBlurTimeout(): void {
44
+ if (hideBlurTimeout !== null) {
45
+ clearTimeout(hideBlurTimeout);
46
+ hideBlurTimeout = null;
47
+ }
48
+ }
49
+
50
+ function findDescribedTarget(root: HTMLElement): HTMLElement | null {
51
+ const found = root.querySelector<HTMLElement>(FOCUSABLE_SELECTOR);
52
+ if (found) {
53
+ return found;
54
+ }
55
+ try {
56
+ if (root.matches(FOCUSABLE_SELECTOR)) {
57
+ return root;
58
+ }
59
+ } catch {
60
+ /* `matches()` can throw on unusual roots */
61
+ }
62
+ return null;
63
+ }
64
+
65
+ $effect(() => {
66
+ const root = triggerElement;
67
+ const describe =
68
+ isVisible && content && !disabled ? tooltipId : null;
69
+ if (!root) {
70
+ return;
71
+ }
72
+ const target = findDescribedTarget(root);
73
+ if (!target) {
74
+ return;
75
+ }
76
+ if (describe) {
77
+ target.setAttribute("aria-describedby", describe);
78
+ } else {
79
+ target.removeAttribute("aria-describedby");
80
+ }
81
+ return () => {
82
+ target.removeAttribute("aria-describedby");
83
+ };
84
+ });
85
+
86
+ $effect(() => {
87
+ if (!content || disabled) {
88
+ clearShowDelay();
89
+ clearHideBlurTimeout();
90
+ }
91
+ });
92
+
93
+ onDestroy(() => {
94
+ clearShowDelay();
95
+ clearHideBlurTimeout();
96
+ });
24
97
 
25
98
  function handleKeydown(event: KeyboardEvent) {
26
99
  if (event.key === "Escape" && isVisible) {
100
+ clearShowDelay();
101
+ clearHideBlurTimeout();
27
102
  isVisible = false;
28
103
  triggerElement?.focus();
29
104
  }
30
105
  }
31
106
 
32
107
  function handleFocus() {
108
+ clearShowDelay();
109
+ clearHideBlurTimeout();
33
110
  if (!disabled && content) {
34
111
  isVisible = true;
35
112
  }
36
113
  }
37
114
 
38
115
  function handleBlur() {
39
- setTimeout(() => {
116
+ clearHideBlurTimeout();
117
+ // Defer hide so brief focus moves within the trigger subtree do not flash the tooltip off.
118
+ hideBlurTimeout = setTimeout(() => {
119
+ hideBlurTimeout = null;
40
120
  isVisible = false;
41
121
  }, 100);
42
122
  }
43
123
 
44
124
  function handleMouseEnter() {
125
+ clearShowDelay();
126
+ clearHideBlurTimeout();
45
127
  if (!disabled && content) {
46
128
  if (delay > 0) {
47
- setTimeout(() => {
129
+ showDelayTimeout = setTimeout(() => {
130
+ showDelayTimeout = null;
48
131
  isVisible = true;
49
132
  }, delay);
50
133
  } else {
@@ -54,6 +137,8 @@
54
137
  }
55
138
 
56
139
  function handleMouseLeave() {
140
+ clearShowDelay();
141
+ clearHideBlurTimeout();
57
142
  isVisible = false;
58
143
  }
59
144
  </script>
@@ -70,11 +155,7 @@
70
155
  onfocusout={handleBlur}
71
156
  {...restProps}
72
157
  >
73
- <div
74
- bind:this={triggerElement}
75
- id={triggerId}
76
- aria-describedby={isVisible ? tooltipId : undefined}
77
- >
158
+ <div bind:this={triggerElement} id={triggerId}>
78
159
  {@render children?.()}
79
160
  </div>
80
161
 
@@ -268,9 +349,11 @@
268
349
  }
269
350
  }
270
351
 
271
- .tooltip-container:focus-visible {
272
- outline: 2px solid var(--color-focus);
273
- outline-offset: 2px;
352
+ .tooltip-container:has(:focus-visible) {
353
+ outline: none;
354
+ box-shadow:
355
+ 0 0 0 2px var(--color-focus-ring-offset),
356
+ 0 0 0 4px var(--color-focus-ring);
274
357
  border-radius: var(--tooltip-radius);
275
358
  }
276
359
  </style>
@@ -1,12 +1,13 @@
1
- interface Props {
1
+ import type { Snippet } from "svelte";
2
+ import type { HTMLAttributes } from "svelte/elements";
3
+ type Props = Omit<HTMLAttributes<HTMLDivElement>, "class"> & {
2
4
  content?: string;
3
5
  placement?: "top" | "bottom" | "left" | "right";
4
6
  delay?: number;
5
7
  disabled?: boolean;
6
- }
7
- type $$ComponentProps = Props & {
8
- children?: any;
8
+ class?: string;
9
+ children?: Snippet;
9
10
  };
10
- declare const Tooltip: import("svelte").Component<$$ComponentProps, {}, "">;
11
+ declare const Tooltip: import("svelte").Component<Props, {}, "">;
11
12
  type Tooltip = ReturnType<typeof Tooltip>;
12
13
  export default Tooltip;
@@ -14,3 +14,9 @@ export { default as List } from './List.svelte';
14
14
  export { default as ListItem } from './ListItem.svelte';
15
15
  export { default as Heading } from './Heading.svelte';
16
16
  export { default as ThemeToggle } from './ThemeToggle.svelte';
17
+ export { default as ActionPanel } from './ActionPanel.svelte';
18
+ export { default as Divider } from './Divider.svelte';
19
+ export { default as Container } from './Container.svelte';
20
+ export { default as Text } from './Text.svelte';
21
+ export { default as Table } from './Table.svelte';
22
+ export { default as Radio } from './Radio.svelte';
@@ -14,3 +14,9 @@ export { default as List } from './List.svelte';
14
14
  export { default as ListItem } from './ListItem.svelte';
15
15
  export { default as Heading } from './Heading.svelte';
16
16
  export { default as ThemeToggle } from './ThemeToggle.svelte';
17
+ export { default as ActionPanel } from './ActionPanel.svelte';
18
+ export { default as Divider } from './Divider.svelte';
19
+ export { default as Container } from './Container.svelte';
20
+ export { default as Text } from './Text.svelte';
21
+ export { default as Table } from './Table.svelte';
22
+ export { default as Radio } from './Radio.svelte';
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Layout strings for selection controls. Interaction states live in `app.css`
3
+ * (`.selection-control-label-row-interaction`, etc.) — keep class names in sync.
4
+ */
5
+ /** With `app.css`: hover, disabled, `:focus-visible` ring on the row. */
6
+ export declare const SELECTION_CONTROL_LABEL_ROW_INTERACTION = "selection-control-label-row-interaction";
7
+ /** With `app.css`: `:checked` ring for radio list rows. */
8
+ export declare const SELECTION_CONTROL_OPTION_ROW = "selection-control-option-row";
9
+ /** Control + label row; `p-2 -m-2` aligns hit area with text; `group` is not valid inside `@apply`. */
10
+ export declare const SELECTION_CONTROL_LABEL_ROW_BASE: string;
11
+ export declare const SELECTION_CONTROL_LABEL_ROW: string;
12
+ /** Radio option row: stacked label/description; `p-2` only (no `-m-2`) so vertical gaps stay even. */
13
+ export declare const RADIO_GROUP_OPTION_LABEL_ROW: string;
14
+ /** Control shell: border/fill/hover/checked/disabled. `group/control` drives inner mark states. */
15
+ export declare const SELECTION_CONTROL_SHELL_STATE = "group/control relative inline-flex items-center justify-center w-5 h-5 transition-all duration-200 border-2 group-active:scale-95 border-base-400 bg-transparent group-hover:border-brand-500 group-hover:bg-brand-50 has-[:checked]:border-brand-500 has-[:checked]:bg-brand-500 has-[:checked]:group-hover:bg-brand-600 has-[:checked]:group-hover:border-brand-600 has-[:disabled]:opacity-50 has-[:disabled]:cursor-not-allowed";
16
+ export type SelectionControlShape = "square" | "circle";
17
+ export declare function selectionControlShellClasses(shape: SelectionControlShape): string;
18
+ /** Radio circle control; `mt-0.5` aligns with multi-line labels. */
19
+ export declare const RADIO_GROUP_CONTROL_SHELL: string;
20
+ /** Full-bleed ring behind the mark (same geometry as SelectionControl inner ring). */
21
+ export declare function selectionControlRingOverlayClasses(shape: SelectionControlShape): string;
22
+ /** Radio row: circle overlay + `pointer-events-none` so clicks hit the input. */
23
+ export declare const RADIO_GROUP_RING_OVERLAY: string;
24
+ /** Checked radio dot (shared with `Radio.svelte`). */
25
+ export declare const RADIO_CHECKED_DOT_CLASSES = "absolute size-2 rounded-full bg-base-50 pointer-events-none z-10 opacity-0 group-has-checked/control:opacity-100";
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Layout strings for selection controls. Interaction states live in `app.css`
3
+ * (`.selection-control-label-row-interaction`, etc.) — keep class names in sync.
4
+ */
5
+ /** With `app.css`: hover, disabled, `:focus-visible` ring on the row. */
6
+ export const SELECTION_CONTROL_LABEL_ROW_INTERACTION = "selection-control-label-row-interaction";
7
+ /** With `app.css`: `:checked` ring for radio list rows. */
8
+ export const SELECTION_CONTROL_OPTION_ROW = "selection-control-option-row";
9
+ /** Control + label row; `p-2 -m-2` aligns hit area with text; `group` is not valid inside `@apply`. */
10
+ export const SELECTION_CONTROL_LABEL_ROW_BASE = `p-2 -m-2 group ${SELECTION_CONTROL_LABEL_ROW_INTERACTION}`.trim();
11
+ export const SELECTION_CONTROL_LABEL_ROW = `flex items-center gap-2 ${SELECTION_CONTROL_LABEL_ROW_BASE}`;
12
+ /** Radio option row: stacked label/description; `p-2` only (no `-m-2`) so vertical gaps stay even. */
13
+ export const RADIO_GROUP_OPTION_LABEL_ROW = `flex items-start gap-2 p-2 group ${SELECTION_CONTROL_LABEL_ROW_INTERACTION} ${SELECTION_CONTROL_OPTION_ROW}`.trim();
14
+ /** Control shell: border/fill/hover/checked/disabled. `group/control` drives inner mark states. */
15
+ export const SELECTION_CONTROL_SHELL_STATE = "group/control relative inline-flex items-center justify-center w-5 h-5 transition-all duration-200 border-2 group-active:scale-95 border-base-400 bg-transparent group-hover:border-brand-500 group-hover:bg-brand-50 has-[:checked]:border-brand-500 has-[:checked]:bg-brand-500 has-[:checked]:group-hover:bg-brand-600 has-[:checked]:group-hover:border-brand-600 has-[:disabled]:opacity-50 has-[:disabled]:cursor-not-allowed";
16
+ export function selectionControlShellClasses(shape) {
17
+ const rounding = shape === "circle" ? "rounded-full" : "rounded";
18
+ return `${SELECTION_CONTROL_SHELL_STATE} ${rounding}`.trim();
19
+ }
20
+ /** Radio circle control; `mt-0.5` aligns with multi-line labels. */
21
+ export const RADIO_GROUP_CONTROL_SHELL = `${SELECTION_CONTROL_SHELL_STATE} mt-0.5 shrink-0 rounded-full`.trim();
22
+ /** Full-bleed ring behind the mark (same geometry as SelectionControl inner ring). */
23
+ export function selectionControlRingOverlayClasses(shape) {
24
+ const rounding = shape === "circle" ? "rounded-full" : "rounded";
25
+ return `absolute inset-0 ${rounding}`.trim();
26
+ }
27
+ /** Radio row: circle overlay + `pointer-events-none` so clicks hit the input. */
28
+ export const RADIO_GROUP_RING_OVERLAY = `pointer-events-none ${selectionControlRingOverlayClasses("circle")}`;
29
+ /** Checked radio dot (shared with `Radio.svelte`). */
30
+ export const RADIO_CHECKED_DOT_CLASSES = "absolute size-2 rounded-full bg-base-50 pointer-events-none z-10 opacity-0 group-has-checked/control:opacity-100";
@@ -14,4 +14,10 @@ export { default as List } from './List.svelte';
14
14
  export { default as ListItem } from './ListItem.svelte';
15
15
  export { default as Heading } from './Heading.svelte';
16
16
  export { default as ThemeToggle } from './ThemeToggle.svelte';
17
+ export { default as ActionPanel } from './ActionPanel.svelte';
18
+ export { default as Divider } from './Divider.svelte';
19
+ export { default as Container } from './Container.svelte';
20
+ export { default as Text } from './Text.svelte';
21
+ export { default as Table } from './Table.svelte';
22
+ export { default as Radio } from './Radio.svelte';
17
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/atoms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/atoms/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Layout strings for selection controls. Interaction states live in `app.css`
3
+ * (`.selection-control-label-row-interaction`, etc.) — keep class names in sync.
4
+ */
5
+ /** With `app.css`: hover, disabled, `:focus-visible` ring on the row. */
6
+ export declare const SELECTION_CONTROL_LABEL_ROW_INTERACTION = "selection-control-label-row-interaction";
7
+ /** With `app.css`: `:checked` ring for radio list rows. */
8
+ export declare const SELECTION_CONTROL_OPTION_ROW = "selection-control-option-row";
9
+ /** Control + label row; `p-2 -m-2` aligns hit area with text; `group` is not valid inside `@apply`. */
10
+ export declare const SELECTION_CONTROL_LABEL_ROW_BASE: string;
11
+ export declare const SELECTION_CONTROL_LABEL_ROW: string;
12
+ /** Radio option row: stacked label/description; `p-2` only (no `-m-2`) so vertical gaps stay even. */
13
+ export declare const RADIO_GROUP_OPTION_LABEL_ROW: string;
14
+ /** Control shell: border/fill/hover/checked/disabled. `group/control` drives inner mark states. */
15
+ export declare const SELECTION_CONTROL_SHELL_STATE = "group/control relative inline-flex items-center justify-center w-5 h-5 transition-all duration-200 border-2 group-active:scale-95 border-base-400 bg-transparent group-hover:border-brand-500 group-hover:bg-brand-50 has-[:checked]:border-brand-500 has-[:checked]:bg-brand-500 has-[:checked]:group-hover:bg-brand-600 has-[:checked]:group-hover:border-brand-600 has-[:disabled]:opacity-50 has-[:disabled]:cursor-not-allowed";
16
+ export type SelectionControlShape = "square" | "circle";
17
+ export declare function selectionControlShellClasses(shape: SelectionControlShape): string;
18
+ /** Radio circle control; `mt-0.5` aligns with multi-line labels. */
19
+ export declare const RADIO_GROUP_CONTROL_SHELL: string;
20
+ /** Full-bleed ring behind the mark (same geometry as SelectionControl inner ring). */
21
+ export declare function selectionControlRingOverlayClasses(shape: SelectionControlShape): string;
22
+ /** Radio row: circle overlay + `pointer-events-none` so clicks hit the input. */
23
+ export declare const RADIO_GROUP_RING_OVERLAY: string;
24
+ /** Checked radio dot (shared with `Radio.svelte`). */
25
+ export declare const RADIO_CHECKED_DOT_CLASSES = "absolute size-2 rounded-full bg-base-50 pointer-events-none z-10 opacity-0 group-has-checked/control:opacity-100";
26
+ //# sourceMappingURL=selection-control.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection-control.styles.d.ts","sourceRoot":"","sources":["../../../src/components/atoms/selection-control.styles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,yEAAyE;AACzE,eAAO,MAAM,uCAAuC,4CACP,CAAC;AAE9C,2DAA2D;AAC3D,eAAO,MAAM,4BAA4B,iCAAiC,CAAC;AAE3E,uGAAuG;AACvG,eAAO,MAAM,gCAAgC,QACyB,CAAC;AAEvE,eAAO,MAAM,2BAA2B,QAAgE,CAAC;AAEzG,sGAAsG;AACtG,eAAO,MAAM,4BAA4B,QAC+E,CAAC;AAEzH,mGAAmG;AACnG,eAAO,MAAM,6BAA6B,waAC+X,CAAC;AAE1a,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAExD,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,qBAAqB,GAAG,MAAM,CAGjF;AAED,oEAAoE;AACpE,eAAO,MAAM,yBAAyB,QAAyE,CAAC;AAEhH,sFAAsF;AACtF,wBAAgB,kCAAkC,CAC9C,KAAK,EAAE,qBAAqB,GAC7B,MAAM,CAGR;AAED,iFAAiF;AACjF,eAAO,MAAM,wBAAwB,QAAwE,CAAC;AAE9G,sDAAsD;AACtD,eAAO,MAAM,yBAAyB,qHACgF,CAAC"}
@@ -1,7 +1,11 @@
1
1
  export { default as Toggle } from './atoms/Toggle.svelte';
2
2
  export { default as Badge } from './atoms/Badge.svelte';
3
3
  export { default as Button } from './atoms/Button.svelte';
4
+ export { default as IconButton } from './atoms/IconButton.svelte';
4
5
  export { default as Card } from './atoms/Card.svelte';
6
+ export { default as CardHeader } from './atoms/CardHeader.svelte';
7
+ export { default as CardContent } from './atoms/CardContent.svelte';
8
+ export { default as CardFooter } from './atoms/CardFooter.svelte';
5
9
  export { default as Input } from './atoms/Input.svelte';
6
10
  export { default as Textarea } from './atoms/Textarea.svelte';
7
11
  export { default as Select } from './atoms/Select.svelte';
@@ -10,27 +14,59 @@ export { default as List } from './atoms/List.svelte';
10
14
  export { default as ListItem } from './atoms/ListItem.svelte';
11
15
  export { default as Heading } from './atoms/Heading.svelte';
12
16
  export { default as ThemeToggle } from './atoms/ThemeToggle.svelte';
17
+ export { default as Divider } from './atoms/Divider.svelte';
18
+ export { default as Container } from './atoms/Container.svelte';
19
+ export { default as Text } from './atoms/Text.svelte';
20
+ export { default as Table } from './atoms/Table.svelte';
21
+ export { default as Toast } from './atoms/Toast.svelte';
22
+ export { default as Tooltip } from './atoms/Tooltip.svelte';
23
+ export { default as Progress } from './atoms/Progress.svelte';
24
+ export { default as Skeleton } from './atoms/Skeleton.svelte';
25
+ export { default as Checkbox } from './atoms/Checkbox.svelte';
26
+ export { default as Radio } from './atoms/Radio.svelte';
27
+ export { default as CodeBlock } from './atoms/CodeBlock.svelte';
28
+ export { default as FeatureCard } from './atoms/FeatureCard.svelte';
29
+ export { default as OptimizedImage } from './atoms/OptimizedImage.svelte';
30
+ export { default as ActionPanel } from './atoms/ActionPanel.svelte';
13
31
  export { default as Alert } from './molecules/Alert.svelte';
14
32
  export { default as ComponentDemo } from './molecules/ComponentDemo.svelte';
15
33
  export { default as ContactForm } from './molecules/ContactForm.svelte';
16
34
  export { default as Dropdown } from './molecules/Dropdown.svelte';
17
35
  export { default as Form } from './molecules/Form.svelte';
36
+ export { default as FormField } from './molecules/FormField.svelte';
37
+ export { default as Header } from './molecules/Header.svelte';
38
+ export { default as EmptyState } from './molecules/EmptyState.svelte';
39
+ export { default as Toaster } from './molecules/Toaster.svelte';
18
40
  export { default as ImageUpload } from './molecules/ImageUpload.svelte';
19
41
  export { default as Modal } from './molecules/Modal.svelte';
20
42
  export { default as SlideUp } from './molecules/SlideUp.svelte';
21
43
  export { default as Tabs } from './molecules/Tabs.svelte';
22
- export { default as Navbar } from './organisms/Navbar.svelte';
44
+ export { default as RadioGroup } from './molecules/RadioGroup.svelte';
45
+ export { default as NavigationMenu } from './molecules/NavigationMenu.svelte';
46
+ export { default as NavigationMenuList } from './molecules/NavigationMenuList.svelte';
47
+ export { default as NavigationMenuItem } from './molecules/NavigationMenuItem.svelte';
48
+ export { default as NavigationMenuTrigger } from './molecules/NavigationMenuTrigger.svelte';
49
+ export { default as NavigationMenuContent } from './molecules/NavigationMenuContent.svelte';
50
+ export { default as NavigationMenuLink } from './molecules/NavigationMenuLink.svelte';
51
+ export { default as Page } from './molecules/Page.svelte';
52
+ export { default as Section } from './molecules/Section.svelte';
53
+ export { default as SidebarBrandHeader } from './molecules/SidebarBrandHeader.svelte';
54
+ export { default as SidebarFooter } from './molecules/SidebarFooter.svelte';
55
+ export { default as SidebarNavSection } from './molecules/SidebarNavSection.svelte';
56
+ export { toastStore, pushToast, dismissToast, type ToastItem, type ToastLevel, } from './molecules/toast-store.js';
57
+ export { default as TopNavbar } from './organisms/TopNavbar.svelte';
23
58
  export { default as SidebarNavigation } from './organisms/SidebarNavigation.svelte';
59
+ export { default as SidebarAccountPanel } from './organisms/SidebarAccountPanel.svelte';
24
60
  export { default as SidebarPanel } from './organisms/SidebarPanel.svelte';
61
+ export declare const generateId: (prefix?: string) => string;
25
62
  export declare const createId: (prefix?: string) => string;
26
63
  export declare const cn: (...classes: (string | undefined | null | false)[]) => string;
27
- export declare const getFormData: (form: HTMLFormElement) => Record<string, any>;
64
+ export declare const getFormData: (form: HTMLFormElement) => Record<string, unknown>;
28
65
  export declare const validateEmail: (email: string) => boolean;
29
- export declare const validateRequired: (value: any) => boolean;
66
+ export declare const validateRequired: (value: unknown) => boolean;
30
67
  export declare const isBrowser: () => boolean;
31
68
  export declare const safeWindow: () => Window | undefined;
32
69
  export declare const safeDocument: () => Document | undefined;
33
70
  export declare const safeLocalStorage: () => Storage | undefined;
34
- export declare const generateId: (prefix?: string) => string;
35
- export { Sun, Moon, Monitor, Grip, GripVertical, ChevronUp, ChevronDown, ChevronRight, Zap, Briefcase, Clipboard, Settings } from '@lucide/svelte';
71
+ export { Sun, Moon, Monitor, Grip, GripVertical, ChevronUp, ChevronDown, ChevronRight, Zap, Briefcase, Clipboard, Settings, } from '@lucide/svelte';
36
72
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEpE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE1E,eAAO,MAAM,QAAQ,GAAI,SAAQ,MAAa,KAAG,MAA4B,CAAC;AAE9E,eAAO,MAAM,EAAE,GAAI,GAAG,SAAS,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,KAAK,CAAC,EAAE,KAAG,MAClC,CAAC;AAEtC,eAAO,MAAM,WAAW,GAAI,MAAM,eAAe,KAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAGrE,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,OAG7C,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,OAAO,GAAG,KAAG,OAE7C,CAAC;AAEF,eAAO,MAAM,SAAS,QAAO,OAE5B,CAAC;AAEF,eAAO,MAAM,UAAU,QAAO,MAAM,GAAG,SAEtC,CAAC;AAEF,eAAO,MAAM,YAAY,QAAO,QAAQ,GAAG,SAE1C,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,OAAO,GAAG,SAE7C,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,SAAQ,MAAa,KAAG,MAKlD,CAAC;AAEF,OAAO,EACH,GAAG,EACH,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,SAAS,EACT,WAAW,EACX,YAAY,EACZ,GAAG,EACH,SAAS,EACT,SAAS,EACT,QAAQ,EACX,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"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"}
@@ -11,7 +11,17 @@ export { default as NavigationMenuItem } from './NavigationMenuItem.svelte';
11
11
  export { default as NavigationMenuTrigger } from './NavigationMenuTrigger.svelte';
12
12
  export { default as NavigationMenuContent } from './NavigationMenuContent.svelte';
13
13
  export { default as NavigationMenuLink } from './NavigationMenuLink.svelte';
14
+ export { default as Page } from './Page.svelte';
14
15
  export { default as Section } from './Section.svelte';
16
+ export { default as SidebarBrandHeader } from './SidebarBrandHeader.svelte';
17
+ export { default as SidebarFooter } from './SidebarFooter.svelte';
18
+ export { default as SidebarNavSection } from './SidebarNavSection.svelte';
15
19
  export { default as SlideUp } from './SlideUp.svelte';
16
20
  export { default as Tabs } from './Tabs.svelte';
21
+ export { default as FormField } from './FormField.svelte';
22
+ export { default as Header } from './Header.svelte';
23
+ export { default as EmptyState } from './EmptyState.svelte';
24
+ export { default as Toaster } from './Toaster.svelte';
25
+ export { default as RadioGroup } from './RadioGroup.svelte';
26
+ export * from './toast-store.js';
17
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/molecules/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/molecules/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AAClF,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC5D,cAAc,kBAAkB,CAAC"}
@@ -2,6 +2,17 @@ export interface NavigationMenuContextValue {
2
2
  activeItem: string | null;
3
3
  setActiveItem: (item: string | null) => void;
4
4
  isMobile: boolean;
5
+ /** Prefix for panel `id` / trigger `aria-controls` (one menu instance). */
6
+ menuInstanceId: string;
5
7
  }
6
8
  export declare const NAVIGATION_MENU_CONTEXT_KEY: unique symbol;
9
+ /** Panel element id; `itemValue` is sanitized for HTML id rules. */
10
+ export declare function navigationMenuPanelId(menuInstanceId: string, itemValue: string): string;
11
+ /**
12
+ * Deterministic menu id from item order + values (FNV-1a).
13
+ * SSR and client must agree — do not use `generateId()` for this pairing.
14
+ */
15
+ export declare function navigationMenuStableInstanceId(items: ReadonlyArray<{
16
+ value: string;
17
+ }>): string;
7
18
  //# sourceMappingURL=navigation-menu-context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"navigation-menu-context.d.ts","sourceRoot":"","sources":["../../../src/components/molecules/navigation-menu-context.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,0BAA0B;IACvC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,2BAA2B,eAA4B,CAAC"}
1
+ {"version":3,"file":"navigation-menu-context.d.ts","sourceRoot":"","sources":["../../../src/components/molecules/navigation-menu-context.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,0BAA0B;IACvC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,QAAQ,EAAE,OAAO,CAAC;IAClB,2EAA2E;IAC3E,cAAc,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,2BAA2B,eAA4B,CAAC;AAErE,oEAAoE;AACpE,wBAAgB,qBAAqB,CACjC,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,GAClB,MAAM,CAGR;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC1C,KAAK,EAAE,aAAa,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GACxC,MAAM,CAQR"}