@kanzo-tech/ui 0.11.0 → 0.13.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 (104) hide show
  1. package/dist/analytics.d.ts +1 -0
  2. package/dist/analytics.d.ts.map +1 -1
  3. package/dist/charts/chart-inputs.d.ts +6 -5
  4. package/dist/charts/chart-inputs.d.ts.map +1 -1
  5. package/dist/charts/chart-inputs.js +78 -77
  6. package/dist/charts/chart-inputs.js.map +1 -1
  7. package/dist/charts/chart-marks.d.ts +2 -1
  8. package/dist/charts/chart-marks.d.ts.map +1 -1
  9. package/dist/charts/chart-marks.js.map +1 -1
  10. package/dist/charts/chart-root.d.ts +8 -3
  11. package/dist/charts/chart-root.d.ts.map +1 -1
  12. package/dist/charts/chart-root.js +60 -60
  13. package/dist/charts/chart-root.js.map +1 -1
  14. package/dist/charts/chart-spec.d.ts +11 -4
  15. package/dist/charts/chart-spec.d.ts.map +1 -1
  16. package/dist/charts/chart-spec.js +44 -40
  17. package/dist/charts/chart-spec.js.map +1 -1
  18. package/dist/charts/chart-stat.d.ts +3 -2
  19. package/dist/charts/chart-stat.d.ts.map +1 -1
  20. package/dist/charts/chart-stat.js +10 -9
  21. package/dist/charts/chart-stat.js.map +1 -1
  22. package/dist/composites/language-picker.d.ts +51 -0
  23. package/dist/composites/language-picker.d.ts.map +1 -0
  24. package/dist/composites/language-picker.js +165 -0
  25. package/dist/composites/language-picker.js.map +1 -0
  26. package/dist/index.d.ts +8 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +687 -677
  29. package/dist/index.js.map +1 -1
  30. package/dist/lib/control-size.d.ts +26 -0
  31. package/dist/lib/control-size.d.ts.map +1 -0
  32. package/dist/lib/control-size.js +11 -0
  33. package/dist/lib/control-size.js.map +1 -0
  34. package/dist/lib/use-async-collection.d.ts +57 -0
  35. package/dist/lib/use-async-collection.d.ts.map +1 -0
  36. package/dist/lib/use-async-collection.js +43 -0
  37. package/dist/lib/use-async-collection.js.map +1 -0
  38. package/dist/lib/use-debounced-commit.d.ts +28 -0
  39. package/dist/lib/use-debounced-commit.d.ts.map +1 -0
  40. package/dist/lib/use-debounced-commit.js +26 -0
  41. package/dist/lib/use-debounced-commit.js.map +1 -0
  42. package/dist/shark-parity.divergences.d.ts.map +1 -1
  43. package/dist/simples/button.d.ts.map +1 -1
  44. package/dist/simples/button.js +34 -33
  45. package/dist/simples/button.js.map +1 -1
  46. package/dist/simples/checkbox.d.ts.map +1 -1
  47. package/dist/simples/checkbox.js +42 -42
  48. package/dist/simples/checkbox.js.map +1 -1
  49. package/dist/simples/combobox.d.ts.map +1 -1
  50. package/dist/simples/combobox.js +48 -49
  51. package/dist/simples/combobox.js.map +1 -1
  52. package/dist/simples/date-picker.d.ts +58 -2
  53. package/dist/simples/date-picker.d.ts.map +1 -1
  54. package/dist/simples/date-picker.js +210 -73
  55. package/dist/simples/date-picker.js.map +1 -1
  56. package/dist/simples/field.d.ts +35 -2
  57. package/dist/simples/field.d.ts.map +1 -1
  58. package/dist/simples/field.js +146 -116
  59. package/dist/simples/field.js.map +1 -1
  60. package/dist/simples/input-group.d.ts +9 -9
  61. package/dist/simples/input-group.d.ts.map +1 -1
  62. package/dist/simples/input-group.js +68 -78
  63. package/dist/simples/input-group.js.map +1 -1
  64. package/dist/simples/input.d.ts +9 -9
  65. package/dist/simples/input.d.ts.map +1 -1
  66. package/dist/simples/input.js +13 -14
  67. package/dist/simples/input.js.map +1 -1
  68. package/dist/simples/locale.d.ts +4 -0
  69. package/dist/simples/locale.d.ts.map +1 -0
  70. package/dist/simples/locale.js +8 -0
  71. package/dist/simples/locale.js.map +1 -0
  72. package/dist/simples/native-select.d.ts +9 -9
  73. package/dist/simples/native-select.d.ts.map +1 -1
  74. package/dist/simples/native-select.js +29 -28
  75. package/dist/simples/native-select.js.map +1 -1
  76. package/dist/simples/number-input.d.ts +9 -9
  77. package/dist/simples/number-input.d.ts.map +1 -1
  78. package/dist/simples/number-input.js +27 -27
  79. package/dist/simples/number-input.js.map +1 -1
  80. package/dist/simples/password-input.d.ts.map +1 -1
  81. package/dist/simples/password-input.js +24 -20
  82. package/dist/simples/password-input.js.map +1 -1
  83. package/dist/simples/pin-input.d.ts +9 -9
  84. package/dist/simples/pin-input.d.ts.map +1 -1
  85. package/dist/simples/pin-input.js +30 -29
  86. package/dist/simples/pin-input.js.map +1 -1
  87. package/dist/simples/radio-group.d.ts.map +1 -1
  88. package/dist/simples/radio-group.js +44 -43
  89. package/dist/simples/radio-group.js.map +1 -1
  90. package/dist/simples/segment-group.d.ts +8 -0
  91. package/dist/simples/segment-group.d.ts.map +1 -1
  92. package/dist/simples/segment-group.js +66 -52
  93. package/dist/simples/segment-group.js.map +1 -1
  94. package/dist/simples/switch.d.ts.map +1 -1
  95. package/dist/simples/switch.js +18 -12
  96. package/dist/simples/switch.js.map +1 -1
  97. package/dist/simples/tags-input.d.ts.map +1 -1
  98. package/dist/simples/tags-input.js +44 -39
  99. package/dist/simples/tags-input.js.map +1 -1
  100. package/dist/simples/toggle.d.ts +9 -9
  101. package/dist/simples/toggle.d.ts.map +1 -1
  102. package/dist/simples/toggle.js +24 -23
  103. package/dist/simples/toggle.js.map +1 -1
  104. package/package.json +5 -5
@@ -1,10 +1,11 @@
1
1
  import { jsx as a } from "react/jsx-runtime";
2
- import { TagsInput as r, useTagsInput as l, useTagsInputContext as u } from "@ark-ui/react/tags-input";
3
- import { XIcon as d } from "lucide-react";
4
- import { tv as c } from "tailwind-variants";
2
+ import { TagsInput as r, useTagsInput as u, useTagsInputContext as c } from "@ark-ui/react/tags-input";
3
+ import { XIcon as l } from "lucide-react";
4
+ import { tv as p } from "tailwind-variants";
5
5
  import { cn as i } from "../lib/cn.js";
6
- import { FieldLabel as g } from "./field.js";
7
- const b = l, T = u, N = r.Context, w = (e) => {
6
+ import { controlSizes as d, controlMinHeight as g } from "../lib/control-size.js";
7
+ import { FieldLabel as m } from "./field.js";
8
+ const y = u, w = c, z = r.Context, C = (e) => {
8
9
  const { className: t, children: s, slot: n, ...o } = e;
9
10
  return /* @__PURE__ */ a(
10
11
  r.Root,
@@ -19,7 +20,7 @@ const b = l, T = u, N = r.Context, w = (e) => {
19
20
  children: s
20
21
  }
21
22
  );
22
- }, y = (e) => {
23
+ }, k = (e) => {
23
24
  const { className: t, slot: s, ...n } = e;
24
25
  return /* @__PURE__ */ a(
25
26
  r.RootProvider,
@@ -33,13 +34,14 @@ const b = l, T = u, N = r.Context, w = (e) => {
33
34
  "data-slot": s ?? "tags-input-root-provider"
34
35
  }
35
36
  );
36
- }, C = (e) => {
37
+ }, P = (e) => {
37
38
  const { children: t, slot: s, ...n } = e;
38
- return /* @__PURE__ */ a(g, { asChild: !0, children: /* @__PURE__ */ a(r.Label, { ...n, "data-slot": s ?? "tags-input-label", children: t }) });
39
- }, p = c({
39
+ return /* @__PURE__ */ a(m, { asChild: !0, children: /* @__PURE__ */ a(r.Label, { ...n, "data-slot": s ?? "tags-input-label", children: t }) });
40
+ }, x = p({
40
41
  base: [
41
42
  "group/tags-input-control",
42
43
  "relative",
44
+ g,
43
45
  "w-full min-w-0",
44
46
  "flex flex-wrap items-center gap-1.5",
45
47
  "bg-background bg-field",
@@ -54,26 +56,29 @@ const b = l, T = u, N = r.Context, w = (e) => {
54
56
  ],
55
57
  variants: {
56
58
  size: {
57
- sm: ["min-h-7", "p-1"],
58
- md: ["min-h-8", "p-1.5"],
59
- lg: ["min-h-9", "p-1.5"]
59
+ // The vertical padding is what is left of the shared height around a 24px tag, so one tag
60
+ // in an otherwise empty control is exactly the height of an `Input` at the same size, and a
61
+ // second row grows it. `p-1.5` here made the one-tag control 38px against an input's 32.
62
+ sm: [d.sm, "px-1 py-0"],
63
+ md: [d.md, "px-1 py-0.5"],
64
+ lg: [d.lg, "px-1 py-1"]
60
65
  }
61
66
  },
62
67
  defaultVariants: {
63
68
  size: "md"
64
69
  }
65
- }), z = (e) => {
70
+ }), _ = (e) => {
66
71
  const { size: t = "md", className: s, slot: n, ...o } = e;
67
72
  return /* @__PURE__ */ a(
68
73
  r.Control,
69
74
  {
70
- className: i(p({ size: t }), s),
75
+ className: i(x({ size: t }), s),
71
76
  "data-size": t,
72
77
  ...o,
73
78
  "data-slot": n ?? "tags-input-control"
74
79
  }
75
80
  );
76
- }, k = (e) => {
81
+ }, j = (e) => {
77
82
  const { className: t, slot: s, ...n } = e;
78
83
  return /* @__PURE__ */ a(
79
84
  r.Input,
@@ -92,7 +97,7 @@ const b = l, T = u, N = r.Context, w = (e) => {
92
97
  "data-slot": s ?? "tags-input-input"
93
98
  }
94
99
  );
95
- }, P = (e) => {
100
+ }, H = (e) => {
96
101
  const { className: t, slot: s, ...n } = e;
97
102
  return /* @__PURE__ */ a(
98
103
  r.Item,
@@ -106,7 +111,7 @@ const b = l, T = u, N = r.Context, w = (e) => {
106
111
  "data-slot": s ?? "tags-input-item"
107
112
  }
108
113
  );
109
- }, _ = (e) => {
114
+ }, L = (e) => {
110
115
  const { className: t, slot: s, ...n } = e;
111
116
  return /* @__PURE__ */ a(
112
117
  r.ItemPreview,
@@ -126,7 +131,7 @@ const b = l, T = u, N = r.Context, w = (e) => {
126
131
  "data-slot": s ?? "tags-input-item-preview"
127
132
  }
128
133
  );
129
- }, j = (e) => {
134
+ }, R = (e) => {
130
135
  const { className: t, slot: s, ...n } = e;
131
136
  return /* @__PURE__ */ a(
132
137
  r.ItemText,
@@ -136,7 +141,7 @@ const b = l, T = u, N = r.Context, w = (e) => {
136
141
  "data-slot": s ?? "tags-input-item-text"
137
142
  }
138
143
  );
139
- }, L = (e) => {
144
+ }, $ = (e) => {
140
145
  const { className: t, slot: s, ...n } = e;
141
146
  return /* @__PURE__ */ a(
142
147
  r.ItemInput,
@@ -153,7 +158,7 @@ const b = l, T = u, N = r.Context, w = (e) => {
153
158
  "data-slot": s ?? "tags-input-item-input"
154
159
  }
155
160
  );
156
- }, R = (e) => {
161
+ }, D = (e) => {
157
162
  const { className: t, children: s, slot: n, ...o } = e;
158
163
  return /* @__PURE__ */ a(
159
164
  r.ItemDeleteTrigger,
@@ -172,10 +177,10 @@ const b = l, T = u, N = r.Context, w = (e) => {
172
177
  ),
173
178
  ...o,
174
179
  "data-slot": n ?? "tags-input-item-delete-trigger",
175
- children: s ?? /* @__PURE__ */ a(d, { "aria-hidden": !0 })
180
+ children: s ?? /* @__PURE__ */ a(l, { "aria-hidden": !0 })
176
181
  }
177
182
  );
178
- }, $ = (e) => {
183
+ }, V = (e) => {
179
184
  const { className: t, children: s, slot: n, ...o } = e;
180
185
  return /* @__PURE__ */ a(
181
186
  r.ClearTrigger,
@@ -195,10 +200,10 @@ const b = l, T = u, N = r.Context, w = (e) => {
195
200
  ),
196
201
  ...o,
197
202
  "data-slot": n ?? "tags-input-clear-trigger",
198
- children: s ?? /* @__PURE__ */ a(d, { "aria-hidden": !0 })
203
+ children: s ?? /* @__PURE__ */ a(l, { "aria-hidden": !0 })
199
204
  }
200
205
  );
201
- }, D = ({
206
+ }, F = ({
202
207
  slot: e,
203
208
  ...t
204
209
  }) => /* @__PURE__ */ a(
@@ -209,20 +214,20 @@ const b = l, T = u, N = r.Context, w = (e) => {
209
214
  }
210
215
  );
211
216
  export {
212
- w as TagsInput,
213
- $ as TagsInputClearTrigger,
214
- N as TagsInputContext,
215
- z as TagsInputControl,
216
- D as TagsInputHiddenInput,
217
- k as TagsInputInput,
218
- P as TagsInputItem,
219
- R as TagsInputItemDeleteTrigger,
220
- L as TagsInputItemInput,
221
- _ as TagsInputItemPreview,
222
- j as TagsInputItemText,
223
- C as TagsInputLabel,
224
- y as TagsInputRootProvider,
225
- b as useTagsInput,
226
- T as useTagsInputContext
217
+ C as TagsInput,
218
+ V as TagsInputClearTrigger,
219
+ z as TagsInputContext,
220
+ _ as TagsInputControl,
221
+ F as TagsInputHiddenInput,
222
+ j as TagsInputInput,
223
+ H as TagsInputItem,
224
+ D as TagsInputItemDeleteTrigger,
225
+ $ as TagsInputItemInput,
226
+ L as TagsInputItemPreview,
227
+ R as TagsInputItemText,
228
+ P as TagsInputLabel,
229
+ k as TagsInputRootProvider,
230
+ y as useTagsInput,
231
+ w as useTagsInputContext
227
232
  };
228
233
  //# sourceMappingURL=tags-input.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tags-input.js","sources":["../../src/simples/tags-input.tsx"],"sourcesContent":["import {\n TagsInput as ArkTagsInput,\n useTagsInput as useArkTagsInput,\n useTagsInputContext as useArkTagsInputContext,\n} from \"@ark-ui/react/tags-input\";\nimport { XIcon } from \"lucide-react\";\nimport type React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"../lib/cn\";\nimport { FieldLabel } from \"./field\";\n\n/**\n * The only place the plain name is a CHOICE, and it goes to the machine hook.\n *\n * Thirty-six components here write `export const useX = useXContext`, and so does Shark in fifty of\n * its ninety-five — `accordion.tsx` is our line character for character. `tags-input` is where Shark\n * ships both, because {@link TagsInputRootProvider} needs a machine to be handed, and a compound\n * that offers a controlled root has two hooks to name rather than one. So the plain name goes to the\n * machine and the context hook takes the suffix, here as there.\n *\n * `useHighlight` is also a machine hook and is not the same case: Ark's `highlight` module exports\n * no context hook at all, so there was nothing to choose between. Here both exist.\n *\n * If you are reaching for the value, the items or `clearAll` from inside the compound, that is\n * {@link useTagsInputContext}.\n */\nexport const useTagsInput = useArkTagsInput;\n\n/** The context hook — what `useX` is everywhere else in this library. */\nexport const useTagsInputContext = useArkTagsInputContext;\n\n// Render-prop context used to map the machine's value into styled items.\nexport const TagsInputContext = ArkTagsInput.Context;\n\nexport const TagsInput = (\n props: React.ComponentProps<typeof ArkTagsInput.Root>\n) => {\n const { className, children, slot, ...rest } = props;\n\n return (\n <ArkTagsInput.Root\n className={cn(\n \"flex flex-col gap-2\",\n \"data-invalid:text-destructive dark:data-invalid:text-destructive-foreground\",\n className\n )}\n {...rest}\n data-slot={slot ?? \"tags-input\"}\n >\n {children}\n </ArkTagsInput.Root>\n );\n};\n\n/**\n * The controlled root: build the machine with {@link useTagsInput} and pass it as `value`.\n *\n * The same shape as `FileUploadRootProvider`, and for the same reason — a surface outside the\n * compound that has to drive it. It is also why this file names two hooks where the rest of the\n * library names one.\n */\nexport const TagsInputRootProvider = (\n props: React.ComponentProps<typeof ArkTagsInput.RootProvider>\n) => {\n const { className, slot, ...rest } = props;\n\n return (\n <ArkTagsInput.RootProvider\n className={cn(\n \"flex flex-col gap-2\",\n \"data-invalid:text-destructive dark:data-invalid:text-destructive-foreground\",\n className\n )}\n {...rest}\n data-slot={slot ?? \"tags-input-root-provider\"}\n />\n );\n};\n\nexport const TagsInputLabel = (\n props: React.ComponentProps<typeof ArkTagsInput.Label>\n) => {\n const { children, slot, ...rest } = props;\n\n return (\n <FieldLabel asChild>\n <ArkTagsInput.Label {...rest} data-slot={slot ?? \"tags-input-label\"}>\n {children}\n </ArkTagsInput.Label>\n </FieldLabel>\n );\n};\n\nconst tagsInputControlVariants = tv({\n base: [\n \"group/tags-input-control\",\n \"relative\",\n \"w-full min-w-0\",\n \"flex flex-wrap items-center gap-1.5\",\n \"bg-background bg-field\",\n \"rounded-field border border-input shadow-xs/5\",\n \"transition-[color,box-shadow]\",\n \"outline-none\",\n \"focus-within:border-primary focus-within:ring-[3px] focus-within:ring-ring\",\n \"data-focus:border-primary data-focus:ring-[3px] data-focus:ring-ring\",\n \"data-invalid:border-destructive data-invalid:ring-[3px] data-invalid:ring-destructive/24\",\n \"data-disabled:pointer-events-none data-disabled:opacity-64\",\n \"motion-reduce:transition-none!\",\n ],\n variants: {\n size: {\n sm: [\"min-h-7\", \"p-1\"],\n md: [\"min-h-8\", \"p-1.5\"],\n lg: [\"min-h-9\", \"p-1.5\"],\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nexport interface TagsInputControlProps\n extends React.ComponentProps<typeof ArkTagsInput.Control>,\n VariantProps<typeof tagsInputControlVariants> {}\n\nexport const TagsInputControl = (props: TagsInputControlProps) => {\n const { size = \"md\", className, slot, ...rest } = props;\n\n return (\n <ArkTagsInput.Control\n className={cn(tagsInputControlVariants({ size }), className)}\n data-size={size}\n {...rest}\n data-slot={slot ?? \"tags-input-control\"}\n />\n );\n};\n\nexport const TagsInputInput = (\n props: React.ComponentProps<typeof ArkTagsInput.Input>\n) => {\n const { className, slot, ...rest } = props;\n\n return (\n <ArkTagsInput.Input\n className={cn(\n \"h-6 flex-1 min-w-16\",\n \"ps-1.5 pe-1\",\n \"bg-transparent\",\n \"text-base md:text-sm\",\n \"outline-none\",\n \"placeholder:text-faint\",\n \"disabled:pointer-events-none\",\n className\n )}\n {...rest}\n data-slot={slot ?? \"tags-input-input\"}\n />\n );\n};\n\nexport const TagsInputItem = (\n props: React.ComponentProps<typeof ArkTagsInput.Item>\n) => {\n const { className, slot, ...rest } = props;\n\n return (\n <ArkTagsInput.Item\n className={cn(\n \"inline-flex items-center\",\n \"data-disabled:opacity-64\",\n className\n )}\n {...rest}\n data-slot={slot ?? \"tags-input-item\"}\n />\n );\n};\n\nexport const TagsInputItemPreview = (\n props: React.ComponentProps<typeof ArkTagsInput.ItemPreview>\n) => {\n const { className, slot, ...rest } = props;\n\n return (\n <ArkTagsInput.ItemPreview\n className={cn(\n \"inline-flex items-center gap-1\",\n \"h-6\",\n \"ps-2 pe-1\",\n \"select-none whitespace-nowrap font-medium text-xs\",\n \"rounded-md border border-secondary/20\",\n \"bg-secondary text-secondary-foreground\",\n \"data-highlighted:border-primary data-highlighted:ring-[3px] data-highlighted:ring-ring\",\n \"data-disabled:opacity-64\",\n className\n )}\n {...rest}\n data-slot={slot ?? \"tags-input-item-preview\"}\n />\n );\n};\n\nexport const TagsInputItemText = (\n props: React.ComponentProps<typeof ArkTagsInput.ItemText>\n) => {\n const { className, slot, ...rest } = props;\n\n return (\n <ArkTagsInput.ItemText\n className={cn(\"px-0.5\", className)}\n {...rest}\n data-slot={slot ?? \"tags-input-item-text\"}\n />\n );\n};\n\nexport const TagsInputItemInput = (\n props: React.ComponentProps<typeof ArkTagsInput.ItemInput>\n) => {\n const { className, slot, ...rest } = props;\n\n return (\n <ArkTagsInput.ItemInput\n className={cn(\n \"h-6 min-w-16\",\n \"px-1\",\n \"bg-transparent\",\n \"text-xs\",\n \"outline-none\",\n className\n )}\n {...rest}\n data-slot={slot ?? \"tags-input-item-input\"}\n />\n );\n};\n\nexport const TagsInputItemDeleteTrigger = (\n props: React.ComponentProps<typeof ArkTagsInput.ItemDeleteTrigger>\n) => {\n const { className, children, slot, ...rest } = props;\n\n return (\n <ArkTagsInput.ItemDeleteTrigger\n className={cn(\n \"inline-flex items-center justify-center shrink-0\",\n \"size-4\",\n \"rounded-sm\",\n \"text-secondary-foreground/64\",\n \"transition-colors\",\n \"outline-none\",\n \"hover:text-secondary-foreground\",\n \"focus-visible:ring-[3px] focus-visible:ring-ring\",\n \"[&_svg:not([class*='size-'])]:size-3 [&_svg]:pointer-events-none\",\n className\n )}\n {...rest}\n data-slot={slot ?? \"tags-input-item-delete-trigger\"}\n >\n {children ?? <XIcon aria-hidden />}\n </ArkTagsInput.ItemDeleteTrigger>\n );\n};\n\nexport const TagsInputClearTrigger = (\n props: React.ComponentProps<typeof ArkTagsInput.ClearTrigger>\n) => {\n const { className, children, slot, ...rest } = props;\n\n return (\n <ArkTagsInput.ClearTrigger\n className={cn(\n \"inline-flex items-center justify-center shrink-0\",\n \"size-6\",\n \"rounded-md\",\n \"text-muted-foreground\",\n \"transition-colors\",\n \"outline-none\",\n \"hover:text-foreground\",\n \"focus-visible:ring-[3px] focus-visible:ring-ring\",\n \"data-disabled:pointer-events-none data-disabled:opacity-64\",\n \"[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none\",\n className\n )}\n {...rest}\n data-slot={slot ?? \"tags-input-clear-trigger\"}\n >\n {children ?? <XIcon aria-hidden />}\n </ArkTagsInput.ClearTrigger>\n );\n};\n\nexport const TagsInputHiddenInput = ({\n slot,\n ...rest\n}: React.ComponentProps<typeof ArkTagsInput.HiddenInput>) => (\n <ArkTagsInput.HiddenInput\n {...rest}\n data-slot={slot ?? \"tags-input-hidden-input\"}\n />\n);\n"],"names":["useTagsInput","useArkTagsInput","useTagsInputContext","useArkTagsInputContext","TagsInputContext","ArkTagsInput","TagsInput","props","className","children","slot","rest","jsx","cn","TagsInputRootProvider","TagsInputLabel","FieldLabel","tagsInputControlVariants","tv","TagsInputControl","size","TagsInputInput","TagsInputItem","TagsInputItemPreview","TagsInputItemText","TagsInputItemInput","TagsInputItemDeleteTrigger","XIcon","TagsInputClearTrigger","TagsInputHiddenInput"],"mappings":";;;;;;AA0BO,MAAMA,IAAeC,GAGfC,IAAsBC,GAGtBC,IAAmBC,EAAa,SAEhCC,IAAY,CACvBC,MACG;AACH,QAAM,EAAE,WAAAC,GAAW,UAAAC,GAAU,MAAAC,GAAM,GAAGC,MAASJ;AAE/C,SACE,gBAAAK;AAAA,IAACP,EAAa;AAAA,IAAb;AAAA,MACC,WAAWQ;AAAA,QACT;AAAA,QACA;AAAA,QACAL;AAAA,MAAA;AAAA,MAED,GAAGG;AAAA,MACJ,aAAWD,KAAQ;AAAA,MAElB,UAAAD;AAAA,IAAA;AAAA,EAAA;AAGP,GASaK,IAAwB,CACnCP,MACG;AACH,QAAM,EAAE,WAAAC,GAAW,MAAAE,GAAM,GAAGC,MAASJ;AAErC,SACE,gBAAAK;AAAA,IAACP,EAAa;AAAA,IAAb;AAAA,MACC,WAAWQ;AAAA,QACT;AAAA,QACA;AAAA,QACAL;AAAA,MAAA;AAAA,MAED,GAAGG;AAAA,MACJ,aAAWD,KAAQ;AAAA,IAAA;AAAA,EAAA;AAGzB,GAEaK,IAAiB,CAC5BR,MACG;AACH,QAAM,EAAE,UAAAE,GAAU,MAAAC,GAAM,GAAGC,MAASJ;AAEpC,SACE,gBAAAK,EAACI,GAAA,EAAW,SAAO,IACjB,4BAACX,EAAa,OAAb,EAAoB,GAAGM,GAAM,aAAWD,KAAQ,oBAC9C,UAAAD,GACH,GACF;AAEJ,GAEMQ,IAA2BC,EAAG;AAAA,EAClC,MAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI,CAAC,WAAW,KAAK;AAAA,MACrB,IAAI,CAAC,WAAW,OAAO;AAAA,MACvB,IAAI,CAAC,WAAW,OAAO;AAAA,IAAA;AAAA,EACzB;AAAA,EAEF,iBAAiB;AAAA,IACf,MAAM;AAAA,EAAA;AAEV,CAAC,GAMYC,IAAmB,CAACZ,MAAiC;AAChE,QAAM,EAAE,MAAAa,IAAO,MAAM,WAAAZ,GAAW,MAAAE,GAAM,GAAGC,MAASJ;AAElD,SACE,gBAAAK;AAAA,IAACP,EAAa;AAAA,IAAb;AAAA,MACC,WAAWQ,EAAGI,EAAyB,EAAE,MAAAG,EAAA,CAAM,GAAGZ,CAAS;AAAA,MAC3D,aAAWY;AAAA,MACV,GAAGT;AAAA,MACJ,aAAWD,KAAQ;AAAA,IAAA;AAAA,EAAA;AAGzB,GAEaW,IAAiB,CAC5Bd,MACG;AACH,QAAM,EAAE,WAAAC,GAAW,MAAAE,GAAM,GAAGC,MAASJ;AAErC,SACE,gBAAAK;AAAA,IAACP,EAAa;AAAA,IAAb;AAAA,MACC,WAAWQ;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MAAA;AAAA,MAED,GAAGG;AAAA,MACJ,aAAWD,KAAQ;AAAA,IAAA;AAAA,EAAA;AAGzB,GAEaY,IAAgB,CAC3Bf,MACG;AACH,QAAM,EAAE,WAAAC,GAAW,MAAAE,GAAM,GAAGC,MAASJ;AAErC,SACE,gBAAAK;AAAA,IAACP,EAAa;AAAA,IAAb;AAAA,MACC,WAAWQ;AAAA,QACT;AAAA,QACA;AAAA,QACAL;AAAA,MAAA;AAAA,MAED,GAAGG;AAAA,MACJ,aAAWD,KAAQ;AAAA,IAAA;AAAA,EAAA;AAGzB,GAEaa,IAAuB,CAClChB,MACG;AACH,QAAM,EAAE,WAAAC,GAAW,MAAAE,GAAM,GAAGC,MAASJ;AAErC,SACE,gBAAAK;AAAA,IAACP,EAAa;AAAA,IAAb;AAAA,MACC,WAAWQ;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MAAA;AAAA,MAED,GAAGG;AAAA,MACJ,aAAWD,KAAQ;AAAA,IAAA;AAAA,EAAA;AAGzB,GAEac,IAAoB,CAC/BjB,MACG;AACH,QAAM,EAAE,WAAAC,GAAW,MAAAE,GAAM,GAAGC,MAASJ;AAErC,SACE,gBAAAK;AAAA,IAACP,EAAa;AAAA,IAAb;AAAA,MACC,WAAWQ,EAAG,UAAUL,CAAS;AAAA,MAChC,GAAGG;AAAA,MACJ,aAAWD,KAAQ;AAAA,IAAA;AAAA,EAAA;AAGzB,GAEae,IAAqB,CAChClB,MACG;AACH,QAAM,EAAE,WAAAC,GAAW,MAAAE,GAAM,GAAGC,MAASJ;AAErC,SACE,gBAAAK;AAAA,IAACP,EAAa;AAAA,IAAb;AAAA,MACC,WAAWQ;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MAAA;AAAA,MAED,GAAGG;AAAA,MACJ,aAAWD,KAAQ;AAAA,IAAA;AAAA,EAAA;AAGzB,GAEagB,IAA6B,CACxCnB,MACG;AACH,QAAM,EAAE,WAAAC,GAAW,UAAAC,GAAU,MAAAC,GAAM,GAAGC,MAASJ;AAE/C,SACE,gBAAAK;AAAA,IAACP,EAAa;AAAA,IAAb;AAAA,MACC,WAAWQ;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MAAA;AAAA,MAED,GAAGG;AAAA,MACJ,aAAWD,KAAQ;AAAA,MAElB,UAAAD,KAAY,gBAAAG,EAACe,GAAA,EAAM,eAAW,GAAA,CAAC;AAAA,IAAA;AAAA,EAAA;AAGtC,GAEaC,IAAwB,CACnCrB,MACG;AACH,QAAM,EAAE,WAAAC,GAAW,UAAAC,GAAU,MAAAC,GAAM,GAAGC,MAASJ;AAE/C,SACE,gBAAAK;AAAA,IAACP,EAAa;AAAA,IAAb;AAAA,MACC,WAAWQ;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAL;AAAA,MAAA;AAAA,MAED,GAAGG;AAAA,MACJ,aAAWD,KAAQ;AAAA,MAElB,UAAAD,KAAY,gBAAAG,EAACe,GAAA,EAAM,eAAW,GAAA,CAAC;AAAA,IAAA;AAAA,EAAA;AAGtC,GAEaE,IAAuB,CAAC;AAAA,EACnC,MAAAnB;AAAA,EACA,GAAGC;AACL,MACE,gBAAAC;AAAA,EAACP,EAAa;AAAA,EAAb;AAAA,IACE,GAAGM;AAAA,IACJ,aAAWD,KAAQ;AAAA,EAAA;AACrB;"}
1
+ {"version":3,"file":"tags-input.js","sources":["../../src/simples/tags-input.tsx"],"sourcesContent":["import {\n TagsInput as ArkTagsInput,\n useTagsInput as useArkTagsInput,\n useTagsInputContext as useArkTagsInputContext,\n} from \"@ark-ui/react/tags-input\";\nimport { XIcon } from \"lucide-react\";\nimport type React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"../lib/cn\";\nimport { controlMinHeight, controlSizes } from \"../lib/control-size\";\nimport { FieldLabel } from \"./field\";\n\n/**\n * The only place the plain name is a CHOICE, and it goes to the machine hook.\n *\n * Thirty-six components here write `export const useX = useXContext`, and so does Shark in fifty of\n * its ninety-five — `accordion.tsx` is our line character for character. `tags-input` is where Shark\n * ships both, because {@link TagsInputRootProvider} needs a machine to be handed, and a compound\n * that offers a controlled root has two hooks to name rather than one. So the plain name goes to the\n * machine and the context hook takes the suffix, here as there.\n *\n * `useHighlight` is also a machine hook and is not the same case: Ark's `highlight` module exports\n * no context hook at all, so there was nothing to choose between. Here both exist.\n *\n * If you are reaching for the value, the items or `clearAll` from inside the compound, that is\n * {@link useTagsInputContext}.\n */\nexport const useTagsInput = useArkTagsInput;\n\n/** The context hook — what `useX` is everywhere else in this library. */\nexport const useTagsInputContext = useArkTagsInputContext;\n\n// Render-prop context used to map the machine's value into styled items.\nexport const TagsInputContext = ArkTagsInput.Context;\n\nexport const TagsInput = (\n props: React.ComponentProps<typeof ArkTagsInput.Root>\n) => {\n const { className, children, slot, ...rest } = props;\n\n return (\n <ArkTagsInput.Root\n className={cn(\n \"flex flex-col gap-2\",\n \"data-invalid:text-destructive dark:data-invalid:text-destructive-foreground\",\n className\n )}\n {...rest}\n data-slot={slot ?? \"tags-input\"}\n >\n {children}\n </ArkTagsInput.Root>\n );\n};\n\n/**\n * The controlled root: build the machine with {@link useTagsInput} and pass it as `value`.\n *\n * The same shape as `FileUploadRootProvider`, and for the same reason — a surface outside the\n * compound that has to drive it. It is also why this file names two hooks where the rest of the\n * library names one.\n */\nexport const TagsInputRootProvider = (\n props: React.ComponentProps<typeof ArkTagsInput.RootProvider>\n) => {\n const { className, slot, ...rest } = props;\n\n return (\n <ArkTagsInput.RootProvider\n className={cn(\n \"flex flex-col gap-2\",\n \"data-invalid:text-destructive dark:data-invalid:text-destructive-foreground\",\n className\n )}\n {...rest}\n data-slot={slot ?? \"tags-input-root-provider\"}\n />\n );\n};\n\nexport const TagsInputLabel = (\n props: React.ComponentProps<typeof ArkTagsInput.Label>\n) => {\n const { children, slot, ...rest } = props;\n\n return (\n <FieldLabel asChild>\n <ArkTagsInput.Label {...rest} data-slot={slot ?? \"tags-input-label\"}>\n {children}\n </ArkTagsInput.Label>\n </FieldLabel>\n );\n};\n\nconst tagsInputControlVariants = tv({\n base: [\n \"group/tags-input-control\",\n \"relative\",\n controlMinHeight,\n \"w-full min-w-0\",\n \"flex flex-wrap items-center gap-1.5\",\n \"bg-background bg-field\",\n \"rounded-field border border-input shadow-xs/5\",\n \"transition-[color,box-shadow]\",\n \"outline-none\",\n \"focus-within:border-primary focus-within:ring-[3px] focus-within:ring-ring\",\n \"data-focus:border-primary data-focus:ring-[3px] data-focus:ring-ring\",\n \"data-invalid:border-destructive data-invalid:ring-[3px] data-invalid:ring-destructive/24\",\n \"data-disabled:pointer-events-none data-disabled:opacity-64\",\n \"motion-reduce:transition-none!\",\n ],\n variants: {\n size: {\n // The vertical padding is what is left of the shared height around a 24px tag, so one tag\n // in an otherwise empty control is exactly the height of an `Input` at the same size, and a\n // second row grows it. `p-1.5` here made the one-tag control 38px against an input's 32.\n sm: [controlSizes.sm, \"px-1 py-0\"],\n md: [controlSizes.md, \"px-1 py-0.5\"],\n lg: [controlSizes.lg, \"px-1 py-1\"],\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nexport interface TagsInputControlProps\n extends React.ComponentProps<typeof ArkTagsInput.Control>,\n VariantProps<typeof tagsInputControlVariants> {}\n\nexport const TagsInputControl = (props: TagsInputControlProps) => {\n const { size = \"md\", className, slot, ...rest } = props;\n\n return (\n <ArkTagsInput.Control\n className={cn(tagsInputControlVariants({ size }), className)}\n data-size={size}\n {...rest}\n data-slot={slot ?? \"tags-input-control\"}\n />\n );\n};\n\nexport const TagsInputInput = (\n props: React.ComponentProps<typeof ArkTagsInput.Input>\n) => {\n const { className, slot, ...rest } = props;\n\n return (\n <ArkTagsInput.Input\n className={cn(\n \"h-6 flex-1 min-w-16\",\n \"ps-1.5 pe-1\",\n \"bg-transparent\",\n \"text-base md:text-sm\",\n \"outline-none\",\n \"placeholder:text-faint\",\n \"disabled:pointer-events-none\",\n className\n )}\n {...rest}\n data-slot={slot ?? \"tags-input-input\"}\n />\n );\n};\n\nexport const TagsInputItem = (\n props: React.ComponentProps<typeof ArkTagsInput.Item>\n) => {\n const { className, slot, ...rest } = props;\n\n return (\n <ArkTagsInput.Item\n className={cn(\n \"inline-flex items-center\",\n \"data-disabled:opacity-64\",\n className\n )}\n {...rest}\n data-slot={slot ?? \"tags-input-item\"}\n />\n );\n};\n\nexport const TagsInputItemPreview = (\n props: React.ComponentProps<typeof ArkTagsInput.ItemPreview>\n) => {\n const { className, slot, ...rest } = props;\n\n return (\n <ArkTagsInput.ItemPreview\n className={cn(\n \"inline-flex items-center gap-1\",\n \"h-6\",\n \"ps-2 pe-1\",\n \"select-none whitespace-nowrap font-medium text-xs\",\n \"rounded-md border border-secondary/20\",\n \"bg-secondary text-secondary-foreground\",\n \"data-highlighted:border-primary data-highlighted:ring-[3px] data-highlighted:ring-ring\",\n \"data-disabled:opacity-64\",\n className\n )}\n {...rest}\n data-slot={slot ?? \"tags-input-item-preview\"}\n />\n );\n};\n\nexport const TagsInputItemText = (\n props: React.ComponentProps<typeof ArkTagsInput.ItemText>\n) => {\n const { className, slot, ...rest } = props;\n\n return (\n <ArkTagsInput.ItemText\n className={cn(\"px-0.5\", className)}\n {...rest}\n data-slot={slot ?? \"tags-input-item-text\"}\n />\n );\n};\n\nexport const TagsInputItemInput = (\n props: React.ComponentProps<typeof ArkTagsInput.ItemInput>\n) => {\n const { className, slot, ...rest } = props;\n\n return (\n <ArkTagsInput.ItemInput\n className={cn(\n \"h-6 min-w-16\",\n \"px-1\",\n \"bg-transparent\",\n \"text-xs\",\n \"outline-none\",\n className\n )}\n {...rest}\n data-slot={slot ?? \"tags-input-item-input\"}\n />\n );\n};\n\nexport const TagsInputItemDeleteTrigger = (\n props: React.ComponentProps<typeof ArkTagsInput.ItemDeleteTrigger>\n) => {\n const { className, children, slot, ...rest } = props;\n\n return (\n <ArkTagsInput.ItemDeleteTrigger\n className={cn(\n \"inline-flex items-center justify-center shrink-0\",\n \"size-4\",\n \"rounded-sm\",\n \"text-secondary-foreground/64\",\n \"transition-colors\",\n \"outline-none\",\n \"hover:text-secondary-foreground\",\n \"focus-visible:ring-[3px] focus-visible:ring-ring\",\n \"[&_svg:not([class*='size-'])]:size-3 [&_svg]:pointer-events-none\",\n className\n )}\n {...rest}\n data-slot={slot ?? \"tags-input-item-delete-trigger\"}\n >\n {children ?? <XIcon aria-hidden />}\n </ArkTagsInput.ItemDeleteTrigger>\n );\n};\n\nexport const TagsInputClearTrigger = (\n props: React.ComponentProps<typeof ArkTagsInput.ClearTrigger>\n) => {\n const { className, children, slot, ...rest } = props;\n\n return (\n <ArkTagsInput.ClearTrigger\n className={cn(\n \"inline-flex items-center justify-center shrink-0\",\n \"size-6\",\n \"rounded-md\",\n \"text-muted-foreground\",\n \"transition-colors\",\n \"outline-none\",\n \"hover:text-foreground\",\n \"focus-visible:ring-[3px] focus-visible:ring-ring\",\n \"data-disabled:pointer-events-none data-disabled:opacity-64\",\n \"[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none\",\n className\n )}\n {...rest}\n data-slot={slot ?? \"tags-input-clear-trigger\"}\n >\n {children ?? <XIcon aria-hidden />}\n </ArkTagsInput.ClearTrigger>\n );\n};\n\nexport const TagsInputHiddenInput = ({\n slot,\n ...rest\n}: React.ComponentProps<typeof ArkTagsInput.HiddenInput>) => (\n <ArkTagsInput.HiddenInput\n {...rest}\n data-slot={slot ?? \"tags-input-hidden-input\"}\n />\n);\n"],"names":["useTagsInput","useArkTagsInput","useTagsInputContext","useArkTagsInputContext","TagsInputContext","ArkTagsInput","TagsInput","props","className","children","slot","rest","jsx","cn","TagsInputRootProvider","TagsInputLabel","FieldLabel","tagsInputControlVariants","tv","controlMinHeight","controlSizes","TagsInputControl","size","TagsInputInput","TagsInputItem","TagsInputItemPreview","TagsInputItemText","TagsInputItemInput","TagsInputItemDeleteTrigger","XIcon","TagsInputClearTrigger","TagsInputHiddenInput"],"mappings":"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"}
@@ -5,21 +5,21 @@ import { buttonVariants } from './button';
5
5
  export declare const useToggle: () => import('@ark-ui/react').UseToggleContext;
6
6
  export declare const toggleVariants: import('tailwind-variants').TVReturnType<{
7
7
  size: {
8
- sm: string;
9
- md: string;
10
- lg: string;
8
+ sm: string[];
9
+ md: string[];
10
+ lg: string[];
11
11
  };
12
12
  }, undefined, string[], {
13
13
  size: {
14
- sm: string;
15
- md: string;
16
- lg: string;
14
+ sm: string[];
15
+ md: string[];
16
+ lg: string[];
17
17
  };
18
18
  }, undefined, import('tailwind-variants').TVReturnType<{
19
19
  size: {
20
- sm: string;
21
- md: string;
22
- lg: string;
20
+ sm: string[];
21
+ md: string[];
22
+ lg: string[];
23
23
  };
24
24
  }, undefined, string[], unknown, unknown, undefined>>;
25
25
  export interface ToggleProps extends React.ComponentProps<typeof ArkToggle.Root>, VariantProps<typeof toggleVariants> {
@@ -1 +1 @@
1
- {"version":3,"file":"toggle.d.ts","sourceRoot":"","sources":["../../src/simples/toggle.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,SAAS,EAAoB,MAAM,sBAAsB,CAAC;AAC7E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,eAAO,MAAM,SAAS,gDAAmB,CAAC;AAE1C,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;qDAmBzB,CAAC;AAEH,MAAM,WAAW,WACf,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,IAAI,CAAC,EACjD,YAAY,CAAC,OAAO,cAAc,CAAC;IACrC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CACf,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC,SAAS,CAAC,EAC9C,SAAS,GAAG,OAAO,CACpB,CAAC;CACH;AAED,eAAO,MAAM,MAAM,GAAI,OAAO,WAAW,sBAcxC,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,OAAO,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,SAAS,CAAC,sBAaxD,CAAC"}
1
+ {"version":3,"file":"toggle.d.ts","sourceRoot":"","sources":["../../src/simples/toggle.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,SAAS,EAAoB,MAAM,sBAAsB,CAAC;AAC7E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAM,KAAK,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAG1D,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,eAAO,MAAM,SAAS,gDAAmB,CAAC;AAE1C,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;qDAmBzB,CAAC;AAEH,MAAM,WAAW,WACf,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,IAAI,CAAC,EACjD,YAAY,CAAC,OAAO,cAAc,CAAC;IACrC;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CACf,YAAY,CAAC,OAAO,cAAc,CAAC,CAAC,SAAS,CAAC,EAC9C,SAAS,GAAG,OAAO,CACpB,CAAC;CACH;AAED,eAAO,MAAM,MAAM,GAAI,OAAO,WAAW,sBAcxC,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,OAAO,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,SAAS,CAAC,sBAaxD,CAAC"}
@@ -1,9 +1,10 @@
1
1
  import { jsx as a } from "react/jsx-runtime";
2
- import { useToggleContext as l, Toggle as s } from "@ark-ui/react/toggle";
2
+ import { useToggleContext as m, Toggle as i } from "@ark-ui/react/toggle";
3
3
  import { tv as g } from "tailwind-variants";
4
- import { cn as m } from "../lib/cn.js";
5
- import { buttonVariants as c } from "./button.js";
6
- const T = l, f = g({
4
+ import { cn as c } from "../lib/cn.js";
5
+ import { controlSizes as r } from "../lib/control-size.js";
6
+ import { buttonVariants as f } from "./button.js";
7
+ const v = m, p = g({
7
8
  base: [
8
9
  "relative",
9
10
  // The pressed state is the ACTIVE level (step 5), painted as a wash because a toggle is
@@ -14,44 +15,44 @@ const T = l, f = g({
14
15
  ],
15
16
  variants: {
16
17
  size: {
17
- sm: "h-7 min-w-7 px-1.5",
18
- md: "h-8 min-w-8 px-2",
19
- lg: "h-9 min-w-9 px-2.5"
18
+ sm: [r.sm, "min-w-(--size) px-1.5"],
19
+ md: [r.md, "min-w-(--size) px-2"],
20
+ lg: [r.lg, "min-w-(--size) px-2.5"]
20
21
  }
21
22
  },
22
23
  defaultVariants: {
23
24
  size: "md"
24
25
  }
25
- }), b = (t) => {
26
- const { variant: e = "ghost", size: o = "md", className: r, slot: n, ...i } = t;
26
+ }), w = (t) => {
27
+ const { variant: e = "ghost", size: o = "md", className: s, slot: n, ...l } = t;
27
28
  return /* @__PURE__ */ a(
28
- s.Root,
29
+ i.Root,
29
30
  {
30
- className: m(
31
- c({ variant: e, clickEffect: !1 }),
32
- f({ size: o }),
33
- r
31
+ className: c(
32
+ f({ variant: e, clickEffect: !1 }),
33
+ p({ size: o }),
34
+ s
34
35
  ),
35
- ...i,
36
+ ...l,
36
37
  "data-slot": n ?? "toggle"
37
38
  }
38
39
  );
39
- }, v = (t) => {
40
- const { children: e, slot: o, ...r } = t;
40
+ }, h = (t) => {
41
+ const { children: e, slot: o, ...s } = t;
41
42
  return /* @__PURE__ */ a(
42
- s.Indicator,
43
+ i.Indicator,
43
44
  {
44
45
  className: "flex items-center gap-2",
45
- ...r,
46
+ ...s,
46
47
  "data-slot": o ?? "toggle-indicator",
47
48
  children: e
48
49
  }
49
50
  );
50
51
  };
51
52
  export {
52
- b as Toggle,
53
- v as ToggleIndicator,
54
- f as toggleVariants,
55
- T as useToggle
53
+ w as Toggle,
54
+ h as ToggleIndicator,
55
+ p as toggleVariants,
56
+ v as useToggle
56
57
  };
57
58
  //# sourceMappingURL=toggle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"toggle.js","sources":["../../src/simples/toggle.tsx"],"sourcesContent":["import { Toggle as ArkToggle, useToggleContext } from \"@ark-ui/react/toggle\";\nimport type React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"../lib/cn\";\nimport { buttonVariants } from \"./button\";\n\nexport const useToggle = useToggleContext;\n\nexport const toggleVariants = tv({\n base: [\n \"relative\",\n // The pressed state is the ACTIVE level (step 5), painted as a wash because a toggle is\n // dropped into toolbars, cards and popovers alike. `bg-field` recedes to the page in dark, so\n // \"on\" and \"off\" were about to become the same colour there.\n \"data-[state=on]:bg-foreground/17\",\n \"pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11\",\n ],\n variants: {\n size: {\n sm: \"h-7 min-w-7 px-1.5\",\n md: \"h-8 min-w-8 px-2\",\n lg: \"h-9 min-w-9 px-2.5\",\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nexport interface ToggleProps\n extends React.ComponentProps<typeof ArkToggle.Root>,\n VariantProps<typeof toggleVariants> {\n /**\n * The variant of the toggle\n *\n * @default \"outline\"\n */\n variant?: Extract<\n VariantProps<typeof buttonVariants>[\"variant\"],\n \"outline\" | \"ghost\"\n >;\n}\n\nexport const Toggle = (props: ToggleProps) => {\n const { variant = \"ghost\", size = \"md\", className, slot, ...rest } = props;\n\n return (\n <ArkToggle.Root\n className={cn(\n buttonVariants({ variant, clickEffect: false }),\n toggleVariants({ size }),\n className\n )}\n {...rest}\n data-slot={slot ?? \"toggle\"}\n />\n );\n};\n\nexport const ToggleIndicator = (\n props: React.ComponentProps<typeof ArkToggle.Indicator>\n) => {\n const { children, slot, ...rest } = props;\n\n return (\n <ArkToggle.Indicator\n className=\"flex items-center gap-2\"\n {...rest}\n data-slot={slot ?? \"toggle-indicator\"}\n >\n {children}\n </ArkToggle.Indicator>\n );\n};\n"],"names":["useToggle","useToggleContext","toggleVariants","tv","Toggle","props","variant","size","className","slot","rest","jsx","ArkToggle","cn","buttonVariants","ToggleIndicator","children"],"mappings":";;;;;AAMO,MAAMA,IAAYC,GAEZC,IAAiBC,EAAG;AAAA,EAC/B,MAAM;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA,IAIA;AAAA,IACA;AAAA,EAAA;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;AAAA,EACN;AAAA,EAEF,iBAAiB;AAAA,IACf,MAAM;AAAA,EAAA;AAEV,CAAC,GAgBYC,IAAS,CAACC,MAAuB;AAC5C,QAAM,EAAE,SAAAC,IAAU,SAAS,MAAAC,IAAO,MAAM,WAAAC,GAAW,MAAAC,GAAM,GAAGC,EAAA,IAASL;AAErE,SACE,gBAAAM;AAAA,IAACC,EAAU;AAAA,IAAV;AAAA,MACC,WAAWC;AAAA,QACTC,EAAe,EAAE,SAAAR,GAAS,aAAa,IAAO;AAAA,QAC9CJ,EAAe,EAAE,MAAAK,GAAM;AAAA,QACvBC;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,MACJ,aAAWD,KAAQ;AAAA,IAAA;AAAA,EAAA;AAGzB,GAEaM,IAAkB,CAC7BV,MACG;AACH,QAAM,EAAE,UAAAW,GAAU,MAAAP,GAAM,GAAGC,MAASL;AAEpC,SACE,gBAAAM;AAAA,IAACC,EAAU;AAAA,IAAV;AAAA,MACC,WAAU;AAAA,MACT,GAAGF;AAAA,MACJ,aAAWD,KAAQ;AAAA,MAElB,UAAAO;AAAA,IAAA;AAAA,EAAA;AAGP;"}
1
+ {"version":3,"file":"toggle.js","sources":["../../src/simples/toggle.tsx"],"sourcesContent":["import { Toggle as ArkToggle, useToggleContext } from \"@ark-ui/react/toggle\";\nimport type React from \"react\";\nimport { tv, type VariantProps } from \"tailwind-variants\";\nimport { cn } from \"../lib/cn\";\nimport { controlSizes } from \"../lib/control-size\";\nimport { buttonVariants } from \"./button\";\n\nexport const useToggle = useToggleContext;\n\nexport const toggleVariants = tv({\n base: [\n \"relative\",\n // The pressed state is the ACTIVE level (step 5), painted as a wash because a toggle is\n // dropped into toolbars, cards and popovers alike. `bg-field` recedes to the page in dark, so\n // \"on\" and \"off\" were about to become the same colour there.\n \"data-[state=on]:bg-foreground/17\",\n \"pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11\",\n ],\n variants: {\n size: {\n sm: [controlSizes.sm, \"min-w-(--size) px-1.5\"],\n md: [controlSizes.md, \"min-w-(--size) px-2\"],\n lg: [controlSizes.lg, \"min-w-(--size) px-2.5\"],\n },\n },\n defaultVariants: {\n size: \"md\",\n },\n});\n\nexport interface ToggleProps\n extends React.ComponentProps<typeof ArkToggle.Root>,\n VariantProps<typeof toggleVariants> {\n /**\n * The variant of the toggle\n *\n * @default \"outline\"\n */\n variant?: Extract<\n VariantProps<typeof buttonVariants>[\"variant\"],\n \"outline\" | \"ghost\"\n >;\n}\n\nexport const Toggle = (props: ToggleProps) => {\n const { variant = \"ghost\", size = \"md\", className, slot, ...rest } = props;\n\n return (\n <ArkToggle.Root\n className={cn(\n buttonVariants({ variant, clickEffect: false }),\n toggleVariants({ size }),\n className\n )}\n {...rest}\n data-slot={slot ?? \"toggle\"}\n />\n );\n};\n\nexport const ToggleIndicator = (\n props: React.ComponentProps<typeof ArkToggle.Indicator>\n) => {\n const { children, slot, ...rest } = props;\n\n return (\n <ArkToggle.Indicator\n className=\"flex items-center gap-2\"\n {...rest}\n data-slot={slot ?? \"toggle-indicator\"}\n >\n {children}\n </ArkToggle.Indicator>\n );\n};\n"],"names":["useToggle","useToggleContext","toggleVariants","tv","controlSizes","Toggle","props","variant","size","className","slot","rest","jsx","ArkToggle","cn","buttonVariants","ToggleIndicator","children"],"mappings":";;;;;;AAOO,MAAMA,IAAYC,GAEZC,IAAiBC,EAAG;AAAA,EAC/B,MAAM;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA,IAIA;AAAA,IACA;AAAA,EAAA;AAAA,EAEF,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI,CAACC,EAAa,IAAI,uBAAuB;AAAA,MAC7C,IAAI,CAACA,EAAa,IAAI,qBAAqB;AAAA,MAC3C,IAAI,CAACA,EAAa,IAAI,uBAAuB;AAAA,IAAA;AAAA,EAC/C;AAAA,EAEF,iBAAiB;AAAA,IACf,MAAM;AAAA,EAAA;AAEV,CAAC,GAgBYC,IAAS,CAACC,MAAuB;AAC5C,QAAM,EAAE,SAAAC,IAAU,SAAS,MAAAC,IAAO,MAAM,WAAAC,GAAW,MAAAC,GAAM,GAAGC,EAAA,IAASL;AAErE,SACE,gBAAAM;AAAA,IAACC,EAAU;AAAA,IAAV;AAAA,MACC,WAAWC;AAAA,QACTC,EAAe,EAAE,SAAAR,GAAS,aAAa,IAAO;AAAA,QAC9CL,EAAe,EAAE,MAAAM,GAAM;AAAA,QACvBC;AAAA,MAAA;AAAA,MAED,GAAGE;AAAA,MACJ,aAAWD,KAAQ;AAAA,IAAA;AAAA,EAAA;AAGzB,GAEaM,IAAkB,CAC7BV,MACG;AACH,QAAM,EAAE,UAAAW,GAAU,MAAAP,GAAM,GAAGC,MAASL;AAEpC,SACE,gBAAAM;AAAA,IAACC,EAAU;AAAA,IAAV;AAAA,MACC,WAAU;AAAA,MACT,GAAGF;AAAA,MACJ,aAAWD,KAAQ;AAAA,MAElB,UAAAO;AAAA,IAAA;AAAA,EAAA;AAGP;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kanzo-tech/ui",
3
- "version": "0.11.0",
3
+ "version": "0.13.0",
4
4
  "description": "Kanzo shared UI — domain-free components over Ark UI and tailwind-variants, themed by tokens.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -95,8 +95,8 @@
95
95
  "tailwind-merge": "^3.6.0",
96
96
  "tailwind-variants": "^3.2.2",
97
97
  "tw-animate-css": "^1.4.0",
98
- "@kanzo-tech/theme": "0.11.0",
99
- "@kanzo-tech/mosaic": "0.11.0"
98
+ "@kanzo-tech/theme": "0.13.0",
99
+ "@kanzo-tech/mosaic": "0.13.0"
100
100
  },
101
101
  "devDependencies": {
102
102
  "@codemirror/autocomplete": "^6.18.6",
@@ -122,12 +122,12 @@
122
122
  "rollup-plugin-preserve-directives": "^0.4.0",
123
123
  "tailwindcss": "4"
124
124
  },
125
- "//size-limit": "Budgets OUR shipped code only. `ignore` mirrors the build's `external` list in vite.config.ts — anything externalised resolves from the consumer's node_modules, so counting it here measures the ecosystem, not us; keep the two lists in sync. Barrel measured at 35.27 kB brotlied, budget set just above so real growth trips the gate. The analytics budget (then spelled `charts`) went 4 kB -> 6 kB when the five preset charts became a composable grammar (measured 5.47 kB), then 6 kB -> 60 kB when ChartFilter/ChartSearch/ChartSlider brought Select, Combobox, Input, Field and Slider into the subpath (measured 56.01 kB). That last jump is mostly an artefact of measuring a subpath in isolation: in an app that also imports the root barrel those modules are the same files and dedupe, so the incremental cost is far smaller. The root barrel went 38 kB -> 42 kB (measured 40.66 kB) for the AI-assist compounds: real growth, and growth nobody downloads unless they import it. That is the point -- this gauge measures the WHOLE library, not what a consumer pays. The gauge that measures the latter is 'one component (tree-shaken)' below: Button resolves to 1.08 kB and three of our modules, with no trace of the AI code, so tree-shaking is doing its job. Treat this budget as a change detector for the library's total size and that one as the regression gate for consumer cost. Rebaselined 2026-07-31: analytics measured 66.30 kB against a stale 60 kB budget, so the gate was already red before the colour work touched it -- measured by removing that work's only addition to the subpath (`useThemeTick` reading the palette through the theme context), which moves the figure by 0.03 kB. The growth is somebody else's and is not attributed here, because the minified bundle does not say and a note that guessed would be worse than one that does not: what is recorded is the number and the fact that it predates this branch. Budget set to 68 kB, just above the measurement, so the next real growth trips it again. Rebaselined 2026-08-18: the root barrel went 42 kB -> 42.5 kB (measured 42.12 kB, against 41.54 kB at fb8e5b5) when the core's axes became a generated declaration the barrel carries -- the JSON is 302 B -> 648 B of it, brotlied on its own, and the rest is the one resolution chain. The other three gauges did not move at all, `one component` included, so no consumer of a component pays for it; see `/docs/design/colour` for the four figures and how to re-derive them. Measured again 2026-08-20, and NOT rebaselined: 42.12 kB -> 42.32 kB across one branch that took four modules OUT of the barrel (`complete`, `suggest`, `use-ai` and the `Suggestion` type left for @kanzo-tech/ai) and put two IN (`Diagnostic`, `Questionnaire`). Net +0.20 kB, which is the honest reading and the only one available: the two movements cannot be separated from a single minified bundle, and a note that guessed at the split would be worse than one that says it did not. The AI compounds' arrival is recorded above as 38 -> 42 kB, so their departure is worth about that much and the two new components spent it. Still under the 43 kB gate, so the gate is untouched. Raised 2026-09-30, 43.5 kB -> 44 kB, as a decision (Ángel): the root barrel measured 43.57 kB after four issues from keasy landed in one day -- `FieldRequiredIndicator`'s `fallback` (+0.13 kB), the `Empty*` parts (+0.20), the `Stat*` compound that replaced `StatTile` and the copied `MetricCard` (+0.25) and the `Gated*` parts (+0.18). Three compounds the library did not have, each with its second call site in keasy, each replacing code keasy copied. `one component (tree-shaken)` did not move (1.26 kB), so no consumer of a component pays for them. Budget set just above the measurement so the next growth trips it again.",
125
+ "//size-limit": "Budgets OUR shipped code only. `ignore` mirrors the build's `external` list in vite.config.ts — anything externalised resolves from the consumer's node_modules, so counting it here measures the ecosystem, not us; keep the two lists in sync. Barrel measured at 35.27 kB brotlied, budget set just above so real growth trips the gate. The analytics budget (then spelled `charts`) went 4 kB -> 6 kB when the five preset charts became a composable grammar (measured 5.47 kB), then 6 kB -> 60 kB when ChartFilter/ChartSearch/ChartSlider brought Select, Combobox, Input, Field and Slider into the subpath (measured 56.01 kB). That last jump is mostly an artefact of measuring a subpath in isolation: in an app that also imports the root barrel those modules are the same files and dedupe, so the incremental cost is far smaller. The root barrel went 38 kB -> 42 kB (measured 40.66 kB) for the AI-assist compounds: real growth, and growth nobody downloads unless they import it. That is the point -- this gauge measures the WHOLE library, not what a consumer pays. The gauge that measures the latter is 'one component (tree-shaken)' below: Button resolves to 1.08 kB and three of our modules, with no trace of the AI code, so tree-shaking is doing its job. Treat this budget as a change detector for the library's total size and that one as the regression gate for consumer cost. Rebaselined 2026-07-31: analytics measured 66.30 kB against a stale 60 kB budget, so the gate was already red before the colour work touched it -- measured by removing that work's only addition to the subpath (`useThemeTick` reading the palette through the theme context), which moves the figure by 0.03 kB. The growth is somebody else's and is not attributed here, because the minified bundle does not say and a note that guessed would be worse than one that does not: what is recorded is the number and the fact that it predates this branch. Budget set to 68 kB, just above the measurement, so the next real growth trips it again. Rebaselined 2026-08-18: the root barrel went 42 kB -> 42.5 kB (measured 42.12 kB, against 41.54 kB at fb8e5b5) when the core's axes became a generated declaration the barrel carries -- the JSON is 302 B -> 648 B of it, brotlied on its own, and the rest is the one resolution chain. The other three gauges did not move at all, `one component` included, so no consumer of a component pays for it; see `/docs/design/colour` for the four figures and how to re-derive them. Measured again 2026-08-20, and NOT rebaselined: 42.12 kB -> 42.32 kB across one branch that took four modules OUT of the barrel (`complete`, `suggest`, `use-ai` and the `Suggestion` type left for @kanzo-tech/ai) and put two IN (`Diagnostic`, `Questionnaire`). Net +0.20 kB, which is the honest reading and the only one available: the two movements cannot be separated from a single minified bundle, and a note that guessed at the split would be worse than one that says it did not. The AI compounds' arrival is recorded above as 38 -> 42 kB, so their departure is worth about that much and the two new components spent it. Still under the 43 kB gate, so the gate is untouched. Raised 2026-09-30, 43.5 kB -> 44 kB, as a decision (Ángel): the root barrel measured 43.57 kB after four issues from keasy landed in one day -- `FieldRequiredIndicator`'s `fallback` (+0.13 kB), the `Empty*` parts (+0.20), the `Stat*` compound that replaced `StatTile` and the copied `MetricCard` (+0.25) and the `Gated*` parts (+0.18). Three compounds the library did not have, each with its second call site in keasy, each replacing code keasy copied. `one component (tree-shaken)` did not move (1.26 kB), so no consumer of a component pays for them. Budget set just above the measurement so the next growth trips it again. Raised 2026-09-30, 44 kB -> 45.5 kB, as a decision (Ángel; branch `feat/form-primitives`): the barrel measured 45.09 kB after `LanguagePicker`, `useAsyncCollection`, `useDebouncedCommit`, the `Field` bridge on `DatePicker` and `SegmentGroup`, `FieldHelper`'s `tone`, `FieldGroup`'s `columns` and `LocaleProvider` landed together for a form generator that was carrying its own copies. `one component (tree-shaken)` did not move (1.26 kB), so no consumer of a component pays for them; analytics went 66.24 -> 67.13 kB and stays under its 68 kB. Raised 2026-09-30, 45.5 kB -> 46.5 kB, as a decision (Ángel; branch `fix/control-heights`): the barrel measured 46.41 kB (45.98 kB before the segmented date-time input and the labelled switch/checkbox/radio rows) against the 45.09 kB the previous raise was set on. What it bought: the shared control height (`lib/control-size.ts`), `DatePicker`'s `granularity` with Ark's segmented `DateInput` bound to the picker and a paste parser, and `DatePickerTimer` bound to the picker. `one component (tree-shaken)` stayed at 1.28 kB and analytics at 67.17 kB (limit 68). Budget set just above the measurement so the next growth trips it again.",
126
126
  "size-limit": [
127
127
  {
128
128
  "name": "root barrel (JS)",
129
129
  "path": "dist/index.js",
130
- "limit": "44 kB",
130
+ "limit": "46.5 kB",
131
131
  "ignore": [
132
132
  "react",
133
133
  "react-dom",