@salilvnair/dui 1.0.8 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{DuiShowcase-C18KoqHP.css → DuiShowcase-BOtwgwbq.css} +1 -1
- package/dist/assets/{DuiShowcase-DwihGCxO.js → DuiShowcase-Bl4Oi2Vw.js} +937 -937
- package/dist/assets/index-Dylj6yGs.css +10 -0
- package/dist/assets/{index-D9rPjVPP.js → index-ROymQLGX.js} +2 -2
- package/dist/chunks/{doc-path-D2_JUEIe.js → doc-path-CS9-ZNht.js} +36 -35
- package/dist/chunks/doc-path-CS9-ZNht.js.map +1 -0
- package/dist/index.html +2 -2
- package/dist/index.js +7501 -6745
- package/dist/index.js.map +1 -1
- package/dist/lib/components/display/BadgeChipView.d.ts +29 -3
- package/dist/lib/components/display/LoadingStateView.d.ts +61 -0
- package/dist/lib/components/display/badge-chip-skins.d.ts +496 -0
- package/dist/lib/components/display/badge-chip.test.d.ts +1 -0
- package/dist/lib/components/input/SearchFieldView.d.ts +40 -1
- package/dist/lib/components/input/markdown-serialise.d.ts +16 -0
- package/dist/lib/components/input/markdown-serialise.test.d.ts +1 -0
- package/dist/lib/core/DuiContext.d.ts +4 -2
- package/dist/lib/core/DuiTypes.d.ts +8 -0
- package/dist/lib/core/IconSize.d.ts +8 -0
- package/dist/lib/index.d.ts +7 -2
- package/dist/monaco-setup.js +1 -1
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/dist/assets/index-kr_HUJjf.css +0 -10
- package/dist/chunks/doc-path-D2_JUEIe.js.map +0 -1
|
@@ -181,13 +181,14 @@ function En({
|
|
|
181
181
|
defaultColor: s,
|
|
182
182
|
activeColor: r,
|
|
183
183
|
fontStyle: i,
|
|
184
|
-
|
|
184
|
+
chipVariant: c,
|
|
185
|
+
children: x
|
|
185
186
|
}) {
|
|
186
|
-
const
|
|
187
|
-
() => ({ size: n, width: o, borderRadius: t, color: e, defaultColor: s, activeColor: r, fontStyle: i }),
|
|
188
|
-
[n, o, t, e, s, r, i]
|
|
187
|
+
const a = M(
|
|
188
|
+
() => ({ size: n, width: o, borderRadius: t, color: e, defaultColor: s, activeColor: r, fontStyle: i, chipVariant: c }),
|
|
189
|
+
[n, o, t, e, s, r, i, c]
|
|
189
190
|
);
|
|
190
|
-
return /* @__PURE__ */ p(R.Provider, { value:
|
|
191
|
+
return /* @__PURE__ */ p(R.Provider, { value: a, children: x });
|
|
191
192
|
}
|
|
192
193
|
function U() {
|
|
193
194
|
return F(R);
|
|
@@ -257,9 +258,9 @@ function en({
|
|
|
257
258
|
const i = D(null), c = D(null);
|
|
258
259
|
if (n.separator)
|
|
259
260
|
return /* @__PURE__ */ p("div", { style: { height: "1px", background: "var(--color-surface-border)", margin: "4px 0" } });
|
|
260
|
-
const x = !!(n.children && n.children.length > 0),
|
|
261
|
+
const x = !!(n.children && n.children.length > 0), a = n.danger, m = x && s === n.id, g = () => {
|
|
261
262
|
r(x ? n.id : null);
|
|
262
|
-
},
|
|
263
|
+
}, u = (l) => {
|
|
263
264
|
var h;
|
|
264
265
|
if (l.stopPropagation(), !n.disabled) {
|
|
265
266
|
if (x) {
|
|
@@ -291,8 +292,8 @@ function en({
|
|
|
291
292
|
/* @__PURE__ */ y(
|
|
292
293
|
"div",
|
|
293
294
|
{
|
|
294
|
-
onClick:
|
|
295
|
-
className: `dui_ctx-menu__item${
|
|
295
|
+
onClick: u,
|
|
296
|
+
className: `dui_ctx-menu__item${a ? " dui_ctx-menu__item--danger" : ""}${n.disabled ? " dui_ctx-menu__item--disabled" : ""}`,
|
|
296
297
|
style: {
|
|
297
298
|
display: "flex",
|
|
298
299
|
// A described item is two lines, so the icon and chevron align to the
|
|
@@ -308,11 +309,11 @@ function en({
|
|
|
308
309
|
// reason is the reason it is disabled, and dimming it to 45% makes
|
|
309
310
|
// the one thing worth reading the hardest thing to read.
|
|
310
311
|
opacity: n.disabled ? n.description ? 0.75 : 0.45 : 1,
|
|
311
|
-
color:
|
|
312
|
+
color: a ? "var(--color-error)" : "var(--color-text-secondary)",
|
|
312
313
|
userSelect: "none"
|
|
313
314
|
},
|
|
314
315
|
children: [
|
|
315
|
-
n.icon && /* @__PURE__ */ p("span", { style: { width: "14px", display: "flex", alignItems: "center", flexShrink: 0, marginTop: n.description ? "1px" : 0, color: n.iconColor ?? (
|
|
316
|
+
n.icon && /* @__PURE__ */ p("span", { style: { width: "14px", display: "flex", alignItems: "center", flexShrink: 0, marginTop: n.description ? "1px" : 0, color: n.iconColor ?? (a ? "var(--color-error)" : "var(--color-text-muted)") }, children: n.icon }),
|
|
316
317
|
n.description ? /* @__PURE__ */ y("span", { style: { flex: 1, minWidth: 0, display: "flex", flexDirection: "column", gap: "2px" }, children: [
|
|
317
318
|
/* @__PURE__ */ y("span", { style: { display: "flex", alignItems: "baseline", gap: "8px" }, children: [
|
|
318
319
|
/* @__PURE__ */ p("span", { style: { flex: 1, whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis" }, children: n.label }),
|
|
@@ -380,20 +381,20 @@ function rn({
|
|
|
380
381
|
rounded: i = !0,
|
|
381
382
|
matchAnchorWidth: c = !1,
|
|
382
383
|
position: x,
|
|
383
|
-
align:
|
|
384
|
+
align: a = "auto"
|
|
384
385
|
}) {
|
|
385
386
|
const m = D(null);
|
|
386
387
|
if (w(() => {
|
|
387
388
|
if (!e) return;
|
|
388
|
-
const
|
|
389
|
+
const u = (l) => {
|
|
389
390
|
var f, d;
|
|
390
391
|
const h = l.target;
|
|
391
392
|
(f = m.current) != null && f.contains(h) || t != null && t.contains(h) || (d = h.closest) != null && d.call(h, "[data-dui-ctx-menu]") || s();
|
|
392
393
|
};
|
|
393
|
-
return document.addEventListener("mousedown",
|
|
394
|
+
return document.addEventListener("mousedown", u), () => document.removeEventListener("mousedown", u);
|
|
394
395
|
}, [e, t, s]), w(() => {
|
|
395
396
|
if (!e) return;
|
|
396
|
-
const
|
|
397
|
+
const u = (l) => {
|
|
397
398
|
if (l.key === "Escape") {
|
|
398
399
|
s();
|
|
399
400
|
return;
|
|
@@ -401,27 +402,27 @@ function rn({
|
|
|
401
402
|
const h = l.key.toUpperCase(), f = o.find((d) => d.disabled || d.separator || !d.shortcut || !d.onClick ? !1 : d.shortcut === "⌫" ? l.key === "Backspace" || l.key === "Delete" : d.shortcut.toUpperCase() === h);
|
|
402
403
|
f && (l.preventDefault(), f.onClick(), s());
|
|
403
404
|
};
|
|
404
|
-
return document.addEventListener("keydown",
|
|
405
|
+
return document.addEventListener("keydown", u), () => document.removeEventListener("keydown", u);
|
|
405
406
|
}, [e, s, o]), w(() => {
|
|
406
407
|
if (!e || !m.current) return;
|
|
407
|
-
const
|
|
408
|
-
const f =
|
|
408
|
+
const u = m.current, l = () => {
|
|
409
|
+
const f = u.scrollWidth, d = u.scrollHeight;
|
|
409
410
|
let v, k, _ = 0;
|
|
410
411
|
if (x)
|
|
411
412
|
v = x.x, k = x.y, _ = x.y;
|
|
412
413
|
else if (t) {
|
|
413
414
|
const b = t.getBoundingClientRect();
|
|
414
|
-
|
|
415
|
+
a === "right" ? v = b.right - f : a === "left" ? v = b.left : v = b.left + f <= window.innerWidth - 8 ? b.left : b.right - f, k = b.bottom + 4, _ = b.top, c && (u.style.width = b.width + "px");
|
|
415
416
|
} else
|
|
416
417
|
return;
|
|
417
|
-
v + f > window.innerWidth - 8 && (v = Math.max(8, window.innerWidth - f - 8)), v < 8 && (v = 8), k + d > window.innerHeight - 8 && (k = Math.max(8, _ - d - 4)),
|
|
418
|
+
v + f > window.innerWidth - 8 && (v = Math.max(8, window.innerWidth - f - 8)), v < 8 && (v = 8), k + d > window.innerHeight - 8 && (k = Math.max(8, _ - d - 4)), u.style.left = v + "px", u.style.top = k + "px";
|
|
418
419
|
};
|
|
419
420
|
l();
|
|
420
421
|
const h = requestAnimationFrame(l);
|
|
421
422
|
return window.addEventListener("scroll", l, { passive: !0, capture: !0 }), window.addEventListener("resize", l, { passive: !0 }), () => {
|
|
422
423
|
cancelAnimationFrame(h), window.removeEventListener("scroll", l, { capture: !0 }), window.removeEventListener("resize", l);
|
|
423
424
|
};
|
|
424
|
-
}, [e, t, x, c,
|
|
425
|
+
}, [e, t, x, c, a]), !e) return null;
|
|
425
426
|
const g = Q(r);
|
|
426
427
|
return A(
|
|
427
428
|
/* @__PURE__ */ p(
|
|
@@ -495,24 +496,24 @@ function Ln({
|
|
|
495
496
|
itemsAt: r,
|
|
496
497
|
accentColor: i
|
|
497
498
|
}) {
|
|
498
|
-
const [c, x] = S(null), [
|
|
499
|
+
const [c, x] = S(null), [a, m] = S([]), g = e === "dui";
|
|
499
500
|
return /* @__PURE__ */ y(
|
|
500
501
|
"div",
|
|
501
502
|
{
|
|
502
503
|
className: `dui-editor-shell relative${n ? " rounded border border-[var(--color-surface-border)]" : ""}`,
|
|
503
504
|
style: { height: o, width: "100%", position: "relative", ...i ? { "--editor-accent": i } : {} },
|
|
504
|
-
onContextMenuCapture: g ? (
|
|
505
|
-
|
|
505
|
+
onContextMenuCapture: g ? (u) => {
|
|
506
|
+
u.preventDefault(), m((r == null ? void 0 : r(u.clientX, u.clientY)) ?? []), x({ x: u.clientX, y: u.clientY });
|
|
506
507
|
} : void 0,
|
|
507
508
|
children: [
|
|
508
509
|
t,
|
|
509
|
-
g && (
|
|
510
|
+
g && (a.length > 0 || s) && /* @__PURE__ */ p(
|
|
510
511
|
rn,
|
|
511
512
|
{
|
|
512
513
|
open: !!c,
|
|
513
514
|
anchorEl: null,
|
|
514
515
|
position: c ?? void 0,
|
|
515
|
-
items: [...
|
|
516
|
+
items: [...a, ...s ?? []],
|
|
516
517
|
onClose: () => x(null),
|
|
517
518
|
width: 240
|
|
518
519
|
}
|
|
@@ -565,9 +566,9 @@ function O(n, o) {
|
|
|
565
566
|
const r = n[s];
|
|
566
567
|
if (r === '"') {
|
|
567
568
|
const { value: i, end: c } = sn(n, s), x = e[e.length - 1];
|
|
568
|
-
let
|
|
569
|
-
for (;
|
|
570
|
-
if (n[
|
|
569
|
+
let a = c + 1;
|
|
570
|
+
for (; a < n.length && /\s/.test(n[a]); ) a++;
|
|
571
|
+
if (n[a] === ":" && (x == null ? void 0 : x.kind) === "object" && (x.key = i), t <= c) return e;
|
|
571
572
|
s = c + 1;
|
|
572
573
|
continue;
|
|
573
574
|
}
|
|
@@ -641,15 +642,15 @@ function B(n, o) {
|
|
|
641
642
|
e.pop(), r = c + 1;
|
|
642
643
|
continue;
|
|
643
644
|
}
|
|
644
|
-
const
|
|
645
|
-
if (!
|
|
645
|
+
const a = (i = x.match(/^[^\s/>]+/)) == null ? void 0 : i[0];
|
|
646
|
+
if (!a) {
|
|
646
647
|
r = c + 1;
|
|
647
648
|
continue;
|
|
648
649
|
}
|
|
649
|
-
const m = e[e.length - 1], g = m ? m.counts : s,
|
|
650
|
-
g.set(
|
|
650
|
+
const m = e[e.length - 1], g = m ? m.counts : s, u = (g.get(a) ?? 0) + 1;
|
|
651
|
+
g.set(a, u);
|
|
651
652
|
const l = x.endsWith("/");
|
|
652
|
-
if (e.push({ name:
|
|
653
|
+
if (e.push({ name: a, counts: /* @__PURE__ */ new Map(), index: u }), t <= c) return e;
|
|
653
654
|
l && e.pop(), r = c + 1;
|
|
654
655
|
}
|
|
655
656
|
return e;
|
|
@@ -692,4 +693,4 @@ export {
|
|
|
692
693
|
En as y,
|
|
693
694
|
$n as z
|
|
694
695
|
};
|
|
695
|
-
//# sourceMappingURL=doc-path-
|
|
696
|
+
//# sourceMappingURL=doc-path-CS9-ZNht.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-path-CS9-ZNht.js","sources":["../../src/lib/core/DuiTokens.ts","../../src/lib/core/DuiContext.tsx","../../src/lib/core/EditorBase.ts","../../src/lib/components/modal/ContextMenuView.tsx","../../src/lib/monaco-runtime.ts","../../src/lib/components/input/EditorView.shell.tsx","../../src/lib/components/input/doc-path.ts"],"sourcesContent":["import type { DuiSize, DuiRadius, DuiWidth } from './DuiTypes';\n\n// ─── Token Tables ─────────────────────────────────────────────────────────────\n// Single source of truth for every size-related value in the DUI system.\n// Think of this file as the \"parent class\" — all DUI components inherit their\n// visual dimensions from here. No component may define its own local size map.\n\n/** Heights (px) per size × category */\nexport const DUI_HEIGHT = {\n /** Standard form controls: text input, select, duration, search, highlighted input */\n input: { xxs: 16, xs: 20, sm: 24, md: 28, lg: 36, xl: 40, xxl: 48, xxxl: 56 },\n /** Push buttons (primary, secondary, ghost, danger) */\n button: { xxs: 16, xs: 20, sm: 24, md: 28, lg: 36, xl: 40, xxl: 48, xxxl: 56 },\n /** Pill tabs, segment controls */\n tab: { xxs: 16, xs: 20, sm: 24, md: 28, lg: 36, xl: 40, xxl: 48, xxxl: 56 },\n /** Sidebar nav items, settings nav links */\n nav: { xxs: 20, xs: 24, sm: 28, md: 32, lg: 36, xl: 44, xxl: 52, xxxl: 60 },\n /** Context-menu items, dropdown options, sub-menu rows */\n menu: { xxs: 14, xs: 18, sm: 22, md: 26, lg: 30, xl: 36, xxl: 42, xxxl: 48 },\n /** Table / KV-table rows */\n table: { xxs: 18, xs: 22, sm: 26, md: 30, lg: 36, xl: 40, xxl: 46, xxxl: 54 },\n /** Card container min-height (loosely applied) */\n card: { xxs: 28, xs: 36, sm: 48, md: 64, lg: 80, xl: 96, xxl: 112, xxxl: 128 },\n} as const satisfies Record<string, Record<DuiSize, number>>;\n\n/** Chip / badge heights */\nexport const DUI_CHIP_HEIGHT: Record<DuiSize, number> = {\n xxs: 10, xs: 12, sm: 16, md: 20, lg: 24, xl: 28, xxl: 32, xxxl: 38,\n};\n\n/** Calendar day-cell square size (px) — CalendarView, DateRangePickerView */\nexport const DUI_CELL_SIZE: Record<DuiSize, number> = {\n xxs: 18, xs: 22, sm: 26, md: 30, lg: 34, xl: 38, xxl: 44, xxxl: 50,\n};\n\n/** Circular ring diameter (px) — CountdownRingView, ProgressRingView, and future ring/gauge components */\nexport const DUI_RING_DIAMETER: Record<DuiSize, number> = {\n xxs: 40, xs: 52, sm: 64, md: 80, lg: 100, xl: 120, xxl: 144, xxxl: 168,\n};\n\n/** Progress bar/ring stroke thickness (px) — ProgressBarView, ProgressRingView */\nexport const DUI_THICKNESS: Record<DuiSize, number> = {\n xxs: 2, xs: 3, sm: 4, md: 5, lg: 6, xl: 8, xxl: 10, xxxl: 12,\n};\n\n/** Avatar circle diameter (px) — AvatarView, AvatarGroupView, AvatarUploadView */\nexport const DUI_AVATAR_DIAMETER: Record<DuiSize, number> = {\n xxs: 16, xs: 20, sm: 24, md: 32, lg: 40, xl: 48, xxl: 56, xxxl: 72,\n};\n\n/** Presence/status dot diameter (px) — PresenceDotView, and the status dot on AvatarView */\nexport const DUI_DOT_SIZE: Record<DuiSize, number> = {\n xxs: 6, xs: 7, sm: 8, md: 10, lg: 12, xl: 14, xxl: 16, xxxl: 20,\n};\n\n/** Toggle track dimensions (trackW, trackH, thumb) */\nexport const DUI_TOGGLE: Record<DuiSize, { trackW: number; trackH: number; thumb: number }> = {\n xxs: { trackW: 18, trackH: 10, thumb: 8 },\n xs: { trackW: 24, trackH: 14, thumb: 10 },\n sm: { trackW: 28, trackH: 16, thumb: 12 },\n md: { trackW: 36, trackH: 20, thumb: 16 },\n lg: { trackW: 44, trackH: 24, thumb: 20 },\n xl: { trackW: 52, trackH: 28, thumb: 24 },\n xxl: { trackW: 60, trackH: 32, thumb: 28 },\n xxxl: { trackW: 68, trackH: 36, thumb: 32 },\n};\n\n/**\n * Checkbox box and inner icon sizes (px).\n * Centralised here so components never define ad-hoc local maps.\n */\nexport const DUI_CHECKBOX: Record<DuiSize, { box: number; icon: number }> = {\n xxs: { box: 10, icon: 6 },\n xs: { box: 12, icon: 8 },\n sm: { box: 14, icon: 9 },\n md: { box: 16, icon: 11 },\n lg: { box: 18, icon: 13 },\n xl: { box: 20, icon: 15 },\n xxl: { box: 22, icon: 17 },\n xxxl: { box: 26, icon: 20 },\n};\n\n/** Icon sizes (px) — used for icons inside buttons, inputs, menus */\nexport const DUI_ICON_SIZE: Record<DuiSize, number> = {\n xxs: 8, xs: 10, sm: 11, md: 12, lg: 14, xl: 16, xxl: 18, xxxl: 20,\n};\n\n/** Font sizes (px) */\nexport const DUI_FONT_SIZE: Record<DuiSize, string> = {\n xxs: '8px', xs: '9px', sm: '10px', md: '11px', lg: '12px', xl: '13px', xxl: '14px', xxxl: '16px',\n};\n\n/** Vertical padding (px) for dropdown / select option rows */\nexport const DUI_SELECT_ITEM_PY: Record<DuiSize, string> = {\n xxs: '2px', xs: '3px', sm: '4px', md: '5px', lg: '7px', xl: '9px', xxl: '11px', xxxl: '14px',\n};\n\n/** Editor (Monaco) font sizes (px) — larger than DUI_FONT_SIZE since code is harder to read at label sizes */\nexport const DUI_EDITOR_FONT_SIZE: Record<DuiSize, number> = {\n xxs: 10, xs: 11, sm: 11, md: 12, lg: 13, xl: 14, xxl: 15, xxxl: 16,\n};\n\n/** Horizontal padding (px) */\nexport const DUI_PADDING_X: Record<DuiSize, string> = {\n xxs: '4px', xs: '6px', sm: '8px', md: '10px', lg: '12px', xl: '16px', xxl: '20px', xxxl: '24px',\n};\n\n/** Gap between icon and text inside a component (px) */\nexport const DUI_GAP: Record<DuiSize, string> = {\n xxs: '2px', xs: '3px', sm: '4px', md: '5px', lg: '6px', xl: '8px', xxl: '10px', xxxl: '12px',\n};\n\n/** Border-radius presets (px) */\nexport const DUI_RADIUS_MAP: Record<DuiRadius, string> = {\n none: '0px',\n sm: '3px',\n md: '4px',\n lg: '6px',\n full: '999px',\n};\n\n/** Default border-radius per size */\nexport const DUI_DEFAULT_RADIUS: Record<DuiSize, string> = {\n xxs: '2px',\n xs: '3px', // DUI_RADIUS_MAP.sm\n sm: '4px', // DUI_RADIUS_MAP.md\n md: '4px', // DUI_RADIUS_MAP.md\n lg: '6px', // DUI_RADIUS_MAP.lg\n xl: '6px', // DUI_RADIUS_MAP.lg\n xxl: '8px',\n xxxl: '10px',\n};\n\n/** Width presets for DUI components. */\nexport const DUI_WIDTH_MAP: Record<DuiWidth, string> = {\n sm: '80px',\n md: '120px',\n default: 'auto',\n lg: '200px',\n fullWidth: '100%',\n maxContent: 'max-content',\n fw: '100%',\n mx: 'max-content',\n};\n","import { createContext, useContext, useMemo, type ReactNode } from 'react';\nimport type { DuiConfig, DuiSize, DuiRadius, DuiWidth, DuiFontStyle } from './DuiTypes';\nimport { DUI_RADIUS_MAP, DUI_DEFAULT_RADIUS, DUI_WIDTH_MAP } from './DuiTokens';\n\nconst DEFAULT_CONFIG: DuiConfig = { size: 'md' };\n\nconst DuiCtx = createContext<DuiConfig>(DEFAULT_CONFIG);\n\n/**\n * Wrap any subtree to give all DUI components a shared set of default props.\n * Every prop is optional and falls back to its system default when omitted.\n *\n * @example\n * <DuiProvider size=\"sm\" borderRadius=\"lg\" chipVariant=\"quiet\">\n * <ButtonView>Save</ButtonView>\n * </DuiProvider>\n */\nexport function DuiProvider({\n size = 'md',\n width,\n borderRadius,\n color,\n defaultColor,\n activeColor,\n fontStyle,\n chipVariant,\n children,\n}: {\n size?: DuiSize;\n width?: DuiWidth;\n borderRadius?: DuiRadius | number;\n color?: string;\n defaultColor?: string;\n activeColor?: string;\n fontStyle?: DuiFontStyle;\n /** The look every `BadgeChipView` in the subtree takes. */\n chipVariant?: string;\n children: ReactNode;\n}) {\n const value = useMemo<DuiConfig>(\n () => ({ size, width, borderRadius, color, defaultColor, activeColor, fontStyle, chipVariant }),\n [size, width, borderRadius, color, defaultColor, activeColor, fontStyle, chipVariant]\n );\n return <DuiCtx.Provider value={value}>{children}</DuiCtx.Provider>;\n}\n\n/**\n * Returns the current DUI config. Components call this and fall back to the\n * context values when no explicit prop is passed.\n *\n * @example\n * const { size } = useDui();\n * const resolved = sizeProp ?? size;\n */\nexport function useDui(): DuiConfig {\n return useContext(DuiCtx);\n}\n\n/**\n * Resolves the border-radius value from either a DuiConfig override\n * (preset name or raw px number) or the size-derived default.\n */\nexport function resolveBorderRadius(\n override: DuiRadius | number | undefined,\n sizeFallback: string\n): string {\n if (override === undefined) return sizeFallback;\n if (typeof override === 'number') return `${override}px`;\n return DUI_RADIUS_MAP[override];\n}\n\n/**\n * Resolves a width preset to a CSS string.\n * Falls back to `'auto'` when no width is set.\n */\nexport function resolveWidth(width: DuiWidth | undefined): string {\n if (!width) return 'auto';\n return DUI_WIDTH_MAP[width];\n}\n\n/**\n * Convenience hook — returns resolved border-radius and width strings\n * plus raw color/style overrides from the current DUI context.\n * Components call this to merge context defaults with their own prop overrides.\n */\nexport function useDuiStyle(sizeFallback: string): {\n borderRadius: string;\n width: string;\n color: string | undefined;\n defaultColor: string | undefined;\n activeColor: string | undefined;\n fontStyle: DuiFontStyle | undefined;\n} {\n const ctx = useDui();\n return useMemo(\n () => ({\n borderRadius: resolveBorderRadius(ctx.borderRadius, sizeFallback),\n width: resolveWidth(ctx.width),\n color: ctx.color,\n defaultColor: ctx.defaultColor,\n activeColor: ctx.activeColor,\n fontStyle: ctx.fontStyle,\n }),\n [ctx, sizeFallback]\n );\n}\n","import type { DuiSize } from './DuiTypes';\nimport { useDui } from './DuiContext';\nimport { DUI_EDITOR_FONT_SIZE } from './DuiTokens';\n\nexport interface EditorBaseConfig {\n fontSize: number;\n}\n\n/** Reserved for future editor-level overrides (e.g. minLines, theme override). */\nexport interface EditorContainerProps {\n // intentionally empty — add overrides here as the system grows\n}\n\n/**\n * Category base for EditorView (Monaco-based editors).\n * Reads the DuiProvider size context so every editor automatically inherits\n * the app-level size without a local prop. Pass `sizeProp` to override per-instance.\n */\nexport function useEditorBase(\n sizeProp?: DuiSize,\n _overrides: EditorContainerProps = {},\n): EditorBaseConfig {\n const ctx = useDui();\n const s = sizeProp ?? ctx.size;\n return {\n fontSize: DUI_EDITOR_FONT_SIZE[s],\n };\n}\n","import { useState, useRef, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { ChevronRightIcon } from '../../../icons';\nimport './ContextMenuView.css';\n\nexport interface ContextMenuItem {\n id: string;\n label: string;\n /**\n * A line under the label, for a menu whose entries need explaining.\n *\n * Most items do not want one — a menu of verbs reads faster without a\n * paragraph under each. It earns its place where choosing wrongly costs\n * something and the label alone cannot say so: an action that pauses a\n * process, or one that is unavailable and owes the reader a reason.\n */\n description?: string;\n icon?: React.ReactNode;\n iconColor?: string;\n shortcut?: string;\n danger?: boolean;\n disabled?: boolean;\n separator?: boolean;\n children?: ContextMenuItem[];\n onClick?: () => void;\n}\n\nexport type ContextMenuWidth = 'auto' | 'sm' | 'md' | 'lg' | number;\n\nexport interface ContextMenuViewProps {\n /**\n * A stable hook for tests and automation.\n *\n * Lands on this component's root element as `data-testid`. Worth setting on\n * anything a test drives: several dui inputs render a `contenteditable` div\n * with a decorative placeholder span, which neither `getByPlaceholder` nor\n * `getByRole` reliably finds.\n */\n testId?: string;\n\n items: ContextMenuItem[];\n anchorEl: HTMLElement | null;\n open: boolean;\n onClose: () => void;\n width?: ContextMenuWidth;\n rounded?: boolean;\n matchAnchorWidth?: boolean;\n position?: { x: number; y: number };\n align?: 'auto' | 'left' | 'right';\n}\n\nconst WIDTH_MAP: Record<string, string> = { auto: 'max-content', sm: '140px', md: '180px', lg: '220px' };\n\nfunction resolveWidth(w: ContextMenuWidth | undefined): string {\n if (!w || w === 'auto') return 'max-content';\n if (typeof w === 'number') return `${w}px`;\n return WIDTH_MAP[w] || 'max-content';\n}\n\n/** Where a submenu stops growing when nothing else decides for it. */\nconst SUBMENU_FALLBACK_MAX = 288;\n\n/**\n * How wide a submenu may get.\n *\n * A submenu is `max-content`, which has no opinion about how wide is too wide:\n * one whose items carry descriptions grows to the longest sentence in it and\n * lays every entry out on a single long line. Capping it makes the text wrap.\n *\n * The cap follows the parent rather than being a constant, because a submenu\n * noticeably wider than the menu it came from reads as a different surface\n * rather than a continuation of one. A little slack, since a submenu carries a\n * chevron's worth of indent the parent does not.\n */\nfunction submenuMaxWidth(w: ContextMenuWidth | undefined): number {\n if (typeof w === 'number') return Math.round(w * 1.07);\n return SUBMENU_FALLBACK_MAX;\n}\n\n// ─── MenuList — manages which sibling submenu is open ────────────────────────\n\nfunction MenuList({\n items,\n onClose,\n rounded,\n subMax,\n}: {\n items: ContextMenuItem[];\n onClose: () => void;\n rounded: boolean;\n /** Ceiling for any submenu opened from this list. */\n subMax: number;\n}) {\n const [activeSubId, setActiveSubId] = useState<string | null>(null);\n return (\n <>\n {items.map(item => (\n <MenuItemRow\n key={item.id}\n item={item}\n onClose={onClose}\n rounded={rounded}\n subMax={subMax}\n activeSubId={activeSubId}\n onSubOpen={setActiveSubId}\n />\n ))}\n </>\n );\n}\n\n// ─── Recursive menu item row ──────────────────────────────────────────────────\n\nfunction MenuItemRow({\n item,\n onClose,\n rounded,\n subMax,\n activeSubId,\n onSubOpen,\n}: {\n item: ContextMenuItem;\n onClose: () => void;\n rounded: boolean;\n subMax: number;\n activeSubId: string | null;\n onSubOpen: (id: string | null) => void;\n}) {\n const rowRef = useRef<HTMLDivElement>(null);\n const subRef = useRef<HTMLDivElement>(null);\n\n if (item.separator) {\n return <div style={{ height: '1px', background: 'var(--color-surface-border)', margin: '4px 0' }} />;\n }\n\n const hasSubmenu = !!(item.children && item.children.length > 0);\n const danger = item.danger;\n const isOpen = hasSubmenu && activeSubId === item.id;\n\n // Hovering a row: open its submenu (closes any sibling), or close any open sibling if no submenu\n const handleRowEnter = () => {\n onSubOpen(hasSubmenu ? item.id : null);\n };\n\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (item.disabled) return;\n if (hasSubmenu) { onSubOpen(item.id); return; }\n item.onClick?.();\n onClose();\n };\n\n // Position submenu portal after it mounts — start hidden, reveal after placement\n useEffect(() => {\n if (!isOpen || !rowRef.current || !subRef.current) return;\n const sub = subRef.current;\n sub.style.visibility = 'hidden';\n\n const raf = requestAnimationFrame(() => {\n if (!rowRef.current || !subRef.current) return;\n const row = rowRef.current.getBoundingClientRect();\n sub.style.top = `${row.top - 4}px`;\n sub.style.left = `${row.right + 4}px`;\n\n const subRect = sub.getBoundingClientRect();\n if (subRect.right > window.innerWidth - 8) {\n sub.style.left = `${row.left - subRect.width - 4}px`;\n }\n if (subRect.bottom > window.innerHeight - 8) {\n sub.style.top = `${window.innerHeight - subRect.height - 8}px`;\n }\n sub.style.visibility = 'visible';\n });\n\n return () => cancelAnimationFrame(raf);\n }, [isOpen]);\n\n return (\n <div\n ref={rowRef}\n onMouseEnter={handleRowEnter}\n style={{ position: 'relative' }}\n >\n <div\n onClick={handleClick}\n className={`dui_ctx-menu__item${danger ? ' dui_ctx-menu__item--danger' : ''}${item.disabled ? ' dui_ctx-menu__item--disabled' : ''}`}\n style={{\n display: 'flex',\n // A described item is two lines, so the icon and chevron align to the\n // label rather than floating against the middle of the block.\n alignItems: item.description ? 'flex-start' : 'center',\n gap: '8px',\n padding: '8px 10px',\n borderRadius: rounded ? '5px' : '0px',\n fontSize: '12px',\n fontWeight: 500,\n cursor: item.disabled ? 'default' : 'pointer',\n // A disabled item that explains itself has to stay readable: the\n // reason is the reason it is disabled, and dimming it to 45% makes\n // the one thing worth reading the hardest thing to read.\n opacity: item.disabled ? (item.description ? 0.75 : 0.45) : 1,\n color: danger ? 'var(--color-error)' : 'var(--color-text-secondary)',\n userSelect: 'none',\n }}\n >\n {item.icon && (\n <span style={{ width: '14px', display: 'flex', alignItems: 'center', flexShrink: 0, marginTop: item.description ? '1px' : 0, color: item.iconColor ?? (danger ? 'var(--color-error)' : 'var(--color-text-muted)') }}>\n {item.icon}\n </span>\n )}\n {item.description ? (\n <span style={{ flex: 1, minWidth: 0, display: 'flex', flexDirection: 'column', gap: '2px' }}>\n <span style={{ display: 'flex', alignItems: 'baseline', gap: '8px' }}>\n <span style={{ flex: 1, whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>{item.label}</span>\n {item.shortcut && !hasSubmenu && (\n <span style={{ fontSize: '10px', color: 'var(--color-text-muted)', flexShrink: 0 }}>{item.shortcut}</span>\n )}\n </span>\n <span style={{ fontSize: '10.5px', fontWeight: 400, lineHeight: 1.45, color: 'var(--color-text-muted)', whiteSpace: 'normal' }}>\n {item.description}\n </span>\n </span>\n ) : (\n <>\n <span style={{ flex: 1, whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>{item.label}</span>\n {item.shortcut && !hasSubmenu && (\n <span style={{ fontSize: '10px', color: 'var(--color-text-muted)', marginLeft: '12px', flexShrink: 0 }}>{item.shortcut}</span>\n )}\n </>\n )}\n {hasSubmenu && <ChevronRightIcon size={10} style={{ color: 'var(--color-text-muted)', flexShrink: 0, marginLeft: '8px', marginTop: item.description ? '3px' : 0 }} />}\n </div>\n\n {/* Recursive submenu — portalled; each level has its own sibling-coordination state via MenuList */}\n {hasSubmenu && isOpen && createPortal(\n <div\n ref={subRef}\n data-dui-ctx-menu=\"true\"\n style={{\n position: 'fixed',\n visibility: 'hidden',\n zIndex: 99999,\n background: 'var(--color-elevated, var(--color-surface-bg))',\n border: '1px solid var(--color-surface-border)',\n borderRadius: rounded ? '7px' : '0px',\n padding: '4px',\n minWidth: '200px',\n width: 'max-content',\n /*\n Capped, because `max-content` has no opinion about how wide is\n too wide. A submenu of plain labels never reaches this; one whose\n items carry descriptions would otherwise grow to the longest\n sentence in it and lay every entry out on a single long line.\n With a ceiling, the text wraps instead.\n */\n maxWidth: `${subMax}px`,\n boxShadow: '0 12px 40px rgba(0,0,0,.35)',\n }}\n >\n <MenuList items={item.children!} onClose={onClose} rounded={rounded}\n subMax={subMax} />\n </div>,\n document.body\n )}\n </div>\n );\n}\n\n// ─── Main export ─────────────────────────────────────────────────────────────\n\nexport function ContextMenuView({ testId,\n items,\n anchorEl,\n open,\n onClose,\n width = 'auto',\n rounded = true,\n matchAnchorWidth = false,\n position,\n align = 'auto',\n}: ContextMenuViewProps) {\n const menuRef = useRef<HTMLDivElement>(null);\n\n // Close on outside click — not on any DUI menu portal element\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (menuRef.current?.contains(target)) return;\n if (anchorEl?.contains(target)) return;\n if (target.closest?.('[data-dui-ctx-menu]')) return;\n onClose();\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open, anchorEl, onClose]);\n\n // Escape + shortcut keys\n useEffect(() => {\n if (!open) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') { onClose(); return; }\n const key = e.key.toUpperCase();\n const matched = items.find(item => {\n if (item.disabled || item.separator || !item.shortcut || !item.onClick) return false;\n if (item.shortcut === '⌫') return e.key === 'Backspace' || e.key === 'Delete';\n return item.shortcut.toUpperCase() === key;\n });\n if (matched) { e.preventDefault(); matched.onClick!(); onClose(); }\n };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [open, onClose, items]);\n\n // Position the menu\n useEffect(() => {\n if (!open || !menuRef.current) return;\n const menu = menuRef.current;\n const place = () => {\n const menuW = menu.scrollWidth;\n const menuH = menu.scrollHeight;\n\n let left: number, top: number;\n let anchorTop = 0;\n\n if (position) {\n left = position.x;\n top = position.y;\n anchorTop = position.y;\n } else if (anchorEl) {\n const r = anchorEl.getBoundingClientRect();\n if (align === 'right') {\n left = r.right - menuW;\n } else if (align === 'left') {\n left = r.left;\n } else {\n left = r.left + menuW <= window.innerWidth - 8 ? r.left : r.right - menuW;\n }\n top = r.bottom + 4;\n anchorTop = r.top;\n if (matchAnchorWidth) menu.style.width = r.width + 'px';\n } else {\n return;\n }\n\n if (left + menuW > window.innerWidth - 8) left = Math.max(8, window.innerWidth - menuW - 8);\n if (left < 8) left = 8;\n if (top + menuH > window.innerHeight - 8) top = Math.max(8, anchorTop - menuH - 4);\n\n menu.style.left = left + 'px';\n menu.style.top = top + 'px';\n };\n place();\n const raf = requestAnimationFrame(place);\n window.addEventListener('scroll', place, { passive: true, capture: true });\n window.addEventListener('resize', place, { passive: true });\n return () => {\n cancelAnimationFrame(raf);\n window.removeEventListener('scroll', place, { capture: true });\n window.removeEventListener('resize', place);\n };\n }, [open, anchorEl, position, matchAnchorWidth, align]);\n\n if (!open) return null;\n\n const resolvedWidth = resolveWidth(width);\n\n return createPortal(\n <div data-testid={testId}\n ref={menuRef}\n data-dui-ctx-menu=\"true\"\n style={{\n position: 'fixed',\n zIndex: 99998,\n width: resolvedWidth,\n minWidth: '140px',\n background: 'var(--color-elevated, var(--color-surface-bg))',\n border: '1px solid var(--color-surface-border)',\n borderRadius: rounded ? '8px' : '0px',\n padding: '4px',\n boxShadow: '0 12px 40px rgba(0,0,0,.35), 0 0 0 1px var(--color-panel-border, rgba(255,255,255,.04))',\n animation: 'dui_menu-in 120ms ease-out',\n }}\n >\n <MenuList items={items} onClose={onClose} rounded={rounded}\n subMax={submenuMaxWidth(width)} />\n </div>,\n document.body\n );\n}\n","import { useSyncExternalStore, type ComponentType } from 'react';\n\n/**\n * Shared registry Monaco-backed components register into.\n *\n * The main package entry never references '@monaco-editor/react' or\n * 'monaco-editor' — not even via lazy()/dynamic import, since bundlers still\n * resolve every module reachable from an always-loaded entry point regardless\n * of runtime conditionals (verified empirically; a computed dynamic-import\n * specifier avoids that resolution but then can't be turned into a loadable\n * chunk URL either, and fails at runtime with \"Failed to resolve module\n * specifier\" in the browser).\n *\n * Instead, '@salilvnair/dui/monaco-setup' — a separate subpath only reached\n * when a consumer explicitly imports it — statically imports the real\n * Monaco-backed implementations (safe: importing that subpath is already an\n * explicit opt-in requiring Monaco to be installed) and registers them here.\n * EditorView/DiffEditorView read from this registry and fall back to their\n * lightweight implementation until something has registered.\n */\ntype MonacoRuntimeStatus = 'idle' | 'ready' | 'unavailable';\n\nlet status: MonacoRuntimeStatus = 'idle';\nlet editorImpl: ComponentType<any> | null = null;\nlet diffEditorImpl: ComponentType<any> | null = null;\nconst listeners = new Set<() => void>();\n\nfunction notify() {\n for (const l of listeners) l();\n}\n\nexport function getMonacoRuntimeStatus(): MonacoRuntimeStatus {\n return status;\n}\n\nexport function registerMonacoEditorImpl(impl: ComponentType<any>) {\n editorImpl = impl;\n}\n\nexport function registerMonacoDiffEditorImpl(impl: ComponentType<any>) {\n diffEditorImpl = impl;\n}\n\nexport function getMonacoEditorImpl(): ComponentType<any> | null {\n return editorImpl;\n}\n\nexport function getMonacoDiffEditorImpl(): ComponentType<any> | null {\n return diffEditorImpl;\n}\n\nexport function markMonacoReady() {\n status = 'ready';\n notify();\n}\n\nexport function markMonacoUnavailable() {\n status = 'unavailable';\n notify();\n}\n\nexport function useMonacoRuntimeStatus(): MonacoRuntimeStatus {\n return useSyncExternalStore(\n (cb) => {\n listeners.add(cb);\n return () => listeners.delete(cb);\n },\n getMonacoRuntimeStatus,\n getMonacoRuntimeStatus,\n );\n}\n","import { useState } from 'react';\nimport { ContextMenuView, type ContextMenuItem } from '../modal/ContextMenuView';\n\n/**\n * Shared render shell for both the Monaco-backed and fallback editor\n * implementations — pure DUI chrome, no editor-engine dependency either way.\n */\nexport function EditorShell({\n bordered, containerHeight, children, contextMenuMode = 'native', contextMenuItems,\n itemsAt, accentColor,\n}: {\n bordered: boolean;\n containerHeight: string;\n children: React.ReactNode;\n contextMenuMode?: 'native' | 'dui' | 'none';\n contextMenuItems?: ContextMenuItem[];\n /**\n * Items that depend on where the click landed, asked for at right-click.\n *\n * A path menu cannot be built ahead of time: which key or tag you are on is\n * the whole question, and it is only answered by the coordinates of the\n * click. Static `contextMenuItems` follow whatever this returns.\n */\n itemsAt?: (x: number, y: number) => ContextMenuItem[];\n accentColor?: string;\n}) {\n const [ctxPos, setCtxPos] = useState<{ x: number; y: number } | null>(null);\n const [atPoint, setAtPoint] = useState<ContextMenuItem[]>([]);\n const isDui = contextMenuMode === 'dui';\n\n return (\n <div\n className={`dui-editor-shell relative${bordered ? ' rounded border border-[var(--color-surface-border)]' : ''}`}\n style={{ height: containerHeight, width: '100%', position: 'relative', ...(accentColor ? { '--editor-accent': accentColor } as React.CSSProperties : {}) }}\n /*\n Capture, not bubble.\n\n Monaco handles `contextmenu` on its own DOM and stops it there — it\n does that whether or not its menu is enabled, so with\n `contextMenuMode='dui'` the event died inside the editor and this\n handler never ran: no native menu, no DUI menu, nothing at all on\n right-click. Capturing runs this on the way down, before Monaco sees\n it.\n */\n onContextMenuCapture={isDui ? (e) => {\n e.preventDefault();\n setAtPoint(itemsAt?.(e.clientX, e.clientY) ?? []);\n setCtxPos({ x: e.clientX, y: e.clientY });\n } : undefined}\n >\n {children}\n {isDui && (atPoint.length > 0 || contextMenuItems) && (\n <ContextMenuView\n open={!!ctxPos}\n anchorEl={null}\n position={ctxPos ?? undefined}\n items={[...atPoint, ...(contextMenuItems ?? [])]}\n onClose={() => setCtxPos(null)}\n width={240}\n />\n )}\n </div>\n );\n}\n","/**\n * The path to whatever the cursor is sitting on.\n *\n * Reading a value out of a response and then writing the expression that\n * selects it is a transcription job: you can see `id` on screen and still have\n * to count array indices and retype four ancestor names to say where it lives.\n * Right-click, and the editor says it.\n *\n * ── Why a scanner rather than a parse ──\n *\n * `JSON.parse` gives a tree with no offsets, so it cannot answer \"which node is\n * at character 4,812\". It also refuses the case this is most useful in: a body\n * being edited is malformed for as long as you are typing it, and a feature\n * that stops working while you type is one you stop reaching for. A scanner\n * tracks the enclosing stack as it goes and can answer from wherever it got to,\n * whether or not the rest of the document is well formed.\n */\n\n/** A brace-and-bracket frame. `key` is the member currently being read. */\ninterface JsonFrame {\n kind: 'object' | 'array';\n key?: string;\n index: number;\n}\n\n/** Reads a JSON string literal starting at the opening quote. */\nfunction readString(text: string, start: number): { value: string; end: number } {\n let out = '';\n let i = start + 1;\n while (i < text.length) {\n const c = text[i];\n if (c === '\\\\') {\n // Only the escapes that can appear inside a key matter for the path; the\n // rest are copied through, because an unrecognised escape in a value\n // must not desynchronise the scan.\n const n = text[i + 1];\n out += n === 'n' ? '\\n' : n === 't' ? '\\t' : n === 'r' ? '\\r'\n : n === 'u' ? String.fromCharCode(parseInt(text.slice(i + 2, i + 6), 16) || 0)\n : n ?? '';\n i += n === 'u' ? 6 : 2;\n continue;\n }\n if (c === '\"') return { value: out, end: i };\n out += c;\n i++;\n }\n // Unterminated — the document is mid-edit. Treat the rest as the string.\n return { value: out, end: text.length };\n}\n\n/** A key that is a plain identifier reads better as `.name` than `[\"name\"]`. */\nconst BARE = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\n\nfunction renderJson(stack: JsonFrame[]): string {\n let out = '$';\n for (const f of stack) {\n if (f.kind === 'array') {\n out += `[${f.index}]`;\n } else if (f.key !== undefined) {\n out += BARE.test(f.key) ? `.${f.key}` : `[${JSON.stringify(f.key)}]`;\n }\n }\n return out;\n}\n\n/**\n * The JSONPath of the value at `offset`, in the `$.a.b[0].c` dialect every\n * JSONPath implementation accepts.\n *\n * On a key, the path names that key — asking for the path of `\"total\"` and\n * getting its parent's path back would be the wrong answer to the obvious\n * question.\n */\nexport function jsonPathAt(text: string, offset: number): string | undefined {\n const stack = jsonStackAt(text, offset);\n return stack && renderJson(stack);\n}\n\n/**\n * Every level from the root down to the cursor.\n *\n * The innermost path is the one usually wanted and not the one always wanted:\n * standing on `id` you may want the object that holds it, or the array, or the\n * collection above that — and each is a different assertion to write. Offering\n * the whole chain costs one submenu and saves re-deriving an ancestor by hand.\n */\nexport function jsonPathLevels(text: string, offset: number): string[] {\n const stack = jsonStackAt(text, offset);\n if (!stack) return [];\n const out: string[] = [];\n for (let i = 0; i <= stack.length; i++) {\n const path = renderJson(stack.slice(0, i));\n // A frame contributes nothing until its key is read — between a brace and\n // the first key, say — and a level identical to its parent is not a level.\n if (path !== out[out.length - 1]) out.push(path);\n }\n return out;\n}\n\nfunction jsonStackAt(text: string, offset: number): JsonFrame[] | undefined {\n if (!text) return undefined;\n const at = Math.max(0, Math.min(offset, text.length));\n const stack: JsonFrame[] = [];\n let i = 0;\n\n while (i < text.length) {\n if (i >= at) break;\n const c = text[i]!;\n\n if (c === '\"') {\n const { value, end } = readString(text, i);\n const top = stack[stack.length - 1];\n // A string followed by a colon is a key, not a value.\n let j = end + 1;\n while (j < text.length && /\\s/.test(text[j]!)) j++;\n if (text[j] === ':' && top?.kind === 'object') top.key = value;\n // The cursor inside this token means the answer is the stack as it\n // stands, with the key above already applied if it was one.\n if (at <= end) return stack;\n i = end + 1;\n continue;\n }\n\n if (c === '{') { stack.push({ kind: 'object', index: 0 }); i++; continue; }\n if (c === '[') { stack.push({ kind: 'array', index: 0 }); i++; continue; }\n if (c === '}' || c === ']') { stack.pop(); i++; continue; }\n if (c === ',') {\n const top = stack[stack.length - 1];\n if (top?.kind === 'array') top.index++;\n // A new member has no key until its key is read; carrying the previous\n // one would name the wrong field for anything between the comma and it.\n else if (top) top.key = undefined;\n i++;\n continue;\n }\n i++;\n }\n\n return stack;\n}\n\n// ── XML ─────────────────────────────────────────────────────────────────────\n\ninterface XmlFrame {\n name: string;\n /** How many of each child name have been opened under this element. */\n counts: Map<string, number>;\n /** This element's position among its same-named siblings, 1-based. */\n index: number;\n}\n\n/**\n * Emitted only past the first, which is what every browser's \"Copy XPath\"\n * does: `/a/b` and `/a/b[1]` select the same node, and the index is noise\n * until there is a second one to tell apart.\n */\nfunction renderXml(stack: XmlFrame[]): string {\n return stack.map(f => (f.index > 1 ? `/${f.name}[${f.index}]` : `/${f.name}`)).join('');\n}\n\n/** Skips a construct that carries no element, returning the index past it. */\nfunction skipTo(text: string, from: number, close: string): number {\n const end = text.indexOf(close, from);\n return end === -1 ? text.length : end + close.length;\n}\n\n/**\n * The XPath of the element containing `offset`.\n *\n * Attributes and text nodes resolve to their element rather than to\n * `/a/b/@id` or `/a/b/text()`: the element is what the path is nearly always\n * wanted for, and a path that sometimes ends in an attribute is one you have\n * to check before pasting.\n */\nexport function xPathAt(text: string, offset: number): string | undefined {\n const stack = xmlStackAt(text, offset);\n return stack?.length ? renderXml(stack) : undefined;\n}\n\n/**\n * Every enclosing element, outermost first.\n *\n * The same reason as JSON, and more often wanted: an XPath is usually written\n * against a container — `/order/items` — rather than against the leaf you\n * happened to right-click.\n */\nexport function xPathLevels(text: string, offset: number): string[] {\n const stack = xmlStackAt(text, offset) ?? [];\n return stack.map((_, i) => renderXml(stack.slice(0, i + 1)));\n}\n\nfunction xmlStackAt(text: string, offset: number): XmlFrame[] | undefined {\n if (!text) return undefined;\n const at = Math.max(0, Math.min(offset, text.length));\n const stack: XmlFrame[] = [];\n /*\n Root-level siblings need somewhere to be counted.\n\n A well-formed document has one root, but a fragment — which is what half of\n a body being edited is — can have several, and they still have to be told\n apart. Local to the call: as module state it would carry counts from the\n last document into this one and index the first root as [2].\n */\n const rootCounts = new Map<string, number>();\n let i = 0;\n\n while (i < text.length && i < at) {\n if (text[i] !== '<') { i++; continue; }\n\n // Declarations, comments and CDATA hold no elements, and CDATA in\n // particular may contain '<' that would otherwise read as a tag.\n if (text.startsWith('<!--', i)) { i = skipTo(text, i, '-->'); continue; }\n if (text.startsWith('<![CDATA[', i)) { i = skipTo(text, i, ']]>'); continue; }\n if (text.startsWith('<?', i)) { i = skipTo(text, i, '?>'); continue; }\n if (text.startsWith('<!', i)) { i = skipTo(text, i, '>'); continue; }\n\n const close = text.indexOf('>', i);\n if (close === -1) break; // a tag being typed\n const inner = text.slice(i + 1, close);\n\n if (inner.startsWith('/')) {\n // A closing tag containing the cursor still belongs to its element, so\n // the path is reported before the pop.\n if (at <= close) return stack;\n stack.pop();\n i = close + 1;\n continue;\n }\n\n const name = inner.match(/^[^\\s/>]+/)?.[0];\n if (!name) { i = close + 1; continue; }\n\n const parent = stack[stack.length - 1];\n const counts = parent ? parent.counts : rootCounts;\n const index = (counts.get(name) ?? 0) + 1;\n counts.set(name, index);\n\n const selfClosing = inner.endsWith('/');\n stack.push({ name, counts: new Map(), index });\n\n // The cursor inside the opening tag — on the name or an attribute — is on\n // this element, which has just been pushed.\n if (at <= close) return stack;\n if (selfClosing) stack.pop();\n i = close + 1;\n }\n\n return stack;\n}\n"],"names":["DUI_HEIGHT","DUI_CHIP_HEIGHT","DUI_CELL_SIZE","DUI_RING_DIAMETER","DUI_THICKNESS","DUI_AVATAR_DIAMETER","DUI_DOT_SIZE","DUI_TOGGLE","DUI_CHECKBOX","DUI_ICON_SIZE","DUI_FONT_SIZE","DUI_SELECT_ITEM_PY","DUI_EDITOR_FONT_SIZE","DUI_PADDING_X","DUI_GAP","DUI_RADIUS_MAP","DUI_DEFAULT_RADIUS","DUI_WIDTH_MAP","DEFAULT_CONFIG","DuiCtx","createContext","DuiProvider","size","width","borderRadius","color","defaultColor","activeColor","fontStyle","chipVariant","children","value","useMemo","jsx","useDui","useContext","resolveBorderRadius","override","sizeFallback","resolveWidth","useDuiStyle","ctx","useEditorBase","sizeProp","_overrides","s","WIDTH_MAP","w","SUBMENU_FALLBACK_MAX","submenuMaxWidth","MenuList","items","onClose","rounded","subMax","activeSubId","setActiveSubId","useState","Fragment","item","MenuItemRow","onSubOpen","rowRef","useRef","subRef","hasSubmenu","danger","isOpen","handleRowEnter","handleClick","e","_a","useEffect","sub","raf","row","subRect","jsxs","ChevronRightIcon","createPortal","ContextMenuView","testId","anchorEl","open","matchAnchorWidth","position","align","menuRef","handler","target","_b","key","matched","menu","place","menuW","menuH","left","top","anchorTop","r","resolvedWidth","status","editorImpl","diffEditorImpl","listeners","notify","l","getMonacoRuntimeStatus","registerMonacoEditorImpl","impl","registerMonacoDiffEditorImpl","getMonacoEditorImpl","getMonacoDiffEditorImpl","markMonacoReady","useMonacoRuntimeStatus","useSyncExternalStore","cb","EditorShell","bordered","containerHeight","contextMenuMode","contextMenuItems","itemsAt","accentColor","ctxPos","setCtxPos","atPoint","setAtPoint","isDui","readString","text","start","out","i","c","n","BARE","renderJson","stack","f","jsonPathAt","offset","jsonStackAt","jsonPathLevels","path","at","end","j","renderXml","skipTo","from","close","xPathAt","xmlStackAt","xPathLevels","_","rootCounts","inner","name","parent","counts","index","selfClosing"],"mappings":"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"}
|
package/dist/index.html
CHANGED
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>DUI — Daakia UI Component Library</title>
|
|
7
|
-
<script type="module" crossorigin src="./assets/index-
|
|
7
|
+
<script type="module" crossorigin src="./assets/index-ROymQLGX.js"></script>
|
|
8
8
|
<link rel="modulepreload" crossorigin href="./assets/monaco-editor-CN2OOCze.js">
|
|
9
9
|
<link rel="stylesheet" crossorigin href="./assets/monaco-editor-qiF_U8vl.css">
|
|
10
|
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
|
10
|
+
<link rel="stylesheet" crossorigin href="./assets/index-Dylj6yGs.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
13
13
|
<div id="root"></div>
|