@karni/ui 0.3.1 → 0.4.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 (127) hide show
  1. package/README.md +712 -72
  2. package/dist/index.cjs +5 -5
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.js +8660 -4725
  5. package/dist/index.js.map +1 -1
  6. package/dist/manifest.json +18 -1
  7. package/dist/script-BVJ9BbPm.cjs +2 -0
  8. package/dist/script-BVJ9BbPm.cjs.map +1 -0
  9. package/dist/script-D1fn4Dm4.js +6 -0
  10. package/dist/script-D1fn4Dm4.js.map +1 -0
  11. package/dist/src/auth/AuthGuard.d.ts +69 -4
  12. package/dist/src/auth/LoginForm.d.ts +41 -7
  13. package/dist/src/auth/engine.d.ts +15 -13
  14. package/dist/src/auth/provider.d.ts +10 -10
  15. package/dist/src/auth/storage.d.ts +1 -1
  16. package/dist/src/auth/types.d.ts +3 -3
  17. package/dist/src/components/brand/karni-mark.d.ts +4 -4
  18. package/dist/src/components/chart/data-chart.d.ts +66 -11
  19. package/dist/src/components/empty-state/empty-state.d.ts +22 -2
  20. package/dist/src/components/file-upload/FileUpload.d.ts +67 -3
  21. package/dist/src/components/layout/layout.d.ts +104 -9
  22. package/dist/src/components/layout/route-focus.d.ts +43 -0
  23. package/dist/src/components/modal/modal.d.ts +49 -8
  24. package/dist/src/components/page/page.d.ts +36 -5
  25. package/dist/src/components/primitives/button.d.ts +1 -0
  26. package/dist/src/components/primitives/checkbox.d.ts +4 -1
  27. package/dist/src/components/primitives/dropdown-menu.d.ts +1 -1
  28. package/dist/src/components/primitives/icons.d.ts +9 -1
  29. package/dist/src/components/primitives/input.d.ts +4 -1
  30. package/dist/src/components/primitives/label.d.ts +4 -1
  31. package/dist/src/components/primitives/select.d.ts +37 -6
  32. package/dist/src/components/primitives/skeleton.d.ts +4 -1
  33. package/dist/src/components/primitives/switch.d.ts +4 -1
  34. package/dist/src/components/primitives/tabs.d.ts +2 -2
  35. package/dist/src/components/primitives/textarea.d.ts +4 -1
  36. package/dist/src/components/resource/ResourceDetail.d.ts +3 -3
  37. package/dist/src/components/resource/ResourceForm.d.ts +4 -3
  38. package/dist/src/components/resource/ResourceSelect.d.ts +3 -1
  39. package/dist/src/components/resource/ResourceTable.d.ts +9 -3
  40. package/dist/src/components/resource/audit-fields.d.ts +1 -1
  41. package/dist/src/components/resource/detail/ResourceDetail.d.ts +109 -11
  42. package/dist/src/components/resource/empty-value.d.ts +17 -0
  43. package/dist/src/components/resource/form/ResourceForm.d.ts +65 -6
  44. package/dist/src/components/resource/form/field-inputs.d.ts +15 -1
  45. package/dist/src/components/resource/form/form-states.d.ts +87 -0
  46. package/dist/src/components/resource/form/prepare.d.ts +3 -3
  47. package/dist/src/components/resource/form/server-errors.d.ts +14 -0
  48. package/dist/src/components/resource/history/ChangeHistory.d.ts +46 -4
  49. package/dist/src/components/resource/import/ResourceImport.d.ts +73 -7
  50. package/dist/src/components/resource/nouns.d.ts +12 -0
  51. package/dist/src/components/resource/query-state.d.ts +20 -0
  52. package/dist/src/components/resource/resource-names.d.ts +23 -0
  53. package/dist/src/components/resource/select/ResourceSelect.d.ts +39 -8
  54. package/dist/src/components/resource/select/select-states.d.ts +68 -0
  55. package/dist/src/components/resource/select/use-option-pages.d.ts +37 -0
  56. package/dist/src/components/resource/select/venue-backend.d.ts +144 -0
  57. package/dist/src/components/resource/table/BulkActionsBar.d.ts +62 -5
  58. package/dist/src/components/resource/table/CardList.d.ts +31 -0
  59. package/dist/src/components/resource/table/ConfirmDialog.d.ts +28 -0
  60. package/dist/src/components/resource/table/ExportButtons.d.ts +2 -2
  61. package/dist/src/components/resource/table/FilterBar.d.ts +3 -3
  62. package/dist/src/components/resource/table/PaginationControls.d.ts +15 -3
  63. package/dist/src/components/resource/table/ResourceTable.d.ts +79 -14
  64. package/dist/src/components/resource/table/RowCard.d.ts +31 -0
  65. package/dist/src/components/resource/table/TableView.d.ts +29 -0
  66. package/dist/src/components/resource/table/ViewOptions.d.ts +19 -0
  67. package/dist/src/components/resource/table/access.d.ts +12 -0
  68. package/dist/src/components/resource/table/derive-columns.d.ts +2 -2
  69. package/dist/src/components/resource/table/grid-navigation.d.ts +23 -0
  70. package/dist/src/components/resource/table/layout.d.ts +37 -0
  71. package/dist/src/components/resource/table/preferences.d.ts +12 -0
  72. package/dist/src/components/resource/table/slots.d.ts +41 -0
  73. package/dist/src/components/resource/table/states.d.ts +91 -0
  74. package/dist/src/components/resource/table/story-fixtures.d.ts +25 -0
  75. package/dist/src/components/resource/table/structural-columns.d.ts +25 -0
  76. package/dist/src/components/resource/table/table-icons.d.ts +16 -0
  77. package/dist/src/components/resource/table/table-utils.d.ts +27 -3
  78. package/dist/src/components/resource/table/url-state.d.ts +67 -0
  79. package/dist/src/components/resource/table/use-container-width.d.ts +10 -0
  80. package/dist/src/components/resource/testapp-fixtures.d.ts +78 -0
  81. package/dist/src/components/stat/stat.d.ts +36 -6
  82. package/dist/src/components/toast/toast-store.d.ts +1 -1
  83. package/dist/src/components/toast/toaster.d.ts +39 -6
  84. package/dist/src/components/toast/use-toast.d.ts +1 -1
  85. package/dist/src/hooks/keys.d.ts +4 -4
  86. package/dist/src/hooks/multipart.d.ts +9 -9
  87. package/dist/src/hooks/params.d.ts +1 -1
  88. package/dist/src/hooks/types.d.ts +3 -3
  89. package/dist/src/hooks/useChangeHistory.d.ts +3 -2
  90. package/dist/src/hooks/useResourceImport.d.ts +2 -2
  91. package/dist/src/hooks/useResourceMutations.d.ts +2 -2
  92. package/dist/src/hooks/useUnsavedChangesGuard.d.ts +31 -0
  93. package/dist/src/index.d.ts +49 -31
  94. package/dist/src/lib/roles.d.ts +4 -4
  95. package/dist/src/lib/variants.d.ts +1 -1
  96. package/dist/src/primitives/registry.d.ts +81 -0
  97. package/dist/src/schema/client.d.ts +10 -10
  98. package/dist/src/schema/parse.d.ts +2 -2
  99. package/dist/src/schema/provider.d.ts +10 -3
  100. package/dist/src/schema/types.d.ts +18 -9
  101. package/dist/src/schema/useSchema.d.ts +5 -1
  102. package/dist/src/states/ErrorState.d.ts +43 -0
  103. package/dist/src/states/PendingButton.d.ts +16 -0
  104. package/dist/src/states/describe-error.d.ts +25 -0
  105. package/dist/src/states/hooks.d.ts +10 -0
  106. package/dist/src/theme/script.d.ts +12 -0
  107. package/dist/src/theme/theme.d.ts +45 -0
  108. package/dist/styles.css +174 -13
  109. package/dist/tailwind-preset.cjs +2 -2
  110. package/dist/tailwind-preset.cjs.map +1 -1
  111. package/dist/tailwind-preset.d.ts +83 -1
  112. package/dist/tailwind-preset.js +181 -62
  113. package/dist/tailwind-preset.js.map +1 -1
  114. package/dist/tailwind-v4.css +31 -0
  115. package/dist/vite-plugin.cjs +2 -0
  116. package/dist/vite-plugin.cjs.map +1 -0
  117. package/dist/vite-plugin.d.ts +19 -0
  118. package/dist/vite-plugin.js +16 -0
  119. package/dist/vite-plugin.js.map +1 -0
  120. package/eslint-plugin/index.js +4 -0
  121. package/eslint-plugin/rules/max-page-lines.js +1 -1
  122. package/eslint-plugin/rules/no-deep-imports.js +1 -1
  123. package/eslint-plugin/rules/no-direct-http.js +1 -1
  124. package/eslint-plugin/rules/no-raw-elements.js +1 -1
  125. package/eslint-plugin/rules/no-style-literals.js +222 -0
  126. package/eslint-plugin/rules.json +10 -4
  127. package/package.json +22 -19
package/dist/styles.css CHANGED
@@ -1,11 +1,37 @@
1
1
  /**
2
2
  * @karni/ui design tokens.
3
3
  *
4
- * Every color used by @karni/ui components resolves to one of these
5
- * custom properties (HSL triplets, consumed as `hsl(var(--karni-*) / <alpha>)`
6
- * by the Tailwind preset). Override any token in your own stylesheet to
7
- * retheme the whole library; add the `dark` class to <html> (or any ancestor)
8
- * to switch to the dark palette.
4
+ * Every visual value a component uses resolves from a custom property in one
5
+ * of these families:
6
+ *
7
+ * --karni-color-* colours (any CSS colour: hsl(), oklch(), hex, var())
8
+ * --karni-space-* the spacing scale: --karni-space-unit (0.25rem), and any
9
+ * step --karni-space-<n> (4 = 1rem) to override that step
10
+ * --karni-radius-* corner radii (sm, md, lg, xl, full)
11
+ * --karni-font-* families, sizes, line heights, weights, letter spacing
12
+ * --karni-shadow-* elevation (sm, DEFAULT, md, lg)
13
+ * --karni-z-*, --karni-opacity-*, --karni-duration, --karni-ease,
14
+ * --karni-border-width*, --karni-ring-* stacking, opacity, motion, lines
15
+ *
16
+ * The Tailwind preset maps its classes to these properties, so `bg-primary`
17
+ * or `p-4` in a component (or in your own code) reads them. Override any of
18
+ * them in your own stylesheet to retheme every component; `karni ui detect`
19
+ * writes karni-theme.css for you from the project's shadcn/ui, Tailwind,
20
+ * Material UI, Chakra UI or Mantine theme.
21
+ * Add the `dark` class to <html> (or any ancestor) for the dark palette.
22
+ *
23
+ * Both palettes meet WCAG 2.2 AA for every pair the components use (4.5:1
24
+ * text, 3:1 field boundaries, focus rings, icons and chart series);
25
+ * tests/contrast.test.ts computes the ratios from the values below. Check
26
+ * your own overrides against the same pairs.
27
+ *
28
+ * The 0.3 HSL-triplet names (--karni-primary, --karni-border, ...) still
29
+ * work as inputs: each --karni-color-* defaults to its triplet. They are
30
+ * deprecated in 0.4 and removed in 1.0; set --karni-color-* instead.
31
+ *
32
+ * The Django side (the admin, the welcome page) uses this same file: the
33
+ * karni package ships a byte-for-byte copy as the static file
34
+ * karni/tokens.css, and a karni test fails until a change here is copied.
9
35
  */
10
36
  :root {
11
37
  color-scheme: light;
@@ -26,24 +52,24 @@
26
52
  --karni-secondary-foreground: 220.9 39.3% 11%;
27
53
 
28
54
  --karni-muted: 220 14.3% 95.9%;
29
- --karni-muted-foreground: 220 8.9% 46.1%;
55
+ --karni-muted-foreground: 220 8.9% 43%;
30
56
 
31
57
  --karni-accent: 220 14.3% 95.9%;
32
58
  --karni-accent-foreground: 220.9 39.3% 11%;
33
59
 
34
- --karni-destructive: 0 84.2% 60.2%;
60
+ --karni-destructive: 0 72% 46%;
35
61
  --karni-destructive-foreground: 210 20% 98%;
36
62
 
37
63
  --karni-border: 220 13% 91%;
38
- --karni-input: 220 13% 91%;
64
+ --karni-input: 220 9% 56%;
39
65
  --karni-ring: 224 71.4% 4.1%;
40
66
 
41
67
  --karni-radius: 0.5rem;
42
68
 
43
69
  /* DataChart series colors (chart-1 .. chart-5). */
44
70
  --karni-chart-1: 220 70% 50%;
45
- --karni-chart-2: 160 60% 45%;
46
- --karni-chart-3: 30 80% 55%;
71
+ --karni-chart-2: 160 60% 36%;
72
+ --karni-chart-3: 30 80% 42%;
47
73
  --karni-chart-4: 280 65% 60%;
48
74
  --karni-chart-5: 340 75% 55%;
49
75
  }
@@ -72,11 +98,11 @@
72
98
  --karni-accent: 215 27.9% 16.9%;
73
99
  --karni-accent-foreground: 210 20% 98%;
74
100
 
75
- --karni-destructive: 0 62.8% 30.6%;
76
- --karni-destructive-foreground: 210 20% 98%;
101
+ --karni-destructive: 0 84% 67%;
102
+ --karni-destructive-foreground: 224 71.4% 4.1%;
77
103
 
78
104
  --karni-border: 215 27.9% 16.9%;
79
- --karni-input: 215 27.9% 16.9%;
105
+ --karni-input: 215 14% 42%;
80
106
  --karni-ring: 216 12.2% 83.9%;
81
107
 
82
108
  --karni-chart-1: 217 91% 60%;
@@ -85,3 +111,138 @@
85
111
  --karni-chart-4: 280 65% 60%;
86
112
  --karni-chart-5: 340 75% 55%;
87
113
  }
114
+
115
+ /* The colour layer components read. Declared on .dark as well so a dark
116
+ subtree recomputes them from its own values. */
117
+ :root,
118
+ .dark {
119
+ --karni-color-background: hsl(var(--karni-background));
120
+ --karni-color-foreground: hsl(var(--karni-foreground));
121
+ --karni-color-card: hsl(var(--karni-card));
122
+ --karni-color-card-foreground: hsl(var(--karni-card-foreground));
123
+ --karni-color-popover: hsl(var(--karni-popover));
124
+ --karni-color-popover-foreground: hsl(var(--karni-popover-foreground));
125
+ --karni-color-primary: hsl(var(--karni-primary));
126
+ --karni-color-primary-foreground: hsl(var(--karni-primary-foreground));
127
+ --karni-color-primary-hover: color-mix(in srgb, var(--karni-color-primary) 90%, transparent);
128
+ --karni-color-secondary: hsl(var(--karni-secondary));
129
+ --karni-color-secondary-foreground: hsl(var(--karni-secondary-foreground));
130
+ --karni-color-secondary-hover: color-mix(in srgb, var(--karni-color-secondary) 80%, transparent);
131
+ --karni-color-muted: hsl(var(--karni-muted));
132
+ --karni-color-muted-foreground: hsl(var(--karni-muted-foreground));
133
+ --karni-color-muted-subtle: color-mix(in srgb, var(--karni-color-muted) 50%, transparent);
134
+ --karni-color-accent: hsl(var(--karni-accent));
135
+ --karni-color-accent-foreground: hsl(var(--karni-accent-foreground));
136
+ --karni-color-destructive: hsl(var(--karni-destructive));
137
+ --karni-color-destructive-foreground: hsl(var(--karni-destructive-foreground));
138
+ --karni-color-destructive-hover: color-mix(
139
+ in srgb,
140
+ var(--karni-color-destructive) 90%,
141
+ transparent
142
+ );
143
+ --karni-color-destructive-subtle: color-mix(
144
+ in srgb,
145
+ var(--karni-color-destructive) 10%,
146
+ transparent
147
+ );
148
+ --karni-color-destructive-border: color-mix(
149
+ in srgb,
150
+ var(--karni-color-destructive) 50%,
151
+ transparent
152
+ );
153
+ --karni-color-border: hsl(var(--karni-border));
154
+ --karni-color-input: hsl(var(--karni-input));
155
+ --karni-color-ring: hsl(var(--karni-ring));
156
+ --karni-color-overlay: color-mix(in srgb, var(--karni-color-foreground) 40%, transparent);
157
+ --karni-color-chart-1: hsl(var(--karni-chart-1));
158
+ --karni-color-chart-2: hsl(var(--karni-chart-2));
159
+ --karni-color-chart-3: hsl(var(--karni-chart-3));
160
+ --karni-color-chart-4: hsl(var(--karni-chart-4));
161
+ --karni-color-chart-5: hsl(var(--karni-chart-5));
162
+ }
163
+
164
+ /* The scrim behind a modal or the mobile drawer dims the page in both
165
+ themes: the dark theme's foreground is light, so its scrim is the
166
+ background colour instead. */
167
+ .dark {
168
+ --karni-color-overlay: color-mix(in srgb, var(--karni-color-background) 80%, transparent);
169
+ }
170
+
171
+ /* Size, type, elevation, stacking and motion. The preset falls back to the
172
+ same values when a property is unset. */
173
+ :root {
174
+ --karni-space-unit: 0.25rem;
175
+
176
+ --karni-radius-sm: calc(var(--karni-radius) - 4px);
177
+ --karni-radius-md: calc(var(--karni-radius) - 2px);
178
+ --karni-radius-lg: var(--karni-radius);
179
+ --karni-radius-xl: calc(var(--karni-radius) + 4px);
180
+ --karni-radius-full: 9999px;
181
+
182
+ --karni-font-sans:
183
+ ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol",
184
+ "Noto Color Emoji";
185
+ --karni-font-mono:
186
+ ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New",
187
+ monospace;
188
+ --karni-font-size-xs: 0.75rem;
189
+ --karni-font-size-sm: 0.875rem;
190
+ --karni-font-size-base: 1rem;
191
+ --karni-font-size-lg: 1.125rem;
192
+ --karni-font-size-xl: 1.25rem;
193
+ --karni-font-size-2xl: 1.5rem;
194
+ --karni-font-leading-xs: 1rem;
195
+ --karni-font-leading-sm: 1.25rem;
196
+ --karni-font-leading-base: 1.5rem;
197
+ --karni-font-leading-lg: 1.75rem;
198
+ --karni-font-leading-xl: 1.75rem;
199
+ --karni-font-leading-2xl: 2rem;
200
+ --karni-font-leading-none: 1;
201
+ --karni-font-weight-normal: 400;
202
+ --karni-font-weight-medium: 500;
203
+ --karni-font-weight-semibold: 600;
204
+ --karni-font-weight-bold: 700;
205
+ --karni-font-tracking-tight: -0.025em;
206
+ --karni-font-tracking-wide: 0.025em;
207
+ --karni-font-underline-offset: 4px;
208
+
209
+ /* Tailwind 4's scale (its shadow-sm is Tailwind 3's bare shadow). */
210
+ --karni-shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
211
+ --karni-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
212
+ --karni-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
213
+ --karni-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
214
+
215
+ --karni-border-width: 1px;
216
+ --karni-border-width-2: 2px;
217
+ --karni-ring-width: 2px;
218
+ --karni-ring-width-1: 1px;
219
+ --karni-ring-offset-width: 2px;
220
+
221
+ /* ResourceTable scrolls inside a box this tall (its header sticks); `none`
222
+ lets the page scroll instead. */
223
+ --karni-table-max-height: 70vh;
224
+
225
+ --karni-z-raised: 10;
226
+ --karni-z-drawer: 40;
227
+ --karni-z-popover: 50;
228
+ --karni-z-modal: 50;
229
+ --karni-z-toast: 100;
230
+
231
+ --karni-opacity-50: 0.5;
232
+ --karni-opacity-60: 0.6;
233
+ --karni-opacity-70: 0.7;
234
+ --karni-opacity-90: 0.9;
235
+
236
+ --karni-duration: 150ms;
237
+ --karni-duration-pulse: 2s;
238
+ --karni-duration-spin: 1s;
239
+ --karni-ease: cubic-bezier(0.4, 0, 0.2, 1);
240
+ }
241
+
242
+ @media (prefers-reduced-motion: reduce) {
243
+ :root {
244
+ --karni-duration: 0ms;
245
+ --karni-duration-pulse: 0s;
246
+ --karni-duration-spin: 0s;
247
+ }
248
+ }
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a={darkMode:"class",theme:{extend:{colors:{background:"hsl(var(--karni-background) / <alpha-value>)",foreground:"hsl(var(--karni-foreground) / <alpha-value>)",card:{DEFAULT:"hsl(var(--karni-card) / <alpha-value>)",foreground:"hsl(var(--karni-card-foreground) / <alpha-value>)"},popover:{DEFAULT:"hsl(var(--karni-popover) / <alpha-value>)",foreground:"hsl(var(--karni-popover-foreground) / <alpha-value>)"},primary:{DEFAULT:"hsl(var(--karni-primary) / <alpha-value>)",foreground:"hsl(var(--karni-primary-foreground) / <alpha-value>)"},secondary:{DEFAULT:"hsl(var(--karni-secondary) / <alpha-value>)",foreground:"hsl(var(--karni-secondary-foreground) / <alpha-value>)"},muted:{DEFAULT:"hsl(var(--karni-muted) / <alpha-value>)",foreground:"hsl(var(--karni-muted-foreground) / <alpha-value>)"},accent:{DEFAULT:"hsl(var(--karni-accent) / <alpha-value>)",foreground:"hsl(var(--karni-accent-foreground) / <alpha-value>)"},destructive:{DEFAULT:"hsl(var(--karni-destructive) / <alpha-value>)",foreground:"hsl(var(--karni-destructive-foreground) / <alpha-value>)"},border:"hsl(var(--karni-border) / <alpha-value>)",input:"hsl(var(--karni-input) / <alpha-value>)",ring:"hsl(var(--karni-ring) / <alpha-value>)",chart:{1:"hsl(var(--karni-chart-1) / <alpha-value>)",2:"hsl(var(--karni-chart-2) / <alpha-value>)",3:"hsl(var(--karni-chart-3) / <alpha-value>)",4:"hsl(var(--karni-chart-4) / <alpha-value>)",5:"hsl(var(--karni-chart-5) / <alpha-value>)"}},borderColor:{DEFAULT:"hsl(var(--karni-border) / <alpha-value>)"},borderRadius:{lg:"var(--karni-radius)",md:"calc(var(--karni-radius) - 2px)",sm:"calc(var(--karni-radius) - 4px)"}}}};exports.default=a;
2
- //# sourceMappingURL=tailwind-preset.cjs.map
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});function e(e){return`color-mix(in srgb, var(--karni-color-${e}) calc(<alpha-value> * 100%), transparent)`}var t=[.5,1,1.5,2,2.5,3,3.5,4,5,6,7,8,9,10,11,12,14,16,20,24,28,32,36,40,44,48,52,56,60,64,72,80,96,128];function n(){let e={0:`0px`,px:`var(--karni-space-px, 1px)`};for(let n of t){let t=String(n).replace(`.`,`-`);e[String(n)]=`var(--karni-space-${t}, calc(var(--karni-space-unit, 0.25rem) * ${n}))`}return e}var r={xs:[`0.75rem`,`1rem`],sm:[`0.875rem`,`1.25rem`],base:[`1rem`,`1.5rem`],lg:[`1.125rem`,`1.75rem`],xl:[`1.25rem`,`1.75rem`],"2xl":[`1.5rem`,`2rem`]};function i(){return Object.fromEntries(Object.entries(r).map(([e,[t,n]])=>[e,[`var(--karni-font-size-${e}, ${t})`,{lineHeight:`var(--karni-font-leading-${e}, ${n})`}]]))}var a={darkMode:`class`,theme:{extend:{colors:{background:e(`background`),foreground:e(`foreground`),card:{DEFAULT:e(`card`),foreground:e(`card-foreground`)},popover:{DEFAULT:e(`popover`),foreground:e(`popover-foreground`)},primary:{DEFAULT:e(`primary`),foreground:e(`primary-foreground`),hover:e(`primary-hover`)},secondary:{DEFAULT:e(`secondary`),foreground:e(`secondary-foreground`),hover:e(`secondary-hover`)},muted:{DEFAULT:e(`muted`),foreground:e(`muted-foreground`),subtle:e(`muted-subtle`)},accent:{DEFAULT:e(`accent`),foreground:e(`accent-foreground`)},destructive:{DEFAULT:e(`destructive`),foreground:e(`destructive-foreground`),hover:e(`destructive-hover`),subtle:e(`destructive-subtle`),border:e(`destructive-border`)},border:e(`border`),input:e(`input`),ring:e(`ring`),overlay:e(`overlay`),chart:{1:e(`chart-1`),2:e(`chart-2`),3:e(`chart-3`),4:e(`chart-4`),5:e(`chart-5`)}},borderColor:{DEFAULT:e(`border`)},spacing:n(),borderRadius:{DEFAULT:`var(--karni-radius-sm, 0.25rem)`,sm:`var(--karni-radius-sm, 0.25rem)`,md:`var(--karni-radius-md, 0.375rem)`,lg:`var(--karni-radius-lg, 0.5rem)`,xl:`var(--karni-radius-xl, 0.75rem)`,full:`var(--karni-radius-full, 9999px)`},fontFamily:{sans:`var(--karni-font-sans, ui-sans-serif, system-ui, sans-serif)`,mono:`var(--karni-font-mono, ui-monospace, monospace)`},fontSize:i(),fontWeight:{normal:`var(--karni-font-weight-normal, 400)`,medium:`var(--karni-font-weight-medium, 500)`,semibold:`var(--karni-font-weight-semibold, 600)`,bold:`var(--karni-font-weight-bold, 700)`},lineHeight:{none:`var(--karni-font-leading-none, 1)`},textUnderlineOffset:{4:`var(--karni-font-underline-offset, 4px)`},letterSpacing:{tight:`var(--karni-font-tracking-tight, -0.025em)`,wide:`var(--karni-font-tracking-wide, 0.025em)`},boxShadow:{sm:`var(--karni-shadow-sm, 0 1px 3px 0 rgb(0 0 0 / 0.1))`,DEFAULT:`var(--karni-shadow, 0 1px 3px 0 rgb(0 0 0 / 0.1))`,md:`var(--karni-shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1))`,lg:`var(--karni-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1))`},borderWidth:{DEFAULT:`var(--karni-border-width, 1px)`,2:`var(--karni-border-width-2, 2px)`},divideWidth:{DEFAULT:`var(--karni-border-width, 1px)`},outlineWidth:{DEFAULT:`var(--karni-border-width, 1px)`},ringWidth:{1:`var(--karni-ring-width-1, 1px)`,2:`var(--karni-ring-width, 2px)`},ringOffsetWidth:{2:`var(--karni-ring-offset-width, 2px)`},zIndex:{raised:`var(--karni-z-raised, 10)`,drawer:`var(--karni-z-drawer, 40)`,popover:`var(--karni-z-popover, 50)`,modal:`var(--karni-z-modal, 50)`,toast:`var(--karni-z-toast, 100)`},opacity:{50:`var(--karni-opacity-50, 0.5)`,60:`var(--karni-opacity-60, 0.6)`,70:`var(--karni-opacity-70, 0.7)`,90:`var(--karni-opacity-90, 0.9)`},transitionDuration:{DEFAULT:`var(--karni-duration, 150ms)`},transitionTimingFunction:{DEFAULT:`var(--karni-ease, cubic-bezier(0.4, 0, 0.2, 1))`},animation:{pulse:`pulse var(--karni-duration-pulse, 2s) cubic-bezier(0.4, 0, 0.6, 1) infinite`,spin:`spin var(--karni-duration-spin, 1s) linear infinite`}}}};exports.SPACE_STEPS=t,exports.default=a;
2
+ //# sourceMappingURL=tailwind-preset.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"tailwind-preset.cjs","sources":["../tailwind-preset.ts"],"sourcesContent":["/**\n * Tailwind (v3) preset for @karni/ui consumers.\n *\n * Usage (tailwind.config.ts of the consuming app):\n *\n * ```ts\n * import karniPreset from \"@karni/ui/tailwind-preset\";\n *\n * export default {\n * presets: [karniPreset],\n * content: [\n * \"./src/**\\/*.{ts,tsx}\",\n * \"./node_modules/@karni/ui/dist/**\\/*.js\",\n * ],\n * };\n * ```\n *\n * Also import \"@karni/ui/styles.css\" once (it defines the --karni-* tokens).\n * Tailwind v4 users: see the README recipe (@source into dist) instead.\n */\nimport type { Config } from \"tailwindcss\";\n\nconst karniPreset = {\n // `as const` keeps the literal type so the preset stays assignable to\n // Config[\"presets\"] when consumers spread it into their own config.\n darkMode: \"class\" as const,\n theme: {\n extend: {\n colors: {\n background: \"hsl(var(--karni-background) / <alpha-value>)\",\n foreground: \"hsl(var(--karni-foreground) / <alpha-value>)\",\n card: {\n DEFAULT: \"hsl(var(--karni-card) / <alpha-value>)\",\n foreground: \"hsl(var(--karni-card-foreground) / <alpha-value>)\",\n },\n popover: {\n DEFAULT: \"hsl(var(--karni-popover) / <alpha-value>)\",\n foreground: \"hsl(var(--karni-popover-foreground) / <alpha-value>)\",\n },\n primary: {\n DEFAULT: \"hsl(var(--karni-primary) / <alpha-value>)\",\n foreground: \"hsl(var(--karni-primary-foreground) / <alpha-value>)\",\n },\n secondary: {\n DEFAULT: \"hsl(var(--karni-secondary) / <alpha-value>)\",\n foreground: \"hsl(var(--karni-secondary-foreground) / <alpha-value>)\",\n },\n muted: {\n DEFAULT: \"hsl(var(--karni-muted) / <alpha-value>)\",\n foreground: \"hsl(var(--karni-muted-foreground) / <alpha-value>)\",\n },\n accent: {\n DEFAULT: \"hsl(var(--karni-accent) / <alpha-value>)\",\n foreground: \"hsl(var(--karni-accent-foreground) / <alpha-value>)\",\n },\n destructive: {\n DEFAULT: \"hsl(var(--karni-destructive) / <alpha-value>)\",\n foreground: \"hsl(var(--karni-destructive-foreground) / <alpha-value>)\",\n },\n border: \"hsl(var(--karni-border) / <alpha-value>)\",\n input: \"hsl(var(--karni-input) / <alpha-value>)\",\n ring: \"hsl(var(--karni-ring) / <alpha-value>)\",\n chart: {\n \"1\": \"hsl(var(--karni-chart-1) / <alpha-value>)\",\n \"2\": \"hsl(var(--karni-chart-2) / <alpha-value>)\",\n \"3\": \"hsl(var(--karni-chart-3) / <alpha-value>)\",\n \"4\": \"hsl(var(--karni-chart-4) / <alpha-value>)\",\n \"5\": \"hsl(var(--karni-chart-5) / <alpha-value>)\",\n },\n },\n borderColor: {\n // A bare `border` class uses the token, never Tailwind's default gray.\n DEFAULT: \"hsl(var(--karni-border) / <alpha-value>)\",\n },\n borderRadius: {\n lg: \"var(--karni-radius)\",\n md: \"calc(var(--karni-radius) - 2px)\",\n sm: \"calc(var(--karni-radius) - 4px)\",\n },\n },\n },\n} satisfies Omit<Config, \"content\">;\n\nexport default karniPreset;\n"],"names":["karniPreset"],"mappings":"4GAsBA,MAAMA,EAAc,CAGlB,SAAU,QACV,MAAO,CACL,OAAQ,CACN,OAAQ,CACN,WAAY,+CACZ,WAAY,+CACZ,KAAM,CACJ,QAAS,yCACT,WAAY,mDAAA,EAEd,QAAS,CACP,QAAS,4CACT,WAAY,sDAAA,EAEd,QAAS,CACP,QAAS,4CACT,WAAY,sDAAA,EAEd,UAAW,CACT,QAAS,8CACT,WAAY,wDAAA,EAEd,MAAO,CACL,QAAS,0CACT,WAAY,oDAAA,EAEd,OAAQ,CACN,QAAS,2CACT,WAAY,qDAAA,EAEd,YAAa,CACX,QAAS,gDACT,WAAY,0DAAA,EAEd,OAAQ,2CACR,MAAO,0CACP,KAAM,yCACN,MAAO,CACL,EAAK,4CACL,EAAK,4CACL,EAAK,4CACL,EAAK,4CACL,EAAK,2CAAA,CACP,EAEF,YAAa,CAEX,QAAS,0CAAA,EAEX,aAAc,CACZ,GAAI,sBACJ,GAAI,kCACJ,GAAI,iCAAA,CACN,CACF,CAEJ"}
1
+ {"version":3,"file":"tailwind-preset.cjs","names":["color","name","SPACE_STEPS","spacing","scale","step","FONT_SIZES","fontSize","size","leading","karniPreset"],"sources":["../tailwind-preset.ts"],"sourcesContent":["/**\n * Tailwind preset for @karni/ui consumers (Tailwind 3, and 4 through @config).\n *\n * Usage (tailwind.config.ts of the consuming app):\n *\n * ```ts\n * import karniPreset from \"@karni/ui/tailwind-preset\";\n *\n * export default {\n * presets: [karniPreset],\n * content: [\n * \"./src/**\\/*.{ts,tsx}\",\n * \"./node_modules/@karni/ui/dist/**\\/*.js\",\n * ],\n * };\n * ```\n *\n * Also import \"@karni/ui/styles.css\" once (it defines the --karni-* tokens).\n * Tailwind v4 loads the same config through `@config` in CSS, next to\n * `@import \"@karni/ui/tailwind-v4.css\"` (see the README).\n */\nimport type { Config } from \"tailwindcss\";\n\n/**\n * A colour token as a Tailwind colour. Wrapping it in color-mix with\n * `<alpha-value>` keeps opacity modifiers (`bg-primary/50`) working in\n * Tailwind 3 as well as 4, for any colour format the token holds.\n */\nfunction color(name: string): string {\n return `color-mix(in srgb, var(--karni-color-${name}) calc(<alpha-value> * 100%), transparent)`;\n}\n\n/** The spacing scale: each step reads --karni-space-<n>, else n × --karni-space-unit. */\nexport const SPACE_STEPS = [\n 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 20, 24, 28, 32, 36, 40, 44, 48,\n 52, 56, 60, 64, 72, 80, 96, 128,\n] as const;\n\nfunction spacing(): Record<string, string> {\n const scale: Record<string, string> = {\n 0: \"0px\",\n px: \"var(--karni-space-px, 1px)\",\n };\n for (const step of SPACE_STEPS) {\n const name = String(step).replace(\".\", \"-\");\n scale[String(step)] =\n `var(--karni-space-${name}, calc(var(--karni-space-unit, 0.25rem) * ${step}))`;\n }\n return scale;\n}\n\nconst FONT_SIZES = {\n xs: [\"0.75rem\", \"1rem\"],\n sm: [\"0.875rem\", \"1.25rem\"],\n base: [\"1rem\", \"1.5rem\"],\n lg: [\"1.125rem\", \"1.75rem\"],\n xl: [\"1.25rem\", \"1.75rem\"],\n \"2xl\": [\"1.5rem\", \"2rem\"],\n} as const;\n\nfunction fontSize(): Record<string, [string, { lineHeight: string }]> {\n return Object.fromEntries(\n Object.entries(FONT_SIZES).map(([name, [size, leading]]) => [\n name,\n [\n `var(--karni-font-size-${name}, ${size})`,\n { lineHeight: `var(--karni-font-leading-${name}, ${leading})` },\n ],\n ]),\n );\n}\n\nconst karniPreset = {\n // `as const` keeps the literal type so the preset stays assignable to\n // Config[\"presets\"] when consumers spread it into their own config.\n darkMode: \"class\" as const,\n theme: {\n extend: {\n colors: {\n background: color(\"background\"),\n foreground: color(\"foreground\"),\n card: { DEFAULT: color(\"card\"), foreground: color(\"card-foreground\") },\n popover: { DEFAULT: color(\"popover\"), foreground: color(\"popover-foreground\") },\n primary: {\n DEFAULT: color(\"primary\"),\n foreground: color(\"primary-foreground\"),\n hover: color(\"primary-hover\"),\n },\n secondary: {\n DEFAULT: color(\"secondary\"),\n foreground: color(\"secondary-foreground\"),\n hover: color(\"secondary-hover\"),\n },\n muted: {\n DEFAULT: color(\"muted\"),\n foreground: color(\"muted-foreground\"),\n subtle: color(\"muted-subtle\"),\n },\n accent: { DEFAULT: color(\"accent\"), foreground: color(\"accent-foreground\") },\n destructive: {\n DEFAULT: color(\"destructive\"),\n foreground: color(\"destructive-foreground\"),\n hover: color(\"destructive-hover\"),\n subtle: color(\"destructive-subtle\"),\n border: color(\"destructive-border\"),\n },\n border: color(\"border\"),\n input: color(\"input\"),\n ring: color(\"ring\"),\n overlay: color(\"overlay\"),\n chart: {\n \"1\": color(\"chart-1\"),\n \"2\": color(\"chart-2\"),\n \"3\": color(\"chart-3\"),\n \"4\": color(\"chart-4\"),\n \"5\": color(\"chart-5\"),\n },\n },\n borderColor: {\n // A bare `border` class uses the token, never Tailwind's default gray.\n DEFAULT: color(\"border\"),\n },\n spacing: spacing(),\n borderRadius: {\n DEFAULT: \"var(--karni-radius-sm, 0.25rem)\",\n sm: \"var(--karni-radius-sm, 0.25rem)\",\n md: \"var(--karni-radius-md, 0.375rem)\",\n lg: \"var(--karni-radius-lg, 0.5rem)\",\n xl: \"var(--karni-radius-xl, 0.75rem)\",\n full: \"var(--karni-radius-full, 9999px)\",\n },\n fontFamily: {\n sans: \"var(--karni-font-sans, ui-sans-serif, system-ui, sans-serif)\",\n mono: \"var(--karni-font-mono, ui-monospace, monospace)\",\n },\n fontSize: fontSize(),\n fontWeight: {\n normal: \"var(--karni-font-weight-normal, 400)\",\n medium: \"var(--karni-font-weight-medium, 500)\",\n semibold: \"var(--karni-font-weight-semibold, 600)\",\n bold: \"var(--karni-font-weight-bold, 700)\",\n },\n lineHeight: { none: \"var(--karni-font-leading-none, 1)\" },\n textUnderlineOffset: { \"4\": \"var(--karni-font-underline-offset, 4px)\" },\n letterSpacing: {\n tight: \"var(--karni-font-tracking-tight, -0.025em)\",\n wide: \"var(--karni-font-tracking-wide, 0.025em)\",\n },\n boxShadow: {\n sm: \"var(--karni-shadow-sm, 0 1px 3px 0 rgb(0 0 0 / 0.1))\",\n DEFAULT: \"var(--karni-shadow, 0 1px 3px 0 rgb(0 0 0 / 0.1))\",\n md: \"var(--karni-shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1))\",\n lg: \"var(--karni-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1))\",\n },\n borderWidth: {\n DEFAULT: \"var(--karni-border-width, 1px)\",\n \"2\": \"var(--karni-border-width-2, 2px)\",\n },\n divideWidth: { DEFAULT: \"var(--karni-border-width, 1px)\" },\n outlineWidth: { DEFAULT: \"var(--karni-border-width, 1px)\" },\n ringWidth: {\n \"1\": \"var(--karni-ring-width-1, 1px)\",\n \"2\": \"var(--karni-ring-width, 2px)\",\n },\n ringOffsetWidth: { \"2\": \"var(--karni-ring-offset-width, 2px)\" },\n zIndex: {\n raised: \"var(--karni-z-raised, 10)\",\n drawer: \"var(--karni-z-drawer, 40)\",\n popover: \"var(--karni-z-popover, 50)\",\n modal: \"var(--karni-z-modal, 50)\",\n toast: \"var(--karni-z-toast, 100)\",\n },\n opacity: {\n \"50\": \"var(--karni-opacity-50, 0.5)\",\n \"60\": \"var(--karni-opacity-60, 0.6)\",\n \"70\": \"var(--karni-opacity-70, 0.7)\",\n \"90\": \"var(--karni-opacity-90, 0.9)\",\n },\n transitionDuration: { DEFAULT: \"var(--karni-duration, 150ms)\" },\n transitionTimingFunction: { DEFAULT: \"var(--karni-ease, cubic-bezier(0.4, 0, 0.2, 1))\" },\n animation: {\n pulse: \"pulse var(--karni-duration-pulse, 2s) cubic-bezier(0.4, 0, 0.6, 1) infinite\",\n spin: \"spin var(--karni-duration-spin, 1s) linear infinite\",\n },\n },\n },\n} satisfies Omit<Config, \"content\">;\n\nexport default karniPreset;\n"],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ /** The spacing scale: each step reads --karni-space-<n>, else n × --karni-space-unit. */
2
+ export declare const SPACE_STEPS: readonly [0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 72, 80, 96, 128];
1
3
  declare const karniPreset: {
2
4
  darkMode: "class";
3
5
  theme: {
@@ -16,14 +18,17 @@ declare const karniPreset: {
16
18
  primary: {
17
19
  DEFAULT: string;
18
20
  foreground: string;
21
+ hover: string;
19
22
  };
20
23
  secondary: {
21
24
  DEFAULT: string;
22
25
  foreground: string;
26
+ hover: string;
23
27
  };
24
28
  muted: {
25
29
  DEFAULT: string;
26
30
  foreground: string;
31
+ subtle: string;
27
32
  };
28
33
  accent: {
29
34
  DEFAULT: string;
@@ -32,10 +37,14 @@ declare const karniPreset: {
32
37
  destructive: {
33
38
  DEFAULT: string;
34
39
  foreground: string;
40
+ hover: string;
41
+ subtle: string;
42
+ border: string;
35
43
  };
36
44
  border: string;
37
45
  input: string;
38
46
  ring: string;
47
+ overlay: string;
39
48
  chart: {
40
49
  "1": string;
41
50
  "2": string;
@@ -47,10 +56,83 @@ declare const karniPreset: {
47
56
  borderColor: {
48
57
  DEFAULT: string;
49
58
  };
59
+ spacing: Record<string, string>;
50
60
  borderRadius: {
51
- lg: string;
61
+ DEFAULT: string;
62
+ sm: string;
52
63
  md: string;
64
+ lg: string;
65
+ xl: string;
66
+ full: string;
67
+ };
68
+ fontFamily: {
69
+ sans: string;
70
+ mono: string;
71
+ };
72
+ fontSize: Record<string, [string, {
73
+ lineHeight: string;
74
+ }]>;
75
+ fontWeight: {
76
+ normal: string;
77
+ medium: string;
78
+ semibold: string;
79
+ bold: string;
80
+ };
81
+ lineHeight: {
82
+ none: string;
83
+ };
84
+ textUnderlineOffset: {
85
+ "4": string;
86
+ };
87
+ letterSpacing: {
88
+ tight: string;
89
+ wide: string;
90
+ };
91
+ boxShadow: {
53
92
  sm: string;
93
+ DEFAULT: string;
94
+ md: string;
95
+ lg: string;
96
+ };
97
+ borderWidth: {
98
+ DEFAULT: string;
99
+ "2": string;
100
+ };
101
+ divideWidth: {
102
+ DEFAULT: string;
103
+ };
104
+ outlineWidth: {
105
+ DEFAULT: string;
106
+ };
107
+ ringWidth: {
108
+ "1": string;
109
+ "2": string;
110
+ };
111
+ ringOffsetWidth: {
112
+ "2": string;
113
+ };
114
+ zIndex: {
115
+ raised: string;
116
+ drawer: string;
117
+ popover: string;
118
+ modal: string;
119
+ toast: string;
120
+ };
121
+ opacity: {
122
+ "50": string;
123
+ "60": string;
124
+ "70": string;
125
+ "90": string;
126
+ };
127
+ transitionDuration: {
128
+ DEFAULT: string;
129
+ };
130
+ transitionTimingFunction: {
131
+ DEFAULT: string;
132
+ };
133
+ animation: {
134
+ pulse: string;
135
+ spin: string;
54
136
  };
55
137
  };
56
138
  };
@@ -1,64 +1,183 @@
1
- const a = {
2
- // `as const` keeps the literal type so the preset stays assignable to
3
- // Config["presets"] when consumers spread it into their own config.
4
- darkMode: "class",
5
- theme: {
6
- extend: {
7
- colors: {
8
- background: "hsl(var(--karni-background) / <alpha-value>)",
9
- foreground: "hsl(var(--karni-foreground) / <alpha-value>)",
10
- card: {
11
- DEFAULT: "hsl(var(--karni-card) / <alpha-value>)",
12
- foreground: "hsl(var(--karni-card-foreground) / <alpha-value>)"
13
- },
14
- popover: {
15
- DEFAULT: "hsl(var(--karni-popover) / <alpha-value>)",
16
- foreground: "hsl(var(--karni-popover-foreground) / <alpha-value>)"
17
- },
18
- primary: {
19
- DEFAULT: "hsl(var(--karni-primary) / <alpha-value>)",
20
- foreground: "hsl(var(--karni-primary-foreground) / <alpha-value>)"
21
- },
22
- secondary: {
23
- DEFAULT: "hsl(var(--karni-secondary) / <alpha-value>)",
24
- foreground: "hsl(var(--karni-secondary-foreground) / <alpha-value>)"
25
- },
26
- muted: {
27
- DEFAULT: "hsl(var(--karni-muted) / <alpha-value>)",
28
- foreground: "hsl(var(--karni-muted-foreground) / <alpha-value>)"
29
- },
30
- accent: {
31
- DEFAULT: "hsl(var(--karni-accent) / <alpha-value>)",
32
- foreground: "hsl(var(--karni-accent-foreground) / <alpha-value>)"
33
- },
34
- destructive: {
35
- DEFAULT: "hsl(var(--karni-destructive) / <alpha-value>)",
36
- foreground: "hsl(var(--karni-destructive-foreground) / <alpha-value>)"
37
- },
38
- border: "hsl(var(--karni-border) / <alpha-value>)",
39
- input: "hsl(var(--karni-input) / <alpha-value>)",
40
- ring: "hsl(var(--karni-ring) / <alpha-value>)",
41
- chart: {
42
- 1: "hsl(var(--karni-chart-1) / <alpha-value>)",
43
- 2: "hsl(var(--karni-chart-2) / <alpha-value>)",
44
- 3: "hsl(var(--karni-chart-3) / <alpha-value>)",
45
- 4: "hsl(var(--karni-chart-4) / <alpha-value>)",
46
- 5: "hsl(var(--karni-chart-5) / <alpha-value>)"
47
- }
48
- },
49
- borderColor: {
50
- // A bare `border` class uses the token, never Tailwind's default gray.
51
- DEFAULT: "hsl(var(--karni-border) / <alpha-value>)"
52
- },
53
- borderRadius: {
54
- lg: "var(--karni-radius)",
55
- md: "calc(var(--karni-radius) - 2px)",
56
- sm: "calc(var(--karni-radius) - 4px)"
57
- }
58
- }
59
- }
1
+ //#region tailwind-preset.ts
2
+ function e(e) {
3
+ return `color-mix(in srgb, var(--karni-color-${e}) calc(<alpha-value> * 100%), transparent)`;
4
+ }
5
+ var t = [
6
+ .5,
7
+ 1,
8
+ 1.5,
9
+ 2,
10
+ 2.5,
11
+ 3,
12
+ 3.5,
13
+ 4,
14
+ 5,
15
+ 6,
16
+ 7,
17
+ 8,
18
+ 9,
19
+ 10,
20
+ 11,
21
+ 12,
22
+ 14,
23
+ 16,
24
+ 20,
25
+ 24,
26
+ 28,
27
+ 32,
28
+ 36,
29
+ 40,
30
+ 44,
31
+ 48,
32
+ 52,
33
+ 56,
34
+ 60,
35
+ 64,
36
+ 72,
37
+ 80,
38
+ 96,
39
+ 128
40
+ ];
41
+ function n() {
42
+ let e = {
43
+ 0: "0px",
44
+ px: "var(--karni-space-px, 1px)"
45
+ };
46
+ for (let n of t) {
47
+ let t = String(n).replace(".", "-");
48
+ e[String(n)] = `var(--karni-space-${t}, calc(var(--karni-space-unit, 0.25rem) * ${n}))`;
49
+ }
50
+ return e;
51
+ }
52
+ var r = {
53
+ xs: ["0.75rem", "1rem"],
54
+ sm: ["0.875rem", "1.25rem"],
55
+ base: ["1rem", "1.5rem"],
56
+ lg: ["1.125rem", "1.75rem"],
57
+ xl: ["1.25rem", "1.75rem"],
58
+ "2xl": ["1.5rem", "2rem"]
60
59
  };
61
- export {
62
- a as default
60
+ function i() {
61
+ return Object.fromEntries(Object.entries(r).map(([e, [t, n]]) => [e, [`var(--karni-font-size-${e}, ${t})`, { lineHeight: `var(--karni-font-leading-${e}, ${n})` }]]));
62
+ }
63
+ var a = {
64
+ darkMode: "class",
65
+ theme: { extend: {
66
+ colors: {
67
+ background: e("background"),
68
+ foreground: e("foreground"),
69
+ card: {
70
+ DEFAULT: e("card"),
71
+ foreground: e("card-foreground")
72
+ },
73
+ popover: {
74
+ DEFAULT: e("popover"),
75
+ foreground: e("popover-foreground")
76
+ },
77
+ primary: {
78
+ DEFAULT: e("primary"),
79
+ foreground: e("primary-foreground"),
80
+ hover: e("primary-hover")
81
+ },
82
+ secondary: {
83
+ DEFAULT: e("secondary"),
84
+ foreground: e("secondary-foreground"),
85
+ hover: e("secondary-hover")
86
+ },
87
+ muted: {
88
+ DEFAULT: e("muted"),
89
+ foreground: e("muted-foreground"),
90
+ subtle: e("muted-subtle")
91
+ },
92
+ accent: {
93
+ DEFAULT: e("accent"),
94
+ foreground: e("accent-foreground")
95
+ },
96
+ destructive: {
97
+ DEFAULT: e("destructive"),
98
+ foreground: e("destructive-foreground"),
99
+ hover: e("destructive-hover"),
100
+ subtle: e("destructive-subtle"),
101
+ border: e("destructive-border")
102
+ },
103
+ border: e("border"),
104
+ input: e("input"),
105
+ ring: e("ring"),
106
+ overlay: e("overlay"),
107
+ chart: {
108
+ 1: e("chart-1"),
109
+ 2: e("chart-2"),
110
+ 3: e("chart-3"),
111
+ 4: e("chart-4"),
112
+ 5: e("chart-5")
113
+ }
114
+ },
115
+ borderColor: { DEFAULT: e("border") },
116
+ spacing: n(),
117
+ borderRadius: {
118
+ DEFAULT: "var(--karni-radius-sm, 0.25rem)",
119
+ sm: "var(--karni-radius-sm, 0.25rem)",
120
+ md: "var(--karni-radius-md, 0.375rem)",
121
+ lg: "var(--karni-radius-lg, 0.5rem)",
122
+ xl: "var(--karni-radius-xl, 0.75rem)",
123
+ full: "var(--karni-radius-full, 9999px)"
124
+ },
125
+ fontFamily: {
126
+ sans: "var(--karni-font-sans, ui-sans-serif, system-ui, sans-serif)",
127
+ mono: "var(--karni-font-mono, ui-monospace, monospace)"
128
+ },
129
+ fontSize: i(),
130
+ fontWeight: {
131
+ normal: "var(--karni-font-weight-normal, 400)",
132
+ medium: "var(--karni-font-weight-medium, 500)",
133
+ semibold: "var(--karni-font-weight-semibold, 600)",
134
+ bold: "var(--karni-font-weight-bold, 700)"
135
+ },
136
+ lineHeight: { none: "var(--karni-font-leading-none, 1)" },
137
+ textUnderlineOffset: { 4: "var(--karni-font-underline-offset, 4px)" },
138
+ letterSpacing: {
139
+ tight: "var(--karni-font-tracking-tight, -0.025em)",
140
+ wide: "var(--karni-font-tracking-wide, 0.025em)"
141
+ },
142
+ boxShadow: {
143
+ sm: "var(--karni-shadow-sm, 0 1px 3px 0 rgb(0 0 0 / 0.1))",
144
+ DEFAULT: "var(--karni-shadow, 0 1px 3px 0 rgb(0 0 0 / 0.1))",
145
+ md: "var(--karni-shadow-md, 0 4px 6px -1px rgb(0 0 0 / 0.1))",
146
+ lg: "var(--karni-shadow-lg, 0 10px 15px -3px rgb(0 0 0 / 0.1))"
147
+ },
148
+ borderWidth: {
149
+ DEFAULT: "var(--karni-border-width, 1px)",
150
+ 2: "var(--karni-border-width-2, 2px)"
151
+ },
152
+ divideWidth: { DEFAULT: "var(--karni-border-width, 1px)" },
153
+ outlineWidth: { DEFAULT: "var(--karni-border-width, 1px)" },
154
+ ringWidth: {
155
+ 1: "var(--karni-ring-width-1, 1px)",
156
+ 2: "var(--karni-ring-width, 2px)"
157
+ },
158
+ ringOffsetWidth: { 2: "var(--karni-ring-offset-width, 2px)" },
159
+ zIndex: {
160
+ raised: "var(--karni-z-raised, 10)",
161
+ drawer: "var(--karni-z-drawer, 40)",
162
+ popover: "var(--karni-z-popover, 50)",
163
+ modal: "var(--karni-z-modal, 50)",
164
+ toast: "var(--karni-z-toast, 100)"
165
+ },
166
+ opacity: {
167
+ 50: "var(--karni-opacity-50, 0.5)",
168
+ 60: "var(--karni-opacity-60, 0.6)",
169
+ 70: "var(--karni-opacity-70, 0.7)",
170
+ 90: "var(--karni-opacity-90, 0.9)"
171
+ },
172
+ transitionDuration: { DEFAULT: "var(--karni-duration, 150ms)" },
173
+ transitionTimingFunction: { DEFAULT: "var(--karni-ease, cubic-bezier(0.4, 0, 0.2, 1))" },
174
+ animation: {
175
+ pulse: "pulse var(--karni-duration-pulse, 2s) cubic-bezier(0.4, 0, 0.6, 1) infinite",
176
+ spin: "spin var(--karni-duration-spin, 1s) linear infinite"
177
+ }
178
+ } }
63
179
  };
64
- //# sourceMappingURL=tailwind-preset.js.map
180
+ //#endregion
181
+ export { t as SPACE_STEPS, a as default };
182
+
183
+ //# sourceMappingURL=tailwind-preset.js.map