zabi-components 7.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.
@@ -141,11 +141,29 @@
141
141
  --color-brand-800: #3f4fc0;
142
142
  --color-brand-900: #2f3c99;
143
143
  --color-brand-950: #1f2866;
144
+ --color-citron-200: #e4ecaa;
145
+ --color-citron-300: #d5e184;
146
+ --color-citron-400: #c7d460;
147
+ --color-citron-500: #bbbe64;
148
+ --color-citron-600: #a3a852;
149
+ --color-citron-700: #848a43;
150
+ --color-pine-200: #a7d9c9;
151
+ --color-pine-300: #78c4ad;
152
+ --color-pine-400: #49ad91;
153
+ --color-pine-500: #0C5D43;
154
+ --color-pine-600: #0a513a;
155
+ --color-pine-700: #084532;
156
+ --color-pine-800: #063a2a;
157
+ --color-pine-900: #04231a;
144
158
  --color-iris-50: #f4f4fa;
145
159
  --color-iris-100: #e9e9f7;
146
160
  --color-iris-200: #d6d6f0;
147
161
  --color-iris-300: #bdbde6;
162
+ --color-iris-400: #a3a3d8;
148
163
  --color-iris-500: #6969B3;
164
+ --color-iris-600: #58589e;
165
+ --color-iris-700: #474788;
166
+ --color-iris-800: #38386f;
149
167
  --color-iris-900: #2a2a56;
150
168
  --color-base-50: var(--zabi-base-50);
151
169
  --color-base-75: var(--zabi-base-75);
@@ -172,11 +190,11 @@
172
190
  --color-background-secondary: var(--color-base-50);
173
191
  --color-background-tertiary: var(--color-base-100);
174
192
  --color-page: var(--color-base-100);
175
- --color-card: #fff;
193
+ --color-card: #ffffff;
176
194
  --color-card-hover: var(--color-base-100);
177
195
  --color-card-active: var(--color-base-100);
178
- --color-card-elevated: #fff;
179
- --color-surface-1: #fff;
196
+ --color-card-elevated: #ffffff;
197
+ --color-surface-1: #ffffff;
180
198
  --color-surface-2: var(--color-base-50);
181
199
  --color-surface-3: var(--color-base-75);
182
200
  --color-surface-4: var(--color-base-100);
@@ -192,8 +210,8 @@
192
210
  --color-caption: var(--color-base-500);
193
211
  --color-input-placeholder: var(--color-base-400);
194
212
  --color-label: var(--color-base-700);
195
- --color-link: #6e84fa;
196
- --color-link-hover: #5366e2;
213
+ --color-link: var(--color-brand-600);
214
+ --color-link-hover: var(--color-brand-700);
197
215
  --color-nav-menu-item: var(--color-body);
198
216
  --color-nav-menu-item-hover: var(--color-headline);
199
217
  --color-nav-menu-item-active: var(--color-link);
@@ -201,36 +219,36 @@
201
219
  --color-nav-menu-active: var(--color-action-primary-subtle);
202
220
  --color-nav-menu-focus: var(--color-brand-500);
203
221
  --color-success-text: var(--color-success);
204
- --color-warning-text: oklch(55.5% 0.163 48.998);
222
+ --color-warning-text: #b45309;
205
223
  --color-neutral-text: var(--color-base-700);
206
- --color-energetic-text: #848a43;
207
- --color-error-text: oklch(50.5% 0.213 27.518);
208
- --color-inverse: #fff;
224
+ --color-energetic-text: var(--color-citron-700);
225
+ --color-error-text: #b91c1c;
226
+ --color-inverse: #ffffff;
209
227
  --color-disabled: var(--color-base-400);
210
228
  --color-border: var(--color-base-300);
211
229
  --color-border-weak: var(--color-base-300);
212
230
  --color-border-medium: var(--color-base-400);
213
231
  --color-border-strong: var(--color-base-500);
214
- --color-focus: #8fa8ff;
215
- --color-focus-weak: #6e84fa;
216
- --color-focus-medium: #5366e2;
217
- --color-focus-strong: #3f4fc0;
232
+ --color-focus: var(--color-brand-500);
233
+ --color-focus-weak: var(--color-brand-600);
234
+ --color-focus-medium: var(--color-brand-700);
235
+ --color-focus-strong: var(--color-brand-800);
218
236
  --color-focus-ring: var(--color-focus);
219
237
  --color-focus-ring-offset: var(--color-card);
220
- --color-primary: #6e84fa;
221
- --color-primary-weak: #5366e2;
222
- --color-primary-medium: #3f4fc0;
223
- --color-primary-strong: #2f3c99;
238
+ --color-primary: var(--color-brand-600);
239
+ --color-primary-weak: var(--color-brand-700);
240
+ --color-primary-medium: var(--color-brand-800);
241
+ --color-primary-strong: var(--color-brand-900);
224
242
  --color-secondary: var(--color-base-600);
225
243
  --color-secondary-weak: var(--color-base-700);
226
244
  --color-secondary-medium: var(--color-base-800);
227
245
  --color-secondary-strong: var(--color-base-900);
228
- --color-success: #0a513a;
229
- --color-warning: oklch(76.9% 0.188 70.08);
230
- --color-error: oklch(63.7% 0.237 25.331);
231
- --color-energetic: #bbbe64;
246
+ --color-success: var(--color-pine-600);
247
+ --color-warning: #f59e0b;
248
+ --color-error: #ef4444;
249
+ --color-energetic: var(--color-citron-500);
232
250
  --color-neutral: var(--color-base-600);
233
- --color-info: #58589e;
251
+ --color-info: var(--color-iris-600);
234
252
  --color-info-text: var(--color-info);
235
253
  --color-action-primary: var(--color-brand-950);
236
254
  --color-action-primary-hover: var(--color-brand-900);
@@ -255,12 +273,12 @@
255
273
  --color-action-secondary-disabled: var(--color-brand-500);
256
274
  --color-action-secondary-subtle: var(--color-brand-600);
257
275
  --color-action-secondary-subtle-hover: var(--color-brand-700);
258
- --color-action-danger: oklch(57.7% 0.245 27.325);
259
- --color-action-danger-hover: oklch(50.5% 0.213 27.518);
260
- --color-action-danger-active: oklch(44.4% 0.177 26.899);
261
- --color-action-danger-disabled: oklch(80.8% 0.114 19.571);
262
- --color-action-danger-subtle: oklch(97.1% 0.013 17.38);
263
- --color-action-danger-subtle-hover: oklch(93.6% 0.032 17.717);
276
+ --color-action-danger: #dc2626;
277
+ --color-action-danger-hover: #b91c1c;
278
+ --color-action-danger-active: #991b1b;
279
+ --color-action-danger-disabled: #fca5a5;
280
+ --color-action-danger-subtle: #fef2f2;
281
+ --color-action-danger-subtle-hover: #fee2e2;
264
282
  --shadow-color: 0 0 0;
265
283
  --shadow-opacity: 0.1;
266
284
  --spacing-xs: 0.25rem;
@@ -2548,7 +2566,7 @@
2548
2566
  .hover\:border-primary\/20 {
2549
2567
  &:hover {
2550
2568
  @media (hover: hover) {
2551
- border-color: color-mix(in srgb, theme(colors.brand.600) 20%, transparent);
2569
+ border-color: color-mix(in srgb, #6e84fa 20%, transparent);
2552
2570
  @supports (color: color-mix(in lab, red, red)) {
2553
2571
  & {
2554
2572
  border-color: color-mix(in oklab, var(--color-primary) 20%, transparent);
@@ -3645,7 +3663,7 @@ body {
3645
3663
  --color-pine-200: #063a2a;
3646
3664
  --color-pine-300: #084532;
3647
3665
  --color-pine-400: #0a513a;
3648
- --color-pine-500: #0C5D43;
3666
+ --color-pine-500: #0c5d43;
3649
3667
  --color-pine-600: #49ad91;
3650
3668
  --color-pine-700: #78c4ad;
3651
3669
  --color-pine-800: #a7d9c9;
@@ -3656,7 +3674,7 @@ body {
3656
3674
  --color-iris-200: #38386f;
3657
3675
  --color-iris-300: #474788;
3658
3676
  --color-iris-400: #58589e;
3659
- --color-iris-500: #6969B3;
3677
+ --color-iris-500: #6969b3;
3660
3678
  --color-iris-600: #a3a3d8;
3661
3679
  --color-iris-700: #bdbde6;
3662
3680
  --color-iris-800: #d6d6f0;
@@ -3697,35 +3715,35 @@ body {
3697
3715
  --color-input-hover: var(--color-base-300);
3698
3716
  --color-input-focus: var(--color-base-300);
3699
3717
  --color-input-disabled: var(--color-base-300);
3700
- --color-success: #49ad91;
3701
- --color-success-weak: #0C5D43;
3702
- --color-success-medium: #78c4ad;
3703
- --color-success-strong: #a7d9c9;
3704
- --color-warning: oklch(76.9% 0.188 70.08);
3705
- --color-warning-weak: oklch(66.6% 0.179 58.318);
3706
- --color-warning-medium: oklch(82.8% 0.189 84.429);
3707
- --color-warning-strong: oklch(87.9% 0.169 91.605);
3708
- --color-error: oklch(63.7% 0.237 25.331);
3709
- --color-error-weak: oklch(57.7% 0.245 27.325);
3710
- --color-error-medium: oklch(70.4% 0.191 22.216);
3711
- --color-error-strong: oklch(80.8% 0.114 19.571);
3712
- --color-energetic: #c7d460;
3713
- --color-energetic-weak: #bbbe64;
3714
- --color-energetic-medium: #d5e184;
3715
- --color-energetic-strong: #e4ecaa;
3716
- --color-info: #6969B3;
3717
- --color-info-weak: #58589e;
3718
- --color-info-active: #a3a3d8;
3719
- --color-info-medium: #a3a3d8;
3720
- --color-info-strong: #bdbde6;
3718
+ --color-success: var(--color-pine-400);
3719
+ --color-success-weak: var(--color-pine-500);
3720
+ --color-success-medium: var(--color-pine-300);
3721
+ --color-success-strong: var(--color-pine-200);
3722
+ --color-warning: #f59e0b;
3723
+ --color-warning-weak: #d97706;
3724
+ --color-warning-medium: #fbbf24;
3725
+ --color-warning-strong: #fcd34d;
3726
+ --color-error: #ef4444;
3727
+ --color-error-weak: #dc2626;
3728
+ --color-error-medium: #f87171;
3729
+ --color-error-strong: #fca5a5;
3730
+ --color-energetic: var(--color-citron-400);
3731
+ --color-energetic-weak: var(--color-citron-500);
3732
+ --color-energetic-medium: var(--color-citron-300);
3733
+ --color-energetic-strong: var(--color-citron-200);
3734
+ --color-info: var(--color-iris-500);
3735
+ --color-info-weak: var(--color-iris-600);
3736
+ --color-info-active: var(--color-iris-400);
3737
+ --color-info-medium: var(--color-iris-400);
3738
+ --color-info-strong: var(--color-iris-300);
3721
3739
  --color-info-text: var(--color-info);
3722
3740
  --color-action-primary-text: var(--color-brand-50);
3723
- --color-action-danger: oklch(63.7% 0.237 25.331);
3724
- --color-action-danger-hover: oklch(57.7% 0.245 27.325);
3725
- --color-action-danger-active: oklch(50.5% 0.213 27.518);
3726
- --color-action-danger-disabled: oklch(50.5% 0.213 27.518);
3727
- --color-action-danger-subtle: oklch(25.8% 0.092 26.042);
3728
- --color-action-danger-subtle-hover: oklch(39.6% 0.141 25.723);
3741
+ --color-action-danger: #ef4444;
3742
+ --color-action-danger-hover: #dc2626;
3743
+ --color-action-danger-active: #b91c1c;
3744
+ --color-action-danger-disabled: #b91c1c;
3745
+ --color-action-danger-subtle: #450a0a;
3746
+ --color-action-danger-subtle-hover: #7f1d1d;
3729
3747
  --shadow-opacity: 0.3;
3730
3748
  --shadow-sm: 0 1px 3px 0 rgb(var(--shadow-color) / var(--shadow-opacity)), 0 1px 2px -1px rgb(var(--shadow-color) / var(--shadow-opacity));
3731
3749
  --shadow-md: 0 4px 6px -1px rgb(var(--shadow-color) / var(--shadow-opacity)), 0 2px 4px -2px rgb(var(--shadow-color) / var(--shadow-opacity));
@@ -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": "7.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",
@@ -122,7 +124,6 @@
122
124
  "@types/node": "^24.5.2",
123
125
  "@types/react": "^19.2.2",
124
126
  "autoprefixer": "^10.4.17",
125
- "baseline-browser-mapping": "^2.10.18",
126
127
  "culori": "^4.0.2",
127
128
  "jsdom": "^29.0.2",
128
129
  "postcss": "^8.4.35",
@@ -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();