@justanarthur/modo-ui 0.3.0 → 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 (35) hide show
  1. package/README.md +2 -1
  2. package/dist/blocks/sidebar-app/index.js +3 -3
  3. package/dist/components/inputs/combobox/index.d.ts +7 -6
  4. package/dist/components/inputs/combobox/index.js +2 -2
  5. package/dist/components/inputs/date-time/date-picker/index.d.ts +7 -3
  6. package/dist/components/inputs/date-time/date-picker/index.js +5 -5
  7. package/dist/components/inputs/date-time/date-range-picker/index.d.ts +7 -3
  8. package/dist/components/inputs/date-time/date-range-picker/index.js +4 -4
  9. package/dist/components/inputs/date-time/duration-picker/index.d.ts +7 -3
  10. package/dist/components/inputs/date-time/duration-picker/index.js +4 -4
  11. package/dist/components/inputs/date-time/month-picker/index.d.ts +7 -3
  12. package/dist/components/inputs/date-time/month-picker/index.js +4 -4
  13. package/dist/components/inputs/date-time/time-picker/index.d.ts +7 -3
  14. package/dist/components/inputs/date-time/time-picker/index.js +4 -4
  15. package/dist/components/inputs/input/index.d.ts +5 -1
  16. package/dist/components/inputs/input/index.js +2 -2
  17. package/dist/components/inputs/textarea/index.d.ts +46 -0
  18. package/dist/components/inputs/textarea/index.js +13 -0
  19. package/dist/components/navigation/sidebar/index.js +2 -2
  20. package/dist/index.d.ts +166 -111
  21. package/dist/index.js +15 -11
  22. package/dist/shared/{components-mhd39z7x.js → components-3myrw7ne.js} +36 -1
  23. package/dist/shared/{components-gvr9w41t.js → components-50m950y9.js} +19 -23
  24. package/dist/shared/{components-nb87fjy4.js → components-mqyvvh8k.js} +1 -1
  25. package/dist/shared/{components-3fbbvq5j.js → components-nsjec21k.js} +3 -1
  26. package/dist/shared/{components-re6rs21k.js → components-nyq0rym2.js} +3 -1
  27. package/dist/shared/{components-7btqt08d.js → components-qtqxgfrb.js} +17 -20
  28. package/dist/shared/components-rd9tbsqv.js +89 -0
  29. package/dist/shared/{components-8ey44d79.js → components-tcee5k0s.js} +22 -24
  30. package/dist/shared/{components-bshdmf75.js → components-wshd8f3n.js} +3 -1
  31. package/dist/shared/{components-2nhgyh31.js → components-wtbesgdp.js} +3 -1
  32. package/dist/shared/{components-2n3whx7z.js → components-ye0ze0h8.js} +1 -1
  33. package/dist/shared/{components-k809mbn0.js → components-zwhtxm15.js} +3 -1
  34. package/dist/styles.css +1 -1
  35. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -54,7 +54,7 @@ import {
54
54
  } from "./shared/components-rr7a6ja9.js";
55
55
  import {
56
56
  fieldVariants
57
- } from "./shared/components-mhd39z7x.js";
57
+ } from "./shared/components-3myrw7ne.js";
58
58
  import"./shared/components-c6s6b43g.js";
59
59
  import {
60
60
  TooltipPortalContainer2,
@@ -98,7 +98,7 @@ import {
98
98
  SidebarMenuSubButton2,
99
99
  Sidebar2,
100
100
  SidebarContent2
101
- } from "./shared/components-nb87fjy4.js";
101
+ } from "./shared/components-mqyvvh8k.js";
102
102
  import"./shared/components-chacnk61.js";
103
103
  import {
104
104
  FluidHoverHighlight2
@@ -129,7 +129,7 @@ import {
129
129
  } from "./shared/components-a86dytt0.js";
130
130
  import {
131
131
  SidebarApp2
132
- } from "./shared/components-2n3whx7z.js";
132
+ } from "./shared/components-ye0ze0h8.js";
133
133
  import {
134
134
  FileThumbnail2,
135
135
  InputMessage2
@@ -193,7 +193,7 @@ import {
193
193
  ComboboxList2,
194
194
  ComboboxItem2,
195
195
  ComboboxEmpty2
196
- } from "./shared/components-8ey44d79.js";
196
+ } from "./shared/components-tcee5k0s.js";
197
197
  import"./shared/components-gz8zf3ec.js";
198
198
  import {
199
199
  Calendar2
@@ -202,24 +202,24 @@ import {
202
202
  Input2,
203
203
  Label2,
204
204
  InputGroup2
205
- } from "./shared/components-gvr9w41t.js";
206
- import"./shared/components-7btqt08d.js";
205
+ } from "./shared/components-50m950y9.js";
206
+ import"./shared/components-qtqxgfrb.js";
207
207
  import"./shared/components-mjthm1kf.js";
208
208
  import {
209
209
  DatePicker2
210
- } from "./shared/components-2nhgyh31.js";
210
+ } from "./shared/components-wtbesgdp.js";
211
211
  import {
212
212
  DateRangePicker2
213
- } from "./shared/components-k809mbn0.js";
213
+ } from "./shared/components-zwhtxm15.js";
214
214
  import {
215
215
  DurationPicker2
216
- } from "./shared/components-re6rs21k.js";
216
+ } from "./shared/components-nyq0rym2.js";
217
217
  import {
218
218
  MonthPicker2
219
- } from "./shared/components-3fbbvq5j.js";
219
+ } from "./shared/components-nsjec21k.js";
220
220
  import {
221
221
  TimePicker2
222
- } from "./shared/components-bshdmf75.js";
222
+ } from "./shared/components-wshd8f3n.js";
223
223
  import {
224
224
  RadioGroup2,
225
225
  Radio2
@@ -250,6 +250,9 @@ import {
250
250
  Switch2,
251
251
  SwitchGroup2
252
252
  } from "./shared/components-8snj490h.js";
253
+ import {
254
+ Textarea2
255
+ } from "./shared/components-rd9tbsqv.js";
253
256
  import {
254
257
  Tabs2,
255
258
  TabsList2,
@@ -478,6 +481,7 @@ export {
478
481
  TabsSubtle2 as TabsSubtle,
479
482
  TabsSubtleItem2 as TabsSubtleItem,
480
483
  TabsSubtlePanel2 as TabsSubtlePanel,
484
+ Textarea2 as Textarea,
481
485
  ThinkingIndicator2 as ThinkingIndicator,
482
486
  TimePicker2 as TimePicker,
483
487
  Toast2 as Toast,
@@ -1,3 +1,13 @@
1
+ import {
2
+ useShape
3
+ } from "./components-cv16mryv.js";
4
+ import {
5
+ useSize2
6
+ } from "./components-0sn7ypjw.js";
7
+ import {
8
+ cn2
9
+ } from "./components-ezxhrmer.js";
10
+
1
11
  // lib/field-classes.ts
2
12
  import { cva } from "class-variance-authority";
3
13
  var fieldVariants = cva([
@@ -18,5 +28,30 @@ var fieldVariants = cva([
18
28
  }
19
29
  });
20
30
  var fieldIconClasses = "shrink-0 text-muted-foreground transition-[color,stroke-width] duration-fast group-hover/field:text-foreground group-hover/field:stroke-[2] group-data-[active]/field:text-foreground group-data-[active]/field:stroke-[2] group-focus-within/field:text-foreground group-focus-within/field:stroke-[2]";
31
+ var FIELD_PX = {
32
+ default: "px-2.5",
33
+ compact: "px-2"
34
+ };
35
+ function useFieldBox({ variant, invalid, disabled, active, size }) {
36
+ const shape = useShape();
37
+ const sizeClasses = useSize2(size);
38
+ return {
39
+ size: sizeClasses,
40
+ props: {
41
+ "data-active": active || undefined,
42
+ "data-invalid": invalid || undefined,
43
+ "data-disabled": disabled || undefined,
44
+ className: cn2(fieldVariants({ variant }), shape.input, FIELD_PX[sizeClasses.variant])
45
+ }
46
+ };
47
+ }
48
+ function focusControlOnPress(control) {
49
+ return (e) => {
50
+ if (e.target === control.current)
51
+ return;
52
+ e.preventDefault();
53
+ control.current?.focus();
54
+ };
55
+ }
21
56
 
22
- export { fieldVariants, fieldIconClasses };
57
+ export { fieldVariants, fieldIconClasses, useFieldBox, focusControlOnPress };
@@ -1,13 +1,14 @@
1
- import {
2
- fieldVariants,
3
- fieldIconClasses
4
- } from "./components-mhd39z7x.js";
5
- import {
6
- useShape
7
- } from "./components-cv16mryv.js";
8
1
  import {
9
2
  useSize2
10
3
  } from "./components-0sn7ypjw.js";
4
+ import {
5
+ cn2
6
+ } from "./components-ezxhrmer.js";
7
+ import {
8
+ fieldIconClasses,
9
+ useFieldBox,
10
+ focusControlOnPress
11
+ } from "./components-3myrw7ne.js";
11
12
  import {
12
13
  useControllableState
13
14
  } from "./components-n7mjr357.js";
@@ -15,9 +16,6 @@ import {
15
16
  useFluidHover2,
16
17
  useRegisterFluidHoverItem2
17
18
  } from "./components-59efxjd9.js";
18
- import {
19
- cn2
20
- } from "./components-ezxhrmer.js";
21
19
  import {
22
20
  SizeProvider2
23
21
  } from "./components-jjw69c4c.js";
@@ -45,6 +43,7 @@ var Input2 = forwardRef(({
45
43
  value: valueProp,
46
44
  defaultValue = "",
47
45
  onChange: onChangeProp,
46
+ variant = "borderless",
48
47
  invalid,
49
48
  disabled,
50
49
  size,
@@ -54,20 +53,17 @@ var Input2 = forwardRef(({
54
53
  const [value, onChange] = useControllableState(valueProp, defaultValue, onChangeProp);
55
54
  const inputRef = useRef(null);
56
55
  const field = useContext(FieldStateContext);
57
- const shape = useShape();
58
- const sizeClasses = useSize2(size);
59
- const compact = sizeClasses.variant === "compact";
56
+ const { size: sizeClasses, props: boxProps } = useFieldBox({
57
+ variant,
58
+ invalid,
59
+ disabled,
60
+ active: field?.active,
61
+ size
62
+ });
60
63
  return /* @__PURE__ */ jsxs("div", {
61
- onMouseDown: (e) => {
62
- if (e.target === inputRef.current)
63
- return;
64
- e.preventDefault();
65
- inputRef.current?.focus();
66
- },
67
- "data-active": field?.active || undefined,
68
- "data-invalid": invalid || undefined,
69
- "data-disabled": disabled || undefined,
70
- className: cn2(fieldVariants(), "flex items-center", sizeClasses.gap, shape.input, compact ? "px-2" : "px-2.5", sizeClasses.control, className),
64
+ onMouseDown: focusControlOnPress(inputRef),
65
+ ...boxProps,
66
+ className: cn2(boxProps.className, "flex items-center", sizeClasses.gap, sizeClasses.control, className),
71
67
  children: [
72
68
  Icon && /* @__PURE__ */ jsx(Icon, {
73
69
  size: sizeClasses.icon,
@@ -30,7 +30,7 @@ import {
30
30
  } from "./components-rr7a6ja9.js";
31
31
  import {
32
32
  fieldVariants
33
- } from "./components-mhd39z7x.js";
33
+ } from "./components-3myrw7ne.js";
34
34
  import {
35
35
  useIsMobile
36
36
  } from "./components-c6s6b43g.js";
@@ -14,7 +14,7 @@ import {
14
14
  import {
15
15
  PickerShell,
16
16
  PickerInput
17
- } from "./components-7btqt08d.js";
17
+ } from "./components-qtqxgfrb.js";
18
18
 
19
19
  // components/inputs/date-time/month-picker/index.tsx
20
20
  import { addYears, endOfYear, format, startOfMonth, startOfYear } from "date-fns";
@@ -29,6 +29,7 @@ function MonthPicker2({
29
29
  startMonth,
30
30
  endMonth,
31
31
  disabled,
32
+ variant,
32
33
  invalid,
33
34
  size,
34
35
  open: openProp,
@@ -74,6 +75,7 @@ function MonthPicker2({
74
75
  open,
75
76
  onOpenChange: setOpen,
76
77
  size,
78
+ variant,
77
79
  invalid,
78
80
  disabled,
79
81
  icon: "calendar",
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  PickerShell,
15
15
  PickerInput
16
- } from "./components-7btqt08d.js";
16
+ } from "./components-qtqxgfrb.js";
17
17
  import {
18
18
  pad
19
19
  } from "./components-mjthm1kf.js";
@@ -32,6 +32,7 @@ function DurationPicker2({
32
32
  locale = defaultLocale,
33
33
  placeholder,
34
34
  disabled,
35
+ variant,
35
36
  invalid,
36
37
  size,
37
38
  open: openProp,
@@ -72,6 +73,7 @@ function DurationPicker2({
72
73
  open,
73
74
  onOpenChange: setOpen,
74
75
  size,
76
+ variant,
75
77
  invalid,
76
78
  disabled,
77
79
  icon: "clock",
@@ -1,7 +1,16 @@
1
1
  import {
2
- fieldVariants,
3
- fieldIconClasses
4
- } from "./components-mhd39z7x.js";
2
+ useShape
3
+ } from "./components-cv16mryv.js";
4
+ import {
5
+ useSize2
6
+ } from "./components-0sn7ypjw.js";
7
+ import {
8
+ cn2
9
+ } from "./components-ezxhrmer.js";
10
+ import {
11
+ fieldIconClasses,
12
+ useFieldBox
13
+ } from "./components-3myrw7ne.js";
5
14
  import {
6
15
  useIcon
7
16
  } from "./components-zrkzcayz.js";
@@ -14,15 +23,6 @@ import {
14
23
  useMorphOrigin,
15
24
  useMorph
16
25
  } from "./components-hqeq3w9q.js";
17
- import {
18
- cn2
19
- } from "./components-ezxhrmer.js";
20
- import {
21
- useShape
22
- } from "./components-cv16mryv.js";
23
- import {
24
- useSize2
25
- } from "./components-0sn7ypjw.js";
26
26
  import {
27
27
  SURFACE_BG,
28
28
  SURFACE_SHADOW,
@@ -46,7 +46,7 @@ import {
46
46
  } from "./components-rr7a6ja9.js";
47
47
  import {
48
48
  input_default
49
- } from "./components-gvr9w41t.js";
49
+ } from "./components-50m950y9.js";
50
50
 
51
51
  // components/inputs/date-time/picker-shell.tsx
52
52
  import { Popover } from "@base-ui/react/popover";
@@ -69,21 +69,18 @@ function PickerShell({ open: openProp, defaultOpen = false, onOpenChange, size,
69
69
  children: shell
70
70
  }) : shell;
71
71
  }
72
- var PickerField = forwardRef(({ icon, display, placeholder, invalid, disabled, id, className, ...props }, ref) => {
72
+ var PickerField = forwardRef(({ icon, display, placeholder, variant = "bordered", invalid, disabled, id, className, ...props }, ref) => {
73
73
  const Icon = useIcon(icon);
74
- const shape = useShape();
75
- const sizeClasses = useSize2();
76
- const compact = sizeClasses.variant === "compact";
74
+ const { size: sizeClasses, props: boxProps } = useFieldBox({ variant, invalid, disabled });
77
75
  return /* @__PURE__ */ jsxs("button", {
78
76
  ref,
79
77
  type: "button",
80
78
  id,
81
79
  disabled,
82
80
  "aria-invalid": invalid || undefined,
83
- "data-invalid": invalid || undefined,
84
- "data-disabled": disabled || undefined,
81
+ ...boxProps,
85
82
  ...props,
86
- className: cn2(fieldVariants({ variant: "bordered" }), "flex w-full min-w-0 items-center text-left cursor-pointer outline-none focus-visible:ring-focus-ring", sizeClasses.gap, sizeClasses.control, compact ? "px-2" : "px-2.5", shape.input, className),
83
+ className: cn2(boxProps.className, "flex w-full min-w-0 items-center text-left cursor-pointer outline-none focus-visible:ring-focus-ring", sizeClasses.gap, sizeClasses.control, className),
87
84
  children: [
88
85
  /* @__PURE__ */ jsx(Icon, {
89
86
  size: sizeClasses.icon,
@@ -0,0 +1,89 @@
1
+ import {
2
+ cn2
3
+ } from "./components-ezxhrmer.js";
4
+ import {
5
+ useFieldBox,
6
+ focusControlOnPress
7
+ } from "./components-3myrw7ne.js";
8
+ import {
9
+ useControllableState
10
+ } from "./components-n7mjr357.js";
11
+
12
+ // components/inputs/textarea/index.tsx
13
+ import { Field } from "@base-ui/react/field";
14
+ import { forwardRef, useCallback, useEffect, useLayoutEffect, useRef } from "react";
15
+ import { jsx } from "react/jsx-runtime";
16
+ var PADDING_Y = {
17
+ default: "py-2",
18
+ compact: "py-1"
19
+ };
20
+ var Textarea2 = forwardRef(({
21
+ value: valueProp,
22
+ defaultValue = "",
23
+ onChange: onChangeProp,
24
+ minRows = 3,
25
+ maxRows = 8,
26
+ variant = "borderless",
27
+ invalid,
28
+ disabled,
29
+ size,
30
+ className,
31
+ ...props
32
+ }, ref) => {
33
+ const [value, onChange] = useControllableState(valueProp, defaultValue, onChangeProp);
34
+ const textareaRef = useRef(null);
35
+ const box = useFieldBox({ variant, invalid, disabled, size });
36
+ const resize = useCallback(() => {
37
+ const el = textareaRef.current;
38
+ if (!el)
39
+ return;
40
+ el.style.height = "auto";
41
+ const lineHeight = Number.parseFloat(getComputedStyle(el).lineHeight);
42
+ const max = lineHeight * Math.max(maxRows, minRows);
43
+ el.style.height = `${Math.min(Math.max(el.scrollHeight, lineHeight * minRows), max)}px`;
44
+ el.style.overflowY = el.scrollHeight > max ? "auto" : "hidden";
45
+ }, [minRows, maxRows]);
46
+ useLayoutEffect(resize, [resize, value, box.size.variant]);
47
+ useEffect(() => {
48
+ const el = textareaRef.current;
49
+ if (!el)
50
+ return;
51
+ let lastWidth = el.offsetWidth;
52
+ const observer = new ResizeObserver(() => {
53
+ if (el.offsetWidth === lastWidth)
54
+ return;
55
+ lastWidth = el.offsetWidth;
56
+ resize();
57
+ });
58
+ observer.observe(el);
59
+ return () => observer.disconnect();
60
+ }, [resize]);
61
+ return /* @__PURE__ */ jsx("div", {
62
+ onMouseDown: focusControlOnPress(textareaRef),
63
+ ...box.props,
64
+ className: cn2(box.props.className, "flex", PADDING_Y[box.size.variant], className),
65
+ children: /* @__PURE__ */ jsx(Field.Control, {
66
+ ref: (node) => {
67
+ const textarea = node;
68
+ textareaRef.current = textarea;
69
+ if (typeof ref === "function")
70
+ ref(textarea);
71
+ else if (ref)
72
+ ref.current = textarea;
73
+ },
74
+ render: /* @__PURE__ */ jsx("textarea", {
75
+ rows: minRows,
76
+ ...props
77
+ }),
78
+ value,
79
+ onChange: (e) => onChange(e.target.value),
80
+ disabled,
81
+ "aria-invalid": invalid || undefined,
82
+ className: cn2("block w-full resize-none rounded-none bg-transparent text-foreground placeholder:text-muted-foreground outline-none font-[inherit]", box.size.text, "weight-normal")
83
+ })
84
+ });
85
+ });
86
+ Textarea2.displayName = "Textarea";
87
+ var textarea_default = Textarea2;
88
+
89
+ export { Textarea2, textarea_default };
@@ -1,16 +1,23 @@
1
1
  import {
2
- fieldVariants,
3
- fieldIconClasses
4
- } from "./components-mhd39z7x.js";
2
+ shapeMap,
3
+ useShape
4
+ } from "./components-cv16mryv.js";
5
+ import {
6
+ useSize2
7
+ } from "./components-0sn7ypjw.js";
8
+ import {
9
+ cn2
10
+ } from "./components-ezxhrmer.js";
11
+ import {
12
+ fieldIconClasses,
13
+ useFieldBox
14
+ } from "./components-3myrw7ne.js";
5
15
  import {
6
16
  opensInPlace,
7
17
  inPlaceOffset,
8
18
  useMorphOrigin,
9
19
  useMorph
10
20
  } from "./components-hqeq3w9q.js";
11
- import {
12
- cn2
13
- } from "./components-ezxhrmer.js";
14
21
  import {
15
22
  FluidHoverHighlight2
16
23
  } from "./components-kvr7f9hy.js";
@@ -20,13 +27,6 @@ import {
20
27
  import {
21
28
  MorphSurface
22
29
  } from "./components-0q0sqfh4.js";
23
- import {
24
- shapeMap,
25
- useShape
26
- } from "./components-cv16mryv.js";
27
- import {
28
- useSize2
29
- } from "./components-0sn7ypjw.js";
30
30
  import {
31
31
  SURFACE_BG,
32
32
  SURFACE_SHADOW,
@@ -279,9 +279,8 @@ function FieldControls({ clearable, compact, iconSize }) {
279
279
  ]
280
280
  });
281
281
  }
282
- var ComboboxInput2 = forwardRef(({ className, variant, icon: Icon, placeholder = "Search…", error, clearable = false, size, ...props }, ref) => {
283
- const shape = useShape();
284
- const sizeClasses = useSize2(size);
282
+ var ComboboxInput2 = forwardRef(({ className, variant = "bordered", icon: Icon, placeholder = "Search…", error, clearable = false, size, ...props }, ref) => {
283
+ const { size: sizeClasses, props: boxProps } = useFieldBox({ variant, invalid: !!error, size });
285
284
  const compact = sizeClasses.variant === "compact";
286
285
  const { anchorRef } = useComboboxContext();
287
286
  return /* @__PURE__ */ jsxs("div", {
@@ -289,8 +288,8 @@ var ComboboxInput2 = forwardRef(({ className, variant, icon: Icon, placeholder =
289
288
  children: [
290
289
  /* @__PURE__ */ jsxs(ComboboxPrimitive.InputGroup, {
291
290
  ref: anchorRef,
292
- "data-invalid": !!error || undefined,
293
- className: cn2(fieldVariants({ variant: variant ?? "bordered" }), "flex items-center", sizeClasses.control, sizeClasses.gap, compact ? "px-2" : "px-2.5", compact ? "min-w-[128px]" : "min-w-[160px]", shape.input, className),
291
+ ...boxProps,
292
+ className: cn2(boxProps.className, "flex items-center", sizeClasses.control, sizeClasses.gap, compact ? "min-w-[128px]" : "min-w-[160px]", className),
294
293
  children: [
295
294
  Icon && /* @__PURE__ */ jsx(Icon, {
296
295
  size: sizeClasses.icon,
@@ -345,12 +344,12 @@ function useChipRowHeight(padY) {
345
344
  }, [height]);
346
345
  return { ref, height };
347
346
  }
348
- var ComboboxChips2 = forwardRef(({ className, variant, icon: Icon, placeholder = "Search…", error, clearable = false, size, ...props }, ref) => {
347
+ var ComboboxChips2 = forwardRef(({ className, variant = "bordered", icon: Icon, placeholder = "Search…", error, clearable = false, size, ...props }, ref) => {
349
348
  const XIcon = useIcon("x");
350
349
  const shape = useShape();
351
- const sizeClasses = useSize2(size);
352
- const compact = sizeClasses.variant === "compact";
353
350
  const { anchorRef, open, disabled, inputValue, values } = useComboboxContext();
351
+ const { size: sizeClasses, props: boxProps } = useFieldBox({ variant, invalid: !!error, disabled, size });
352
+ const compact = sizeClasses.variant === "compact";
354
353
  const rowHeight = useChipRowHeight(compact ? 8 : 12);
355
354
  return /* @__PURE__ */ jsxs("div", {
356
355
  className: "flex flex-col gap-1",
@@ -360,10 +359,9 @@ var ComboboxChips2 = forwardRef(({ className, variant, icon: Icon, placeholder =
360
359
  render: /* @__PURE__ */ jsx(motion.div, {
361
360
  style: { height: rowHeight.height }
362
361
  }),
363
- "data-disabled": disabled || undefined,
364
- "data-invalid": !!error || undefined,
362
+ ...boxProps,
365
363
  "data-popup-open": open || undefined,
366
- className: cn2(fieldVariants({ variant: variant ?? "bordered" }), "flex items-center", "transition-[color,background-color,border-radius,box-shadow,opacity]", "!items-start", compact ? "min-h-7 py-1" : "min-h-9 py-1.5", sizeClasses.gap, compact ? "px-2" : "px-2.5", compact ? "min-w-[128px]" : "min-w-[160px]", shape.input, className),
364
+ className: cn2(boxProps.className, "flex items-center", "transition-[color,background-color,border-radius,box-shadow,opacity]", "!items-start", compact ? "min-h-7 py-1" : "min-h-9 py-1.5", sizeClasses.gap, compact ? "min-w-[128px]" : "min-w-[160px]", className),
367
365
  children: [
368
366
  Icon && /* @__PURE__ */ jsx("span", {
369
367
  className: cn2("flex shrink-0 items-center", compact ? "h-5" : "h-6"),
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  PickerShell,
15
15
  PickerInput
16
- } from "./components-7btqt08d.js";
16
+ } from "./components-qtqxgfrb.js";
17
17
  import {
18
18
  pad,
19
19
  TimeColumns
@@ -37,6 +37,7 @@ function TimePicker2({
37
37
  locale = defaultLocale,
38
38
  placeholder,
39
39
  disabled,
40
+ variant,
40
41
  invalid,
41
42
  size,
42
43
  open: openProp,
@@ -69,6 +70,7 @@ function TimePicker2({
69
70
  open,
70
71
  onOpenChange: setOpen,
71
72
  size,
73
+ variant,
72
74
  invalid,
73
75
  disabled,
74
76
  icon: "clock",
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  PickerShell,
15
15
  PickerInput
16
- } from "./components-7btqt08d.js";
16
+ } from "./components-qtqxgfrb.js";
17
17
  import {
18
18
  TimeColumns
19
19
  } from "./components-mjthm1kf.js";
@@ -36,6 +36,7 @@ function DatePicker2({
36
36
  disabled,
37
37
  startMonth,
38
38
  endMonth,
39
+ variant,
39
40
  invalid,
40
41
  size,
41
42
  open: openProp,
@@ -99,6 +100,7 @@ function DatePicker2({
99
100
  open,
100
101
  onOpenChange: setOpen,
101
102
  size,
103
+ variant,
102
104
  invalid,
103
105
  disabled: off,
104
106
  icon: "calendar",
@@ -23,7 +23,7 @@ import {
23
23
  SidebarMenuItem2,
24
24
  SidebarMenuButton2,
25
25
  sidebar_default
26
- } from "./components-nb87fjy4.js";
26
+ } from "./components-mqyvvh8k.js";
27
27
  import {
28
28
  MenuItem2,
29
29
  DropdownMenu2,
@@ -11,7 +11,7 @@ import {
11
11
  import {
12
12
  PickerShell,
13
13
  PickerInput
14
- } from "./components-7btqt08d.js";
14
+ } from "./components-qtqxgfrb.js";
15
15
 
16
16
  // components/inputs/date-time/date-range-picker/index.tsx
17
17
  import { endOfMonth, format } from "date-fns";
@@ -27,6 +27,7 @@ function DateRangePicker2({
27
27
  disabled,
28
28
  startMonth,
29
29
  endMonth,
30
+ variant,
30
31
  invalid,
31
32
  size,
32
33
  open: openProp,
@@ -109,6 +110,7 @@ function DateRangePicker2({
109
110
  open,
110
111
  onOpenChange: setOpen,
111
112
  size,
113
+ variant,
112
114
  invalid,
113
115
  disabled: off,
114
116
  icon: "calendar",
package/dist/styles.css CHANGED
@@ -59,7 +59,7 @@
59
59
  }
60
60
  /* layer: theme */
61
61
  @layer theme{
62
- :root, :host { --default-transition-timingFunction: cubic-bezier(0.4, 0, 0.2, 1); --default-transition-duration: 150ms; --spacing: 0.25rem; --ease-DEFAULT: cubic-bezier(0.4, 0, 0.2, 1); --font-sans: 'Inter Variable', ui-sans-serif, system-ui, sans-serif; --radius-md: 0.375rem; --radius-DEFAULT: 0.25rem; --radius-none: 0; --leading-relaxed: 1.625; --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); --radius-2xl: 1rem; --radius-3xl: 1.5rem; --radius-lg: 0.5rem; --radius-xl: 0.75rem; --leading-none: 1; --ease-out: cubic-bezier(0, 0, 0.2, 1); --radius-sm: 0.25rem; --leading-snug: 1.375; --leading-normal: 1.5; --radius-xs: 0.125rem; --tracking-wide: 0.025em; --font-mono: ui-monospace, 'SF Mono', SFMono-Regular, Menlo, Consolas, monospace; --leading-tight: 1.25; --default-font-family: var(--font-sans); --default-monoFont-family: var(--font-mono); }
62
+ :root, :host { --default-transition-timingFunction: cubic-bezier(0.4, 0, 0.2, 1); --default-transition-duration: 150ms; --spacing: 0.25rem; --ease-DEFAULT: cubic-bezier(0.4, 0, 0.2, 1); --font-sans: 'Inter Variable', ui-sans-serif, system-ui, sans-serif; --radius-none: 0; --leading-relaxed: 1.625; --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); --radius-2xl: 1rem; --radius-3xl: 1.5rem; --radius-DEFAULT: 0.25rem; --radius-lg: 0.5rem; --radius-xl: 0.75rem; --leading-none: 1; --ease-out: cubic-bezier(0, 0, 0.2, 1); --radius-sm: 0.25rem; --leading-snug: 1.375; --leading-normal: 1.5; --radius-xs: 0.125rem; --tracking-wide: 0.025em; --radius-md: 0.375rem; --font-mono: ui-monospace, 'SF Mono', SFMono-Regular, Menlo, Consolas, monospace; --leading-tight: 1.25; --default-font-family: var(--font-sans); --default-monoFont-family: var(--font-mono); }
63
63
  }
64
64
  /* layer: base */
65
65
  @layer base{
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@justanarthur/modo-ui",
3
3
  "type": "module",
4
- "version": "0.3.0",
4
+ "version": "0.4.0",
5
5
  "description": "Fluid Functionalism (Base UI flavor, MIT © 2026 Micka Touillaud) ported to UnoCSS: motion springs, fluid hover, a two-step size ladder and an eight-level elevated surface system. Documented with modo.",
6
6
  "license": "MIT",
7
7
  "keywords": [