@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.
- package/dist/accordion.d.mts +2 -2
- package/dist/accordion.mjs +92 -122
- package/dist/accordion.mjs.map +1 -1
- package/dist/alert.d.mts +3 -3
- package/dist/alert.mjs +45 -107
- package/dist/alert.mjs.map +1 -1
- package/dist/avatar.d.mts +2 -2
- package/dist/avatar.mjs +38 -62
- package/dist/avatar.mjs.map +1 -1
- package/dist/badge.d.mts +1 -1
- package/dist/badge.mjs +18 -43
- package/dist/badge.mjs.map +1 -1
- package/dist/bind.mjs +130 -0
- package/dist/bind.mjs.map +1 -0
- package/dist/button.d.mts +3 -2
- package/dist/button.mjs +30 -85
- package/dist/button.mjs.map +1 -1
- package/dist/card.d.mts +6 -6
- package/dist/card.mjs +82 -194
- package/dist/card.mjs.map +1 -1
- package/dist/checkbox.d.mts +2 -2
- package/dist/checkbox.mjs +30 -31
- package/dist/checkbox.mjs.map +1 -1
- package/dist/clipboard.d.mts +2 -2
- package/dist/clipboard.mjs +49 -55
- package/dist/clipboard.mjs.map +1 -1
- package/dist/collapsible.d.mts +2 -2
- package/dist/collapsible.mjs +18 -45
- package/dist/collapsible.mjs.map +1 -1
- package/dist/combobox.d.mts +2 -2
- package/dist/combobox.mjs +322 -261
- package/dist/combobox.mjs.map +1 -1
- package/dist/compiled-component.mjs +119 -0
- package/dist/compiled-component.mjs.map +1 -0
- package/dist/compiled-reactive-component.mjs +337 -0
- package/dist/compiled-reactive-component.mjs.map +1 -0
- package/dist/component-id.mjs +10 -0
- package/dist/component-id.mjs.map +1 -0
- package/dist/conditional-truthy.mjs +48 -0
- package/dist/conditional-truthy.mjs.map +1 -0
- package/dist/conditional.mjs +54 -0
- package/dist/conditional.mjs.map +1 -0
- package/dist/delegate-event.mjs +53 -0
- package/dist/delegate-event.mjs.map +1 -0
- package/dist/dialog.d.mts +4 -3
- package/dist/dialog.mjs +57 -70
- package/dist/dialog.mjs.map +1 -1
- package/dist/dirty-symbols.mjs +7 -0
- package/dist/dirty-symbols.mjs.map +1 -0
- package/dist/disposer.mjs +46 -0
- package/dist/disposer.mjs.map +1 -0
- package/dist/dnd-manager.d.mts +9 -1
- package/dist/dnd-manager.mjs +67 -29
- package/dist/dnd-manager.mjs.map +1 -1
- package/dist/drag-drop-context.d.mts +1 -1
- package/dist/drag-drop-context.mjs +17 -33
- package/dist/drag-drop-context.mjs.map +1 -1
- package/dist/draggable.d.mts +1 -1
- package/dist/draggable.mjs +2 -91
- package/dist/draggable2.mjs +321 -0
- package/dist/draggable2.mjs.map +1 -0
- package/dist/droppable.d.mts +1 -1
- package/dist/droppable.mjs +20 -44
- package/dist/droppable.mjs.map +1 -1
- package/dist/file-upload.d.mts +2 -2
- package/dist/file-upload.mjs +337 -122
- package/dist/file-upload.mjs.map +1 -1
- package/dist/hover-card.d.mts +2 -2
- package/dist/hover-card.mjs +24 -59
- package/dist/hover-card.mjs.map +1 -1
- package/dist/index.mjs +3 -3
- package/dist/input.d.mts +1 -1
- package/dist/input.mjs +1 -93
- package/dist/input2.mjs +56 -0
- package/dist/input2.mjs.map +1 -0
- package/dist/internal-symbols.mjs +9 -0
- package/dist/internal-symbols.mjs.map +1 -0
- package/dist/item-obs.mjs +68 -0
- package/dist/item-obs.mjs.map +1 -0
- package/dist/keyed-list-symbols.mjs +6 -0
- package/dist/keyed-list-symbols.mjs.map +1 -0
- package/dist/keyed-list.mjs +487 -0
- package/dist/keyed-list.mjs.map +1 -0
- package/dist/label.d.mts +1 -1
- package/dist/label.mjs +20 -45
- package/dist/label.mjs.map +1 -1
- package/dist/menu.d.mts +2 -2
- package/dist/menu.mjs +87 -41
- package/dist/menu.mjs.map +1 -1
- package/dist/number-input.d.mts +2 -2
- package/dist/number-input.mjs +28 -32
- package/dist/number-input.mjs.map +1 -1
- package/dist/pagination.d.mts +2 -2
- package/dist/pagination.mjs +12 -35
- package/dist/pagination.mjs.map +1 -1
- package/dist/patch.mjs +21 -0
- package/dist/patch.mjs.map +1 -0
- package/dist/pin-input.d.mts +2 -2
- package/dist/pin-input.mjs +88 -87
- package/dist/pin-input.mjs.map +1 -1
- package/dist/popover.d.mts +2 -2
- package/dist/popover.mjs +45 -67
- package/dist/popover.mjs.map +1 -1
- package/dist/progress.d.mts +2 -2
- package/dist/progress.mjs +37 -43
- package/dist/progress.mjs.map +1 -1
- package/dist/radio-group.d.mts +2 -2
- package/dist/radio-group.mjs +99 -140
- package/dist/radio-group.mjs.map +1 -1
- package/dist/rating-group.d.mts +2 -2
- package/dist/rating-group.mjs +91 -99
- package/dist/rating-group.mjs.map +1 -1
- package/dist/reactive-attr.mjs +13 -0
- package/dist/reactive-attr.mjs.map +1 -0
- package/dist/reactive-bool.mjs +13 -0
- package/dist/reactive-bool.mjs.map +1 -0
- package/dist/reactive-class-name.mjs +15 -0
- package/dist/reactive-class-name.mjs.map +1 -0
- package/dist/reactive-class.mjs +53 -0
- package/dist/reactive-class.mjs.map +1 -0
- package/dist/reactive-style.mjs +21 -0
- package/dist/reactive-style.mjs.map +1 -0
- package/dist/reactive-text.mjs +62 -0
- package/dist/reactive-text.mjs.map +1 -0
- package/dist/select.d.mts +2 -2
- package/dist/select.mjs +106 -186
- package/dist/select.mjs.map +1 -1
- package/dist/separator.d.mts +1 -1
- package/dist/separator.mjs +19 -45
- package/dist/separator.mjs.map +1 -1
- package/dist/skeleton.d.mts +1 -1
- package/dist/skeleton.mjs +11 -35
- package/dist/skeleton.mjs.map +1 -1
- package/dist/slider.d.mts +2 -2
- package/dist/slider.mjs +31 -32
- package/dist/slider.mjs.map +1 -1
- package/dist/switch.d.mts +2 -2
- package/dist/switch.mjs +30 -31
- package/dist/switch.mjs.map +1 -1
- package/dist/tabs.d.mts +7 -2
- package/dist/tabs.mjs +180 -147
- package/dist/tabs.mjs.map +1 -1
- package/dist/tags-input.d.mts +2 -2
- package/dist/tags-input.mjs +102 -188
- package/dist/tags-input.mjs.map +1 -1
- package/dist/textarea.d.mts +1 -1
- package/dist/textarea.mjs +32 -75
- package/dist/textarea.mjs.map +1 -1
- package/dist/theme.css +4 -5
- package/dist/toast.d.mts +1 -1
- package/dist/toast.mjs +14 -34
- package/dist/toast.mjs.map +1 -1
- package/dist/toggle-group.d.mts +2 -2
- package/dist/toggle-group.mjs +78 -85
- package/dist/toggle-group.mjs.map +1 -1
- package/dist/tooltip.d.mts +2 -2
- package/dist/tooltip.mjs +23 -43
- package/dist/tooltip.mjs.map +1 -1
- package/dist/tree-view.d.mts +2 -2
- package/dist/tree-view.mjs +32 -50
- package/dist/tree-view.mjs.map +1 -1
- package/dist/types.d.mts +9 -0
- package/dist/zag-component.d.mts +25 -3
- package/dist/zag-component.mjs +63 -16
- package/dist/zag-component.mjs.map +1 -1
- package/package.json +5 -5
- package/dist/cn.mjs +0 -10
- package/dist/cn.mjs.map +0 -1
- package/dist/draggable.mjs.map +0 -1
- package/dist/input.mjs.map +0 -1
package/dist/tree-view.mjs
CHANGED
|
@@ -1,25 +1,28 @@
|
|
|
1
1
|
import { t as ZagComponent } from "./zag-component.mjs";
|
|
2
|
-
import {
|
|
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 reactiveClass } from "./reactive-class.mjs";
|
|
5
|
+
import { t as conditionalTruthy } from "./conditional-truthy.mjs";
|
|
3
6
|
import { normalizeProps } from "@zag-js/vanilla";
|
|
4
7
|
import * as treeView from "@zag-js/tree-view";
|
|
5
8
|
//#region src/components/tree-view.tsx
|
|
9
|
+
let _tpl0_root = null;
|
|
10
|
+
function _tpl0_create() {
|
|
11
|
+
const t = document.createElement("template");
|
|
12
|
+
t.innerHTML = "<div data-part=root><!--1--><div data-part=tree class=tree-view-tree role=tree>0";
|
|
13
|
+
return t.content.firstChild;
|
|
14
|
+
}
|
|
15
|
+
let _tpl1_root = null;
|
|
16
|
+
function _tpl1_create() {
|
|
17
|
+
const t = document.createElement("template");
|
|
18
|
+
t.innerHTML = "<label data-part=label class=\"tree-view-label text-sm font-medium mb-2 block\">0";
|
|
19
|
+
return t.content.firstChild;
|
|
20
|
+
}
|
|
6
21
|
var TreeView = class extends ZagComponent {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
constructor(...args) {
|
|
11
|
-
super(...args);
|
|
22
|
+
constructor(..._args) {
|
|
23
|
+
super(..._args);
|
|
12
24
|
this.selectedValue = [];
|
|
13
25
|
this.expandedValue = [];
|
|
14
|
-
this.props;
|
|
15
|
-
this[geaCondValueSymbol(0)] = !!this.props.label;
|
|
16
|
-
this[GEA_REGISTER_COND](0, "c0", () => {
|
|
17
|
-
this.props;
|
|
18
|
-
return this.props.label;
|
|
19
|
-
}, () => {
|
|
20
|
-
this.props;
|
|
21
|
-
return `<label data-part="label" class="tree-view-label text-sm font-medium mb-2 block">${geaEscapeHtml(String(this.props.label))}</label>`;
|
|
22
|
-
}, null);
|
|
23
26
|
}
|
|
24
27
|
createMachine(_props) {
|
|
25
28
|
return treeView.machine;
|
|
@@ -58,41 +61,20 @@ var TreeView = class extends ZagComponent {
|
|
|
58
61
|
this.selectedValue = api.selectedValue;
|
|
59
62
|
this.expandedValue = api.expandedValue;
|
|
60
63
|
}
|
|
61
|
-
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
const
|
|
70
|
-
this.props;
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
if (key === "children") {
|
|
78
|
-
const __el = this.__e0 || (this.__e0 = __gid(__id + "-b1"));
|
|
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
|
-
if (key === "label") this[GEA_PATCH_COND](0);
|
|
93
|
-
}
|
|
94
|
-
__resetEls() {
|
|
95
|
-
this.__e0 = null;
|
|
64
|
+
[GEA_CREATE_TEMPLATE](d) {
|
|
65
|
+
const root = (_tpl0_root || (_tpl0_root = _tpl0_create())).cloneNode(true);
|
|
66
|
+
const el0 = root;
|
|
67
|
+
const anchor1 = root.firstChild;
|
|
68
|
+
const marker2 = root.childNodes[1].firstChild;
|
|
69
|
+
reactiveClass(el0, d, this, () => this.props.class || "");
|
|
70
|
+
conditionalTruthy(anchor1.parentNode, anchor1, d, this, () => this.props.label, (d) => {
|
|
71
|
+
const root = (_tpl1_root || (_tpl1_root = _tpl1_create())).cloneNode(true);
|
|
72
|
+
const t0 = root.firstChild;
|
|
73
|
+
reactiveTextValue(t0, d, this, () => this.props.label);
|
|
74
|
+
return root;
|
|
75
|
+
});
|
|
76
|
+
reactiveText(marker2, d, this, () => this.props.children);
|
|
77
|
+
return root;
|
|
96
78
|
}
|
|
97
79
|
};
|
|
98
80
|
//#endregion
|
package/dist/tree-view.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree-view.mjs","names":["
|
|
1
|
+
{"version":3,"file":"tree-view.mjs","names":["GEA_CREATE_TEMPLATE","reactiveClass","reactiveTextValue","conditionalTruthy","reactiveText","treeView","normalizeProps","ZagComponent","_tpl0_root","_tpl0_create","t","document","createElement","innerHTML","content","firstChild","_tpl1_root","_tpl1_create","TreeView","selectedValue","expandedValue","createMachine","_props","machine","getMachineProps","props","id","collection","defaultSelectedValue","defaultExpandedValue","selectionMode","expandOnClick","onSelectionChange","details","SelectionChangeDetails","onExpandedChange","ExpandedChangeDetails","connectApi","service","connect","getSpreadMap","syncState","api","d","root","cloneNode","el0","anchor1","marker2","childNodes","class","parentNode","label","marker0","t0","t2","children"],"sources":["../src/components/tree-view.tsx"],"sourcesContent":["import * as treeView from '@zag-js/tree-view'\nimport { normalizeProps } from '@zag-js/vanilla'\nimport ZagComponent from '../primitives/zag-component'\n\nexport default class TreeView extends ZagComponent {\n selectedValue: string[] = []\n expandedValue: string[] = []\n\n createMachine(_props: any): any {\n return treeView.machine\n }\n\n getMachineProps(props: any) {\n return {\n id: this.id,\n collection: props.collection,\n selectedValue: props.selectedValue,\n defaultSelectedValue: props.defaultSelectedValue,\n expandedValue: props.expandedValue,\n defaultExpandedValue: props.defaultExpandedValue,\n selectionMode: props.selectionMode ?? 'single',\n expandOnClick: props.expandOnClick ?? true,\n onSelectionChange: (details: treeView.SelectionChangeDetails) => {\n this.selectedValue = details.selectedValue\n props.onSelectionChange?.(details)\n },\n onExpandedChange: (details: treeView.ExpandedChangeDetails) => {\n this.expandedValue = details.expandedValue\n props.onExpandedChange?.(details)\n },\n }\n }\n\n connectApi(service: any) {\n return treeView.connect(service, normalizeProps)\n }\n\n getSpreadMap() {\n return {\n '[data-part=\"root\"]': 'getRootProps',\n '[data-part=\"label\"]': 'getLabelProps',\n '[data-part=\"tree\"]': 'getTreeProps',\n }\n }\n\n syncState(api: any) {\n this.selectedValue = api.selectedValue\n this.expandedValue = api.expandedValue\n }\n\n template(props: any) {\n return (\n <div data-part=\"root\" class={props.class || ''}>\n {props.label && (\n <label data-part=\"label\" class=\"tree-view-label text-sm font-medium mb-2 block\">\n {props.label}\n </label>\n )}\n <div data-part=\"tree\" class=\"tree-view-tree\" role=\"tree\">\n {props.children}\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,WAArB,cAAsCX,aAAa;;;uBACvB,EAAE;uBACF,EAAE;;CAC5Bc,cAAcC,QAAkB;AAC9B,SAAOjB,SAASkB;;CAElBC,gBAAgBC,OAAY;AAC1B,SAAO;GACLC,IAAI,KAAKA;GACTC,YAAYF,MAAME;GAClBR,eAAeM,MAAMN;GACrBS,sBAAsBH,MAAMG;GAC5BR,eAAeK,MAAML;GACrBS,sBAAsBJ,MAAMI;GAC5BC,eAAeL,MAAMK,iBAAiB;GACtCC,eAAeN,MAAMM,iBAAiB;GACtCC,oBAAoBC,YAA6C;AAC/D,SAAKd,gBAAgBc,QAAQd;AAC7BM,UAAMO,oBAAoBC,QAAQ;;GAEpCE,mBAAmBF,YAA4C;AAC7D,SAAKb,gBAAgBa,QAAQb;AAC7BK,UAAMU,mBAAmBF,QAAQ;;GAEpC;;CAEHI,WAAWC,SAAc;AACvB,SAAOjC,SAASkC,QAAQD,SAAShC,eAAe;;CAElDkC,eAAe;AACb,SAAO;GACL,wBAAsB;GACtB,yBAAuB;GACvB,wBAAsB;GACvB;;CAEHC,UAAUC,KAAU;AAClB,OAAKvB,gBAAgBuB,IAAIvB;AACzB,OAAKC,gBAAgBsB,IAAItB;;CAE3B,CAACpB,qBAAqB2C,GAAG;EACvB,MAAMC,QAAQpC,eAAeA,aAAaC,cAAc,GAAGoC,UAAU,KAAK;EAC1E,MAAMC,MAAMF;EACZ,MAAMG,UAAUH,KAAK7B;EACrB,MAAMiC,UAAUJ,KAAKK,WAAW,GAAGlC;AACnCd,gBAAc6C,KAAKH,GAAG,YAAY,KAAKlB,MAAMyB,SAAS,GAAG;AACzD/C,oBAAkB4C,QAAQI,YAAYJ,SAASJ,GAAG,YAAY,KAAKlB,MAAM2B,QAAOT,MAAK;GACnF,MAAMC,QAAQ5B,eAAeA,aAAaC,cAAc,GAAG4B,UAAU,KAAK;GAE1E,MAAMS,KADUV,KAAK7B;AAErBb,qBAAkBoD,IAAIX,GAAG,YAAY,KAAKlB,MAAM2B,MAAM;AACtD,UAAOR;IACP;AAEFxC,eAAamD,SAAIZ,GAAG,YAAY,KAAKlB,MAAM+B,SAAS;AACpD,SAAOZ"}
|
package/dist/types.d.mts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
//#region src/types.d.ts
|
|
2
|
+
type JSXNode = string | number | boolean | null | undefined | JSXNode[];
|
|
3
|
+
interface GMouseEvent<T extends EventTarget = Element> extends MouseEvent {
|
|
4
|
+
readonly currentTarget: T;
|
|
5
|
+
}
|
|
6
|
+
type MouseEventHandler<T extends EventTarget = Element> = (e: GMouseEvent<T>) => void;
|
|
7
|
+
//#endregion
|
|
8
|
+
export { MouseEventHandler as n, JSXNode as t };
|
|
9
|
+
//# sourceMappingURL=types.d.mts.map
|
package/dist/zag-component.d.mts
CHANGED
|
@@ -1,8 +1,19 @@
|
|
|
1
|
-
import { Component,
|
|
1
|
+
import { Component, GEA_ON_PROP_CHANGE } from "@geajs/core";
|
|
2
2
|
import { VanillaMachine } from "@zag-js/vanilla";
|
|
3
3
|
import * as _$_zag_js_types0 from "@zag-js/types";
|
|
4
4
|
|
|
5
5
|
//#region src/primitives/zag-component.d.ts
|
|
6
|
+
/**
|
|
7
|
+
* Under the closure-compiled runtime there is no `[GEA_MAPS]` registry on the
|
|
8
|
+
* component. Zag integration now uses `registerListState(listId, state)` /
|
|
9
|
+
* `onItemSync(listId, idx)` hooks that the compiled `keyedList` call invokes.
|
|
10
|
+
* We keep a local Map of list states keyed by the compiler's listId string.
|
|
11
|
+
*/
|
|
12
|
+
interface ListStateRecord {
|
|
13
|
+
container: Element;
|
|
14
|
+
containerProp?: string;
|
|
15
|
+
getContainer?: () => Element;
|
|
16
|
+
}
|
|
6
17
|
type SpreadCleanup = () => void;
|
|
7
18
|
type PropsGetter = string | ((api: any, el: Element) => Record<string, any>);
|
|
8
19
|
interface SpreadMap {
|
|
@@ -22,14 +33,25 @@ declare class ZagComponent<P = Record<string, unknown>> extends Component<P> {
|
|
|
22
33
|
syncState(_api: any): void;
|
|
23
34
|
created(props: P): void;
|
|
24
35
|
_syncMachineProps(): void;
|
|
25
|
-
[
|
|
36
|
+
[GEA_ON_PROP_CHANGE](_key: string, _next: unknown): void;
|
|
26
37
|
_scheduleSpreadApplication(): void;
|
|
27
38
|
_resolveProps(getter: PropsGetter, el: Element): Record<string, any> | null;
|
|
28
39
|
_queryAllIncludingSelf(selector: string): Element[];
|
|
29
40
|
_applyAllSpreads(): void;
|
|
30
|
-
|
|
41
|
+
/** Compiled keyedList calls this on the owner after each reconciliation. */
|
|
42
|
+
onItemSync(_listId: string, _idx: number): void;
|
|
43
|
+
/** Compiled keyedList calls this once per list at construction. */
|
|
44
|
+
registerListState(listId: string, state: ListStateRecord): void;
|
|
45
|
+
unregisterListState(listId: string): void;
|
|
46
|
+
_listStates: Map<string, ListStateRecord>;
|
|
31
47
|
onAfterRender(): void;
|
|
32
48
|
_cacheArrayContainers(): void;
|
|
49
|
+
/** Stop the Zag machine + spread cleanups without fully disposing the
|
|
50
|
+
* component. Invoked when a parent conditional slot removes this
|
|
51
|
+
* component's DOM subtree so side effects on `<html>` (pointer-events,
|
|
52
|
+
* aria-hidden, scroll lock) are restored. The component instance stays
|
|
53
|
+
* alive so it can re-render if the conditional becomes truthy again. */
|
|
54
|
+
_stopMachine(): void;
|
|
33
55
|
dispose(): void;
|
|
34
56
|
static normalizeProps: _$_zag_js_types0.NormalizeProps<_$_zag_js_types0.PropTypes<{
|
|
35
57
|
[x: string]: any;
|
package/dist/zag-component.mjs
CHANGED
|
@@ -1,7 +1,14 @@
|
|
|
1
|
-
import { Component,
|
|
1
|
+
import { Component, GEA_ON_PROP_CHANGE } from "@geajs/core";
|
|
2
2
|
import { VanillaMachine, normalizeProps, spreadProps } from "@zag-js/vanilla";
|
|
3
3
|
//#region src/primitives/zag-component.ts
|
|
4
4
|
var ZagComponent = class extends Component {
|
|
5
|
+
constructor(..._args) {
|
|
6
|
+
super(..._args);
|
|
7
|
+
this._spreadCleanups = /* @__PURE__ */ new Map();
|
|
8
|
+
this._spreadScheduled = false;
|
|
9
|
+
this._zagIdMap = /* @__PURE__ */ new Map();
|
|
10
|
+
this._elementCache = /* @__PURE__ */ new Map();
|
|
11
|
+
}
|
|
5
12
|
createMachine(_props) {
|
|
6
13
|
return null;
|
|
7
14
|
}
|
|
@@ -22,7 +29,8 @@ var ZagComponent = class extends Component {
|
|
|
22
29
|
if (!this._elementCache) this._elementCache = /* @__PURE__ */ new Map();
|
|
23
30
|
const machineDef = this.createMachine(props);
|
|
24
31
|
if (!machineDef) return;
|
|
25
|
-
|
|
32
|
+
const machineProps = this.getMachineProps(props);
|
|
33
|
+
this._machine = new VanillaMachine(machineDef, machineProps);
|
|
26
34
|
const zagIdMap = this._zagIdMap;
|
|
27
35
|
const origGetById = this._machine.scope.getById;
|
|
28
36
|
this._machine.scope.getById = ((id) => {
|
|
@@ -45,8 +53,7 @@ var ZagComponent = class extends Component {
|
|
|
45
53
|
this._api = this.connectApi(this._machine.service);
|
|
46
54
|
this._scheduleSpreadApplication();
|
|
47
55
|
}
|
|
48
|
-
[
|
|
49
|
-
super[GEA_UPDATE_PROPS](nextProps);
|
|
56
|
+
[GEA_ON_PROP_CHANGE](_key, _next) {
|
|
50
57
|
this._syncMachineProps();
|
|
51
58
|
}
|
|
52
59
|
_scheduleSpreadApplication() {
|
|
@@ -67,7 +74,23 @@ var ZagComponent = class extends Component {
|
|
|
67
74
|
const results = this.$$(selector);
|
|
68
75
|
const root = this.el;
|
|
69
76
|
if (root && root.matches(selector) && !results.includes(root)) results.unshift(root);
|
|
70
|
-
|
|
77
|
+
const COMP = Symbol.for("gea.dom.component");
|
|
78
|
+
if (!root) return results;
|
|
79
|
+
const filtered = [];
|
|
80
|
+
for (const el of results) {
|
|
81
|
+
let cur = el;
|
|
82
|
+
let foreign = false;
|
|
83
|
+
while (cur && cur !== root) {
|
|
84
|
+
const owner = cur[COMP];
|
|
85
|
+
if (owner && owner !== this) {
|
|
86
|
+
foreign = true;
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
cur = cur.parentElement;
|
|
90
|
+
}
|
|
91
|
+
if (!foreign) filtered.push(el);
|
|
92
|
+
}
|
|
93
|
+
return filtered;
|
|
71
94
|
}
|
|
72
95
|
_applyAllSpreads() {
|
|
73
96
|
if (!this.rendered || !this._api) return;
|
|
@@ -94,35 +117,59 @@ var ZagComponent = class extends Component {
|
|
|
94
117
|
}
|
|
95
118
|
}
|
|
96
119
|
}
|
|
97
|
-
|
|
98
|
-
|
|
120
|
+
/** Compiled keyedList calls this on the owner after each reconciliation. */
|
|
121
|
+
onItemSync(_listId, _idx) {
|
|
99
122
|
this._elementCache.clear();
|
|
100
123
|
this._scheduleSpreadApplication();
|
|
101
124
|
}
|
|
125
|
+
/** Compiled keyedList calls this once per list at construction. */
|
|
126
|
+
registerListState(listId, state) {
|
|
127
|
+
if (!this._listStates) this._listStates = /* @__PURE__ */ new Map();
|
|
128
|
+
this._listStates.set(listId, state);
|
|
129
|
+
}
|
|
130
|
+
unregisterListState(listId) {
|
|
131
|
+
this._listStates?.delete(listId);
|
|
132
|
+
}
|
|
102
133
|
onAfterRender() {
|
|
103
134
|
this._cacheArrayContainers();
|
|
104
135
|
this._elementCache.clear();
|
|
136
|
+
if (this._machineStopped && !this._machine) {
|
|
137
|
+
this._machineStopped = false;
|
|
138
|
+
try {
|
|
139
|
+
this.created(this.props);
|
|
140
|
+
} catch {}
|
|
141
|
+
}
|
|
105
142
|
this._applyAllSpreads();
|
|
106
143
|
}
|
|
107
144
|
_cacheArrayContainers() {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
map.container = map.getContainer();
|
|
113
|
-
if (map.container) this[map.containerProp] = map.container;
|
|
145
|
+
if (!this._listStates) return;
|
|
146
|
+
for (const state of this._listStates.values()) {
|
|
147
|
+
if (state.getContainer) state.container = state.getContainer();
|
|
148
|
+
if (state.container && state.containerProp) this[state.containerProp] = state.container;
|
|
114
149
|
}
|
|
115
150
|
}
|
|
116
|
-
|
|
117
|
-
|
|
151
|
+
/** Stop the Zag machine + spread cleanups without fully disposing the
|
|
152
|
+
* component. Invoked when a parent conditional slot removes this
|
|
153
|
+
* component's DOM subtree so side effects on `<html>` (pointer-events,
|
|
154
|
+
* aria-hidden, scroll lock) are restored. The component instance stays
|
|
155
|
+
* alive so it can re-render if the conditional becomes truthy again. */
|
|
156
|
+
_stopMachine() {
|
|
157
|
+
for (const cleanup of this._spreadCleanups.values()) try {
|
|
158
|
+
cleanup();
|
|
159
|
+
} catch {}
|
|
118
160
|
this._spreadCleanups.clear();
|
|
119
161
|
if (this._machine) {
|
|
120
|
-
|
|
162
|
+
try {
|
|
163
|
+
this._machine.stop();
|
|
164
|
+
} catch {}
|
|
121
165
|
this._machine = null;
|
|
122
166
|
}
|
|
123
167
|
this._api = null;
|
|
124
168
|
this._zagIdMap?.clear();
|
|
125
169
|
this._elementCache?.clear();
|
|
170
|
+
}
|
|
171
|
+
dispose() {
|
|
172
|
+
this._stopMachine();
|
|
126
173
|
super.dispose();
|
|
127
174
|
}
|
|
128
175
|
static {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zag-component.mjs","names":[],"sources":["../src/primitives/zag-component.ts"],"sourcesContent":["import { Component, GEA_MAPS, GEA_SYNC_MAP, GEA_UPDATE_PROPS } from '@geajs/core'\nimport { VanillaMachine, normalizeProps, spreadProps } from '@zag-js/vanilla'\n\ntype SpreadCleanup = () => void\ntype PropsGetter = string | ((api: any, el: Element) => Record<string, any>)\n\nexport interface SpreadMap {\n [selector: string]: PropsGetter\n}\n\nexport default class ZagComponent<P = Record<string, unknown>> extends Component<P> {\n declare _machine: VanillaMachine<any> | null\n declare _api: any\n declare _spreadCleanups: Map<string, SpreadCleanup>\n declare _spreadScheduled: boolean\n declare _zagIdMap: Map<string, Element>\n declare _elementCache: Map<string, Element[]>\n\n createMachine(_props: any): any {\n return null\n }\n\n getMachineProps(_props: any): any {\n return {}\n }\n\n connectApi(_service: any): any {\n return null\n }\n\n getSpreadMap() {\n return {}\n }\n\n syncState(_api: any): void {}\n\n created(props: P) {\n if (!this._spreadCleanups) this._spreadCleanups = new Map()\n if (this._spreadScheduled === undefined) this._spreadScheduled = false\n if (!this._zagIdMap) this._zagIdMap = new Map()\n if (!this._elementCache) this._elementCache = new Map()\n\n const machineDef = this.createMachine(props)\n if (!machineDef) return\n\n const machineProps = this.getMachineProps(props)\n this._machine = new VanillaMachine(machineDef, machineProps)\n\n // Patch scope.getById: Zag uses IDs like \"tags-input:xyz:...\" for DOM\n // lookups, but _applyAllSpreads restores compiler binding IDs on elements.\n // The mapping lets Zag find elements by their expected Zag IDs.\n const zagIdMap = this._zagIdMap\n const origGetById = this._machine.scope.getById\n this._machine.scope.getById = ((id: string) => {\n return origGetById(id) || zagIdMap.get(id) || null\n }) as typeof origGetById\n\n this._machine.start()\n\n this._api = this.connectApi(this._machine.service)\n this.syncState(this._api)\n\n this._machine.subscribe(() => {\n if (!this._machine) return\n this._api = this.connectApi(this._machine.service)\n this._scheduleSpreadApplication()\n })\n }\n\n _syncMachineProps() {\n const machine = this._machine as any\n if (!machine?.userPropsRef) return\n const next = this.getMachineProps(this.props)\n machine.userPropsRef.current = next\n this._api = this.connectApi(this._machine!.service)\n this._scheduleSpreadApplication()\n }\n\n [GEA_UPDATE_PROPS](nextProps: Record<string, any>) {\n // @ts-ignore — symbol method signature mismatch across packages\n super[GEA_UPDATE_PROPS](nextProps)\n this._syncMachineProps()\n }\n\n _scheduleSpreadApplication() {\n if (this._spreadScheduled) return\n this._spreadScheduled = true\n queueMicrotask(() => {\n this._spreadScheduled = false\n this._applyAllSpreads()\n })\n }\n\n _resolveProps(getter: PropsGetter, el: Element): Record<string, any> | null {\n if (typeof getter === 'function') {\n return getter(this._api, el)\n }\n const method = this._api[getter]\n if (typeof method !== 'function') return null\n return method.call(this._api)\n }\n\n _queryAllIncludingSelf(selector: string): Element[] {\n const results = this.$$(selector)\n const root = this.el\n if (root && root.matches(selector) && !results.includes(root)) {\n results.unshift(root)\n }\n return results\n }\n\n _applyAllSpreads() {\n if (!this.rendered || !this._api) return\n const map = this.getSpreadMap()\n\n for (const selector in map) {\n const getter = map[selector]\n\n let elements = this._elementCache.get(selector)\n if (!elements) {\n elements = this._queryAllIncludingSelf(selector)\n this._elementCache.set(selector, elements)\n }\n\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i]\n const key = selector + ':' + i\n const nextProps = this._resolveProps(getter, el)\n if (!nextProps) continue\n\n // Preserve compiled binding IDs: Zag's spreadProps overrides element\n // IDs, but the compiler's observers rely on getElementById with binding\n // IDs. We restore the binding ID and store the Zag ID in _zagIdMap so\n // scope.getById (patched in created()) can still find elements.\n // Note: we never clear _zagIdMap here because spreadProps caches\n // previous attrs and skips unchanged values — on subsequent calls the\n // ID won't be re-set, so we'd lose the mapping.\n const bindingId = el.id\n const cleanup = spreadProps(el, nextProps)\n if (bindingId && el.id !== bindingId) {\n this._zagIdMap.set(el.id, el)\n el.id = bindingId\n }\n this._spreadCleanups.set(key, cleanup)\n }\n }\n }\n\n [GEA_SYNC_MAP](idx: number) {\n // @ts-ignore — symbol method signature mismatch across packages\n super[GEA_SYNC_MAP](idx)\n this._elementCache.clear()\n // After the map syncs new/updated DOM items, Zag spreads must be\n // re-applied because createItemFn produces elements without Zag's\n // event handlers and attributes.\n this._scheduleSpreadApplication()\n }\n\n onAfterRender() {\n this._cacheArrayContainers()\n this._elementCache.clear()\n this._applyAllSpreads()\n }\n\n _cacheArrayContainers() {\n const maps = (this as any)[GEA_MAPS]\n if (!maps) return\n for (const idx in maps) {\n const map = maps[idx]\n map.container = map.getContainer()\n if (map.container) (this as any)[map.containerProp] = map.container\n }\n }\n\n dispose() {\n for (const cleanup of this._spreadCleanups.values()) {\n cleanup()\n }\n this._spreadCleanups.clear()\n\n if (this._machine) {\n this._machine.stop()\n this._machine = null\n }\n this._api = null\n this._zagIdMap?.clear()\n this._elementCache?.clear()\n\n super.dispose()\n }\n\n static normalizeProps = normalizeProps\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"zag-component.mjs","names":[],"sources":["../src/primitives/zag-component.ts"],"sourcesContent":["import { Component, GEA_ON_PROP_CHANGE } from '@geajs/core'\nimport { VanillaMachine, normalizeProps, spreadProps } from '@zag-js/vanilla'\n\n/**\n * Under the closure-compiled runtime there is no `[GEA_MAPS]` registry on the\n * component. Zag integration now uses `registerListState(listId, state)` /\n * `onItemSync(listId, idx)` hooks that the compiled `keyedList` call invokes.\n * We keep a local Map of list states keyed by the compiler's listId string.\n */\ninterface ListStateRecord {\n container: Element\n containerProp?: string\n getContainer?: () => Element\n}\n\ntype SpreadCleanup = () => void\ntype PropsGetter = string | ((api: any, el: Element) => Record<string, any>)\n\nexport interface SpreadMap {\n [selector: string]: PropsGetter\n}\n\nexport default class ZagComponent<P = Record<string, unknown>> extends Component<P> {\n declare _machine: VanillaMachine<any> | null\n declare _api: any\n // Initialize fields eagerly — under the closure-compiled runtime, `created()`\n // may be called AFTER `[GEA_CREATE_TEMPLATE]`, which references these caches.\n _spreadCleanups: Map<string, SpreadCleanup> = new Map()\n _spreadScheduled: boolean = false\n _zagIdMap: Map<string, Element> = new Map()\n _elementCache: Map<string, Element[]> = new Map()\n\n createMachine(_props: any): any {\n return null\n }\n\n getMachineProps(_props: any): any {\n return {}\n }\n\n connectApi(_service: any): any {\n return null\n }\n\n getSpreadMap() {\n return {}\n }\n\n syncState(_api: any): void {}\n\n created(props: P) {\n if (!this._spreadCleanups) this._spreadCleanups = new Map()\n if (this._spreadScheduled === undefined) this._spreadScheduled = false\n if (!this._zagIdMap) this._zagIdMap = new Map()\n if (!this._elementCache) this._elementCache = new Map()\n\n const machineDef = this.createMachine(props)\n if (!machineDef) return\n\n const machineProps = this.getMachineProps(props)\n this._machine = new VanillaMachine(machineDef, machineProps)\n\n // Patch scope.getById: Zag uses IDs like \"tags-input:xyz:...\" for DOM\n // lookups, but _applyAllSpreads restores compiler binding IDs on elements.\n // The mapping lets Zag find elements by their expected Zag IDs.\n const zagIdMap = this._zagIdMap\n const origGetById = this._machine.scope.getById\n this._machine.scope.getById = ((id: string) => {\n return origGetById(id) || zagIdMap.get(id) || null\n }) as typeof origGetById\n\n this._machine.start()\n\n this._api = this.connectApi(this._machine.service)\n this.syncState(this._api)\n\n this._machine.subscribe(() => {\n if (!this._machine) return\n this._api = this.connectApi(this._machine.service)\n this._scheduleSpreadApplication()\n })\n }\n\n _syncMachineProps() {\n const machine = this._machine as any\n if (!machine?.userPropsRef) return\n const next = this.getMachineProps(this.props)\n machine.userPropsRef.current = next\n this._api = this.connectApi(this._machine!.service)\n this._scheduleSpreadApplication()\n }\n\n [GEA_ON_PROP_CHANGE](_key: string, _next: unknown) {\n this._syncMachineProps()\n }\n\n _scheduleSpreadApplication() {\n if (this._spreadScheduled) return\n this._spreadScheduled = true\n queueMicrotask(() => {\n this._spreadScheduled = false\n this._applyAllSpreads()\n })\n }\n\n _resolveProps(getter: PropsGetter, el: Element): Record<string, any> | null {\n if (typeof getter === 'function') {\n return getter(this._api, el)\n }\n const method = this._api[getter]\n if (typeof method !== 'function') return null\n return method.call(this._api)\n }\n\n _queryAllIncludingSelf(selector: string): Element[] {\n const results = this.$$(selector)\n const root = this.el\n if (root && root.matches(selector) && !results.includes(root)) {\n results.unshift(root)\n }\n // Exclude elements that live inside ANOTHER component's subtree. Every\n // mounted Gea component tags its root element with `GEA_DOM_COMPONENT`\n // (Symbol.for('gea.dom.component')). Walking up from each match toward\n // `root`, if we cross a tagged element whose component !== this, that\n // match belongs to a nested component — skip it. Prevents a parent\n // ZagComponent (e.g. Dialog) from clobbering child-Zag parts like\n // `[data-part=\"trigger\"]` shared by Select/Menu/Tabs, which live inside\n // a slot (`props.children`) and aren't tracked in `this._cc`.\n const COMP = Symbol.for('gea.dom.component')\n if (!root) return results\n const filtered: Element[] = []\n for (const el of results) {\n let cur: Element | null = el\n let foreign = false\n while (cur && cur !== root) {\n const owner = (cur as any)[COMP]\n if (owner && owner !== this) {\n foreign = true\n break\n }\n cur = cur.parentElement\n }\n if (!foreign) filtered.push(el)\n }\n return filtered\n }\n\n _applyAllSpreads() {\n if (!this.rendered || !this._api) return\n const map = this.getSpreadMap()\n\n for (const selector in map) {\n const getter = map[selector]\n\n let elements = this._elementCache.get(selector)\n if (!elements) {\n elements = this._queryAllIncludingSelf(selector)\n this._elementCache.set(selector, elements)\n }\n\n for (let i = 0; i < elements.length; i++) {\n const el = elements[i]\n const key = selector + ':' + i\n const nextProps = this._resolveProps(getter, el)\n if (!nextProps) continue\n\n // Preserve compiled binding IDs: Zag's spreadProps overrides element\n // IDs, but the compiler's observers rely on getElementById with binding\n // IDs. We restore the binding ID and store the Zag ID in _zagIdMap so\n // scope.getById (patched in created()) can still find elements.\n // Note: we never clear _zagIdMap here because spreadProps caches\n // previous attrs and skips unchanged values — on subsequent calls the\n // ID won't be re-set, so we'd lose the mapping.\n const bindingId = el.id\n const cleanup = spreadProps(el, nextProps)\n if (bindingId && el.id !== bindingId) {\n this._zagIdMap.set(el.id, el)\n el.id = bindingId\n }\n this._spreadCleanups.set(key, cleanup)\n }\n }\n }\n\n /** Compiled keyedList calls this on the owner after each reconciliation. */\n onItemSync(_listId: string, _idx: number) {\n this._elementCache.clear()\n this._scheduleSpreadApplication()\n }\n\n /** Compiled keyedList calls this once per list at construction. */\n registerListState(listId: string, state: ListStateRecord) {\n if (!this._listStates) this._listStates = new Map()\n this._listStates.set(listId, state)\n }\n\n unregisterListState(listId: string) {\n this._listStates?.delete(listId)\n }\n\n declare _listStates: Map<string, ListStateRecord>\n\n onAfterRender() {\n this._cacheArrayContainers()\n this._elementCache.clear()\n // If the machine was stopped (parent conditional removed this component's\n // subtree) and the subtree is now re-shown, re-create the Zag machine\n // so spread props + event handlers work again.\n if ((this as any)._machineStopped && !this._machine) {\n ;(this as any)._machineStopped = false\n try {\n this.created(this.props)\n } catch {\n /* isolated */\n }\n }\n this._applyAllSpreads()\n }\n\n _cacheArrayContainers() {\n if (!this._listStates) return\n for (const state of this._listStates.values()) {\n if (state.getContainer) state.container = state.getContainer()\n if (state.container && state.containerProp) (this as any)[state.containerProp] = state.container\n }\n }\n\n /** Stop the Zag machine + spread cleanups without fully disposing the\n * component. Invoked when a parent conditional slot removes this\n * component's DOM subtree so side effects on `<html>` (pointer-events,\n * aria-hidden, scroll lock) are restored. The component instance stays\n * alive so it can re-render if the conditional becomes truthy again. */\n _stopMachine() {\n for (const cleanup of this._spreadCleanups.values()) {\n try {\n cleanup()\n } catch {\n /* isolated */\n }\n }\n this._spreadCleanups.clear()\n if (this._machine) {\n try {\n this._machine.stop()\n } catch {\n /* isolated */\n }\n this._machine = null\n }\n this._api = null\n this._zagIdMap?.clear()\n this._elementCache?.clear()\n }\n\n dispose() {\n this._stopMachine()\n super.dispose()\n }\n\n static normalizeProps = normalizeProps\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geajs/ui",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.9",
|
|
4
4
|
"description": "Accessible UI components for Gea, powered by Zag.js state machines and styled with Tailwind CSS",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.mjs",
|
|
@@ -39,7 +39,8 @@
|
|
|
39
39
|
],
|
|
40
40
|
"scripts": {
|
|
41
41
|
"build": "tsdown --config-loader unrun",
|
|
42
|
-
"build:docs": "vite build --config ../../examples/docs/vite.config.prod.ts"
|
|
42
|
+
"build:docs": "vite build --config ../../examples/docs/vite.config.prod.ts",
|
|
43
|
+
"test": "tsx --conditions source --test tests/*.test.ts"
|
|
43
44
|
},
|
|
44
45
|
"publishConfig": {
|
|
45
46
|
"access": "public"
|
|
@@ -84,12 +85,11 @@
|
|
|
84
85
|
"tailwind-merge": "^3.0.0"
|
|
85
86
|
},
|
|
86
87
|
"devDependencies": {
|
|
87
|
-
"@types/react": "^19.0.0",
|
|
88
88
|
"@playwright/test": "^1.58.2",
|
|
89
89
|
"@tailwindcss/vite": "^4.0.0",
|
|
90
90
|
"prismjs": "^1.30.0",
|
|
91
91
|
"tailwindcss": "^4.0.0",
|
|
92
92
|
"tsdown": "^0.21.2",
|
|
93
|
-
"typescript": "^
|
|
93
|
+
"typescript": "^6.0.3"
|
|
94
94
|
}
|
|
95
|
-
}
|
|
95
|
+
}
|
package/dist/cn.mjs
DELETED
package/dist/cn.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cn.mjs","names":[],"sources":["../src/utils/cn.ts"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n"],"mappings":";;;AAGA,SAAgB,GAAG,GAAG,QAAsB;AAC1C,QAAO,QAAQ,KAAK,OAAO,CAAC"}
|
package/dist/draggable.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"draggable.mjs","names":["Component","GEA_ELEMENT","GEA_ON_PROP_CHANGE","GEA_PATCH_NODE","GEA_INSTANTIATE_CHILD_COMPONENTS","GEA_MOUNT_COMPILED_CHILD_COMPONENTS","dndManager","Draggable","__geaTagName","_didDrag","_onPointerDown","e","PointerEvent","el","currentTarget","HTMLElement","closest","startTracking","props","draggableId","template","__id","id","class","trim","index","children","events","__evts","__geaEvtsResult","pointerdown","__event_pointerdown_0","click","__event_click_1","targetComponent","isDragging","preventDefault","stopPropagation","key","value","__el","__boundValue","__newClass","String","replace","className","__av","removeAttribute","__newAttr","getAttribute","setAttribute","__tw","document","createElement","innerHTML","__newEl","content","firstElementChild","__existEl","childNodes","length","constructor","parentComponent"],"sources":["../src/components/draggable.tsx"],"sourcesContent":["import { Component } from '@geajs/core'\nimport { dndManager } from './dnd-manager'\n\nexport default class Draggable extends Component {\n _didDrag = false\n\n _onPointerDown(e: PointerEvent) {\n const el = (e.currentTarget as HTMLElement).closest('.gea-draggable') as HTMLElement\n if (!el) return\n this._didDrag = false\n dndManager.startTracking(e, this.props.draggableId as string, el)\n }\n\n template(props: any) {\n return (\n <div\n class={`gea-draggable ${props.class || ''}`}\n data-draggable-id={props.draggableId}\n data-index={props.index}\n pointerdown={(e: PointerEvent) => this._onPointerDown(e)}\n click={(e: MouseEvent) => {\n if (dndManager.isDragging) {\n e.preventDefault()\n e.stopPropagation()\n }\n }}\n >\n {props.children}\n </div>\n )\n }\n}\n"],"mappings":";;;AAGA,IAAqBO,YAArB,cAAuCP,UAAU;;;kBACpC;;;sBADoC;;CAG/CU,eAAeC,GAAiB;EAC9B,MAAME,KAAMF,EAAEG,cAA8BE,QAAQ,iBAAiB;AACrE,MAAI,CAACH,GAAI;AACT,OAAKJ,WAAW;AAChBH,aAAWW,cAAcN,GAAG,KAAKO,MAAMC,aAAuBN,GAAG;;CAGnEO,SAASF,OAAY;AACnB,SAAA,YADmB,KAAAI,GACnB,WAEW,iBAAiBJ,MAAMK,SAAS,KAAIC,MAAA,CAAA,GACxBN,MAAMC,eAAW,QAAjBD,MAAMC,gBAAW,QAAA,KAAA,uBAAjBD,MAAMC,YAAW,KACxBD,MAAMO,SAAK,QAAXP,MAAMO,UAAK,QAAA,KAAA,gBAAXP,MAAMO,MAAK,GAAA,GAStBP,MAAMQ,SAAQ;;CAGpB,IAAAC,SAAA;AAAA,MAAA,KAAAC,UAAA,KAAA3B,aAAA,QAAA,KAAA2B;EAAA,MAAAP,OAAA,KAAAC;EAAA,MAAAO,kBAAA;GAAAC,aAAA,GAAA,IAAAT,SAAA,KAAAU,uBAAA;GAAAC,OAAA,GAAA,IAAAX,SAAA,KAAAY,iBAAA;GAAA;AAAA,MAAA,KAAAhC,aAAA,MAAA2B,SAAAC;AAAA,SAAAA;;CA7BHE,sBAAsBpB,GAAGuB,iBAAiB;AAkBA,OAAKxB,eAAeC,EAAE;;CAlBhEsB,gBAAsBtB,GAAGuB,iBAAiB;AAoBhC,MAAI5B,WAAW6B,YAAY;AACzBxB,KAAEyB,gBAAgB;AAClBzB,KAAE0B,iBAAiB;;;CAtB/B,CAAAnC,oBAAwBoC,KAAKC,OAAK;AAAA,MAAAD,QAAA,SAAA;GAAA,MAAAE,OAAA,KAAAvC;AAYb,QAAAiB;GAAA,MAAAuB,eAGN,iBAAiBF,SAAe;AAAI,OAAAC,MAfnD;IACM,MAAME,aADXC,OAAOF,gBAAyB,GAAG,CAAEjB,MAAM,CAACoB,QAAQ,QAAQ,IACf;AACxC,QAAIJ,KAAsBK,cAAcH,WAAYF,MAAsBK,YAAYH;;;AACvF,MAAAJ,QAAA,eAAA;GAAA,MAAAE,OAAA,KAAAvC;AAAA,OAAAuC,MAAA;IAFC,IAAIM,OAAIP;AACR,QAAIO,QAAQ,QAAQA,SAAS,MAC3BN,MAAsBO,gBAAgB,oBAAoB;SACrD;KACL,MAAMC,YAAYL,OAAOG,KAAK;AAC9B,SAAIN,KAAsBS,aAAa,oBAAoB,KAAKD,UAC9DR,MAAsBU,aAAa,qBAAqBF,UAAU;;;;AACrE,MAAAV,QAAA,SAAA;GAAA,MAAAE,OAAA,KAAAvC;AAAA,OAAAuC,MAAA;IAPD,IAAIM,OAAIP;AACR,QAAIO,QAAQ,QAAQA,SAAS,MAC3BN,MAAsBO,gBAAgB,aAAa;SAC9C;KACL,MAAMC,YAAYL,OAAOG,KAAK;AAC9B,SAAIN,KAAsBS,aAAa,aAAa,KAAKD,UACvDR,MAAsBU,aAAa,cAAcF,UAAU;;;;AAC9D,MAAAV,QAAA,YAAA;GAAA,MAAAE,OAAA,KAAAvC;AAAA,OAAAuC,MARP;IACI,MAAMW,OAAOC,SAASC,cAAc,WAAW;AAC/CF,SAAKG,YAASf;IACd,MAAMgB,UAAUJ,KAAKK,QAAQC;IAC7B,MAAMC,YAAYlB,KAAsBiB;AACxC,QAAIF,WAAWG,aAAaP,KAAKK,QAAQG,WAAWC,WAAW,EAC7D,MAAKC,YAAW1D,gBAAwBuD,WAAWH,SAAS,KAAK;aACxDf,KAAsBc,cAASf,OAA4B;AACpEC,UAAsBc,YAASf;AAC/B,UAAInC,mCAAyB;AAC7B,SAAI,KAAK0D,gBAAiB,MAAKA,gBAAezD,sCAAyB"}
|
package/dist/input.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"input.mjs","names":["Component","GEA_ELEMENT","GEA_ON_PROP_CHANGE","cn","Input","__geaTagName","template","props","__id","id","inputId","class","String","trim","type","placeholder","value","disabled","name","events","__evts","__geaEvtsResult","input","__event_input_0","e","targetComponent","onInput","key","__el","__boundValue","__newClass","replace","className","__av","removeAttribute","__newAttr","getAttribute","setAttribute"],"sources":["../src/components/input.tsx"],"sourcesContent":["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":"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"}
|