@jxsuite/studio 5.0.0 → 5.2.0
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/chunks/{cf-account-picker-fyf63pmy.js → cf-account-picker-h4dab9bq.js} +10 -10
- package/dist/chunks/{cf-settings-71bv5zn9.js → cf-settings-adg74qsk.js} +4 -4
- package/dist/chunks/components-5y78e05d.js +20 -0
- package/dist/chunks/content-source-sgg1sv6n.js +46 -0
- package/dist/chunks/{convert-to-repeater-d0cgnb6d.js → convert-to-repeater-mf1cxgfn.js} +25 -25
- package/dist/chunks/entry-commands-w9qsxa6q.js +42 -0
- package/dist/chunks/{extension-sections-fy7q4fe9.js → extension-sections-c6zwzbre.js} +27 -27
- package/dist/chunks/file-ops-vrpq1jjk.js +47 -0
- package/dist/chunks/{files-ef8fgs3w.js → files-msaf95y6.js} +33 -32
- package/dist/chunks/{format-host-3c33nwr8.js → format-host-f64fnesp.js} +2 -2
- package/dist/chunks/{fs-events-13tj6sex.js → fs-events-3y6y0nrm.js} +6 -6
- package/dist/chunks/git-panel-bv5e22j0.js +50 -0
- package/dist/chunks/grid-view-1p6hsyjx.css +8406 -0
- package/dist/chunks/grid-view-paj67nr5.js +15322 -0
- package/dist/chunks/{iframe-host-jgesd924.js → iframe-host-dh5np8vk.js} +14 -14
- package/dist/chunks/{layers-1nq5evsh.js → layers-1vcfdbet.js} +7 -6
- package/dist/chunks/layers-panel-fksbdg4q.js +40 -0
- package/dist/chunks/{media-picker-2qbetq73.js → media-picker-p49nhqhs.js} +14 -14
- package/dist/chunks/menu-qht48vnc.js +15 -0
- package/dist/chunks/{monaco-buffer-bhy3hb6m.js → monaco-buffer-pykwbm92.js} +3 -3
- package/dist/chunks/{notify-628t0anh.js → notify-42gk8ha1.js} +2 -2
- package/dist/chunks/{parse-0zx14y15.js → parse-reg9eevt.js} +2 -2
- package/dist/chunks/publish-panel-vz23wwmg.js +27 -0
- package/dist/chunks/quick-search-e9rp74m8.js +46 -0
- package/dist/chunks/{references-n553f0e1.js → references-h69xp9zz.js} +4 -4
- package/dist/chunks/right-panel-j97t2yvy.js +45 -0
- package/dist/chunks/{studio-18avnhjp.js → studio-01jeck2y.js} +36 -30
- package/dist/chunks/{studio-9xxz1q69.js → studio-14d9tq4d.js} +9 -9
- package/dist/chunks/{studio-xsykpvsh.js → studio-15f3kxqe.js} +19 -19
- package/dist/chunks/studio-1tbjfqv4.js +146 -0
- package/dist/chunks/{studio-79y5sz51.js → studio-28vs5k2y.js} +2 -2
- package/dist/chunks/{studio-3hxkd92t.js → studio-2mdbbc76.js} +10 -10
- package/dist/chunks/{studio-7r42c6ca.js → studio-3ntvq6cg.js} +5 -5
- package/dist/chunks/{studio-8jn5yhyn.js → studio-4c041r8y.js} +3 -3
- package/dist/chunks/{studio-qahxvnan.js → studio-4r14yzyy.js} +4 -4
- package/dist/chunks/{studio-arfpe389.js → studio-4xmjcrg3.js} +6 -6
- package/dist/chunks/{studio-5523bpzt.js → studio-5nz00bhh.js} +3 -3
- package/dist/chunks/{studio-x3rty6tr.js → studio-5t7ena5z.js} +8 -8
- package/dist/chunks/{studio-5rt7sqa0.js → studio-66arbpc2.js} +13 -19
- package/dist/chunks/{studio-fabxk6r9.js → studio-68fydsrj.js} +15 -15
- package/dist/chunks/{studio-tb3ev01j.js → studio-9j6sfeba.js} +6 -6
- package/dist/chunks/{studio-akbww0j5.js → studio-a1pswps3.js} +38 -38
- package/dist/chunks/{studio-6xa21ej9.js → studio-c04nzbby.js} +2 -2
- package/dist/chunks/{studio-4m0haseg.js → studio-c07s5ckd.js} +4 -4
- package/dist/chunks/{studio-57mf66w2.js → studio-ctm7bhx5.js} +14 -14
- package/dist/chunks/{studio-p1dw8wfw.js → studio-d8z5bajd.js} +14 -10
- package/dist/chunks/{studio-vz68yn9e.js → studio-en82c639.js} +6 -6
- package/dist/chunks/{studio-rkstz940.js → studio-etvx9s2g.js} +21 -12
- package/dist/chunks/{studio-az3zd49t.js → studio-ez11dmdh.js} +127 -37
- package/dist/chunks/{studio-sgdc5pfc.js → studio-hdc2jt3z.js} +4 -4
- package/dist/chunks/{studio-s6z853aq.js → studio-hhskq2mr.js} +24 -23
- package/dist/chunks/{studio-6ewqv390.js → studio-m1p9b6c3.js} +5 -5
- package/dist/chunks/{studio-25hkdrkw.js → studio-mpzwze9x.js} +12 -12
- package/dist/chunks/{studio-8qtrpzr3.js → studio-ncn9e189.js} +7 -7
- package/dist/chunks/{studio-81390n6f.js → studio-nq5yf5mp.js} +1 -1
- package/dist/chunks/{studio-5jy81t3s.js → studio-p6pmwkvh.js} +229 -24
- package/dist/chunks/{studio-3gxv60tn.js → studio-qa7fzxan.js} +4 -4
- package/dist/chunks/{studio-7xptrg0j.js → studio-sar8g54p.js} +8 -8
- package/dist/chunks/studio-t171hxhe.js +23 -0
- package/dist/chunks/{studio-em9nw8eh.js → studio-t3adrr56.js} +20 -17
- package/dist/chunks/{studio-hhvs4sdg.js → studio-vn5hske5.js} +10 -4
- package/dist/chunks/{studio-pm6hgy7r.js → studio-vt0tj32j.js} +29 -42
- package/dist/chunks/{studio-d1ja2x9r.js → studio-wjpgxywa.js} +4 -4
- package/dist/chunks/{studio-q3x06vmj.js → studio-wnsyffg1.js} +2 -2
- package/dist/chunks/{studio-rpyah2ew.js → studio-x10fp4tp.js} +64 -24
- package/dist/chunks/{studio-26d7myd1.js → studio-x72j58vw.js} +4 -4
- package/dist/chunks/{studio-cpvb2ed1.js → studio-y4f9fdge.js} +8 -8
- package/dist/chunks/{studio-erdatzvp.js → studio-ympe0n7a.js} +35 -6
- package/dist/chunks/{studio-y9zedyjn.js → studio-z2smx5ce.js} +2 -2
- package/dist/chunks/studio-zjjde71a.js +148 -0
- package/dist/chunks/{workspace-wrew8zk4.js → workspace-bnw54cha.js} +18 -10
- package/dist/iframe-entry.js +102 -11
- package/dist/studio.css +1 -2
- package/dist/studio.js +1113 -16062
- package/package.json +11 -11
- package/src/canvas/canvas-utils.ts +29 -2
- package/src/commands/command-args.ts +37 -2
- package/src/commands/registry.ts +18 -8
- package/src/commands/run-reported.ts +120 -0
- package/src/editor/shortcuts.ts +11 -23
- package/src/files/components.ts +39 -0
- package/src/files/files.ts +41 -17
- package/src/grid/grid-lazy.ts +59 -0
- package/src/grid/grid-open.ts +20 -3
- package/src/grid/grid-panel.ts +43 -9
- package/src/i18n/i18n-commands.ts +10 -0
- package/src/media/media-open.ts +14 -2
- package/src/packages/pull-package-sync.ts +5 -1
- package/src/panels/ai-panel.ts +5 -2
- package/src/panels/block-action-bar.ts +7 -2
- package/src/panels/i18n-panel.ts +8 -15
- package/src/panels/jump-bar.ts +3 -2
- package/src/panels/pane-context.ts +5 -4
- package/src/panels/pane-grid.ts +100 -10
- package/src/panels/problems-panel.ts +6 -2
- package/src/panels/quick-search.ts +6 -12
- package/src/panels/settings-menu.ts +5 -15
- package/src/panels/tab-drop.ts +220 -0
- package/src/panels/tab-strip.ts +238 -33
- package/src/services/ai-command-tools.ts +78 -8
- package/src/services/ai-models.ts +13 -0
- package/src/services/ai-project-tools.ts +8 -2
- package/src/services/ai-system-prompt.ts +4 -8
- package/src/services/ai-tools.ts +8 -69
- package/src/services/document-assistant.ts +9 -6
- package/src/studio.ts +24 -8
- package/src/surfaces/commandbar.json +35 -24
- package/src/surfaces/commandbar.ts +6 -5
- package/src/surfaces/pane-grid.json +35 -3
- package/src/surfaces/pane-grid.ts +26 -4
- package/src/surfaces/statusbar.ts +2 -1
- package/src/surfaces/tab-strip.json +16 -39
- package/src/surfaces/tab-strip.ts +76 -12
- package/src/tabs/project-config.ts +45 -11
- package/src/ui/ai-credentials-form.ts +12 -1
- package/src/ui/layers.ts +4 -1
- package/src/workspace/pane-derive.ts +7 -5
- package/src/workspace/session.ts +3 -3
- package/src/workspace/workspace.ts +220 -43
- package/styles/shell-frame.css +8 -0
- package/styles/shell-frame.json +4 -0
- package/dist/chunks/components-2w1f35qs.js +0 -18
- package/dist/chunks/content-source-3wqeas45.js +0 -46
- package/dist/chunks/entry-commands-d6g50j7s.js +0 -42
- package/dist/chunks/file-ops-3btj6st0.js +0 -47
- package/dist/chunks/git-panel-4wp2rn9b.js +0 -49
- package/dist/chunks/layers-panel-ar2gh90g.js +0 -40
- package/dist/chunks/menu-rf7n72mf.js +0 -14
- package/dist/chunks/publish-panel-98f7sr3g.js +0 -27
- package/dist/chunks/quick-search-srzz83k2.js +0 -45
- package/dist/chunks/right-panel-rrgx2dn3.js +0 -45
- package/dist/chunks/studio-d055c37e.js +0 -62
|
@@ -5,18 +5,18 @@ import {
|
|
|
5
5
|
toRaw,
|
|
6
6
|
pinClock,
|
|
7
7
|
notify2
|
|
8
|
-
} from "./studio-
|
|
8
|
+
} from "./studio-d8z5bajd.js";
|
|
9
9
|
import {
|
|
10
10
|
getPlatform2
|
|
11
11
|
} from "./studio-6nzaktvy.js";
|
|
12
12
|
import {
|
|
13
13
|
loadedMonaco
|
|
14
|
-
} from "./studio-
|
|
14
|
+
} from "./studio-28vs5k2y.js";
|
|
15
15
|
import {
|
|
16
16
|
projectState,
|
|
17
17
|
setProjectState,
|
|
18
18
|
requireProjectState
|
|
19
|
-
} from "./studio-
|
|
19
|
+
} from "./studio-m1p9b6c3.js";
|
|
20
20
|
import {
|
|
21
21
|
isWellFormedLocale,
|
|
22
22
|
resolveI18n,
|
|
@@ -36,12 +36,12 @@ import {
|
|
|
36
36
|
workspace2,
|
|
37
37
|
focusPane2,
|
|
38
38
|
setWorkspaceProject2
|
|
39
|
-
} from "./studio-
|
|
39
|
+
} from "./studio-ez11dmdh.js";
|
|
40
40
|
import {
|
|
41
41
|
SETTINGS,
|
|
42
42
|
readStoredSetting,
|
|
43
43
|
setSetting
|
|
44
|
-
} from "./studio-
|
|
44
|
+
} from "./studio-z2smx5ce.js";
|
|
45
45
|
import {
|
|
46
46
|
errorMessage2
|
|
47
47
|
} from "./studio-yxa81f45.js";
|
|
@@ -1305,9 +1305,7 @@ function liveConfig() {
|
|
|
1305
1305
|
}
|
|
1306
1306
|
function replaceContents(target, source) {
|
|
1307
1307
|
for (const key of Object.keys(target)) {
|
|
1308
|
-
|
|
1309
|
-
delete target[key];
|
|
1310
|
-
}
|
|
1308
|
+
delete target[key];
|
|
1311
1309
|
}
|
|
1312
1310
|
Object.assign(target, source);
|
|
1313
1311
|
}
|
|
@@ -1347,7 +1345,7 @@ function extensionsKey(config) {
|
|
|
1347
1345
|
return JSON.stringify(config.extensions ?? null);
|
|
1348
1346
|
}
|
|
1349
1347
|
async function refreshExtensionSurfaces() {
|
|
1350
|
-
const { loadFormats, refreshExtensionUi, refreshFormats } = await (__preload("
|
|
1348
|
+
const { loadFormats, refreshExtensionUi, refreshFormats } = await (__preload("f64fnesp"), import("./format-host-f64fnesp.js"));
|
|
1351
1349
|
refreshFormats();
|
|
1352
1350
|
loadFormats();
|
|
1353
1351
|
refreshExtensionUi(getPlatform2());
|
|
@@ -1399,7 +1397,7 @@ async function commitProjectConfig(patch) {
|
|
|
1399
1397
|
}
|
|
1400
1398
|
return { ok: true };
|
|
1401
1399
|
}
|
|
1402
|
-
async function adoptProjectConfig(config) {
|
|
1400
|
+
async function adoptProjectConfig(config, text) {
|
|
1403
1401
|
if (!requireProjectState()) {
|
|
1404
1402
|
setWorkspaceProject2(workspace2.projectRoot, config);
|
|
1405
1403
|
return;
|
|
@@ -1408,6 +1406,8 @@ async function adoptProjectConfig(config) {
|
|
|
1408
1406
|
transactDoc(tab, (t) => replaceContents(t.doc.document, config), { skipHistory: true });
|
|
1409
1407
|
tab.doc.dirty = false;
|
|
1410
1408
|
await seedCommitted();
|
|
1409
|
+
_layout = deriveJsonLayout(text);
|
|
1410
|
+
tab.doc.layout = _layout;
|
|
1411
1411
|
_committed = serializeProjectConfig(config);
|
|
1412
1412
|
}
|
|
1413
1413
|
|
|
@@ -1582,5 +1582,5 @@ async function updateSiteConfig(patch) {
|
|
|
1582
1582
|
|
|
1583
1583
|
export { parseJsonDocument, serializeJson, serializeProjectConfig, lendProjectConfigLayout, commitProjectConfig, adoptProjectConfig, getEffectiveMedia, getEffectiveStyle, getEffectiveImports, getEffectiveElements, getEffectiveHead, getEffectiveLocales, invalidateLayoutCache, getEffectiveLayoutPath, resolveLayoutDoc, distributePageIntoLayout, updateSiteConfig, restoreSession, requireNavigatorPanelId, DEFAULT_INSPECTOR_TAB, isInspectorTabId, BOTTOM_TAB_IDS, DEFAULT_BOTTOM_TAB, isBottomTabId, CHROME_THEMES, DOCK_IDS, DOCK_DEFAULT_SIZES, DEFAULT_PANE_SPLIT, PANE_SPLIT_MIN, PANE_SPLIT_MAX, setPaneSplit, shell, persistDocks, persistedSession, markSessionRestored, flushSession, monacoTheme, registerShellSurface, mountShell, setDockCollapsed, setDockSize, setActivityTab, setBottomTab, setChromeTheme, toggleActivityTab, setLayoutSelection, resetProjectShell, registerShellViewCommands };
|
|
1584
1584
|
|
|
1585
|
-
//# debugId=
|
|
1586
|
-
//# sourceMappingURL=studio-
|
|
1585
|
+
//# debugId=41F1C61D2E957DBB64756E2164756E21
|
|
1586
|
+
//# sourceMappingURL=studio-mpzwze9x.js.map
|
|
@@ -4,17 +4,17 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
debouncedStyleCommit,
|
|
6
6
|
renderOnly
|
|
7
|
-
} from "./studio-
|
|
7
|
+
} from "./studio-m1p9b6c3.js";
|
|
8
8
|
import {
|
|
9
9
|
REGION_ATTR,
|
|
10
10
|
overlayRegion,
|
|
11
11
|
registerSurface,
|
|
12
12
|
mountSurface,
|
|
13
13
|
layerHost2
|
|
14
|
-
} from "./studio-
|
|
14
|
+
} from "./studio-ympe0n7a.js";
|
|
15
15
|
import {
|
|
16
16
|
reactive
|
|
17
|
-
} from "./studio-
|
|
17
|
+
} from "./studio-d8z5bajd.js";
|
|
18
18
|
import {
|
|
19
19
|
IMAGE_EXTENSIONS,
|
|
20
20
|
MEDIA_EXTENSIONS,
|
|
@@ -23,17 +23,17 @@ import {
|
|
|
23
23
|
uploadAssets,
|
|
24
24
|
mediaSiteUrl,
|
|
25
25
|
previewFileSrc
|
|
26
|
-
} from "./studio-
|
|
26
|
+
} from "./studio-en82c639.js";
|
|
27
27
|
import {
|
|
28
28
|
peekMediaMeta,
|
|
29
29
|
seedMediaMeta,
|
|
30
30
|
recordImageSize,
|
|
31
31
|
invalidateMediaMeta,
|
|
32
32
|
mediaMetaSummary
|
|
33
|
-
} from "./studio-
|
|
33
|
+
} from "./studio-5nz00bhh.js";
|
|
34
34
|
import {
|
|
35
35
|
previewAssetSrc
|
|
36
|
-
} from "./studio-
|
|
36
|
+
} from "./studio-c07s5ckd.js";
|
|
37
37
|
import {
|
|
38
38
|
rectOf
|
|
39
39
|
} from "./studio-rs76k67r.js";
|
|
@@ -836,4 +836,4 @@ function unmountMediaPicker2(host) {
|
|
|
836
836
|
export { openPopoverSurface, invalidateMediaCache2, showMediaPickerPopover2, uploadAndAssign2, pickAndUpload2, mountMediaPicker2, unmountMediaPicker2 };
|
|
837
837
|
|
|
838
838
|
//# debugId=9A676D8FC549E4AE64756E2164756E21
|
|
839
|
-
//# sourceMappingURL=studio-
|
|
839
|
+
//# sourceMappingURL=studio-ncn9e189.js.map
|
|
@@ -116,4 +116,4 @@ function usageFiles2(result) {
|
|
|
116
116
|
export { usagesSupported2, peekUsages2, loadUsages2, retryUsages2, invalidateUsages2, usageHeadline2, usageWarning2, usageFiles2 };
|
|
117
117
|
|
|
118
118
|
//# debugId=4EF5BE6F2F2180F464756E2164756E21
|
|
119
|
-
//# sourceMappingURL=studio-
|
|
119
|
+
//# sourceMappingURL=studio-nq5yf5mp.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
isJsonObject,
|
|
3
|
-
|
|
3
|
+
isRef,
|
|
4
4
|
isFunctionDef,
|
|
5
5
|
isExpressionDef,
|
|
6
6
|
isNamedFormulaDef,
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
paramNames,
|
|
16
16
|
isTagExpression,
|
|
17
17
|
isPrivateStateKey
|
|
18
|
-
} from "./studio-
|
|
18
|
+
} from "./studio-3ntvq6cg.js";
|
|
19
19
|
import {
|
|
20
20
|
effectScope,
|
|
21
21
|
onScopeDispose,
|
|
@@ -27,11 +27,11 @@ import {
|
|
|
27
27
|
shallowReactive,
|
|
28
28
|
isReactive,
|
|
29
29
|
toRaw,
|
|
30
|
-
|
|
30
|
+
isRef2,
|
|
31
31
|
ref,
|
|
32
32
|
shallowRef,
|
|
33
33
|
computed
|
|
34
|
-
} from "./studio-
|
|
34
|
+
} from "./studio-d8z5bajd.js";
|
|
35
35
|
import {
|
|
36
36
|
__export
|
|
37
37
|
} from "./studio-5te5tqng.js";
|
|
@@ -1063,7 +1063,7 @@ function buildStyleRules(style, options = {}) {
|
|
|
1063
1063
|
resolveValue
|
|
1064
1064
|
} = options;
|
|
1065
1065
|
const rules = [];
|
|
1066
|
-
const isBlock = (value) => value !== null && typeof value === "object" && !Array.isArray(value) && !
|
|
1066
|
+
const isBlock = (value) => value !== null && typeof value === "object" && !Array.isArray(value) && !isRef(value);
|
|
1067
1067
|
const blocksOf = (key, value) => {
|
|
1068
1068
|
if (isBlock(value)) {
|
|
1069
1069
|
return [value];
|
|
@@ -1077,7 +1077,7 @@ function buildStyleRules(style, options = {}) {
|
|
|
1077
1077
|
if (value === undefined || value === null) {
|
|
1078
1078
|
return null;
|
|
1079
1079
|
}
|
|
1080
|
-
if (
|
|
1080
|
+
if (isRef(value)) {
|
|
1081
1081
|
return reactive ? resolveValue?.(property, value, target) ?? null : null;
|
|
1082
1082
|
}
|
|
1083
1083
|
if (typeof value === "object") {
|
|
@@ -2369,7 +2369,7 @@ function boundPropKey(key, val, state) {
|
|
|
2369
2369
|
return null;
|
|
2370
2370
|
}
|
|
2371
2371
|
const stored = toRaw(state)[sub];
|
|
2372
|
-
if (
|
|
2372
|
+
if (isRef2(stored) || typeof stored === "function") {
|
|
2373
2373
|
return null;
|
|
2374
2374
|
}
|
|
2375
2375
|
if (typeof stored === "object" && stored !== null) {
|
|
@@ -3174,6 +3174,7 @@ function renderMappedArrayInto(parentEl, arrayDef, state, options) {
|
|
|
3174
3174
|
parentEl.append(anchor);
|
|
3175
3175
|
const { items: itemsSrc, map: mapDef, filter: filterRef, sort: sortRef, key: keyRef } = arrayDef;
|
|
3176
3176
|
const keyPointer = isRefObj(keyRef) ? keyRef.$ref : null;
|
|
3177
|
+
const instancePath = _instancePath;
|
|
3177
3178
|
let warned = false;
|
|
3178
3179
|
const warnOnce = (message) => {
|
|
3179
3180
|
if (!warned) {
|
|
@@ -3261,7 +3262,7 @@ function renderMappedArrayInto(parentEl, arrayDef, state, options) {
|
|
|
3261
3262
|
}
|
|
3262
3263
|
pauseTracking();
|
|
3263
3264
|
try {
|
|
3264
|
-
reconcile(list, keys);
|
|
3265
|
+
underInstancePath(reexpand(instancePath), () => reconcile(list, keys));
|
|
3265
3266
|
} finally {
|
|
3266
3267
|
resetTracking();
|
|
3267
3268
|
}
|
|
@@ -3325,6 +3326,7 @@ function resolveTagName(tagName, scope) {
|
|
|
3325
3326
|
function renderSwitch(def, state, options) {
|
|
3326
3327
|
const path = options?._path ?? [];
|
|
3327
3328
|
const container = document.createElement(resolveTagName(def.tagName, state));
|
|
3329
|
+
const instancePath = _instancePath;
|
|
3328
3330
|
if (options?.onNodeCreated) {
|
|
3329
3331
|
options.onNodeCreated(container, path, def, state);
|
|
3330
3332
|
}
|
|
@@ -3372,13 +3374,13 @@ function renderSwitch(def, state, options) {
|
|
|
3372
3374
|
return;
|
|
3373
3375
|
}
|
|
3374
3376
|
container.replaceChildren();
|
|
3375
|
-
scope.run(() => container.append(renderNode(doc, childScope, childOpts)));
|
|
3377
|
+
underInstancePath(reexpand(instancePath), () => scope.run(() => container.append(renderNode(doc, childScope, childOpts))));
|
|
3376
3378
|
}).catch((error) => console.error("Jx $switch: failed to load external case", caseDef.$ref, error));
|
|
3377
3379
|
return;
|
|
3378
3380
|
}
|
|
3379
3381
|
pauseTracking();
|
|
3380
3382
|
try {
|
|
3381
|
-
scope.run(() => container.append(renderNode(caseDef, state, childOpts)));
|
|
3383
|
+
underInstancePath(reexpand(instancePath), () => scope.run(() => container.append(renderNode(caseDef, state, childOpts))));
|
|
3382
3384
|
} finally {
|
|
3383
3385
|
resetTracking();
|
|
3384
3386
|
}
|
|
@@ -3916,7 +3918,7 @@ function resolveRef(refPath, state) {
|
|
|
3916
3918
|
return readPath(state, refPath) ?? null;
|
|
3917
3919
|
}
|
|
3918
3920
|
function isRefObj(v) {
|
|
3919
|
-
return
|
|
3921
|
+
return isRef(v);
|
|
3920
3922
|
}
|
|
3921
3923
|
function getPath2(obj, path) {
|
|
3922
3924
|
return readPath(obj, path);
|
|
@@ -4067,6 +4069,65 @@ function injectHead(entries, _base) {
|
|
|
4067
4069
|
document.head.append(el);
|
|
4068
4070
|
}
|
|
4069
4071
|
}
|
|
4072
|
+
var MAX_COMPONENT_NESTING = 32;
|
|
4073
|
+
var ROOT_INSTANCE_PATH = { expansion: 0, frames: [] };
|
|
4074
|
+
var _instancePath = ROOT_INSTANCE_PATH;
|
|
4075
|
+
function underInstancePath(path, fn) {
|
|
4076
|
+
const was = _instancePath;
|
|
4077
|
+
_instancePath = path;
|
|
4078
|
+
try {
|
|
4079
|
+
return fn();
|
|
4080
|
+
} finally {
|
|
4081
|
+
_instancePath = was;
|
|
4082
|
+
}
|
|
4083
|
+
}
|
|
4084
|
+
function reexpand(path) {
|
|
4085
|
+
return { expansion: path.frames.length, frames: path.frames };
|
|
4086
|
+
}
|
|
4087
|
+
function samePropValue(a, b) {
|
|
4088
|
+
if (Object.is(a, b)) {
|
|
4089
|
+
return true;
|
|
4090
|
+
}
|
|
4091
|
+
if (!isPlainData(a) || !isPlainData(b)) {
|
|
4092
|
+
return false;
|
|
4093
|
+
}
|
|
4094
|
+
try {
|
|
4095
|
+
return JSON.stringify(a) === JSON.stringify(b);
|
|
4096
|
+
} catch {
|
|
4097
|
+
return false;
|
|
4098
|
+
}
|
|
4099
|
+
}
|
|
4100
|
+
function isPlainData(value) {
|
|
4101
|
+
if (typeof value !== "object" || value === null) {
|
|
4102
|
+
return false;
|
|
4103
|
+
}
|
|
4104
|
+
const raw = toRaw(value);
|
|
4105
|
+
if (Array.isArray(raw)) {
|
|
4106
|
+
return true;
|
|
4107
|
+
}
|
|
4108
|
+
const proto = Object.getPrototypeOf(raw);
|
|
4109
|
+
return proto === Object.prototype || proto === null;
|
|
4110
|
+
}
|
|
4111
|
+
function sameFrame(a, b) {
|
|
4112
|
+
if (a.tag !== b.tag) {
|
|
4113
|
+
return false;
|
|
4114
|
+
}
|
|
4115
|
+
const keys = Object.keys(a.props);
|
|
4116
|
+
if (keys.length !== Object.keys(b.props).length) {
|
|
4117
|
+
return false;
|
|
4118
|
+
}
|
|
4119
|
+
return keys.every((key) => Object.hasOwn(b.props, key) && samePropValue(a.props[key], b.props[key]));
|
|
4120
|
+
}
|
|
4121
|
+
function extendInstancePath(path, frame) {
|
|
4122
|
+
const chain = [...path.frames.map((f) => f.tag), frame.tag].join(" → ");
|
|
4123
|
+
if (path.frames.slice(path.expansion).some((f) => sameFrame(f, frame))) {
|
|
4124
|
+
throw new Error(`Component <${frame.tag}> renders itself: ${chain}. A component cannot appear inside its own ` + `definition with the same props — the expansion would never end.`);
|
|
4125
|
+
}
|
|
4126
|
+
if (path.frames.length >= MAX_COMPONENT_NESTING) {
|
|
4127
|
+
throw new Error(`Component nesting exceeds ${MAX_COMPONENT_NESTING} levels: ${chain}. A component that renders itself with changing props needs a case that stops.`);
|
|
4128
|
+
}
|
|
4129
|
+
return { expansion: path.expansion, frames: [...path.frames, frame] };
|
|
4130
|
+
}
|
|
4070
4131
|
var _definedSources = new Set;
|
|
4071
4132
|
async function defineElement(source, baseUrl) {
|
|
4072
4133
|
let base = baseUrl;
|
|
@@ -4109,6 +4170,8 @@ async function defineElement(source, baseUrl) {
|
|
|
4109
4170
|
return;
|
|
4110
4171
|
}
|
|
4111
4172
|
this._jxInitialized = true;
|
|
4173
|
+
const enclosingPath = _instancePath;
|
|
4174
|
+
const supplied = {};
|
|
4112
4175
|
const live = _elementDefs.get(tagName) ?? { base: initialBase, doc: initialDef };
|
|
4113
4176
|
const def = live.doc;
|
|
4114
4177
|
const defBase = live.base;
|
|
@@ -4116,6 +4179,7 @@ async function defineElement(source, baseUrl) {
|
|
|
4116
4179
|
for (const attr of observedAttrs) {
|
|
4117
4180
|
if (this.hasAttribute(attr)) {
|
|
4118
4181
|
absorbAttribute(state, attr, this.getAttribute(attr));
|
|
4182
|
+
supplied[attr] = this.getAttribute(attr);
|
|
4119
4183
|
}
|
|
4120
4184
|
}
|
|
4121
4185
|
const propsAttr = this.dataset.jxProps;
|
|
@@ -4128,6 +4192,7 @@ async function defineElement(source, baseUrl) {
|
|
|
4128
4192
|
}
|
|
4129
4193
|
if (key in (def.state ?? {})) {
|
|
4130
4194
|
state[key] = val;
|
|
4195
|
+
supplied[key] = val;
|
|
4131
4196
|
}
|
|
4132
4197
|
}
|
|
4133
4198
|
} catch {}
|
|
@@ -4142,6 +4207,7 @@ async function defineElement(source, baseUrl) {
|
|
|
4142
4207
|
}
|
|
4143
4208
|
if (key in (def.state ?? {})) {
|
|
4144
4209
|
state[key] = this.getAttribute(name);
|
|
4210
|
+
supplied[key] = this.getAttribute(name);
|
|
4145
4211
|
this.removeAttribute(name);
|
|
4146
4212
|
}
|
|
4147
4213
|
}
|
|
@@ -4151,8 +4217,26 @@ async function defineElement(source, baseUrl) {
|
|
|
4151
4217
|
}
|
|
4152
4218
|
if (key in this && this[key] !== undefined && instanceSupplies(this, key)) {
|
|
4153
4219
|
state[key] = this[key];
|
|
4220
|
+
supplied[key] = this[key];
|
|
4154
4221
|
}
|
|
4155
4222
|
}
|
|
4223
|
+
let ownPath;
|
|
4224
|
+
try {
|
|
4225
|
+
ownPath = extendInstancePath(enclosingPath, { props: supplied, tag: tagName });
|
|
4226
|
+
} catch (error) {
|
|
4227
|
+
this.replaceChildren();
|
|
4228
|
+
if (!this.isConnected) {
|
|
4229
|
+
return;
|
|
4230
|
+
}
|
|
4231
|
+
console.error(`Jx: <${tagName}> was not rendered:`, error);
|
|
4232
|
+
this.dispatchEvent(new ErrorEvent("jx-error", {
|
|
4233
|
+
bubbles: true,
|
|
4234
|
+
composed: true,
|
|
4235
|
+
error,
|
|
4236
|
+
message: error instanceof Error ? error.message : String(error)
|
|
4237
|
+
}));
|
|
4238
|
+
return;
|
|
4239
|
+
}
|
|
4156
4240
|
for (const key of Object.keys(def.state ?? {})) {
|
|
4157
4241
|
if (isPrivateStateKey(key)) {
|
|
4158
4242
|
continue;
|
|
@@ -4182,9 +4266,11 @@ async function defineElement(source, baseUrl) {
|
|
|
4182
4266
|
const wasInside = _canvasInsideStampedHost;
|
|
4183
4267
|
_canvasInsideStampedHost ||= this.dataset.jxPath !== undefined;
|
|
4184
4268
|
try {
|
|
4185
|
-
|
|
4186
|
-
|
|
4187
|
-
|
|
4269
|
+
underInstancePath(ownPath, () => {
|
|
4270
|
+
for (const childDef of children) {
|
|
4271
|
+
this.append(renderNode(childDef, state));
|
|
4272
|
+
}
|
|
4273
|
+
});
|
|
4188
4274
|
} finally {
|
|
4189
4275
|
_canvasInsideStampedHost = wasInside;
|
|
4190
4276
|
}
|
|
@@ -5518,9 +5604,15 @@ var jx_action_button_default = {
|
|
|
5518
5604
|
color: "var(--jx-accent-fg)"
|
|
5519
5605
|
},
|
|
5520
5606
|
'&[data-size="sm"] > [part="control"]': {
|
|
5607
|
+
$description: "The small action button is the kit's most packed control — Studio's toolbars, block action bar and inspector rows declare it some four hundred times — and it draws 4px under the kit's control height, which is the WCAG 2.2 SC 2.5.8 floor (ui.md §4.3). The `::before` is the hit area, jx-tab's close-button technique: an empty pseudo-element that reaches 2px past the drawn box on every side, so the region that accepts the pointer is exactly `--jx-control-h` square while the picture stays 20px. The inset is -3px and not -2px because an absolutely positioned box is offset from its containing block's PADDING edge, and this control draws a 1px border: the border width comes first, then half of the 4px the box is under (jx-tab's close button is borderless, so -4px was exact there). The control is already `position: relative` for the badge, so the pseudo-element needs nothing more. A 4px gap (jx-toolbar's) lets two extended neighbours abut; a compact jx-action-group packs its members touching, and its sheet zeroes the extension on that axis, because an extension over a neighbour's box would take the neighbour's clicks, and the criterion gives an overlapped strip to the target on top rather than to both; a default group's 2px gap leaves every member but the last at 22px on that axis, which ui.md §11 names as a non-claim. Held by target-size.test.ts and the conformance gate, both of which read the border and subtract it.",
|
|
5521
5608
|
minWidth: "calc(var(--jx-control-h) - 4px)",
|
|
5522
5609
|
minHeight: "calc(var(--jx-control-h) - 4px)",
|
|
5523
|
-
padding: "0 var(--jx-space-1)"
|
|
5610
|
+
padding: "0 var(--jx-space-1)",
|
|
5611
|
+
"::before": {
|
|
5612
|
+
content: '""',
|
|
5613
|
+
position: "absolute",
|
|
5614
|
+
inset: "-3px"
|
|
5615
|
+
}
|
|
5524
5616
|
},
|
|
5525
5617
|
'&[data-size="lg"] > [part="control"]': {
|
|
5526
5618
|
minWidth: "calc(var(--jx-control-h) + 8px)",
|
|
@@ -5819,6 +5911,14 @@ var jx_action_group_default = {
|
|
|
5819
5911
|
},
|
|
5820
5912
|
'&[data-compact] > jx-action-button > [part="control"]:focus-visible': {
|
|
5821
5913
|
zIndex: "1"
|
|
5914
|
+
},
|
|
5915
|
+
'&[data-compact] > jx-action-button[data-size="sm"] > [part="control"]::before': {
|
|
5916
|
+
$description: "A small action button carries a `::before` that extends its hit area 2px past its drawn box on every side (an inset of -3px: the button's 1px border, then half the 4px it is under, because an absolutely positioned box is offset from the padding edge), so that a 20px picture accepts the pointer over the kit's 24px control height (WCAG 2.2 SC 2.5.8, ui.md §4.3). In a compact group the boxes TOUCH on the packed axis — no gap, and each border drawn over the last — so an extension there could reach nothing but the neighbour's own box, and the later sibling paints above the earlier one: the last 2px of every button but the last would activate the button after it. The criterion gives an overlapped area to the target on TOP, so the extension would buy the earlier button nothing and cost it a stolen strip. The default 2px gap is the other case: two extensions overlap by 2px there, the later member keeps the strip, and every small member but the last counts 22px on the packed axis, which is under the floor and which ui.md §11 names beside this one. The packed axis is therefore zeroed here — `0` is the padding edge, 1px inside the drawn border, and the button's own box accepts the pointer over that pixel — and the cross axis keeps its 2px past the drawn box, which reaches only the gap around the group: a compact group's small members are 24px tall and as wide as they draw, which ui.md §11 records as the one thing the technique cannot reach. The vertical variant swaps the axes, and its inline value is the button's own -3px for the same reason.",
|
|
5917
|
+
insetInline: "0"
|
|
5918
|
+
},
|
|
5919
|
+
'&[data-compact][data-orientation="vertical"] > jx-action-button[data-size="sm"] > [part="control"]::before': {
|
|
5920
|
+
insetInline: "-3px",
|
|
5921
|
+
insetBlock: "0"
|
|
5822
5922
|
}
|
|
5823
5923
|
},
|
|
5824
5924
|
children: [
|
|
@@ -6127,9 +6227,16 @@ var jx_button_default = {
|
|
|
6127
6227
|
}
|
|
6128
6228
|
},
|
|
6129
6229
|
'&[data-size="sm"] > [part="control"]': {
|
|
6230
|
+
$description: "A small button draws 4px under the kit's control height, and the control height is the WCAG 2.2 SC 2.5.8 floor (ui.md §4.3), so the drawn box alone would be a 20px pointer target at the default density. The `::before` is the hit area: an empty pseudo-element that reaches 2px past the drawn box on every side, so what accepts the pointer is exactly `--jx-control-h` square while the picture stays small — jx-tab's close button's technique, and the criterion measures the region that accepts the pointer, not the paint. The inset is -3px and not -2px because an absolutely positioned box is offset from its containing block's PADDING edge, and this control draws a 1px border: the border width comes first, then half of the 4px the box is under. jx-tab's close button is borderless, which is why -4px was exact there, and why the number did not carry over unchanged. In a jx-toolbar (a 4px gap) two extended neighbours abut and neither loses a pixel; jx-action-group's own sheet zeroes the packed axis in a compact group, where the boxes touch and an extension could only steal a strip of the neighbour. Held by target-size.test.ts and the conformance gate, both of which read the border and subtract it.",
|
|
6231
|
+
position: "relative",
|
|
6130
6232
|
minHeight: "calc(var(--jx-control-h) - 4px)",
|
|
6131
6233
|
padding: "0 var(--jx-space-3)",
|
|
6132
|
-
fontSize: "var(--jx-text-sm)"
|
|
6234
|
+
fontSize: "var(--jx-text-sm)",
|
|
6235
|
+
"::before": {
|
|
6236
|
+
content: '""',
|
|
6237
|
+
position: "absolute",
|
|
6238
|
+
inset: "-3px"
|
|
6239
|
+
}
|
|
6133
6240
|
},
|
|
6134
6241
|
'&[data-size="lg"] > [part="control"]': {
|
|
6135
6242
|
minHeight: "calc(var(--jx-control-h) + 8px)",
|
|
@@ -6395,9 +6502,16 @@ var jx_checkbox_default = {
|
|
|
6395
6502
|
color: "var(--jx-fg-dim)"
|
|
6396
6503
|
},
|
|
6397
6504
|
'&[data-size="sm"] > [part="control"]': {
|
|
6505
|
+
$description: "The control is the `<label>` wrapping the input, and the label is the pointer target: a click anywhere on it toggles the box. At `sm` it draws 4px under the kit's control height, the WCAG 2.2 SC 2.5.8 floor (ui.md §4.3), so the `::before` extends the hit area 2px beyond the box on every side — jx-tab's close-button technique, the same shape jx-button carries — and the region that accepts the pointer is `--jx-control-h` tall while the row stays 20px. -2px is exact here where jx-button needs -3px: an absolutely positioned box is offset from the PADDING edge, and the label draws no border, so its padding edge is its drawn edge. The label needs `position: relative` here for the pseudo-element to measure against; the input inside is 14px and needs nothing of its own, because the label around it is the target. Held by target-size.test.ts and the conformance gate.",
|
|
6506
|
+
position: "relative",
|
|
6398
6507
|
minHeight: "calc(var(--jx-control-h) - 4px)",
|
|
6399
6508
|
fontSize: "var(--jx-text-sm)",
|
|
6400
|
-
lineHeight: "var(--jx-leading-sm)"
|
|
6509
|
+
lineHeight: "var(--jx-leading-sm)",
|
|
6510
|
+
"::before": {
|
|
6511
|
+
content: '""',
|
|
6512
|
+
position: "absolute",
|
|
6513
|
+
inset: "-2px"
|
|
6514
|
+
}
|
|
6401
6515
|
},
|
|
6402
6516
|
'&[data-size="sm"] [part="input"]': {
|
|
6403
6517
|
width: "calc(var(--jx-icon-size) - 2px)",
|
|
@@ -8484,7 +8598,7 @@ var jx_menu_item_default = {
|
|
|
8484
8598
|
type: "string",
|
|
8485
8599
|
default: "",
|
|
8486
8600
|
attribute: "requires",
|
|
8487
|
-
description: "The one-sentence reason a
|
|
8601
|
+
description: "The one-sentence reason a DISABLED row cannot act, drawn as the row's native title while it is disabled and nowhere at all while it is not. The title is the whole contract here, and deliberately not the tooltip hybrid jx-button, jx-action-button and jx-switch ship: a disabled row can open no tip, so the hybrid collapses to its disabled half, and an ENABLED row never carries a requires — every Studio projection fills it from the registry's disabledReason, which is undefined for a command that can run, and a reason on a row that can act is a contradiction rather than a hint. Studio's menu surface also prints the same sentence as the row's visible description (`Needs …`), so a keyboard reader hears it without the title."
|
|
8488
8602
|
},
|
|
8489
8603
|
checked: {
|
|
8490
8604
|
type: "string",
|
|
@@ -9261,6 +9375,8 @@ var jx_combobox_default = {
|
|
|
9261
9375
|
fontSize: "var(--jx-text-lg)"
|
|
9262
9376
|
},
|
|
9263
9377
|
'& [part="toggle"]': {
|
|
9378
|
+
$description: "The toggle sits inside the field's border, so it draws 2px under the field's height: 22px in a 24px field, 18px in an `sm` one. The `::before` is its hit area (WCAG 2.2 SC 2.5.8, ui.md §4.3), the same shape as jx-textfield's clear button: an empty pseudo-element inset by half the difference between the drawn box and the kit's control height, -1px on a default field and -3px on a small one, so the region that accepts the pointer is `--jx-control-h` square at every size while the caret and its box stay where they were; on a large field the inset is positive and the pseudo-element is an invisible box inside a button already over the floor. `position: relative` is what the pseudo-element measures against, and it is new here: the toggle is a flex item of the field, not an absolutely placed one. The rotation the open state applies turns the pseudo-element with the button, which a square does not mind.",
|
|
9379
|
+
position: "relative",
|
|
9264
9380
|
display: "inline-flex",
|
|
9265
9381
|
alignItems: "center",
|
|
9266
9382
|
justifyContent: "center",
|
|
@@ -9278,6 +9394,11 @@ var jx_combobox_default = {
|
|
|
9278
9394
|
cursor: "pointer",
|
|
9279
9395
|
outline: "none",
|
|
9280
9396
|
transition: "rotate var(--jx-dur-1) var(--jx-ease-out)",
|
|
9397
|
+
"::before": {
|
|
9398
|
+
content: '""',
|
|
9399
|
+
position: "absolute",
|
|
9400
|
+
inset: "calc((var(--jx-combobox-h) - 2px - var(--jx-control-h)) / 2)"
|
|
9401
|
+
},
|
|
9281
9402
|
":hover": {
|
|
9282
9403
|
color: "var(--jx-fg)"
|
|
9283
9404
|
},
|
|
@@ -11936,6 +12057,11 @@ var jx_switch_default = {
|
|
|
11936
12057
|
"name",
|
|
11937
12058
|
"size"
|
|
11938
12059
|
],
|
|
12060
|
+
$elements: [
|
|
12061
|
+
{
|
|
12062
|
+
$ref: "./jx-tooltip.json"
|
|
12063
|
+
}
|
|
12064
|
+
],
|
|
11939
12065
|
state: {
|
|
11940
12066
|
checked: {
|
|
11941
12067
|
type: "boolean",
|
|
@@ -11947,13 +12073,13 @@ var jx_switch_default = {
|
|
|
11947
12073
|
type: "boolean",
|
|
11948
12074
|
default: false,
|
|
11949
12075
|
attribute: "disabled",
|
|
11950
|
-
description: "Cannot be flipped or focused. Disabled, never absent."
|
|
12076
|
+
description: "Cannot be flipped or focused. Disabled, never absent, and the hint moves from the tip to the row's title while it is: a disabled control cannot open a tip, and why the setting cannot be changed is exactly what the reader hovers to find out."
|
|
11951
12077
|
},
|
|
11952
12078
|
hint: {
|
|
11953
12079
|
type: "string",
|
|
11954
12080
|
default: "",
|
|
11955
12081
|
attribute: "hint",
|
|
11956
|
-
description: "The tooltip on the row:
|
|
12082
|
+
description: "The tooltip on the row: what turning the setting on does, or why it cannot be changed. The same hybrid jx-button and jx-action-button ship. While the switch is ENABLED it is drawn as a jx-tooltip child of this element — shown on keyboard focus at once and on hover after the tip's delay, hoverable and dismissible with Escape (SC 1.4.13) — and the control names it in aria-describedby, so it is a description beside the name and never the name itself. While the switch is DISABLED it is the native title of the wrapping label instead, because a disabled control receives no focus and no pointer event and could never open a tip, while the platform still shows a title on hover. Never both at once; empty draws neither. ONE difference from the buttons, and it is the platform's rather than the kit's: the tip is wired by `for` alone and the row declares NO `interestfor`. Interest invokers are supported on `a`, `area` and `button` only — never on a label or an input — so the attribute here would show nothing on Chrome 152 while telling the tooltip sidecar the platform had the pair, which is the one combination that draws no tip on any engine. The sidecar binds the label on every engine instead, and that is what the switch pays for a tooltip: six listeners on the row and two on the tip, always, where a button pays them only where the platform lacks the attribute."
|
|
11957
12083
|
},
|
|
11958
12084
|
label: {
|
|
11959
12085
|
type: "string",
|
|
@@ -11990,6 +12116,47 @@ var jx_switch_default = {
|
|
|
11990
12116
|
default: "",
|
|
11991
12117
|
description: `Forwarded to the inner control as its tabindex, which is what makes a roving caret possible: the focusable node is the input inside, not the host and not the label that wraps it, so a jx-toolbar moving focus writes this rather than reaching into a child's internals. It is a PROPERTY ONLY (el.tabindex = "0") and deliberately not an observed attribute: written as an attribute it would land on the host as well, and a host carrying tabindex is itself focusable, so the one control would become two tab stops.`
|
|
11992
12118
|
},
|
|
12119
|
+
uid: {
|
|
12120
|
+
type: "string",
|
|
12121
|
+
default: "",
|
|
12122
|
+
description: "This row's own id stem, minted on mount by the tooltip sidecar. The label's id, the tip's id and the two attributes that wire one to the other are all built from it, so a consumer writes none of them and two hinted switches on one panel cannot collide. Empty until the mount microtask, which is why every binding that reads it guards on it."
|
|
12123
|
+
},
|
|
12124
|
+
hasTip: {
|
|
12125
|
+
$expression: {
|
|
12126
|
+
operator: "&&",
|
|
12127
|
+
target: {
|
|
12128
|
+
operator: "!",
|
|
12129
|
+
target: {
|
|
12130
|
+
operator: "!",
|
|
12131
|
+
target: {
|
|
12132
|
+
$ref: "#/state/hint"
|
|
12133
|
+
}
|
|
12134
|
+
}
|
|
12135
|
+
},
|
|
12136
|
+
value: {
|
|
12137
|
+
operator: "&&",
|
|
12138
|
+
target: {
|
|
12139
|
+
operator: "!",
|
|
12140
|
+
target: {
|
|
12141
|
+
$ref: "#/state/disabled"
|
|
12142
|
+
}
|
|
12143
|
+
},
|
|
12144
|
+
value: {
|
|
12145
|
+
operator: "!==",
|
|
12146
|
+
target: {
|
|
12147
|
+
$ref: "#/state/uid"
|
|
12148
|
+
},
|
|
12149
|
+
value: ""
|
|
12150
|
+
}
|
|
12151
|
+
}
|
|
12152
|
+
}
|
|
12153
|
+
},
|
|
12154
|
+
onMount: {
|
|
12155
|
+
$prototype: "Function",
|
|
12156
|
+
$src: "jx-ui:/behaviors/tooltip.ts",
|
|
12157
|
+
$export: "mintHintId",
|
|
12158
|
+
description: "Mints the id stem the hint's tooltip is wired by. A document cannot: the closed operator set has no counter and no identity."
|
|
12159
|
+
},
|
|
11993
12160
|
onChange: {
|
|
11994
12161
|
$prototype: "Function",
|
|
11995
12162
|
body: [
|
|
@@ -12102,6 +12269,9 @@ var jx_switch_default = {
|
|
|
12102
12269
|
'& [part="label"]:empty': {
|
|
12103
12270
|
display: "none"
|
|
12104
12271
|
},
|
|
12272
|
+
'& > [part="tooltip"]': {
|
|
12273
|
+
display: "contents"
|
|
12274
|
+
},
|
|
12105
12275
|
"@(forced-colors: active)": {
|
|
12106
12276
|
'& [part="input"]': {
|
|
12107
12277
|
forcedColorAdjust: "none",
|
|
@@ -12132,7 +12302,8 @@ var jx_switch_default = {
|
|
|
12132
12302
|
tagName: "label",
|
|
12133
12303
|
attributes: {
|
|
12134
12304
|
part: "control",
|
|
12135
|
-
|
|
12305
|
+
id: "${state.uid || null}",
|
|
12306
|
+
title: "${state.disabled && state.hint ? state.hint : null}"
|
|
12136
12307
|
},
|
|
12137
12308
|
children: [
|
|
12138
12309
|
{
|
|
@@ -12143,7 +12314,7 @@ var jx_switch_default = {
|
|
|
12143
12314
|
role: "switch",
|
|
12144
12315
|
"aria-label": "${state.label || null}",
|
|
12145
12316
|
"aria-labelledby": "${state.labelledby || null}",
|
|
12146
|
-
"aria-describedby": "${state.describedby || null}",
|
|
12317
|
+
"aria-describedby": "${[state.hasTip ? state.uid + '-tip' : null, state.describedby || null].filter(Boolean).join(' ') || null}",
|
|
12147
12318
|
tabindex: "${state.tabindex || null}",
|
|
12148
12319
|
name: "${state.name || null}",
|
|
12149
12320
|
disabled: {
|
|
@@ -12172,6 +12343,34 @@ var jx_switch_default = {
|
|
|
12172
12343
|
]
|
|
12173
12344
|
}
|
|
12174
12345
|
]
|
|
12346
|
+
},
|
|
12347
|
+
{
|
|
12348
|
+
tagName: "span",
|
|
12349
|
+
attributes: {
|
|
12350
|
+
part: "tooltip"
|
|
12351
|
+
},
|
|
12352
|
+
$switch: {
|
|
12353
|
+
$ref: "#/state/hasTip"
|
|
12354
|
+
},
|
|
12355
|
+
cases: {
|
|
12356
|
+
true: {
|
|
12357
|
+
tagName: "jx-tooltip",
|
|
12358
|
+
attributes: {
|
|
12359
|
+
part: "tip",
|
|
12360
|
+
id: "${state.uid}-tip",
|
|
12361
|
+
for: "${state.uid}"
|
|
12362
|
+
},
|
|
12363
|
+
children: [
|
|
12364
|
+
{
|
|
12365
|
+
tagName: "span",
|
|
12366
|
+
attributes: {
|
|
12367
|
+
part: "tip-text"
|
|
12368
|
+
},
|
|
12369
|
+
textContent: "${state.hint}"
|
|
12370
|
+
}
|
|
12371
|
+
]
|
|
12372
|
+
}
|
|
12373
|
+
}
|
|
12175
12374
|
}
|
|
12176
12375
|
]
|
|
12177
12376
|
};
|
|
@@ -13106,9 +13305,15 @@ var jx_textfield_default = {
|
|
|
13106
13305
|
fontSize: "var(--jx-text-lg)"
|
|
13107
13306
|
},
|
|
13108
13307
|
'& [part="clear"]': {
|
|
13308
|
+
$description: "The clear button sits inside the field's border, so it draws 2px under the field's height: 22px in a 24px field, and 18px in an `sm` one. The `::before` is its hit area (WCAG 2.2 SC 2.5.8, ui.md §4.3): an empty pseudo-element inset by half the difference between the drawn box and the kit's control height, which is -1px on a default field and -3px on a small one, so the region that accepts the pointer is `--jx-control-h` square at every size while the glyph and its hover box stay where they were. On a large field the difference is positive and the pseudo-element is an invisible box INSIDE a button that is already over the floor, which changes nothing. jx-tab's close button is the technique; the button is absolutely positioned already, so it is its own containing block. The extension lies over the input it clears, which was true of the drawn button too, and 2px past the field's edge at `sm`, where a neighbour at the kit's 4px gap extends 2px back and the two abut.",
|
|
13109
13309
|
position: "absolute",
|
|
13110
13310
|
insetBlockStart: "1px",
|
|
13111
13311
|
insetInlineEnd: "1px",
|
|
13312
|
+
"::before": {
|
|
13313
|
+
content: '""',
|
|
13314
|
+
position: "absolute",
|
|
13315
|
+
inset: "calc((var(--jx-textfield-h) - 2px - var(--jx-control-h)) / 2)"
|
|
13316
|
+
},
|
|
13112
13317
|
display: "inline-flex",
|
|
13113
13318
|
alignItems: "center",
|
|
13114
13319
|
justifyContent: "center",
|
|
@@ -17459,5 +17664,5 @@ function registerUi(options = {}) {
|
|
|
17459
17664
|
|
|
17460
17665
|
export { isKeyframesAtRule, pureSchemeOf, intlHelpersClause, PURE_METHOD_OPS, BLESSED_OPERATORS, BLESSED_GLOBALS, isMutating, evaluateExpression, assetUrlFor, PUBLIC_DIR, BUILD_LANES, splitRefSuffix, isNonRelativeRef, normalizeProjectPath, dirOfPath, joinProjectPath, projectPathForRef, encodeProjectPath, mount3, preloadDocument, setSkipServerFunctions, runScoped, setCanvasAssetResolver, buildScope, renderNode, redefineElement, defineElement, openAt, close, showModal, close2, ensureCaret, focusItem, splitModifiersOf, selectValue, POPOVER_DEFAULT_MODE, attrs, literalAttr, tagOf, labelOf, isPopover, idOf, walk, popoverIdsIn, documentHasPopover, scalar, findPopoverDefects, popoverDisplayRepair, POPOVER_TAGS, INVOKER_TAGS, KIT_BASE, registerUi, setActiveRegistry, activeRegistry };
|
|
17461
17666
|
|
|
17462
|
-
//# debugId=
|
|
17463
|
-
//# sourceMappingURL=studio-
|
|
17667
|
+
//# debugId=9467D68A831CC3FC64756E2164756E21
|
|
17668
|
+
//# sourceMappingURL=studio-p6pmwkvh.js.map
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ensureCaret
|
|
3
|
-
} from "./studio-
|
|
3
|
+
} from "./studio-p6pmwkvh.js";
|
|
4
4
|
import {
|
|
5
5
|
registerSurface,
|
|
6
6
|
mountSurface,
|
|
7
7
|
getLayerSlot2,
|
|
8
8
|
clearLayerSlot2
|
|
9
|
-
} from "./studio-
|
|
9
|
+
} from "./studio-ympe0n7a.js";
|
|
10
10
|
import {
|
|
11
11
|
reactive
|
|
12
|
-
} from "./studio-
|
|
12
|
+
} from "./studio-d8z5bajd.js";
|
|
13
13
|
import {
|
|
14
14
|
rectOf
|
|
15
15
|
} from "./studio-rs76k67r.js";
|
|
@@ -419,4 +419,4 @@ function restoreFocus(opener) {
|
|
|
419
419
|
export { openMenu2 };
|
|
420
420
|
|
|
421
421
|
//# debugId=AF40C481EA74291464756E2164756E21
|
|
422
|
-
//# sourceMappingURL=studio-
|
|
422
|
+
//# sourceMappingURL=studio-qa7fzxan.js.map
|