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
@@ -0,0 +1,24 @@
1
+ # Lucide icons used by zabi-components
2
+
3
+ The package depends on `@lucide/svelte`. If your app **aliases** `@lucide/svelte` to a hand-authored barrel, re-export every icon the library imports, or drop the alias and use the real package (or per-icon paths only).
4
+
5
+ ## Packaged components (from the `zabi-components` build)
6
+
7
+ | Source | Import style | Icons |
8
+ |--------|--------------|--------|
9
+ | `CodeBlock` | Per-icon path | `check`, `copy` |
10
+ | `ThemeToggle` | Barrel | `Sun`, `Moon` |
11
+ | `ListItem` | Barrel | `ArrowRight` |
12
+ | `Badge` | Barrel | `Check`, `AlertTriangle`, `X`, `Info` |
13
+ | `ImageUpload` | Barrel | `Image` |
14
+ | `Input` | Barrel | `CheckCircle`, `AlertTriangle`, `AlertCircle` |
15
+ | `Select` | Barrel | `ChevronDown`, `CheckCircle`, `AlertTriangle`, `AlertCircle` |
16
+ | `SidebarPanel` | Barrel | `Search`, `X` |
17
+ | `SidebarAccountPanel` | Barrel | `LogOut`, `Moon`, `Sun`, `User` |
18
+ | `SidebarNavigation` | Barrel | `Command`, `Search` |
19
+
20
+ Showcase and demo routes under this repo import additional icons (e.g. `CircleQuestionMark`, `Heart`); those are **not** required for consumers who only install the library.
21
+
22
+ ## Typings for `@lucide/svelte/icons/*`
23
+
24
+ Some versions of `@lucide/svelte` ship per-icon `.d.ts` files that confuse certain TypeScript setups. The published package runs **`postinstall`** → `scripts/fix-lucide-svelte-icon-dts.js` (the script is included in the npm tarball). Keep install scripts enabled, or run that script manually after install if you use `--ignore-scripts`.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zabi-components",
3
- "version": "6.0.0",
3
+ "version": "7.0.1",
4
4
  "description": "Svelte 5 UI components with TypeScript and Tailwind CSS v4. Accessible, easy to theme, works with SSR.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -62,7 +62,9 @@
62
62
  "README.md",
63
63
  "THEME.md",
64
64
  "THEMING.md",
65
- "docs/theme-imports.md"
65
+ "docs/theme-imports.md",
66
+ "docs/lucide-icons.md",
67
+ "scripts/fix-lucide-svelte-icon-dts.js"
66
68
  ],
67
69
  "keywords": [
68
70
  "svelte",
@@ -85,22 +87,29 @@
85
87
  "dev": "vite dev",
86
88
  "build": "vite build && npm run build:types",
87
89
  "build:components": "svelte-package -o dist --input src/components",
88
- "build:lib-files": "mkdir -p dist/routes/lib dist/types && cp src/routes/lib/ssr-safe.ts dist/routes/lib/ && cp src/routes/lib/variant-utils.ts dist/routes/lib/ && cp src/routes/lib/focus-utils.ts dist/routes/lib/ && cp src/routes/lib/focus-utils.d.ts dist/routes/lib/ 2>/dev/null || true && cp src/types/variants.ts dist/types/",
89
- "build:fix-imports": "node scripts/fix-modal-import.js",
90
+ "build:lib-files": "mkdir -p dist/routes/lib dist/types && cp src/components/util/ssr-safe.ts dist/routes/lib/ && cp src/routes/lib/variant-utils.ts dist/routes/lib/ && cp src/components/util/focus-utils.ts dist/routes/lib/ && cp src/components/types/variants.ts dist/types/ && cp src/components/types/page.types.ts dist/types/",
91
+ "build:fix-imports": "node scripts/fix-package-imports.js",
90
92
  "build:lib": "npm run build:css && npm run build:components && npm run build:lib-files && npm run build:fix-imports && npm run build:types && npm run build:css && node scripts/verify-build.js",
91
93
  "sync:tokens": "node scripts/sync-theme-tokens.js",
92
94
  "build:css": "npm run sync:tokens && node scripts/build-css.js && node scripts/validate-theme.js",
93
95
  "check:tokens": "node scripts/check-token-violations.js",
94
- "build:types": "tsc --project tsconfig.lib.json",
96
+ "build:types": "tsc --project tsconfig.lib.json && cp dist/components/util/focus-utils.d.ts dist/routes/lib/ && node scripts/emit-components-types-runtime.js",
95
97
  "preview": "vite preview",
96
- "check": "svelte-check --tsconfig ./tsconfig.json",
98
+ "check": "svelte-check --tsconfig ./tsconfig.json && node scripts/check-component-imports.js && node scripts/check-layout-width.js",
97
99
  "storybook": "storybook dev -p 6006",
98
100
  "build-storybook": "storybook build",
101
+ "test": "vitest run",
102
+ "test:watch": "vitest",
103
+ "test:e2e": "playwright test",
104
+ "test:e2e:smoke": "playwright test --grep @smoke",
105
+ "test:playwright": "npm run test:e2e",
99
106
  "test:themes": "node --test tests/theme-output.test.js",
100
107
  "prepublishOnly": "npm run build:lib",
101
- "publish:npm": "npm publish --access public --registry https://registry.npmjs.org/"
108
+ "publish:npm": "npm publish --access public --registry https://registry.npmjs.org/",
109
+ "postinstall": "node scripts/fix-lucide-svelte-icon-dts.js"
102
110
  },
103
111
  "devDependencies": {
112
+ "@playwright/test": "^1.52.0",
104
113
  "@storybook/addon-docs": "^10.2.19",
105
114
  "@storybook/sveltekit": "^10.2.19",
106
115
  "@sveltejs/adapter-auto": "^7.0.0",
@@ -108,19 +117,23 @@
108
117
  "@sveltejs/package": "^2.5.4",
109
118
  "@sveltejs/vite-plugin-svelte": "^6.2.0",
110
119
  "@tailwindcss/postcss": "^4.1.13",
120
+ "@testing-library/dom": "^10.4.1",
121
+ "@testing-library/svelte": "^5.3.1",
122
+ "@testing-library/user-event": "^14.6.1",
111
123
  "@tsconfig/svelte": "^5.0.5",
112
124
  "@types/node": "^24.5.2",
113
125
  "@types/react": "^19.2.2",
114
126
  "autoprefixer": "^10.4.17",
115
- "baseline-browser-mapping": "^2.10.18",
116
127
  "culori": "^4.0.2",
128
+ "jsdom": "^29.0.2",
117
129
  "postcss": "^8.4.35",
118
130
  "storybook": "^10.2.19",
119
131
  "svelte": "^5.43.8",
120
132
  "svelte-check": "^4.3.1",
121
133
  "tailwindcss": "^4.1.13",
122
134
  "typescript": "~5.8.3",
123
- "vite": "^7.1.6"
135
+ "vite": "^7.1.6",
136
+ "vitest": "^3.2.4"
124
137
  },
125
138
  "dependencies": {
126
139
  "@lucide/svelte": "^0.544.0"
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * @lucide/svelte (0.544.x) ships `dist/icons/*.svelte.d.ts` with a duplicate
4
+ * `type X = ReturnType<typeof X>` line that makes some TypeScript language
5
+ * services treat the file as a non-module; re-exports from the package root
6
+ * then fail (e.g. `Check` / `Copy` missing). Strip those lines after install.
7
+ */
8
+ import fs from "fs";
9
+ import path from "path";
10
+ import { fileURLToPath } from "url";
11
+
12
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
13
+ const iconsDir = path.join(__dirname, "..", "node_modules", "@lucide", "svelte", "dist", "icons");
14
+
15
+ const duplicateTypeLine = /\r?\ntype (\w+) = ReturnType<typeof \1>;\r?\n/g;
16
+
17
+ function fixFile(filePath) {
18
+ let text = fs.readFileSync(filePath, "utf8");
19
+ const next = text.replace(duplicateTypeLine, "\n");
20
+ if (next !== text) {
21
+ fs.writeFileSync(filePath, next);
22
+ }
23
+ }
24
+
25
+ function main() {
26
+ if (!fs.existsSync(iconsDir)) {
27
+ return;
28
+ }
29
+ for (const name of fs.readdirSync(iconsDir)) {
30
+ if (!name.endsWith(".svelte.d.ts")) continue;
31
+ fixFile(path.join(iconsDir, name));
32
+ }
33
+ }
34
+
35
+ main();
@@ -1,41 +0,0 @@
1
- import type { Component, Snippet } from "svelte";
2
- /** Link shown in the built-in nav list (when not using the `nav` snippet). */
3
- export interface NavbarNavItem {
4
- label: string;
5
- href: string;
6
- icon?: Component<{
7
- size?: number;
8
- class?: string;
9
- }>;
10
- iconFilled?: Component<{
11
- size?: number;
12
- class?: string;
13
- }>;
14
- }
15
- interface Props {
16
- brand?: string;
17
- /** When set, the brand is a link (use `""` to show text only). */
18
- brandHref?: string;
19
- /** Accessible name for the landmark when you have more than one `nav`. */
20
- ariaLabel?: string;
21
- showThemeToggle?: boolean;
22
- className?: string;
23
- /**
24
- * When true, renders only the built-in link list (or `nav` snippet) inside a `nav` landmark.
25
- * Use for headers that are not the full chrome bar.
26
- */
27
- embedded?: boolean;
28
- /** Inline nav links; ignored when the `nav` snippet is provided. */
29
- items?: NavbarNavItem[];
30
- navVariant?: "header" | "sidebar";
31
- currentPath?: string;
32
- preventNavigation?: boolean;
33
- onclick?: (event: Event) => void;
34
- }
35
- type $$ComponentProps = Props & {
36
- nav?: Snippet;
37
- actions?: Snippet;
38
- };
39
- declare const Navbar: Component<$$ComponentProps, {}, "">;
40
- type Navbar = ReturnType<typeof Navbar>;
41
- export default Navbar;