@payload-onpage/react 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +13 -2
- package/dist/OnPageClient.d.ts +18 -0
- package/dist/OnPageClient.d.ts.map +1 -0
- package/dist/OnPageClient.js +51 -0
- package/dist/OnPageClient.js.map +1 -0
- package/dist/annotations.d.ts +55 -0
- package/dist/annotations.d.ts.map +1 -0
- package/dist/annotations.js +60 -0
- package/dist/annotations.js.map +1 -0
- package/dist/context.d.ts +7 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +19 -0
- package/dist/context.js.map +1 -0
- package/dist/dom.d.ts +42 -0
- package/dist/dom.d.ts.map +1 -0
- package/dist/dom.js +95 -0
- package/dist/dom.js.map +1 -0
- package/dist/editor/FieldHost.d.ts +5 -0
- package/dist/editor/FieldHost.d.ts.map +1 -0
- package/dist/editor/FieldHost.js +36 -0
- package/dist/editor/FieldHost.js.map +1 -0
- package/dist/editor/Ghosts.d.ts +6 -0
- package/dist/editor/Ghosts.d.ts.map +1 -0
- package/dist/editor/Ghosts.js +37 -0
- package/dist/editor/Ghosts.js.map +1 -0
- package/dist/editor/OnPageEditor.d.ts +25 -0
- package/dist/editor/OnPageEditor.d.ts.map +1 -0
- package/dist/editor/OnPageEditor.js +211 -0
- package/dist/editor/OnPageEditor.js.map +1 -0
- package/dist/editor/useGhosts.d.ts +24 -0
- package/dist/editor/useGhosts.d.ts.map +1 -0
- package/dist/editor/useGhosts.js +34 -0
- package/dist/editor/useGhosts.js.map +1 -0
- package/dist/editor/usePageEvents.d.ts +3 -0
- package/dist/editor/usePageEvents.d.ts.map +1 -0
- package/dist/editor/usePageEvents.js +164 -0
- package/dist/editor/usePageEvents.js.map +1 -0
- package/dist/editor-kit.d.ts +19 -0
- package/dist/editor-kit.d.ts.map +1 -0
- package/dist/editor-kit.js +17 -0
- package/dist/editor-kit.js.map +1 -0
- package/dist/editors/CheckboxEditor.d.ts +3 -0
- package/dist/editors/CheckboxEditor.d.ts.map +1 -0
- package/dist/editors/CheckboxEditor.js +10 -0
- package/dist/editors/CheckboxEditor.js.map +1 -0
- package/dist/editors/ColorEditor.d.ts +4 -0
- package/dist/editors/ColorEditor.d.ts.map +1 -0
- package/dist/editors/ColorEditor.js +21 -0
- package/dist/editors/ColorEditor.js.map +1 -0
- package/dist/editors/DateEditor.d.ts +3 -0
- package/dist/editors/DateEditor.d.ts.map +1 -0
- package/dist/editors/DateEditor.js +28 -0
- package/dist/editors/DateEditor.js.map +1 -0
- package/dist/editors/InlineText.d.ts +4 -0
- package/dist/editors/InlineText.d.ts.map +1 -0
- package/dist/editors/InlineText.js +77 -0
- package/dist/editors/InlineText.js.map +1 -0
- package/dist/editors/NumberEditor.d.ts +4 -0
- package/dist/editors/NumberEditor.d.ts.map +1 -0
- package/dist/editors/NumberEditor.js +23 -0
- package/dist/editors/NumberEditor.js.map +1 -0
- package/dist/editors/RelationshipEditor.d.ts +3 -0
- package/dist/editors/RelationshipEditor.d.ts.map +1 -0
- package/dist/editors/RelationshipEditor.js +60 -0
- package/dist/editors/RelationshipEditor.js.map +1 -0
- package/dist/editors/SelectEditor.d.ts +4 -0
- package/dist/editors/SelectEditor.d.ts.map +1 -0
- package/dist/editors/SelectEditor.js +36 -0
- package/dist/editors/SelectEditor.js.map +1 -0
- package/dist/editors/UploadEditor.d.ts +3 -0
- package/dist/editors/UploadEditor.d.ts.map +1 -0
- package/dist/editors/UploadEditor.js +48 -0
- package/dist/editors/UploadEditor.js.map +1 -0
- package/dist/editors/index.d.ts +13 -0
- package/dist/editors/index.d.ts.map +1 -0
- package/dist/editors/index.js +23 -0
- package/dist/editors/index.js.map +1 -0
- package/dist/editors/useDebouncedSearch.d.ts +17 -0
- package/dist/editors/useDebouncedSearch.d.ts.map +1 -0
- package/dist/editors/useDebouncedSearch.js +50 -0
- package/dist/editors/useDebouncedSearch.js.map +1 -0
- package/dist/hub.d.ts +14 -0
- package/dist/hub.d.ts.map +1 -0
- package/dist/hub.js +20 -0
- package/dist/hub.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/layout.d.ts +12 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +83 -0
- package/dist/layout.js.map +1 -0
- package/dist/locators.d.ts +19 -0
- package/dist/locators.d.ts.map +1 -0
- package/dist/locators.js +215 -0
- package/dist/locators.js.map +1 -0
- package/dist/messages.d.ts +100 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +112 -0
- package/dist/messages.js.map +1 -0
- package/dist/registry.d.ts +15 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +29 -0
- package/dist/registry.js.map +1 -0
- package/dist/renderers.d.ts +7 -0
- package/dist/renderers.d.ts.map +1 -0
- package/dist/renderers.js +12 -0
- package/dist/renderers.js.map +1 -0
- package/dist/sanitize.d.ts +2 -0
- package/dist/sanitize.d.ts.map +1 -0
- package/dist/sanitize.js +49 -0
- package/dist/sanitize.js.map +1 -0
- package/dist/styles.d.ts +8 -0
- package/dist/styles.d.ts.map +1 -0
- package/dist/styles.js +122 -0
- package/dist/styles.js.map +1 -0
- package/dist/targets.d.ts +18 -0
- package/dist/targets.d.ts.map +1 -0
- package/dist/targets.js +86 -0
- package/dist/targets.js.map +1 -0
- package/dist/types.d.ts +131 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/BlockPicker.d.ts +3 -0
- package/dist/ui/BlockPicker.d.ts.map +1 -0
- package/dist/ui/BlockPicker.js +27 -0
- package/dist/ui/BlockPicker.js.map +1 -0
- package/dist/ui/Dialog.d.ts +22 -0
- package/dist/ui/Dialog.d.ts.map +1 -0
- package/dist/ui/Dialog.js +83 -0
- package/dist/ui/Dialog.js.map +1 -0
- package/dist/ui/Dock.d.ts +7 -0
- package/dist/ui/Dock.d.ts.map +1 -0
- package/dist/ui/Dock.js +104 -0
- package/dist/ui/Dock.js.map +1 -0
- package/dist/ui/Overlay.d.ts +2 -0
- package/dist/ui/Overlay.d.ts.map +1 -0
- package/dist/ui/Overlay.js +150 -0
- package/dist/ui/Overlay.js.map +1 -0
- package/dist/ui/PostButton.d.ts +10 -0
- package/dist/ui/PostButton.d.ts.map +1 -0
- package/dist/ui/PostButton.js +7 -0
- package/dist/ui/PostButton.js.map +1 -0
- package/dist/ui/PreviewToolbar.d.ts +15 -0
- package/dist/ui/PreviewToolbar.d.ts.map +1 -0
- package/dist/ui/PreviewToolbar.js +45 -0
- package/dist/ui/PreviewToolbar.js.map +1 -0
- package/dist/ui/SettingsPanel.d.ts +11 -0
- package/dist/ui/SettingsPanel.d.ts.map +1 -0
- package/dist/ui/SettingsPanel.js +130 -0
- package/dist/ui/SettingsPanel.js.map +1 -0
- package/dist/useEvent.d.ts +7 -0
- package/dist/useEvent.d.ts.map +1 -0
- package/dist/useEvent.js +15 -0
- package/dist/useEvent.js.map +1 -0
- package/package.json +71 -4
- package/src/OnPageClient.tsx +67 -0
- package/src/annotations.ts +83 -0
- package/src/context.tsx +23 -0
- package/src/dom.ts +118 -0
- package/src/editor/FieldHost.tsx +66 -0
- package/src/editor/Ghosts.tsx +55 -0
- package/src/editor/OnPageEditor.tsx +315 -0
- package/src/editor/useGhosts.ts +64 -0
- package/src/editor/usePageEvents.ts +161 -0
- package/src/editor-kit.ts +27 -0
- package/src/editors/CheckboxEditor.tsx +31 -0
- package/src/editors/ColorEditor.tsx +64 -0
- package/src/editors/DateEditor.tsx +64 -0
- package/src/editors/InlineText.tsx +106 -0
- package/src/editors/NumberEditor.tsx +69 -0
- package/src/editors/RelationshipEditor.tsx +153 -0
- package/src/editors/SelectEditor.tsx +74 -0
- package/src/editors/UploadEditor.tsx +130 -0
- package/src/editors/index.ts +35 -0
- package/src/editors/useDebouncedSearch.ts +54 -0
- package/src/hub.ts +32 -0
- package/src/index.ts +55 -0
- package/src/layout.ts +83 -0
- package/src/locators.ts +210 -0
- package/src/messages.ts +120 -0
- package/src/registry.ts +43 -0
- package/src/renderers.ts +15 -0
- package/src/sanitize.ts +52 -0
- package/src/styles.ts +122 -0
- package/src/targets.ts +101 -0
- package/src/types.ts +132 -0
- package/src/ui/BlockPicker.tsx +49 -0
- package/src/ui/Dialog.tsx +159 -0
- package/src/ui/Dock.tsx +240 -0
- package/src/ui/Overlay.tsx +324 -0
- package/src/ui/PostButton.tsx +26 -0
- package/src/ui/PreviewToolbar.tsx +123 -0
- package/src/ui/SettingsPanel.tsx +279 -0
- package/src/useEvent.ts +16 -0
package/dist/layout.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** Run `fn` (batched per frame) whenever the page may have moved. Returns an unsubscribe. */
|
|
2
|
+
export declare function onLayoutChange(fn: () => void): () => void;
|
|
3
|
+
/** Tell overlays to re-measure (after the editor changed the page itself). */
|
|
4
|
+
export declare const notifyLayout: () => void;
|
|
5
|
+
/** Re-render on layout changes. */
|
|
6
|
+
export declare function useLayoutTick(): number;
|
|
7
|
+
/**
|
|
8
|
+
* Call `fn(el)` now and whenever `el` may have moved or resized (page layout
|
|
9
|
+
* changes, or the element itself resizing, e.g. live re-render while typing).
|
|
10
|
+
*/
|
|
11
|
+
export declare function useTrackElement(getElement: () => Element | null, fn: (el: Element) => void): void;
|
|
12
|
+
//# sourceMappingURL=layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"AAsCA,6FAA6F;AAC7F,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAOzD;AAED,8EAA8E;AAC9E,eAAO,MAAM,YAAY,QAAO,IAE/B,CAAA;AAED,mCAAmC;AACnC,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,OAAO,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAkBjG"}
|
package/dist/layout.js
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
/**
|
|
3
|
+
* Layout change notifications for everything drawn over the page. Event
|
|
4
|
+
* driven (capture-phase scroll, resize, ResizeObserver on the document and on
|
|
5
|
+
* tracked elements), batched to one callback per animation frame: no polling.
|
|
6
|
+
*/
|
|
7
|
+
import { useEvent } from "./useEvent.js";
|
|
8
|
+
import { useEffect, useState } from 'react';
|
|
9
|
+
const listeners = new Set();
|
|
10
|
+
let frame = 0;
|
|
11
|
+
let observer;
|
|
12
|
+
function emit() {
|
|
13
|
+
if (frame)
|
|
14
|
+
return;
|
|
15
|
+
frame = requestAnimationFrame(() => {
|
|
16
|
+
frame = 0;
|
|
17
|
+
for (const fn of listeners)
|
|
18
|
+
fn();
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
function install() {
|
|
22
|
+
window.addEventListener('scroll', emit, { capture: true, passive: true });
|
|
23
|
+
window.addEventListener('resize', emit, { passive: true });
|
|
24
|
+
observer = new ResizeObserver(emit);
|
|
25
|
+
observer.observe(document.documentElement);
|
|
26
|
+
}
|
|
27
|
+
function uninstall() {
|
|
28
|
+
window.removeEventListener('scroll', emit, { capture: true });
|
|
29
|
+
window.removeEventListener('resize', emit);
|
|
30
|
+
observer?.disconnect();
|
|
31
|
+
observer = undefined;
|
|
32
|
+
if (frame)
|
|
33
|
+
cancelAnimationFrame(frame);
|
|
34
|
+
frame = 0;
|
|
35
|
+
}
|
|
36
|
+
/** Run `fn` (batched per frame) whenever the page may have moved. Returns an unsubscribe. */
|
|
37
|
+
export function onLayoutChange(fn) {
|
|
38
|
+
if (!listeners.size)
|
|
39
|
+
install();
|
|
40
|
+
listeners.add(fn);
|
|
41
|
+
return () => {
|
|
42
|
+
listeners.delete(fn);
|
|
43
|
+
if (!listeners.size)
|
|
44
|
+
uninstall();
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/** Tell overlays to re-measure (after the editor changed the page itself). */
|
|
48
|
+
export const notifyLayout = () => {
|
|
49
|
+
if (listeners.size)
|
|
50
|
+
emit();
|
|
51
|
+
};
|
|
52
|
+
/** Re-render on layout changes. */
|
|
53
|
+
export function useLayoutTick() {
|
|
54
|
+
const [tick, setTick] = useState(0);
|
|
55
|
+
useEffect(() => onLayoutChange(() => setTick((t) => t + 1)), []);
|
|
56
|
+
return tick;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Call `fn(el)` now and whenever `el` may have moved or resized (page layout
|
|
60
|
+
* changes, or the element itself resizing, e.g. live re-render while typing).
|
|
61
|
+
*/
|
|
62
|
+
export function useTrackElement(getElement, fn) {
|
|
63
|
+
const run = useEvent(() => {
|
|
64
|
+
const el = getElement();
|
|
65
|
+
if (el)
|
|
66
|
+
fn(el);
|
|
67
|
+
});
|
|
68
|
+
useEffect(() => {
|
|
69
|
+
run();
|
|
70
|
+
const off = onLayoutChange(run);
|
|
71
|
+
const el = getElement();
|
|
72
|
+
const ro = el ? new ResizeObserver(() => run()) : undefined;
|
|
73
|
+
if (el)
|
|
74
|
+
ro.observe(el);
|
|
75
|
+
return () => {
|
|
76
|
+
off();
|
|
77
|
+
ro?.disconnect();
|
|
78
|
+
};
|
|
79
|
+
// getElement identity may change per render; tracking follows the element via run().
|
|
80
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
81
|
+
}, []);
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Locators — the Locator port's default adapters. Each scans the DOM and
|
|
3
|
+
* returns targets: { el, ref, path, kind }.
|
|
4
|
+
*
|
|
5
|
+
* annotations() data-onpage-* attributes (precise, opt-in)
|
|
6
|
+
* stega() invisible markers in text and <img alt> (automatic), plus
|
|
7
|
+
* inferred rows and lists for array/blocks content
|
|
8
|
+
* composite() merge several; earlier locators win for the same element+path
|
|
9
|
+
*/
|
|
10
|
+
import { type Locator } from '@payload-onpage/core';
|
|
11
|
+
export declare function annotations(): Locator;
|
|
12
|
+
/** "layout.2.items.0.title" → ["layout.2", "layout.2.items.0"] (row paths, outermost first). */
|
|
13
|
+
export declare function rowPrefixes(path: string): string[];
|
|
14
|
+
export declare function stega(opts?: {
|
|
15
|
+
inferRows?: boolean;
|
|
16
|
+
}): Locator;
|
|
17
|
+
/** Merge locators; for the same element and path the earlier locator wins. Rows/lists: one element per path, first wins. */
|
|
18
|
+
export declare function composite(...locators: Locator[]): Locator;
|
|
19
|
+
//# sourceMappingURL=locators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locators.d.ts","sourceRoot":"","sources":["../src/locators.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAKL,KAAK,OAAO,EAGb,MAAM,sBAAsB,CAAA;AAI7B,wBAAgB,WAAW,IAAI,OAAO,CA2BrC;AAeD,gGAAgG;AAChG,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAMlD;AAED,wBAAgB,KAAK,CAAC,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CA0GjE;AAED,4HAA4H;AAC5H,wBAAgB,SAAS,CAAC,GAAG,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CA4BzD"}
|
package/dist/locators.js
ADDED
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Locators — the Locator port's default adapters. Each scans the DOM and
|
|
3
|
+
* returns targets: { el, ref, path, kind }.
|
|
4
|
+
*
|
|
5
|
+
* annotations() data-onpage-* attributes (precise, opt-in)
|
|
6
|
+
* stega() invisible markers in text and <img alt> (automatic), plus
|
|
7
|
+
* inferred rows and lists for array/blocks content
|
|
8
|
+
* composite() merge several; earlier locators win for the same element+path
|
|
9
|
+
*/
|
|
10
|
+
import { parseRefKey, targetKey, stegaDecode, } from '@payload-onpage/core';
|
|
11
|
+
import { ATTR } from "./annotations.js";
|
|
12
|
+
import { UI } from "./dom.js";
|
|
13
|
+
export function annotations() {
|
|
14
|
+
return {
|
|
15
|
+
name: 'annotations',
|
|
16
|
+
scan(root) {
|
|
17
|
+
const out = [];
|
|
18
|
+
root.querySelectorAll(`[${ATTR.ref}]`).forEach((el) => {
|
|
19
|
+
const ref = parseRefKey(el.getAttribute(ATTR.ref) ?? '');
|
|
20
|
+
if (!ref)
|
|
21
|
+
return;
|
|
22
|
+
const label = el.getAttribute(ATTR.label) ?? undefined;
|
|
23
|
+
const field = el.getAttribute(ATTR.field);
|
|
24
|
+
if (field)
|
|
25
|
+
out.push({
|
|
26
|
+
el,
|
|
27
|
+
ref,
|
|
28
|
+
path: field,
|
|
29
|
+
kind: el.getAttribute(ATTR.kind) || 'field',
|
|
30
|
+
label,
|
|
31
|
+
source: 'annotation',
|
|
32
|
+
});
|
|
33
|
+
const row = el.getAttribute(ATTR.row);
|
|
34
|
+
if (row)
|
|
35
|
+
out.push({ el, ref, path: row, kind: 'item', label, source: 'annotation' });
|
|
36
|
+
const list = el.getAttribute(ATTR.list);
|
|
37
|
+
if (list)
|
|
38
|
+
out.push({ el, ref, path: list, kind: 'list', label, source: 'annotation' });
|
|
39
|
+
});
|
|
40
|
+
return out;
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
const SKIP_TAGS = new Set(['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEMPLATE', 'TEXTAREA', 'TITLE']);
|
|
45
|
+
/** Lowest common ancestor of a set of elements. */
|
|
46
|
+
function commonAncestor(els) {
|
|
47
|
+
if (!els.length)
|
|
48
|
+
return null;
|
|
49
|
+
let anc = els[0];
|
|
50
|
+
for (const el of els.slice(1)) {
|
|
51
|
+
while (anc && !anc.contains(el))
|
|
52
|
+
anc = anc.parentElement;
|
|
53
|
+
if (!anc)
|
|
54
|
+
return null;
|
|
55
|
+
}
|
|
56
|
+
return anc;
|
|
57
|
+
}
|
|
58
|
+
/** "layout.2.items.0.title" → ["layout.2", "layout.2.items.0"] (row paths, outermost first). */
|
|
59
|
+
export function rowPrefixes(path) {
|
|
60
|
+
const segs = path.split('.');
|
|
61
|
+
const out = [];
|
|
62
|
+
for (let i = 1; i < segs.length; i++)
|
|
63
|
+
if (/^\d+$/.test(segs[i]) && i < segs.length - 1)
|
|
64
|
+
out.push(segs.slice(0, i + 1).join('.'));
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
export function stega(opts = {}) {
|
|
68
|
+
const inferRows = opts.inferRows ?? true;
|
|
69
|
+
return {
|
|
70
|
+
name: 'stega',
|
|
71
|
+
scan(root) {
|
|
72
|
+
const fields = [];
|
|
73
|
+
const seen = new Set();
|
|
74
|
+
const ids = new WeakMap();
|
|
75
|
+
let nextId = 0;
|
|
76
|
+
const add = (el, ref, path, kind) => {
|
|
77
|
+
let id = ids.get(el);
|
|
78
|
+
if (id === undefined)
|
|
79
|
+
ids.set(el, (id = nextId++));
|
|
80
|
+
const k = `${id}|${targetKey(ref, path)}|${kind}`;
|
|
81
|
+
if (seen.has(k))
|
|
82
|
+
return; // several text nodes of one field in one element
|
|
83
|
+
seen.add(k);
|
|
84
|
+
fields.push({ el, ref, path, kind, source: 'stega' });
|
|
85
|
+
};
|
|
86
|
+
const doc = root.ownerDocument ?? root;
|
|
87
|
+
const walker = doc.createTreeWalker(root, 4 /* NodeFilter.SHOW_TEXT */);
|
|
88
|
+
for (let n = walker.nextNode(); n; n = walker.nextNode()) {
|
|
89
|
+
const text = n.nodeValue;
|
|
90
|
+
if (!text || !text.includes('\u2063\u2062'))
|
|
91
|
+
continue;
|
|
92
|
+
const parent = n.parentElement;
|
|
93
|
+
if (!parent || SKIP_TAGS.has(parent.tagName) || parent.closest(`[${UI}]`))
|
|
94
|
+
continue;
|
|
95
|
+
for (const m of stegaDecode(text)) {
|
|
96
|
+
const ref = parseRefKey(m.ref);
|
|
97
|
+
if (!ref)
|
|
98
|
+
continue;
|
|
99
|
+
// Rich text: map the block that holds all of the field's text (resolved below).
|
|
100
|
+
add(parent, ref, m.path, m.kind === 'richtext' ? 'richtext' : m.kind);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
root.querySelectorAll('img[alt]').forEach((img) => {
|
|
104
|
+
for (const m of stegaDecode(img.getAttribute('alt') ?? '')) {
|
|
105
|
+
const ref = parseRefKey(m.ref);
|
|
106
|
+
if (ref)
|
|
107
|
+
add(img.closest('picture') ?? img, ref, m.path, 'media');
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
// Rich text: one target per field = the common ancestor of all its text.
|
|
111
|
+
const out = [];
|
|
112
|
+
const rich = new Map();
|
|
113
|
+
for (const t of fields) {
|
|
114
|
+
if (t.kind !== 'richtext') {
|
|
115
|
+
out.push(t);
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
const k = targetKey(t.ref, t.path);
|
|
119
|
+
rich.set(k, [...(rich.get(k) ?? []), t]);
|
|
120
|
+
}
|
|
121
|
+
for (const group of rich.values()) {
|
|
122
|
+
const el = commonAncestor(group.map((t) => t.el));
|
|
123
|
+
if (el)
|
|
124
|
+
out.push({ ...group[0], el });
|
|
125
|
+
}
|
|
126
|
+
if (!inferRows)
|
|
127
|
+
return out;
|
|
128
|
+
// Rows: for each row path, the common ancestor of its fields — accepted
|
|
129
|
+
// only if it doesn't also contain a sibling row's fields.
|
|
130
|
+
// Precompute, for every ancestor of a field, the field keys under it (one pass).
|
|
131
|
+
const under = new Map();
|
|
132
|
+
for (const t of out) {
|
|
133
|
+
const key = targetKey(t.ref, t.path);
|
|
134
|
+
for (let el = t.el; el && el !== root; el = el.parentElement) {
|
|
135
|
+
const list = under.get(el);
|
|
136
|
+
if (list)
|
|
137
|
+
list.push(key);
|
|
138
|
+
else
|
|
139
|
+
under.set(el, [key]);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const byRow = new Map();
|
|
143
|
+
for (const t of out) {
|
|
144
|
+
for (const row of rowPrefixes(t.path)) {
|
|
145
|
+
const k = targetKey(t.ref, row);
|
|
146
|
+
const entry = byRow.get(k) ?? { ref: t.ref, path: row, els: [] };
|
|
147
|
+
entry.els.push(t.el);
|
|
148
|
+
byRow.set(k, entry);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const rows = [];
|
|
152
|
+
for (const [rowKey, { ref, path, els }] of byRow) {
|
|
153
|
+
let anc = commonAncestor(els);
|
|
154
|
+
if (!anc || anc === root)
|
|
155
|
+
continue;
|
|
156
|
+
const foreignInside = (el) => (under.get(el) ?? []).some((k) => k !== rowKey && !k.startsWith(`${rowKey}.`));
|
|
157
|
+
if (foreignInside(anc))
|
|
158
|
+
continue; // two rows share one element: can't tell them apart
|
|
159
|
+
// Grow to the row's wrapper: the largest ancestor holding only this row's fields.
|
|
160
|
+
while (anc.parentElement && anc.parentElement !== root && !foreignInside(anc.parentElement))
|
|
161
|
+
anc = anc.parentElement;
|
|
162
|
+
rows.push({ el: anc, ref, path, kind: 'item', source: 'stega' });
|
|
163
|
+
}
|
|
164
|
+
// Lists: the common ancestor of a list's rows.
|
|
165
|
+
const byList = new Map();
|
|
166
|
+
for (const r of [...rows]) {
|
|
167
|
+
const list = r.path.slice(0, r.path.lastIndexOf('.'));
|
|
168
|
+
const k = targetKey(r.ref, list);
|
|
169
|
+
const entry = byList.get(k) ?? { ref: r.ref, path: list, els: [] };
|
|
170
|
+
entry.els.push(r.el);
|
|
171
|
+
byList.set(k, entry);
|
|
172
|
+
}
|
|
173
|
+
for (const { ref, path, els } of byList.values()) {
|
|
174
|
+
const anc = els.length > 1 ? commonAncestor(els) : els[0].parentElement;
|
|
175
|
+
if (anc && anc !== root)
|
|
176
|
+
rows.push({ el: anc, ref, path, kind: 'list', source: 'stega' });
|
|
177
|
+
}
|
|
178
|
+
return [...out, ...rows];
|
|
179
|
+
},
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/** Merge locators; for the same element and path the earlier locator wins. Rows/lists: one element per path, first wins. */
|
|
183
|
+
export function composite(...locators) {
|
|
184
|
+
return {
|
|
185
|
+
name: `composite(${locators.map((l) => l.name).join(',')})`,
|
|
186
|
+
scan(root) {
|
|
187
|
+
const out = [];
|
|
188
|
+
const byPath = new Set();
|
|
189
|
+
const byElPath = new Set();
|
|
190
|
+
const elIds = new WeakMap();
|
|
191
|
+
let next = 0;
|
|
192
|
+
const id = (el) => {
|
|
193
|
+
let v = elIds.get(el);
|
|
194
|
+
if (v === undefined)
|
|
195
|
+
elIds.set(el, (v = next++));
|
|
196
|
+
return v;
|
|
197
|
+
};
|
|
198
|
+
for (const loc of locators) {
|
|
199
|
+
for (const t of loc.scan(root)) {
|
|
200
|
+
const pathKey = `${targetKey(t.ref, t.path)}|${t.kind}`;
|
|
201
|
+
if ((t.kind === 'item' || t.kind === 'list') && byPath.has(pathKey))
|
|
202
|
+
continue;
|
|
203
|
+
const k = `${id(t.el)}|${pathKey}`;
|
|
204
|
+
if (byElPath.has(k))
|
|
205
|
+
continue;
|
|
206
|
+
byElPath.add(k);
|
|
207
|
+
byPath.add(pathKey);
|
|
208
|
+
out.push(t);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return out;
|
|
212
|
+
},
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
//# sourceMappingURL=locators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locators.js","sourceRoot":"","sources":["../src/locators.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EACL,WAAW,EACX,SAAS,EACT,WAAW,GAKZ,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACvC,OAAO,EAAE,EAAE,EAAE,MAAM,UAAU,CAAA;AAE7B,MAAM,UAAU,WAAW;IACzB,OAAO;QACL,IAAI,EAAE,aAAa;QACnB,IAAI,CAAC,IAAI;YACP,MAAM,GAAG,GAAa,EAAE,CAAA;YACxB,IAAI,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;gBACpD,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;gBACxD,IAAI,CAAC,GAAG;oBAAE,OAAM;gBAChB,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,SAAS,CAAA;gBACtD,MAAM,KAAK,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACzC,IAAI,KAAK;oBACP,GAAG,CAAC,IAAI,CAAC;wBACP,EAAE;wBACF,GAAG;wBACH,IAAI,EAAE,KAAK;wBACX,IAAI,EAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAgB,IAAI,OAAO;wBAC3D,KAAK;wBACL,MAAM,EAAE,YAAY;qBACrB,CAAC,CAAA;gBACJ,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACrC,IAAI,GAAG;oBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAA;gBACpF,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACvC,IAAI,IAAI;oBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAA;YACxF,CAAC,CAAC,CAAA;YACF,OAAO,GAAG,CAAA;QACZ,CAAC;KACF,CAAA;AACH,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;AAE3F,mDAAmD;AACnD,SAAS,cAAc,CAAC,GAAc;IACpC,IAAI,CAAC,GAAG,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAC5B,IAAI,GAAG,GAAmB,GAAG,CAAC,CAAC,CAAC,CAAA;IAChC,KAAK,MAAM,EAAE,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,GAAG,GAAG,GAAG,CAAC,aAAa,CAAA;QACxD,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAA;IACvB,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;QAClC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IAC5F,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,OAAgC,EAAE;IACtD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAA;IACxC,OAAO;QACL,IAAI,EAAE,OAAO;QACb,IAAI,CAAC,IAAI;YACP,MAAM,MAAM,GAAa,EAAE,CAAA;YAC3B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;YAC9B,MAAM,GAAG,GAAG,IAAI,OAAO,EAAmB,CAAA;YAC1C,IAAI,MAAM,GAAG,CAAC,CAAA;YACd,MAAM,GAAG,GAAG,CAAC,EAAW,EAAE,GAAW,EAAE,IAAY,EAAE,IAAgB,EAAE,EAAE;gBACvE,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBACpB,IAAI,EAAE,KAAK,SAAS;oBAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAA;gBAClD,MAAM,CAAC,GAAG,GAAG,EAAE,IAAI,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,CAAA;gBACjD,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBAAE,OAAM,CAAC,iDAAiD;gBACzE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;gBACX,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;YACvD,CAAC,CAAA;YAED,MAAM,GAAG,GAAI,IAAa,CAAC,aAAa,IAAK,IAAiB,CAAA;YAC9D,MAAM,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC,CAAC,0BAA0B,CAAC,CAAA;YACvE,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACzD,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAA;gBACxB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC;oBAAE,SAAQ;gBACrD,MAAM,MAAM,GAAG,CAAC,CAAC,aAAa,CAAA;gBAC9B,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;oBAAE,SAAQ;gBACnF,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClC,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;oBAC9B,IAAI,CAAC,GAAG;wBAAE,SAAQ;oBAClB,gFAAgF;oBAChF,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;gBACvE,CAAC;YACH,CAAC;YACD,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBAChD,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;oBAC3D,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;oBAC9B,IAAI,GAAG;wBAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;gBACnE,CAAC;YACH,CAAC,CAAC,CAAA;YAEF,yEAAyE;YACzE,MAAM,GAAG,GAAa,EAAE,CAAA;YACxB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAoB,CAAA;YACxC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBAC1B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;oBACX,SAAQ;gBACV,CAAC;gBACD,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;gBAClC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;YAC1C,CAAC;YACD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;gBAClC,MAAM,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;gBACjD,IAAI,EAAE;oBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;YACvC,CAAC;YAED,IAAI,CAAC,SAAS;gBAAE,OAAO,GAAG,CAAA;YAE1B,wEAAwE;YACxE,0DAA0D;YAC1D,iFAAiF;YACjF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAqB,CAAA;YAC1C,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;gBACpB,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;gBACpC,KAAK,IAAI,EAAE,GAAmB,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;oBAC7E,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;oBAC1B,IAAI,IAAI;wBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;;wBACnB,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAA;gBAC3B,CAAC;YACH,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAyD,CAAA;YAC9E,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;gBACpB,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtC,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;oBAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAA;oBAChE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;oBACpB,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;gBACrB,CAAC;YACH,CAAC;YACD,MAAM,IAAI,GAAa,EAAE,CAAA;YACzB,KAAK,MAAM,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;gBACjD,IAAI,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAA;gBAC7B,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,IAAI;oBAAE,SAAQ;gBAClC,MAAM,aAAa,GAAG,CAAC,EAAW,EAAE,EAAE,CACpC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,CAAA;gBAChF,IAAI,aAAa,CAAC,GAAG,CAAC;oBAAE,SAAQ,CAAC,oDAAoD;gBACrF,kFAAkF;gBAClF,OAAO,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,aAAa,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC;oBACzF,GAAG,GAAG,GAAG,CAAC,aAAa,CAAA;gBACzB,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;YAClE,CAAC;YACD,+CAA+C;YAC/C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyD,CAAA;YAC/E,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA;gBACrD,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;gBAChC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAAA;gBAClE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;gBACpB,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;YACtB,CAAC;YACD,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;gBACjD,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAA;gBACvE,IAAI,GAAG,IAAI,GAAG,KAAK,IAAI;oBAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAA;YAC3F,CAAC;YACD,OAAO,CAAC,GAAG,GAAG,EAAE,GAAG,IAAI,CAAC,CAAA;QAC1B,CAAC;KACF,CAAA;AACH,CAAC;AAED,4HAA4H;AAC5H,MAAM,UAAU,SAAS,CAAC,GAAG,QAAmB;IAC9C,OAAO;QACL,IAAI,EAAE,aAAa,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;QAC3D,IAAI,CAAC,IAAI;YACP,MAAM,GAAG,GAAa,EAAE,CAAA;YACxB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAA;YAChC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAA;YAClC,MAAM,KAAK,GAAG,IAAI,OAAO,EAAmB,CAAA;YAC5C,IAAI,IAAI,GAAG,CAAC,CAAA;YACZ,MAAM,EAAE,GAAG,CAAC,EAAW,EAAE,EAAE;gBACzB,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;gBACrB,IAAI,CAAC,KAAK,SAAS;oBAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAA;gBAChD,OAAO,CAAC,CAAA;YACV,CAAC,CAAA;YACD,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC3B,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC/B,MAAM,OAAO,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAA;oBACvD,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;wBAAE,SAAQ;oBAC7E,MAAM,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,OAAO,EAAE,CAAA;oBAClC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;wBAAE,SAAQ;oBAC7B,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;oBACf,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;oBACnB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACb,CAAC;YACH,CAAC;YACD,OAAO,GAAG,CAAA;QACZ,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every string the editor shows, with English defaults. Override any subset
|
|
3
|
+
* with the `messages` prop (e.g. from your site's translations). `{name}`
|
|
4
|
+
* placeholders are filled from the variables passed to `t()`.
|
|
5
|
+
*/
|
|
6
|
+
export declare const defaultMessages: {
|
|
7
|
+
readonly 'dock.label': "Page editor";
|
|
8
|
+
readonly 'dock.loading': "Loading editor…";
|
|
9
|
+
readonly 'dock.unavailable': "{doc}: {error}";
|
|
10
|
+
readonly 'dock.nothing': "Nothing editable on this page";
|
|
11
|
+
readonly 'dock.conflict': "{doc}: changed by someone else";
|
|
12
|
+
readonly 'dock.saving': "Saving draft…";
|
|
13
|
+
readonly 'dock.updating': "Updating page…";
|
|
14
|
+
readonly 'dock.saved': "Draft saved {ago}";
|
|
15
|
+
readonly 'dock.editing': "Editing draft";
|
|
16
|
+
readonly 'dock.documents': "{count} documents";
|
|
17
|
+
readonly 'dock.localeNotice': "Editing {locale}: text changes apply to this language only; adding, moving or removing sections changes every language.";
|
|
18
|
+
readonly 'dock.reload': "Reload latest";
|
|
19
|
+
readonly 'dock.retry': "Retry";
|
|
20
|
+
readonly 'dock.undo': "Undo";
|
|
21
|
+
readonly 'dock.redo': "Redo";
|
|
22
|
+
readonly 'dock.preview': "Preview";
|
|
23
|
+
readonly 'dock.previewHint': "See the draft without editing tools";
|
|
24
|
+
readonly 'dock.share': "Share";
|
|
25
|
+
readonly 'dock.shareHint': "Copy a read-only link to this draft";
|
|
26
|
+
readonly 'dock.discard': "Discard";
|
|
27
|
+
readonly 'dock.discardConfirm': "Confirm discard?";
|
|
28
|
+
readonly 'dock.discardHint': "Throw away draft changes and return to the published content";
|
|
29
|
+
readonly 'dock.admin': "Admin";
|
|
30
|
+
readonly 'dock.exit': "Exit";
|
|
31
|
+
readonly 'dock.publish': "Publish";
|
|
32
|
+
readonly 'dock.publishing': "Publishing…";
|
|
33
|
+
readonly 'notify.published': "Published ✓";
|
|
34
|
+
readonly 'notify.nothingToPublish': "Nothing to publish";
|
|
35
|
+
readonly 'notify.publishFailed': "Publish failed: {message}";
|
|
36
|
+
readonly 'notify.discarded': "Draft reset to the published version";
|
|
37
|
+
readonly 'notify.linkCopied': "Preview link copied — valid until {date}";
|
|
38
|
+
readonly 'notify.linkFailed': "Couldn't create a preview link: {message}";
|
|
39
|
+
readonly 'notify.loading': "Loading the editor…";
|
|
40
|
+
readonly 'notify.cantEdit': "Can't edit: {message}";
|
|
41
|
+
readonly 'row.moveUp': "Move up";
|
|
42
|
+
readonly 'row.moveDown': "Move down";
|
|
43
|
+
readonly 'row.duplicate': "Duplicate";
|
|
44
|
+
readonly 'row.settings': "Settings";
|
|
45
|
+
readonly 'row.delete': "Delete (undo with ⌘Z)";
|
|
46
|
+
readonly 'row.addSection': "Add section";
|
|
47
|
+
readonly 'row.addFirstSection': "Add a section";
|
|
48
|
+
readonly 'row.addItem': "Add {item}";
|
|
49
|
+
readonly 'row.toolbar': "{label} actions";
|
|
50
|
+
readonly 'settings.title': "{label} settings";
|
|
51
|
+
readonly 'settings.close': "Close settings";
|
|
52
|
+
readonly 'settings.chooseImage': "Choose image…";
|
|
53
|
+
readonly 'settings.changeImage': "Change image…";
|
|
54
|
+
readonly 'blocks.title': "Add section";
|
|
55
|
+
readonly 'common.close': "Close";
|
|
56
|
+
readonly 'common.apply': "Apply";
|
|
57
|
+
readonly 'common.clear': "Clear";
|
|
58
|
+
readonly 'common.remove': "Remove";
|
|
59
|
+
readonly 'common.none': "—";
|
|
60
|
+
readonly 'common.selected': "{count} selected";
|
|
61
|
+
readonly 'search.placeholder': "Search…";
|
|
62
|
+
readonly 'search.unsupported': "This data source can't search documents.";
|
|
63
|
+
readonly 'media.search': "Search images…";
|
|
64
|
+
readonly 'media.upload': "Upload…";
|
|
65
|
+
readonly 'media.empty': "No images found.";
|
|
66
|
+
readonly 'media.more': "Load more";
|
|
67
|
+
readonly 'media.loading': "Loading…";
|
|
68
|
+
readonly 'inline.label': "Edit {field}";
|
|
69
|
+
readonly 'preview.label': "Draft preview";
|
|
70
|
+
readonly 'preview.badge': "Draft";
|
|
71
|
+
readonly 'preview.shared': "Shared preview — not published yet";
|
|
72
|
+
readonly 'preview.own': "Previewing the draft";
|
|
73
|
+
readonly 'preview.phone': "Phone";
|
|
74
|
+
readonly 'preview.tablet': "Tablet";
|
|
75
|
+
readonly 'preview.desktop': "Desktop";
|
|
76
|
+
readonly 'preview.edit': "Edit";
|
|
77
|
+
readonly 'preview.exit': "Exit";
|
|
78
|
+
readonly 'preview.viewPublished': "View published";
|
|
79
|
+
readonly 'rt.toolbar': "Text formatting";
|
|
80
|
+
readonly 'rt.bold': "Bold";
|
|
81
|
+
readonly 'rt.italic': "Italic";
|
|
82
|
+
readonly 'rt.underline': "Underline";
|
|
83
|
+
readonly 'rt.link': "Link";
|
|
84
|
+
readonly 'rt.h2': "Heading 2";
|
|
85
|
+
readonly 'rt.h3': "Heading 3";
|
|
86
|
+
readonly 'rt.ul': "Bulleted list";
|
|
87
|
+
readonly 'rt.ol': "Numbered list";
|
|
88
|
+
readonly 'rt.quote': "Quote";
|
|
89
|
+
readonly 'rt.done': "Done";
|
|
90
|
+
readonly 'rt.linkPlaceholder': "https://… or /page (empty removes the link)";
|
|
91
|
+
readonly 'rt.linkInvalid': "Use an https://, mailto:, tel: or relative link";
|
|
92
|
+
};
|
|
93
|
+
export type MessageKey = keyof typeof defaultMessages;
|
|
94
|
+
export type Messages = Partial<Record<MessageKey, string>>;
|
|
95
|
+
/** Translate a message key (unknown keys are returned as-is, so plain text works too). */
|
|
96
|
+
export type Translate = (key: MessageKey | (string & {}), vars?: Record<string, string | number>) => string;
|
|
97
|
+
export declare function createTranslate(overrides?: Messages): Translate;
|
|
98
|
+
/** "5 seconds ago", "2 minutes ago", in the browser's language. */
|
|
99
|
+
export declare function relativeTime(ts: number, now?: number, locale?: string): string;
|
|
100
|
+
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuFlB,CAAA;AAEV,MAAM,MAAM,UAAU,GAAG,MAAM,OAAO,eAAe,CAAA;AACrD,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAA;AAC1D,0FAA0F;AAC1F,MAAM,MAAM,SAAS,GAAG,CACtB,GAAG,EAAE,UAAU,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,EAC/B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,KACnC,MAAM,CAAA;AAEX,wBAAgB,eAAe,CAAC,SAAS,GAAE,QAAa,GAAG,SAAS,CAQnE;AAED,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,SAAa,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAMlF"}
|
package/dist/messages.js
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every string the editor shows, with English defaults. Override any subset
|
|
3
|
+
* with the `messages` prop (e.g. from your site's translations). `{name}`
|
|
4
|
+
* placeholders are filled from the variables passed to `t()`.
|
|
5
|
+
*/
|
|
6
|
+
export const defaultMessages = {
|
|
7
|
+
'dock.label': 'Page editor',
|
|
8
|
+
'dock.loading': 'Loading editor…',
|
|
9
|
+
'dock.unavailable': '{doc}: {error}',
|
|
10
|
+
'dock.nothing': 'Nothing editable on this page',
|
|
11
|
+
'dock.conflict': '{doc}: changed by someone else',
|
|
12
|
+
'dock.saving': 'Saving draft…',
|
|
13
|
+
'dock.updating': 'Updating page…',
|
|
14
|
+
'dock.saved': 'Draft saved {ago}',
|
|
15
|
+
'dock.editing': 'Editing draft',
|
|
16
|
+
'dock.documents': '{count} documents',
|
|
17
|
+
'dock.localeNotice': 'Editing {locale}: text changes apply to this language only; adding, moving or removing sections changes every language.',
|
|
18
|
+
'dock.reload': 'Reload latest',
|
|
19
|
+
'dock.retry': 'Retry',
|
|
20
|
+
'dock.undo': 'Undo',
|
|
21
|
+
'dock.redo': 'Redo',
|
|
22
|
+
'dock.preview': 'Preview',
|
|
23
|
+
'dock.previewHint': 'See the draft without editing tools',
|
|
24
|
+
'dock.share': 'Share',
|
|
25
|
+
'dock.shareHint': 'Copy a read-only link to this draft',
|
|
26
|
+
'dock.discard': 'Discard',
|
|
27
|
+
'dock.discardConfirm': 'Confirm discard?',
|
|
28
|
+
'dock.discardHint': 'Throw away draft changes and return to the published content',
|
|
29
|
+
'dock.admin': 'Admin',
|
|
30
|
+
'dock.exit': 'Exit',
|
|
31
|
+
'dock.publish': 'Publish',
|
|
32
|
+
'dock.publishing': 'Publishing…',
|
|
33
|
+
'notify.published': 'Published ✓',
|
|
34
|
+
'notify.nothingToPublish': 'Nothing to publish',
|
|
35
|
+
'notify.publishFailed': 'Publish failed: {message}',
|
|
36
|
+
'notify.discarded': 'Draft reset to the published version',
|
|
37
|
+
'notify.linkCopied': 'Preview link copied — valid until {date}',
|
|
38
|
+
'notify.linkFailed': "Couldn't create a preview link: {message}",
|
|
39
|
+
'notify.loading': 'Loading the editor…',
|
|
40
|
+
'notify.cantEdit': "Can't edit: {message}",
|
|
41
|
+
'row.moveUp': 'Move up',
|
|
42
|
+
'row.moveDown': 'Move down',
|
|
43
|
+
'row.duplicate': 'Duplicate',
|
|
44
|
+
'row.settings': 'Settings',
|
|
45
|
+
'row.delete': 'Delete (undo with ⌘Z)',
|
|
46
|
+
'row.addSection': 'Add section',
|
|
47
|
+
'row.addFirstSection': 'Add a section',
|
|
48
|
+
'row.addItem': 'Add {item}',
|
|
49
|
+
'row.toolbar': '{label} actions',
|
|
50
|
+
'settings.title': '{label} settings',
|
|
51
|
+
'settings.close': 'Close settings',
|
|
52
|
+
'settings.chooseImage': 'Choose image…',
|
|
53
|
+
'settings.changeImage': 'Change image…',
|
|
54
|
+
'blocks.title': 'Add section',
|
|
55
|
+
'common.close': 'Close',
|
|
56
|
+
'common.apply': 'Apply',
|
|
57
|
+
'common.clear': 'Clear',
|
|
58
|
+
'common.remove': 'Remove',
|
|
59
|
+
'common.none': '—',
|
|
60
|
+
'common.selected': '{count} selected',
|
|
61
|
+
'search.placeholder': 'Search…',
|
|
62
|
+
'search.unsupported': "This data source can't search documents.",
|
|
63
|
+
'media.search': 'Search images…',
|
|
64
|
+
'media.upload': 'Upload…',
|
|
65
|
+
'media.empty': 'No images found.',
|
|
66
|
+
'media.more': 'Load more',
|
|
67
|
+
'media.loading': 'Loading…',
|
|
68
|
+
'inline.label': 'Edit {field}',
|
|
69
|
+
'preview.label': 'Draft preview',
|
|
70
|
+
'preview.badge': 'Draft',
|
|
71
|
+
'preview.shared': 'Shared preview — not published yet',
|
|
72
|
+
'preview.own': 'Previewing the draft',
|
|
73
|
+
'preview.phone': 'Phone',
|
|
74
|
+
'preview.tablet': 'Tablet',
|
|
75
|
+
'preview.desktop': 'Desktop',
|
|
76
|
+
'preview.edit': 'Edit',
|
|
77
|
+
'preview.exit': 'Exit',
|
|
78
|
+
'preview.viewPublished': 'View published',
|
|
79
|
+
'rt.toolbar': 'Text formatting',
|
|
80
|
+
'rt.bold': 'Bold',
|
|
81
|
+
'rt.italic': 'Italic',
|
|
82
|
+
'rt.underline': 'Underline',
|
|
83
|
+
'rt.link': 'Link',
|
|
84
|
+
'rt.h2': 'Heading 2',
|
|
85
|
+
'rt.h3': 'Heading 3',
|
|
86
|
+
'rt.ul': 'Bulleted list',
|
|
87
|
+
'rt.ol': 'Numbered list',
|
|
88
|
+
'rt.quote': 'Quote',
|
|
89
|
+
'rt.done': 'Done',
|
|
90
|
+
'rt.linkPlaceholder': 'https://… or /page (empty removes the link)',
|
|
91
|
+
'rt.linkInvalid': 'Use an https://, mailto:, tel: or relative link',
|
|
92
|
+
};
|
|
93
|
+
export function createTranslate(overrides = {}) {
|
|
94
|
+
const table = { ...defaultMessages, ...overrides };
|
|
95
|
+
return (key, vars) => {
|
|
96
|
+
const template = table[key] ?? key;
|
|
97
|
+
return vars
|
|
98
|
+
? template.replace(/\{(\w+)\}/g, (m, name) => (name in vars ? String(vars[name]) : m))
|
|
99
|
+
: template;
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/** "5 seconds ago", "2 minutes ago", in the browser's language. */
|
|
103
|
+
export function relativeTime(ts, now = Date.now(), locale) {
|
|
104
|
+
const s = Math.round((ts - now) / 1000);
|
|
105
|
+
const rtf = new Intl.RelativeTimeFormat(locale, { numeric: 'auto' });
|
|
106
|
+
if (Math.abs(s) < 60)
|
|
107
|
+
return rtf.format(s, 'second');
|
|
108
|
+
if (Math.abs(s) < 3600)
|
|
109
|
+
return rtf.format(Math.round(s / 60), 'minute');
|
|
110
|
+
return rtf.format(Math.round(s / 3600), 'hour');
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=messages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Field-editor resolution. For a field shown on the page, the editor is:
|
|
3
|
+
* 1. the field's own choice: admin.custom.onpage.editor ("color", "my-editor")
|
|
4
|
+
* 2. what the element says it shows: an annotation/marker kind of text,
|
|
5
|
+
* textarea, richtext or media
|
|
6
|
+
* 3. the editor registered for the field's type ("select", "date", "json"…)
|
|
7
|
+
* No match: the field isn't edited in place (it may still be in the row's
|
|
8
|
+
* settings panel).
|
|
9
|
+
*/
|
|
10
|
+
import type { SchemaField, TargetKind } from '@payload-onpage/core';
|
|
11
|
+
import type { EditorRegistry } from './types.ts';
|
|
12
|
+
export declare function resolveEditor(editors: EditorRegistry, field: SchemaField, kind?: TargetKind): string | null;
|
|
13
|
+
/** Merge registries left to right; `null` removes a default. */
|
|
14
|
+
export declare function mergeEditors(...regs: Array<Record<string, EditorRegistry[string] | null> | undefined>): EditorRegistry;
|
|
15
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAKhD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,WAAW,EAClB,IAAI,CAAC,EAAE,UAAU,GAChB,MAAM,GAAG,IAAI,CAQf;AAED,gEAAgE;AAChE,wBAAgB,YAAY,CAC1B,GAAG,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,SAAS,CAAC,GACxE,cAAc,CAUhB"}
|
package/dist/registry.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const KIND_EDITOR = { richtext: 'richText', media: 'upload' };
|
|
2
|
+
const TEXTUAL = new Set(['text', 'textarea', 'email']);
|
|
3
|
+
export function resolveEditor(editors, field, kind) {
|
|
4
|
+
if (field.editor && editors[field.editor])
|
|
5
|
+
return field.editor;
|
|
6
|
+
// A marker/annotation saying "text" keeps the field's own textual type (email stays email).
|
|
7
|
+
if ((kind === 'text' || kind === 'textarea') && TEXTUAL.has(field.type) && editors[field.type])
|
|
8
|
+
return field.type;
|
|
9
|
+
const byKind = kind ? KIND_EDITOR[kind] : undefined;
|
|
10
|
+
if (byKind && editors[byKind] && (byKind !== 'upload' || field.type === 'upload'))
|
|
11
|
+
return byKind;
|
|
12
|
+
return editors[field.type] ? field.type : null;
|
|
13
|
+
}
|
|
14
|
+
/** Merge registries left to right; `null` removes a default. */
|
|
15
|
+
export function mergeEditors(...regs) {
|
|
16
|
+
const out = {};
|
|
17
|
+
for (const r of regs) {
|
|
18
|
+
if (!r)
|
|
19
|
+
continue;
|
|
20
|
+
for (const [k, v] of Object.entries(r)) {
|
|
21
|
+
if (v)
|
|
22
|
+
out[k] = v;
|
|
23
|
+
else
|
|
24
|
+
delete out[k];
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return out;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,GAAwC,EAAE,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;AAClG,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAA;AAEtD,MAAM,UAAU,aAAa,CAC3B,OAAuB,EACvB,KAAkB,EAClB,IAAiB;IAEjB,IAAI,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC,MAAM,CAAA;IAC9D,4FAA4F;IAC5F,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,UAAU,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;QAC5F,OAAO,KAAK,CAAC,IAAI,CAAA;IACnB,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACnD,IAAI,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;QAAE,OAAO,MAAM,CAAA;IAChG,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;AAChD,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,YAAY,CAC1B,GAAG,IAAsE;IAEzE,MAAM,GAAG,GAAmB,EAAE,CAAA;IAC9B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC,CAAC;YAAE,SAAQ;QAChB,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACvC,IAAI,CAAC;gBAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;;gBACZ,OAAO,GAAG,CAAC,CAAC,CAAC,CAAA;QACpB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
|