@geajs/ui 0.2.1 → 0.2.3

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 (85) hide show
  1. package/dist/accordion.mjs +12 -12
  2. package/dist/accordion.mjs.map +1 -1
  3. package/dist/alert.mjs +44 -23
  4. package/dist/alert.mjs.map +1 -1
  5. package/dist/avatar.mjs +11 -11
  6. package/dist/avatar.mjs.map +1 -1
  7. package/dist/badge.mjs +19 -12
  8. package/dist/badge.mjs.map +1 -1
  9. package/dist/button.mjs +33 -23
  10. package/dist/button.mjs.map +1 -1
  11. package/dist/card.mjs +85 -43
  12. package/dist/card.mjs.map +1 -1
  13. package/dist/checkbox.mjs +5 -5
  14. package/dist/checkbox.mjs.map +1 -1
  15. package/dist/clipboard.mjs +10 -10
  16. package/dist/clipboard.mjs.map +1 -1
  17. package/dist/collapsible.mjs +18 -11
  18. package/dist/collapsible.mjs.map +1 -1
  19. package/dist/combobox.mjs +62 -48
  20. package/dist/combobox.mjs.map +1 -1
  21. package/dist/dialog.mjs +19 -12
  22. package/dist/dialog.mjs.map +1 -1
  23. package/dist/dnd-manager.mjs +18 -26
  24. package/dist/dnd-manager.mjs.map +1 -1
  25. package/dist/drag-drop-context.mjs +15 -8
  26. package/dist/drag-drop-context.mjs.map +1 -1
  27. package/dist/draggable.mjs +39 -19
  28. package/dist/draggable.mjs.map +1 -1
  29. package/dist/droppable.mjs +22 -12
  30. package/dist/droppable.mjs.map +1 -1
  31. package/dist/file-upload.mjs +24 -21
  32. package/dist/file-upload.mjs.map +1 -1
  33. package/dist/hover-card.mjs +27 -17
  34. package/dist/hover-card.mjs.map +1 -1
  35. package/dist/input.mjs +36 -24
  36. package/dist/input.mjs.map +1 -1
  37. package/dist/label.mjs +22 -12
  38. package/dist/label.mjs.map +1 -1
  39. package/dist/menu.mjs +9 -9
  40. package/dist/menu.mjs.map +1 -1
  41. package/dist/number-input.mjs +5 -5
  42. package/dist/number-input.mjs.map +1 -1
  43. package/dist/pagination.mjs +8 -9
  44. package/dist/pagination.mjs.map +1 -1
  45. package/dist/pin-input.mjs +11 -11
  46. package/dist/pin-input.mjs.map +1 -1
  47. package/dist/popover.mjs +19 -12
  48. package/dist/popover.mjs.map +1 -1
  49. package/dist/progress.mjs +8 -8
  50. package/dist/progress.mjs.map +1 -1
  51. package/dist/radio-group.mjs +16 -12
  52. package/dist/radio-group.mjs.map +1 -1
  53. package/dist/rating-group.mjs +21 -15
  54. package/dist/rating-group.mjs.map +1 -1
  55. package/dist/select.d.mts +1 -0
  56. package/dist/select.mjs +22 -17
  57. package/dist/select.mjs.map +1 -1
  58. package/dist/separator.mjs +12 -9
  59. package/dist/separator.mjs.map +1 -1
  60. package/dist/skeleton.mjs +6 -7
  61. package/dist/skeleton.mjs.map +1 -1
  62. package/dist/slider.mjs +5 -5
  63. package/dist/slider.mjs.map +1 -1
  64. package/dist/switch.mjs +5 -5
  65. package/dist/switch.mjs.map +1 -1
  66. package/dist/tabs.mjs +28 -20
  67. package/dist/tabs.mjs.map +1 -1
  68. package/dist/tags-input.mjs +18 -14
  69. package/dist/tags-input.mjs.map +1 -1
  70. package/dist/textarea.mjs +28 -19
  71. package/dist/textarea.mjs.map +1 -1
  72. package/dist/theme.css +198 -165
  73. package/dist/toast.mjs +6 -7
  74. package/dist/toast.mjs.map +1 -1
  75. package/dist/toggle-group.mjs +16 -12
  76. package/dist/toggle-group.mjs.map +1 -1
  77. package/dist/tooltip.mjs +18 -11
  78. package/dist/tooltip.mjs.map +1 -1
  79. package/dist/tree-view.mjs +17 -10
  80. package/dist/tree-view.mjs.map +1 -1
  81. package/dist/zag-component.mjs.map +1 -1
  82. package/package.json +1 -2
  83. package/dist/tailwind-preset.d.mts +0 -51
  84. package/dist/tailwind-preset.mjs +0 -50
  85. package/dist/tailwind-preset.mjs.map +0 -1
package/dist/button.mjs CHANGED
@@ -1,11 +1,11 @@
1
1
  import { t as cn } from "./cn.mjs";
2
- import { Component, GEA_CTOR_TAG_NAME, GEA_ELEMENT } from "@geajs/core";
2
+ import { Component, GEA_ELEMENT, GEA_INSTANTIATE_CHILD_COMPONENTS, GEA_MOUNT_COMPILED_CHILD_COMPONENTS, GEA_ON_PROP_CHANGE, GEA_PATCH_NODE } from "@geajs/core";
3
3
  //#region src/components/button.tsx
4
4
  const variants = {
5
- default: "bg-primary text-primary-foreground shadow-sm hover:bg-primary/90",
6
- destructive: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
7
- outline: "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",
8
- secondary: "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
5
+ default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
6
+ destructive: "bg-destructive text-destructive-foreground shadow-xs hover:bg-destructive/90",
7
+ outline: "border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground",
8
+ secondary: "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
9
9
  ghost: "hover:bg-accent hover:text-accent-foreground",
10
10
  link: "text-primary underline-offset-4 hover:underline"
11
11
  };
@@ -17,48 +17,48 @@ const sizes = {
17
17
  };
18
18
  var Button = class extends Component {
19
19
  static {
20
- this[GEA_CTOR_TAG_NAME] = "gea-button";
20
+ this.__geaTagName = "gea-button";
21
21
  }
22
22
  template(props) {
23
23
  const __id = this.id;
24
24
  const variant = variants[props.variant || "default"] || variants.default;
25
25
  const size = sizes[props.size || "default"] || sizes.default;
26
- return `<button id="${__id}"${cn("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", variant, size, props.class) == null || cn("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", variant, size, props.class) === false ? "" : ` class="${(cn("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", variant, size, props.class) != null ? String(cn("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", variant, size, props.class)) : "").trim()}"`}${(props.type || "button") == null || (props.type || "button") === false ? "" : ` type="${props.type || "button"}"`}${props.disabled == null || props.disabled === false ? "" : ` disabled="${props.disabled}"`}>${props.children}</button>`;
26
+ return `<button id="${__id}"${cn("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", variant, size, props.class) == null || cn("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", variant, size, props.class) === false ? "" : ` class="${(cn("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", variant, size, props.class) != null ? String(cn("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", variant, size, props.class)) : "").trim()}"`}${(props.type || "button") == null || (props.type || "button") === false ? "" : ` type="${props.type || "button"}"`}${props.disabled == null || props.disabled === false ? "" : ` disabled="${props.disabled}"`}>${props.children}</button>`;
27
27
  }
28
28
  get events() {
29
29
  if (this.__evts && this[GEA_ELEMENT]) return this.__evts;
30
- const __geaEvtsResult = { click: { [`#${this.id}`]: (e, targetComponent) => this.__event_click_0(e, targetComponent) } };
30
+ const __geaEvtsResult = { click: { [`#${this.id}`]: this.__event_click_0 } };
31
31
  if (this[GEA_ELEMENT]) this.__evts = __geaEvtsResult;
32
32
  return __geaEvtsResult;
33
33
  }
34
34
  __event_click_0(e, targetComponent) {
35
35
  (this.props.click || this.props.onClick)?.(e);
36
36
  }
37
- __onPropChange(key, value) {
37
+ [GEA_ON_PROP_CHANGE](key, value) {
38
38
  if (key === "variant") {
39
39
  const __el = this[GEA_ELEMENT];
40
40
  const props = this.props;
41
- const __boundValue = cn("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", variants[props.variant || "default"] || variants.default, sizes[props.size || "default"] || sizes.default, this.props.class);
41
+ const __boundValue = cn("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", variants[props.variant || "default"] || variants.default, sizes[props.size || "default"] || sizes.default, this.props.class);
42
42
  if (__el) {
43
- const __newClass = (__boundValue != null ? String(__boundValue) : "").trim();
43
+ const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
44
44
  if (__el.className !== __newClass) __el.className = __newClass;
45
45
  }
46
46
  }
47
47
  if (key === "size") {
48
48
  const __el = this[GEA_ELEMENT];
49
49
  const props = this.props;
50
- const __boundValue = cn("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", variants[props.variant || "default"] || variants.default, sizes[props.size || "default"] || sizes.default, this.props.class);
50
+ const __boundValue = cn("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", variants[props.variant || "default"] || variants.default, sizes[props.size || "default"] || sizes.default, this.props.class);
51
51
  if (__el) {
52
- const __newClass = (__boundValue != null ? String(__boundValue) : "").trim();
52
+ const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
53
53
  if (__el.className !== __newClass) __el.className = __newClass;
54
54
  }
55
55
  }
56
56
  if (key === "class") {
57
57
  const __el = this[GEA_ELEMENT];
58
58
  const props = this.props;
59
- const __boundValue = cn("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", variants[props.variant || "default"] || variants.default, sizes[props.size || "default"] || sizes.default, value);
59
+ const __boundValue = cn("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50", variants[props.variant || "default"] || variants.default, sizes[props.size || "default"] || sizes.default, value);
60
60
  if (__el) {
61
- const __newClass = (__boundValue != null ? String(__boundValue) : "").trim();
61
+ const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
62
62
  if (__el.className !== __newClass) __el.className = __newClass;
63
63
  }
64
64
  }
@@ -66,10 +66,13 @@ var Button = class extends Component {
66
66
  const __el = this[GEA_ELEMENT];
67
67
  this.props;
68
68
  const __boundValue = value || "button";
69
- if (__el) if (__boundValue === null || __boundValue === void 0) __el.removeAttribute("type");
70
- else {
71
- const __newAttr = String(__boundValue);
72
- if (__el.getAttribute("type") !== __newAttr) __el.setAttribute("type", __newAttr);
69
+ if (__el) {
70
+ var __av = __boundValue;
71
+ if (__av == null || __av === false) __el.removeAttribute("type");
72
+ else {
73
+ const __newAttr = String(__av);
74
+ if (__el.getAttribute("type") !== __newAttr) __el.setAttribute("type", __newAttr);
75
+ }
73
76
  }
74
77
  }
75
78
  if (key === "disabled") {
@@ -82,10 +85,17 @@ var Button = class extends Component {
82
85
  }
83
86
  if (key === "children") {
84
87
  const __el = this[GEA_ELEMENT];
85
- if (__el && __el.innerHTML !== value) {
86
- __el.innerHTML = value;
87
- this.instantiateChildComponents_();
88
- if (this.parentComponent) this.parentComponent.mountCompiledChildComponents_();
88
+ if (__el) {
89
+ const __tw = document.createElement("template");
90
+ __tw.innerHTML = value;
91
+ const __newEl = __tw.content.firstElementChild;
92
+ const __existEl = __el.firstElementChild;
93
+ if (__newEl && __existEl && __tw.content.childNodes.length === 1) this.constructor[GEA_PATCH_NODE](__existEl, __newEl, true);
94
+ else if (__el.innerHTML !== value) {
95
+ __el.innerHTML = value;
96
+ this[GEA_INSTANTIATE_CHILD_COMPONENTS]();
97
+ if (this.parentComponent) this.parentComponent[GEA_MOUNT_COMPILED_CHILD_COMPONENTS]();
98
+ }
89
99
  }
90
100
  }
91
101
  }
@@ -1 +1 @@
1
- {"version":3,"file":"button.mjs","names":["Component","GEA_RENDERED","GEA_ELEMENT","GEA_MAPS","GEA_CONDS","GEA_RESET_ELS","GEA_OBSERVE","GEA_OBSERVE_LIST","GEA_EL","GEA_UPDATE_TEXT","GEA_REQUEST_RENDER","GEA_UPDATE_PROPS","GEA_SYNC_MAP","GEA_REGISTER_MAP","GEA_PATCH_COND","GEA_REGISTER_COND","GEA_REFRESH_LIST","GEA_RECONCILE_LIST","GEA_ENSURE_ARRAY_CONFIGS","GEA_APPLY_LIST_CHANGES","GEA_SWAP_CHILD","GEA_SWAP_STATE_CHILDREN","GEA_CHILD","GEA_LIST_CONFIG_REFRESHING","GEA_DOM_KEY","GEA_DOM_ITEM","GEA_DOM_PROPS","GEA_MAP_CONFIG_TPL","GEA_MAP_CONFIG_PREV","GEA_MAP_CONFIG_COUNT","geaCondPatchedSymbol","geaCondValueSymbol","geaObservePrevSymbol","geaPrevGuardSymbol","GEA_SETUP_LOCAL_STATE_OBSERVERS","geaSanitizeAttr","geaEscapeHtml","GEA_CTOR_TAG_NAME","MouseEventHandler","ReactNode","cn","ButtonVariant","ButtonSize","ButtonProps","variant","size","type","disabled","class","click","HTMLButtonElement","onClick","children","variants","Record","default","destructive","outline","secondary","ghost","link","sizes","sm","lg","icon","Button","template","props","__id","id","String","trim","events","__evts","__geaEvtsResult","e","targetComponent","__event_click_0","handleClick","__onPropChange","key","value","__el","__boundValue","__newClass","className","undefined","removeAttribute","__newAttr","getAttribute","setAttribute","innerHTML","instantiateChildComponents_","parentComponent","mountCompiledChildComponents_"],"sources":["../src/components/button.tsx"],"sourcesContent":["import { Component } from '@geajs/core'\nimport type { MouseEventHandler, ReactNode } from 'react'\nimport { cn } from '../utils/cn'\n\nexport type ButtonVariant = 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'\nexport type ButtonSize = 'default' | 'sm' | 'lg' | 'icon'\n\nexport interface ButtonProps {\n variant?: ButtonVariant | (string & {})\n size?: ButtonSize | (string & {})\n type?: 'button' | 'submit' | 'reset'\n disabled?: boolean\n class?: string\n click?: MouseEventHandler<HTMLButtonElement>\n onClick?: MouseEventHandler<HTMLButtonElement>\n children?: ReactNode\n}\n\nconst variants: Record<string, string> = {\n default: 'bg-primary text-primary-foreground shadow-sm hover:bg-primary/90',\n destructive: 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',\n outline: 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground',\n secondary: 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n}\n\nconst sizes: Record<string, string> = {\n default: 'h-9 px-4 py-2',\n sm: 'h-8 rounded-md px-3 text-xs',\n lg: 'h-10 rounded-md px-8',\n icon: 'h-9 w-9',\n}\n\nexport default class Button extends Component<ButtonProps> {\n template(props: ButtonProps) {\n const variant = variants[props.variant || 'default'] || variants.default\n const size = sizes[props.size || 'default'] || sizes.default\n const handleClick = props.click || props.onClick\n\n return (\n <button\n class={cn(\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n variant,\n size,\n props.class,\n )}\n type={props.type || 'button'}\n disabled={props.disabled}\n click={(e: any) => handleClick?.(e)}\n >\n {props.children}\n </button>\n )\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"button.mjs","names":["Component","GEA_ELEMENT","GEA_ON_PROP_CHANGE","GEA_PATCH_NODE","GEA_INSTANTIATE_CHILD_COMPONENTS","GEA_MOUNT_COMPILED_CHILD_COMPONENTS","MouseEventHandler","ReactNode","cn","ButtonVariant","ButtonSize","ButtonProps","variant","size","type","disabled","class","click","HTMLButtonElement","onClick","children","variants","Record","default","destructive","outline","secondary","ghost","link","sizes","sm","lg","icon","Button","__geaTagName","template","props","__id","id","String","trim","events","__evts","__geaEvtsResult","__event_click_0","e","targetComponent","handleClick","key","value","__el","__boundValue","__newClass","replace","className","__av","removeAttribute","__newAttr","getAttribute","setAttribute","__tw","document","createElement","innerHTML","__newEl","content","firstElementChild","__existEl","childNodes","length","constructor","parentComponent"],"sources":["../src/components/button.tsx"],"sourcesContent":["import { Component } from '@geajs/core'\nimport type { MouseEventHandler, ReactNode } from 'react'\nimport { cn } from '../utils/cn'\n\nexport type ButtonVariant = 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'\nexport type ButtonSize = 'default' | 'sm' | 'lg' | 'icon'\n\nexport interface ButtonProps {\n variant?: ButtonVariant | (string & {})\n size?: ButtonSize | (string & {})\n type?: 'button' | 'submit' | 'reset'\n disabled?: boolean\n class?: string\n click?: MouseEventHandler<HTMLButtonElement>\n onClick?: MouseEventHandler<HTMLButtonElement>\n children?: ReactNode\n}\n\nconst variants: Record<string, string> = {\n default: 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90',\n destructive: 'bg-destructive text-destructive-foreground shadow-xs hover:bg-destructive/90',\n outline: 'border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground',\n secondary: 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n}\n\nconst sizes: Record<string, string> = {\n default: 'h-9 px-4 py-2',\n sm: 'h-8 rounded-md px-3 text-xs',\n lg: 'h-10 rounded-md px-8',\n icon: 'h-9 w-9',\n}\n\nexport default class Button extends Component<ButtonProps> {\n template(props: ButtonProps) {\n const variant = variants[props.variant || 'default'] || variants.default\n const size = sizes[props.size || 'default'] || sizes.default\n const handleClick = props.click || props.onClick\n\n return (\n <button\n class={cn(\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50',\n variant,\n size,\n props.class,\n )}\n type={props.type || 'button'}\n disabled={props.disabled}\n click={(e: any) => handleClick?.(e)}\n >\n {props.children}\n </button>\n )\n }\n}\n"],"mappings":"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"}
package/dist/card.mjs CHANGED
@@ -1,164 +1,206 @@
1
1
  import { t as cn } from "./cn.mjs";
2
- import { Component, GEA_CTOR_TAG_NAME, GEA_ELEMENT } from "@geajs/core";
2
+ import { Component, GEA_ELEMENT, GEA_INSTANTIATE_CHILD_COMPONENTS, GEA_MOUNT_COMPILED_CHILD_COMPONENTS, GEA_ON_PROP_CHANGE, GEA_PATCH_NODE } from "@geajs/core";
3
3
  //#region src/components/card.tsx
4
4
  var Card = class extends Component {
5
5
  static {
6
- this[GEA_CTOR_TAG_NAME] = "card";
6
+ this.__geaTagName = "gea-card";
7
7
  }
8
8
  template(props) {
9
9
  return `<div id="${this.id}"${cn("rounded-xl border bg-card text-card-foreground shadow", props.class) == null || cn("rounded-xl border bg-card text-card-foreground shadow", props.class) === false ? "" : ` class="${(cn("rounded-xl border bg-card text-card-foreground shadow", props.class) != null ? String(cn("rounded-xl border bg-card text-card-foreground shadow", props.class)) : "").trim()}"`}>${props.children}</div>`;
10
10
  }
11
- __onPropChange(key, value) {
11
+ [GEA_ON_PROP_CHANGE](key, value) {
12
12
  if (key === "class") {
13
13
  const __el = this[GEA_ELEMENT];
14
14
  this.props;
15
15
  const __boundValue = cn("rounded-xl border bg-card text-card-foreground shadow", value);
16
16
  if (__el) {
17
- const __newClass = (__boundValue != null ? String(__boundValue) : "").trim();
17
+ const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
18
18
  if (__el.className !== __newClass) __el.className = __newClass;
19
19
  }
20
20
  }
21
21
  if (key === "children") {
22
22
  const __el = this[GEA_ELEMENT];
23
- if (__el && __el.innerHTML !== value) {
24
- __el.innerHTML = value;
25
- this.instantiateChildComponents_();
26
- if (this.parentComponent) this.parentComponent.mountCompiledChildComponents_();
23
+ if (__el) {
24
+ const __tw = document.createElement("template");
25
+ __tw.innerHTML = value;
26
+ const __newEl = __tw.content.firstElementChild;
27
+ const __existEl = __el.firstElementChild;
28
+ if (__newEl && __existEl && __tw.content.childNodes.length === 1) this.constructor[GEA_PATCH_NODE](__existEl, __newEl, true);
29
+ else if (__el.innerHTML !== value) {
30
+ __el.innerHTML = value;
31
+ this[GEA_INSTANTIATE_CHILD_COMPONENTS]();
32
+ if (this.parentComponent) this.parentComponent[GEA_MOUNT_COMPILED_CHILD_COMPONENTS]();
33
+ }
27
34
  }
28
35
  }
29
36
  }
30
37
  };
31
38
  var CardHeader = class extends Component {
32
39
  static {
33
- this[GEA_CTOR_TAG_NAME] = "card-header";
40
+ this.__geaTagName = "card-header";
34
41
  }
35
42
  template(props) {
36
43
  return `<div id="${this.id}"${cn("flex flex-col space-y-1.5 p-6", props.class) == null || cn("flex flex-col space-y-1.5 p-6", props.class) === false ? "" : ` class="${(cn("flex flex-col space-y-1.5 p-6", props.class) != null ? String(cn("flex flex-col space-y-1.5 p-6", props.class)) : "").trim()}"`}>${props.children}</div>`;
37
44
  }
38
- __onPropChange(key, value) {
45
+ [GEA_ON_PROP_CHANGE](key, value) {
39
46
  if (key === "class") {
40
47
  const __el = this[GEA_ELEMENT];
41
48
  this.props;
42
49
  const __boundValue = cn("flex flex-col space-y-1.5 p-6", value);
43
50
  if (__el) {
44
- const __newClass = (__boundValue != null ? String(__boundValue) : "").trim();
51
+ const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
45
52
  if (__el.className !== __newClass) __el.className = __newClass;
46
53
  }
47
54
  }
48
55
  if (key === "children") {
49
56
  const __el = this[GEA_ELEMENT];
50
- if (__el && __el.innerHTML !== value) {
51
- __el.innerHTML = value;
52
- this.instantiateChildComponents_();
53
- if (this.parentComponent) this.parentComponent.mountCompiledChildComponents_();
57
+ if (__el) {
58
+ const __tw = document.createElement("template");
59
+ __tw.innerHTML = value;
60
+ const __newEl = __tw.content.firstElementChild;
61
+ const __existEl = __el.firstElementChild;
62
+ if (__newEl && __existEl && __tw.content.childNodes.length === 1) this.constructor[GEA_PATCH_NODE](__existEl, __newEl, true);
63
+ else if (__el.innerHTML !== value) {
64
+ __el.innerHTML = value;
65
+ this[GEA_INSTANTIATE_CHILD_COMPONENTS]();
66
+ if (this.parentComponent) this.parentComponent[GEA_MOUNT_COMPILED_CHILD_COMPONENTS]();
67
+ }
54
68
  }
55
69
  }
56
70
  }
57
71
  };
58
72
  var CardTitle = class extends Component {
59
73
  static {
60
- this[GEA_CTOR_TAG_NAME] = "card-title";
74
+ this.__geaTagName = "card-title";
61
75
  }
62
76
  template(props) {
63
77
  return `<h3 id="${this.id}"${cn("font-semibold leading-none tracking-tight", props.class) == null || cn("font-semibold leading-none tracking-tight", props.class) === false ? "" : ` class="${(cn("font-semibold leading-none tracking-tight", props.class) != null ? String(cn("font-semibold leading-none tracking-tight", props.class)) : "").trim()}"`}>${props.children}</h3>`;
64
78
  }
65
- __onPropChange(key, value) {
79
+ [GEA_ON_PROP_CHANGE](key, value) {
66
80
  if (key === "class") {
67
81
  const __el = this[GEA_ELEMENT];
68
82
  this.props;
69
83
  const __boundValue = cn("font-semibold leading-none tracking-tight", value);
70
84
  if (__el) {
71
- const __newClass = (__boundValue != null ? String(__boundValue) : "").trim();
85
+ const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
72
86
  if (__el.className !== __newClass) __el.className = __newClass;
73
87
  }
74
88
  }
75
89
  if (key === "children") {
76
90
  const __el = this[GEA_ELEMENT];
77
- if (__el && __el.innerHTML !== value) {
78
- __el.innerHTML = value;
79
- this.instantiateChildComponents_();
80
- if (this.parentComponent) this.parentComponent.mountCompiledChildComponents_();
91
+ if (__el) {
92
+ const __tw = document.createElement("template");
93
+ __tw.innerHTML = value;
94
+ const __newEl = __tw.content.firstElementChild;
95
+ const __existEl = __el.firstElementChild;
96
+ if (__newEl && __existEl && __tw.content.childNodes.length === 1) this.constructor[GEA_PATCH_NODE](__existEl, __newEl, true);
97
+ else if (__el.innerHTML !== value) {
98
+ __el.innerHTML = value;
99
+ this[GEA_INSTANTIATE_CHILD_COMPONENTS]();
100
+ if (this.parentComponent) this.parentComponent[GEA_MOUNT_COMPILED_CHILD_COMPONENTS]();
101
+ }
81
102
  }
82
103
  }
83
104
  }
84
105
  };
85
106
  var CardDescription = class extends Component {
86
107
  static {
87
- this[GEA_CTOR_TAG_NAME] = "card-description";
108
+ this.__geaTagName = "card-description";
88
109
  }
89
110
  template(props) {
90
111
  return `<p id="${this.id}"${cn("text-sm text-muted-foreground", props.class) == null || cn("text-sm text-muted-foreground", props.class) === false ? "" : ` class="${(cn("text-sm text-muted-foreground", props.class) != null ? String(cn("text-sm text-muted-foreground", props.class)) : "").trim()}"`}>${props.children}</p>`;
91
112
  }
92
- __onPropChange(key, value) {
113
+ [GEA_ON_PROP_CHANGE](key, value) {
93
114
  if (key === "class") {
94
115
  const __el = this[GEA_ELEMENT];
95
116
  this.props;
96
117
  const __boundValue = cn("text-sm text-muted-foreground", value);
97
118
  if (__el) {
98
- const __newClass = (__boundValue != null ? String(__boundValue) : "").trim();
119
+ const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
99
120
  if (__el.className !== __newClass) __el.className = __newClass;
100
121
  }
101
122
  }
102
123
  if (key === "children") {
103
124
  const __el = this[GEA_ELEMENT];
104
- if (__el && __el.innerHTML !== value) {
105
- __el.innerHTML = value;
106
- this.instantiateChildComponents_();
107
- if (this.parentComponent) this.parentComponent.mountCompiledChildComponents_();
125
+ if (__el) {
126
+ const __tw = document.createElement("template");
127
+ __tw.innerHTML = value;
128
+ const __newEl = __tw.content.firstElementChild;
129
+ const __existEl = __el.firstElementChild;
130
+ if (__newEl && __existEl && __tw.content.childNodes.length === 1) this.constructor[GEA_PATCH_NODE](__existEl, __newEl, true);
131
+ else if (__el.innerHTML !== value) {
132
+ __el.innerHTML = value;
133
+ this[GEA_INSTANTIATE_CHILD_COMPONENTS]();
134
+ if (this.parentComponent) this.parentComponent[GEA_MOUNT_COMPILED_CHILD_COMPONENTS]();
135
+ }
108
136
  }
109
137
  }
110
138
  }
111
139
  };
112
140
  var CardContent = class extends Component {
113
141
  static {
114
- this[GEA_CTOR_TAG_NAME] = "card-content";
142
+ this.__geaTagName = "card-content";
115
143
  }
116
144
  template(props) {
117
145
  return `<div id="${this.id}"${cn("p-6 pt-0", props.class) == null || cn("p-6 pt-0", props.class) === false ? "" : ` class="${(cn("p-6 pt-0", props.class) != null ? String(cn("p-6 pt-0", props.class)) : "").trim()}"`}>${props.children}</div>`;
118
146
  }
119
- __onPropChange(key, value) {
147
+ [GEA_ON_PROP_CHANGE](key, value) {
120
148
  if (key === "class") {
121
149
  const __el = this[GEA_ELEMENT];
122
150
  this.props;
123
151
  const __boundValue = cn("p-6 pt-0", value);
124
152
  if (__el) {
125
- const __newClass = (__boundValue != null ? String(__boundValue) : "").trim();
153
+ const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
126
154
  if (__el.className !== __newClass) __el.className = __newClass;
127
155
  }
128
156
  }
129
157
  if (key === "children") {
130
158
  const __el = this[GEA_ELEMENT];
131
- if (__el && __el.innerHTML !== value) {
132
- __el.innerHTML = value;
133
- this.instantiateChildComponents_();
134
- if (this.parentComponent) this.parentComponent.mountCompiledChildComponents_();
159
+ if (__el) {
160
+ const __tw = document.createElement("template");
161
+ __tw.innerHTML = value;
162
+ const __newEl = __tw.content.firstElementChild;
163
+ const __existEl = __el.firstElementChild;
164
+ if (__newEl && __existEl && __tw.content.childNodes.length === 1) this.constructor[GEA_PATCH_NODE](__existEl, __newEl, true);
165
+ else if (__el.innerHTML !== value) {
166
+ __el.innerHTML = value;
167
+ this[GEA_INSTANTIATE_CHILD_COMPONENTS]();
168
+ if (this.parentComponent) this.parentComponent[GEA_MOUNT_COMPILED_CHILD_COMPONENTS]();
169
+ }
135
170
  }
136
171
  }
137
172
  }
138
173
  };
139
174
  var CardFooter = class extends Component {
140
175
  static {
141
- this[GEA_CTOR_TAG_NAME] = "card-footer";
176
+ this.__geaTagName = "card-footer";
142
177
  }
143
178
  template(props) {
144
179
  return `<div id="${this.id}"${cn("flex items-center p-6 pt-0", props.class) == null || cn("flex items-center p-6 pt-0", props.class) === false ? "" : ` class="${(cn("flex items-center p-6 pt-0", props.class) != null ? String(cn("flex items-center p-6 pt-0", props.class)) : "").trim()}"`}>${props.children}</div>`;
145
180
  }
146
- __onPropChange(key, value) {
181
+ [GEA_ON_PROP_CHANGE](key, value) {
147
182
  if (key === "class") {
148
183
  const __el = this[GEA_ELEMENT];
149
184
  this.props;
150
185
  const __boundValue = cn("flex items-center p-6 pt-0", value);
151
186
  if (__el) {
152
- const __newClass = (__boundValue != null ? String(__boundValue) : "").trim();
187
+ const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
153
188
  if (__el.className !== __newClass) __el.className = __newClass;
154
189
  }
155
190
  }
156
191
  if (key === "children") {
157
192
  const __el = this[GEA_ELEMENT];
158
- if (__el && __el.innerHTML !== value) {
159
- __el.innerHTML = value;
160
- this.instantiateChildComponents_();
161
- if (this.parentComponent) this.parentComponent.mountCompiledChildComponents_();
193
+ if (__el) {
194
+ const __tw = document.createElement("template");
195
+ __tw.innerHTML = value;
196
+ const __newEl = __tw.content.firstElementChild;
197
+ const __existEl = __el.firstElementChild;
198
+ if (__newEl && __existEl && __tw.content.childNodes.length === 1) this.constructor[GEA_PATCH_NODE](__existEl, __newEl, true);
199
+ else if (__el.innerHTML !== value) {
200
+ __el.innerHTML = value;
201
+ this[GEA_INSTANTIATE_CHILD_COMPONENTS]();
202
+ if (this.parentComponent) this.parentComponent[GEA_MOUNT_COMPILED_CHILD_COMPONENTS]();
203
+ }
162
204
  }
163
205
  }
164
206
  }
package/dist/card.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"card.mjs","names":["Component","GEA_RENDERED","GEA_ELEMENT","GEA_MAPS","GEA_CONDS","GEA_RESET_ELS","GEA_OBSERVE","GEA_OBSERVE_LIST","GEA_EL","GEA_UPDATE_TEXT","GEA_REQUEST_RENDER","GEA_UPDATE_PROPS","GEA_SYNC_MAP","GEA_REGISTER_MAP","GEA_PATCH_COND","GEA_REGISTER_COND","GEA_REFRESH_LIST","GEA_RECONCILE_LIST","GEA_ENSURE_ARRAY_CONFIGS","GEA_APPLY_LIST_CHANGES","GEA_SWAP_CHILD","GEA_SWAP_STATE_CHILDREN","GEA_CHILD","GEA_LIST_CONFIG_REFRESHING","GEA_DOM_KEY","GEA_DOM_ITEM","GEA_DOM_PROPS","GEA_MAP_CONFIG_TPL","GEA_MAP_CONFIG_PREV","GEA_MAP_CONFIG_COUNT","geaCondPatchedSymbol","geaCondValueSymbol","geaObservePrevSymbol","geaPrevGuardSymbol","GEA_SETUP_LOCAL_STATE_OBSERVERS","geaSanitizeAttr","geaEscapeHtml","GEA_CTOR_TAG_NAME","cn","Card","template","props","__id","id","class","String","trim","children","__onPropChange","key","value","__el","__boundValue","__newClass","className","innerHTML","instantiateChildComponents_","parentComponent","mountCompiledChildComponents_","CardHeader","CardTitle","CardDescription","CardContent","CardFooter"],"sources":["../src/components/card.tsx"],"sourcesContent":["import { Component } from '@geajs/core'\nimport { cn } from '../utils/cn'\n\nexport class Card extends Component {\n template(props: any) {\n return <div class={cn('rounded-xl border bg-card text-card-foreground shadow', props.class)}>{props.children}</div>\n }\n}\n\nexport class CardHeader extends Component {\n template(props: any) {\n return <div class={cn('flex flex-col space-y-1.5 p-6', props.class)}>{props.children}</div>\n }\n}\n\nexport class CardTitle extends Component {\n template(props: any) {\n return <h3 class={cn('font-semibold leading-none tracking-tight', props.class)}>{props.children}</h3>\n }\n}\n\nexport class CardDescription extends Component {\n template(props: any) {\n return <p class={cn('text-sm text-muted-foreground', props.class)}>{props.children}</p>\n }\n}\n\nexport class CardContent extends Component {\n template(props: any) {\n return <div class={cn('p-6 pt-0', props.class)}>{props.children}</div>\n }\n}\n\nexport class CardFooter extends Component {\n template(props: any) {\n return <div class={cn('flex items-center p-6 pt-0', props.class)}>{props.children}</div>\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"card.mjs","names":["Component","GEA_ON_PROP_CHANGE","GEA_ELEMENT","GEA_PATCH_NODE","GEA_INSTANTIATE_CHILD_COMPONENTS","GEA_MOUNT_COMPILED_CHILD_COMPONENTS","cn","Card","__geaTagName","template","props","__id","id","class","String","trim","children","key","value","__el","__boundValue","__newClass","replace","className","__tw","document","createElement","innerHTML","__newEl","content","firstElementChild","__existEl","childNodes","length","constructor","parentComponent","CardHeader","CardTitle","CardDescription","CardContent","CardFooter"],"sources":["../src/components/card.tsx"],"sourcesContent":["import { Component } from '@geajs/core'\nimport { cn } from '../utils/cn'\n\nexport class Card extends Component {\n template(props: any) {\n return <div class={cn('rounded-xl border bg-card text-card-foreground shadow', props.class)}>{props.children}</div>\n }\n}\n\nexport class CardHeader extends Component {\n template(props: any) {\n return <div class={cn('flex flex-col space-y-1.5 p-6', props.class)}>{props.children}</div>\n }\n}\n\nexport class CardTitle extends Component {\n template(props: any) {\n return <h3 class={cn('font-semibold leading-none tracking-tight', props.class)}>{props.children}</h3>\n }\n}\n\nexport class CardDescription extends Component {\n template(props: any) {\n return <p class={cn('text-sm text-muted-foreground', props.class)}>{props.children}</p>\n }\n}\n\nexport class CardContent extends Component {\n template(props: any) {\n return <div class={cn('p-6 pt-0', props.class)}>{props.children}</div>\n }\n}\n\nexport class CardFooter extends Component {\n template(props: any) {\n return <div class={cn('flex items-center p-6 pt-0', props.class)}>{props.children}</div>\n }\n}\n"],"mappings":"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"}
package/dist/checkbox.mjs CHANGED
@@ -1,11 +1,11 @@
1
1
  import { t as ZagComponent } from "./zag-component.mjs";
2
- import { Component, GEA_CTOR_TAG_NAME, GEA_ELEMENT, GEA_PATCH_COND, GEA_REGISTER_COND, geaCondValueSymbol, geaEscapeHtml } from "@geajs/core";
2
+ import { Component, GEA_ELEMENT, GEA_ON_PROP_CHANGE, GEA_PATCH_COND, GEA_REGISTER_COND, geaCondValueSymbol, geaEscapeHtml } from "@geajs/core";
3
3
  import { normalizeProps } from "@zag-js/vanilla";
4
4
  import * as checkbox from "@zag-js/checkbox";
5
5
  //#region src/components/checkbox.tsx
6
6
  var Checkbox = class extends ZagComponent {
7
7
  static {
8
- this[GEA_CTOR_TAG_NAME] = "checkbox";
8
+ this.__geaTagName = "gea-checkbox";
9
9
  }
10
10
  constructor(...args) {
11
11
  super(...args);
@@ -59,15 +59,15 @@ var Checkbox = class extends ZagComponent {
59
59
  template(props) {
60
60
  const __id = this.id;
61
61
  Component._register(ZagComponent, "zag-component");
62
- return `<label id="${__id}" data-part="root" class="${`checkbox-root inline-flex items-center gap-2 cursor-pointer ${props.class || ""}`.trim()}"><input data-part="hidden-input" type="checkbox" class="sr-only" /><div data-part="control" class="checkbox-control h-4 w-4 shrink-0 rounded-sm border border-primary shadow transition-colors data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground"><span data-part="indicator" class="checkbox-indicator flex items-center justify-center text-current h-full w-full"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="h-3 w-3"><polyline points="20 6 9 17 4 12"></polyline></svg></span></div><!--${__id + "-c0"}-->${props.label && `<span data-part="label" class="checkbox-label text-sm font-medium leading-none">${geaEscapeHtml(String(props.label))}</span>` || ""}<!--${__id + "-c0-end"}--></label>`;
62
+ return `<label id="${__id}" data-part="root" class="${`checkbox-root inline-flex items-center gap-2 cursor-pointer ${props.class || ""}`.trim()}"><input data-part="hidden-input" type="checkbox" class="sr-only" /><div data-part="control" class="checkbox-control h-4 w-4 shrink-0 rounded-xs border border-primary shadow transition-colors data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground"><span data-part="indicator" class="checkbox-indicator flex items-center justify-center text-current h-full w-full"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" class="h-3 w-3"><polyline points="20 6 9 17 4 12"></polyline></svg></span></div><!--${__id + "-c0"}-->${props.label && `<span data-part="label" class="checkbox-label text-sm font-medium leading-none">${geaEscapeHtml(String(props.label))}</span>` || ""}<!--${__id + "-c0-end"}--></label>`;
63
63
  }
64
- __onPropChange(key, value) {
64
+ [GEA_ON_PROP_CHANGE](key, value) {
65
65
  if (key === "class") {
66
66
  const __el = this[GEA_ELEMENT];
67
67
  this.props;
68
68
  const __boundValue = `checkbox-root inline-flex items-center gap-2 cursor-pointer ${value || ""}`;
69
69
  if (__el) {
70
- const __newClass = (__boundValue != null ? String(__boundValue) : "").trim();
70
+ const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
71
71
  if (__el.className !== __newClass) __el.className = __newClass;
72
72
  }
73
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox.mjs","names":["checkbox","normalizeProps","ZagComponent","Checkbox","GEA_CTOR_TAG_NAME","constructor","args","props","geaCondValueSymbol","label","GEA_REGISTER_COND","geaEscapeHtml","String","checked","createMachine","_props","machine","getMachineProps","id","defaultChecked","disabled","invalid","required","readOnly","name","form","value","onCheckedChange","details","CheckedChangeDetails","connectApi","service","connect","getSpreadMap","syncState","api","checkedState","template","__id","Component","_register","class","trim","__onPropChange","key","__el","GEA_ELEMENT","__boundValue","__newClass","className","GEA_PATCH_COND"],"sources":["../src/components/checkbox.tsx"],"sourcesContent":["import * as checkbox from '@zag-js/checkbox'\nimport { normalizeProps } from '@zag-js/vanilla'\nimport ZagComponent from '../primitives/zag-component'\n\nexport default class Checkbox extends ZagComponent {\n checked: boolean | 'indeterminate' = false\n\n createMachine(_props: any): any {\n return checkbox.machine\n }\n\n getMachineProps(props: any) {\n return {\n id: this.id,\n checked: props.checked,\n defaultChecked: props.defaultChecked,\n disabled: props.disabled,\n invalid: props.invalid,\n required: props.required,\n readOnly: props.readOnly,\n name: props.name,\n form: props.form,\n value: props.value ?? 'on',\n onCheckedChange: (details: checkbox.CheckedChangeDetails) => {\n this.checked = details.checked\n props.onCheckedChange?.(details)\n },\n }\n }\n\n connectApi(service: any) {\n return checkbox.connect(service, normalizeProps)\n }\n\n getSpreadMap() {\n return {\n '[data-part=\"root\"]': 'getRootProps',\n '[data-part=\"label\"]': 'getLabelProps',\n '[data-part=\"control\"]': 'getControlProps',\n '[data-part=\"indicator\"]': 'getIndicatorProps',\n '[data-part=\"hidden-input\"]': 'getHiddenInputProps',\n }\n }\n\n syncState(api: any) {\n this.checked = api.checkedState\n }\n\n template(props: any) {\n return (\n <label\n data-part=\"root\"\n class={`checkbox-root inline-flex items-center gap-2 cursor-pointer ${props.class || ''}`}\n >\n <input data-part=\"hidden-input\" type=\"checkbox\" class=\"sr-only\" />\n <div\n data-part=\"control\"\n class=\"checkbox-control h-4 w-4 shrink-0 rounded-sm border border-primary shadow transition-colors data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\"\n >\n <span\n data-part=\"indicator\"\n class=\"checkbox-indicator flex items-center justify-center text-current h-full w-full\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"h-3 w-3\"\n >\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n </span>\n </div>\n {props.label && (\n <span data-part=\"label\" class=\"checkbox-label text-sm font-medium leading-none\">\n {props.label}\n </span>\n )}\n </label>\n )\n }\n}\n"],"mappings":";;;;;AAIA,IAAqBG,WAArB,cAAsCD,aAAa;;OAAAE,qBAAA;;CAHnDC,YAAsB,GAAGC,MAAI;AAAA,QAAA,GAAAA,KAAA;iBAIU;AA2ClB,OAAAC;AAAA,OAAAC,mBAAA,EAAA,IAAA,CAAA,CAAA,KAAAD,MA6BNE;AAAK,OAAAC,mBAAA,GAAA,YAAA;AA7BC,QAAAH;AAAA,UAAA,KAAAA,MA6BNE;WAAK;AA7BC,QAAAF;AAAA,UAAA,mFAAAI,cAAAC,OAAA,KAAAL,MA+BFE,MAAK,CAAA,CAAA;KAAA,KAAA;;CAxEtBK,cAAcC,QAAkB;AAC9B,SAAOf,SAASgB;;CAGlBC,gBAAgBV,OAAY;AAC1B,SAAO;GACLW,IAAI,KAAKA;GACTL,SAASN,MAAMM;GACfM,gBAAgBZ,MAAMY;GACtBC,UAAUb,MAAMa;GAChBC,SAASd,MAAMc;GACfC,UAAUf,MAAMe;GAChBC,UAAUhB,MAAMgB;GAChBC,MAAMjB,MAAMiB;GACZC,MAAMlB,MAAMkB;GACZC,OAAOnB,MAAMmB,SAAS;GACtBC,kBAAkBC,YAA2C;AAC3D,SAAKf,UAAUe,QAAQf;AACvBN,UAAMoB,kBAAkBC,QAAQ;;GAEnC;;CAGHE,WAAWC,SAAc;AACvB,SAAO/B,SAASgC,QAAQD,SAAS9B,eAAe;;CAGlDgC,eAAe;AACb,SAAO;GACL,wBAAsB;GACtB,yBAAuB;GACvB,2BAAyB;GACzB,6BAA2B;GAC3B,gCAA8B;GAC/B;;CAGHC,UAAUC,KAAU;AAClB,OAAKtB,UAAUsB,IAAIC;;CAGrBC,SAAS9B,OAAY;EAAA,MAAA+B,OAAA,KAAApB;AAAAqB,YAAAC,UAAAtC,cAAA,gBAAA;AACnB,SAAA,cAAAoC,KAAA,4BAGW,+DAA+D/B,MAAMkC,SAAS,KAAIC,MAAA,CAAA,qnBAAAJ,OAAA,MAAA,KAyBxF/B,MAAME,SAAK,mFAAAE,cAAAC,OAEPL,MAAME,MAAK,CAAA,CAAA,YAAA,GAAA,MAAA6B,OAAA,UAAA;;CA9ExBK,eAAsBC,KAAKlB,OAAK;AAAA,MAAAkB,QAAA,SAAA;GAAA,MAAAC,OAAA,KAAAC;AA+CX,QAAAvC;GAAA,MAAAwC,eAAA,+DAAArB,SAIwE;AAAE,OAAAmB,MAAA;IAAA,MAAAG,cAAAD,gBAAA,OAAAnC,OAAAmC,aAAA,GAAA,IAAAL,MAAA;AAAA,QAAAG,KAAAI,cAAAD,WAAAH,MAAAI,YAAAD;;;AAAA,MAAAJ,QAAA,QAAA,MAAAM,gBAAA,EAAA"}
1
+ {"version":3,"file":"checkbox.mjs","names":["Component","geaCondValueSymbol","GEA_REGISTER_COND","geaEscapeHtml","GEA_ON_PROP_CHANGE","GEA_ELEMENT","GEA_PATCH_COND","checkbox","normalizeProps","ZagComponent","Checkbox","__geaTagName","constructor","args","props","label","String","checked","createMachine","_props","machine","getMachineProps","id","defaultChecked","disabled","invalid","required","readOnly","name","form","value","onCheckedChange","details","CheckedChangeDetails","connectApi","service","connect","getSpreadMap","syncState","api","checkedState","template","__id","_register","class","trim","key","__el","__boundValue","__newClass","replace","className"],"sources":["../src/components/checkbox.tsx"],"sourcesContent":["import * as checkbox from '@zag-js/checkbox'\nimport { normalizeProps } from '@zag-js/vanilla'\nimport ZagComponent from '../primitives/zag-component'\n\nexport default class Checkbox extends ZagComponent {\n checked: boolean | 'indeterminate' = false\n\n createMachine(_props: any): any {\n return checkbox.machine\n }\n\n getMachineProps(props: any) {\n return {\n id: this.id,\n checked: props.checked,\n defaultChecked: props.defaultChecked,\n disabled: props.disabled,\n invalid: props.invalid,\n required: props.required,\n readOnly: props.readOnly,\n name: props.name,\n form: props.form,\n value: props.value ?? 'on',\n onCheckedChange: (details: checkbox.CheckedChangeDetails) => {\n this.checked = details.checked\n props.onCheckedChange?.(details)\n },\n }\n }\n\n connectApi(service: any) {\n return checkbox.connect(service, normalizeProps)\n }\n\n getSpreadMap() {\n return {\n '[data-part=\"root\"]': 'getRootProps',\n '[data-part=\"label\"]': 'getLabelProps',\n '[data-part=\"control\"]': 'getControlProps',\n '[data-part=\"indicator\"]': 'getIndicatorProps',\n '[data-part=\"hidden-input\"]': 'getHiddenInputProps',\n }\n }\n\n syncState(api: any) {\n this.checked = api.checkedState\n }\n\n template(props: any) {\n return (\n <label\n data-part=\"root\"\n class={`checkbox-root inline-flex items-center gap-2 cursor-pointer ${props.class || ''}`}\n >\n <input data-part=\"hidden-input\" type=\"checkbox\" class=\"sr-only\" />\n <div\n data-part=\"control\"\n class=\"checkbox-control h-4 w-4 shrink-0 rounded-xs border border-primary shadow transition-colors data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground\"\n >\n <span\n data-part=\"indicator\"\n class=\"checkbox-indicator flex items-center justify-center text-current h-full w-full\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"3\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n class=\"h-3 w-3\"\n >\n <polyline points=\"20 6 9 17 4 12\"></polyline>\n </svg>\n </span>\n </div>\n {props.label && (\n <span data-part=\"label\" class=\"checkbox-label text-sm font-medium leading-none\">\n {props.label}\n </span>\n )}\n </label>\n )\n }\n}\n"],"mappings":";;;;;AAIA,IAAqBU,WAArB,cAAsCD,aAAa;;sBAAA;;CAHnDG,YAAsB,GAAGC,MAAI;AAA7B,QAAM,GAAGA,KAAK;iBAIyB;AA2ClB,OAAAC;AAAA,OAAAb,mBAAA,EAAA,IAAA,CAAA,CA/CrB,KAAKa,MA4EUC;AA5Ef,OAAIb,mBAAuB,GAAA,YAAA;AA+CN,QAAAY;AAAA,UA/CrB,KAAKA,MA4EUC;WAAK;AA7BC,QAAAD;AAAA,UAAA,mFA/CrBX,cAAca,OAAd,KAAKF,MA8EcC,MA9EwB,CAAC,CAAA;KAAA,KAAA;;CAM1CG,cAAcC,QAAkB;AAC9B,SAAOZ,SAASa;;CAGlBC,gBAAgBP,OAAY;AAC1B,SAAO;GACLQ,IAAI,KAAKA;GACTL,SAASH,MAAMG;GACfM,gBAAgBT,MAAMS;GACtBC,UAAUV,MAAMU;GAChBC,SAASX,MAAMW;GACfC,UAAUZ,MAAMY;GAChBC,UAAUb,MAAMa;GAChBC,MAAMd,MAAMc;GACZC,MAAMf,MAAMe;GACZC,OAAOhB,MAAMgB,SAAS;GACtBC,kBAAkBC,YAA2C;AAC3D,SAAKf,UAAUe,QAAQf;AACvBH,UAAMiB,kBAAkBC,QAAQ;;GAEnC;;CAGHE,WAAWC,SAAc;AACvB,SAAO5B,SAAS6B,QAAQD,SAAS3B,eAAe;;CAGlD6B,eAAe;AACb,SAAO;GACL,wBAAsB;GACtB,yBAAuB;GACvB,2BAAyB;GACzB,6BAA2B;GAC3B,gCAA8B;GAC/B;;CAGHC,UAAUC,KAAU;AAClB,OAAKtB,UAAUsB,IAAIC;;CAGrBC,SAAS3B,OAAY;EAAA,MAAA4B,OAAA,KAAApB;AAAAtB,YAAA2C,UAAAlC,cAAA,gBAAA;AACnB,SAAA,cAAAiC,KAAA,4BAGW,+DAA+D5B,MAAM8B,SAAS,KAAIC,MAAA,CAAA,qnBAnDjGH,OAAU,MAAK,KA4EN5B,MAAMC,SAAK,mFA5EpBZ,cAAca,OA8EDF,MAAMC,MA9EwB,CAAC,CAAA,YAAA,GAAA,MAA5C2B,OAAU,UAAS;;CAAnB,CAAAtC,oBAAwB0C,KAAKhB,OAAK;AAAA,MAAAgB,QAAA,SAAA;GAAA,MAAAC,OAAA,KAAA1C;AA+Cb,QAAAS;GAAA,MAAAkC,eAIN,+DAA+DlB,SAAe;AAAI,OAAAiB,MAnDjG;IACM,MAAME,aADXjC,OAAOgC,gBAAyB,GAAG,CAAEH,MAAM,CAACK,QAAQ,QAAQ,IACf;AACxC,QAAIH,KAAsBI,cAAcF,WAAYF,MAAsBI,YAAYF;;;AACvF,MAAAH,QAAA,QAHL,MAAIxC,gBAAwB,EAAE"}
@@ -1,11 +1,11 @@
1
1
  import { t as ZagComponent } from "./zag-component.mjs";
2
- import { Component, GEA_CTOR_TAG_NAME, GEA_ELEMENT, GEA_OBSERVE, GEA_PATCH_COND, GEA_REGISTER_COND, GEA_RENDERED, GEA_SETUP_LOCAL_STATE_OBSERVERS, geaCondPatchedSymbol, geaCondValueSymbol, geaEscapeHtml } from "@geajs/core";
2
+ import { Component, GEA_ELEMENT, GEA_OBSERVE, GEA_ON_PROP_CHANGE, GEA_PATCH_COND, GEA_REGISTER_COND, GEA_RENDERED, GEA_SETUP_LOCAL_STATE_OBSERVERS, GEA_STORE_ROOT, geaCondPatchedSymbol, geaCondValueSymbol, geaEscapeHtml } from "@geajs/core";
3
3
  import { normalizeProps } from "@zag-js/vanilla";
4
4
  import * as clipboard from "@zag-js/clipboard";
5
5
  //#region src/components/clipboard.tsx
6
6
  var Clipboard = class extends ZagComponent {
7
7
  static {
8
- this[GEA_CTOR_TAG_NAME] = "clipboard";
8
+ this.__geaTagName = "gea-clipboard";
9
9
  }
10
10
  constructor(...args) {
11
11
  super(...args);
@@ -66,15 +66,15 @@ var Clipboard = class extends ZagComponent {
66
66
  template(props) {
67
67
  const __id = this.id;
68
68
  Component._register(ZagComponent, "zag-component");
69
- return `<div id="${__id}" data-part="root"${(props.class || "") == null || (props.class || "") === false ? "" : ` class="${((props.class || "") != null ? String(props.class || "") : "").trim()}"`}><!--${__id + "-c1"}-->${props.label && `<label data-part="label" class="clipboard-label text-sm font-medium mb-1 block">${geaEscapeHtml(String(props.label))}</label>` || ""}<!--${__id + "-c1-end"}--><div data-part="control" class="clipboard-control flex gap-2"><input data-part="input" class="clipboard-input flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm" /><button data-part="trigger" class="clipboard-trigger inline-flex h-9 items-center justify-center rounded-md border border-input bg-background px-3 text-sm shadow-sm hover:bg-accent"><!--${__id + "-c0"}-->${(this.copied ? `<span data-part="indicator-copied">✓ Copied</span>` : `<span data-part="indicator-not-copied">Copy</span>`) || ""}<!--${__id + "-c0-end"}--></button></div></div>`;
69
+ return `<div id="${__id}" data-part="root"${(props.class || "") == null || (props.class || "") === false ? "" : ` class="${((props.class || "") != null ? String(props.class || "") : "").trim()}"`}><!--${__id + "-c1"}-->${props.label && `<label data-part="label" class="clipboard-label text-sm font-medium mb-1 block">${geaEscapeHtml(String(props.label))}</label>` || ""}<!--${__id + "-c1-end"}--><div data-part="control" class="clipboard-control flex gap-2"><input data-part="input" class="clipboard-input flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-xs" /><button data-part="trigger" class="clipboard-trigger inline-flex h-9 items-center justify-center rounded-md border border-input bg-background px-3 text-sm shadow-xs hover:bg-accent"><!--${__id + "-c0"}-->${(this.copied ? `<span data-part="indicator-copied">✓ Copied</span>` : `<span data-part="indicator-not-copied">Copy</span>`) || ""}<!--${__id + "-c0-end"}--></button></div></div>`;
70
70
  }
71
- __onPropChange(key, value) {
71
+ [GEA_ON_PROP_CHANGE](key, value) {
72
72
  if (key === "class") {
73
73
  const __el = this[GEA_ELEMENT];
74
74
  this.props;
75
75
  const __boundValue = value || "";
76
76
  if (__el) {
77
- const __newClass = (__boundValue != null ? String(__boundValue) : "").trim();
77
+ const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
78
78
  if (__el.className !== __newClass) __el.className = __newClass;
79
79
  }
80
80
  }
@@ -83,14 +83,14 @@ var Clipboard = class extends ZagComponent {
83
83
  }
84
84
  __observe_local_copied(value, change) {
85
85
  if (this[GEA_RENDERED]) {
86
- if (this[geaCondPatchedSymbol(0)]) return;
87
- this[geaCondPatchedSymbol(0)] = this[GEA_PATCH_COND](0);
88
- if (this[geaCondPatchedSymbol(0)]) queueMicrotask(() => this[geaCondPatchedSymbol(0)] = false);
89
- if (this[geaCondPatchedSymbol(0)]) return;
86
+ if (!this[geaCondPatchedSymbol(0)]) {
87
+ this[geaCondPatchedSymbol(0)] = this[GEA_PATCH_COND](0);
88
+ if (this[geaCondPatchedSymbol(0)]) queueMicrotask(() => this[geaCondPatchedSymbol(0)] = false);
89
+ }
90
90
  }
91
91
  }
92
92
  [GEA_SETUP_LOCAL_STATE_OBSERVERS]() {
93
- if (!this.__store) return;
93
+ if (!this[GEA_STORE_ROOT]) return;
94
94
  this[GEA_OBSERVE](this, ["copied"], this.__observe_local_copied);
95
95
  }
96
96
  };