@geajs/ui 0.2.3 → 0.2.9

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 +130 -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 +322 -261
  32. package/dist/combobox.mjs.map +1 -1
  33. package/dist/compiled-component.mjs +119 -0
  34. package/dist/compiled-component.mjs.map +1 -0
  35. package/dist/compiled-reactive-component.mjs +337 -0
  36. package/dist/compiled-reactive-component.mjs.map +1 -0
  37. package/dist/component-id.mjs +10 -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 +46 -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 +321 -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 +337 -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 +68 -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 +487 -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 +53 -0
  120. package/dist/reactive-class.mjs.map +1 -0
  121. package/dist/reactive-style.mjs +21 -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 +25 -3
  164. package/dist/zag-component.mjs +63 -16
  165. package/dist/zag-component.mjs.map +1 -1
  166. package/package.json +5 -5
  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
package/dist/avatar.mjs CHANGED
@@ -1,27 +1,28 @@
1
1
  import { t as ZagComponent } from "./zag-component.mjs";
2
- import { Component, GEA_ELEMENT, GEA_ON_PROP_CHANGE, GEA_PATCH_COND, GEA_REGISTER_COND, geaCondValueSymbol, geaEscapeHtml, geaSanitizeAttr } from "@geajs/core";
2
+ import { o as GEA_CREATE_TEMPLATE } from "./bind.mjs";
3
+ import { t as reactiveText } from "./reactive-text.mjs";
4
+ import { t as reactiveAttr } from "./reactive-attr.mjs";
5
+ import { t as reactiveClassName } from "./reactive-class-name.mjs";
6
+ import { t as conditional } from "./conditional.mjs";
3
7
  import { normalizeProps } from "@zag-js/vanilla";
4
8
  import * as avatar from "@zag-js/avatar";
5
9
  //#region src/components/avatar.tsx
10
+ let _tpl0_root = null;
11
+ function _tpl0_create() {
12
+ const t = document.createElement("template");
13
+ t.innerHTML = "<div data-part=root><!--1--><div data-part=fallback>0";
14
+ return t.content.firstChild;
15
+ }
16
+ let _tpl1_root = null;
17
+ function _tpl1_create() {
18
+ const t = document.createElement("template");
19
+ t.innerHTML = "<img data-part=image class=\"avatar-image absolute inset-0 h-full w-full object-cover\">";
20
+ return t.content.firstChild;
21
+ }
6
22
  var Avatar = class extends ZagComponent {
7
- static {
8
- this.__geaTagName = "gea-avatar";
9
- }
10
- constructor(...args) {
11
- super(...args);
23
+ constructor(..._args) {
24
+ super(..._args);
12
25
  this.loaded = false;
13
- this.props;
14
- this[geaCondValueSymbol(0)] = !!this.props.src;
15
- this[GEA_REGISTER_COND](0, "c0", () => {
16
- this.props;
17
- return this.props.src;
18
- }, () => {
19
- this.props;
20
- return `<img data-part="image"${this.props.src == null || this.props.src === false ? "" : ` src="${geaSanitizeAttr("src", String(this.props.src))}"`}${(this.props.name || "") == null || (this.props.name || "") === false ? "" : ` alt="${this.props.name || ""}"`} class="avatar-image absolute inset-0 h-full w-full object-cover" />`;
21
- }, () => {
22
- this.props;
23
- return "";
24
- });
25
26
  }
26
27
  createMachine(_props) {
27
28
  return avatar.machine;
@@ -45,50 +46,25 @@ var Avatar = class extends ZagComponent {
45
46
  syncState(api) {
46
47
  this.loaded = api.loaded;
47
48
  }
48
- template(props) {
49
- const __id = this.id;
50
- Component._register(ZagComponent, "zag-component");
51
- const initials = props.fallback || (props.name ? props.name.split(" ").map((n) => n[0]).join("").toUpperCase() : "?");
52
- return `<div id="${__id}" data-part="root" class="${`avatar-root relative inline-flex h-10 w-10 shrink-0 overflow-hidden rounded-full ${props.class || ""}`.trim()}"><!--${__id + "-c0"}-->${(props.src ? `<img data-part="image"${props.src == null || props.src === false ? "" : ` src="${geaSanitizeAttr("src", String(props.src))}"`}${(props.name || "") == null || (props.name || "") === false ? "" : ` alt="${props.name || ""}"`} class="avatar-image absolute inset-0 h-full w-full object-cover" />` : "") || ""}<!--${__id + "-c0-end"}--><div id="${__id + "-b1"}" data-part="fallback" class="${`avatar-fallback flex h-full w-full items-center justify-center rounded-full bg-muted text-muted-foreground text-sm font-medium ${props.src ? "absolute inset-0" : ""}`.trim()}">${geaEscapeHtml(String(initials))}</div></div>`;
53
- }
54
- [GEA_ON_PROP_CHANGE](key, value) {
55
- const __id = this.id;
56
- if (key === "class") {
57
- const __el = this[GEA_ELEMENT];
58
- this.props;
59
- const __boundValue = `avatar-root relative inline-flex h-10 w-10 shrink-0 overflow-hidden rounded-full ${value || ""}`;
60
- if (__el) {
61
- const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
62
- if (__el.className !== __newClass) __el.className = __newClass;
63
- }
64
- }
65
- if (key === "src") {
66
- const __el = this.__e0 || (this.__e0 = __gid(__id + "-b1"));
67
- this.props;
68
- const __boundValue = `avatar-fallback flex h-full w-full items-center justify-center rounded-full bg-muted text-muted-foreground text-sm font-medium ${value ? "absolute inset-0" : ""}`;
69
- if (__el) {
70
- const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
71
- if (__el.className !== __newClass) __el.className = __newClass;
72
- }
73
- }
74
- if (key === "fallback") {
75
- const __el = this.__e1 || (this.__e1 = __gid(__id + "-b1"));
76
- this.props;
77
- const __boundValue = this.props.fallback || (this.props.name ? this.props.name.split(" ").map((n) => n[0]).join("").toUpperCase() : "?");
78
- if (__el && __el.textContent !== __boundValue) __el.textContent = __boundValue;
79
- }
80
- if (key === "name") {
81
- const __el = this.__e2 || (this.__e2 = __gid(__id + "-b1"));
82
- this.props;
83
- const __boundValue = this.props.fallback || (this.props.name ? this.props.name.split(" ").map((n) => n[0]).join("").toUpperCase() : "?");
84
- if (__el && __el.textContent !== __boundValue) __el.textContent = __boundValue;
85
- }
86
- if (key === "src" || key === "name") this[GEA_PATCH_COND](0);
87
- }
88
- __resetEls() {
89
- this.__e0 = null;
90
- this.__e1 = null;
91
- this.__e2 = null;
49
+ [GEA_CREATE_TEMPLATE](d) {
50
+ this.props.fallback || this.props.name && this.props.name.split(" ").map((n) => n[0]).join("").toUpperCase();
51
+ const root = (_tpl0_root || (_tpl0_root = _tpl0_create())).cloneNode(true);
52
+ const el0 = root;
53
+ const anchor1 = root.firstChild;
54
+ const el2 = root.childNodes[1];
55
+ const marker3 = root.childNodes[1].firstChild;
56
+ reactiveClassName(el0, d, this, () => `avatar-root relative inline-flex h-10 w-10 shrink-0 overflow-hidden rounded-full ${this.props.class || ""}`);
57
+ conditional(anchor1.parentNode, anchor1, d, this, () => this.props.src, (d) => {
58
+ const root = (_tpl1_root || (_tpl1_root = _tpl1_create())).cloneNode(true);
59
+ const el0 = root;
60
+ const el1 = el0;
61
+ reactiveAttr(el0, d, this, "src", () => this.props.src);
62
+ reactiveAttr(el1, d, this, "alt", () => this.props.name || "");
63
+ return root;
64
+ }, (d) => document.createTextNode(""));
65
+ reactiveClassName(el2, d, this, () => `avatar-fallback flex h-full w-full items-center justify-center rounded-full bg-muted text-muted-foreground text-sm font-medium ${this.props.src ? "absolute inset-0" : ""}`);
66
+ reactiveText(marker3, d, this, () => (this.props.name, this.props, this.props.fallback || (this.props.name ? this.props.name.split(" ").map((n) => n[0]).join("").toUpperCase() : "?")));
67
+ return root;
92
68
  }
93
69
  };
94
70
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"avatar.mjs","names":["Component","geaCondValueSymbol","GEA_REGISTER_COND","geaSanitizeAttr","geaEscapeHtml","GEA_ON_PROP_CHANGE","GEA_ELEMENT","GEA_PATCH_COND","avatar","normalizeProps","ZagComponent","Avatar","__geaTagName","constructor","args","props","src","String","name","loaded","createMachine","_props","machine","getMachineProps","id","onStatusChange","connectApi","service","connect","getSpreadMap","syncState","api","template","__id","_register","initials","fallback","split","map","n","join","toUpperCase","class","trim","key","value","__el","__boundValue","__newClass","replace","className","__e0","__gid","__e1","textContent","__e2","__resetEls"],"sources":["../src/components/avatar.tsx"],"sourcesContent":["import * as avatar from '@zag-js/avatar'\nimport { normalizeProps } from '@zag-js/vanilla'\nimport ZagComponent from '../primitives/zag-component'\n\nexport default class Avatar extends ZagComponent {\n loaded = false\n\n createMachine(_props: any): any {\n return avatar.machine\n }\n\n getMachineProps(props: any) {\n return {\n id: this.id,\n onStatusChange: props.onStatusChange,\n }\n }\n\n connectApi(service: any) {\n return avatar.connect(service, normalizeProps)\n }\n\n getSpreadMap() {\n return {\n '[data-part=\"root\"]': 'getRootProps',\n '[data-part=\"image\"]': 'getImageProps',\n '[data-part=\"fallback\"]': 'getFallbackProps',\n }\n }\n\n syncState(api: any) {\n this.loaded = api.loaded\n }\n\n template(props: any) {\n const initials =\n props.fallback ||\n (props.name\n ? props.name\n .split(' ')\n .map((n: string) => n[0])\n .join('')\n .toUpperCase()\n : '?')\n return (\n <div\n data-part=\"root\"\n class={`avatar-root relative inline-flex h-10 w-10 shrink-0 overflow-hidden rounded-full ${props.class || ''}`}\n >\n {props.src ? (\n <img\n data-part=\"image\"\n src={props.src}\n alt={props.name || ''}\n class=\"avatar-image absolute inset-0 h-full w-full object-cover\"\n />\n ) : (\n ''\n )}\n <div\n data-part=\"fallback\"\n class={`avatar-fallback flex h-full w-full items-center justify-center rounded-full bg-muted text-muted-foreground text-sm font-medium ${props.src ? 'absolute inset-0' : ''}`}\n >\n {initials}\n </div>\n </div>\n )\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"avatar.mjs","names":["GEA_CREATE_TEMPLATE","reactiveClassName","reactiveAttr","conditional","reactiveText","avatar","normalizeProps","ZagComponent","_tpl0_root","_tpl0_create","t","document","createElement","innerHTML","content","firstChild","_tpl1_root","_tpl1_create","Avatar","loaded","createMachine","_props","machine","getMachineProps","props","id","onStatusChange","connectApi","service","connect","getSpreadMap","syncState","api","d","initials","fallback","name","split","map","n","join","toUpperCase","root","cloneNode","el0","anchor1","el2","childNodes","marker3","class","parentNode","src","el1","createTextNode","t3"],"sources":["../src/components/avatar.tsx"],"sourcesContent":["import * as avatar from '@zag-js/avatar'\nimport { normalizeProps } from '@zag-js/vanilla'\nimport ZagComponent from '../primitives/zag-component'\n\nexport default class Avatar extends ZagComponent {\n loaded = false\n\n createMachine(_props: any): any {\n return avatar.machine\n }\n\n getMachineProps(props: any) {\n return {\n id: this.id,\n onStatusChange: props.onStatusChange,\n }\n }\n\n connectApi(service: any) {\n return avatar.connect(service, normalizeProps)\n }\n\n getSpreadMap() {\n return {\n '[data-part=\"root\"]': 'getRootProps',\n '[data-part=\"image\"]': 'getImageProps',\n '[data-part=\"fallback\"]': 'getFallbackProps',\n }\n }\n\n syncState(api: any) {\n this.loaded = api.loaded\n }\n\n template(props: any) {\n const initials =\n props.fallback ||\n (props.name\n ? props.name\n .split(' ')\n .map((n: string) => n[0])\n .join('')\n .toUpperCase()\n : '?')\n return (\n <div\n data-part=\"root\"\n class={`avatar-root relative inline-flex h-10 w-10 shrink-0 overflow-hidden rounded-full ${props.class || ''}`}\n >\n {props.src ? (\n <img\n data-part=\"image\"\n src={props.src}\n alt={props.name || ''}\n class=\"avatar-image absolute inset-0 h-full w-full object-cover\"\n />\n ) : (\n ''\n )}\n <div\n data-part=\"fallback\"\n class={`avatar-fallback flex h-full w-full items-center justify-center rounded-full bg-muted text-muted-foreground text-sm font-medium ${props.src ? 'absolute inset-0' : ''}`}\n >\n {initials}\n </div>\n </div>\n )\n }\n}\n"],"mappings":";;;;;;;;;AAIA,IAAIQ,aAAa;AACjB,SAASC,eAAe;CACtB,MAAMC,IAAIC,SAASC,cAAc,WAAW;AAC5CF,GAAEG,YAAY;AACd,QAAOH,EAAEI,QAAQC;;AAEnB,IAAIC,aAAa;AACjB,SAASC,eAAe;CACtB,MAAMP,IAAIC,SAASC,cAAc,WAAW;AAC5CF,GAAEG,YAAY;AACd,QAAOH,EAAEI,QAAQC;;AAEnB,IAAqBG,SAArB,cAAoCX,aAAa;;;gBACtC;;CACTa,cAAcC,QAAkB;AAC9B,SAAOhB,OAAOiB;;CAEhBC,gBAAgBC,OAAY;AAC1B,SAAO;GACLC,IAAI,KAAKA;GACTC,gBAAgBF,MAAME;GACvB;;CAEHC,WAAWC,SAAc;AACvB,SAAOvB,OAAOwB,QAAQD,SAAStB,eAAe;;CAEhDwB,eAAe;AACb,SAAO;GACL,wBAAsB;GACtB,yBAAuB;GACvB,4BAA0B;GAC3B;;CAEHC,UAAUC,KAAU;AAClB,OAAKb,SAASa,IAAIb;;CAEpB,CAACnB,qBAAqBiC,GAAG;AACN,OAAKT,MAAMW,YAAa,KAAKX,MAAMY,QAAO,KAAKZ,MAAMY,KAAKC,MAAM,IAAI,CAACC,KAAKC,MAAcA,EAAE,GAAG,CAACC,KAAK,GAAG,CAACC,aAAa;EACrI,MAAMC,QAAQlC,eAAeA,aAAaC,cAAc,GAAGkC,UAAU,KAAK;EAC1E,MAAMC,MAAMF;EACZ,MAAMG,UAAUH,KAAK3B;EACrB,MAAM+B,MAAMJ,KAAKK,WAAW;EAC5B,MAAMC,UAAUN,KAAKK,WAAW,GAAGhC;AACnCd,oBAAkB2C,KAAKX,GAAG,YAAY,oFAAoF,KAAKT,MAAMyB,SAAS,KAAK;AACnJ9C,cAAY0C,QAAQK,YAAYL,SAASZ,GAAG,YAAY,KAAKT,MAAM2B,MAAKlB,MAAK;GAC3E,MAAMS,QAAQ1B,eAAeA,aAAaC,cAAc,GAAG0B,UAAU,KAAK;GAC1E,MAAMC,MAAMF;GACZ,MAAMU,MAAMR;AACZ1C,gBAAa0C,KAAKX,GAAG,MAAM,aAAa,KAAKT,MAAM2B,IAAI;AACvDjD,gBAAakD,KAAKnB,GAAG,MAAM,aAAa,KAAKT,MAAMY,QAAQ,GAAG;AAC9D,UAAOM;MACNT,MAAKtB,SAAS0C,eAAe,GAAG,CAAC;AACpCpD,oBAAkB6C,KAAKb,GAAG,YAAY,kIAAkI,KAAKT,MAAM2B,MAAM,qBAAqB,KAAK;AAEnN/C,eAAakD,SAAIrB,GAAG,aAAkB,KAAKT,MAAMY,MAAW,KAAKZ,OAAO,KAAKA,MAAMW,aAAa,KAAKX,MAAMY,OAAO,KAAKZ,MAAMY,KAAKC,MAAM,IAAI,CAACC,KAAKC,MAAcA,EAAE,GAAG,CAACC,KAAK,GAAG,CAACC,aAAa,GAAG,MAAM;AACrM,SAAOC"}
package/dist/badge.d.mts CHANGED
@@ -2,7 +2,7 @@ import { Component } from "@geajs/core";
2
2
 
3
3
  //#region src/components/badge.d.ts
4
4
  declare class Badge extends Component {
5
- template(props: any): string;
5
+ template(props: any): any;
6
6
  }
7
7
  //#endregion
8
8
  export { Badge as default };
package/dist/badge.mjs CHANGED
@@ -1,5 +1,7 @@
1
- import { t as cn } from "./cn.mjs";
2
- import { Component, GEA_ELEMENT, GEA_INSTANTIATE_CHILD_COMPONENTS, GEA_MOUNT_COMPILED_CHILD_COMPONENTS, GEA_ON_PROP_CHANGE, GEA_PATCH_NODE } from "@geajs/core";
1
+ import { n as cn, t as CompiledComponent } from "./compiled-component.mjs";
2
+ import { o as GEA_CREATE_TEMPLATE } from "./bind.mjs";
3
+ import { t as reactiveText } from "./reactive-text.mjs";
4
+ import { t as reactiveClass } from "./reactive-class.mjs";
3
5
  //#region src/components/badge.tsx
4
6
  const variants = {
5
7
  default: "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80",
@@ -7,47 +9,20 @@ const variants = {
7
9
  destructive: "border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80",
8
10
  outline: "text-foreground"
9
11
  };
10
- var Badge = class extends Component {
11
- static {
12
- this.__geaTagName = "gea-badge";
13
- }
14
- template(props) {
15
- const __id = this.id;
16
- const variant = variants[props.variant || "default"] || variants.default;
17
- return `<span id="${__id}"${cn("inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring", variant, props.class) == null || cn("inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring", variant, props.class) === false ? "" : ` class="${(cn("inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring", variant, props.class) != null ? String(cn("inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring", variant, props.class)) : "").trim()}"`}>${props.children}</span>`;
18
- }
19
- [GEA_ON_PROP_CHANGE](key, value) {
20
- if (key === "variant") {
21
- const __el = this[GEA_ELEMENT];
22
- const __boundValue = cn("inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring", variants[this.props.variant || "default"] || variants.default, this.props.class);
23
- if (__el) {
24
- const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
25
- if (__el.className !== __newClass) __el.className = __newClass;
26
- }
27
- }
28
- if (key === "class") {
29
- const __el = this[GEA_ELEMENT];
30
- const __boundValue = cn("inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring", variants[this.props.variant || "default"] || variants.default, value);
31
- if (__el) {
32
- const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
33
- if (__el.className !== __newClass) __el.className = __newClass;
34
- }
35
- }
36
- if (key === "children") {
37
- const __el = this[GEA_ELEMENT];
38
- if (__el) {
39
- const __tw = document.createElement("template");
40
- __tw.innerHTML = value;
41
- const __newEl = __tw.content.firstElementChild;
42
- const __existEl = __el.firstElementChild;
43
- if (__newEl && __existEl && __tw.content.childNodes.length === 1) this.constructor[GEA_PATCH_NODE](__existEl, __newEl, true);
44
- else if (__el.innerHTML !== value) {
45
- __el.innerHTML = value;
46
- this[GEA_INSTANTIATE_CHILD_COMPONENTS]();
47
- if (this.parentComponent) this.parentComponent[GEA_MOUNT_COMPILED_CHILD_COMPONENTS]();
48
- }
49
- }
50
- }
12
+ function _tpl0_create() {
13
+ const e = document.createElement("span");
14
+ e.textContent = "0";
15
+ return e;
16
+ }
17
+ var Badge = class extends CompiledComponent {
18
+ [GEA_CREATE_TEMPLATE](d) {
19
+ variants[this.props.variant || "default"] || variants.default;
20
+ const root = _tpl0_create();
21
+ const el0 = root;
22
+ const marker1 = root.firstChild;
23
+ reactiveClass(el0, d, this, () => (variants.default, cn("inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring", variants[this.props.variant || "default"] || variants.default, this.props.class)));
24
+ reactiveText(marker1, d, this, () => this.props.children);
25
+ return root;
51
26
  }
52
27
  };
53
28
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"badge.mjs","names":["Component","GEA_ON_PROP_CHANGE","GEA_ELEMENT","GEA_PATCH_NODE","GEA_INSTANTIATE_CHILD_COMPONENTS","GEA_MOUNT_COMPILED_CHILD_COMPONENTS","cn","variants","Record","default","secondary","destructive","outline","Badge","__geaTagName","template","props","__id","id","variant","class","String","trim","children","key","value","__el","__boundValue","__newClass","replace","className","__tw","document","createElement","innerHTML","__newEl","content","firstElementChild","__existEl","childNodes","length","constructor","parentComponent"],"sources":["../src/components/badge.tsx"],"sourcesContent":["import { Component } from '@geajs/core'\nimport { cn } from '../utils/cn'\n\nconst variants: Record<string, string> = {\n default: 'border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80',\n secondary: 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\n destructive: 'border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80',\n outline: 'text-foreground',\n}\n\nexport default class Badge extends Component {\n template(props: any) {\n const variant = variants[props.variant || 'default'] || variants.default\n\n return (\n <span\n class={cn(\n 'inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring',\n variant,\n props.class,\n )}\n >\n {props.children}\n </span>\n )\n }\n}\n"],"mappings":";;;AAGA,MAAMO,WAAmC;CACvCE,SAAS;CACTC,WAAW;CACXC,aAAa;CACbC,SAAS;CACV;AAED,IAAqBC,QAArB,cAAmCb,UAAU;;sBAAA;;CAC3Ce,SAASC,OAAY;EAAA,MAAAC,OAAA,KAAAC;EACnB,MAAMC,UAAUZ,SAASS,MAAMG,WAAW,cAAcZ,SAASE;AAEjE,SAAA,aAAAQ,KAAA,GAEWX,GACL,sJACAa,SACAH,MAAMI,MACP,IAAA,QAJMd,GACL,sJACAa,SACAH,MAAMI,MACP,KAAA,QAAA,KAAA,YAJMd,GACL,sJACAa,SACAH,MAAMI,MACP,IAAA,OAAAC,OAJMf,GACL,sJACAa,SACAH,MAAMI,MACP,CAAA,GAAA,IAAAE,MAAA,CAAA,GAAA,GAEAN,MAAMO,SAAQ;;CArBvB,CAAAtB,oBAAwBuB,KAAKC,OAAK;AAAA,MAAAD,QAAA,WAAA;GAAA,MAAAE,OAAA,KAAAxB;GAW0C,MAAAyB,eAI7DrB,GACL,sJALUC,SADC,KAAAS,MACcG,WAAW,cAAcZ,SAASE,SAXrE,KAAKO,MAkBWI,MACP;AAAA,OAAAM,MAnBT;IACM,MAAME,aADXP,OAAOM,gBAAyB,GAAG,CAAEL,MAAM,CAACO,QAAQ,QAAQ,IACf;AACxC,QAAIH,KAAsBI,cAAcF,WAAYF,MAAsBI,YAAYF;;;AACvF,MAAAJ,QAAA,SAAA;GAAA,MAAAE,OAAA,KAAAxB;GAQuE,MAAAyB,eAI7DrB,GACL,sJALUC,SADC,KAAAS,MACcG,WAAW,cAAcZ,SAASE,SAMpDgB,MAER;AAAA,OAAAC,MAnBT;IACM,MAAME,aADXP,OAAOM,gBAAyB,GAAG,CAAEL,MAAM,CAACO,QAAQ,QAAQ,IACf;AACxC,QAAIH,KAAsBI,cAAcF,WAAYF,MAAsBI,YAAYF;;;AACvF,MAAAJ,QAAA,YAAA;GAAA,MAAAE,OAAA,KAAAxB;AAAA,OAAAwB,MAHL;IACI,MAAMK,OAAOC,SAASC,cAAc,WAAW;AAC/CF,SAAKG,YAAST;IACd,MAAMU,UAAUJ,KAAKK,QAAQC;IAC7B,MAAMC,YAAYZ,KAAsBW;AACxC,QAAIF,WAAWG,aAAaP,KAAKK,QAAQG,WAAWC,WAAW,EAC7D,MAAKC,YAAWtC,gBAAwBmC,WAAWH,SAAS,KAAK;aACxDT,KAAsBQ,cAAST,OAA4B;AACpEC,UAAsBQ,YAAST;AAC/B,UAAIrB,mCAAyB;AAC7B,SAAI,KAAKsC,gBAAiB,MAAKA,gBAAerC,sCAAyB"}
1
+ {"version":3,"file":"badge.mjs","names":["GEA_CREATE_TEMPLATE","reactiveClass","reactiveText","CompiledComponent","Component","cn","variants","Record","default","secondary","destructive","outline","_tpl0_create","e","document","createElement","textContent","Badge","d","variant","props","root","el0","marker1","firstChild","class","t1","children"],"sources":["../src/components/badge.tsx"],"sourcesContent":["import { Component } from '@geajs/core'\nimport { cn } from '../utils/cn'\n\nconst variants: Record<string, string> = {\n default: 'border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80',\n secondary: 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\n destructive: 'border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80',\n outline: 'text-foreground',\n}\n\nexport default class Badge extends Component {\n template(props: any) {\n const variant = variants[props.variant || 'default'] || variants.default\n\n return (\n <span\n class={cn(\n 'inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring',\n variant,\n props.class,\n )}\n >\n {props.children}\n </span>\n )\n }\n}\n"],"mappings":";;;;;AAGA,MAAMM,WAAmC;CACvCE,SAAS;CACTC,WAAW;CACXC,aAAa;CACbC,SAAS;CACV;AACD,SAASC,eAAe;CACtB,MAAMC,IAAIC,SAASC,cAAc,OAAO;AACxCF,GAAEG,cAAc;AAChB,QAAOH;;AAET,IAAqBI,QAArB,cAAmCd,kBAAkB;CACnD,CAACH,qBAAqBkB,GAAG;AACPZ,WAAS,KAAKc,MAAMD,WAAW,cAAcb,SAASE;EACtE,MAAMa,OAAOT,cAAc;EAC3B,MAAMU,MAAMD;EACZ,MAAME,UAAUF,KAAKG;AACrBvB,gBAAcqB,KAAKJ,GAAG,aAAkBZ,SAASE,SAASH,GAAG,sJAAsJC,SAAS,KAAKc,MAAMD,WAAW,cAAcb,SAASE,SAAS,KAAKY,MAAMK,MAAM,EAAE;AAErSvB,eAAawB,SAAIR,GAAG,YAAY,KAAKE,MAAMO,SAAS;AACpD,SAAON"}
package/dist/bind.mjs ADDED
@@ -0,0 +1,130 @@
1
+ //#region ../gea/src/runtime/symbols.ts
2
+ /**
3
+ * Closure-compiled core: the 8 surviving symbols.
4
+ *
5
+ * Descriptors match packages/gea/src/symbols.ts entries so `Symbol.for`
6
+ * interning keeps shared symbol identity across entrypoints.
7
+ */
8
+ const GEA_ELEMENT = Symbol.for("gea.element");
9
+ const GEA_STORE_ROOT = Symbol.for("gea.store.rootProxy");
10
+ const GEA_PROXY_RAW = Symbol.for("gea.proxy.raw");
11
+ const GEA_DOM_COMPONENT = Symbol.for("gea.dom.component");
12
+ const GEA_CREATE_TEMPLATE = Symbol.for("gea.component.createTemplate");
13
+ const GEA_ON_PROP_CHANGE = Symbol.for("gea.onPropChange");
14
+ //#endregion
15
+ //#region ../gea/src/runtime/subscribe.ts
16
+ function subscribe(root, path, fn) {
17
+ if (!root) return () => {};
18
+ let r = root;
19
+ let p = path;
20
+ while (p.length > 1) {
21
+ const head = p[0];
22
+ const next = r?.[head];
23
+ if (!next || typeof next.observe !== "function") break;
24
+ r = next;
25
+ p = p.slice(1);
26
+ }
27
+ if (!r || typeof r.observe !== "function") return () => {};
28
+ if (p.length === 0) return r.observe("", fn);
29
+ return r.observe(p, fn);
30
+ }
31
+ /** Resolve a path against the root proxy; returns `undefined` on null holes. */
32
+ function readPath(root, path) {
33
+ if (!root) return void 0;
34
+ let v = root;
35
+ for (let i = 0; i < path.length; i++) {
36
+ if (v == null) return void 0;
37
+ v = v[path[i]];
38
+ }
39
+ return v;
40
+ }
41
+ //#endregion
42
+ //#region ../gea/src/runtime/with-tracking.ts
43
+ let _active = null;
44
+ let _recursing = false;
45
+ /** Record a tracking read. Called by store.ts proxy traps. */
46
+ function trackRead(storeRoot, prop) {
47
+ if (!_active || _recursing) return;
48
+ if (typeof prop !== "string") return;
49
+ _recursing = true;
50
+ try {
51
+ const deps = _active.deps;
52
+ for (let i = 0; i < deps.length; i++) if (deps[i].root === storeRoot && deps[i].prop === prop) return;
53
+ deps.push({
54
+ root: storeRoot,
55
+ prop
56
+ });
57
+ } finally {
58
+ _recursing = false;
59
+ }
60
+ }
61
+ /** Suppress tracking for `fn`. */
62
+ function untrack(fn) {
63
+ const prev = _active;
64
+ _active = null;
65
+ try {
66
+ return fn();
67
+ } finally {
68
+ _active = prev;
69
+ }
70
+ }
71
+ function _depsEqual(a, b) {
72
+ if (a.length !== b.length) return false;
73
+ for (let i = 0; i < a.length; i++) if (a[i].root !== b[i].root || a[i].prop !== b[i].prop) return false;
74
+ return true;
75
+ }
76
+ function withTracking(disposer, root, fn) {
77
+ let offs = [];
78
+ let prevDeps = [];
79
+ const scope = { deps: [] };
80
+ let stable = 0;
81
+ const run = () => {
82
+ if (stable >= 2) {
83
+ fn();
84
+ return;
85
+ }
86
+ const prev = _active;
87
+ scope.deps = [];
88
+ _active = scope;
89
+ try {
90
+ fn();
91
+ } finally {
92
+ _active = prev;
93
+ const d2 = scope.deps;
94
+ if (_depsEqual(d2, prevDeps)) stable++;
95
+ else {
96
+ stable = 0;
97
+ for (let i = 0; i < offs.length; i++) offs[i]();
98
+ offs = [];
99
+ for (let i = 0; i < d2.length; i++) {
100
+ const d = d2[i];
101
+ offs.push(subscribe(d.root ?? root, [d.prop], run));
102
+ }
103
+ prevDeps = d2;
104
+ }
105
+ }
106
+ };
107
+ run();
108
+ disposer.add(() => {
109
+ for (let i = 0; i < offs.length; i++) offs[i]();
110
+ offs = [];
111
+ });
112
+ }
113
+ //#endregion
114
+ //#region ../gea/src/runtime/bind.ts
115
+ function bind(disposer, root, pathOrGetter, apply) {
116
+ if (Array.isArray(pathOrGetter)) {
117
+ apply(readPath(root, pathOrGetter));
118
+ const off = subscribe(root, pathOrGetter, apply);
119
+ disposer.add(off);
120
+ return;
121
+ }
122
+ const getter = pathOrGetter;
123
+ withTracking(disposer, root, () => {
124
+ apply(getter());
125
+ });
126
+ }
127
+ //#endregion
128
+ export { subscribe as a, GEA_ELEMENT as c, GEA_STORE_ROOT as d, withTracking as i, GEA_ON_PROP_CHANGE as l, trackRead as n, GEA_CREATE_TEMPLATE as o, untrack as r, GEA_DOM_COMPONENT as s, bind as t, GEA_PROXY_RAW as u };
129
+
130
+ //# sourceMappingURL=bind.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bind.mjs","names":[],"sources":["../../gea/src/runtime/symbols.ts","../../gea/src/runtime/subscribe.ts","../../gea/src/runtime/with-tracking.ts","../../gea/src/runtime/bind.ts"],"sourcesContent":["/**\n * Closure-compiled core: the 8 surviving symbols.\n *\n * Descriptors match packages/gea/src/symbols.ts entries so `Symbol.for`\n * interning keeps shared symbol identity across entrypoints.\n */\n\n// Identity (6)\nexport const GEA_ELEMENT = Symbol.for('gea.element')\nexport const GEA_STORE_ROOT = Symbol.for('gea.store.rootProxy')\nexport const GEA_PROXY_RAW = Symbol.for('gea.proxy.raw')\nexport const GEA_DOM_COMPONENT = Symbol.for('gea.dom.component')\nexport const GEA_PARENT_COMPONENT = Symbol.for('gea.component.parentComponent')\nexport const GEA_ITEM_KEY = Symbol.for('gea.itemKey')\n\n// Proxy detection (1)\nexport const GEA_PROXY_IS_PROXY = Symbol.for('gea.proxy.isProxy')\n\n// Protocol dispatch (1) — compiler emits `instance[GEA_CREATE_TEMPLATE](disposer)`.\nexport const GEA_CREATE_TEMPLATE = Symbol.for('gea.component.createTemplate')\nexport const GEA_ON_PROP_CHANGE = Symbol.for('gea.onPropChange')\n","/**\n * subscribe(root, path, fn) — path-indexed subscription helper for the\n * closure-compiled runtime.\n *\n * Delegates to the existing `Store.prototype.observe(path, handler)` API —\n * which already handles path-indexed buckets (`priv.observers`) and resolves\n * the tail on fire. That means `subscribe` does NOT need to extend store.ts\n * with a new registration entry point; the observer-bucket machinery already\n * handles the single-root-prop + tail-resolve case.\n *\n * `root` may be a Store proxy, a raw Store, or any object that exposes an\n * `observe(path, fn)` method (SSR shim uses the same signature).\n */\n\nimport type { Store, Change } from '../store'\n\ntype PathInput = readonly string[]\n\nexport function subscribe(root: any, path: PathInput, fn: (v: any, changes?: Change[]) => void): () => void {\n if (!root) return () => {}\n // Walk path prefixes: if the current root resolves `path[0]` to a nested Store\n // (has its own `.observe`), descend into it. This lets the compiler emit\n // `['store', 'count']` against `this` and have the subscription land on\n // `this.store` (the actual Store proxy) with tail `['count']`.\n let r: any = root\n let p: PathInput = path\n while (p.length > 1) {\n const head = p[0]\n const next = r?.[head]\n if (!next || typeof next.observe !== 'function') break\n r = next\n p = p.slice(1)\n }\n // If the final root doesn't have .observe, we can't subscribe — emit noop.\n if (!r || typeof r.observe !== 'function') return () => {}\n // Empty path → fire on any change (root-observer semantics in Store.observe).\n if (p.length === 0) return (r as Store).observe('', fn as any)\n // Pass `fn` directly as the observer — the trampoline `(v, changes) => fn(...)`\n // was a no-op hop that allocated one closure per subscribe (5k closures for\n // a 1000-row 5-binding list). Drop it.\n return (r as Store).observe(p, fn as any)\n}\n\n/** Resolve a path against the root proxy; returns `undefined` on null holes. */\nexport function readPath(root: any, path: readonly string[]): unknown {\n if (!root) return undefined\n let v: any = root\n for (let i = 0; i < path.length; i++) {\n if (v == null) return undefined\n v = v[path[i]]\n }\n return v\n}\n","/**\n * withTracking(disposer, root, fn) — lexical reactivity scope.\n *\n * Tracks (storeRoot, prop) tuples so the effect can subscribe on the real\n * store that owns each accessed property — not the `root` param (which for\n * fn components is a props-thunks proxy with no observe()).\n *\n * Scope is strictly lexical: `_active` is null outside of withTracking; store\n * proxy traps are a no-op in that case (zero ambient cost).\n *\n * Perf path: after 2 consecutive runs produce the SAME dep set, the effect\n * enters \"locked\" mode and subsequent re-runs skip the scope/tracking\n * entirely — `run` becomes a bare `fn()` call. Most reactive bindings in\n * keyed-list rows (e.g. `store.selected === item.id ? 'danger' : ''`)\n * read a fixed (store, item) pair every time, so this is the common case.\n * The 1000-effect fire on 04_select1k drops from \"1000 scope allocations +\n * 1000 dep comparisons\" to \"1000 plain function calls\".\n */\n\nimport type { Disposer } from './disposer'\nimport { subscribe } from './subscribe'\n\ninterface Dep {\n root: any\n prop: string\n}\ninterface Scope {\n deps: Dep[]\n}\nlet _active: Scope | null = null\nlet _recursing = false\n\n/** Record a tracking read. Called by store.ts proxy traps. */\nexport function trackRead(storeRoot: any, prop: string | symbol): void {\n if (!_active || _recursing) return\n if (typeof prop !== 'string') return\n _recursing = true\n try {\n // Linear dedup — 1-3 deps is typical per binding, a Map is overkill.\n const deps = _active.deps\n for (let i = 0; i < deps.length; i++) {\n if (deps[i].root === storeRoot && deps[i].prop === prop) return\n }\n deps.push({ root: storeRoot, prop })\n } finally {\n _recursing = false\n }\n}\n\n/** Test helper — no-op; real Store reads fire trackRead through the proxy. */\nexport function trackPath(_path: readonly string[]): void {\n /* no-op */\n}\n\n/** Suppress tracking for `fn`. */\nexport function untrack<T>(fn: () => T): T {\n const prev = _active\n _active = null\n try {\n return fn()\n } finally {\n _active = prev\n }\n}\n\nfunction _depsEqual(a: Dep[], b: Dep[]): boolean {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) {\n if (a[i].root !== b[i].root || a[i].prop !== b[i].prop) return false\n }\n return true\n}\n\nexport function withTracking(disposer: Disposer, root: any, fn: () => void): void {\n let offs: Array<() => void> = []\n let prevDeps: Dep[] = []\n // Reused across the 2 pre-lock runs — saves a Scope + deps array alloc\n // each fire on 01_run1k / 07_create10k (6000 allocs for 1000 rows × 3\n // bindings × 2 runs).\n const scope: Scope = { deps: [] }\n // Stability counter: 0 = first run; 1 = one identical run; 2 = locked.\n // Locked effects skip tracking on every subsequent fire (same idea as the\n // compiled patcher's fast path). Require 2 identical runs before locking so\n // conditional-dep bindings (e.g. `x && x.y`) get a chance to register\n // their full dep set before the fast path engages.\n let stable = 0\n const run = (): void => {\n if (stable >= 2) {\n fn()\n return\n }\n const prev = _active\n scope.deps = []\n _active = scope\n try {\n fn()\n } finally {\n _active = prev\n const d2 = scope.deps\n if (_depsEqual(d2, prevDeps)) {\n stable++\n } else {\n stable = 0\n for (let i = 0; i < offs.length; i++) offs[i]()\n offs = []\n for (let i = 0; i < d2.length; i++) {\n const d = d2[i]\n offs.push(subscribe(d.root ?? root, [d.prop], run))\n }\n prevDeps = d2\n }\n }\n }\n run()\n disposer.add(() => {\n for (let i = 0; i < offs.length; i++) offs[i]()\n offs = []\n })\n}\n","/**\n * bind(disposer, root, pathOrGetter, apply) — single wire-up primitive for\n * every reactive-* helper. All the reactive-attr/bool/class/style/value/text\n * wrappers share this shape: compute the value, write it via `apply`, and\n * re-run on source change.\n *\n * - Static path (string[]): `readPath` + `subscribe`, closure tracks prev.\n * - Dynamic getter (() => unknown): `withTracking` scope re-runs on any\n * tracked-path change.\n *\n * (Keep per-binding withTracking: batching into one effect per row WOULD\n * reduce allocation overhead on 01_run1k / 09_clear1k but triggers every\n * binding in the row on every fire, regressing 04_select1k catastrophically\n * when one store key change cascades through N applies that didn't actually\n * depend on it. Per-dep subscription is the right granularity for updates.)\n */\n\nimport type { Disposer } from './disposer'\nimport { readPath, subscribe } from './subscribe'\nimport { withTracking } from './with-tracking'\n\nexport function bind(\n disposer: Disposer,\n root: any,\n pathOrGetter: readonly string[] | (() => unknown),\n apply: (v: unknown) => void,\n): void {\n if (Array.isArray(pathOrGetter)) {\n apply(readPath(root, pathOrGetter))\n const off = subscribe(root, pathOrGetter, apply)\n disposer.add(off)\n return\n }\n const getter = pathOrGetter as () => unknown\n withTracking(disposer, root, () => {\n apply(getter())\n })\n}\n"],"mappings":"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"}
package/dist/button.d.mts CHANGED
@@ -1,3 +1,4 @@
1
+ import { n as MouseEventHandler, t as JSXNode } from "./types.mjs";
1
2
  import { Component } from "@geajs/core";
2
3
 
3
4
  //#region src/components/button.d.ts
@@ -11,10 +12,10 @@ interface ButtonProps {
11
12
  class?: string;
12
13
  click?: MouseEventHandler<HTMLButtonElement>;
13
14
  onClick?: MouseEventHandler<HTMLButtonElement>;
14
- children?: ReactNode;
15
+ children?: JSXNode;
15
16
  }
16
17
  declare class Button extends Component<ButtonProps> {
17
- template(props: ButtonProps): string;
18
+ template(props: ButtonProps): any;
18
19
  }
19
20
  //#endregion
20
21
  export { ButtonProps, ButtonSize, ButtonVariant, Button as default };
package/dist/button.mjs CHANGED
@@ -1,5 +1,10 @@
1
- import { t as cn } from "./cn.mjs";
2
- import { Component, GEA_ELEMENT, GEA_INSTANTIATE_CHILD_COMPONENTS, GEA_MOUNT_COMPILED_CHILD_COMPONENTS, GEA_ON_PROP_CHANGE, GEA_PATCH_NODE } from "@geajs/core";
1
+ import { n as cn, t as CompiledComponent } from "./compiled-component.mjs";
2
+ import { o as GEA_CREATE_TEMPLATE } from "./bind.mjs";
3
+ import { t as reactiveText } from "./reactive-text.mjs";
4
+ import { t as reactiveAttr } from "./reactive-attr.mjs";
5
+ import { t as reactiveBoolAttr } from "./reactive-bool.mjs";
6
+ import { t as reactiveClass } from "./reactive-class.mjs";
7
+ import { t as delegateEvent } from "./delegate-event.mjs";
3
8
  //#region src/components/button.tsx
4
9
  const variants = {
5
10
  default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
@@ -15,89 +20,29 @@ const sizes = {
15
20
  lg: "h-10 rounded-md px-8",
16
21
  icon: "h-9 w-9"
17
22
  };
18
- var Button = class extends Component {
19
- static {
20
- this.__geaTagName = "gea-button";
21
- }
22
- template(props) {
23
- const __id = this.id;
24
- const variant = variants[props.variant || "default"] || variants.default;
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-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
- }
28
- get events() {
29
- if (this.__evts && this[GEA_ELEMENT]) return this.__evts;
30
- const __geaEvtsResult = { click: { [`#${this.id}`]: this.__event_click_0 } };
31
- if (this[GEA_ELEMENT]) this.__evts = __geaEvtsResult;
32
- return __geaEvtsResult;
33
- }
34
- __event_click_0(e, targetComponent) {
35
- (this.props.click || this.props.onClick)?.(e);
36
- }
37
- [GEA_ON_PROP_CHANGE](key, value) {
38
- if (key === "variant") {
39
- const __el = this[GEA_ELEMENT];
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-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
- if (__el) {
43
- const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
44
- if (__el.className !== __newClass) __el.className = __newClass;
45
- }
46
- }
47
- if (key === "size") {
48
- const __el = this[GEA_ELEMENT];
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-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
- if (__el) {
52
- const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
53
- if (__el.className !== __newClass) __el.className = __newClass;
54
- }
55
- }
56
- if (key === "class") {
57
- const __el = this[GEA_ELEMENT];
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-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
- if (__el) {
61
- const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
62
- if (__el.className !== __newClass) __el.className = __newClass;
63
- }
64
- }
65
- if (key === "type") {
66
- const __el = this[GEA_ELEMENT];
67
- this.props;
68
- const __boundValue = value || "button";
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
- }
76
- }
77
- }
78
- if (key === "disabled") {
79
- const __el = this[GEA_ELEMENT];
80
- if (__el) if (!value) __el.removeAttribute("disabled");
81
- else {
82
- const __newAttr = "";
83
- if (__el.getAttribute("disabled") !== __newAttr) __el.setAttribute("disabled", __newAttr);
84
- }
85
- }
86
- if (key === "children") {
87
- const __el = this[GEA_ELEMENT];
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
- }
99
- }
100
- }
23
+ function _tpl0_create() {
24
+ const e = document.createElement("button");
25
+ e.textContent = "0";
26
+ return e;
27
+ }
28
+ var Button = class extends CompiledComponent {
29
+ [GEA_CREATE_TEMPLATE](d) {
30
+ variants[this.props.variant || "default"] || variants.default;
31
+ sizes[this.props.size || "default"] || sizes.default;
32
+ this.props.click || this.props.onClick;
33
+ const root = _tpl0_create();
34
+ const el0 = root;
35
+ const el1 = el0;
36
+ const el2 = el0;
37
+ const evt3 = el0;
38
+ const marker4 = root.firstChild;
39
+ reactiveClass(el0, d, this, () => (variants.default, sizes.default, 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[this.props.variant || "default"] || variants.default, sizes[this.props.size || "default"] || sizes.default, this.props.class)));
40
+ reactiveAttr(el1, d, this, "type", () => this.props.type || "button");
41
+ reactiveBoolAttr(el2, d, this, "disabled", () => this.props.disabled);
42
+ const h3 = (e) => (this.props.click || this.props.onClick)?.(e);
43
+ reactiveText(marker4, d, this, () => this.props.children);
44
+ delegateEvent(root, "click", [[evt3, h3]], d);
45
+ return root;
101
46
  }
102
47
  };
103
48
  //#endregion
@@ -1 +1 @@
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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"}
1
+ {"version":3,"file":"button.mjs","names":["GEA_CREATE_TEMPLATE","reactiveClass","reactiveAttr","reactiveBoolAttr","reactiveText","delegateEvent","CompiledComponent","Component","JSXNode","MouseEventHandler","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","_tpl0_create","e","document","createElement","textContent","Button","d","props","handleClick","root","el0","el1","el2","evt3","marker4","firstChild","h3","t4"],"sources":["../src/components/button.tsx"],"sourcesContent":["import { Component } from '@geajs/core'\nimport type { JSXNode, MouseEventHandler } from '../types'\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?: JSXNode\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":";;;;;;;;AAgBA,MAAMuB,WAAmC;CACvCE,SAAS;CACTC,aAAa;CACbC,SAAS;CACTC,WAAW;CACXC,OAAO;CACPC,MAAM;CACP;AACD,MAAMC,QAAgC;CACpCN,SAAS;CACTO,IAAI;CACJC,IAAI;CACJC,MAAM;CACP;AACD,SAASC,eAAe;CACtB,MAAMC,IAAIC,SAASC,cAAc,SAAS;AAC1CF,GAAEG,cAAc;AAChB,QAAOH;;AAET,IAAqBI,SAArB,cAAoClC,kBAA+B;CACjE,CAACN,qBAAqByC,GAAG;AACPlB,WAAS,KAAKmB,MAAM5B,WAAW,cAAcS,SAASE;AACzDM,QAAM,KAAKW,MAAM3B,QAAQ,cAAcgB,MAAMN;AACtC,OAAKiB,MAAMvB,SAAS,KAAKuB,MAAMrB;EACnD,MAAMuB,OAAOT,cAAc;EAC3B,MAAMU,MAAMD;EACZ,MAAME,MAAMD;EACZ,MAAME,MAAMF;EACZ,MAAMG,OAAOH;EACb,MAAMI,UAAUL,KAAKM;AACrBjD,gBAAc4C,KAAKJ,GAAG,aAAkBlB,SAASE,SAAcM,MAAMN,SAASf,GAAG,+OAA+Oa,SAAS,KAAKmB,MAAM5B,WAAW,cAAcS,SAASE,SAASM,MAAM,KAAKW,MAAM3B,QAAQ,cAAcgB,MAAMN,SAAS,KAAKiB,MAAMxB,MAAM,EAAE;AACxchB,eAAa4C,KAAKL,GAAG,MAAM,cAAc,KAAKC,MAAM1B,QAAQ,SAAS;AACrEb,mBAAiB4C,KAAKN,GAAG,MAAM,kBAAkB,KAAKC,MAAMzB,SAAS;EACrE,MAAMkC,MAAMf,OAAY,KAAKM,MAAMvB,SAAS,KAAKuB,MAAMrB,WAAWe,EAAE;AAEpEhC,eAAagD,SAAIX,GAAG,YAAY,KAAKC,MAAMpB,SAAS;AACpDjB,gBAAcuC,MAAM,SAAS,CAAC,CAACI,MAAMG,GAAG,CAAC,EAAEV,EAAE;AAC7C,SAAOG"}
package/dist/card.d.mts CHANGED
@@ -2,22 +2,22 @@ import { Component } from "@geajs/core";
2
2
 
3
3
  //#region src/components/card.d.ts
4
4
  declare class Card extends Component {
5
- template(props: any): string;
5
+ template(props: any): any;
6
6
  }
7
7
  declare class CardHeader extends Component {
8
- template(props: any): string;
8
+ template(props: any): any;
9
9
  }
10
10
  declare class CardTitle extends Component {
11
- template(props: any): string;
11
+ template(props: any): any;
12
12
  }
13
13
  declare class CardDescription extends Component {
14
- template(props: any): string;
14
+ template(props: any): any;
15
15
  }
16
16
  declare class CardContent extends Component {
17
- template(props: any): string;
17
+ template(props: any): any;
18
18
  }
19
19
  declare class CardFooter extends Component {
20
- template(props: any): string;
20
+ template(props: any): any;
21
21
  }
22
22
  //#endregion
23
23
  export { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle };