@geajs/ui 0.2.1 → 0.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/dist/accordion.mjs +12 -12
  2. package/dist/accordion.mjs.map +1 -1
  3. package/dist/alert.mjs +44 -23
  4. package/dist/alert.mjs.map +1 -1
  5. package/dist/avatar.mjs +11 -11
  6. package/dist/avatar.mjs.map +1 -1
  7. package/dist/badge.mjs +19 -12
  8. package/dist/badge.mjs.map +1 -1
  9. package/dist/button.mjs +33 -23
  10. package/dist/button.mjs.map +1 -1
  11. package/dist/card.mjs +85 -43
  12. package/dist/card.mjs.map +1 -1
  13. package/dist/checkbox.mjs +5 -5
  14. package/dist/checkbox.mjs.map +1 -1
  15. package/dist/clipboard.mjs +10 -10
  16. package/dist/clipboard.mjs.map +1 -1
  17. package/dist/collapsible.mjs +18 -11
  18. package/dist/collapsible.mjs.map +1 -1
  19. package/dist/combobox.mjs +62 -48
  20. package/dist/combobox.mjs.map +1 -1
  21. package/dist/dialog.mjs +19 -12
  22. package/dist/dialog.mjs.map +1 -1
  23. package/dist/dnd-manager.mjs +18 -26
  24. package/dist/dnd-manager.mjs.map +1 -1
  25. package/dist/drag-drop-context.mjs +15 -8
  26. package/dist/drag-drop-context.mjs.map +1 -1
  27. package/dist/draggable.mjs +39 -19
  28. package/dist/draggable.mjs.map +1 -1
  29. package/dist/droppable.mjs +22 -12
  30. package/dist/droppable.mjs.map +1 -1
  31. package/dist/file-upload.mjs +24 -21
  32. package/dist/file-upload.mjs.map +1 -1
  33. package/dist/hover-card.mjs +27 -17
  34. package/dist/hover-card.mjs.map +1 -1
  35. package/dist/input.mjs +36 -24
  36. package/dist/input.mjs.map +1 -1
  37. package/dist/label.mjs +22 -12
  38. package/dist/label.mjs.map +1 -1
  39. package/dist/menu.mjs +9 -9
  40. package/dist/menu.mjs.map +1 -1
  41. package/dist/number-input.mjs +5 -5
  42. package/dist/number-input.mjs.map +1 -1
  43. package/dist/pagination.mjs +8 -9
  44. package/dist/pagination.mjs.map +1 -1
  45. package/dist/pin-input.mjs +11 -11
  46. package/dist/pin-input.mjs.map +1 -1
  47. package/dist/popover.mjs +19 -12
  48. package/dist/popover.mjs.map +1 -1
  49. package/dist/progress.mjs +8 -8
  50. package/dist/progress.mjs.map +1 -1
  51. package/dist/radio-group.mjs +16 -12
  52. package/dist/radio-group.mjs.map +1 -1
  53. package/dist/rating-group.mjs +21 -15
  54. package/dist/rating-group.mjs.map +1 -1
  55. package/dist/select.d.mts +1 -0
  56. package/dist/select.mjs +22 -17
  57. package/dist/select.mjs.map +1 -1
  58. package/dist/separator.mjs +12 -9
  59. package/dist/separator.mjs.map +1 -1
  60. package/dist/skeleton.mjs +6 -7
  61. package/dist/skeleton.mjs.map +1 -1
  62. package/dist/slider.mjs +5 -5
  63. package/dist/slider.mjs.map +1 -1
  64. package/dist/switch.mjs +5 -5
  65. package/dist/switch.mjs.map +1 -1
  66. package/dist/tabs.mjs +28 -20
  67. package/dist/tabs.mjs.map +1 -1
  68. package/dist/tags-input.mjs +18 -14
  69. package/dist/tags-input.mjs.map +1 -1
  70. package/dist/textarea.mjs +28 -19
  71. package/dist/textarea.mjs.map +1 -1
  72. package/dist/theme.css +198 -165
  73. package/dist/toast.mjs +6 -7
  74. package/dist/toast.mjs.map +1 -1
  75. package/dist/toggle-group.mjs +16 -12
  76. package/dist/toggle-group.mjs.map +1 -1
  77. package/dist/tooltip.mjs +18 -11
  78. package/dist/tooltip.mjs.map +1 -1
  79. package/dist/tree-view.mjs +17 -10
  80. package/dist/tree-view.mjs.map +1 -1
  81. package/dist/zag-component.mjs.map +1 -1
  82. package/package.json +1 -2
  83. package/dist/tailwind-preset.d.mts +0 -51
  84. package/dist/tailwind-preset.mjs +0 -50
  85. package/dist/tailwind-preset.mjs.map +0 -1
@@ -1,8 +1,11 @@
1
- import { GEA_CHILD_COMPONENTS, GEA_DOM_COMPONENT } from "@geajs/core";
1
+ import { GEA_DOM_COMPONENT, GEA_PARENT_COMPONENT, GEA_PROXY_GET_RAW_TARGET, stashComponentForTransfer } from "@geajs/core";
2
2
  //#region src/components/dnd-manager.ts
3
3
  const DRAG_THRESHOLD_SQ = 25;
4
4
  const DRAGGABLE_SEL = "[data-draggable-id]";
5
5
  const DROPPABLE_SEL = "[data-droppable-id]";
6
+ function _rawComp(comp) {
7
+ return comp?.[GEA_PROXY_GET_RAW_TARGET] ?? comp;
8
+ }
6
9
  var DndManager = class {
7
10
  constructor() {
8
11
  this.droppables = /* @__PURE__ */ new Map();
@@ -223,9 +226,13 @@ var DndManager = class {
223
226
  };
224
227
  this._animateDrop().then(() => {
225
228
  this._restoreElStyles();
226
- this._performTransfer(destination);
227
- this._cleanup();
229
+ const draggedComp = this._getComponentFromElement(this._sourceEl);
230
+ if (draggedComp) stashComponentForTransfer(draggedComp);
231
+ if (this._placeholder?.parentElement) this._placeholder.remove();
232
+ this._placeholder = null;
233
+ if (this._sourceEl?.parentElement === document.body) this._sourceEl.remove();
228
234
  this._onDragEnd?.(result);
235
+ this._cleanup();
229
236
  });
230
237
  } else this._animateReturn().then(() => {
231
238
  this._returnToSource();
@@ -266,7 +273,8 @@ var DndManager = class {
266
273
  destContainer.insertBefore(sourceEl, refNode);
267
274
  const draggedComp = this._getComponentFromElement(sourceEl);
268
275
  if (!draggedComp) return;
269
- const sourceParent = draggedComp.parentComponent;
276
+ const rawDragged = _rawComp(draggedComp);
277
+ const sourceParent = rawDragged[GEA_PARENT_COMPONENT];
270
278
  if (!sourceParent) return;
271
279
  const srcArr = this._findCompiledArray(sourceParent, draggedComp);
272
280
  if (!srcArr) return;
@@ -275,32 +283,16 @@ var DndManager = class {
275
283
  srcArr.arr.splice(srcArr.index, 1);
276
284
  const destArr = destParent[srcArr.key];
277
285
  if (Array.isArray(destArr)) destArr.splice(destination.index, 0, draggedComp);
278
- const srcChildren = sourceParent[GEA_CHILD_COMPONENTS];
279
- if (Array.isArray(srcChildren)) {
280
- const ci = srcChildren.indexOf(draggedComp);
281
- if (ci !== -1) srcChildren.splice(ci, 1);
282
- }
283
- const destChildren = destParent[GEA_CHILD_COMPONENTS];
284
- if (Array.isArray(destChildren) && !destChildren.includes(draggedComp)) destChildren.push(draggedComp);
285
- draggedComp.parentComponent = destParent;
286
+ rawDragged[GEA_PARENT_COMPONENT] = destParent;
286
287
  }
287
288
  _findCompiledArray(parent, child) {
288
- const stringKeys = Object.keys(parent);
289
- const symbolKeys = Object.getOwnPropertySymbols(parent);
290
- for (const key of stringKeys) if (key.startsWith("_") && key.endsWith("Items") && Array.isArray(parent[key])) {
291
- const arr = parent[key];
292
- const idx = arr.indexOf(child);
293
- if (idx !== -1) return {
294
- key,
295
- arr,
296
- index: idx
297
- };
298
- }
299
- for (const key of symbolKeys) if (String(key).includes("gea.listItems") && Array.isArray(parent[key])) {
300
- const arr = parent[key];
289
+ for (const sym of Object.getOwnPropertySymbols(parent)) {
290
+ if (!(sym.description ?? "").startsWith("gea.listItems.")) continue;
291
+ const arr = parent[sym];
292
+ if (!Array.isArray(arr)) continue;
301
293
  const idx = arr.indexOf(child);
302
294
  if (idx !== -1) return {
303
- key,
295
+ key: sym,
304
296
  arr,
305
297
  index: idx
306
298
  };
@@ -1 +1 @@
1
- {"version":3,"file":"dnd-manager.mjs","names":[],"sources":["../src/components/dnd-manager.ts"],"sourcesContent":["import { GEA_CHILD_COMPONENTS, GEA_DOM_COMPONENT } from '@geajs/core'\n\nexport interface DragResult {\n draggableId: string\n source: { droppableId: string; index: number }\n destination: { droppableId: string; index: number }\n}\n\nconst DRAG_THRESHOLD_SQ = 25\nconst DRAGGABLE_SEL = '[data-draggable-id]'\nconst DROPPABLE_SEL = '[data-droppable-id]'\n\nclass DndManager {\n droppables = new Map<string, HTMLElement>()\n\n private _onDragEnd: ((result: DragResult) => void) | null = null\n get onDragEnd() {\n return this._onDragEnd\n }\n set onDragEnd(fn: ((result: DragResult) => void) | null) {\n this._onDragEnd = fn\n if (fn) this._ensureDocListener()\n }\n\n private _dragging = false\n private _started = false\n private _draggedId = ''\n private _sourceDroppableId = ''\n private _sourceIndex = 0\n private _sourceEl: HTMLElement | null = null\n private _sourceHeight = 0\n private _sourceRect: DOMRect | null = null\n private _savedCssText = ''\n private _placeholder: HTMLElement | null = null\n private _startX = 0\n private _startY = 0\n private _offsetX = 0\n private _offsetY = 0\n private _currentDroppableId: string | null = null\n private _currentIndex = 0\n private _lastClientY = 0\n private _cleanedUp = false\n\n private _boundMove = this._onPointerMove.bind(this)\n private _boundUp = this._onPointerUp.bind(this)\n private _boundKeyDown = this._onKeyDown.bind(this)\n private _boundDocDown = this._onDocumentPointerDown.bind(this)\n private _docListenerAttached = false\n\n get isDragging() {\n return this._started\n }\n\n private _ensureDocListener() {\n if (this._docListenerAttached || typeof document === 'undefined') return\n document.addEventListener('pointerdown', this._boundDocDown, true)\n this._docListenerAttached = true\n }\n\n private _onDocumentPointerDown(e: PointerEvent) {\n const el = (e.target as HTMLElement).closest?.(DRAGGABLE_SEL) as HTMLElement\n if (!el) return\n this.startTracking(e, el.dataset.draggableId!, el)\n }\n\n registerDroppable(id: string, el: HTMLElement) {\n this.droppables.set(id, el)\n this._ensureDocListener()\n }\n\n unregisterDroppable(id: string) {\n this.droppables.delete(id)\n }\n\n startTracking(e: PointerEvent, draggableId: string, el: HTMLElement) {\n if (this._dragging || e.button !== 0) return\n this._ensureDocListener()\n\n const droppableEl = el.closest(DROPPABLE_SEL) as HTMLElement\n if (!droppableEl) return\n\n const droppableId = droppableEl.dataset.droppableId!\n const siblings = Array.from(droppableEl.querySelectorAll(`:scope > ${DRAGGABLE_SEL}`))\n const sourceIndex = siblings.indexOf(el)\n if (sourceIndex === -1) return\n\n this._dragging = true\n this._started = false\n this._cleanedUp = false\n this._draggedId = draggableId\n this._sourceDroppableId = droppableId\n this._sourceIndex = sourceIndex\n this._sourceEl = el\n\n const rect = el.getBoundingClientRect()\n this._sourceHeight = rect.height\n this._sourceRect = rect\n this._startX = e.clientX\n this._startY = e.clientY\n this._lastClientY = e.clientY\n this._offsetX = e.clientX - rect.left\n this._offsetY = e.clientY - rect.top\n\n document.addEventListener('pointermove', this._boundMove)\n document.addEventListener('pointerup', this._boundUp)\n document.addEventListener('keydown', this._boundKeyDown)\n e.preventDefault()\n }\n\n private _onPointerMove(e: PointerEvent) {\n if (!this._dragging) return\n\n if (!this._started) {\n const dx = e.clientX - this._startX\n const dy = e.clientY - this._startY\n if (dx * dx + dy * dy < DRAG_THRESHOLD_SQ) return\n this._initDrag()\n this._updateTarget(e.clientX, e.clientY)\n return\n }\n\n this._sourceEl!.style.transform = `translate(${e.clientX - this._offsetX}px, ${e.clientY - this._offsetY}px)`\n this._updateTarget(e.clientX, e.clientY)\n this._lastClientY = e.clientY\n }\n\n private _initDrag() {\n this._started = true\n const el = this._sourceEl!\n const rect = this._sourceRect!\n\n document.querySelectorAll(DROPPABLE_SEL).forEach((dropEl) => {\n const id = (dropEl as HTMLElement).dataset.droppableId!\n if (!this.droppables.has(id)) {\n this.droppables.set(id, dropEl as HTMLElement)\n }\n })\n\n const elMargin = getComputedStyle(el).marginBottom\n this._savedCssText = el.style.cssText\n\n const placeholder = document.createElement('div')\n placeholder.className = 'gea-dnd-placeholder'\n placeholder.style.height = rect.height + 'px'\n placeholder.style.marginBottom = elMargin\n placeholder.style.transition = 'none'\n el.parentElement!.insertBefore(placeholder, el)\n\n document.body.appendChild(el)\n Object.assign(el.style, {\n position: 'fixed',\n top: '0px',\n left: '0',\n width: rect.width + 'px',\n height: rect.height + 'px',\n transform: `translate(${rect.left}px, ${rect.top}px)`,\n // rotate: '0deg',\n // transition: 'rotate 0.15s ease, box-shadow 0.15s ease',\n pointerEvents: 'none',\n zIndex: '99999',\n margin: '0',\n willChange: 'transform',\n boxShadow: 'none',\n })\n el.offsetHeight\n // el.style.rotate = '3deg'\n el.style.boxShadow = '5px 10px 30px 0px rgba(9, 30, 66, 0.15)'\n\n this._placeholder = placeholder\n\n this._currentDroppableId = this._sourceDroppableId\n this._currentIndex = this._sourceIndex\n }\n\n private _updateTarget(clientX: number, clientY: number) {\n let foundId: string | null = null\n let foundEl: HTMLElement | null = null\n\n for (const [id, el] of this.droppables) {\n const r = el.getBoundingClientRect()\n if (clientX >= r.left && clientX <= r.right && clientY >= r.top && clientY <= r.bottom) {\n foundId = id\n foundEl = el\n break\n }\n }\n\n if (!foundEl || foundId === null) {\n this._currentDroppableId = null\n return\n }\n\n const items = Array.from(foundEl.querySelectorAll(`:scope > ${DRAGGABLE_SEL}`))\n const movingDown = clientY >= this._lastClientY\n const threshold = movingDown ? 0 : 1\n let insertIndex = items.length\n for (let i = 0; i < items.length; i++) {\n const r = items[i].getBoundingClientRect()\n if (clientY < r.top + r.height * threshold) {\n insertIndex = i\n break\n }\n }\n\n this._currentDroppableId = foundId\n this._currentIndex = insertIndex\n\n if (!this._placeholder) return\n\n const refNode = (items[insertIndex] as HTMLElement) || null\n if (this._placeholder.parentElement !== foundEl || this._placeholder.nextElementSibling !== refNode) {\n if (this._placeholder.parentElement) {\n const ghost = document.createElement('div')\n ghost.style.height = this._sourceHeight + 'px'\n ghost.style.marginBottom = this._placeholder.style.marginBottom\n ghost.style.transition = 'height 0.2s cubic-bezier(0.2, 0, 0, 1)'\n ghost.style.overflow = 'hidden'\n this._placeholder.parentElement.insertBefore(ghost, this._placeholder)\n ghost.offsetHeight\n ghost.style.height = '0px'\n ghost.style.marginBottom = '0px'\n ghost.addEventListener('transitionend', () => ghost.remove(), { once: true })\n setTimeout(() => ghost.remove(), 250)\n }\n\n this._placeholder.style.transition = 'none'\n this._placeholder.style.height = '0px'\n foundEl.insertBefore(this._placeholder, refNode)\n this._placeholder.offsetHeight\n this._placeholder.style.transition = 'height 0.2s cubic-bezier(0.2, 0, 0, 1)'\n this._placeholder.style.height = this._sourceHeight + 'px'\n }\n }\n\n private _onKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape' && this._dragging) {\n this._cancelDrag()\n }\n }\n\n private _cancelDrag() {\n this._removeGlobalListeners()\n if (!this._started) {\n this._dragging = false\n return\n }\n\n this._animateReturn().then(() => {\n this._returnToSource()\n this._cleanup()\n })\n }\n\n private _onPointerUp(_e: PointerEvent) {\n this._removeGlobalListeners()\n\n if (!this._started) {\n this._dragging = false\n return\n }\n\n const destination =\n this._currentDroppableId !== null ? { droppableId: this._currentDroppableId, index: this._currentIndex } : null\n\n const samePosition =\n destination && destination.droppableId === this._sourceDroppableId && destination.index === this._sourceIndex\n\n if (destination && this._placeholder && !samePosition) {\n const result: DragResult = {\n draggableId: this._draggedId,\n source: { droppableId: this._sourceDroppableId, index: this._sourceIndex },\n destination,\n }\n this._animateDrop().then(() => {\n this._restoreElStyles()\n this._performTransfer(destination)\n this._cleanup()\n this._onDragEnd?.(result)\n })\n } else {\n this._animateReturn().then(() => {\n this._returnToSource()\n this._cleanup()\n })\n }\n }\n\n private _getComponentFromElement(el: HTMLElement | null): any {\n let current: HTMLElement | null = el\n while (current) {\n const comp = (current as HTMLElement & { [GEA_DOM_COMPONENT]?: unknown })[GEA_DOM_COMPONENT]\n if (comp) return comp\n current = current.parentElement\n }\n return null\n }\n\n private _restoreElStyles() {\n if (!this._sourceEl) return\n this._sourceEl.style.cssText = this._savedCssText\n }\n\n private _returnToSource() {\n if (!this._sourceEl) return\n this._restoreElStyles()\n if (this._placeholder?.parentElement) {\n this._placeholder.parentElement.insertBefore(this._sourceEl, this._placeholder)\n } else {\n const container = this.droppables.get(this._sourceDroppableId)\n if (container) {\n const items = Array.from(container.querySelectorAll(`:scope > ${DRAGGABLE_SEL}`))\n container.insertBefore(this._sourceEl, items[this._sourceIndex] || null)\n }\n }\n }\n\n private _performTransfer(destination: { droppableId: string; index: number }) {\n const sourceEl = this._sourceEl\n if (!sourceEl) return\n\n const destContainer = this.droppables.get(destination.droppableId)\n if (!destContainer) return\n\n const destItems = Array.from(destContainer.querySelectorAll(`:scope > ${DRAGGABLE_SEL}`))\n const refNode = (destItems[destination.index] as HTMLElement) || null\n destContainer.insertBefore(sourceEl, refNode)\n\n const draggedComp = this._getComponentFromElement(sourceEl)\n if (!draggedComp) return\n\n const sourceParent = draggedComp.parentComponent\n if (!sourceParent) return\n\n const srcArr = this._findCompiledArray(sourceParent, draggedComp)\n if (!srcArr) return\n\n const destParent = this._getComponentFromElement(destContainer)\n if (!destParent) return\n\n srcArr.arr.splice(srcArr.index, 1)\n const destArr = destParent[srcArr.key]\n if (Array.isArray(destArr)) {\n destArr.splice(destination.index, 0, draggedComp)\n }\n\n const srcChildren = sourceParent[GEA_CHILD_COMPONENTS]\n if (Array.isArray(srcChildren)) {\n const ci = srcChildren.indexOf(draggedComp)\n if (ci !== -1) srcChildren.splice(ci, 1)\n }\n const destChildren = destParent[GEA_CHILD_COMPONENTS]\n if (Array.isArray(destChildren) && !destChildren.includes(draggedComp)) {\n destChildren.push(draggedComp)\n }\n draggedComp.parentComponent = destParent\n }\n\n private _findCompiledArray(parent: any, child: any): { key: PropertyKey; arr: any[]; index: number } | null {\n const stringKeys = Object.keys(parent)\n const symbolKeys = Object.getOwnPropertySymbols(parent)\n for (const key of stringKeys) {\n if (key.startsWith('_') && key.endsWith('Items') && Array.isArray((parent as any)[key])) {\n const arr = (parent as any)[key] as any[]\n const idx = arr.indexOf(child)\n if (idx !== -1) return { key, arr, index: idx }\n }\n }\n for (const key of symbolKeys) {\n if (String(key).includes('gea.listItems') && Array.isArray((parent as any)[key])) {\n const arr = (parent as any)[key] as any[]\n const idx = arr.indexOf(child)\n if (idx !== -1) return { key, arr, index: idx }\n }\n }\n return null\n }\n\n private _animateDrop(): Promise<void> {\n return new Promise((resolve) => {\n if (!this._sourceEl || !this._placeholder) return resolve()\n const phRect = this._placeholder.getBoundingClientRect()\n this._sourceEl.style.transition =\n 'transform 0.2s cubic-bezier(0.2, 0, 0, 1), rotate 0.2s cubic-bezier(0.2, 0, 0, 1), box-shadow 0.2s cubic-bezier(0.2, 0, 0, 1)'\n this._sourceEl.style.transform = `translate(${phRect.left}px, ${phRect.top}px)`\n this._sourceEl.style.rotate = '0deg'\n this._sourceEl.style.boxShadow = 'none'\n let done = false\n const finish = () => {\n if (done) return\n done = true\n resolve()\n }\n this._sourceEl.addEventListener('transitionend', finish, { once: true })\n setTimeout(finish, 250)\n })\n }\n\n private _animateReturn(): Promise<void> {\n return new Promise((resolve) => {\n if (!this._sourceEl || !this._sourceRect) return resolve()\n let targetX = this._sourceRect.left\n let targetY = this._sourceRect.top\n if (this._placeholder?.parentElement) {\n const phRect = this._placeholder.getBoundingClientRect()\n targetX = phRect.left\n targetY = phRect.top\n }\n this._sourceEl.style.transition =\n 'transform 0.2s cubic-bezier(0.2, 0, 0, 1), rotate 0.2s cubic-bezier(0.2, 0, 0, 1), box-shadow 0.2s cubic-bezier(0.2, 0, 0, 1)'\n this._sourceEl.style.transform = `translate(${targetX}px, ${targetY}px)`\n this._sourceEl.style.rotate = '0deg'\n this._sourceEl.style.boxShadow = 'none'\n let done = false\n const finish = () => {\n if (done) return\n done = true\n resolve()\n }\n this._sourceEl.addEventListener('transitionend', finish, { once: true })\n setTimeout(finish, 250)\n })\n }\n\n private _removeGlobalListeners() {\n document.removeEventListener('pointermove', this._boundMove)\n document.removeEventListener('pointerup', this._boundUp)\n document.removeEventListener('keydown', this._boundKeyDown)\n }\n\n private _cleanup() {\n if (this._cleanedUp) return\n this._cleanedUp = true\n\n this._placeholder?.remove()\n this._placeholder = null\n this._sourceEl = null\n this._sourceRect = null\n\n this._dragging = false\n this._started = false\n this._draggedId = ''\n this._currentDroppableId = null\n }\n\n destroy() {\n this._removeGlobalListeners()\n if (this._dragging) {\n if (this._sourceEl) this._returnToSource()\n this._cleanup()\n }\n if (this._docListenerAttached && typeof document !== 'undefined') {\n document.removeEventListener('pointerdown', this._boundDocDown, true)\n this._docListenerAttached = false\n }\n this.droppables.clear()\n this.onDragEnd = null\n }\n}\n\nexport const dndManager = new DndManager()\n"],"mappings":"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"}
1
+ {"version":3,"file":"dnd-manager.mjs","names":[],"sources":["../src/components/dnd-manager.ts"],"sourcesContent":["import {\n GEA_DOM_COMPONENT,\n GEA_PARENT_COMPONENT,\n GEA_PROXY_GET_RAW_TARGET,\n stashComponentForTransfer,\n} from '@geajs/core'\n\nexport interface DragResult {\n draggableId: string\n source: { droppableId: string; index: number }\n destination: { droppableId: string; index: number }\n}\n\nconst DRAG_THRESHOLD_SQ = 25\nconst DRAGGABLE_SEL = '[data-draggable-id]'\nconst DROPPABLE_SEL = '[data-droppable-id]'\n\nfunction _rawComp(comp: any): any {\n return comp?.[GEA_PROXY_GET_RAW_TARGET] ?? comp\n}\n\nclass DndManager {\n droppables = new Map<string, HTMLElement>()\n\n private _onDragEnd: ((result: DragResult) => void) | null = null\n get onDragEnd() {\n return this._onDragEnd\n }\n set onDragEnd(fn: ((result: DragResult) => void) | null) {\n this._onDragEnd = fn\n if (fn) this._ensureDocListener()\n }\n\n private _dragging = false\n private _started = false\n private _draggedId = ''\n private _sourceDroppableId = ''\n private _sourceIndex = 0\n private _sourceEl: HTMLElement | null = null\n private _sourceHeight = 0\n private _sourceRect: DOMRect | null = null\n private _savedCssText = ''\n private _placeholder: HTMLElement | null = null\n private _startX = 0\n private _startY = 0\n private _offsetX = 0\n private _offsetY = 0\n private _currentDroppableId: string | null = null\n private _currentIndex = 0\n private _lastClientY = 0\n private _cleanedUp = false\n\n private _boundMove = this._onPointerMove.bind(this)\n private _boundUp = this._onPointerUp.bind(this)\n private _boundKeyDown = this._onKeyDown.bind(this)\n private _boundDocDown = this._onDocumentPointerDown.bind(this)\n private _docListenerAttached = false\n\n get isDragging() {\n return this._started\n }\n\n private _ensureDocListener() {\n if (this._docListenerAttached || typeof document === 'undefined') return\n document.addEventListener('pointerdown', this._boundDocDown, true)\n this._docListenerAttached = true\n }\n\n private _onDocumentPointerDown(e: PointerEvent) {\n const el = (e.target as HTMLElement).closest?.(DRAGGABLE_SEL) as HTMLElement\n if (!el) return\n this.startTracking(e, el.dataset.draggableId!, el)\n }\n\n registerDroppable(id: string, el: HTMLElement) {\n this.droppables.set(id, el)\n this._ensureDocListener()\n }\n\n unregisterDroppable(id: string) {\n this.droppables.delete(id)\n }\n\n startTracking(e: PointerEvent, draggableId: string, el: HTMLElement) {\n if (this._dragging || e.button !== 0) return\n this._ensureDocListener()\n\n const droppableEl = el.closest(DROPPABLE_SEL) as HTMLElement\n if (!droppableEl) return\n\n const droppableId = droppableEl.dataset.droppableId!\n const siblings = Array.from(droppableEl.querySelectorAll(`:scope > ${DRAGGABLE_SEL}`))\n const sourceIndex = siblings.indexOf(el)\n if (sourceIndex === -1) return\n\n this._dragging = true\n this._started = false\n this._cleanedUp = false\n this._draggedId = draggableId\n this._sourceDroppableId = droppableId\n this._sourceIndex = sourceIndex\n this._sourceEl = el\n\n const rect = el.getBoundingClientRect()\n this._sourceHeight = rect.height\n this._sourceRect = rect\n this._startX = e.clientX\n this._startY = e.clientY\n this._lastClientY = e.clientY\n this._offsetX = e.clientX - rect.left\n this._offsetY = e.clientY - rect.top\n\n document.addEventListener('pointermove', this._boundMove)\n document.addEventListener('pointerup', this._boundUp)\n document.addEventListener('keydown', this._boundKeyDown)\n e.preventDefault()\n }\n\n private _onPointerMove(e: PointerEvent) {\n if (!this._dragging) return\n\n if (!this._started) {\n const dx = e.clientX - this._startX\n const dy = e.clientY - this._startY\n if (dx * dx + dy * dy < DRAG_THRESHOLD_SQ) return\n this._initDrag()\n this._updateTarget(e.clientX, e.clientY)\n return\n }\n\n this._sourceEl!.style.transform = `translate(${e.clientX - this._offsetX}px, ${e.clientY - this._offsetY}px)`\n this._updateTarget(e.clientX, e.clientY)\n this._lastClientY = e.clientY\n }\n\n private _initDrag() {\n this._started = true\n const el = this._sourceEl!\n const rect = this._sourceRect!\n\n document.querySelectorAll(DROPPABLE_SEL).forEach((dropEl) => {\n const id = (dropEl as HTMLElement).dataset.droppableId!\n if (!this.droppables.has(id)) {\n this.droppables.set(id, dropEl as HTMLElement)\n }\n })\n\n const elMargin = getComputedStyle(el).marginBottom\n this._savedCssText = el.style.cssText\n\n const placeholder = document.createElement('div')\n placeholder.className = 'gea-dnd-placeholder'\n placeholder.style.height = rect.height + 'px'\n placeholder.style.marginBottom = elMargin\n placeholder.style.transition = 'none'\n el.parentElement!.insertBefore(placeholder, el)\n\n document.body.appendChild(el)\n Object.assign(el.style, {\n position: 'fixed',\n top: '0px',\n left: '0',\n width: rect.width + 'px',\n height: rect.height + 'px',\n transform: `translate(${rect.left}px, ${rect.top}px)`,\n // rotate: '0deg',\n // transition: 'rotate 0.15s ease, box-shadow 0.15s ease',\n pointerEvents: 'none',\n zIndex: '99999',\n margin: '0',\n willChange: 'transform',\n boxShadow: 'none',\n })\n el.offsetHeight\n // el.style.rotate = '3deg'\n el.style.boxShadow = '5px 10px 30px 0px rgba(9, 30, 66, 0.15)'\n\n this._placeholder = placeholder\n\n this._currentDroppableId = this._sourceDroppableId\n this._currentIndex = this._sourceIndex\n }\n\n private _updateTarget(clientX: number, clientY: number) {\n let foundId: string | null = null\n let foundEl: HTMLElement | null = null\n\n for (const [id, el] of this.droppables) {\n const r = el.getBoundingClientRect()\n if (clientX >= r.left && clientX <= r.right && clientY >= r.top && clientY <= r.bottom) {\n foundId = id\n foundEl = el\n break\n }\n }\n\n if (!foundEl || foundId === null) {\n this._currentDroppableId = null\n return\n }\n\n const items = Array.from(foundEl.querySelectorAll(`:scope > ${DRAGGABLE_SEL}`))\n const movingDown = clientY >= this._lastClientY\n const threshold = movingDown ? 0 : 1\n let insertIndex = items.length\n for (let i = 0; i < items.length; i++) {\n const r = items[i].getBoundingClientRect()\n if (clientY < r.top + r.height * threshold) {\n insertIndex = i\n break\n }\n }\n\n this._currentDroppableId = foundId\n this._currentIndex = insertIndex\n\n if (!this._placeholder) return\n\n const refNode = (items[insertIndex] as HTMLElement) || null\n if (this._placeholder.parentElement !== foundEl || this._placeholder.nextElementSibling !== refNode) {\n if (this._placeholder.parentElement) {\n const ghost = document.createElement('div')\n ghost.style.height = this._sourceHeight + 'px'\n ghost.style.marginBottom = this._placeholder.style.marginBottom\n ghost.style.transition = 'height 0.2s cubic-bezier(0.2, 0, 0, 1)'\n ghost.style.overflow = 'hidden'\n this._placeholder.parentElement.insertBefore(ghost, this._placeholder)\n ghost.offsetHeight\n ghost.style.height = '0px'\n ghost.style.marginBottom = '0px'\n ghost.addEventListener('transitionend', () => ghost.remove(), { once: true })\n setTimeout(() => ghost.remove(), 250)\n }\n\n this._placeholder.style.transition = 'none'\n this._placeholder.style.height = '0px'\n foundEl.insertBefore(this._placeholder, refNode)\n this._placeholder.offsetHeight\n this._placeholder.style.transition = 'height 0.2s cubic-bezier(0.2, 0, 0, 1)'\n this._placeholder.style.height = this._sourceHeight + 'px'\n }\n }\n\n private _onKeyDown(e: KeyboardEvent) {\n if (e.key === 'Escape' && this._dragging) {\n this._cancelDrag()\n }\n }\n\n private _cancelDrag() {\n this._removeGlobalListeners()\n if (!this._started) {\n this._dragging = false\n return\n }\n\n this._animateReturn().then(() => {\n this._returnToSource()\n this._cleanup()\n })\n }\n\n private _onPointerUp(_e: PointerEvent) {\n this._removeGlobalListeners()\n\n if (!this._started) {\n this._dragging = false\n return\n }\n\n const destination =\n this._currentDroppableId !== null ? { droppableId: this._currentDroppableId, index: this._currentIndex } : null\n\n const samePosition =\n destination && destination.droppableId === this._sourceDroppableId && destination.index === this._sourceIndex\n\n if (destination && this._placeholder && !samePosition) {\n const result: DragResult = {\n draggableId: this._draggedId,\n source: { droppableId: this._sourceDroppableId, index: this._sourceIndex },\n destination,\n }\n this._animateDrop().then(() => {\n this._restoreElStyles()\n // Stash the component for cross-list transfer so the destination's\n // reconciliation can adopt it (DOM subtree intact) instead of\n // disposing + recreating it from scratch.\n const draggedComp = this._getComponentFromElement(this._sourceEl)\n if (draggedComp) {\n stashComponentForTransfer(draggedComp)\n }\n if (this._placeholder?.parentElement) {\n this._placeholder.remove()\n }\n this._placeholder = null\n if (this._sourceEl?.parentElement === document.body) {\n this._sourceEl.remove()\n }\n this._onDragEnd?.(result)\n this._cleanup()\n })\n } else {\n this._animateReturn().then(() => {\n this._returnToSource()\n this._cleanup()\n })\n }\n }\n\n private _getComponentFromElement(el: HTMLElement | null): any {\n let current: HTMLElement | null = el\n while (current) {\n const comp = (current as any)[GEA_DOM_COMPONENT]\n if (comp) return comp\n current = current.parentElement\n }\n return null\n }\n\n private _restoreElStyles() {\n if (!this._sourceEl) return\n this._sourceEl.style.cssText = this._savedCssText\n }\n\n private _returnToSource() {\n if (!this._sourceEl) return\n this._restoreElStyles()\n if (this._placeholder?.parentElement) {\n this._placeholder.parentElement.insertBefore(this._sourceEl, this._placeholder)\n } else {\n const container = this.droppables.get(this._sourceDroppableId)\n if (container) {\n const items = Array.from(container.querySelectorAll(`:scope > ${DRAGGABLE_SEL}`))\n container.insertBefore(this._sourceEl, items[this._sourceIndex] || null)\n }\n }\n }\n\n private _performTransfer(destination: { droppableId: string; index: number }) {\n const sourceEl = this._sourceEl\n if (!sourceEl) return\n\n const destContainer = this.droppables.get(destination.droppableId)\n if (!destContainer) return\n\n const destItems = Array.from(destContainer.querySelectorAll(`:scope > ${DRAGGABLE_SEL}`))\n const refNode = (destItems[destination.index] as HTMLElement) || null\n destContainer.insertBefore(sourceEl, refNode)\n\n const draggedComp = this._getComponentFromElement(sourceEl)\n if (!draggedComp) return\n\n const rawDragged = _rawComp(draggedComp)\n const sourceParent = rawDragged[GEA_PARENT_COMPONENT]\n if (!sourceParent) return\n\n const srcArr = this._findCompiledArray(sourceParent, draggedComp)\n if (!srcArr) return\n\n const destParent = this._getComponentFromElement(destContainer)\n if (!destParent) return\n\n srcArr.arr.splice(srcArr.index, 1)\n const destArr = destParent[srcArr.key]\n if (Array.isArray(destArr)) {\n destArr.splice(destination.index, 0, draggedComp)\n }\n\n // Update the parent component pointer on the raw instance (symbol-keyed, not string prop).\n rawDragged[GEA_PARENT_COMPONENT] = destParent\n }\n\n private _findCompiledArray(parent: any, child: any): { key: symbol; arr: any[]; index: number } | null {\n // Component array lists are stored under geaListItemsSymbol(arrayPropName) symbol keys.\n // Walk the symbol keys of the parent to find which list contains the child.\n for (const sym of Object.getOwnPropertySymbols(parent)) {\n const desc = sym.description ?? ''\n if (!desc.startsWith('gea.listItems.')) continue\n const arr = parent[sym]\n if (!Array.isArray(arr)) continue\n const idx = arr.indexOf(child)\n if (idx !== -1) return { key: sym, arr, index: idx }\n }\n return null\n }\n\n private _animateDrop(): Promise<void> {\n return new Promise((resolve) => {\n if (!this._sourceEl || !this._placeholder) return resolve()\n const phRect = this._placeholder.getBoundingClientRect()\n this._sourceEl.style.transition =\n 'transform 0.2s cubic-bezier(0.2, 0, 0, 1), rotate 0.2s cubic-bezier(0.2, 0, 0, 1), box-shadow 0.2s cubic-bezier(0.2, 0, 0, 1)'\n this._sourceEl.style.transform = `translate(${phRect.left}px, ${phRect.top}px)`\n this._sourceEl.style.rotate = '0deg'\n this._sourceEl.style.boxShadow = 'none'\n let done = false\n const finish = () => {\n if (done) return\n done = true\n resolve()\n }\n this._sourceEl.addEventListener('transitionend', finish, { once: true })\n setTimeout(finish, 250)\n })\n }\n\n private _animateReturn(): Promise<void> {\n return new Promise((resolve) => {\n if (!this._sourceEl || !this._sourceRect) return resolve()\n let targetX = this._sourceRect.left\n let targetY = this._sourceRect.top\n if (this._placeholder?.parentElement) {\n const phRect = this._placeholder.getBoundingClientRect()\n targetX = phRect.left\n targetY = phRect.top\n }\n this._sourceEl.style.transition =\n 'transform 0.2s cubic-bezier(0.2, 0, 0, 1), rotate 0.2s cubic-bezier(0.2, 0, 0, 1), box-shadow 0.2s cubic-bezier(0.2, 0, 0, 1)'\n this._sourceEl.style.transform = `translate(${targetX}px, ${targetY}px)`\n this._sourceEl.style.rotate = '0deg'\n this._sourceEl.style.boxShadow = 'none'\n let done = false\n const finish = () => {\n if (done) return\n done = true\n resolve()\n }\n this._sourceEl.addEventListener('transitionend', finish, { once: true })\n setTimeout(finish, 250)\n })\n }\n\n private _removeGlobalListeners() {\n document.removeEventListener('pointermove', this._boundMove)\n document.removeEventListener('pointerup', this._boundUp)\n document.removeEventListener('keydown', this._boundKeyDown)\n }\n\n private _cleanup() {\n if (this._cleanedUp) return\n this._cleanedUp = true\n\n this._placeholder?.remove()\n this._placeholder = null\n this._sourceEl = null\n this._sourceRect = null\n\n this._dragging = false\n this._started = false\n this._draggedId = ''\n this._currentDroppableId = null\n }\n\n destroy() {\n this._removeGlobalListeners()\n if (this._dragging) {\n if (this._sourceEl) this._returnToSource()\n this._cleanup()\n }\n if (this._docListenerAttached && typeof document !== 'undefined') {\n document.removeEventListener('pointerdown', this._boundDocDown, true)\n this._docListenerAttached = false\n }\n this.droppables.clear()\n this.onDragEnd = null\n }\n}\n\nexport const dndManager = new DndManager()\n"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  import { dndManager } from "./dnd-manager.mjs";
2
- import { Component, GEA_CTOR_TAG_NAME, GEA_ELEMENT } from "@geajs/core";
2
+ import { Component, GEA_ELEMENT, GEA_INSTANTIATE_CHILD_COMPONENTS, GEA_MOUNT_COMPILED_CHILD_COMPONENTS, GEA_ON_PROP_CHANGE, GEA_PATCH_NODE } from "@geajs/core";
3
3
  //#region src/components/drag-drop-context.tsx
4
4
  var DragDropContext = class extends Component {
5
5
  static {
6
- this[GEA_CTOR_TAG_NAME] = "drag-drop-context";
6
+ this.__geaTagName = "drag-drop-context";
7
7
  }
8
8
  created() {
9
9
  dndManager.onDragEnd = (result) => {
@@ -17,22 +17,29 @@ var DragDropContext = class extends Component {
17
17
  template(props) {
18
18
  return `<div id="${this.id}" class="${`gea-dnd-context ${props.class || ""}`.trim()}">${props.children}</div>`;
19
19
  }
20
- __onPropChange(key, value) {
20
+ [GEA_ON_PROP_CHANGE](key, value) {
21
21
  if (key === "class") {
22
22
  const __el = this[GEA_ELEMENT];
23
23
  this.props;
24
24
  const __boundValue = `gea-dnd-context ${value || ""}`;
25
25
  if (__el) {
26
- const __newClass = (__boundValue != null ? String(__boundValue) : "").trim();
26
+ const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
27
27
  if (__el.className !== __newClass) __el.className = __newClass;
28
28
  }
29
29
  }
30
30
  if (key === "children") {
31
31
  const __el = this[GEA_ELEMENT];
32
- if (__el && __el.innerHTML !== value) {
33
- __el.innerHTML = value;
34
- this.instantiateChildComponents_();
35
- if (this.parentComponent) this.parentComponent.mountCompiledChildComponents_();
32
+ if (__el) {
33
+ const __tw = document.createElement("template");
34
+ __tw.innerHTML = value;
35
+ const __newEl = __tw.content.firstElementChild;
36
+ const __existEl = __el.firstElementChild;
37
+ if (__newEl && __existEl && __tw.content.childNodes.length === 1) this.constructor[GEA_PATCH_NODE](__existEl, __newEl, true);
38
+ else if (__el.innerHTML !== value) {
39
+ __el.innerHTML = value;
40
+ this[GEA_INSTANTIATE_CHILD_COMPONENTS]();
41
+ if (this.parentComponent) this.parentComponent[GEA_MOUNT_COMPILED_CHILD_COMPONENTS]();
42
+ }
36
43
  }
37
44
  }
38
45
  }
@@ -1 +1 @@
1
- {"version":3,"file":"drag-drop-context.mjs","names":["Component","GEA_RENDERED","GEA_ELEMENT","GEA_MAPS","GEA_CONDS","GEA_RESET_ELS","GEA_OBSERVE","GEA_OBSERVE_LIST","GEA_EL","GEA_UPDATE_TEXT","GEA_REQUEST_RENDER","GEA_UPDATE_PROPS","GEA_SYNC_MAP","GEA_REGISTER_MAP","GEA_PATCH_COND","GEA_REGISTER_COND","GEA_REFRESH_LIST","GEA_RECONCILE_LIST","GEA_ENSURE_ARRAY_CONFIGS","GEA_APPLY_LIST_CHANGES","GEA_SWAP_CHILD","GEA_SWAP_STATE_CHILDREN","GEA_CHILD","GEA_LIST_CONFIG_REFRESHING","GEA_DOM_KEY","GEA_DOM_ITEM","GEA_DOM_PROPS","GEA_MAP_CONFIG_TPL","GEA_MAP_CONFIG_PREV","GEA_MAP_CONFIG_COUNT","geaCondPatchedSymbol","geaCondValueSymbol","geaObservePrevSymbol","geaPrevGuardSymbol","GEA_SETUP_LOCAL_STATE_OBSERVERS","geaSanitizeAttr","geaEscapeHtml","GEA_CTOR_TAG_NAME","dndManager","DragResult","DragDropContext","created","onDragEnd","result","props","dispose","destroy","template","__id","id","class","trim","children","__onPropChange","key","value","__el","__boundValue","__newClass","String","className","innerHTML","instantiateChildComponents_","parentComponent","mountCompiledChildComponents_"],"sources":["../src/components/drag-drop-context.tsx"],"sourcesContent":["import { Component } from '@geajs/core'\nimport { dndManager } from './dnd-manager'\nimport type { DragResult } from './dnd-manager'\n\nexport default class DragDropContext extends Component {\n created() {\n dndManager.onDragEnd = (result: DragResult) => {\n ;(this.props as any).onDragEnd?.(result)\n }\n }\n\n dispose() {\n dndManager.destroy()\n super.dispose()\n }\n\n template(props: any) {\n return <div class={`gea-dnd-context ${props.class || ''}`}>{props.children}</div>\n }\n}\n"],"mappings":";;;AAIA,IAAqBwC,kBAArB,cAA6CxC,UAAU;;OAAAqC,qBAAA;;CACrDI,UAAU;AACRH,aAAWI,aAAaC,WAAuB;AAC3C,QAAKC,MAAcF,YAAYC,OAAO;;;CAI5CE,UAAU;AACRP,aAAWQ,SAAS;AACpB,QAAMD,SAAS;;CAGjBE,SAASH,OAAY;AACnB,SAAA,YADmB,KAAAK,GACnB,WAAmB,mBAAmBL,MAAMM,SAAS,KAAIC,MAAA,CAAA,IAAGP,MAAMQ,SAAQ;;CAhB9EC,eAAsBC,KAAKC,OAAK;AAAA,MAAAD,QAAA,SAAA;GAAA,MAAAE,OAAA,KAAAtD;AAeX,QAAA0C;GAAA,MAAAa,eAAA,mBAAAF,SACoC;AAAE,OAAAC,MAAA;IAAA,MAAAE,cAAAD,gBAAA,OAAAE,OAAAF,aAAA,GAAA,IAAAN,MAAA;AAAA,QAAAK,KAAAI,cAAAF,WAAAF,MAAAI,YAAAF;;;AAAA,MAAAJ,QAAA,YAAA;GAAA,MAAAE,OAAA,KAAAtD;AAAA,OAAAsD,QAAAA,KAAAK,cAAAN,OAAA;AAAAC,SAAAK,YAAAN;AAAA,SAAAO,6BAAA;AAAA,QAAA,KAAAC,gBAAA,MAAAA,gBAAAC,+BAAA"}
1
+ {"version":3,"file":"drag-drop-context.mjs","names":["Component","GEA_ON_PROP_CHANGE","GEA_ELEMENT","GEA_PATCH_NODE","GEA_INSTANTIATE_CHILD_COMPONENTS","GEA_MOUNT_COMPILED_CHILD_COMPONENTS","dndManager","DragResult","DragDropContext","__geaTagName","created","onDragEnd","result","props","dispose","destroy","template","__id","id","class","trim","children","key","value","__el","__boundValue","__newClass","String","replace","className","__tw","document","createElement","innerHTML","__newEl","content","firstElementChild","__existEl","childNodes","length","constructor","parentComponent"],"sources":["../src/components/drag-drop-context.tsx"],"sourcesContent":["import { Component } from '@geajs/core'\nimport { dndManager } from './dnd-manager'\nimport type { DragResult } from './dnd-manager'\n\nexport default class DragDropContext extends Component {\n created() {\n dndManager.onDragEnd = (result: DragResult) => {\n ;(this.props as any).onDragEnd?.(result)\n }\n }\n\n dispose() {\n dndManager.destroy()\n super.dispose()\n }\n\n template(props: any) {\n return <div class={`gea-dnd-context ${props.class || ''}`}>{props.children}</div>\n }\n}\n"],"mappings":";;;AAIA,IAAqBQ,kBAArB,cAA6CR,UAAU;;sBAAA;;CACrDU,UAAU;AACRJ,aAAWK,aAAaC,WAAuB;AAC3C,QAAKC,MAAcF,YAAYC,OAAO;;;CAI5CE,UAAU;AACRR,aAAWS,SAAS;AACpB,QAAMD,SAAS;;CAGjBE,SAASH,OAAY;AACnB,SAAA,YADmB,KAAAK,GACnB,WAAmB,mBAAmBL,MAAMM,SAAS,KAAIC,MAAA,CAAA,IAAGP,MAAMQ,SAAQ;;CAhB9E,CAAApB,oBAAwBqB,KAAKC,OAAK;AAAA,MAAAD,QAAA,SAAA;GAAA,MAAAE,OAAA,KAAAtB;AAeb,QAAAW;GAAA,MAAAY,eACE,mBAAmBF,SAAe;AAAI,OAAAC,MAhB7D;IACM,MAAME,aADXC,OAAOF,gBAAyB,GAAG,CAAEL,MAAM,CAACQ,QAAQ,QAAQ,IACf;AACxC,QAAIJ,KAAsBK,cAAcH,WAAYF,MAAsBK,YAAYH;;;AACvF,MAAAJ,QAAA,YAAA;GAAA,MAAAE,OAAA,KAAAtB;AAAA,OAAAsB,MAHL;IACI,MAAMM,OAAOC,SAASC,cAAc,WAAW;AAC/CF,SAAKG,YAASV;IACd,MAAMW,UAAUJ,KAAKK,QAAQC;IAC7B,MAAMC,YAAYb,KAAsBY;AACxC,QAAIF,WAAWG,aAAaP,KAAKK,QAAQG,WAAWC,WAAW,EAC7D,MAAKC,YAAWrC,gBAAwBkC,WAAWH,SAAS,KAAK;aACxDV,KAAsBS,cAASV,OAA4B;AACpEC,UAAsBS,YAASV;AAC/B,UAAInB,mCAAyB;AAC7B,SAAI,KAAKqC,gBAAiB,MAAKA,gBAAepC,sCAAyB"}
@@ -1,5 +1,5 @@
1
1
  import { dndManager } from "./dnd-manager.mjs";
2
- import { Component, GEA_CTOR_TAG_NAME, GEA_ELEMENT } from "@geajs/core";
2
+ import { Component, GEA_ELEMENT, GEA_INSTANTIATE_CHILD_COMPONENTS, GEA_MOUNT_COMPILED_CHILD_COMPONENTS, GEA_ON_PROP_CHANGE, GEA_PATCH_NODE } from "@geajs/core";
3
3
  //#region src/components/draggable.tsx
4
4
  var Draggable = class extends Component {
5
5
  constructor(..._args) {
@@ -7,7 +7,7 @@ var Draggable = class extends Component {
7
7
  this._didDrag = false;
8
8
  }
9
9
  static {
10
- this[GEA_CTOR_TAG_NAME] = "draggable";
10
+ this.__geaTagName = "gea-draggable";
11
11
  }
12
12
  _onPointerDown(e) {
13
13
  const el = e.currentTarget.closest(".gea-draggable");
@@ -16,52 +16,72 @@ var Draggable = class extends Component {
16
16
  dndManager.startTracking(e, this.props.draggableId, el);
17
17
  }
18
18
  template(props) {
19
- return `<div id="${this.id}" class="${`gea-draggable ${props.class || ""}`.trim()}"${props.draggableId == null || props.draggableId === false ? "" : ` data-draggable-id="${props.draggableId}"`}${props.index == null || props.index === false ? "" : ` data-index="${props.index}"`}${` pointerdown="${(e) => this._onPointerDown(e)}"`}>${props.children}</div>`;
19
+ return `<div id="${this.id}" class="${`gea-draggable ${props.class || ""}`.trim()}"${props.draggableId == null || props.draggableId === false ? "" : ` data-draggable-id="${props.draggableId}"`}${props.index == null || props.index === false ? "" : ` data-index="${props.index}"`}>${props.children}</div>`;
20
20
  }
21
21
  get events() {
22
22
  if (this.__evts && this[GEA_ELEMENT]) return this.__evts;
23
- const __geaEvtsResult = { click: { [`#${this.id}`]: (e, targetComponent) => this.__event_click_0(e, targetComponent) } };
23
+ const __id = this.id;
24
+ const __geaEvtsResult = {
25
+ pointerdown: { [`#${__id}`]: this.__event_pointerdown_0 },
26
+ click: { [`#${__id}`]: this.__event_click_1 }
27
+ };
24
28
  if (this[GEA_ELEMENT]) this.__evts = __geaEvtsResult;
25
29
  return __geaEvtsResult;
26
30
  }
27
- __event_click_0(e, targetComponent) {
31
+ __event_pointerdown_0(e, targetComponent) {
32
+ this._onPointerDown(e);
33
+ }
34
+ __event_click_1(e, targetComponent) {
28
35
  if (dndManager.isDragging) {
29
36
  e.preventDefault();
30
37
  e.stopPropagation();
31
38
  }
32
39
  }
33
- __onPropChange(key, value) {
40
+ [GEA_ON_PROP_CHANGE](key, value) {
34
41
  if (key === "class") {
35
42
  const __el = this[GEA_ELEMENT];
36
43
  this.props;
37
44
  const __boundValue = `gea-draggable ${value || ""}`;
38
45
  if (__el) {
39
- const __newClass = (__boundValue != null ? String(__boundValue) : "").trim();
46
+ const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
40
47
  if (__el.className !== __newClass) __el.className = __newClass;
41
48
  }
42
49
  }
43
50
  if (key === "draggableId") {
44
51
  const __el = this[GEA_ELEMENT];
45
- if (__el) if (value === null || value === void 0) __el.removeAttribute("data-draggable-id");
46
- else {
47
- const __newAttr = String(value);
48
- if (__el.getAttribute("data-draggable-id") !== __newAttr) __el.setAttribute("data-draggable-id", __newAttr);
52
+ if (__el) {
53
+ var __av = value;
54
+ if (__av == null || __av === false) __el.removeAttribute("data-draggable-id");
55
+ else {
56
+ const __newAttr = String(__av);
57
+ if (__el.getAttribute("data-draggable-id") !== __newAttr) __el.setAttribute("data-draggable-id", __newAttr);
58
+ }
49
59
  }
50
60
  }
51
61
  if (key === "index") {
52
62
  const __el = this[GEA_ELEMENT];
53
- if (__el) if (value === null || value === void 0) __el.removeAttribute("data-index");
54
- else {
55
- const __newAttr = String(value);
56
- if (__el.getAttribute("data-index") !== __newAttr) __el.setAttribute("data-index", __newAttr);
63
+ if (__el) {
64
+ var __av = value;
65
+ if (__av == null || __av === false) __el.removeAttribute("data-index");
66
+ else {
67
+ const __newAttr = String(__av);
68
+ if (__el.getAttribute("data-index") !== __newAttr) __el.setAttribute("data-index", __newAttr);
69
+ }
57
70
  }
58
71
  }
59
72
  if (key === "children") {
60
73
  const __el = this[GEA_ELEMENT];
61
- if (__el && __el.innerHTML !== value) {
62
- __el.innerHTML = value;
63
- this.instantiateChildComponents_();
64
- if (this.parentComponent) this.parentComponent.mountCompiledChildComponents_();
74
+ if (__el) {
75
+ const __tw = document.createElement("template");
76
+ __tw.innerHTML = value;
77
+ const __newEl = __tw.content.firstElementChild;
78
+ const __existEl = __el.firstElementChild;
79
+ if (__newEl && __existEl && __tw.content.childNodes.length === 1) this.constructor[GEA_PATCH_NODE](__existEl, __newEl, true);
80
+ else if (__el.innerHTML !== value) {
81
+ __el.innerHTML = value;
82
+ this[GEA_INSTANTIATE_CHILD_COMPONENTS]();
83
+ if (this.parentComponent) this.parentComponent[GEA_MOUNT_COMPILED_CHILD_COMPONENTS]();
84
+ }
65
85
  }
66
86
  }
67
87
  }
@@ -1 +1 @@
1
- {"version":3,"file":"draggable.mjs","names":["Component","GEA_RENDERED","GEA_ELEMENT","GEA_MAPS","GEA_CONDS","GEA_RESET_ELS","GEA_OBSERVE","GEA_OBSERVE_LIST","GEA_EL","GEA_UPDATE_TEXT","GEA_REQUEST_RENDER","GEA_UPDATE_PROPS","GEA_SYNC_MAP","GEA_REGISTER_MAP","GEA_PATCH_COND","GEA_REGISTER_COND","GEA_REFRESH_LIST","GEA_RECONCILE_LIST","GEA_ENSURE_ARRAY_CONFIGS","GEA_APPLY_LIST_CHANGES","GEA_SWAP_CHILD","GEA_SWAP_STATE_CHILDREN","GEA_CHILD","GEA_LIST_CONFIG_REFRESHING","GEA_DOM_KEY","GEA_DOM_ITEM","GEA_DOM_PROPS","GEA_MAP_CONFIG_TPL","GEA_MAP_CONFIG_PREV","GEA_MAP_CONFIG_COUNT","geaCondPatchedSymbol","geaCondValueSymbol","geaObservePrevSymbol","geaPrevGuardSymbol","GEA_SETUP_LOCAL_STATE_OBSERVERS","geaSanitizeAttr","geaEscapeHtml","GEA_CTOR_TAG_NAME","dndManager","Draggable","_didDrag","_onPointerDown","e","PointerEvent","el","currentTarget","HTMLElement","closest","startTracking","props","draggableId","template","__id","id","class","trim","index","children","events","__evts","__geaEvtsResult","click","targetComponent","__event_click_0","isDragging","preventDefault","stopPropagation","__onPropChange","key","value","__el","__boundValue","__newClass","String","className","undefined","removeAttribute","__newAttr","getAttribute","setAttribute","innerHTML","instantiateChildComponents_","parentComponent","mountCompiledChildComponents_"],"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,IAAqBuC,YAArB,cAAuCvC,UAAU;;;kBACpC;;;OADoCqC,qBAAA;;CAG/CI,eAAeC,GAAiB;EAC9B,MAAME,KAAMF,EAAEG,cAA8BE,QAAQ,iBAAiB;AACrE,MAAI,CAACH,GAAI;AACT,OAAKJ,WAAW;AAChBF,aAAWU,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,KACiC,kBAA1Cd,MAAoB,KAAKD,eAAeC,EAAE,CAAA,GAAA,GAQvDO,MAAMQ,SAAQ;;CAGpB,IAAAC,SAAA;AAAA,MAAA,KAAAC,UAAA,KAAAzD,aAAA,QAAA,KAAAyD;EAAA,MAAAC,kBAAA,EAAAC,OAAA,GAAA,IAAA,KAAAR,QAAAX,GAAAoB,oBAAA,KAAAC,gBAAArB,GAAAoB,gBAAA,EAAA,EAAA;AAAA,MAAA,KAAA5D,aAAA,MAAAyD,SAAAC;AAAA,SAAAA;;CA7BHG,gBAAsBrB,GAAGoB,iBAAiB;AAAA,MAoB5BxB,WAAW0B,YAAU;AACvBtB,KAAEuB,gBAAc;AAChBvB,KAAEwB,iBAAe;;;CAtB7BC,eAAsBC,KAAKC,OAAK;AAAA,MAAAD,QAAA,SAAA;GAAA,MAAAE,OAAA,KAAApE;AAYX,QAAA+C;GAAA,MAAAsB,eAAA,iBAAAF,SAG0B;AAAE,OAAAC,MAAA;IAAA,MAAAE,cAAAD,gBAAA,OAAAE,OAAAF,aAAA,GAAA,IAAAhB,MAAA;AAAA,QAAAe,KAAAI,cAAAF,WAAAF,MAAAI,YAAAF;;;AAAA,MAAAJ,QAAA,eAAA;GAAA,MAAAE,OAAA,KAAApE;AAAA,OAAAoE,KAAA,KAAAD,UAAA,QAAAA,UAAAM,KAAAA,EAAAL,MAAAM,gBAAA,oBAAA;QAAA;IAAA,MAAAC,YAAAJ,OAAAJ,MAAA;AAAA,QAAAC,KAAAQ,aAAA,oBAAA,KAAAD,UAAAP,MAAAS,aAAA,qBAAAF,UAAA;;;AAAA,MAAAT,QAAA,SAAA;GAAA,MAAAE,OAAA,KAAApE;AAAA,OAAAoE,KAAA,KAAAD,UAAA,QAAAA,UAAAM,KAAAA,EAAAL,MAAAM,gBAAA,aAAA;QAAA;IAAA,MAAAC,YAAAJ,OAAAJ,MAAA;AAAA,QAAAC,KAAAQ,aAAA,aAAA,KAAAD,UAAAP,MAAAS,aAAA,cAAAF,UAAA;;;AAAA,MAAAT,QAAA,YAAA;GAAA,MAAAE,OAAA,KAAApE;AAAA,OAAAoE,QAAAA,KAAAU,cAAAX,OAAA;AAAAC,SAAAU,YAAAX;AAAA,SAAAY,6BAAA;AAAA,QAAA,KAAAC,gBAAA,MAAAA,gBAAAC,+BAAA"}
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"}
@@ -1,5 +1,5 @@
1
1
  import { dndManager } from "./dnd-manager.mjs";
2
- import { Component, GEA_CTOR_TAG_NAME, GEA_ELEMENT } from "@geajs/core";
2
+ import { Component, GEA_ELEMENT, GEA_INSTANTIATE_CHILD_COMPONENTS, GEA_MOUNT_COMPILED_CHILD_COMPONENTS, GEA_ON_PROP_CHANGE, GEA_PATCH_NODE } from "@geajs/core";
3
3
  //#region src/components/droppable.tsx
4
4
  var Droppable = class extends Component {
5
5
  constructor(..._args) {
@@ -7,7 +7,7 @@ var Droppable = class extends Component {
7
7
  this._registered = false;
8
8
  }
9
9
  static {
10
- this[GEA_CTOR_TAG_NAME] = "droppable";
10
+ this.__geaTagName = "gea-droppable";
11
11
  }
12
12
  _registerWithManager() {
13
13
  const el = this.el?.querySelector("[data-droppable-id]");
@@ -32,30 +32,40 @@ var Droppable = class extends Component {
32
32
  template(props) {
33
33
  return `<div id="${this.id}" class="${`gea-droppable ${props.class || ""}`.trim()}"${props.droppableId == null || props.droppableId === false ? "" : ` data-droppable-id="${props.droppableId}"`}>${props.children}</div>`;
34
34
  }
35
- __onPropChange(key, value) {
35
+ [GEA_ON_PROP_CHANGE](key, value) {
36
36
  if (key === "class") {
37
37
  const __el = this[GEA_ELEMENT];
38
38
  this.props;
39
39
  const __boundValue = `gea-droppable ${value || ""}`;
40
40
  if (__el) {
41
- const __newClass = (__boundValue != null ? String(__boundValue) : "").trim();
41
+ const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
42
42
  if (__el.className !== __newClass) __el.className = __newClass;
43
43
  }
44
44
  }
45
45
  if (key === "droppableId") {
46
46
  const __el = this[GEA_ELEMENT];
47
- if (__el) if (value === null || value === void 0) __el.removeAttribute("data-droppable-id");
48
- else {
49
- const __newAttr = String(value);
50
- if (__el.getAttribute("data-droppable-id") !== __newAttr) __el.setAttribute("data-droppable-id", __newAttr);
47
+ if (__el) {
48
+ var __av = value;
49
+ if (__av == null || __av === false) __el.removeAttribute("data-droppable-id");
50
+ else {
51
+ const __newAttr = String(__av);
52
+ if (__el.getAttribute("data-droppable-id") !== __newAttr) __el.setAttribute("data-droppable-id", __newAttr);
53
+ }
51
54
  }
52
55
  }
53
56
  if (key === "children") {
54
57
  const __el = this[GEA_ELEMENT];
55
- if (__el && __el.innerHTML !== value) {
56
- __el.innerHTML = value;
57
- this.instantiateChildComponents_();
58
- if (this.parentComponent) this.parentComponent.mountCompiledChildComponents_();
58
+ if (__el) {
59
+ const __tw = document.createElement("template");
60
+ __tw.innerHTML = value;
61
+ const __newEl = __tw.content.firstElementChild;
62
+ const __existEl = __el.firstElementChild;
63
+ if (__newEl && __existEl && __tw.content.childNodes.length === 1) this.constructor[GEA_PATCH_NODE](__existEl, __newEl, true);
64
+ else if (__el.innerHTML !== value) {
65
+ __el.innerHTML = value;
66
+ this[GEA_INSTANTIATE_CHILD_COMPONENTS]();
67
+ if (this.parentComponent) this.parentComponent[GEA_MOUNT_COMPILED_CHILD_COMPONENTS]();
68
+ }
59
69
  }
60
70
  }
61
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"droppable.mjs","names":["Component","GEA_RENDERED","GEA_ELEMENT","GEA_MAPS","GEA_CONDS","GEA_RESET_ELS","GEA_OBSERVE","GEA_OBSERVE_LIST","GEA_EL","GEA_UPDATE_TEXT","GEA_REQUEST_RENDER","GEA_UPDATE_PROPS","GEA_SYNC_MAP","GEA_REGISTER_MAP","GEA_PATCH_COND","GEA_REGISTER_COND","GEA_REFRESH_LIST","GEA_RECONCILE_LIST","GEA_ENSURE_ARRAY_CONFIGS","GEA_APPLY_LIST_CHANGES","GEA_SWAP_CHILD","GEA_SWAP_STATE_CHILDREN","GEA_CHILD","GEA_LIST_CONFIG_REFRESHING","GEA_DOM_KEY","GEA_DOM_ITEM","GEA_DOM_PROPS","GEA_MAP_CONFIG_TPL","GEA_MAP_CONFIG_PREV","GEA_MAP_CONFIG_COUNT","geaCondPatchedSymbol","geaCondValueSymbol","geaObservePrevSymbol","geaPrevGuardSymbol","GEA_SETUP_LOCAL_STATE_OBSERVERS","geaSanitizeAttr","geaEscapeHtml","GEA_CTOR_TAG_NAME","dndManager","Droppable","_registered","_registerWithManager","el","querySelector","HTMLElement","registerDroppable","props","droppableId","created","queueMicrotask","onAfterRender","dispose","unregisterDroppable","template","__id","id","class","trim","children","__onPropChange","key","value","__el","__boundValue","__newClass","String","className","undefined","removeAttribute","__newAttr","getAttribute","setAttribute","innerHTML","instantiateChildComponents_","parentComponent","mountCompiledChildComponents_"],"sources":["../src/components/droppable.tsx"],"sourcesContent":["import { Component } from '@geajs/core'\nimport { dndManager } from './dnd-manager'\n\nexport default class Droppable extends Component {\n private _registered = false\n\n _registerWithManager() {\n const el = this.el?.querySelector('[data-droppable-id]') as HTMLElement\n if (el && !this._registered) {\n dndManager.registerDroppable(this.props.droppableId as string, el)\n this._registered = true\n }\n }\n\n created() {\n queueMicrotask(() => this._registerWithManager())\n }\n\n onAfterRender() {\n this._registerWithManager()\n }\n\n dispose() {\n if (this._registered) {\n dndManager.unregisterDroppable(this.props.droppableId as string)\n this._registered = false\n }\n super.dispose()\n }\n\n template(props: any) {\n return (\n <div class={`gea-droppable ${props.class || ''}`} data-droppable-id={props.droppableId}>\n {props.children}\n </div>\n )\n }\n}\n"],"mappings":";;;AAGA,IAAqBuC,YAArB,cAAuCvC,UAAU;;;qBACzB;;;OADyBqC,qBAAA;;CAG/CI,uBAAuB;EACrB,MAAMC,KAAK,KAAKA,IAAIC,cAAc,sBAAsB;AACxD,MAAID,MAAM,CAAC,KAAKF,aAAa;AAC3BF,cAAWO,kBAAkB,KAAKC,MAAMC,aAAuBL,GAAG;AAClE,QAAKF,cAAc;;;CAIvBQ,UAAU;AACRC,uBAAqB,KAAKR,sBAAsB,CAAC;;CAGnDS,gBAAgB;AACd,OAAKT,sBAAsB;;CAG7BU,UAAU;AACR,MAAI,KAAKX,aAAa;AACpBF,cAAWc,oBAAoB,KAAKN,MAAMC,YAAsB;AAChE,QAAKP,cAAc;;AAErB,QAAMW,SAAS;;CAGjBE,SAASP,OAAY;AACnB,SAAA,YADmB,KAAAS,GACnB,WACc,iBAAiBT,MAAMU,SAAS,KAAIC,MAAA,CAAA,GAAqBX,MAAMC,eAAW,QAAjBD,MAAMC,gBAAW,QAAA,KAAA,uBAAjBD,MAAMC,YAAW,GAAA,GACnFD,MAAMY,SAAQ;;CAhCvBC,eAAsBC,KAAKC,OAAK;AAAA,MAAAD,QAAA,SAAA;GAAA,MAAAE,OAAA,KAAA5D;AA6BX,QAAA4C;GAAA,MAAAiB,eAAA,iBAAAF,SAE6B;AAAE,OAAAC,MAAA;IAAA,MAAAE,cAAAD,gBAAA,OAAAE,OAAAF,aAAA,GAAA,IAAAN,MAAA;AAAA,QAAAK,KAAAI,cAAAF,WAAAF,MAAAI,YAAAF;;;AAAA,MAAAJ,QAAA,eAAA;GAAA,MAAAE,OAAA,KAAA5D;AAAA,OAAA4D,KAAA,KAAAD,UAAA,QAAAA,UAAAM,KAAAA,EAAAL,MAAAM,gBAAA,oBAAA;QAAA;IAAA,MAAAC,YAAAJ,OAAAJ,MAAA;AAAA,QAAAC,KAAAQ,aAAA,oBAAA,KAAAD,UAAAP,MAAAS,aAAA,qBAAAF,UAAA;;;AAAA,MAAAT,QAAA,YAAA;GAAA,MAAAE,OAAA,KAAA5D;AAAA,OAAA4D,QAAAA,KAAAU,cAAAX,OAAA;AAAAC,SAAAU,YAAAX;AAAA,SAAAY,6BAAA;AAAA,QAAA,KAAAC,gBAAA,MAAAA,gBAAAC,+BAAA"}
1
+ {"version":3,"file":"droppable.mjs","names":["Component","GEA_ON_PROP_CHANGE","GEA_ELEMENT","GEA_PATCH_NODE","GEA_INSTANTIATE_CHILD_COMPONENTS","GEA_MOUNT_COMPILED_CHILD_COMPONENTS","dndManager","Droppable","__geaTagName","_registered","_registerWithManager","el","querySelector","HTMLElement","registerDroppable","props","droppableId","created","queueMicrotask","onAfterRender","dispose","unregisterDroppable","template","__id","id","class","trim","children","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/droppable.tsx"],"sourcesContent":["import { Component } from '@geajs/core'\nimport { dndManager } from './dnd-manager'\n\nexport default class Droppable extends Component {\n private _registered = false\n\n _registerWithManager() {\n const el = this.el?.querySelector('[data-droppable-id]') as HTMLElement\n if (el && !this._registered) {\n dndManager.registerDroppable(this.props.droppableId as string, el)\n this._registered = true\n }\n }\n\n created() {\n queueMicrotask(() => this._registerWithManager())\n }\n\n onAfterRender() {\n this._registerWithManager()\n }\n\n dispose() {\n if (this._registered) {\n dndManager.unregisterDroppable(this.props.droppableId as string)\n this._registered = false\n }\n super.dispose()\n }\n\n template(props: any) {\n return (\n <div class={`gea-droppable ${props.class || ''}`} data-droppable-id={props.droppableId}>\n {props.children}\n </div>\n )\n }\n}\n"],"mappings":";;;AAGA,IAAqBO,YAArB,cAAuCP,UAAU;;;qBACzB;;;sBADyB;;CAG/CU,uBAAuB;EACrB,MAAMC,KAAK,KAAKA,IAAIC,cAAc,sBAAsB;AACxD,MAAID,MAAM,CAAC,KAAKF,aAAa;AAC3BH,cAAWQ,kBAAkB,KAAKC,MAAMC,aAAuBL,GAAG;AAClE,QAAKF,cAAc;;;CAIvBQ,UAAU;AACRC,uBAAqB,KAAKR,sBAAsB,CAAC;;CAGnDS,gBAAgB;AACd,OAAKT,sBAAsB;;CAG7BU,UAAU;AACR,MAAI,KAAKX,aAAa;AACpBH,cAAWe,oBAAoB,KAAKN,MAAMC,YAAsB;AAChE,QAAKP,cAAc;;AAErB,QAAMW,SAAS;;CAGjBE,SAASP,OAAY;AACnB,SAAA,YADmB,KAAAS,GACnB,WACc,iBAAiBT,MAAMU,SAAS,KAAIC,MAAA,CAAA,GAAqBX,MAAMC,eAAW,QAAjBD,MAAMC,gBAAW,QAAA,KAAA,uBAAjBD,MAAMC,YAAW,GAAA,GACnFD,MAAMY,SAAQ;;CAhCvB,CAAA1B,oBAAwB2B,KAAKC,OAAK;AAAA,MAAAD,QAAA,SAAA;GAAA,MAAAE,OAAA,KAAA5B;AA6Bb,QAAAa;GAAA,MAAAgB,eAEH,iBAAiBF,SAAe;AAAI,OAAAC,MA/BtD;IACM,MAAME,aADXC,OAAOF,gBAAyB,GAAG,CAAEL,MAAM,CAACQ,QAAQ,QAAQ,IACf;AACxC,QAAIJ,KAAsBK,cAAcH,WAAYF,MAAsBK,YAAYH;;;AACvF,MAAAJ,QAAA,eAAA;GAAA,MAAAE,OAAA,KAAA5B;AAAA,OAAA4B,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,YAAA;GAAA,MAAAE,OAAA,KAAA5B;AAAA,OAAA4B,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,YAAWhD,gBAAwB6C,WAAWH,SAAS,KAAK;aACxDf,KAAsBc,cAASf,OAA4B;AACpEC,UAAsBc,YAASf;AAC/B,UAAIzB,mCAAyB;AAC7B,SAAI,KAAKgD,gBAAiB,MAAKA,gBAAe/C,sCAAyB"}
@@ -1,11 +1,11 @@
1
1
  import { t as ZagComponent } from "./zag-component.mjs";
2
- import { Component, GEA_APPLY_LIST_CHANGES, GEA_CTOR_TAG_NAME, GEA_DOM_ITEM, GEA_DOM_KEY, GEA_ELEMENT, GEA_ENSURE_ARRAY_CONFIGS, GEA_MAP_CONFIG_TPL, GEA_OBSERVE, GEA_PATCH_COND, GEA_REGISTER_COND, GEA_RENDERED, GEA_SETUP_LOCAL_STATE_OBSERVERS, geaCondPatchedSymbol, geaCondValueSymbol, geaEscapeHtml } from "@geajs/core";
2
+ import { Component, GEA_APPLY_LIST_CHANGES, GEA_DOM_ITEM, GEA_DOM_KEY, GEA_ELEMENT, GEA_ENSURE_ARRAY_CONFIGS, GEA_OBSERVE, GEA_ON_PROP_CHANGE, GEA_PATCH_COND, GEA_REGISTER_COND, GEA_RENDERED, GEA_SETUP_LOCAL_STATE_OBSERVERS, GEA_STORE_ROOT, geaCondPatchedSymbol, geaCondValueSymbol, geaEscapeHtml } from "@geajs/core";
3
3
  import { normalizeProps } from "@zag-js/vanilla";
4
4
  import * as fileUpload from "@zag-js/file-upload";
5
5
  //#region src/components/file-upload.tsx
6
6
  var FileUpload = class extends ZagComponent {
7
7
  static {
8
- this[GEA_CTOR_TAG_NAME] = "file-upload";
8
+ this.__geaTagName = "file-upload";
9
9
  }
10
10
  #__rowEls_list;
11
11
  #__dc_acceptedFiles;
@@ -72,13 +72,13 @@ var FileUpload = class extends ZagComponent {
72
72
  Component._register(ZagComponent, "zag-component");
73
73
  return `<div id="${__id}" data-part="root"${(props.class || "") == null || (props.class || "") === false ? "" : ` class="${((props.class || "") != null ? String(props.class || "") : "").trim()}"`}><!--${__id + "-c0"}-->${props.label && `<label data-part="label" class="file-upload-label text-sm font-medium mb-2 block">${geaEscapeHtml(String(props.label))}</label>` || ""}<!--${__id + "-c0-end"}--><div data-part="dropzone" class="file-upload-dropzone flex flex-col items-center justify-center rounded-lg border-2 border-dashed border-muted-foreground/25 p-8 text-center hover:border-muted-foreground/50 transition-colors"><p class="text-sm text-muted-foreground mb-2">Drag and drop files here</p><button data-part="trigger" class="file-upload-trigger inline-flex h-9 items-center justify-center rounded-md bg-primary px-4 py-2 text-sm font-medium text-primary-foreground shadow hover:bg-primary/90">Choose Files</button></div><input data-part="hidden-input" type="file" class="sr-only" /><!--${__id + "-c1"}-->${this.acceptedFiles.length > 0 && `<div class="file-upload-file-list mt-3 space-y-1">${this.acceptedFiles.map((file) => this.renderAcceptedFilesItem(file)).join("")}<button data-part="clear-trigger" class="file-upload-clear text-xs text-muted-foreground hover:text-foreground mt-1">Clear all</button></div>` || ""}<!--${__id + "-c1-end"}--></div>`;
74
74
  }
75
- __onPropChange(key, value) {
75
+ [GEA_ON_PROP_CHANGE](key, value) {
76
76
  if (key === "class") {
77
77
  const __el = this[GEA_ELEMENT];
78
78
  this.props;
79
79
  const __boundValue = value || "";
80
80
  if (__el) {
81
- const __newClass = (__boundValue != null ? String(__boundValue) : "").trim();
81
+ const __newClass = String(__boundValue ?? "").trim().replace(/\s+/g, " ");
82
82
  if (__el.className !== __newClass) __el.className = __newClass;
83
83
  }
84
84
  }
@@ -87,9 +87,10 @@ var FileUpload = class extends ZagComponent {
87
87
  }
88
88
  __observe_local_acceptedFiles(value, change) {
89
89
  if (this[GEA_RENDERED]) {
90
- if (this[geaCondPatchedSymbol(1)]) return;
91
- this[geaCondPatchedSymbol(1)] = this[GEA_PATCH_COND](1);
92
- if (this[geaCondPatchedSymbol(1)]) queueMicrotask(() => this[geaCondPatchedSymbol(1)] = false);
90
+ if (!this[geaCondPatchedSymbol(1)]) {
91
+ this[geaCondPatchedSymbol(1)] = this[GEA_PATCH_COND](1);
92
+ if (this[geaCondPatchedSymbol(1)]) queueMicrotask(() => this[geaCondPatchedSymbol(1)] = false);
93
+ }
93
94
  }
94
95
  if (!this.__acceptedFiles_container) this.__acceptedFiles_container = this.$(":scope");
95
96
  if (!this.__acceptedFiles_container) return;
@@ -103,33 +104,33 @@ var FileUpload = class extends ZagComponent {
103
104
  }
104
105
  __observe_local_acceptedFiles__join(value, change) {
105
106
  if (this[GEA_RENDERED]) {
106
- if (this[geaCondPatchedSymbol(1)]) return;
107
- this[geaCondPatchedSymbol(1)] = this[GEA_PATCH_COND](1);
108
- if (this[geaCondPatchedSymbol(1)]) queueMicrotask(() => this[geaCondPatchedSymbol(1)] = false);
109
- if (this[geaCondPatchedSymbol(1)]) return;
107
+ if (!this[geaCondPatchedSymbol(1)]) {
108
+ this[geaCondPatchedSymbol(1)] = this[GEA_PATCH_COND](1);
109
+ if (this[geaCondPatchedSymbol(1)]) queueMicrotask(() => this[geaCondPatchedSymbol(1)] = false);
110
+ }
110
111
  }
111
112
  }
112
113
  renderAcceptedFilesItem(file) {
113
- return `<div data-gea-item-id="${file?.name ?? file}" class="flex items-center justify-between rounded-md border px-3 py-2 text-sm"><span>${file.name}</span></div>`;
114
+ return `<div data-gid="${file?.name ?? file}" class="flex items-center justify-between rounded-md border px-3 py-2 text-sm"><span>${file.name}</span></div>`;
114
115
  }
115
116
  createAcceptedFilesItem(item) {
116
117
  var __c = this.#__dc_acceptedFiles || (this.#__dc_acceptedFiles = this.__acceptedFiles_container);
117
- if (!__c[GEA_MAP_CONFIG_TPL]) try {
118
+ if (!__c.__geaTpl) try {
118
119
  var __tw = document.createElement("template");
119
120
  __tw.innerHTML = this.renderAcceptedFilesItem({ name: 0 });
120
- __c[GEA_MAP_CONFIG_TPL] = __tw.content.firstElementChild;
121
- __c[GEA_MAP_CONFIG_TPL]?.removeAttribute("data-gea-item-id");
121
+ __c.__geaTpl = __tw.content.firstElementChild;
122
+ __c.__geaTpl?.removeAttribute("data-gid");
122
123
  } catch (__err) {
123
124
  console.error(__err);
124
125
  }
125
- if (__c[GEA_MAP_CONFIG_TPL]) var el = __c[GEA_MAP_CONFIG_TPL].cloneNode(true);
126
+ if (__c.__geaTpl) var el = __c.__geaTpl.cloneNode(true);
126
127
  else {
127
128
  var __fw = document.createElement("template");
128
129
  __fw.innerHTML = this.renderAcceptedFilesItem(item);
129
130
  var el = __fw.content.firstElementChild;
130
131
  }
131
132
  el.__ref_0 = el.firstElementChild;
132
- el.__ref_0.firstChild.nodeValue = `${item.name}`;
133
+ if (el.__ref_0.textContent !== `${item.name}`) el.__ref_0.textContent = `${item.name}`;
133
134
  el[GEA_DOM_KEY] = String(item?.name ?? item);
134
135
  el[GEA_DOM_ITEM] = item;
135
136
  return el;
@@ -137,7 +138,7 @@ var FileUpload = class extends ZagComponent {
137
138
  patchAcceptedFilesItem(row, item, __prevItem) {
138
139
  if (!row) return;
139
140
  if (!row.__ref_0) row.__ref_0 = row.firstElementChild;
140
- row.__ref_0.firstChild.nodeValue = `${item.name}`;
141
+ if (row.__ref_0.textContent !== `${item.name}`) row.__ref_0.textContent = `${item.name}`;
141
142
  row[GEA_DOM_KEY] = String(item?.name ?? item);
142
143
  (this.#__rowEls_list || (this.#__rowEls_list = {}))[String(item?.name ?? item)] = row;
143
144
  row[GEA_DOM_ITEM] = item;
@@ -152,13 +153,15 @@ var FileUpload = class extends ZagComponent {
152
153
  propPatchers: { "name": [(row, value, item) => {
153
154
  const __target = row.__ref_0 || (row.__ref_0 = row.firstElementChild);
154
155
  if (!__target) return;
155
- __target.firstChild && (__target.firstChild.nodeValue = `${item.name}`) || (__target.textContent = `${item.name}`);
156
- }, (row, value) => row.classList.toggle("name", value)] }
156
+ if (__target.textContent !== `${item.name}`) __target.textContent = `${item.name}`;
157
+ }, (row, value) => {
158
+ row.classList.toggle("name", value);
159
+ }] }
157
160
  };
158
161
  }
159
162
  [GEA_SETUP_LOCAL_STATE_OBSERVERS]() {
160
163
  this[GEA_ENSURE_ARRAY_CONFIGS]();
161
- if (!this.__store) return;
164
+ if (!this[GEA_STORE_ROOT]) return;
162
165
  this[GEA_OBSERVE](this, ["acceptedFiles"], this.__observe_local_acceptedFiles);
163
166
  this[GEA_OBSERVE](this, ["acceptedFiles", "join"], this.__observe_local_acceptedFiles__join);
164
167
  this[GEA_OBSERVE](this, ["acceptedFiles", "map"], this.__observe_local_acceptedFiles__join);