@actuate-media/cms-admin 0.72.2 → 0.73.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/CHANGELOG.md +39 -0
- package/dist/__tests__/components/resizable-aside.test.d.ts +2 -0
- package/dist/__tests__/components/resizable-aside.test.d.ts.map +1 -0
- package/dist/__tests__/components/resizable-aside.test.js +77 -0
- package/dist/__tests__/components/resizable-aside.test.js.map +1 -0
- package/dist/__tests__/components/toggle.test.d.ts +2 -0
- package/dist/__tests__/components/toggle.test.d.ts.map +1 -0
- package/dist/__tests__/components/toggle.test.js +17 -0
- package/dist/__tests__/components/toggle.test.js.map +1 -0
- package/dist/__tests__/views/post-fields-modal.render.test.js +38 -0
- package/dist/__tests__/views/post-fields-modal.render.test.js.map +1 -1
- package/dist/actuate-admin.css +1 -1
- package/dist/components/MediaPickerModal.d.ts.map +1 -1
- package/dist/components/MediaPickerModal.js +1 -1
- package/dist/components/MediaPickerModal.js.map +1 -1
- package/dist/components/TagInput.js +1 -1
- package/dist/components/TagInput.js.map +1 -1
- package/dist/components/ui/Modal.d.ts +17 -1
- package/dist/components/ui/Modal.d.ts.map +1 -1
- package/dist/components/ui/Modal.js +29 -3
- package/dist/components/ui/Modal.js.map +1 -1
- package/dist/components/ui/ResizableAside.d.ts +38 -0
- package/dist/components/ui/ResizableAside.d.ts.map +1 -0
- package/dist/components/ui/ResizableAside.js +209 -0
- package/dist/components/ui/ResizableAside.js.map +1 -0
- package/dist/components/ui/Toggle.d.ts.map +1 -1
- package/dist/components/ui/Toggle.js +4 -3
- package/dist/components/ui/Toggle.js.map +1 -1
- package/dist/fields/RichTextField.d.ts +3 -1
- package/dist/fields/RichTextField.d.ts.map +1 -1
- package/dist/fields/RichTextField.js +2 -2
- package/dist/fields/RichTextField.js.map +1 -1
- package/dist/views/Dashboard.d.ts.map +1 -1
- package/dist/views/Dashboard.js +1 -1
- package/dist/views/Dashboard.js.map +1 -1
- package/dist/views/page-editor/PageSectionEditor.js +1 -1
- package/dist/views/page-editor/PageSectionEditor.js.map +1 -1
- package/dist/views/page-editor/SectionInspector.d.ts +4 -1
- package/dist/views/page-editor/SectionInspector.d.ts.map +1 -1
- package/dist/views/page-editor/SectionInspector.js +14 -3
- package/dist/views/page-editor/SectionInspector.js.map +1 -1
- package/dist/views/post-editor/PostFieldsModal.d.ts +1 -1
- package/dist/views/post-editor/PostFieldsModal.d.ts.map +1 -1
- package/dist/views/post-editor/PostFieldsModal.js +152 -13
- package/dist/views/post-editor/PostFieldsModal.js.map +1 -1
- package/dist/views/post-editor/PostHeaderPanel.d.ts.map +1 -1
- package/dist/views/post-editor/PostHeaderPanel.js +2 -1
- package/dist/views/post-editor/PostHeaderPanel.js.map +1 -1
- package/dist/views/post-editor/PostSectionEditor.d.ts.map +1 -1
- package/dist/views/post-editor/PostSectionEditor.js +6 -1
- package/dist/views/post-editor/PostSectionEditor.js.map +1 -1
- package/dist/views/post-editor/PostTemplateEditor.js +1 -1
- package/dist/views/post-editor/PostTemplateEditor.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/components/resizable-aside.test.tsx +130 -0
- package/src/__tests__/components/toggle.test.tsx +17 -0
- package/src/__tests__/views/post-fields-modal.render.test.tsx +54 -0
- package/src/components/MediaPickerModal.tsx +6 -2
- package/src/components/TagInput.tsx +1 -1
- package/src/components/ui/Modal.tsx +46 -3
- package/src/components/ui/ResizableAside.tsx +317 -0
- package/src/components/ui/Toggle.tsx +4 -3
- package/src/fields/RichTextField.tsx +4 -1
- package/src/styles/actuate-tokens.css +7 -2
- package/src/views/Dashboard.tsx +2 -1
- package/src/views/page-editor/PageSectionEditor.tsx +1 -1
- package/src/views/page-editor/SectionInspector.tsx +54 -26
- package/src/views/post-editor/PostFieldsModal.tsx +412 -174
- package/src/views/post-editor/PostHeaderPanel.tsx +15 -11
- package/src/views/post-editor/PostSectionEditor.tsx +9 -1
- package/src/views/post-editor/PostTemplateEditor.tsx +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,44 @@
|
|
|
1
1
|
# @actuate-media/cms-admin
|
|
2
2
|
|
|
3
|
+
## 0.73.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 1bd984f: Add drag-to-resize on the page and post section inspector panel with a 44px touch handle, one-tap expand/collapse, container-aware width limits, and overlay mode on tablet/mobile. Width persists in localStorage (280–640px on desktop, up to near-full width on narrow viewports).
|
|
8
|
+
|
|
9
|
+
## 0.72.3
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- d1ffaeb: Darken the `--muted` text token to meet WCAG AA contrast.
|
|
14
|
+
|
|
15
|
+
Section labels, hint/help text, and muted icons used `--muted` at the raw
|
|
16
|
+
design-token value (#B0ADBE light / #504E68 dark), which is ~2.2:1 against
|
|
17
|
+
card surfaces — barely visible. The token is now #716E83 (light) and
|
|
18
|
+
#8784A2 (dark): >=4.5:1 on card and page backgrounds in both modes, while
|
|
19
|
+
staying one step lighter than `--sub` so the text hierarchy (txt > sub >
|
|
20
|
+
muted) is preserved everywhere the token is used.
|
|
21
|
+
|
|
22
|
+
Also marks the dashboard's literal date line as `data-volatile` so visual
|
|
23
|
+
regression tests mask it instead of drifting daily.
|
|
24
|
+
|
|
25
|
+
Fix toggle thumb alignment to match the design system's `.tog-thumb`
|
|
26
|
+
handoff: absolute positioning at `top/left: 2.5px`, sliding to `left:
|
|
27
|
+
19.5px` when checked. The previous flex + translate layout pinned the knob
|
|
28
|
+
to the top of the 21px track and left it 2px short horizontally when on.
|
|
29
|
+
|
|
30
|
+
- d1ffaeb: Improve the post fields modal layout and fix nested media picker stacking.
|
|
31
|
+
- Widen the Post details dialog (`Modal` size `lg`) for metadata-only setup
|
|
32
|
+
(title, slug, excerpt, featured image, SEO). Body editing moves to the
|
|
33
|
+
Article Body section inspector on the canvas.
|
|
34
|
+
- Use visible `border-border` inputs (replacing transparent `border-input`) to
|
|
35
|
+
match the body editor chrome.
|
|
36
|
+
- Add AI generate buttons for excerpt, SEO title, and SEO description (coauthor
|
|
37
|
+
for unsaved drafts; governed SEO endpoint when the post is persisted).
|
|
38
|
+
- Raise `MediaPickerModal` to z-70 so Browse opens above z-60 form modals.
|
|
39
|
+
- Confirm before closing the post details dialog when there are unsaved edits
|
|
40
|
+
(outside click, Escape, header X, or Cancel).
|
|
41
|
+
|
|
3
42
|
## 0.72.2
|
|
4
43
|
|
|
5
44
|
### Patch Changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resizable-aside.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/components/resizable-aside.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
// @vitest-environment happy-dom
|
|
3
|
+
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
4
|
+
import { fireEvent, render, screen } from '@testing-library/react';
|
|
5
|
+
import { InspectorExpandButton, ResizableAside, SECTION_INSPECTOR_DEFAULT_WIDTH, SECTION_INSPECTOR_MIN_WIDTH, SECTION_INSPECTOR_WIDTH_KEY, computeInspectorMaxWidth, computeInspectorOverlayWidth, readSectionInspectorWidth, } from '../../components/ui/ResizableAside.js';
|
|
6
|
+
const storage = new Map();
|
|
7
|
+
vi.stubGlobal('localStorage', {
|
|
8
|
+
getItem: (key) => storage.get(key) ?? null,
|
|
9
|
+
setItem: (key, value) => void storage.set(key, String(value)),
|
|
10
|
+
removeItem: (key) => void storage.delete(key),
|
|
11
|
+
clear: () => storage.clear(),
|
|
12
|
+
});
|
|
13
|
+
vi.stubGlobal('ResizeObserver', class {
|
|
14
|
+
callback;
|
|
15
|
+
constructor(callback) {
|
|
16
|
+
this.callback = callback;
|
|
17
|
+
}
|
|
18
|
+
observe(target) {
|
|
19
|
+
const width = target instanceof HTMLElement
|
|
20
|
+
? Number.parseFloat(target.style.width) || target.clientWidth || 900
|
|
21
|
+
: 900;
|
|
22
|
+
this.callback([{ contentRect: { width, height: 600 } }], this);
|
|
23
|
+
}
|
|
24
|
+
unobserve() { }
|
|
25
|
+
disconnect() { }
|
|
26
|
+
});
|
|
27
|
+
afterEach(() => {
|
|
28
|
+
storage.clear();
|
|
29
|
+
});
|
|
30
|
+
describe('inspector width helpers', () => {
|
|
31
|
+
it('caps inline max width to the container minus a canvas peek', () => {
|
|
32
|
+
expect(computeInspectorMaxWidth(1200)).toBe(640);
|
|
33
|
+
expect(computeInspectorMaxWidth(500)).toBe(404);
|
|
34
|
+
expect(computeInspectorMaxWidth(200)).toBe(SECTION_INSPECTOR_MIN_WIDTH);
|
|
35
|
+
});
|
|
36
|
+
it('computes overlay width for narrow editor rows', () => {
|
|
37
|
+
expect(computeInspectorOverlayWidth(375)).toBe(343);
|
|
38
|
+
expect(computeInspectorOverlayWidth(768)).toBe(480);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
describe('ResizableAside', () => {
|
|
42
|
+
it('renders a vertical resize separator with keyboard support', () => {
|
|
43
|
+
render(_jsx("div", { style: { width: 900 }, children: _jsx(ResizableAside, { "aria-label": "Section editor", children: _jsx("p", { children: "Inspector content" }) }) }));
|
|
44
|
+
expect(screen.getByText('Inspector content')).toBeTruthy();
|
|
45
|
+
const separator = screen.getByRole('separator', { name: 'Resize inspector panel' });
|
|
46
|
+
expect(separator.getAttribute('aria-orientation')).toBe('vertical');
|
|
47
|
+
expect(separator.getAttribute('aria-valuemin')).toBe(String(SECTION_INSPECTOR_MIN_WIDTH));
|
|
48
|
+
});
|
|
49
|
+
it('widens when dragging the separator left', () => {
|
|
50
|
+
render(_jsx("div", { style: { width: 900 }, children: _jsx(ResizableAside, { "aria-label": "Section editor", children: _jsx("p", { children: "Inspector content" }) }) }));
|
|
51
|
+
const aside = screen.getByLabelText('Section editor');
|
|
52
|
+
const separator = screen.getByRole('separator', { name: 'Resize inspector panel' });
|
|
53
|
+
expect(aside.style.width).toBe(`${SECTION_INSPECTOR_DEFAULT_WIDTH}px`);
|
|
54
|
+
fireEvent.pointerDown(separator, { clientX: 900, button: 0, pointerId: 1 });
|
|
55
|
+
fireEvent.pointerMove(separator, { clientX: 860, pointerId: 1 });
|
|
56
|
+
expect(aside.style.width).toBe(`${SECTION_INSPECTOR_DEFAULT_WIDTH + 40}px`);
|
|
57
|
+
fireEvent.pointerUp(separator, { pointerId: 1 });
|
|
58
|
+
expect(localStorage.getItem(SECTION_INSPECTOR_WIDTH_KEY)).toBe(String(SECTION_INSPECTOR_DEFAULT_WIDTH + 40));
|
|
59
|
+
});
|
|
60
|
+
it('nudges width with arrow keys and persists', () => {
|
|
61
|
+
render(_jsx("div", { style: { width: 900 }, children: _jsx(ResizableAside, { "aria-label": "Section editor", children: _jsx("p", { children: "Inspector content" }) }) }));
|
|
62
|
+
const aside = screen.getByLabelText('Section editor');
|
|
63
|
+
const separator = screen.getByRole('separator', { name: 'Resize inspector panel' });
|
|
64
|
+
separator.focus();
|
|
65
|
+
fireEvent.keyDown(separator, { key: 'ArrowLeft' });
|
|
66
|
+
expect(aside.style.width).toBe(`${SECTION_INSPECTOR_DEFAULT_WIDTH + 16}px`);
|
|
67
|
+
expect(readSectionInspectorWidth()).toBe(SECTION_INSPECTOR_DEFAULT_WIDTH + 16);
|
|
68
|
+
});
|
|
69
|
+
it('expands to overlay width on narrow containers', () => {
|
|
70
|
+
render(_jsx("div", { style: { width: 375 }, children: _jsxs(ResizableAside, { "aria-label": "Section editor", children: [_jsx(InspectorExpandButton, {}), _jsx("p", { children: "Inspector content" })] }) }));
|
|
71
|
+
const aside = screen.getByLabelText('Section editor');
|
|
72
|
+
fireEvent.click(screen.getByRole('button', { name: 'Expand inspector panel' }));
|
|
73
|
+
expect(aside.getAttribute('data-overlay')).toBe('');
|
|
74
|
+
expect(aside.style.width).toBe(`${computeInspectorOverlayWidth(375)}px`);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
//# sourceMappingURL=resizable-aside.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resizable-aside.test.js","sourceRoot":"","sources":["../../../src/__tests__/components/resizable-aside.test.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAChC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,+BAA+B,EAC/B,2BAA2B,EAC3B,2BAA2B,EAC3B,wBAAwB,EACxB,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,uCAAuC,CAAA;AAE9C,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAA;AACzC,EAAE,CAAC,UAAU,CAAC,cAAc,EAAE;IAC5B,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI;IAClD,OAAO,EAAE,CAAC,GAAW,EAAE,KAAa,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7E,UAAU,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;IACrD,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE;CAC7B,CAAC,CAAA;AAEF,EAAE,CAAC,UAAU,CACX,gBAAgB,EAChB;IACsB;IAApB,YAAoB,QAAgC;QAAhC,aAAQ,GAAR,QAAQ,CAAwB;IAAG,CAAC;IACxD,OAAO,CAAC,MAAe;QACrB,MAAM,KAAK,GACT,MAAM,YAAY,WAAW;YAC3B,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,WAAW,IAAI,GAAG;YACpE,CAAC,CAAC,GAAG,CAAA;QACT,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAyB,CAAC,EAAE,IAAI,CAAC,CAAA;IACvF,CAAC;IACD,SAAS,KAAI,CAAC;IACd,UAAU,KAAI,CAAC;CAChB,CACF,CAAA;AAED,SAAS,CAAC,GAAG,EAAE;IACb,OAAO,CAAC,KAAK,EAAE,CAAA;AACjB,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAChD,MAAM,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC/C,MAAM,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;IACzE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACnD,MAAM,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACrD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,CACJ,cAAK,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,YACxB,KAAC,cAAc,kBAAY,gBAAgB,YACzC,4CAAwB,GACT,GACb,CACP,CAAA;QAED,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAAA;QACnF,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACnE,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAA;IAC3F,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,CACJ,cAAK,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,YACxB,KAAC,cAAc,kBAAY,gBAAgB,YACzC,4CAAwB,GACT,GACb,CACP,CAAA;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAA;QACrD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAAA;QAEnF,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,+BAA+B,IAAI,CAAC,CAAA;QAEtE,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAA;QAC3E,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAA;QAChE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,+BAA+B,GAAG,EAAE,IAAI,CAAC,CAAA;QAE3E,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAA;QAChD,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC,IAAI,CAC5D,MAAM,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAC7C,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,CACJ,cAAK,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,YACxB,KAAC,cAAc,kBAAY,gBAAgB,YACzC,4CAAwB,GACT,GACb,CACP,CAAA;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAA;QACrD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAAA;QAEnF,SAAS,CAAC,KAAK,EAAE,CAAA;QACjB,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,CAAC,CAAA;QAClD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,+BAA+B,GAAG,EAAE,IAAI,CAAC,CAAA;QAC3E,MAAM,CAAC,yBAAyB,EAAE,CAAC,CAAC,IAAI,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAA;IAChF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CACJ,cAAK,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,YACxB,MAAC,cAAc,kBAAY,gBAAgB,aACzC,KAAC,qBAAqB,KAAG,EACzB,4CAAwB,IACT,GACb,CACP,CAAA;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAA;QACrD,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAAC,CAAA;QAE/E,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACnD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toggle.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/components/toggle.test.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// @vitest-environment happy-dom
|
|
3
|
+
import { afterEach, describe, expect, it } from 'vitest';
|
|
4
|
+
import { cleanup, render, screen } from '@testing-library/react';
|
|
5
|
+
import { Toggle } from '../../components/ui/Toggle.js';
|
|
6
|
+
afterEach(cleanup);
|
|
7
|
+
describe('Toggle', () => {
|
|
8
|
+
it('positions the thumb with design-system absolute offsets', () => {
|
|
9
|
+
render(_jsx(Toggle, { checked: false, onCheckedChange: () => { }, "aria-label": "Test toggle" }));
|
|
10
|
+
const thumb = screen.getByRole('switch').querySelector('span');
|
|
11
|
+
expect(thumb?.className).toContain('absolute');
|
|
12
|
+
expect(thumb?.className).toContain('top-[2.5px]');
|
|
13
|
+
expect(thumb?.className).toContain('left-[2.5px]');
|
|
14
|
+
expect(thumb?.className).toContain('data-[state=checked]:left-[19.5px]');
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=toggle.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toggle.test.js","sourceRoot":"","sources":["../../../src/__tests__/components/toggle.test.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAChC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAEtD,SAAS,CAAC,OAAO,CAAC,CAAA;AAElB,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,KAAC,MAAM,IAAC,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,GAAE,CAAC,gBAAa,aAAa,GAAG,CAAC,CAAA;QACtF,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC9D,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QAC9C,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAA;QACjD,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;QAClD,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAA;IAC1E,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -17,6 +17,15 @@ vi.mock('../../lib/api.js', () => ({
|
|
|
17
17
|
vi.mock('../../fields/RichTextField.js', () => ({
|
|
18
18
|
RichTextField: () => _jsx("div", { "data-testid": "rich-text" }),
|
|
19
19
|
}));
|
|
20
|
+
vi.mock('../../lib/coauthor-client.js', () => ({
|
|
21
|
+
coauthorText: vi.fn(async () => ({
|
|
22
|
+
ok: true,
|
|
23
|
+
result: { action: 'compress', text: 'AI excerpt' },
|
|
24
|
+
})),
|
|
25
|
+
}));
|
|
26
|
+
vi.mock('../../lib/seo-service.js', () => ({
|
|
27
|
+
generateSeoField: vi.fn(async () => ({ text: 'AI SEO title' })),
|
|
28
|
+
}));
|
|
20
29
|
const { PostFieldsModal } = await import('../../views/post-editor/PostFieldsModal.js');
|
|
21
30
|
function basePost(over = {}) {
|
|
22
31
|
return {
|
|
@@ -82,5 +91,34 @@ describe('PostFieldsModal', () => {
|
|
|
82
91
|
fireEvent.click(screen.getByRole('button', { name: 'Done' }));
|
|
83
92
|
expect(onSave).toHaveBeenCalledWith(expect.objectContaining({ category: 'tutorials', tags: ['AI', 'CMS'] }));
|
|
84
93
|
});
|
|
94
|
+
it('derives slug from title until the slug field is edited', () => {
|
|
95
|
+
render(_jsx(PostFieldsModal, { open: true, post: basePost({ title: '', slug: '' }), canEdit: true, onClose: () => { }, onSave: () => { } }));
|
|
96
|
+
fireEvent.change(screen.getByLabelText(/^Title/), { target: { value: 'Hello World' } });
|
|
97
|
+
expect(screen.getByLabelText(/^Slug/).value).toBe('hello-world');
|
|
98
|
+
fireEvent.change(screen.getByLabelText(/^Slug/), { target: { value: 'custom-slug' } });
|
|
99
|
+
fireEvent.change(screen.getByLabelText(/^Title/), { target: { value: 'Changed Title' } });
|
|
100
|
+
expect(screen.getByLabelText(/^Slug/).value).toBe('custom-slug');
|
|
101
|
+
});
|
|
102
|
+
it('exposes AI generate controls for excerpt and SEO fields', () => {
|
|
103
|
+
render(_jsx(PostFieldsModal, { open: true, post: basePost(), canEdit: true, onClose: () => { }, onSave: () => { } }));
|
|
104
|
+
expect(screen.getByRole('button', { name: 'Generate excerpt from content' })).toBeTruthy();
|
|
105
|
+
expect(screen.getByRole('button', { name: 'Generate SEO title from content' })).toBeTruthy();
|
|
106
|
+
expect(screen.getByRole('button', { name: 'Generate SEO description from content' })).toBeTruthy();
|
|
107
|
+
});
|
|
108
|
+
it('prompts before discarding when Cancel is clicked with unsaved edits', () => {
|
|
109
|
+
const onClose = vi.fn();
|
|
110
|
+
render(_jsx(PostFieldsModal, { open: true, post: basePost(), canEdit: true, onClose: onClose, onSave: () => { } }));
|
|
111
|
+
fireEvent.change(screen.getByLabelText(/^Title/), { target: { value: 'Changed title' } });
|
|
112
|
+
fireEvent.click(screen.getByRole('button', { name: 'Cancel' }));
|
|
113
|
+
expect(onClose).not.toHaveBeenCalled();
|
|
114
|
+
expect(screen.getByRole('dialog', { name: 'Discard unsaved changes?' })).toBeTruthy();
|
|
115
|
+
});
|
|
116
|
+
it('closes without prompting when nothing changed', () => {
|
|
117
|
+
const onClose = vi.fn();
|
|
118
|
+
render(_jsx(PostFieldsModal, { open: true, post: basePost(), canEdit: true, onClose: onClose, onSave: () => { } }));
|
|
119
|
+
fireEvent.click(screen.getByRole('button', { name: 'Cancel' }));
|
|
120
|
+
expect(onClose).toHaveBeenCalledTimes(1);
|
|
121
|
+
expect(screen.queryByRole('dialog', { name: 'Discard unsaved changes?' })).toBeNull();
|
|
122
|
+
});
|
|
85
123
|
});
|
|
86
124
|
//# sourceMappingURL=post-fields-modal.render.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"post-fields-modal.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/post-fields-modal.render.test.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"post-fields-modal.render.test.js","sourceRoot":"","sources":["../../../src/__tests__/views/post-fields-modal.render.test.tsx"],"names":[],"mappings":";AAAA,gCAAgC;AAChC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAElE;;;;;GAKG;AAEH,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;AAExF,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,CAAC;IACjC,MAAM,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,MAAM,CAAC,GAAI,IAAW,CAAC;IACvD,eAAe,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,GAAE,CAAC,CAAC;CACvC,CAAC,CAAC,CAAA;AAEH,6DAA6D;AAC7D,EAAE,CAAC,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC9C,aAAa,EAAE,GAAG,EAAE,CAAC,6BAAiB,WAAW,GAAG;CACrD,CAAC,CAAC,CAAA;AAEH,EAAE,CAAC,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7C,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QAC/B,EAAE,EAAE,IAAI;QACR,MAAM,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE;KACnD,CAAC,CAAC;CACJ,CAAC,CAAC,CAAA;AAEH,EAAE,CAAC,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE,CAAC,CAAC;IACzC,gBAAgB,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;CAChE,CAAC,CAAC,CAAA;AAEH,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,4CAA4C,CAAC,CAAA;AAGtF,SAAS,QAAQ,CAAC,OAAoC,EAAE;IACtD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,EAAE;QACX,aAAa,EAAE,EAAE;QACjB,IAAI,EAAE,EAAE;QACR,QAAQ,EAAE,EAAE;QACZ,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,EAAE;QAClB,WAAW,EAAE,IAAI;QACjB,SAAS,EAAE,IAAI;QACf,GAAG,IAAI;KACR,CAAA;AACH,CAAC;AAED,MAAM,aAAa,GAAyB;IAC1C,QAAQ,EAAE;QACR,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;YAChC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;SAC3C;KACF;IACD,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE;CACrC,CAAA;AAED,UAAU,CAAC,GAAG,EAAE;IACd,MAAM,CAAC,SAAS,EAAE,CAAA;AACpB,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CACJ,KAAC,eAAe,IACd,IAAI,QACJ,IAAI,EAAE,QAAQ,EAAE,EAChB,OAAO,QACP,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,EACjB,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,GAChB,CACH,CAAA;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,UAAU,CAAsB,CAAA;QACrE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACrC,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAA;QAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uEAAuE,EAAE,GAAG,EAAE;QAC/E,MAAM,CACJ,KAAC,eAAe,IACd,IAAI,QACJ,IAAI,EAAE,QAAQ,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,EAC1C,OAAO,QACP,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,EACjB,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,GAChB,CACH,CAAA;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,UAAU,CAAsB,CAAA;QACrE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,KAAC,eAAe,IAAC,IAAI,QAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,QAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,GAAI,CAAC,CAAA;QAC/F,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,UAAU,CAAqB,CAAA;QACnE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACnC,oCAAoC;QACpC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,EAAE,CAAA;QACtB,MAAM,CACJ,KAAC,eAAe,IACd,IAAI,QACJ,IAAI,EAAE,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAChC,OAAO,QACP,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,EACjB,MAAM,EAAE,MAAM,GACd,CACH,CAAA;QACD,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,CAAA;QACvF,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;QAC9C,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAA;QACxD,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAA;QAC7C,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;QAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,oBAAoB,CACjC,MAAM,CAAC,gBAAgB,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CACxE,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CACJ,KAAC,eAAe,IACd,IAAI,QACJ,IAAI,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EACvC,OAAO,QACP,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,EACjB,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,GAChB,CACH,CAAA;QACD,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,CAAC,CAAA;QACvF,MAAM,CAAE,MAAM,CAAC,cAAc,CAAC,OAAO,CAAsB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACtF,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,CAAC,CAAA;QACtF,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,CAAC,CAAA;QACzF,MAAM,CAAE,MAAM,CAAC,cAAc,CAAC,OAAO,CAAsB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IACxF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,KAAC,eAAe,IAAC,IAAI,QAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,QAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,GAAI,CAAC,CAAA;QAC/F,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,+BAA+B,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QAC1F,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,iCAAiC,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;QAC5F,MAAM,CACJ,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,uCAAuC,EAAE,CAAC,CAC9E,CAAC,UAAU,EAAE,CAAA;IAChB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAA;QACvB,MAAM,CAAC,KAAC,eAAe,IAAC,IAAI,QAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,QAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,GAAI,CAAC,CAAA;QAC9F,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,CAAC,CAAA;QACzF,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;QAC/D,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAA;QACtC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,CAAC,CAAC,UAAU,EAAE,CAAA;IACvF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAA;QACvB,MAAM,CAAC,KAAC,eAAe,IAAC,IAAI,QAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,OAAO,QAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,GAAI,CAAC,CAAA;QAC9F,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;QAC/D,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAA;QACxC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IACvF,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|