@geajs/ui 0.2.4 → 0.2.10

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 (170) hide show
  1. package/dist/accordion.d.mts +2 -2
  2. package/dist/accordion.mjs +92 -122
  3. package/dist/accordion.mjs.map +1 -1
  4. package/dist/alert.d.mts +3 -3
  5. package/dist/alert.mjs +45 -107
  6. package/dist/alert.mjs.map +1 -1
  7. package/dist/avatar.d.mts +2 -2
  8. package/dist/avatar.mjs +38 -62
  9. package/dist/avatar.mjs.map +1 -1
  10. package/dist/badge.d.mts +1 -1
  11. package/dist/badge.mjs +18 -43
  12. package/dist/badge.mjs.map +1 -1
  13. package/dist/bind.mjs +169 -0
  14. package/dist/bind.mjs.map +1 -0
  15. package/dist/button.d.mts +3 -2
  16. package/dist/button.mjs +30 -85
  17. package/dist/button.mjs.map +1 -1
  18. package/dist/card.d.mts +6 -6
  19. package/dist/card.mjs +82 -194
  20. package/dist/card.mjs.map +1 -1
  21. package/dist/checkbox.d.mts +2 -2
  22. package/dist/checkbox.mjs +30 -31
  23. package/dist/checkbox.mjs.map +1 -1
  24. package/dist/clipboard.d.mts +2 -2
  25. package/dist/clipboard.mjs +49 -55
  26. package/dist/clipboard.mjs.map +1 -1
  27. package/dist/collapsible.d.mts +2 -2
  28. package/dist/collapsible.mjs +18 -45
  29. package/dist/collapsible.mjs.map +1 -1
  30. package/dist/combobox.d.mts +2 -2
  31. package/dist/combobox.mjs +390 -261
  32. package/dist/combobox.mjs.map +1 -1
  33. package/dist/compiled-component.mjs +121 -0
  34. package/dist/compiled-component.mjs.map +1 -0
  35. package/dist/compiled-reactive-component.mjs +435 -0
  36. package/dist/compiled-reactive-component.mjs.map +1 -0
  37. package/dist/component-id.mjs +21 -0
  38. package/dist/component-id.mjs.map +1 -0
  39. package/dist/conditional-truthy.mjs +48 -0
  40. package/dist/conditional-truthy.mjs.map +1 -0
  41. package/dist/conditional.mjs +54 -0
  42. package/dist/conditional.mjs.map +1 -0
  43. package/dist/delegate-event.mjs +53 -0
  44. package/dist/delegate-event.mjs.map +1 -0
  45. package/dist/dialog.d.mts +4 -3
  46. package/dist/dialog.mjs +57 -70
  47. package/dist/dialog.mjs.map +1 -1
  48. package/dist/dirty-symbols.mjs +7 -0
  49. package/dist/dirty-symbols.mjs.map +1 -0
  50. package/dist/disposer.mjs +65 -0
  51. package/dist/disposer.mjs.map +1 -0
  52. package/dist/dnd-manager.d.mts +9 -1
  53. package/dist/dnd-manager.mjs +67 -29
  54. package/dist/dnd-manager.mjs.map +1 -1
  55. package/dist/drag-drop-context.d.mts +1 -1
  56. package/dist/drag-drop-context.mjs +17 -33
  57. package/dist/drag-drop-context.mjs.map +1 -1
  58. package/dist/draggable.d.mts +1 -1
  59. package/dist/draggable.mjs +2 -91
  60. package/dist/draggable2.mjs +424 -0
  61. package/dist/draggable2.mjs.map +1 -0
  62. package/dist/droppable.d.mts +1 -1
  63. package/dist/droppable.mjs +20 -44
  64. package/dist/droppable.mjs.map +1 -1
  65. package/dist/file-upload.d.mts +2 -2
  66. package/dist/file-upload.mjs +405 -122
  67. package/dist/file-upload.mjs.map +1 -1
  68. package/dist/hover-card.d.mts +2 -2
  69. package/dist/hover-card.mjs +24 -59
  70. package/dist/hover-card.mjs.map +1 -1
  71. package/dist/index.mjs +3 -3
  72. package/dist/input.d.mts +1 -1
  73. package/dist/input.mjs +1 -93
  74. package/dist/input2.mjs +56 -0
  75. package/dist/input2.mjs.map +1 -0
  76. package/dist/internal-symbols.mjs +9 -0
  77. package/dist/internal-symbols.mjs.map +1 -0
  78. package/dist/item-obs.mjs +31 -0
  79. package/dist/item-obs.mjs.map +1 -0
  80. package/dist/keyed-list-symbols.mjs +6 -0
  81. package/dist/keyed-list-symbols.mjs.map +1 -0
  82. package/dist/keyed-list.mjs +538 -0
  83. package/dist/keyed-list.mjs.map +1 -0
  84. package/dist/label.d.mts +1 -1
  85. package/dist/label.mjs +20 -45
  86. package/dist/label.mjs.map +1 -1
  87. package/dist/menu.d.mts +2 -2
  88. package/dist/menu.mjs +87 -41
  89. package/dist/menu.mjs.map +1 -1
  90. package/dist/number-input.d.mts +2 -2
  91. package/dist/number-input.mjs +28 -32
  92. package/dist/number-input.mjs.map +1 -1
  93. package/dist/pagination.d.mts +2 -2
  94. package/dist/pagination.mjs +12 -35
  95. package/dist/pagination.mjs.map +1 -1
  96. package/dist/patch.mjs +21 -0
  97. package/dist/patch.mjs.map +1 -0
  98. package/dist/pin-input.d.mts +2 -2
  99. package/dist/pin-input.mjs +88 -87
  100. package/dist/pin-input.mjs.map +1 -1
  101. package/dist/popover.d.mts +2 -2
  102. package/dist/popover.mjs +45 -67
  103. package/dist/popover.mjs.map +1 -1
  104. package/dist/progress.d.mts +2 -2
  105. package/dist/progress.mjs +37 -43
  106. package/dist/progress.mjs.map +1 -1
  107. package/dist/radio-group.d.mts +2 -2
  108. package/dist/radio-group.mjs +99 -140
  109. package/dist/radio-group.mjs.map +1 -1
  110. package/dist/rating-group.d.mts +2 -2
  111. package/dist/rating-group.mjs +91 -99
  112. package/dist/rating-group.mjs.map +1 -1
  113. package/dist/reactive-attr.mjs +13 -0
  114. package/dist/reactive-attr.mjs.map +1 -0
  115. package/dist/reactive-bool.mjs +13 -0
  116. package/dist/reactive-bool.mjs.map +1 -0
  117. package/dist/reactive-class-name.mjs +15 -0
  118. package/dist/reactive-class-name.mjs.map +1 -0
  119. package/dist/reactive-class.mjs +54 -0
  120. package/dist/reactive-class.mjs.map +1 -0
  121. package/dist/reactive-style.mjs +24 -0
  122. package/dist/reactive-style.mjs.map +1 -0
  123. package/dist/reactive-text.mjs +62 -0
  124. package/dist/reactive-text.mjs.map +1 -0
  125. package/dist/select.d.mts +2 -2
  126. package/dist/select.mjs +106 -186
  127. package/dist/select.mjs.map +1 -1
  128. package/dist/separator.d.mts +1 -1
  129. package/dist/separator.mjs +19 -45
  130. package/dist/separator.mjs.map +1 -1
  131. package/dist/skeleton.d.mts +1 -1
  132. package/dist/skeleton.mjs +11 -35
  133. package/dist/skeleton.mjs.map +1 -1
  134. package/dist/slider.d.mts +2 -2
  135. package/dist/slider.mjs +31 -32
  136. package/dist/slider.mjs.map +1 -1
  137. package/dist/switch.d.mts +2 -2
  138. package/dist/switch.mjs +30 -31
  139. package/dist/switch.mjs.map +1 -1
  140. package/dist/tabs.d.mts +7 -2
  141. package/dist/tabs.mjs +180 -147
  142. package/dist/tabs.mjs.map +1 -1
  143. package/dist/tags-input.d.mts +2 -2
  144. package/dist/tags-input.mjs +102 -188
  145. package/dist/tags-input.mjs.map +1 -1
  146. package/dist/textarea.d.mts +1 -1
  147. package/dist/textarea.mjs +32 -75
  148. package/dist/textarea.mjs.map +1 -1
  149. package/dist/theme.css +4 -5
  150. package/dist/toast.d.mts +1 -1
  151. package/dist/toast.mjs +14 -34
  152. package/dist/toast.mjs.map +1 -1
  153. package/dist/toggle-group.d.mts +2 -2
  154. package/dist/toggle-group.mjs +78 -85
  155. package/dist/toggle-group.mjs.map +1 -1
  156. package/dist/tooltip.d.mts +2 -2
  157. package/dist/tooltip.mjs +23 -43
  158. package/dist/tooltip.mjs.map +1 -1
  159. package/dist/tree-view.d.mts +2 -2
  160. package/dist/tree-view.mjs +32 -50
  161. package/dist/tree-view.mjs.map +1 -1
  162. package/dist/types.d.mts +9 -0
  163. package/dist/zag-component.d.mts +26 -3
  164. package/dist/zag-component.mjs +73 -17
  165. package/dist/zag-component.mjs.map +1 -1
  166. package/package.json +4 -3
  167. package/dist/cn.mjs +0 -10
  168. package/dist/cn.mjs.map +0 -1
  169. package/dist/draggable.mjs.map +0 -1
  170. package/dist/input.mjs.map +0 -1
@@ -1,12 +1,19 @@
1
1
  import { t as ZagComponent } from "./zag-component.mjs";
2
- import { Component, GEA_ELEMENT, GEA_INSTANTIATE_CHILD_COMPONENTS, GEA_MOUNT_COMPILED_CHILD_COMPONENTS, GEA_ON_PROP_CHANGE, GEA_PATCH_NODE, geaEscapeHtml, geaSanitizeAttr } from "@geajs/core";
2
+ import { o as GEA_CREATE_TEMPLATE } from "./bind.mjs";
3
+ import { n as reactiveTextValue, t as reactiveText } from "./reactive-text.mjs";
4
+ import { t as reactiveAttr } from "./reactive-attr.mjs";
5
+ import { t as reactiveClass } from "./reactive-class.mjs";
6
+ import { t as reactiveStyleProp } from "./reactive-style.mjs";
3
7
  import { normalizeProps } from "@zag-js/vanilla";
4
8
  import * as hoverCard from "@zag-js/hover-card";
5
9
  //#region src/components/hover-card.tsx
10
+ let _tpl0_root = null;
11
+ function _tpl0_create() {
12
+ const t = document.createElement("template");
13
+ t.innerHTML = "<div><a data-part=trigger class=\"hover-card-trigger inline-block\">0</a><div data-part=positioner class=hover-card-positioner><div data-part=content class=\"hover-card-content z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden\">0";
14
+ return t.content.firstChild;
15
+ }
6
16
  var HoverCard = class extends ZagComponent {
7
- static {
8
- this.__geaTagName = "hover-card";
9
- }
10
17
  createMachine(_props) {
11
18
  return hoverCard.machine;
12
19
  }
@@ -39,61 +46,19 @@ var HoverCard = class extends ZagComponent {
39
46
  syncState(api) {
40
47
  this.open = api.open;
41
48
  }
42
- template(props) {
43
- const __id = this.id;
44
- Component._register(ZagComponent, "zag-component");
45
- return `<div id="${__id}"${(props.class || "") == null || (props.class || "") === false ? "" : ` class="${((props.class || "") != null ? String(props.class || "") : "").trim()}"`} style="display: inline-block"><a id="${__id + "-b1"}" data-part="trigger"${(props.href || "#") == null || (props.href || "#") === false ? "" : ` href="${geaSanitizeAttr("href", String(props.href || "#"))}"`} class="hover-card-trigger inline-block">${geaEscapeHtml(String(props.triggerLabel || "Hover me"))}</a><div data-part="positioner" class="hover-card-positioner"><div id="${__id + "-b2"}" data-part="content" class="hover-card-content z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden">${props.children}</div></div></div>`;
46
- }
47
- [GEA_ON_PROP_CHANGE](key, value) {
48
- const __id = this.id;
49
- if (key === "class") {
50
- const __el = this[GEA_ELEMENT];
51
- this.props;
52
- const __boundValue = value || "";
53
- if (__el) {
54
- const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
55
- if (__el.className !== __newClass) __el.className = __newClass;
56
- }
57
- }
58
- if (key === "href") {
59
- const __el = this.__e0 || (this.__e0 = __gid(__id + "-b1"));
60
- this.props;
61
- const __boundValue = value || "#";
62
- if (__el) {
63
- var __av = __boundValue;
64
- if (__av == null || __av === void 0) __el.removeAttribute("href");
65
- else {
66
- const __newAttr = __sanitizeAttr("href", String(__av));
67
- if (__el.getAttribute("href") !== __newAttr) __el.setAttribute("href", __newAttr);
68
- }
69
- }
70
- }
71
- if (key === "triggerLabel") {
72
- const __el = this.__e1 || (this.__e1 = __gid(__id + "-b1"));
73
- this.props;
74
- const __boundValue = value || "Hover me";
75
- if (__el && __el.textContent !== __boundValue) __el.textContent = __boundValue;
76
- }
77
- if (key === "children") {
78
- const __el = this.__e2 || (this.__e2 = __gid(__id + "-b2"));
79
- if (__el) {
80
- const __tw = document.createElement("template");
81
- __tw.innerHTML = value;
82
- const __newEl = __tw.content.firstElementChild;
83
- const __existEl = __el.firstElementChild;
84
- if (__newEl && __existEl && __tw.content.childNodes.length === 1) this.constructor[GEA_PATCH_NODE](__existEl, __newEl, true);
85
- else if (__el.innerHTML !== value) {
86
- __el.innerHTML = value;
87
- this[GEA_INSTANTIATE_CHILD_COMPONENTS]();
88
- if (this.parentComponent) this.parentComponent[GEA_MOUNT_COMPILED_CHILD_COMPONENTS]();
89
- }
90
- }
91
- }
92
- }
93
- __resetEls() {
94
- this.__e0 = null;
95
- this.__e1 = null;
96
- this.__e2 = null;
49
+ [GEA_CREATE_TEMPLATE](d) {
50
+ const root = (_tpl0_root || (_tpl0_root = _tpl0_create())).cloneNode(true);
51
+ const el0 = root;
52
+ const el1 = el0;
53
+ const el2 = root.firstChild;
54
+ const marker3 = root.firstChild.firstChild;
55
+ const marker4 = root.childNodes[1].firstChild.firstChild;
56
+ reactiveClass(el0, d, this, () => this.props.class || "");
57
+ reactiveStyleProp(el1, d, this, "display", () => "inline-block");
58
+ reactiveAttr(el2, d, this, "href", () => this.props.href || "#");
59
+ reactiveTextValue(marker3, d, this, () => this.props.triggerLabel || "Hover me");
60
+ reactiveText(marker4, d, this, () => this.props.children);
61
+ return root;
97
62
  }
98
63
  };
99
64
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"hover-card.mjs","names":["Component","geaSanitizeAttr","geaEscapeHtml","GEA_ON_PROP_CHANGE","GEA_ELEMENT","GEA_PATCH_NODE","GEA_INSTANTIATE_CHILD_COMPONENTS","GEA_MOUNT_COMPILED_CHILD_COMPONENTS","hoverCard","normalizeProps","ZagComponent","HoverCard","__geaTagName","open","createMachine","_props","machine","getMachineProps","props","id","defaultOpen","openDelay","closeDelay","positioning","onOpenChange","details","OpenChangeDetails","connectApi","service","connect","getSpreadMap","syncState","api","template","__id","_register","class","String","trim","href","triggerLabel","children","key","value","__el","__boundValue","__newClass","replace","className","__e0","__gid","__av","undefined","removeAttribute","__newAttr","__sanitizeAttr","getAttribute","setAttribute","__e1","textContent","__e2","__tw","document","createElement","innerHTML","__newEl","content","firstElementChild","__existEl","childNodes","length","constructor","parentComponent","__resetEls"],"sources":["../src/components/hover-card.tsx"],"sourcesContent":["import * as hoverCard from '@zag-js/hover-card'\nimport { normalizeProps } from '@zag-js/vanilla'\nimport ZagComponent from '../primitives/zag-component'\n\nexport default class HoverCard extends ZagComponent {\n declare open: boolean\n\n createMachine(_props: any): any {\n return hoverCard.machine\n }\n\n getMachineProps(props: any) {\n return {\n id: this.id,\n open: props.open,\n defaultOpen: props.defaultOpen,\n openDelay: props.openDelay,\n closeDelay: props.closeDelay,\n positioning: props.positioning,\n onOpenChange: (details: hoverCard.OpenChangeDetails) => {\n this.open = details.open\n props.onOpenChange?.(details)\n },\n }\n }\n\n connectApi(service: any) {\n return hoverCard.connect(service, normalizeProps)\n }\n\n getSpreadMap() {\n return {\n '[data-part=\"trigger\"]': 'getTriggerProps',\n '[data-part=\"positioner\"]': 'getPositionerProps',\n '[data-part=\"content\"]': 'getContentProps',\n '[data-part=\"arrow\"]': 'getArrowProps',\n '[data-part=\"arrow-tip\"]': 'getArrowTipProps',\n }\n }\n\n syncState(api: any) {\n this.open = api.open\n }\n\n template(props: any) {\n return (\n <div class={props.class || ''} style={{ display: 'inline-block' }}>\n <a data-part=\"trigger\" href={props.href || '#'} class=\"hover-card-trigger inline-block\">\n {props.triggerLabel || 'Hover me'}\n </a>\n <div data-part=\"positioner\" class=\"hover-card-positioner\">\n <div\n data-part=\"content\"\n class=\"hover-card-content z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden\"\n >\n {props.children}\n </div>\n </div>\n </div>\n )\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"hover-card.mjs","names":["GEA_CREATE_TEMPLATE","reactiveClass","reactiveStyleProp","reactiveAttr","reactiveTextValue","reactiveText","hoverCard","normalizeProps","ZagComponent","_tpl0_root","_tpl0_create","t","document","createElement","innerHTML","content","firstChild","HoverCard","open","createMachine","_props","machine","getMachineProps","props","id","defaultOpen","openDelay","closeDelay","positioning","onOpenChange","details","OpenChangeDetails","connectApi","service","connect","getSpreadMap","syncState","api","d","root","cloneNode","el0","el1","el2","marker3","marker4","childNodes","class","href","t3","triggerLabel","t4","children"],"sources":["../src/components/hover-card.tsx"],"sourcesContent":["import * as hoverCard from '@zag-js/hover-card'\nimport { normalizeProps } from '@zag-js/vanilla'\nimport ZagComponent from '../primitives/zag-component'\n\nexport default class HoverCard extends ZagComponent {\n declare open: boolean\n\n createMachine(_props: any): any {\n return hoverCard.machine\n }\n\n getMachineProps(props: any) {\n return {\n id: this.id,\n open: props.open,\n defaultOpen: props.defaultOpen,\n openDelay: props.openDelay,\n closeDelay: props.closeDelay,\n positioning: props.positioning,\n onOpenChange: (details: hoverCard.OpenChangeDetails) => {\n this.open = details.open\n props.onOpenChange?.(details)\n },\n }\n }\n\n connectApi(service: any) {\n return hoverCard.connect(service, normalizeProps)\n }\n\n getSpreadMap() {\n return {\n '[data-part=\"trigger\"]': 'getTriggerProps',\n '[data-part=\"positioner\"]': 'getPositionerProps',\n '[data-part=\"content\"]': 'getContentProps',\n '[data-part=\"arrow\"]': 'getArrowProps',\n '[data-part=\"arrow-tip\"]': 'getArrowTipProps',\n }\n }\n\n syncState(api: any) {\n this.open = api.open\n }\n\n template(props: any) {\n return (\n <div class={props.class || ''} style={{ display: 'inline-block' }}>\n <a data-part=\"trigger\" href={props.href || '#'} class=\"hover-card-trigger inline-block\">\n {props.triggerLabel || 'Hover me'}\n </a>\n <div data-part=\"positioner\" class=\"hover-card-positioner\">\n <div\n data-part=\"content\"\n class=\"hover-card-content z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-hidden\"\n >\n {props.children}\n </div>\n </div>\n </div>\n )\n }\n}\n"],"mappings":";;;;;;;;;AAIA,IAAIS,aAAa;AACjB,SAASC,eAAe;CACtB,MAAMC,IAAIC,SAASC,cAAc,WAAW;AAC5CF,GAAEG,YAAY;AACd,QAAOH,EAAEI,QAAQC;;AAEnB,IAAqBC,YAArB,cAAuCT,aAAa;CAElDW,cAAcC,QAAkB;AAC9B,SAAOd,UAAUe;;CAEnBC,gBAAgBC,OAAY;AAC1B,SAAO;GACLC,IAAI,KAAKA;GACTN,MAAMK,MAAML;GACZO,aAAaF,MAAME;GACnBC,WAAWH,MAAMG;GACjBC,YAAYJ,MAAMI;GAClBC,aAAaL,MAAMK;GACnBC,eAAeC,YAAyC;AACtD,SAAKZ,OAAOY,QAAQZ;AACpBK,UAAMM,eAAeC,QAAQ;;GAEhC;;CAEHE,WAAWC,SAAc;AACvB,SAAO3B,UAAU4B,QAAQD,SAAS1B,eAAe;;CAEnD4B,eAAe;AACb,SAAO;GACL,2BAAyB;GACzB,8BAA4B;GAC5B,2BAAyB;GACzB,yBAAuB;GACvB,6BAA2B;GAC5B;;CAEHC,UAAUC,KAAU;AAClB,OAAKnB,OAAOmB,IAAInB;;CAElB,CAAClB,qBAAqBsC,GAAG;EACvB,MAAMC,QAAQ9B,eAAeA,aAAaC,cAAc,GAAG8B,UAAU,KAAK;EAC1E,MAAMC,MAAMF;EACZ,MAAMG,MAAMD;EACZ,MAAME,MAAMJ,KAAKvB;EACjB,MAAM4B,UAAUL,KAAKvB,WAAWA;EAChC,MAAM6B,UAAUN,KAAKO,WAAW,GAAG9B,WAAWA;AAC9Cf,gBAAcwC,KAAKH,GAAG,YAAY,KAAKf,MAAMwB,SAAS,GAAG;AACzD7C,oBAAkBwC,KAAKJ,GAAG,MAAM,iBAAiB,eAAe;AAChEnC,eAAawC,KAAKL,GAAG,MAAM,cAAc,KAAKf,MAAMyB,QAAQ,IAAI;AAEhE5C,oBAAkB6C,SAAIX,GAAG,YAAY,KAAKf,MAAM2B,gBAAgB,WAAW;AAE3E7C,eAAa8C,SAAIb,GAAG,YAAY,KAAKf,MAAM6B,SAAS;AACpD,SAAOb"}
package/dist/index.mjs CHANGED
@@ -1,5 +1,7 @@
1
1
  import { t as ZagComponent } from "./zag-component.mjs";
2
- import { t as cn } from "./cn.mjs";
2
+ import { n as cn } from "./compiled-component.mjs";
3
+ import { t as Draggable } from "./draggable2.mjs";
4
+ import { t as Input } from "./input2.mjs";
3
5
  import Accordion from "./accordion.mjs";
4
6
  import Avatar from "./avatar.mjs";
5
7
  import Checkbox from "./checkbox.mjs";
@@ -28,7 +30,6 @@ import Tooltip from "./tooltip.mjs";
28
30
  import TreeView from "./tree-view.mjs";
29
31
  import Button from "./button.mjs";
30
32
  import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "./card.mjs";
31
- import Input from "./input.mjs";
32
33
  import Textarea from "./textarea.mjs";
33
34
  import Label from "./label.mjs";
34
35
  import Badge from "./badge.mjs";
@@ -36,7 +37,6 @@ import { Alert, AlertDescription, AlertTitle } from "./alert.mjs";
36
37
  import Separator from "./separator.mjs";
37
38
  import Skeleton from "./skeleton.mjs";
38
39
  import { dndManager } from "./dnd-manager.mjs";
39
- import Draggable from "./draggable.mjs";
40
40
  import Droppable from "./droppable.mjs";
41
41
  import DragDropContext from "./drag-drop-context.mjs";
42
42
  export { Accordion, Alert, AlertDescription, AlertTitle, Avatar, Badge, Button, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Clipboard, Collapsible, Combobox, Dialog, DragDropContext, Draggable, Droppable, FileUpload, HoverCard, Input, Label, Menu, NumberInput, Pagination, PinInput, Popover, Progress, RadioGroup, RatingGroup, Select, Separator, Skeleton, Slider, Switch, Tabs, TagsInput, Textarea, ToastStore, Toaster, ToggleGroup, Tooltip, TreeView, ZagComponent, cn, dndManager };
package/dist/input.d.mts CHANGED
@@ -2,7 +2,7 @@ import { Component } from "@geajs/core";
2
2
 
3
3
  //#region src/components/input.d.ts
4
4
  declare class Input extends Component {
5
- template(props: any): string;
5
+ template(props: any): any;
6
6
  }
7
7
  //#endregion
8
8
  export { Input as default };
package/dist/input.mjs CHANGED
@@ -1,94 +1,2 @@
1
- import { t as cn } from "./cn.mjs";
2
- import { Component, GEA_ELEMENT, GEA_ON_PROP_CHANGE } from "@geajs/core";
3
- //#region src/components/input.tsx
4
- var Input = class extends Component {
5
- static {
6
- this.__geaTagName = "gea-input";
7
- }
8
- template(props) {
9
- const __id = this.id;
10
- return `<input id="${props.inputId}" data-gcc="${__id}"${cn("flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", props.class) == null || cn("flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", props.class) === false ? "" : ` class="${(cn("flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", props.class) != null ? String(cn("flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", props.class)) : "").trim()}"`}${(props.type || "text") == null || (props.type || "text") === false ? "" : ` type="${props.type || "text"}"`}${props.placeholder == null || props.placeholder === false ? "" : ` placeholder="${props.placeholder}"`}${props.value == null || props.value === false ? "" : ` value="${props.value}"`}${props.disabled == null || props.disabled === false ? "" : ` disabled="${props.disabled}"`}${props.name == null || props.name === false ? "" : ` name="${props.name}"`} />`;
11
- }
12
- get events() {
13
- if (this.__evts && this[GEA_ELEMENT]) return this.__evts;
14
- const __geaEvtsResult = { input: { [`#${this.props.inputId}`]: this.__event_input_0 } };
15
- if (this[GEA_ELEMENT]) this.__evts = __geaEvtsResult;
16
- return __geaEvtsResult;
17
- }
18
- __event_input_0(e, targetComponent) {
19
- this.props.onInput?.(e);
20
- }
21
- [GEA_ON_PROP_CHANGE](key, value) {
22
- if (key === "class") {
23
- const __el = this[GEA_ELEMENT];
24
- this.props;
25
- const __boundValue = cn("flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", value);
26
- if (__el) {
27
- const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
28
- if (__el.className !== __newClass) __el.className = __newClass;
29
- }
30
- }
31
- if (key === "type") {
32
- const __el = this[GEA_ELEMENT];
33
- this.props;
34
- const __boundValue = value || "text";
35
- if (__el) {
36
- var __av = __boundValue;
37
- if (__av == null || __av === false) __el.removeAttribute("type");
38
- else {
39
- const __newAttr = String(__av);
40
- if (__el.getAttribute("type") !== __newAttr) __el.setAttribute("type", __newAttr);
41
- }
42
- }
43
- }
44
- if (key === "placeholder") {
45
- const __el = this[GEA_ELEMENT];
46
- if (__el) {
47
- var __av = value;
48
- if (__av == null || __av === false) __el.removeAttribute("placeholder");
49
- else {
50
- const __newAttr = String(__av);
51
- if (__el.getAttribute("placeholder") !== __newAttr) __el.setAttribute("placeholder", __newAttr);
52
- }
53
- }
54
- }
55
- if (key === "value") {
56
- const __el = this[GEA_ELEMENT];
57
- if (__el) __el.value = value == null ? "" : String(value);
58
- }
59
- if (key === "disabled") {
60
- const __el = this[GEA_ELEMENT];
61
- if (__el) if (!value) __el.removeAttribute("disabled");
62
- else {
63
- const __newAttr = "";
64
- if (__el.getAttribute("disabled") !== __newAttr) __el.setAttribute("disabled", __newAttr);
65
- }
66
- }
67
- if (key === "name") {
68
- const __el = this[GEA_ELEMENT];
69
- if (__el) {
70
- var __av = value;
71
- if (__av == null || __av === false) __el.removeAttribute("name");
72
- else {
73
- const __newAttr = String(__av);
74
- if (__el.getAttribute("name") !== __newAttr) __el.setAttribute("name", __newAttr);
75
- }
76
- }
77
- }
78
- if (key === "inputId") {
79
- const __el = this[GEA_ELEMENT];
80
- if (__el) {
81
- var __av = value;
82
- if (__av == null || __av === false) __el.removeAttribute("id");
83
- else {
84
- const __newAttr = String(__av);
85
- if (__el.getAttribute("id") !== __newAttr) __el.setAttribute("id", __newAttr);
86
- }
87
- }
88
- }
89
- }
90
- };
91
- //#endregion
1
+ import { t as Input } from "./input2.mjs";
92
2
  export { Input as default };
93
-
94
- //# sourceMappingURL=input.mjs.map
@@ -0,0 +1,56 @@
1
+ import { n as cn, t as CompiledComponent } from "./compiled-component.mjs";
2
+ import { o as GEA_CREATE_TEMPLATE, t as bind } from "./bind.mjs";
3
+ import { t as reactiveAttr } from "./reactive-attr.mjs";
4
+ import { t as reactiveBoolAttr } from "./reactive-bool.mjs";
5
+ import { t as reactiveClass } from "./reactive-class.mjs";
6
+ import { t as delegateEvent } from "./delegate-event.mjs";
7
+ //#region ../gea/src/runtime/reactive-value.ts
8
+ function reactiveValueRead(el, d, root, pathOrGetter) {
9
+ let controlled = false;
10
+ const apply = (v) => {
11
+ if (v === void 0 && !controlled) return;
12
+ controlled = true;
13
+ const s = v == null ? "" : String(v);
14
+ if (el.value !== s) el.value = s;
15
+ };
16
+ bind(d, root, pathOrGetter, apply);
17
+ }
18
+ //#endregion
19
+ //#region src/components/input.tsx
20
+ function _tpl0_create() {
21
+ return document.createElement("input");
22
+ }
23
+ var Input = class extends CompiledComponent {
24
+ [GEA_CREATE_TEMPLATE](d) {
25
+ const root = _tpl0_create();
26
+ const el0 = root;
27
+ const el1 = el0;
28
+ const el2 = el0;
29
+ const el3 = el0;
30
+ const el4 = el0;
31
+ const el5 = el0;
32
+ const el6 = el0;
33
+ const evt7 = el0;
34
+ reactiveClass(el0, d, this, () => cn("flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", this.props.class));
35
+ reactiveAttr(el1, d, this, "type", () => this.props.type || "text");
36
+ reactiveAttr(el2, d, this, "placeholder", () => this.props.placeholder);
37
+ reactiveValueRead(el3, d, this, () => this.props.value);
38
+ reactiveBoolAttr(el4, d, this, "disabled", () => this.props.disabled);
39
+ reactiveAttr(el5, d, this, "name", () => this.props.name);
40
+ reactiveAttr(el6, d, this, "id", () => this.props.inputId);
41
+ const h7 = (e) => {
42
+ ((e) => this.props.onInput?.(e))(e);
43
+ const __v = this.props.value;
44
+ if (__v !== void 0) {
45
+ const __s = __v == null ? "" : String(__v);
46
+ if (evt7.value !== __s) evt7.value = __s;
47
+ }
48
+ };
49
+ delegateEvent(root, "input", [[evt7, h7]], d);
50
+ return root;
51
+ }
52
+ };
53
+ //#endregion
54
+ export { Input as t };
55
+
56
+ //# sourceMappingURL=input2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input2.mjs","names":["GEA_CREATE_TEMPLATE","reactiveClass","reactiveAttr","reactiveValueRead","reactiveBoolAttr","delegateEvent","CompiledComponent","Component","cn","_tpl0_create","e","document","createElement","Input","d","root","el0","el1","el2","el3","el4","el5","el6","evt7","props","class","type","placeholder","value","disabled","name","inputId","h7","Event","onInput","__v","undefined","__s","String"],"sources":["../../gea/src/runtime/reactive-value.ts","../src/components/input.tsx"],"sourcesContent":["import type { Disposer } from './disposer'\nimport { bind } from './bind'\n\ntype InputLike = HTMLInputElement | HTMLTextAreaElement | HTMLSelectElement\n\nexport function reactiveValueRead(\n el: InputLike,\n d: Disposer,\n root: any,\n pathOrGetter: readonly string[] | (() => unknown),\n): void {\n let controlled = false\n const apply = (v: unknown): void => {\n if (v === undefined && !controlled) return\n controlled = true\n const s = v == null ? '' : String(v)\n if (el.value !== s) el.value = s\n }\n bind(d, root, pathOrGetter, apply)\n}\n\nexport function reactiveValue(\n el: InputLike,\n d: Disposer,\n root: any,\n pathOrGetter: readonly string[] | (() => unknown),\n writeBack?: (v: string) => void,\n): void {\n reactiveValueRead(el, d, root, pathOrGetter)\n if (writeBack) {\n const onInput = (): void => {\n writeBack(el.value)\n }\n el.addEventListener('input', onInput)\n d.add(() => el.removeEventListener('input', onInput))\n }\n}\n","import { Component } from '@geajs/core'\nimport { cn } from '../utils/cn'\n\nexport default class Input extends Component {\n template(props: any) {\n return (\n <input\n class={cn(\n 'flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-hidden focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n props.class,\n )}\n type={props.type || 'text'}\n placeholder={props.placeholder}\n value={props.value}\n disabled={props.disabled}\n name={props.name}\n id={props.inputId}\n input={(e: Event) => props.onInput?.(e)}\n />\n )\n }\n}\n"],"mappings":";;;;;;;AAKA,SAAgB,kBACd,IACA,GACA,MACA,cACM;CACN,IAAI,aAAa;CACjB,MAAM,SAAS,MAAqB;AAClC,MAAI,MAAM,KAAA,KAAa,CAAC,WAAY;AACpC,eAAa;EACb,MAAM,IAAI,KAAK,OAAO,KAAK,OAAO,EAAE;AACpC,MAAI,GAAG,UAAU,EAAG,IAAG,QAAQ;;AAEjC,MAAK,GAAG,MAAM,cAAc,MAAM;;;;ACfpC,SAASS,eAAe;AAEtB,QADUE,SAASC,cAAc,QACzB;;AAEV,IAAqBC,QAArB,cAAmCP,kBAAkB;CACnD,CAACN,qBAAqBc,GAAG;EACvB,MAAMC,OAAON,cAAc;EAC3B,MAAMO,MAAMD;EACZ,MAAME,MAAMD;EACZ,MAAME,MAAMF;EACZ,MAAMG,MAAMH;EACZ,MAAMI,MAAMJ;EACZ,MAAMK,MAAML;EACZ,MAAMM,MAAMN;EACZ,MAAMO,OAAOP;AACbf,gBAAce,KAAKF,GAAG,YAAYN,GAAG,6WAA6W,KAAKgB,MAAMC,MAAM,CAAC;AACpavB,eAAae,KAAKH,GAAG,MAAM,cAAc,KAAKU,MAAME,QAAQ,OAAO;AACnExB,eAAagB,KAAKJ,GAAG,MAAM,qBAAqB,KAAKU,MAAMG,YAAY;AACvExB,oBAAkBgB,KAAKL,GAAG,YAAY,KAAKU,MAAMI,MAAM;AACvDxB,mBAAiBgB,KAAKN,GAAG,MAAM,kBAAkB,KAAKU,MAAMK,SAAS;AACrE3B,eAAamB,KAAKP,GAAG,MAAM,cAAc,KAAKU,MAAMM,KAAK;AACzD5B,eAAaoB,KAAKR,GAAG,MAAM,YAAY,KAAKU,MAAMO,QAAQ;EAC1D,MAAMC,MAAKtB,MAAK;AACd,KAAEA,MAAa,KAAKc,MAAMU,UAAUxB,EAAE,EAAEA,EAAE;GAC1C,MAAMyB,MAAM,KAAKX,MAAMI;AACvB,OAAIO,QAAQC,KAAAA,GAAW;IACrB,MAAMC,MAAMF,OAAO,OAAO,KAAKG,OAAOH,IAAI;AAC1C,QAAIZ,KAAKK,UAAUS,IACjBd,MAAKK,QAAQS;;;AAInBhC,gBAAcU,MAAM,SAAS,CAAC,CAACQ,MAAMS,GAAG,CAAC,EAAElB,EAAE;AAC7C,SAAOC"}
@@ -0,0 +1,9 @@
1
+ //#region ../gea/src/runtime/internal-symbols.ts
2
+ const GEA_SET_PROPS = Symbol.for("gea.component.setProps");
3
+ const GEA_DISPOSER = Symbol();
4
+ const GEA_CREATED_CALLED = Symbol();
5
+ const GEA_OBSERVE_DIRECT = Symbol();
6
+ //#endregion
7
+ export { GEA_SET_PROPS as i, GEA_DISPOSER as n, GEA_OBSERVE_DIRECT as r, GEA_CREATED_CALLED as t };
8
+
9
+ //# sourceMappingURL=internal-symbols.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-symbols.mjs","names":[],"sources":["../../gea/src/runtime/internal-symbols.ts"],"sourcesContent":["export const GEA_SET_PROPS = Symbol.for('gea.component.setProps')\nexport const GEA_DISPOSER = Symbol()\nexport const GEA_CREATED_CALLED = Symbol()\nexport const GEA_OBSERVE_DIRECT = Symbol()\nexport const GEA_ROOT_PROXY_HANDLER_FACTORY = Symbol.for('gea.store.rootProxyHandlerFactory')\nexport const GEA_NO_STORE_PROXY = Symbol()\n"],"mappings":";AAAA,MAAa,gBAAgB,OAAO,IAAI,yBAAyB;AACjE,MAAa,eAAe,QAAQ;AACpC,MAAa,qBAAqB,QAAQ;AAC1C,MAAa,qBAAqB,QAAQ"}
@@ -0,0 +1,31 @@
1
+ import { n as trackRead } from "./bind.mjs";
2
+ //#region ../gea/src/runtime/keyed-list/item-obs.ts
3
+ function _TOMBSTONE() {}
4
+ var ItemObs = class {
5
+ constructor(initial) {
6
+ this._o = [];
7
+ this.current = initial;
8
+ }
9
+ observe(_path, fn) {
10
+ const idx = this._o.length;
11
+ this._o.push(fn);
12
+ return () => {
13
+ this._o[idx] = _TOMBSTONE;
14
+ };
15
+ }
16
+ _fire() {
17
+ for (let i = 0; i < this._o.length; i++) this._o[i]();
18
+ }
19
+ };
20
+ function createItemObservable(initial) {
21
+ return new ItemObs(initial);
22
+ }
23
+ /** Read a row's current value, including primitives, while recording its dependency. */
24
+ function readItem(obs) {
25
+ trackRead(obs, "current");
26
+ return obs.current;
27
+ }
28
+ //#endregion
29
+ export { readItem as n, createItemObservable as t };
30
+
31
+ //# sourceMappingURL=item-obs.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item-obs.mjs","names":[],"sources":["../../gea/src/runtime/keyed-list/item-obs.ts"],"sourcesContent":["/**\n * Per-item observable for keyed-list rows that have item-rooted reactive\n * bindings NOT extractable into patchRow (e.g., destructured item params,\n * reactive getters referencing `item` inside createItem). Each row gets\n * one `ItemObservable` and one Proxy wrapping it so that `trackRead` picks\n * up a dep on the current item value.\n *\n * Elided at the keyed-list level when `cfg.noItemProxy` is true — the\n * compiler sets that flag when it proves createItem has no such bindings.\n */\nimport { GEA_PROXY_RAW } from '../../symbols'\nimport { trackRead } from '../with-tracking'\nimport type { ItemObservable } from './types'\n\n// Class-based (prototype shares observe/_fire) + tombstone-array observer\n// list. Per-row savings: no per-instance method closures (was 2 per row),\n// and O(1) unsubscribe for teardown (was Set.delete hop + hash probe per\n// binding × rows on 09_clear1k).\n// The tombstone is a shared no-op, not `null`. A `((() => void) | null)[]`\n// field gives geatsc two incompatible vector element representations for the\n// same class field (`vector<function...>` from the pushes, `vector<null>` from\n// the tombstone write) and it aborts with \"Static representation conflict for\n// class-field ... ItemObs:_o\". One element type keeps the field exact; the\n// unsubscribe is still O(1) and a fired tombstone is a single empty call.\nfunction _TOMBSTONE(): void {\n /* unsubscribed observer */\n}\n\nclass ItemObs<T> implements ItemObservable<T> {\n current: T\n _o: Array<() => void> = []\n constructor(initial: T) {\n this.current = initial\n }\n observe(_path: string | string[], fn: () => void): () => void {\n const idx = this._o.length\n this._o.push(fn)\n return () => {\n this._o[idx] = _TOMBSTONE\n }\n }\n _fire(): void {\n for (let i = 0; i < this._o.length; i++) {\n this._o[i]()\n }\n }\n}\n\nexport function createItemObservable<T>(initial: T): ItemObservable<T> {\n return new ItemObs(initial)\n}\n\n/** Read a row's current value, including primitives, while recording its dependency. */\nexport function readItem<T>(obs: ItemObservable<T>): T {\n trackRead(obs as object, 'current')\n return obs.current\n}\n\n/**\n * A live-reading proxy standing in for `obs.current` — property reads\n * forward to whatever the CURRENT item is (not the item at proxy-creation\n * time), so it's typed as `T` itself: everywhere it's used, it's meant to\n * read exactly like the item it wraps.\n */\nexport function createItemProxy<T>(obs: ItemObservable<T>): T {\n return new Proxy(\n {},\n {\n get(_t, prop) {\n if (prop === GEA_PROXY_RAW) return obs.current\n trackRead(obs as object, 'current')\n const cur = obs.current\n if (cur == null) return undefined\n return (cur as Record<PropertyKey, unknown>)[prop]\n },\n has(_t, prop) {\n const cur = obs.current\n return cur != null && prop in Object(cur)\n },\n ownKeys() {\n const cur = obs.current\n return cur != null ? Reflect.ownKeys(Object(cur)) : []\n },\n getOwnPropertyDescriptor(_t, prop) {\n const cur = obs.current\n if (cur == null) return undefined\n return (\n Object.getOwnPropertyDescriptor(Object(cur), prop) ?? {\n enumerable: true,\n configurable: true,\n value: (cur as Record<PropertyKey, unknown>)[prop],\n }\n )\n },\n },\n ) as T\n}\n"],"mappings":";;AAwBA,SAAS,aAAmB;AAI5B,IAAM,UAAN,MAA8C;CAG5C,YAAY,SAAY;YADA,EAAE;AAExB,OAAK,UAAU;;CAEjB,QAAQ,OAA0B,IAA4B;EAC5D,MAAM,MAAM,KAAK,GAAG;AACpB,OAAK,GAAG,KAAK,GAAG;AAChB,eAAa;AACX,QAAK,GAAG,OAAO;;;CAGnB,QAAc;AACZ,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,GAAG,QAAQ,IAClC,MAAK,GAAG,IAAI;;;AAKlB,SAAgB,qBAAwB,SAA+B;AACrE,QAAO,IAAI,QAAQ,QAAQ;;;AAI7B,SAAgB,SAAY,KAA2B;AACrD,WAAU,KAAe,UAAU;AACnC,QAAO,IAAI"}
@@ -0,0 +1,6 @@
1
+ //#region ../gea/src/runtime/keyed-list-symbols.ts
2
+ const GEA_DOM_ITEM = Symbol();
3
+ //#endregion
4
+ export { GEA_DOM_ITEM as t };
5
+
6
+ //# sourceMappingURL=keyed-list-symbols.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyed-list-symbols.mjs","names":[],"sources":["../../gea/src/runtime/keyed-list-symbols.ts"],"sourcesContent":["/** Symbols used by keyed-list row roots and compiler/runtime compatibility. */\nexport const GEA_DOM_KEY = Symbol()\nexport const GEA_DOM_ITEM = Symbol()\n"],"mappings":";AAEA,MAAa,eAAe,QAAQ"}