@ixfx/components 0.9.2 → 0.9.4
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/bundle/index.d.ts +10 -6
- package/bundle/index.d.ts.map +1 -1
- package/bundle/index.js +45 -15
- package/bundle/index.js.map +1 -1
- package/dist/ac-text.d.ts +1 -1
- package/dist/{ac-token--_vCHXWw.d.ts → ac-token-TCLAZeVg.d.ts} +2 -2
- package/dist/{ac-token--_vCHXWw.d.ts.map → ac-token-TCLAZeVg.d.ts.map} +1 -1
- package/dist/ac-token.d.ts +1 -1
- package/dist/button.d.ts +1 -1
- package/dist/button.d.ts.map +1 -1
- package/dist/colour-picker.d.ts +1 -1
- package/dist/crumbs.d.ts +1 -1
- package/dist/{data-grid-C588pTgt.d.ts → data-grid-pp8WaKxG.d.ts} +2 -2
- package/dist/{data-grid-C588pTgt.d.ts.map → data-grid-pp8WaKxG.d.ts.map} +1 -1
- package/dist/data-grid.d.ts +1 -1
- package/dist/data-grid.js +1 -1
- package/dist/{detail-list-IKl76Wnp.d.ts → detail-list-DbYaz-YX.d.ts} +2 -2
- package/dist/{detail-list-IKl76Wnp.d.ts.map → detail-list-DbYaz-YX.d.ts.map} +1 -1
- package/dist/detail-list.d.ts +1 -1
- package/dist/detail-list.js +1 -1
- package/dist/{grid-list-DqHRR7kJ.js → grid-list-mL0GJTQR.js} +2 -2
- package/dist/{grid-list-DqHRR7kJ.js.map → grid-list-mL0GJTQR.js.map} +1 -1
- package/dist/grid-list.js +1 -1
- package/dist/{grouped-item-lister-fdZHVxFM.d.ts → grouped-item-lister-CEZ72VOs.d.ts} +2 -2
- package/dist/{grouped-item-lister-fdZHVxFM.d.ts.map → grouped-item-lister-CEZ72VOs.d.ts.map} +1 -1
- package/dist/grouped-item-lister.d.ts +1 -1
- package/dist/{icon-CDGprSdE.d.ts → icon-DR_3rSyZ.d.ts} +2 -2
- package/dist/icon-DR_3rSyZ.d.ts.map +1 -0
- package/dist/icons.d.ts +2 -2
- package/dist/{index-tq6f8007.d.ts → index-BOUaDIW-.d.ts} +2 -2
- package/dist/{index-tq6f8007.d.ts.map → index-BOUaDIW-.d.ts.map} +1 -1
- package/dist/{index-CoqtMSd9.d.ts → index-BUB5SICW.d.ts} +2 -2
- package/dist/{index-CoqtMSd9.d.ts.map → index-BUB5SICW.d.ts.map} +1 -1
- package/dist/{index-9AhaHIT2.d.ts → index-C59-JEPl.d.ts} +3 -3
- package/dist/{index-9AhaHIT2.d.ts.map → index-C59-JEPl.d.ts.map} +1 -1
- package/dist/{index-UvnoZUAo.d.ts → index-CJ5fshD3.d.ts} +2 -2
- package/dist/{index-UvnoZUAo.d.ts.map → index-CJ5fshD3.d.ts.map} +1 -1
- package/dist/{index-CS9yM8L-.d.ts → index-DsjpDksO.d.ts} +2 -2
- package/dist/{index-CS9yM8L-.d.ts.map → index-DsjpDksO.d.ts.map} +1 -1
- package/dist/index.d.ts +18 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +44 -14
- package/dist/index.js.map +1 -1
- package/dist/{labelled-input-base-DiTme1JO.d.ts → labelled-input-base-Dp_9KP0G.d.ts} +2 -2
- package/dist/{labelled-input-base-DiTme1JO.d.ts.map → labelled-input-base-Dp_9KP0G.d.ts.map} +1 -1
- package/dist/labelled-radial-input.d.ts +2 -2
- package/dist/labelled-radial-input.d.ts.map +1 -1
- package/dist/labelled-range-input.d.ts +1 -1
- package/dist/labelled-slider-input.d.ts +1 -1
- package/dist/{list-native-drag-controller-DaBNcjgG.js → list-native-drag-controller-B0hWdbtM.js} +5 -5
- package/dist/{list-native-drag-controller-DaBNcjgG.js.map → list-native-drag-controller-B0hWdbtM.js.map} +1 -1
- package/dist/{menu-item-CZi9vy5O.d.ts → menu-item-ZmkXNjek.d.ts} +2 -2
- package/dist/{menu-item-CZi9vy5O.d.ts.map → menu-item-ZmkXNjek.d.ts.map} +1 -1
- package/dist/menu.d.ts +2 -2
- package/dist/panel.d.ts +1 -1
- package/dist/{split-layout-JK3xWVX2.d.ts → split-layout-C5SYbDrq.d.ts} +2 -2
- package/dist/{split-layout-JK3xWVX2.d.ts.map → split-layout-C5SYbDrq.d.ts.map} +1 -1
- package/dist/split-layout.d.ts +1 -1
- package/dist/{tab-list-CGyPt07Z.d.ts → tab-list-DbMIL520.d.ts} +2 -2
- package/dist/{tab-list-CGyPt07Z.d.ts.map → tab-list-DbMIL520.d.ts.map} +1 -1
- package/dist/tabs.d.ts +1 -1
- package/dist/{titlebar-Tqu-VvMU.d.ts → titlebar-B5zSTZnF.d.ts} +2 -2
- package/dist/{titlebar-Tqu-VvMU.d.ts.map → titlebar-B5zSTZnF.d.ts.map} +1 -1
- package/dist/titlebar.d.ts +1 -1
- package/dist/{tree-CwifXCzR.js → tree-DAFBO_MF.js} +2 -2
- package/dist/{tree-CwifXCzR.js.map → tree-DAFBO_MF.js.map} +1 -1
- package/dist/tree.js +1 -1
- package/dist/vertical-list.js +1 -1
- package/docs-user/index.json +2 -2
- package/package.json +2 -2
- package/dist/icon-CDGprSdE.d.ts.map +0 -1
|
@@ -33,9 +33,9 @@ declare abstract class LabelledInputBase extends LitElement {
|
|
|
33
33
|
value: number;
|
|
34
34
|
}>) => void;
|
|
35
35
|
protected _syncValue(v: number): void;
|
|
36
|
-
protected _renderEditableNumber():
|
|
36
|
+
protected _renderEditableNumber(): import("lit").TemplateResult<1> | typeof nothing;
|
|
37
37
|
updated(changedProperties: Map<string, unknown>): void;
|
|
38
38
|
}
|
|
39
39
|
//#endregion
|
|
40
40
|
export { LabelledInputBase as t };
|
|
41
|
-
//# sourceMappingURL=labelled-input-base-
|
|
41
|
+
//# sourceMappingURL=labelled-input-base-Dp_9KP0G.d.ts.map
|
package/dist/{labelled-input-base-DiTme1JO.d.ts.map → labelled-input-base-Dp_9KP0G.d.ts.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"labelled-input-base-
|
|
1
|
+
{"version":3,"file":"labelled-input-base-Dp_9KP0G.d.ts","names":[],"sources":["../src/mixins/labelled-input-base.ts"],"mappings":";;uBAIsB,0BAA0B;EAClC;EAEgB;EACA;EACA;EACA;EACA;EAC+B;EAEI;EACC;EAEjB;YAE5B;YACA;YACA,cAAc;UAEzB;UACA;oBAEU;MAEd,cAAc;MAId,UAAU,SAAS;gBAIT;EAIL;EAMA;YAMC,cAAc,SAAS;YAcvB,sBAAuB,GAAG;IAAc;;YAWxC,qBAAsB,GAAG;IAAc;;YAavC,qBAAsB,GAAG;IAAc;;YAYvC,WAAW;YAYX,uCAAqB,2BAAA;EAuBtB,QAAQ,mBAAmB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as LabelledInputBase } from "./labelled-input-base-
|
|
1
|
+
import { t as LabelledInputBase } from "./labelled-input-base-Dp_9KP0G.js";
|
|
2
2
|
import { i as MarkerStyle, l as ValueMode } from "./radial-input-DU6t2hYO.js";
|
|
3
3
|
import { CSSResultGroup, nothing } from "lit";
|
|
4
4
|
//#region src/labelled-radial-input/labelled-radial-input.d.ts
|
|
@@ -19,7 +19,7 @@ declare class LabelledRadialInput extends LabelledInputBase {
|
|
|
19
19
|
private _isWide;
|
|
20
20
|
private _getEffectivePrecision;
|
|
21
21
|
protected _handleResize(entries: ResizeObserverEntry[]): void;
|
|
22
|
-
protected _renderEditableNumber():
|
|
22
|
+
protected _renderEditableNumber(): import("lit").TemplateResult<1> | typeof nothing;
|
|
23
23
|
render(): import("lit").TemplateResult<1>;
|
|
24
24
|
private _getTooltipValue;
|
|
25
25
|
static styles: CSSResultGroup;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"labelled-radial-input.d.ts","names":[],"sources":["../src/labelled-radial-input/labelled-radial-input.ts"],"mappings":";;;;cA0Da,4BAA4B;WAC9B;EAGA;EACA;EAEmB;EACA;EAC2B,aAAa;EACvC;EACwB,WAAW;EACnC;EACA;EAEoC;;EAGpC;UAEZ;UAIT;YAeW,cAAc,SAAS;YAMvB,
|
|
1
|
+
{"version":3,"file":"labelled-radial-input.d.ts","names":[],"sources":["../src/labelled-radial-input/labelled-radial-input.ts"],"mappings":";;;;cA0Da,4BAA4B;WAC9B;EAGA;EACA;EAEmB;EACA;EAC2B,aAAa;EACvC;EACwB,WAAW;EACnC;EACA;EAEoC;;EAGpC;UAEZ;UAIT;YAeW,cAAc,SAAS;YAMvB,uCAAqB,2BAAA;EA0B/B,wBAAM;UA6BP;SAYD,QAAQ;;QA0ET;YACI;IACR,8BAA8B"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as LabelledRangeInput } from "./index-
|
|
1
|
+
import { t as LabelledRangeInput } from "./index-BUB5SICW.js";
|
|
2
2
|
export { LabelledRangeInput };
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as LabelledSliderInput } from "./index-
|
|
1
|
+
import { t as LabelledSliderInput } from "./index-CJ5fshD3.js";
|
|
2
2
|
export { LabelledSliderInput };
|
package/dist/{list-native-drag-controller-DaBNcjgG.js → list-native-drag-controller-B0hWdbtM.js}
RENAMED
|
@@ -548,13 +548,13 @@ var ListNativeDragController = class {
|
|
|
548
548
|
try {
|
|
549
549
|
event.dataTransfer?.setDragImage(preview.element, hotspot.x, hotspot.y);
|
|
550
550
|
} catch {}
|
|
551
|
+
this.#dragging = true;
|
|
552
|
+
try {
|
|
553
|
+
this.#config.onActiveChange(true, origin.key);
|
|
554
|
+
} catch {}
|
|
551
555
|
} else try {
|
|
552
556
|
event.preventDefault();
|
|
553
557
|
} catch {}
|
|
554
|
-
this.#dragging = true;
|
|
555
|
-
try {
|
|
556
|
-
this.#config.onActiveChange(true, origin.key);
|
|
557
|
-
} catch {}
|
|
558
558
|
requestAnimationFrame(() => {
|
|
559
559
|
try {
|
|
560
560
|
preview.element.remove();
|
|
@@ -578,4 +578,4 @@ var ListNativeDragController = class {
|
|
|
578
578
|
//#endregion
|
|
579
579
|
export { captionForEntry as n, createDefaultListDragPreview as r, ListNativeDragController as t };
|
|
580
580
|
|
|
581
|
-
//# sourceMappingURL=list-native-drag-controller-
|
|
581
|
+
//# sourceMappingURL=list-native-drag-controller-B0hWdbtM.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-native-drag-controller-DaBNcjgG.js","names":["#host","#config","#dragging","#bind","#observer","#unbind","#renderRoot","#boundRoot","#onDragStart","#onDragEnd","#boundHost","#seenDragStarts"],"sources":["../src/interaction/list-drag-preview-default.ts","../src/interaction/list-native-drag-controller.ts"],"sourcesContent":["import type { ListDragEntry, ListDragPreview, ListDragPreviewContext } from './list-drag-types.js';\n\nconst CARD_DEFAULT = 72;\nconst CARD_MIN = 48;\nconst CARD_MAX = 96;\nconst LIST_WIDTH = 220;\nconst LIST_MAX_ROWS = 5;\nconst MAX_CANVAS_DIM = 1024;\n\nfunction cssVar(style: CSSStyleDeclaration, name: string, fallback: string): string {\n try {\n const value = style.getPropertyValue(name)?.trim();\n return value || fallback;\n } catch {\n return fallback;\n }\n}\n\nfunction fontOf(style: CSSStyleDeclaration): string {\n try {\n const font = style.font?.trim();\n if (font)\n return font;\n } catch {\n // Ignore.\n }\n return `12px system-ui, sans-serif`;\n}\n\n/** Caption for a drag entry — element labels win, then string items, then common object fields, then the key. */\nexport function captionForEntry(entry: ListDragEntry<unknown>): string {\n const el = entry.element ?? (entry.item instanceof Element ? entry.item : undefined);\n if (el) {\n const labelled = el.getAttribute(`data-label`)\n ?? el.querySelector(`[data-grid-list-caption]`)?.textContent?.trim()\n ?? el.getAttribute(`data-search-label`)\n ?? el.querySelector(`.cell`)?.textContent?.trim();\n if (labelled)\n return labelled.slice(0, 80);\n const text = el.textContent?.trim();\n if (text)\n return text.slice(0, 80);\n }\n const item = entry.item;\n if (typeof item === `string` && item.length > 0)\n return item.slice(0, 80);\n if (item !== null && typeof item === `object` && !(item instanceof Element)) {\n const record = item as Record<string, unknown>;\n for (const field of [`label`, `name`, `title`, `text`]) {\n const value = record[field];\n if (typeof value === `string` && value.length > 0)\n return value.slice(0, 80);\n }\n }\n return entry.key;\n}\n\nfunction glyphFor(caption: string): string {\n const first = caption.trim().at(0);\n return first ? first.toLocaleUpperCase() : `?`;\n}\n\n/** A decoded `<img>` ready for `drawImage`, if the entry's element has one. */\nfunction decodedImage(entry: ListDragEntry<unknown>): HTMLImageElement | undefined {\n const scope = entry.element ?? (entry.item instanceof Element ? entry.item : undefined);\n if (!scope || typeof scope.querySelector !== `function`)\n return undefined;\n // The entry element itself may be an <img> (e.g. slotted image content).\n if (scope instanceof HTMLImageElement) {\n if (scope.complete && scope.naturalWidth > 0)\n return scope;\n return undefined;\n }\n try {\n const img = scope.querySelector(`img`);\n if (img instanceof HTMLImageElement && img.complete && img.naturalWidth > 0)\n return img;\n } catch {\n // Ignore.\n }\n return undefined;\n}\n\nfunction cardSize(metrics: ListDragPreviewContext<unknown>[`metrics`]): number {\n if (metrics.itemSize !== undefined && Number.isFinite(metrics.itemSize))\n return Math.max(CARD_MIN, Math.min(CARD_MAX, Math.round(metrics.itemSize)));\n return CARD_DEFAULT;\n}\n\nfunction rowHeight(metrics: ListDragPreviewContext<unknown>[`metrics`]): number {\n const raw = metrics.rowHeight;\n if (raw !== undefined && Number.isFinite(raw))\n return Math.max(24, Math.min(36, Math.round(raw)));\n return 28;\n}\n\nfunction thumbCell(doc: Document, caption: string, img: HTMLImageElement | undefined, size: number): HTMLElement {\n const well = doc.createElement(`div`);\n well.setAttribute(`data-thumb`, ``);\n well.style.cssText = `width:${size}px;height:${size}px;border-radius:4px;overflow:hidden;`\n + `background:var(--surface-5, rgba(128,128,128,0.25));flex-shrink:0;display:flex;`\n + `align-items:center;justify-content:center;font-size:${Math.round(size * 0.4)}px;font-weight:600;`;\n if (img) {\n try {\n const clone = img.cloneNode(true) as HTMLImageElement;\n clone.style.cssText = `width:100%;height:100%;object-fit:cover;`;\n clone.removeAttribute(`id`);\n well.appendChild(clone);\n } catch {\n well.textContent = glyphFor(caption);\n }\n } else {\n well.textContent = glyphFor(caption);\n }\n return well;\n}\n\nfunction buildCardsElement(ctx: ListDragPreviewContext<unknown>, captions: string[], images: Array<HTMLImageElement | undefined>): HTMLElement {\n const doc = document;\n const size = cardSize(ctx.metrics);\n const gap = 6;\n const pad = 8;\n const root = doc.createElement(`div`);\n root.setAttribute(`data-preview`, `cards`);\n root.setAttribute(`part`, `drag-preview`);\n root.style.cssText = `position:fixed;top:-9999px;left:-9999px;display:flex;flex-direction:row;gap:${gap}px;`\n + `padding:${pad}px;background:var(--surface-4, #333);color:var(--surface-4-text, #fff);`\n + `border:1px solid var(--border-subtle, #555);border-radius:var(--radius-m, 8px);`\n + `box-shadow:0 4px 16px rgba(0,0,0,0.3);font-family:system-ui,sans-serif;font-size:11px;`\n + `max-width:320px;z-index:999999;pointer-events:none;`;\n const n = ctx.selected.length;\n for (let i = 0; i < n; i++) {\n const card = doc.createElement(`div`);\n card.setAttribute(`data-card`, ``);\n card.style.cssText = `display:flex;flex-direction:column;gap:4px;align-items:center;width:${size}px;`;\n card.appendChild(thumbCell(doc, captions[i], images[i], Math.round(size * 0.72)));\n const label = doc.createElement(`span`);\n label.setAttribute(`data-caption`, ``);\n label.style.cssText = `max-width:${size}px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;opacity:0.9;`;\n label.textContent = captions[i];\n card.appendChild(label);\n root.appendChild(card);\n }\n return root;\n}\n\nfunction buildListElement(\n ctx: ListDragPreviewContext<unknown>,\n captions: string[],\n images: Array<HTMLImageElement | undefined>,\n): HTMLElement {\n const doc = document;\n const rh = rowHeight(ctx.metrics);\n const thumb = Math.round(rh * 0.78);\n const root = doc.createElement(`div`);\n root.setAttribute(`data-preview`, `list`);\n root.setAttribute(`part`, `drag-preview`);\n root.style.cssText = `position:fixed;top:-9999px;left:-9999px;display:flex;flex-direction:column;gap:4px;`\n + `padding:8px;background:var(--surface-4, #333);color:var(--surface-4-text, #fff);`\n + `border:1px solid var(--border-subtle, #555);border-radius:var(--radius-m, 8px);`\n + `box-shadow:0 4px 16px rgba(0,0,0,0.3);font-family:system-ui,sans-serif;font-size:12px;`\n + `width:${LIST_WIDTH}px;max-width:${LIST_WIDTH}px;z-index:999999;pointer-events:none;`;\n const header = doc.createElement(`div`);\n header.setAttribute(`data-header`, ``);\n header.style.cssText = `font-weight:600;padding-bottom:4px;border-bottom:1px solid var(--border-subtle, #555);margin-bottom:4px;`;\n header.textContent = `${ctx.selected.length} items`;\n root.appendChild(header);\n for (let i = 0; i < Math.min(LIST_MAX_ROWS, captions.length); i++) {\n const row = doc.createElement(`div`);\n row.setAttribute(`data-row`, ``);\n row.style.cssText = `display:flex;align-items:center;gap:6px;height:${rh}px;overflow:hidden;`;\n row.appendChild(thumbCell(doc, captions[i], images[i], thumb));\n const label = doc.createElement(`span`);\n label.setAttribute(`data-caption`, ``);\n label.style.cssText = `flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;`;\n label.textContent = captions[i];\n row.appendChild(label);\n root.appendChild(row);\n }\n if (captions.length > LIST_MAX_ROWS) {\n const more = doc.createElement(`div`);\n more.setAttribute(`data-more`, ``);\n more.style.cssText = `opacity:0.6;text-align:center;`;\n more.textContent = `+${captions.length - LIST_MAX_ROWS} more`;\n root.appendChild(more);\n }\n return root;\n}\n\ntype Palette = {\n bg: string;\n fg: string;\n subtle: string;\n accent: string;\n radius: number;\n font: string;\n};\n\nfunction paletteOf(style: CSSStyleDeclaration): Palette {\n const bg = cssVar(style, `--surface-4`, `#333333`);\n const fg = cssVar(style, `--surface-4-text`, `#ffffff`);\n const subtle = cssVar(style, `--border-subtle`, `#555555`);\n const accent = cssVar(style, `--accent`, `#4da3ff`);\n const radiusRaw = cssVar(style, `--radius-m`, `8`);\n const radius = Number.parseFloat(radiusRaw) || 8;\n return { bg, fg, subtle, accent, radius, font: fontOf(style) };\n}\n\nfunction fitCanvas(canvas: HTMLCanvasElement, cssW: number, cssH: number): { scale: number; dpr: number } {\n const dpr = Math.max(1, Math.min(3, (typeof devicePixelRatio === `number` && devicePixelRatio > 0) ? devicePixelRatio : 1));\n let scale = dpr;\n // Bound the backing store so huge selections cannot allocate unbounded canvases.\n const maxScaleW = MAX_CANVAS_DIM / Math.max(1, cssW);\n const maxScaleH = MAX_CANVAS_DIM / Math.max(1, cssH);\n scale = Math.min(scale, maxScaleW, maxScaleH);\n canvas.width = Math.max(1, Math.round(cssW * scale));\n canvas.height = Math.max(1, Math.round(cssH * scale));\n canvas.style.width = `${cssW}px`;\n canvas.style.height = `${cssH}px`;\n return { scale, dpr: scale };\n}\n\nfunction roundRectPath(context: CanvasRenderingContext2D, x: number, y: number, w: number, h: number, r: number): void {\n const radius = Math.max(0, Math.min(r, w / 2, h / 2));\n if (typeof context.roundRect === `function`) {\n context.beginPath();\n context.roundRect(x, y, w, h, radius);\n return;\n }\n context.beginPath();\n context.moveTo(x + radius, y);\n context.arcTo(x + w, y, x + w, y + h, radius);\n context.arcTo(x + w, y + h, x, y + h, radius);\n context.arcTo(x, y + h, x, y, radius);\n context.arcTo(x, y, x + w, y, radius);\n context.closePath();\n}\n\nfunction paintCards(\n context: CanvasRenderingContext2D,\n scale: number,\n palette: Palette,\n captions: string[],\n images: Array<HTMLImageElement | undefined>,\n size: number,\n cssW: number,\n cssH: number,\n): void {\n context.save();\n context.scale(scale, scale);\n roundRectPath(context, 0, 0, cssW, cssH, palette.radius);\n context.fillStyle = palette.bg;\n context.fill();\n context.strokeStyle = palette.subtle;\n context.lineWidth = 1;\n context.stroke();\n context.clip();\n\n const gap = 6;\n const pad = 8;\n const wellSize = Math.round(size * 0.72);\n context.font = palette.font;\n context.textBaseline = `middle`;\n for (let i = 0; i < captions.length; i++) {\n const x = pad + i * (size + gap);\n const wellX = x + (size - wellSize) / 2;\n const wellY = pad;\n roundRectPath(context, wellX, wellY, wellSize, wellSize, 4);\n context.fillStyle = palette.subtle;\n context.globalAlpha = 0.35;\n context.fill();\n context.globalAlpha = 1;\n const img = images[i];\n if (img) {\n try {\n context.save();\n context.clip();\n context.drawImage(img, wellX, wellY, wellSize, wellSize);\n context.restore();\n } catch {\n // Placeholder below already painted.\n }\n } else {\n context.fillStyle = palette.fg;\n context.globalAlpha = 0.9;\n context.font = `600 ${Math.round(wellSize * 0.4)}px system-ui, sans-serif`;\n context.textAlign = `center`;\n context.fillText(glyphFor(captions[i]), wellX + wellSize / 2, wellY + wellSize / 2 + 1);\n context.globalAlpha = 1;\n context.textAlign = `left`;\n context.font = palette.font;\n }\n context.fillStyle = palette.fg;\n context.globalAlpha = 0.9;\n context.font = palette.font;\n const label = captions[i].length > 12 ? `${captions[i].slice(0, 11)}…` : captions[i];\n const textWidth = context.measureText(label).width;\n context.fillText(label, x + (size - Math.min(size, textWidth)) / 2, wellY + wellSize + 10, size);\n context.globalAlpha = 1;\n }\n context.restore();\n}\n\nfunction paintList(\n context: CanvasRenderingContext2D,\n scale: number,\n palette: Palette,\n captions: string[],\n images: Array<HTMLImageElement | undefined>,\n rh: number,\n cssW: number,\n cssH: number,\n): void {\n context.save();\n context.scale(scale, scale);\n roundRectPath(context, 0, 0, cssW, cssH, palette.radius);\n context.fillStyle = palette.bg;\n context.fill();\n context.strokeStyle = palette.subtle;\n context.lineWidth = 1;\n context.stroke();\n context.clip();\n\n const pad = 8;\n context.fillStyle = palette.fg;\n context.font = `600 ${palette.font}`;\n context.textBaseline = `middle`;\n context.fillText(`${captions.length} items`, pad, pad + 8, cssW - pad * 2);\n context.strokeStyle = palette.subtle;\n context.beginPath();\n context.moveTo(pad, pad + 20);\n context.lineTo(cssW - pad, pad + 20);\n context.stroke();\n\n const thumb = Math.round(rh * 0.78);\n const rows = Math.min(LIST_MAX_ROWS, captions.length);\n context.font = palette.font;\n for (let i = 0; i < rows; i++) {\n const y = pad + 24 + i * rh;\n roundRectPath(context, pad, y + (rh - thumb) / 2, thumb, thumb, 4);\n context.fillStyle = palette.subtle;\n context.globalAlpha = 0.35;\n context.fill();\n context.globalAlpha = 1;\n const img = images[i];\n if (img) {\n try {\n context.save();\n context.clip();\n context.drawImage(img, pad, y + (rh - thumb) / 2, thumb, thumb);\n context.restore();\n } catch {\n // Placeholder already painted.\n }\n } else {\n context.fillStyle = palette.fg;\n context.font = `600 ${Math.round(thumb * 0.45)}px system-ui, sans-serif`;\n context.textAlign = `center`;\n context.fillText(glyphFor(captions[i]), pad + thumb / 2, y + rh / 2 + 1);\n context.textAlign = `left`;\n context.font = palette.font;\n }\n context.fillStyle = palette.fg;\n context.globalAlpha = 0.92;\n const maxText = cssW - pad * 2 - thumb - 6;\n context.fillText(captions[i], pad + thumb + 6, y + rh / 2 + 1, Math.max(8, maxText));\n context.globalAlpha = 1;\n }\n if (captions.length > LIST_MAX_ROWS) {\n context.fillStyle = palette.fg;\n context.globalAlpha = 0.6;\n context.textAlign = `center`;\n context.fillText(`+${captions.length - LIST_MAX_ROWS} more`, cssW / 2, cssH - pad - 6, cssW - pad * 2);\n context.textAlign = `left`;\n context.globalAlpha = 1;\n }\n context.restore();\n}\n\n/**\n * Uniform built-in HTML+canvas drag preview for all four list components.\n *\n * - ≤5 selected → a row of small cards (thumbnail well + caption).\n * - >5 selected → a compact list (`N items` header, up to 5 rows, `+N more`).\n *\n * Always returns an offscreen `element` for `DataTransfer.setDragImage()` and,\n * when a 2D context is available, a DPR-aware painted `canvas` for native\n * hosts. Colours track the active theme via `ctx.hostStyle` CSS variables.\n */\nexport function createDefaultListDragPreview<T>(ctx: ListDragPreviewContext<T>): ListDragPreview {\n const entries = ctx.selected as ReadonlyArray<ListDragEntry<unknown>>;\n const captions = entries.map(entry => captionForEntry(entry));\n const images = entries.map(entry => decodedImage(entry));\n const isCards = entries.length <= 5;\n\n let element: HTMLElement;\n let cssW: number;\n let cssH: number;\n if (isCards) {\n const size = cardSize(ctx.metrics);\n const gap = 6;\n const pad = 8;\n cssW = entries.length * size + Math.max(0, entries.length - 1) * gap + pad * 2;\n cssH = Math.round(size * 0.72) + 22 + pad * 2;\n element = buildCardsElement(ctx, captions, images);\n } else {\n const rh = rowHeight(ctx.metrics);\n const pad = 8;\n const rows = Math.min(LIST_MAX_ROWS, entries.length);\n const more = entries.length > LIST_MAX_ROWS ? 18 : 0;\n cssW = LIST_WIDTH + 16;\n cssH = pad * 2 + 24 + rows * rh + more;\n element = buildListElement(ctx, captions, images);\n }\n\n let canvas: HTMLCanvasElement | undefined;\n try {\n const candidate = document.createElement(`canvas`);\n const paint = candidate.getContext(`2d`);\n if (paint) {\n const { scale } = fitCanvas(candidate, cssW, cssH);\n const palette = paletteOf(ctx.hostStyle);\n if (isCards) {\n paintCards(paint, scale, palette, captions, images, cardSize(ctx.metrics), cssW, cssH);\n } else {\n paintList(paint, scale, palette, captions, images, rowHeight(ctx.metrics), cssW, cssH);\n }\n canvas = candidate;\n }\n } catch {\n canvas = undefined;\n }\n\n return {\n element,\n hotspot: { x: 16, y: 16 },\n ...(canvas ? { canvas } : {}),\n dispose: () => {},\n };\n}\n","import type { ReactiveController, ReactiveControllerHost } from 'lit';\nimport type {\n ListDragEntry,\n ListDragPreview,\n ListDragPreviewContext,\n ListDragPreviewRenderer,\n ListDragSource,\n ListNativeDragStartDetail,\n} from './list-drag-types.js';\nimport { createDefaultListDragPreview } from './list-drag-preview-default.js';\n\nexport type ListNativeDragControllerConfig<T> = {\n readonly source: ListDragSource;\n /** `itemsDraggable && selection usable` */\n isEnabled: () => boolean;\n /** Event target → item key, or `undefined` when the drag did not start on an item. */\n resolveEventToKey: (target: EventTarget | null) => string | undefined;\n /**\n * Apply the origin rule (origin ∉ selection ⇒ replace with origin); return\n * display-ordered `{ origin, selected }` for both modes, or `undefined` when\n * the origin is not selectable.\n */\n prepareSelection: (originKey: string) => { origin: ListDragEntry<T>; selected: Array<ListDragEntry<T>> } | undefined;\n getMetrics: () => ListDragPreviewContext<T>[`metrics`];\n getRenderer: () => ListDragPreviewRenderer<T> | undefined;\n /** Fire the cancelable `list-native-drag-start`; return `!defaultPrevented`. */\n dispatch: (detail: ListNativeDragStartDetail<T>) => boolean;\n /**\n * Optional: write custom payloads onto the drag's `DataTransfer` (e.g. a\n * MIME type for same-app drops). Called once, after a non-cancelled dispatch,\n * inside the synchronous `dragstart` turn.\n */\n writeDataTransfer?: (dataTransfer: DataTransfer, detail: ListNativeDragStartDetail<T>) => void;\n /** Host toggles `data-native-dragging` / `aria-label`, re-renders. */\n onActiveChange: (active: boolean, originKey?: string) => void;\n /** Host clears state + starts its post-drag click-suppress timer. */\n onEnd: () => void;\n /** Optional: sync `draggable` on light-DOM / slotted children while enabled. */\n syncLightDomDraggable?: () => void;\n /**\n * Optional. Called at the very top of the capture-phase `dragstart`, before\n * enablement / key resolution. Return `false` to abort the native drag — the\n * controller calls `event.preventDefault()` so the browser starts no drag.\n * Use when the gesture belongs to another interaction (e.g. marquee select).\n */\n shouldStart?: (event: DragEvent) => boolean;\n};\n\ntype DragHost = ReactiveControllerHost & HTMLElement;\n\n/**\n * Shared native item/row drag-out for list components.\n *\n * Owns capture-phase `dragstart` / `dragend` listeners on the host and its\n * render root, a `MutationObserver` that keeps light-DOM / slotted item `draggable`\n * attributes in sync, and a single post-dispatch disposal on\n * `requestAnimationFrame`. All DOM / selection knowledge lives in the host\n * config callbacks.\n */\nexport class ListNativeDragController<T> implements ReactiveController {\n readonly #host: DragHost;\n readonly #config: ListNativeDragControllerConfig<T>;\n\n #dragging = false;\n #boundRoot: EventTarget | undefined;\n #boundHost = false;\n #seenDragStarts = new WeakSet<Event>();\n #observer: MutationObserver | undefined;\n\n constructor(host: DragHost, config: ListNativeDragControllerConfig<T>) {\n this.#host = host;\n this.#config = config;\n host.addController(this);\n }\n\n get isDragging(): boolean {\n return this.#dragging;\n }\n\n /** `\"true\"` when enabled, else `\"false\"` — for shadow-row template bindings. */\n get draggableAttr(): string {\n try {\n return this.#config.isEnabled() ? `true` : `false`;\n } catch {\n return `false`;\n }\n }\n\n /** Re-run the light-DOM `draggable` sync (e.g. after `itemsDraggable` flips). */\n refreshDraggable(): void {\n try {\n this.#config.syncLightDomDraggable?.();\n } catch {\n // Host sync must never break the controller.\n }\n }\n\n hostConnected(): void {\n this.#bind();\n this.#observer ??= new MutationObserver(() => this.refreshDraggable());\n try {\n this.#observer.observe(this.#host, { childList: true, subtree: true });\n } catch {\n // happy-dom-safe: observing must never throw.\n }\n this.refreshDraggable();\n }\n\n /** `renderRoot` does not exist yet at `hostConnected` for a shadow-DOM host — rebind once it does. */\n hostUpdated(): void {\n this.#bind();\n }\n\n hostDisconnected(): void {\n this.#unbind();\n try {\n this.#observer?.disconnect();\n } catch {\n // Ignore.\n }\n this.#dragging = false;\n }\n\n #renderRoot(): EventTarget {\n const maybe = this.#host as unknown as { renderRoot?: EventTarget };\n return maybe.renderRoot ?? this.#host;\n }\n\n #bind(): void {\n // Capture on both the host (light-DOM / slotted items, and everything in\n // happy-dom where slot distribution is not reflected in the event path)\n // and the render root (shadow cells). A shadow-originated drag reaches\n // both — `#seenDragStarts` dedups the second call.\n const root = this.#renderRoot();\n if (root !== this.#boundRoot) {\n this.#unbind();\n this.#boundRoot = root;\n root.addEventListener(`dragstart`, this.#onDragStart as EventListener, { capture: true });\n root.addEventListener(`dragend`, this.#onDragEnd as EventListener, { capture: true });\n }\n if (!this.#boundHost) {\n this.#boundHost = true;\n this.#host.addEventListener(`dragstart`, this.#onDragStart as EventListener, { capture: true });\n this.#host.addEventListener(`dragend`, this.#onDragEnd as EventListener, { capture: true });\n }\n }\n\n #unbind(): void {\n this.#boundRoot?.removeEventListener(`dragstart`, this.#onDragStart as EventListener, { capture: true });\n this.#boundRoot?.removeEventListener(`dragend`, this.#onDragEnd as EventListener, { capture: true });\n this.#boundRoot = undefined;\n if (this.#boundHost) {\n this.#boundHost = false;\n this.#host.removeEventListener(`dragstart`, this.#onDragStart as EventListener, { capture: true });\n this.#host.removeEventListener(`dragend`, this.#onDragEnd as EventListener, { capture: true });\n }\n }\n\n #onDragStart = (event: Event): void => {\n if (!(event instanceof DragEvent))\n return;\n if (this.#seenDragStarts.has(event))\n return;\n if (this.#config.shouldStart) {\n let ok = true;\n try {\n ok = this.#config.shouldStart(event);\n } catch {\n ok = false;\n }\n if (!ok) {\n try {\n event.preventDefault();\n } catch {\n // Ignore — stubbed events in tests.\n }\n return;\n }\n }\n let enabled = false;\n try {\n enabled = this.#config.isEnabled();\n } catch {\n return;\n }\n if (!enabled)\n return;\n let originKey: string | undefined;\n try {\n originKey = this.#config.resolveEventToKey(event.target);\n } catch {\n return;\n }\n // Do NOT mark the event seen until we have a key. This handler is bound to\n // both the host and the render root; on a shadow-DOM host the host-level\n // invocation sees a retargeted `event.target` and resolves no key — it must\n // not poison the dedup for the render-root invocation that will succeed.\n if (originKey)\n this.#seenDragStarts.add(event);\n if (!originKey)\n return;\n let prepared: { origin: ListDragEntry<T>; selected: Array<ListDragEntry<T>> } | undefined;\n try {\n prepared = this.#config.prepareSelection(originKey);\n } catch {\n return;\n }\n if (!prepared || prepared.selected.length === 0)\n return;\n const { origin, selected } = prepared;\n\n let hostStyle: CSSStyleDeclaration;\n try {\n hostStyle = getComputedStyle(this.#host);\n } catch {\n hostStyle = document.createElement(`div`).style as unknown as CSSStyleDeclaration;\n }\n let metrics: ListDragPreviewContext<T>[`metrics`] = {};\n try {\n metrics = this.#config.getMetrics() ?? {};\n } catch {\n metrics = {};\n }\n const context: ListDragPreviewContext<T> = {\n source: this.#config.source,\n origin,\n selected,\n metrics,\n hostStyle,\n };\n let renderer: ListDragPreviewRenderer<T> | undefined;\n try {\n renderer = this.#config.getRenderer();\n } catch {\n renderer = undefined;\n }\n let preview: ListDragPreview;\n try {\n preview = renderer ? renderer(context) : createDefaultListDragPreview(context);\n } catch {\n preview = createDefaultListDragPreview(context);\n }\n try {\n document.body.appendChild(preview.element);\n } catch {\n // happy-dom-safe.\n }\n\n const detail: ListNativeDragStartDetail<T> = {\n key: origin.key,\n index: origin.index,\n item: origin.item,\n selectedKeys: selected.map(entry => entry.key),\n selected,\n preview,\n };\n let notCancelled = true;\n try {\n notCancelled = this.#config.dispatch(detail);\n } catch {\n notCancelled = true;\n }\n\n if (notCancelled) {\n if (event.dataTransfer) {\n try {\n // Let drop targets show a \"move\" / \"copy\" cursor.\n if (event.dataTransfer.effectAllowed === `none` || event.dataTransfer.effectAllowed === `uninitialized`)\n event.dataTransfer.effectAllowed = `copyMove`;\n } catch {\n // read-only in some contexts — non-fatal.\n }\n try {\n this.#config.writeDataTransfer?.(event.dataTransfer, detail);\n } catch {\n // A misbehaving payload writer must not abort the drag.\n }\n }\n const hotspot = preview.hotspot ?? { x: 16, y: 16 };\n try {\n event.dataTransfer?.setDragImage(preview.element, hotspot.x, hotspot.y);\n } catch {\n // Stubbed dataTransfer in tests may throw — non-fatal.\n }\n } else {\n try {\n event.preventDefault();\n } catch {\n // Ignore.\n }\n }\n\n this.#dragging = true;\n try {\n this.#config.onActiveChange(true, origin.key);\n } catch {\n // Ignore.\n }\n requestAnimationFrame(() => {\n try {\n preview.element.remove();\n } catch {\n // Ignore.\n }\n try {\n preview.dispose?.();\n } catch {\n // Ignore.\n }\n });\n };\n\n #onDragEnd = (): void => {\n if (!this.#dragging)\n return;\n this.#dragging = false;\n try {\n this.#config.onActiveChange(false);\n } catch {\n // Ignore.\n }\n try {\n this.#config.onEnd();\n } catch {\n // Ignore.\n }\n };\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"list-native-drag-controller-B0hWdbtM.js","names":["#host","#config","#dragging","#bind","#observer","#unbind","#renderRoot","#boundRoot","#onDragStart","#onDragEnd","#boundHost","#seenDragStarts"],"sources":["../src/interaction/list-drag-preview-default.ts","../src/interaction/list-native-drag-controller.ts"],"sourcesContent":["import type { ListDragEntry, ListDragPreview, ListDragPreviewContext } from './list-drag-types.js';\n\nconst CARD_DEFAULT = 72;\nconst CARD_MIN = 48;\nconst CARD_MAX = 96;\nconst LIST_WIDTH = 220;\nconst LIST_MAX_ROWS = 5;\nconst MAX_CANVAS_DIM = 1024;\n\nfunction cssVar(style: CSSStyleDeclaration, name: string, fallback: string): string {\n try {\n const value = style.getPropertyValue(name)?.trim();\n return value || fallback;\n } catch {\n return fallback;\n }\n}\n\nfunction fontOf(style: CSSStyleDeclaration): string {\n try {\n const font = style.font?.trim();\n if (font)\n return font;\n } catch {\n // Ignore.\n }\n return `12px system-ui, sans-serif`;\n}\n\n/** Caption for a drag entry — element labels win, then string items, then common object fields, then the key. */\nexport function captionForEntry(entry: ListDragEntry<unknown>): string {\n const el = entry.element ?? (entry.item instanceof Element ? entry.item : undefined);\n if (el) {\n const labelled = el.getAttribute(`data-label`)\n ?? el.querySelector(`[data-grid-list-caption]`)?.textContent?.trim()\n ?? el.getAttribute(`data-search-label`)\n ?? el.querySelector(`.cell`)?.textContent?.trim();\n if (labelled)\n return labelled.slice(0, 80);\n const text = el.textContent?.trim();\n if (text)\n return text.slice(0, 80);\n }\n const item = entry.item;\n if (typeof item === `string` && item.length > 0)\n return item.slice(0, 80);\n if (item !== null && typeof item === `object` && !(item instanceof Element)) {\n const record = item as Record<string, unknown>;\n for (const field of [`label`, `name`, `title`, `text`]) {\n const value = record[field];\n if (typeof value === `string` && value.length > 0)\n return value.slice(0, 80);\n }\n }\n return entry.key;\n}\n\nfunction glyphFor(caption: string): string {\n const first = caption.trim().at(0);\n return first ? first.toLocaleUpperCase() : `?`;\n}\n\n/** A decoded `<img>` ready for `drawImage`, if the entry's element has one. */\nfunction decodedImage(entry: ListDragEntry<unknown>): HTMLImageElement | undefined {\n const scope = entry.element ?? (entry.item instanceof Element ? entry.item : undefined);\n if (!scope || typeof scope.querySelector !== `function`)\n return undefined;\n // The entry element itself may be an <img> (e.g. slotted image content).\n if (scope instanceof HTMLImageElement) {\n if (scope.complete && scope.naturalWidth > 0)\n return scope;\n return undefined;\n }\n try {\n const img = scope.querySelector(`img`);\n if (img instanceof HTMLImageElement && img.complete && img.naturalWidth > 0)\n return img;\n } catch {\n // Ignore.\n }\n return undefined;\n}\n\nfunction cardSize(metrics: ListDragPreviewContext<unknown>[`metrics`]): number {\n if (metrics.itemSize !== undefined && Number.isFinite(metrics.itemSize))\n return Math.max(CARD_MIN, Math.min(CARD_MAX, Math.round(metrics.itemSize)));\n return CARD_DEFAULT;\n}\n\nfunction rowHeight(metrics: ListDragPreviewContext<unknown>[`metrics`]): number {\n const raw = metrics.rowHeight;\n if (raw !== undefined && Number.isFinite(raw))\n return Math.max(24, Math.min(36, Math.round(raw)));\n return 28;\n}\n\nfunction thumbCell(doc: Document, caption: string, img: HTMLImageElement | undefined, size: number): HTMLElement {\n const well = doc.createElement(`div`);\n well.setAttribute(`data-thumb`, ``);\n well.style.cssText = `width:${size}px;height:${size}px;border-radius:4px;overflow:hidden;`\n + `background:var(--surface-5, rgba(128,128,128,0.25));flex-shrink:0;display:flex;`\n + `align-items:center;justify-content:center;font-size:${Math.round(size * 0.4)}px;font-weight:600;`;\n if (img) {\n try {\n const clone = img.cloneNode(true) as HTMLImageElement;\n clone.style.cssText = `width:100%;height:100%;object-fit:cover;`;\n clone.removeAttribute(`id`);\n well.appendChild(clone);\n } catch {\n well.textContent = glyphFor(caption);\n }\n } else {\n well.textContent = glyphFor(caption);\n }\n return well;\n}\n\nfunction buildCardsElement(ctx: ListDragPreviewContext<unknown>, captions: string[], images: Array<HTMLImageElement | undefined>): HTMLElement {\n const doc = document;\n const size = cardSize(ctx.metrics);\n const gap = 6;\n const pad = 8;\n const root = doc.createElement(`div`);\n root.setAttribute(`data-preview`, `cards`);\n root.setAttribute(`part`, `drag-preview`);\n root.style.cssText = `position:fixed;top:-9999px;left:-9999px;display:flex;flex-direction:row;gap:${gap}px;`\n + `padding:${pad}px;background:var(--surface-4, #333);color:var(--surface-4-text, #fff);`\n + `border:1px solid var(--border-subtle, #555);border-radius:var(--radius-m, 8px);`\n + `box-shadow:0 4px 16px rgba(0,0,0,0.3);font-family:system-ui,sans-serif;font-size:11px;`\n + `max-width:320px;z-index:999999;pointer-events:none;`;\n const n = ctx.selected.length;\n for (let i = 0; i < n; i++) {\n const card = doc.createElement(`div`);\n card.setAttribute(`data-card`, ``);\n card.style.cssText = `display:flex;flex-direction:column;gap:4px;align-items:center;width:${size}px;`;\n card.appendChild(thumbCell(doc, captions[i], images[i], Math.round(size * 0.72)));\n const label = doc.createElement(`span`);\n label.setAttribute(`data-caption`, ``);\n label.style.cssText = `max-width:${size}px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;opacity:0.9;`;\n label.textContent = captions[i];\n card.appendChild(label);\n root.appendChild(card);\n }\n return root;\n}\n\nfunction buildListElement(\n ctx: ListDragPreviewContext<unknown>,\n captions: string[],\n images: Array<HTMLImageElement | undefined>,\n): HTMLElement {\n const doc = document;\n const rh = rowHeight(ctx.metrics);\n const thumb = Math.round(rh * 0.78);\n const root = doc.createElement(`div`);\n root.setAttribute(`data-preview`, `list`);\n root.setAttribute(`part`, `drag-preview`);\n root.style.cssText = `position:fixed;top:-9999px;left:-9999px;display:flex;flex-direction:column;gap:4px;`\n + `padding:8px;background:var(--surface-4, #333);color:var(--surface-4-text, #fff);`\n + `border:1px solid var(--border-subtle, #555);border-radius:var(--radius-m, 8px);`\n + `box-shadow:0 4px 16px rgba(0,0,0,0.3);font-family:system-ui,sans-serif;font-size:12px;`\n + `width:${LIST_WIDTH}px;max-width:${LIST_WIDTH}px;z-index:999999;pointer-events:none;`;\n const header = doc.createElement(`div`);\n header.setAttribute(`data-header`, ``);\n header.style.cssText = `font-weight:600;padding-bottom:4px;border-bottom:1px solid var(--border-subtle, #555);margin-bottom:4px;`;\n header.textContent = `${ctx.selected.length} items`;\n root.appendChild(header);\n for (let i = 0; i < Math.min(LIST_MAX_ROWS, captions.length); i++) {\n const row = doc.createElement(`div`);\n row.setAttribute(`data-row`, ``);\n row.style.cssText = `display:flex;align-items:center;gap:6px;height:${rh}px;overflow:hidden;`;\n row.appendChild(thumbCell(doc, captions[i], images[i], thumb));\n const label = doc.createElement(`span`);\n label.setAttribute(`data-caption`, ``);\n label.style.cssText = `flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;`;\n label.textContent = captions[i];\n row.appendChild(label);\n root.appendChild(row);\n }\n if (captions.length > LIST_MAX_ROWS) {\n const more = doc.createElement(`div`);\n more.setAttribute(`data-more`, ``);\n more.style.cssText = `opacity:0.6;text-align:center;`;\n more.textContent = `+${captions.length - LIST_MAX_ROWS} more`;\n root.appendChild(more);\n }\n return root;\n}\n\ntype Palette = {\n bg: string;\n fg: string;\n subtle: string;\n accent: string;\n radius: number;\n font: string;\n};\n\nfunction paletteOf(style: CSSStyleDeclaration): Palette {\n const bg = cssVar(style, `--surface-4`, `#333333`);\n const fg = cssVar(style, `--surface-4-text`, `#ffffff`);\n const subtle = cssVar(style, `--border-subtle`, `#555555`);\n const accent = cssVar(style, `--accent`, `#4da3ff`);\n const radiusRaw = cssVar(style, `--radius-m`, `8`);\n const radius = Number.parseFloat(radiusRaw) || 8;\n return { bg, fg, subtle, accent, radius, font: fontOf(style) };\n}\n\nfunction fitCanvas(canvas: HTMLCanvasElement, cssW: number, cssH: number): { scale: number; dpr: number } {\n const dpr = Math.max(1, Math.min(3, (typeof devicePixelRatio === `number` && devicePixelRatio > 0) ? devicePixelRatio : 1));\n let scale = dpr;\n // Bound the backing store so huge selections cannot allocate unbounded canvases.\n const maxScaleW = MAX_CANVAS_DIM / Math.max(1, cssW);\n const maxScaleH = MAX_CANVAS_DIM / Math.max(1, cssH);\n scale = Math.min(scale, maxScaleW, maxScaleH);\n canvas.width = Math.max(1, Math.round(cssW * scale));\n canvas.height = Math.max(1, Math.round(cssH * scale));\n canvas.style.width = `${cssW}px`;\n canvas.style.height = `${cssH}px`;\n return { scale, dpr: scale };\n}\n\nfunction roundRectPath(context: CanvasRenderingContext2D, x: number, y: number, w: number, h: number, r: number): void {\n const radius = Math.max(0, Math.min(r, w / 2, h / 2));\n if (typeof context.roundRect === `function`) {\n context.beginPath();\n context.roundRect(x, y, w, h, radius);\n return;\n }\n context.beginPath();\n context.moveTo(x + radius, y);\n context.arcTo(x + w, y, x + w, y + h, radius);\n context.arcTo(x + w, y + h, x, y + h, radius);\n context.arcTo(x, y + h, x, y, radius);\n context.arcTo(x, y, x + w, y, radius);\n context.closePath();\n}\n\nfunction paintCards(\n context: CanvasRenderingContext2D,\n scale: number,\n palette: Palette,\n captions: string[],\n images: Array<HTMLImageElement | undefined>,\n size: number,\n cssW: number,\n cssH: number,\n): void {\n context.save();\n context.scale(scale, scale);\n roundRectPath(context, 0, 0, cssW, cssH, palette.radius);\n context.fillStyle = palette.bg;\n context.fill();\n context.strokeStyle = palette.subtle;\n context.lineWidth = 1;\n context.stroke();\n context.clip();\n\n const gap = 6;\n const pad = 8;\n const wellSize = Math.round(size * 0.72);\n context.font = palette.font;\n context.textBaseline = `middle`;\n for (let i = 0; i < captions.length; i++) {\n const x = pad + i * (size + gap);\n const wellX = x + (size - wellSize) / 2;\n const wellY = pad;\n roundRectPath(context, wellX, wellY, wellSize, wellSize, 4);\n context.fillStyle = palette.subtle;\n context.globalAlpha = 0.35;\n context.fill();\n context.globalAlpha = 1;\n const img = images[i];\n if (img) {\n try {\n context.save();\n context.clip();\n context.drawImage(img, wellX, wellY, wellSize, wellSize);\n context.restore();\n } catch {\n // Placeholder below already painted.\n }\n } else {\n context.fillStyle = palette.fg;\n context.globalAlpha = 0.9;\n context.font = `600 ${Math.round(wellSize * 0.4)}px system-ui, sans-serif`;\n context.textAlign = `center`;\n context.fillText(glyphFor(captions[i]), wellX + wellSize / 2, wellY + wellSize / 2 + 1);\n context.globalAlpha = 1;\n context.textAlign = `left`;\n context.font = palette.font;\n }\n context.fillStyle = palette.fg;\n context.globalAlpha = 0.9;\n context.font = palette.font;\n const label = captions[i].length > 12 ? `${captions[i].slice(0, 11)}…` : captions[i];\n const textWidth = context.measureText(label).width;\n context.fillText(label, x + (size - Math.min(size, textWidth)) / 2, wellY + wellSize + 10, size);\n context.globalAlpha = 1;\n }\n context.restore();\n}\n\nfunction paintList(\n context: CanvasRenderingContext2D,\n scale: number,\n palette: Palette,\n captions: string[],\n images: Array<HTMLImageElement | undefined>,\n rh: number,\n cssW: number,\n cssH: number,\n): void {\n context.save();\n context.scale(scale, scale);\n roundRectPath(context, 0, 0, cssW, cssH, palette.radius);\n context.fillStyle = palette.bg;\n context.fill();\n context.strokeStyle = palette.subtle;\n context.lineWidth = 1;\n context.stroke();\n context.clip();\n\n const pad = 8;\n context.fillStyle = palette.fg;\n context.font = `600 ${palette.font}`;\n context.textBaseline = `middle`;\n context.fillText(`${captions.length} items`, pad, pad + 8, cssW - pad * 2);\n context.strokeStyle = palette.subtle;\n context.beginPath();\n context.moveTo(pad, pad + 20);\n context.lineTo(cssW - pad, pad + 20);\n context.stroke();\n\n const thumb = Math.round(rh * 0.78);\n const rows = Math.min(LIST_MAX_ROWS, captions.length);\n context.font = palette.font;\n for (let i = 0; i < rows; i++) {\n const y = pad + 24 + i * rh;\n roundRectPath(context, pad, y + (rh - thumb) / 2, thumb, thumb, 4);\n context.fillStyle = palette.subtle;\n context.globalAlpha = 0.35;\n context.fill();\n context.globalAlpha = 1;\n const img = images[i];\n if (img) {\n try {\n context.save();\n context.clip();\n context.drawImage(img, pad, y + (rh - thumb) / 2, thumb, thumb);\n context.restore();\n } catch {\n // Placeholder already painted.\n }\n } else {\n context.fillStyle = palette.fg;\n context.font = `600 ${Math.round(thumb * 0.45)}px system-ui, sans-serif`;\n context.textAlign = `center`;\n context.fillText(glyphFor(captions[i]), pad + thumb / 2, y + rh / 2 + 1);\n context.textAlign = `left`;\n context.font = palette.font;\n }\n context.fillStyle = palette.fg;\n context.globalAlpha = 0.92;\n const maxText = cssW - pad * 2 - thumb - 6;\n context.fillText(captions[i], pad + thumb + 6, y + rh / 2 + 1, Math.max(8, maxText));\n context.globalAlpha = 1;\n }\n if (captions.length > LIST_MAX_ROWS) {\n context.fillStyle = palette.fg;\n context.globalAlpha = 0.6;\n context.textAlign = `center`;\n context.fillText(`+${captions.length - LIST_MAX_ROWS} more`, cssW / 2, cssH - pad - 6, cssW - pad * 2);\n context.textAlign = `left`;\n context.globalAlpha = 1;\n }\n context.restore();\n}\n\n/**\n * Uniform built-in HTML+canvas drag preview for all four list components.\n *\n * - ≤5 selected → a row of small cards (thumbnail well + caption).\n * - >5 selected → a compact list (`N items` header, up to 5 rows, `+N more`).\n *\n * Always returns an offscreen `element` for `DataTransfer.setDragImage()` and,\n * when a 2D context is available, a DPR-aware painted `canvas` for native\n * hosts. Colours track the active theme via `ctx.hostStyle` CSS variables.\n */\nexport function createDefaultListDragPreview<T>(ctx: ListDragPreviewContext<T>): ListDragPreview {\n const entries = ctx.selected as ReadonlyArray<ListDragEntry<unknown>>;\n const captions = entries.map(entry => captionForEntry(entry));\n const images = entries.map(entry => decodedImage(entry));\n const isCards = entries.length <= 5;\n\n let element: HTMLElement;\n let cssW: number;\n let cssH: number;\n if (isCards) {\n const size = cardSize(ctx.metrics);\n const gap = 6;\n const pad = 8;\n cssW = entries.length * size + Math.max(0, entries.length - 1) * gap + pad * 2;\n cssH = Math.round(size * 0.72) + 22 + pad * 2;\n element = buildCardsElement(ctx, captions, images);\n } else {\n const rh = rowHeight(ctx.metrics);\n const pad = 8;\n const rows = Math.min(LIST_MAX_ROWS, entries.length);\n const more = entries.length > LIST_MAX_ROWS ? 18 : 0;\n cssW = LIST_WIDTH + 16;\n cssH = pad * 2 + 24 + rows * rh + more;\n element = buildListElement(ctx, captions, images);\n }\n\n let canvas: HTMLCanvasElement | undefined;\n try {\n const candidate = document.createElement(`canvas`);\n const paint = candidate.getContext(`2d`);\n if (paint) {\n const { scale } = fitCanvas(candidate, cssW, cssH);\n const palette = paletteOf(ctx.hostStyle);\n if (isCards) {\n paintCards(paint, scale, palette, captions, images, cardSize(ctx.metrics), cssW, cssH);\n } else {\n paintList(paint, scale, palette, captions, images, rowHeight(ctx.metrics), cssW, cssH);\n }\n canvas = candidate;\n }\n } catch {\n canvas = undefined;\n }\n\n return {\n element,\n hotspot: { x: 16, y: 16 },\n ...(canvas ? { canvas } : {}),\n dispose: () => {},\n };\n}\n","import type { ReactiveController, ReactiveControllerHost } from 'lit';\nimport type {\n ListDragEntry,\n ListDragPreview,\n ListDragPreviewContext,\n ListDragPreviewRenderer,\n ListDragSource,\n ListNativeDragStartDetail,\n} from './list-drag-types.js';\nimport { createDefaultListDragPreview } from './list-drag-preview-default.js';\n\nexport type ListNativeDragControllerConfig<T> = {\n readonly source: ListDragSource;\n /** `itemsDraggable && selection usable` */\n isEnabled: () => boolean;\n /** Event target → item key, or `undefined` when the drag did not start on an item. */\n resolveEventToKey: (target: EventTarget | null) => string | undefined;\n /**\n * Apply the origin rule (origin ∉ selection ⇒ replace with origin); return\n * display-ordered `{ origin, selected }` for both modes, or `undefined` when\n * the origin is not selectable.\n */\n prepareSelection: (originKey: string) => { origin: ListDragEntry<T>; selected: Array<ListDragEntry<T>> } | undefined;\n getMetrics: () => ListDragPreviewContext<T>[`metrics`];\n getRenderer: () => ListDragPreviewRenderer<T> | undefined;\n /** Fire the cancelable `list-native-drag-start`; return `!defaultPrevented`. */\n dispatch: (detail: ListNativeDragStartDetail<T>) => boolean;\n /**\n * Optional: write custom payloads onto the drag's `DataTransfer` (e.g. a\n * MIME type for same-app drops). Called once, after a non-cancelled dispatch,\n * inside the synchronous `dragstart` turn.\n */\n writeDataTransfer?: (dataTransfer: DataTransfer, detail: ListNativeDragStartDetail<T>) => void;\n /** Host toggles `data-native-dragging` / `aria-label`, re-renders. */\n onActiveChange: (active: boolean, originKey?: string) => void;\n /** Host clears state + starts its post-drag click-suppress timer. */\n onEnd: () => void;\n /** Optional: sync `draggable` on light-DOM / slotted children while enabled. */\n syncLightDomDraggable?: () => void;\n /**\n * Optional. Called at the very top of the capture-phase `dragstart`, before\n * enablement / key resolution. Return `false` to abort the native drag — the\n * controller calls `event.preventDefault()` so the browser starts no drag.\n * Use when the gesture belongs to another interaction (e.g. marquee select).\n */\n shouldStart?: (event: DragEvent) => boolean;\n};\n\ntype DragHost = ReactiveControllerHost & HTMLElement;\n\n/**\n * Shared native item/row drag-out for list components.\n *\n * Owns capture-phase `dragstart` / `dragend` listeners on the host and its\n * render root, a `MutationObserver` that keeps light-DOM / slotted item `draggable`\n * attributes in sync, and a single post-dispatch disposal on\n * `requestAnimationFrame`. All DOM / selection knowledge lives in the host\n * config callbacks.\n */\nexport class ListNativeDragController<T> implements ReactiveController {\n readonly #host: DragHost;\n readonly #config: ListNativeDragControllerConfig<T>;\n\n #dragging = false;\n #boundRoot: EventTarget | undefined;\n #boundHost = false;\n #seenDragStarts = new WeakSet<Event>();\n #observer: MutationObserver | undefined;\n\n constructor(host: DragHost, config: ListNativeDragControllerConfig<T>) {\n this.#host = host;\n this.#config = config;\n host.addController(this);\n }\n\n get isDragging(): boolean {\n return this.#dragging;\n }\n\n /** `\"true\"` when enabled, else `\"false\"` — for shadow-row template bindings. */\n get draggableAttr(): string {\n try {\n return this.#config.isEnabled() ? `true` : `false`;\n } catch {\n return `false`;\n }\n }\n\n /** Re-run the light-DOM `draggable` sync (e.g. after `itemsDraggable` flips). */\n refreshDraggable(): void {\n try {\n this.#config.syncLightDomDraggable?.();\n } catch {\n // Host sync must never break the controller.\n }\n }\n\n hostConnected(): void {\n this.#bind();\n this.#observer ??= new MutationObserver(() => this.refreshDraggable());\n try {\n this.#observer.observe(this.#host, { childList: true, subtree: true });\n } catch {\n // happy-dom-safe: observing must never throw.\n }\n this.refreshDraggable();\n }\n\n /** `renderRoot` does not exist yet at `hostConnected` for a shadow-DOM host — rebind once it does. */\n hostUpdated(): void {\n this.#bind();\n }\n\n hostDisconnected(): void {\n this.#unbind();\n try {\n this.#observer?.disconnect();\n } catch {\n // Ignore.\n }\n this.#dragging = false;\n }\n\n #renderRoot(): EventTarget {\n const maybe = this.#host as unknown as { renderRoot?: EventTarget };\n return maybe.renderRoot ?? this.#host;\n }\n\n #bind(): void {\n // Capture on both the host (light-DOM / slotted items, and everything in\n // happy-dom where slot distribution is not reflected in the event path)\n // and the render root (shadow cells). A shadow-originated drag reaches\n // both — `#seenDragStarts` dedups the second call.\n const root = this.#renderRoot();\n if (root !== this.#boundRoot) {\n this.#unbind();\n this.#boundRoot = root;\n root.addEventListener(`dragstart`, this.#onDragStart as EventListener, { capture: true });\n root.addEventListener(`dragend`, this.#onDragEnd as EventListener, { capture: true });\n }\n if (!this.#boundHost) {\n this.#boundHost = true;\n this.#host.addEventListener(`dragstart`, this.#onDragStart as EventListener, { capture: true });\n this.#host.addEventListener(`dragend`, this.#onDragEnd as EventListener, { capture: true });\n }\n }\n\n #unbind(): void {\n this.#boundRoot?.removeEventListener(`dragstart`, this.#onDragStart as EventListener, { capture: true });\n this.#boundRoot?.removeEventListener(`dragend`, this.#onDragEnd as EventListener, { capture: true });\n this.#boundRoot = undefined;\n if (this.#boundHost) {\n this.#boundHost = false;\n this.#host.removeEventListener(`dragstart`, this.#onDragStart as EventListener, { capture: true });\n this.#host.removeEventListener(`dragend`, this.#onDragEnd as EventListener, { capture: true });\n }\n }\n\n #onDragStart = (event: Event): void => {\n if (!(event instanceof DragEvent))\n return;\n if (this.#seenDragStarts.has(event))\n return;\n if (this.#config.shouldStart) {\n let ok = true;\n try {\n ok = this.#config.shouldStart(event);\n } catch {\n ok = false;\n }\n if (!ok) {\n try {\n event.preventDefault();\n } catch {\n // Ignore — stubbed events in tests.\n }\n return;\n }\n }\n let enabled = false;\n try {\n enabled = this.#config.isEnabled();\n } catch {\n return;\n }\n if (!enabled)\n return;\n let originKey: string | undefined;\n try {\n originKey = this.#config.resolveEventToKey(event.target);\n } catch {\n return;\n }\n // Do NOT mark the event seen until we have a key. This handler is bound to\n // both the host and the render root; on a shadow-DOM host the host-level\n // invocation sees a retargeted `event.target` and resolves no key — it must\n // not poison the dedup for the render-root invocation that will succeed.\n if (originKey)\n this.#seenDragStarts.add(event);\n if (!originKey)\n return;\n let prepared: { origin: ListDragEntry<T>; selected: Array<ListDragEntry<T>> } | undefined;\n try {\n prepared = this.#config.prepareSelection(originKey);\n } catch {\n return;\n }\n if (!prepared || prepared.selected.length === 0)\n return;\n const { origin, selected } = prepared;\n\n let hostStyle: CSSStyleDeclaration;\n try {\n hostStyle = getComputedStyle(this.#host);\n } catch {\n hostStyle = document.createElement(`div`).style as unknown as CSSStyleDeclaration;\n }\n let metrics: ListDragPreviewContext<T>[`metrics`] = {};\n try {\n metrics = this.#config.getMetrics() ?? {};\n } catch {\n metrics = {};\n }\n const context: ListDragPreviewContext<T> = {\n source: this.#config.source,\n origin,\n selected,\n metrics,\n hostStyle,\n };\n let renderer: ListDragPreviewRenderer<T> | undefined;\n try {\n renderer = this.#config.getRenderer();\n } catch {\n renderer = undefined;\n }\n let preview: ListDragPreview;\n try {\n preview = renderer ? renderer(context) : createDefaultListDragPreview(context);\n } catch {\n preview = createDefaultListDragPreview(context);\n }\n try {\n document.body.appendChild(preview.element);\n } catch {\n // happy-dom-safe.\n }\n\n const detail: ListNativeDragStartDetail<T> = {\n key: origin.key,\n index: origin.index,\n item: origin.item,\n selectedKeys: selected.map(entry => entry.key),\n selected,\n preview,\n };\n let notCancelled = true;\n try {\n notCancelled = this.#config.dispatch(detail);\n } catch {\n notCancelled = true;\n }\n\n if (notCancelled) {\n if (event.dataTransfer) {\n try {\n // Let drop targets show a \"move\" / \"copy\" cursor.\n if (event.dataTransfer.effectAllowed === `none` || event.dataTransfer.effectAllowed === `uninitialized`)\n event.dataTransfer.effectAllowed = `copyMove`;\n } catch {\n // read-only in some contexts — non-fatal.\n }\n try {\n this.#config.writeDataTransfer?.(event.dataTransfer, detail);\n } catch {\n // A misbehaving payload writer must not abort the drag.\n }\n }\n const hotspot = preview.hotspot ?? { x: 16, y: 16 };\n try {\n event.dataTransfer?.setDragImage(preview.element, hotspot.x, hotspot.y);\n } catch {\n // Stubbed dataTransfer in tests may throw — non-fatal.\n }\n this.#dragging = true;\n try {\n this.#config.onActiveChange(true, origin.key);\n } catch {\n // Ignore.\n }\n } else {\n try {\n event.preventDefault();\n } catch {\n // Ignore.\n }\n }\n requestAnimationFrame(() => {\n try {\n preview.element.remove();\n } catch {\n // Ignore.\n }\n try {\n preview.dispose?.();\n } catch {\n // Ignore.\n }\n });\n };\n\n #onDragEnd = (): void => {\n if (!this.#dragging)\n return;\n this.#dragging = false;\n try {\n this.#config.onActiveChange(false);\n } catch {\n // Ignore.\n }\n try {\n this.#config.onEnd();\n } catch {\n // Ignore.\n }\n };\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "./icon-
|
|
1
|
+
import "./icon-DR_3rSyZ.js";
|
|
2
2
|
import { LitElement } from "lit";
|
|
3
3
|
import { CommandRegistry, KeyboardManager } from "@clinth/ui-commands";
|
|
4
4
|
//#region src/menu/menu-container.d.ts
|
|
@@ -128,4 +128,4 @@ declare global {
|
|
|
128
128
|
}
|
|
129
129
|
//#endregion
|
|
130
130
|
export { MenuContainer as i, MenuTrigger as n, MenuTriggerCommandDetail as r, MenuItem as t };
|
|
131
|
-
//# sourceMappingURL=menu-item-
|
|
131
|
+
//# sourceMappingURL=menu-item-ZmkXNjek.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-item-
|
|
1
|
+
{"version":3,"file":"menu-item-ZmkXNjek.d.ts","names":[],"sources":["../src/menu/menu-container.ts","../src/menu/menu-trigger.ts","../src/menu/menu-item.ts"],"mappings":";;;;cASa,sBAAsB;EACgB;EACjB,WAAW;EACX,kBAAkB;UACvB;UAGnB;SAwBD,sBAAM;UA4BL;UAkDA;EAYC,QAAQ,mBAAmB;;;;EASpC,WAAW,SAAS,IAAI;EAOxB,wBAAM;UAaE;;;;;UAoCA;UAiCA;EA0BR;UAIQ;UAQA;UAUA;UAqDA;;QAqCF;YACI;IACR,uBAAuB;;;;;KCvWtB;KACA;KAEO;WACD;WACA;WACA;;cAME,oBAAoB;EACH,MAAM;EACN;;EAEwB;EACpB,WAAW;EACX,kBAAkB;EACtB,WAAW;;EAEa;UAEnC;UACA;UACA;UAEc;UACN;iBAEV;UAEP;UACA;EAER;EAOA;EAQA;EAkBA,QAAQ,mBAAmB;UAMnB;UAqBA;UAWA;UAOA;MAKJ;EAIJ;EAIA;EAIA;UAIQ;UAgBA;UAQA;UAYA;UAUA;UAYA;UAOA;UAeA;UAeA;UAkBA;SAiBD,sBAAM;EAgFb,wBAAM;;QAwBA;YACI;IACR,qBAAqB;;;;;cC3WZ,iBAAiB;EACA;EAC2B;EAC3B;EACC;EACuB;EACpB,WAAW;EACX,kBAAkB;EAClB,iBAAiB;UAEhC;UACM;UAEf;EAER;UAOQ;UAKA;UAWA;UAQA;UAUA;UAUA;UAWA;UASA;EASR,WAAW,mBAAmB;EAU9B,QAAQ,mBAAmB;UAInB;SAaQ,sBAAM;EAkEtB,wBAAM;;QAwBA;YACI;IACR,kBAAkB"}
|
package/dist/menu.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { i as MenuContainer, n as MenuTrigger, t as MenuItem } from "./menu-item-
|
|
2
|
-
import { a as menuFromTree, c as MenuSeparator, d as MenuCheckItem, f as MenuBar, i as MenuFromTreeOptions, l as MenuSubTrigger, n as MenuRadioGroup, o as menuFromTreeToElements, r as MenuRadioItem, s as MenuHeader, u as MenuCommandController } from "./index-
|
|
1
|
+
import { i as MenuContainer, n as MenuTrigger, t as MenuItem } from "./menu-item-ZmkXNjek.js";
|
|
2
|
+
import { a as menuFromTree, c as MenuSeparator, d as MenuCheckItem, f as MenuBar, i as MenuFromTreeOptions, l as MenuSubTrigger, n as MenuRadioGroup, o as menuFromTreeToElements, r as MenuRadioItem, s as MenuHeader, u as MenuCommandController } from "./index-C59-JEPl.js";
|
|
3
3
|
export { MenuBar, MenuCheckItem, MenuCommandController, MenuContainer, type MenuFromTreeOptions, MenuHeader, MenuItem, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuSubTrigger, MenuTrigger, menuFromTree, menuFromTreeToElements };
|
package/dist/panel.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as TitlebarToggleDetail, c as TitlebarVariant, i as TitlebarOrientation, o as TitlebarToggleEvent, s as TitlebarToggleInteraction, t as TitlebarCloseEvent } from "./titlebar-
|
|
1
|
+
import { a as TitlebarToggleDetail, c as TitlebarVariant, i as TitlebarOrientation, o as TitlebarToggleEvent, s as TitlebarToggleInteraction, t as TitlebarCloseEvent } from "./titlebar-B5zSTZnF.js";
|
|
2
2
|
import { LitElement } from "lit";
|
|
3
3
|
//#region src/panel/panel.d.ts
|
|
4
4
|
/** Backwards-compatible aliases: canonical types now live in `../titlebar/titlebar.js`. */
|
|
@@ -156,7 +156,7 @@ declare class SplitLayoutElement extends LitElement {
|
|
|
156
156
|
private _onPointerUp;
|
|
157
157
|
private _emitResize;
|
|
158
158
|
private _emitChange;
|
|
159
|
-
protected render():
|
|
159
|
+
protected render(): import("lit").TemplateResult<1> | typeof nothing;
|
|
160
160
|
private _getTrackSizes;
|
|
161
161
|
private _resolveTracks;
|
|
162
162
|
private _renderGutter;
|
|
@@ -176,4 +176,4 @@ declare global {
|
|
|
176
176
|
}
|
|
177
177
|
//#endregion
|
|
178
178
|
export { SplitExpandEvent as _, LayoutNode as a, SplitResizeEvent as b, PanelNode as c, SplitChangeEvent as d, SplitCloseDetail as f, SplitExpandDetail as g, SplitCollapseEvent as h, GroupNode as i, SnapshotNode as l, SplitCollapseDetail as m, SplitPanelElement as n, LayoutSnapshot as o, SplitCloseEvent as p, Axis as r, PanelInfo as s, SplitLayoutElement as t, SplitChangeDetail as u, SplitLayoutElementEventMap as v, WhenSmall as x, SplitResizeDetail as y };
|
|
179
|
-
//# sourceMappingURL=split-layout-
|
|
179
|
+
//# sourceMappingURL=split-layout-C5SYbDrq.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"split-layout-
|
|
1
|
+
{"version":3,"file":"split-layout-C5SYbDrq.d.ts","names":[],"sources":["../src/split-layout/types.ts","../src/split-layout/split-panel.ts","../src/split-layout/split-layout.ts"],"mappings":";;KAAY;KAEA;UAEK;EACf;EACA;EACA,IAAI;EACJ;EACA;EACA;EACA;EACA,WAAW;EACX;EACA;;UAGe;EACf;EACA;EACA,IAAI;EACJ,MAAM;EACN,UAAU;EACV;EACA;;KAGU,aAAa,YAAY;UAEpB;EACf;EACA;EACA;EACA;EACA,WAAW;;UAGI;EACf;EACA,MAAM;;UAGS;EACf;EACA,IAAI;EACJ;EACA;EACA;EACA;EACA;EACA;EACA,WAAW;;UAGI;EACf,OAAO;EACP;;KAGU,mBAAmB,YAAY;UAE1B;EACf;EACA;;KAGU,qBAAqB,YAAY;UAE5B;EACf;EACA;;KAGU,mBAAmB,YAAY;UAE1B;EACf;EACA;;KAGU,kBAAkB,YAAY;UAEzB;EACf,QAAQ;;KAGE,mBAAmB,YAAY;UAE1B;EACf,qBAAqB;EACrB,uBAAuB;EACvB,qBAAqB;EACrB,oBAAoB;EACpB,qBAAqB;;;;cCvFV,0BAA0B;EAErC;EAGA;EAGA;EAGA;EAGA;EAGA;EAGA;EAGA;EAGA;EAES,wBAAM;SAIC,sBAAM;;QAiBhB;YACI;IACR,oBAAoB;;;;;cC7CX,2BAA2B;EAEtC,WAAW;EAGX;EAGA;EAGA;UAGQ;UAGA;UAGA;UAEA;UACA;UACA;UACA;EASC;EAKA;EAKA;UAID;UAcA;MAaJ,UAAU;EAuBd,aAAa;EAMb,UAAU,GAAG;EAUb,SAAS,oBAAoB;EAY7B,SAAS,oBAAoB,wBAAwB;EA4BrD,SAAS,iBAAiB;EAI1B,OAAO,iBAAiB;EAIxB,OAAO,iBAAiB;EAOxB,WAAW,iBAAiB;;;;;;EAmC5B,kBAAkB;;;;;;;;;EAelB,gBAAgB,qBAAqB,mBAAmB,iBAAiB;UAwBjE;UAiDA;UAQA;UAOA;UAwBA;UAQA;UAKA;UAMA;UAiFA;UAWA;UAuBA;UAeA;UAsBA;UAIA;UAMA;UAcA;YAYW,wBAAM,2BAAA;UA2BjB;UAQA;UAgCA;SAuBQ,sBAAM;;QAiHhB;YACI;IACR,qBAAqB;;YAGb;IACR,qBAAqB,YAAY;IACjC,uBAAuB,YAAY;IACnC,qBAAqB,YAAY;IACjC,oBAAoB,YAAY;IAChC,qBAAqB,YAAY"}
|
package/dist/split-layout.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as SplitLayoutElement } from "./split-layout-
|
|
1
|
+
import { t as SplitLayoutElement } from "./split-layout-C5SYbDrq.js";
|
|
2
2
|
export { SplitLayoutElement };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "./icon-
|
|
1
|
+
import "./icon-DR_3rSyZ.js";
|
|
2
2
|
import { LitElement, PropertyValues } from "lit";
|
|
3
3
|
import { CommandRegistry } from "@clinth/ui-commands";
|
|
4
4
|
//#region src/tabs/tab-list-item.d.ts
|
|
@@ -86,4 +86,4 @@ declare global {
|
|
|
86
86
|
}
|
|
87
87
|
//#endregion
|
|
88
88
|
export { TabListReorderDetail as a, TabListElement as i, TabListChangeEvent as n, TabListReorderEvent as o, TabListDragMode as r, TabListItemElement as s, TabListChangeDetail as t };
|
|
89
|
-
//# sourceMappingURL=tab-list-
|
|
89
|
+
//# sourceMappingURL=tab-list-DbMIL520.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tab-list-
|
|
1
|
+
{"version":3,"file":"tab-list-DbMIL520.d.ts","names":[],"sources":["../src/tabs/tab-list-item.ts","../src/tabs/tab-list.ts"],"mappings":";;;;;;;;;;;cAiBa,2BAA2B;EAEtC;EAGA;EAGA;EAGA;EAGA;EAGA,UAAU;UAEO;UACA;UACT;UACA;UACA;EAEC;EAgBA;EAcA,QAAQ,SAAS;UAQlB;UAUA;UAWA;UAIA;;;;;UAQA;UAiBA;EAKC;EAKA,wBAAM;UA8BP;SAWQ,sBAAM;;QAmKhB;YACI;IACR,sBAAsB;;;;;;;;;;KC3Ud;WACD;WACA;WACA;;KAGC,qBAAqB,YAAY;KAEjC;WACD;WACA;WACA;;KAGC,sBAAsB,YAAY;KAElC;cAMC,uBAAuB;;EAElC;EAGA;EAGA;EAGA;EAGA;EAGA,UAAU;EA4BD,wBAAM;EAsDN;EAUA,QAAQ,mBAAmB;EAoGpC,sBAAkB;EAwBlB,cAAc,IAAI;SAwaX,sBAAM;;QAyKP;YACI;IACR,iBAAiB"}
|
package/dist/tabs.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as TabListReorderDetail, i as TabListElement, n as TabListChangeEvent, o as TabListReorderEvent, r as TabListDragMode, t as TabListChangeDetail } from "./tab-list-
|
|
1
|
+
import { a as TabListReorderDetail, i as TabListElement, n as TabListChangeEvent, o as TabListReorderEvent, r as TabListDragMode, t as TabListChangeDetail } from "./tab-list-DbMIL520.js";
|
|
2
2
|
export { TabListChangeDetail, TabListChangeEvent, TabListDragMode, TabListElement, TabListReorderDetail, TabListReorderEvent };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "./icon-
|
|
1
|
+
import "./icon-DR_3rSyZ.js";
|
|
2
2
|
import { LitElement } from "lit";
|
|
3
3
|
//#region src/titlebar/titlebar.d.ts
|
|
4
4
|
type TitlebarOrientation = `horizontal` | `vertical`;
|
|
@@ -51,4 +51,4 @@ interface TitlebarElement {
|
|
|
51
51
|
}
|
|
52
52
|
//#endregion
|
|
53
53
|
export { TitlebarToggleDetail as a, TitlebarVariant as c, TitlebarOrientation as i, TitlebarElement as n, TitlebarToggleEvent as o, TitlebarElementEventMap as r, TitlebarToggleInteraction as s, TitlebarCloseEvent as t };
|
|
54
|
-
//# sourceMappingURL=titlebar-
|
|
54
|
+
//# sourceMappingURL=titlebar-B5zSTZnF.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"titlebar-
|
|
1
|
+
{"version":3,"file":"titlebar-B5zSTZnF.d.ts","names":[],"sources":["../src/titlebar/titlebar.ts"],"mappings":";;;KAOY;KACA;KACA;UAEK;WACN;;KAGC,sBAAsB,YAAY;KAClC,qBAAqB;UAEhB;EACf,QAAQ;EACR,OAAO;;;;;;;;;;;;;;cAgBI,wBAAwB;EACP;EACwB;EACiB,aAAa;EACjB,SAAS;EAC7C;;EAEe;EACA;EACiB,mBAAmB;UAExE;UAaA;UASA;YAIW,wBAAM;SAkET,sBAAM;;QA4RhB;YACI;IACR,iBAAiB;;;UAIJ;EACf,oBAAoB,gBAAgB,yBAClC,MAAM,GACN,WAAW,MAAM,iBAAiB,OAAO,wBAAwB,aACjE,oBAAoB,sCAEpB,cACA,UAAU,oCACV,oBAAoB"}
|
package/dist/titlebar.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as TitlebarToggleDetail, c as TitlebarVariant, i as TitlebarOrientation, n as TitlebarElement, o as TitlebarToggleEvent, r as TitlebarElementEventMap, s as TitlebarToggleInteraction, t as TitlebarCloseEvent } from "./titlebar-
|
|
1
|
+
import { a as TitlebarToggleDetail, c as TitlebarVariant, i as TitlebarOrientation, n as TitlebarElement, o as TitlebarToggleEvent, r as TitlebarElementEventMap, s as TitlebarToggleInteraction, t as TitlebarCloseEvent } from "./titlebar-B5zSTZnF.js";
|
|
2
2
|
export { TitlebarCloseEvent, TitlebarElement, TitlebarElementEventMap, TitlebarOrientation, TitlebarToggleDetail, TitlebarToggleEvent, TitlebarToggleInteraction, TitlebarVariant };
|
|
@@ -3,7 +3,7 @@ import { n as tickledStyles, t as tickledItemStyles } from "./tickled-styles-BrA
|
|
|
3
3
|
import { t as themeFallbacks } from "./fallbacks-BcKGq-2F.js";
|
|
4
4
|
import { n as safeCustomElement, t as __decorate } from "./decorate-VRK8rslU.js";
|
|
5
5
|
import { i as ListSearchController, n as listSearchStyles, o as registerListSearchCommands, r as LIST_SEARCH_MODES, t as createTreeListSearchAdapter } from "./incr-search-C05WjbZh.js";
|
|
6
|
-
import { t as ListNativeDragController } from "./list-native-drag-controller-
|
|
6
|
+
import { t as ListNativeDragController } from "./list-native-drag-controller-B0hWdbtM.js";
|
|
7
7
|
import { n as animateListItemIn, r as animateListItemOut } from "./list-item-animation-BUoEKi5s.js";
|
|
8
8
|
import "./interaction-BskmlA9t.js";
|
|
9
9
|
import { t as collectDataResult } from "./data-provider-35TyWclX.js";
|
|
@@ -2630,4 +2630,4 @@ var TreeController = class {
|
|
|
2630
2630
|
//#endregion
|
|
2631
2631
|
export { TreeDataModel as a, pruneDraggedDescendants as c, TreeDropController as i, TreeListElement as n, applyTreeDrop as o, TreeBaseElement as r, dropTargetFor as s, TreeController as t };
|
|
2632
2632
|
|
|
2633
|
-
//# sourceMappingURL=tree-
|
|
2633
|
+
//# sourceMappingURL=tree-DAFBO_MF.js.map
|