@tekki-forge/runtime-admin 0.2.0 → 0.3.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.
Files changed (136) hide show
  1. package/dist/admin-dashboard.d.ts +16 -0
  2. package/dist/admin-dashboard.js +60 -0
  3. package/dist/admin-dashboard.js.map +1 -0
  4. package/dist/admin-orgs.d.ts +14 -0
  5. package/dist/admin-orgs.js +75 -0
  6. package/dist/admin-orgs.js.map +1 -0
  7. package/dist/admin-shell.d.ts +55 -0
  8. package/dist/admin-shell.js +141 -0
  9. package/dist/admin-shell.js.map +1 -0
  10. package/dist/admin.js +35 -4
  11. package/dist/admin.js.map +1 -1
  12. package/dist/app-pages.d.ts +19 -0
  13. package/dist/app-pages.js +109 -0
  14. package/dist/app-pages.js.map +1 -0
  15. package/dist/auth-pages.js +7 -2
  16. package/dist/auth-pages.js.map +1 -1
  17. package/dist/charts.d.ts +98 -2
  18. package/dist/charts.js +264 -24
  19. package/dist/charts.js.map +1 -1
  20. package/dist/context.js +32 -1
  21. package/dist/context.js.map +1 -1
  22. package/dist/dashboard.d.ts +63 -8
  23. package/dist/dashboard.js +180 -36
  24. package/dist/dashboard.js.map +1 -1
  25. package/dist/i18n/messages/de.js +751 -0
  26. package/dist/i18n/messages/de.js.map +1 -1
  27. package/dist/i18n/messages/en.js +751 -0
  28. package/dist/i18n/messages/en.js.map +1 -1
  29. package/dist/i18n/messages/es.js +751 -0
  30. package/dist/i18n/messages/es.js.map +1 -1
  31. package/dist/i18n/messages/fr.js +751 -0
  32. package/dist/i18n/messages/fr.js.map +1 -1
  33. package/dist/i18n/messages/pt.js +751 -0
  34. package/dist/i18n/messages/pt.js.map +1 -1
  35. package/dist/index.d.ts +9 -0
  36. package/dist/index.js +9 -0
  37. package/dist/index.js.map +1 -1
  38. package/dist/shell.js +37 -34
  39. package/dist/shell.js.map +1 -1
  40. package/dist/site/editor/api.d.ts +74 -0
  41. package/dist/site/editor/api.js +93 -0
  42. package/dist/site/editor/api.js.map +1 -0
  43. package/dist/site/editor/content-page.d.ts +4 -0
  44. package/dist/site/editor/content-page.js +65 -0
  45. package/dist/site/editor/content-page.js.map +1 -0
  46. package/dist/site/editor/inbox-tab.d.ts +4 -0
  47. package/dist/site/editor/inbox-tab.js +88 -0
  48. package/dist/site/editor/inbox-tab.js.map +1 -0
  49. package/dist/site/editor/index.d.ts +1 -0
  50. package/dist/site/editor/index.js +3 -0
  51. package/dist/site/editor/index.js.map +1 -0
  52. package/dist/site/editor/model.d.ts +145 -0
  53. package/dist/site/editor/model.js +408 -0
  54. package/dist/site/editor/model.js.map +1 -0
  55. package/dist/site/editor/page-editor.d.ts +10 -0
  56. package/dist/site/editor/page-editor.js +257 -0
  57. package/dist/site/editor/page-editor.js.map +1 -0
  58. package/dist/site/editor/page-settings.d.ts +9 -0
  59. package/dist/site/editor/page-settings.js +105 -0
  60. package/dist/site/editor/page-settings.js.map +1 -0
  61. package/dist/site/editor/pages-tab.d.ts +5 -0
  62. package/dist/site/editor/pages-tab.js +108 -0
  63. package/dist/site/editor/pages-tab.js.map +1 -0
  64. package/dist/site/editor/posts-tab.d.ts +6 -0
  65. package/dist/site/editor/posts-tab.js +139 -0
  66. package/dist/site/editor/posts-tab.js.map +1 -0
  67. package/dist/site/editor/preview.d.ts +32 -0
  68. package/dist/site/editor/preview.js +104 -0
  69. package/dist/site/editor/preview.js.map +1 -0
  70. package/dist/site/editor/prop-fields.d.ts +53 -0
  71. package/dist/site/editor/prop-fields.js +233 -0
  72. package/dist/site/editor/prop-fields.js.map +1 -0
  73. package/dist/site/editor/section-list.d.ts +14 -0
  74. package/dist/site/editor/section-list.js +110 -0
  75. package/dist/site/editor/section-list.js.map +1 -0
  76. package/dist/site/editor/section-picker.d.ts +12 -0
  77. package/dist/site/editor/section-picker.js +44 -0
  78. package/dist/site/editor/section-picker.js.map +1 -0
  79. package/dist/site/editor/widgets.d.ts +84 -0
  80. package/dist/site/editor/widgets.js +130 -0
  81. package/dist/site/editor/widgets.js.map +1 -0
  82. package/dist/site/format.d.ts +31 -0
  83. package/dist/site/format.js +106 -0
  84. package/dist/site/format.js.map +1 -0
  85. package/dist/site/forms.d.ts +43 -0
  86. package/dist/site/forms.js +155 -0
  87. package/dist/site/forms.js.map +1 -0
  88. package/dist/site/header.d.ts +32 -0
  89. package/dist/site/header.js +76 -0
  90. package/dist/site/header.js.map +1 -0
  91. package/dist/site/icons.d.ts +10 -0
  92. package/dist/site/icons.js +28 -0
  93. package/dist/site/icons.js.map +1 -0
  94. package/dist/site/index.d.ts +11 -0
  95. package/dist/site/index.js +13 -0
  96. package/dist/site/index.js.map +1 -0
  97. package/dist/site/markdown.d.ts +14 -0
  98. package/dist/site/markdown.js +457 -0
  99. package/dist/site/markdown.js.map +1 -0
  100. package/dist/site/page.d.ts +16 -0
  101. package/dist/site/page.js +65 -0
  102. package/dist/site/page.js.map +1 -0
  103. package/dist/site/proxy.d.ts +13 -0
  104. package/dist/site/proxy.js +43 -0
  105. package/dist/site/proxy.js.map +1 -0
  106. package/dist/site/sections.d.ts +43 -0
  107. package/dist/site/sections.js +560 -0
  108. package/dist/site/sections.js.map +1 -0
  109. package/dist/site/server.d.ts +73 -0
  110. package/dist/site/server.js +235 -0
  111. package/dist/site/server.js.map +1 -0
  112. package/dist/site/types.d.ts +137 -0
  113. package/dist/site/types.js +2 -0
  114. package/dist/site/types.js.map +1 -0
  115. package/dist/support.d.ts +29 -0
  116. package/dist/support.js +165 -0
  117. package/dist/support.js.map +1 -0
  118. package/dist/system-config.d.ts +24 -0
  119. package/dist/system-config.js +37 -0
  120. package/dist/system-config.js.map +1 -0
  121. package/dist/system-settings.d.ts +9 -0
  122. package/dist/system-settings.js +60 -0
  123. package/dist/system-settings.js.map +1 -0
  124. package/dist/theme-catalog.d.ts +72 -2
  125. package/dist/theme-catalog.js +47 -0
  126. package/dist/theme-catalog.js.map +1 -1
  127. package/dist/theme-switcher.d.ts +8 -0
  128. package/dist/theme-switcher.js +39 -4
  129. package/dist/theme-switcher.js.map +1 -1
  130. package/dist/theme.js +8 -0
  131. package/dist/theme.js.map +1 -1
  132. package/dist/transactions.d.ts +4 -0
  133. package/dist/transactions.js +60 -0
  134. package/dist/transactions.js.map +1 -0
  135. package/package.json +9 -5
  136. package/styles.css +1089 -0
@@ -0,0 +1,233 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { SITE_ICONS } from "@tekki-forge/compiler/site";
4
+ import { ArrowDown, ArrowUp, ChevronDown, ChevronRight, Copy, ImageUp, Plus, Sparkles, Trash2, X } from "lucide-react";
5
+ import { useId, useMemo, useRef, useState } from "react";
6
+ import { useForge } from "../../context.js";
7
+ import { ENTITY_ICON_COMPONENTS } from "../../entity-icons.js";
8
+ import { LANDING_ICON_COMPONENTS } from "../../landing.js";
9
+ import { Badge, cn, Input, Label, Select, Textarea } from "../../ui.js";
10
+ import { Markdown } from "../markdown.js";
11
+ import { useImageUpload } from "./api.js";
12
+ import { alignCells, dataEntities, duplicateItem, emptyItem, entityFieldOptions, errorAt, errorCount, formatSort, fromInput, moveItem, parseSort, propVisible, removeItem, rowsToFilter, setProp, toInput, } from "./model.js";
13
+ import { Switch } from "./widgets.js";
14
+ /** Label of a prop: `siteAdmin.prop.<type>.<name>` when the library names it differently in that section, else `siteAdmin.prop.<name>`. */
15
+ export function usePropLabel() {
16
+ const { t } = useForge();
17
+ return (type, spec) => {
18
+ const specific = `siteAdmin.prop.${type}.${spec.name}`;
19
+ const own = t(specific);
20
+ return own !== specific ? own : t(`siteAdmin.prop.${spec.name}`);
21
+ };
22
+ }
23
+ const fieldId = (ctx, path) => `${ctx.idPrefix}-${path.replace(/[^\w-]/g, "-")}`;
24
+ /** Every visible prop of an object (a section's props, or a list item). */
25
+ export function PropsForm({ fields, value, onChange, path, ctx }) {
26
+ const visible = fields.filter((f) => propVisible(f, fields, value));
27
+ const groups = [];
28
+ // An image and its description travel together.
29
+ for (const f of visible) {
30
+ const prev = groups[groups.length - 1];
31
+ if (prev && prev[0].kind === "image" && prev.length === 1 && (f.name === "imageAlt" || f.name === "alt"))
32
+ prev.push(f);
33
+ else
34
+ groups.push([f]);
35
+ }
36
+ return (_jsx("div", { className: "space-y-4", children: groups.map((group) => {
37
+ const body = group.map((spec) => (_jsx(PropField, { spec: spec, value: value[spec.name], path: path ? `${path}.${spec.name}` : spec.name, ctx: ctx, siblings: value, onChange: (v) => onChange(setProp(fields, value, spec.name, v)) }, spec.name)));
38
+ return group.length > 1 ? (_jsx("div", { className: "forge-card-flat space-y-3 p-3", children: body }, group[0].name)) : (body);
39
+ }) }));
40
+ }
41
+ function Field({ id, label, required, error, hint, children, aside }) {
42
+ const { tv } = useForge();
43
+ return (_jsxs("div", { children: [_jsxs("div", { className: "flex items-end justify-between gap-2", children: [_jsx(Label, { htmlFor: id, required: required, children: label }), aside && _jsx("div", { className: "mb-1.5", children: aside })] }), children, error ? (_jsx("p", { id: id ? `${id}-error` : undefined, className: "mt-1 text-xs text-danger", children: tv(error) })) : hint ? (_jsx("p", { className: "mt-1 text-xs text-ink-muted", children: hint })) : null] }));
44
+ }
45
+ export function PropField({ spec, value, onChange, path, ctx, siblings }) {
46
+ const { t } = useForge();
47
+ const propLabel = usePropLabel();
48
+ const label = propLabel(ctx.type, spec);
49
+ const id = fieldId(ctx, path);
50
+ const error = errorAt(ctx.errors, path);
51
+ const a11y = { id, "aria-invalid": error ? true : undefined, "aria-describedby": error ? `${id}-error` : undefined };
52
+ const input = toInput(spec, value);
53
+ const set = (v) => onChange(fromInput(spec, v));
54
+ const entityName = typeof siblings.entity === "string" ? siblings.entity : "";
55
+ const entity = ctx.app.entities.find((e) => e.name === entityName);
56
+ switch (spec.kind) {
57
+ case "text":
58
+ case "href":
59
+ return (_jsx(Field, { id: id, label: label, required: spec.required, error: error, hint: spec.kind === "href" ? t("siteAdmin.hint.href") : undefined, children: _jsx(Input, { ...a11y, type: spec.format === "email" ? "email" : spec.format === "phone" ? "tel" : "text", inputMode: spec.kind === "href" ? "url" : undefined, value: input, maxLength: spec.max ? spec.max + 50 : undefined, onChange: (e) => set(e.target.value) }) }));
60
+ case "textarea":
61
+ return (_jsx(Field, { id: id, label: label, required: spec.required, error: error, children: _jsx(Textarea, { ...a11y, rows: 3, value: input, onChange: (e) => set(e.target.value) }) }));
62
+ case "markdown":
63
+ return _jsx(MarkdownField, { a11y: a11y, label: label, required: spec.required, error: error, value: input, onChange: set });
64
+ case "image":
65
+ return _jsx(ImageField, { a11y: a11y, label: label, required: spec.required, error: error, value: input, onChange: set, storage: ctx.storage });
66
+ case "link":
67
+ return _jsx(LinkField, { id: id, label: label, required: spec.required, errors: { label: ctx.errors[`${path}.label`], href: ctx.errors[`${path}.href`], own: ctx.errors[path] }, value: input, onChange: set });
68
+ case "icon":
69
+ return _jsx(IconField, { a11y: a11y, label: label, error: error, value: input, onChange: set });
70
+ case "select":
71
+ return (_jsx(Field, { id: id, label: label, required: spec.required, error: error, children: _jsxs(Select, { ...a11y, value: input, onChange: (e) => set(e.target.value), children: [_jsx("option", { value: "", children: spec.name === "aggregate" ? t("siteAdmin.option.aggregate.count") : t("siteAdmin.form.default") }), (spec.options ?? []).filter((o) => !(spec.name === "aggregate" && o === "count")).map((o) => (_jsx("option", { value: o, children: t(`siteAdmin.option.${spec.name}.${o}`) }, o)))] }) }));
72
+ case "number":
73
+ return (_jsx(Field, { id: id, label: label, required: spec.required, error: error, hint: spec.min !== undefined && spec.max !== undefined ? t("siteAdmin.hint.range", { min: spec.min, max: spec.max }) : undefined, children: _jsx(Input, { ...a11y, type: "number", inputMode: "numeric", min: spec.min, max: spec.max, value: input, onChange: (e) => set(e.target.value), className: "max-w-40" }) }));
74
+ case "boolean":
75
+ return (_jsxs("div", { className: "flex items-center justify-between gap-3", children: [_jsx("label", { htmlFor: id, className: "text-sm font-medium text-ink", children: label }), _jsx(Switch, { id: id, checked: input, onChange: set }), error && _jsx("p", { className: "text-xs text-danger", children: error })] }));
76
+ case "strings":
77
+ return _jsx(StringsField, { id: id, label: label, required: spec.required, error: error, max: spec.max, value: input, onChange: set });
78
+ case "list":
79
+ return _jsx(ListField, { spec: spec, value: input, onChange: set, path: path, ctx: ctx, label: label, error: ctx.errors[path] });
80
+ case "entity":
81
+ return _jsx(EntityField, { a11y: a11y, label: label, required: spec.required, error: error, value: input, onChange: set, app: ctx.app });
82
+ case "fields":
83
+ return _jsx(FieldsField, { id: id, label: label, error: error, max: spec.max, entity: entity, value: input, onChange: set });
84
+ case "field":
85
+ return (_jsx(Field, { id: id, label: label, error: error, children: _jsxs(Select, { ...a11y, value: input, onChange: (e) => set(e.target.value), children: [_jsx("option", { value: "", children: t("common.select") }), entityFieldOptions(entity, "field").map((f) => (_jsx("option", { value: f.name, children: f.label }, f.name)))] }) }));
86
+ case "filter":
87
+ return _jsx(FilterField, { id: id, label: label, error: error, entity: entity, value: input, onChange: (rows) => onChange(rowsToFilter(rows)) });
88
+ case "sort":
89
+ return _jsx(SortField, { a11y: a11y, label: label, error: error, entity: entity, value: value, onChange: onChange });
90
+ case "cells":
91
+ return _jsx(CellsField, { id: id, label: label, error: error, columns: ctx.columns, value: input, onChange: set });
92
+ }
93
+ }
94
+ function MarkdownField({ a11y, label, required, error, value, onChange }) {
95
+ const { t } = useForge();
96
+ const [preview, setPreview] = useState(false);
97
+ return (_jsx(Field, { id: a11y.id, label: label, required: required, error: error, hint: t("siteAdmin.hint.markdown"), aside: _jsxs("div", { className: "flex gap-0.5 text-xs", role: "group", "aria-label": label, children: [_jsx("button", { type: "button", "aria-pressed": !preview, onClick: () => setPreview(false), className: cn("forge-btn rounded px-2 py-0.5", !preview ? "forge-btn-secondary" : "forge-btn-ghost"), children: t("siteAdmin.markdown.write") }), _jsx("button", { type: "button", "aria-pressed": preview, onClick: () => setPreview(true), className: cn("forge-btn rounded px-2 py-0.5", preview ? "forge-btn-secondary" : "forge-btn-ghost"), children: t("siteAdmin.markdown.preview") })] }), children: preview ? (_jsx("div", { className: "forge-input max-h-80 min-h-24 overflow-y-auto px-3 py-2 text-sm", tabIndex: 0, "aria-label": t("siteAdmin.markdown.preview"), children: value.trim() ? _jsx(Markdown, { source: value }) : _jsx("p", { className: "text-ink-subtle", children: t("siteAdmin.markdown.empty") }) })) : (_jsx(Textarea, { ...a11y, rows: 8, className: "font-mono text-xs leading-relaxed", value: value, onChange: (e) => onChange(e.target.value) })) }));
98
+ }
99
+ /** Image: URL (or upload when the storage plugin is installed) with a thumbnail. */
100
+ export function ImageField({ a11y, label, required, error, value, onChange, storage }) {
101
+ const { t } = useForge();
102
+ const upload = useImageUpload();
103
+ const fileRef = useRef(null);
104
+ const [progress, setProgress] = useState(null);
105
+ const [uploadError, setUploadError] = useState(null);
106
+ const [broken, setBroken] = useState(null);
107
+ const start = async (file) => {
108
+ setUploadError(null);
109
+ if (!file.type.startsWith("image/"))
110
+ return setUploadError(t("siteAdmin.image.notImage"));
111
+ if (file.size > 10 * 1024 * 1024)
112
+ return setUploadError(t("siteAdmin.image.tooLarge"));
113
+ setProgress(0);
114
+ try {
115
+ onChange(await upload(file, setProgress));
116
+ }
117
+ catch (e) {
118
+ setUploadError(e.message === "network" ? t("fields.file.uploadFailedNetwork") : e.message);
119
+ }
120
+ finally {
121
+ setProgress(null);
122
+ }
123
+ };
124
+ return (_jsxs(Field, { id: a11y.id, label: label, required: required, error: error ?? uploadError ?? undefined, hint: storage ? undefined : t("siteAdmin.image.noStorage"), children: [_jsxs("div", { className: "flex items-start gap-3", children: [_jsx("div", { className: "flex size-16 shrink-0 items-center justify-center overflow-hidden rounded-[var(--forge-radius-control)] border border-line bg-surface-muted", children: value && broken !== value ? _jsx("img", { src: value, alt: "", className: "size-full object-cover", onError: () => setBroken(value) }) : _jsx(ImageUp, { className: "size-5 text-ink-subtle", "aria-hidden": true }) }), _jsxs("div", { className: "min-w-0 flex-1 space-y-2", children: [_jsx(Input, { ...a11y, type: "text", inputMode: "url", placeholder: "https://\u2026 or /image.png", value: value, onChange: (e) => onChange(e.target.value) }), _jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [storage && (_jsxs("button", { type: "button", className: "forge-btn forge-btn-secondary inline-flex h-7 items-center gap-1.5 px-2.5 text-xs font-medium", disabled: progress !== null, onClick: () => fileRef.current?.click(), children: [_jsx(ImageUp, { className: "size-3.5", "aria-hidden": true }), " ", progress === null ? t("siteAdmin.image.upload") : t("fields.file.uploading", { percent: progress })] })), value && (_jsxs("button", { type: "button", className: "forge-btn forge-btn-ghost inline-flex h-7 items-center gap-1 px-2 text-xs", onClick: () => onChange(""), children: [_jsx(X, { className: "size-3.5", "aria-hidden": true }), " ", t("common.remove")] }))] }), progress !== null && (_jsx("div", { className: "h-1 overflow-hidden rounded-full bg-line", role: "progressbar", "aria-label": t("siteAdmin.image.upload"), "aria-valuenow": progress, "aria-valuemin": 0, "aria-valuemax": 100, children: _jsx("div", { className: "h-full bg-primary", style: { width: `${progress}%` } }) }))] })] }), storage && (_jsx("input", { ref: fileRef, type: "file", hidden: true, accept: "image/*", onChange: (e) => {
125
+ const f = e.target.files?.[0];
126
+ if (f)
127
+ void start(f);
128
+ e.target.value = "";
129
+ } }))] }));
130
+ }
131
+ function LinkField({ id, label, required, errors, value, onChange }) {
132
+ const { t, tv } = useForge();
133
+ return (_jsxs("fieldset", { children: [_jsxs("legend", { className: "mb-1.5 text-sm font-medium text-ink", children: [label, required && _jsx("span", { className: "ml-0.5 text-danger", children: "*" })] }), _jsxs("div", { className: "grid gap-2 sm:grid-cols-[minmax(0,2fr)_minmax(0,3fr)]", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: `${id}-label`, className: "sr-only", children: t("siteAdmin.link.label") }), _jsx(Input, { id: `${id}-label`, placeholder: t("siteAdmin.link.label"), "aria-invalid": errors.label ? true : undefined, value: value.label, onChange: (e) => onChange({ ...value, label: e.target.value }) })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: `${id}-href`, className: "sr-only", children: t("siteAdmin.link.href") }), _jsx(Input, { id: `${id}-href`, placeholder: "/sign-up", inputMode: "url", "aria-invalid": errors.href ? true : undefined, value: value.href, onChange: (e) => onChange({ ...value, href: e.target.value }) })] })] }), (errors.own || errors.label || errors.href) && _jsx("p", { className: "mt-1 text-xs text-danger", children: [errors.own, errors.label && `${t("siteAdmin.link.label")}: ${tv(errors.label)}`, errors.href && `${t("siteAdmin.link.href")}: ${tv(errors.href)}`].filter(Boolean).join(" · ") })] }));
134
+ }
135
+ export function IconGlyph({ name, className }) {
136
+ const Icon = LANDING_ICON_COMPONENTS[name] ?? ENTITY_ICON_COMPONENTS[name] ?? Sparkles;
137
+ return _jsx(Icon, { className: className ?? "size-4", "aria-hidden": true });
138
+ }
139
+ function IconField({ a11y, label, error, value, onChange }) {
140
+ const { t } = useForge();
141
+ return (_jsx(Field, { id: a11y.id, label: label, error: error, children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "forge-badge flex size-9 shrink-0 items-center justify-center", "aria-hidden": true, children: value ? _jsx(IconGlyph, { name: value }) : _jsx(Sparkles, { className: "size-4 opacity-40" }) }), _jsxs(Select, { ...a11y, value: value, onChange: (e) => onChange(e.target.value), children: [_jsx("option", { value: "", children: t("siteAdmin.form.none") }), SITE_ICONS.map((i) => (_jsx("option", { value: i, children: i }, i)))] })] }) }));
142
+ }
143
+ function RowButtons({ index, count, onMove, onRemove, onDuplicate, label }) {
144
+ const { t } = useForge();
145
+ return (_jsxs("div", { className: "flex shrink-0 items-center", children: [_jsx("button", { type: "button", className: "forge-btn forge-btn-ghost p-1", disabled: index === 0, onClick: () => onMove(index - 1), "aria-label": t("siteAdmin.moveUpNamed", { name: label }), title: t("siteAdmin.moveUp"), children: _jsx(ArrowUp, { className: "size-3.5", "aria-hidden": true }) }), _jsx("button", { type: "button", className: "forge-btn forge-btn-ghost p-1", disabled: index === count - 1, onClick: () => onMove(index + 1), "aria-label": t("siteAdmin.moveDownNamed", { name: label }), title: t("siteAdmin.moveDown"), children: _jsx(ArrowDown, { className: "size-3.5", "aria-hidden": true }) }), onDuplicate && (_jsx("button", { type: "button", className: "forge-btn forge-btn-ghost p-1", onClick: onDuplicate, "aria-label": t("siteAdmin.duplicateNamed", { name: label }), title: t("siteAdmin.duplicate"), children: _jsx(Copy, { className: "size-3.5", "aria-hidden": true }) })), _jsx("button", { type: "button", className: "forge-btn forge-btn-danger-ghost p-1", onClick: onRemove, "aria-label": t("siteAdmin.removeNamed", { name: label }), title: t("common.remove"), children: _jsx(Trash2, { className: "size-3.5", "aria-hidden": true }) })] }));
146
+ }
147
+ function StringsField({ id, label, required, error, max, value, onChange }) {
148
+ const { t, tv } = useForge();
149
+ const listRef = useRef(null);
150
+ const focusRow = (i) => requestAnimationFrame(() => listRef.current?.querySelectorAll("input")[i]?.focus());
151
+ return (_jsxs("fieldset", { children: [_jsxs("legend", { className: "mb-1.5 text-sm font-medium text-ink", children: [label, required && _jsx("span", { className: "ml-0.5 text-danger", children: "*" })] }), _jsx("ul", { ref: listRef, className: "space-y-1.5", children: value.map((s, i) => (_jsxs("li", { className: "flex items-center gap-1", children: [_jsx(Input, { id: i === 0 ? id : undefined, "aria-label": t("siteAdmin.itemNumber", { name: label, number: i + 1 }), value: s, onChange: (e) => onChange(value.map((x, j) => (j === i ? e.target.value : x))), onKeyDown: (e) => {
152
+ if (e.key === "Enter") {
153
+ e.preventDefault();
154
+ if (!max || value.length < max) {
155
+ onChange([...value.slice(0, i + 1), "", ...value.slice(i + 1)]);
156
+ focusRow(i + 1);
157
+ }
158
+ }
159
+ } }), _jsx(RowButtons, { index: i, count: value.length, label: s || String(i + 1), onMove: (to) => (onChange(moveItem(value, i, to)), focusRow(to)), onRemove: () => onChange(removeItem(value, i)) })] }, i))) }), _jsxs("button", { type: "button", className: "forge-btn forge-btn-ghost mt-1.5 inline-flex h-7 items-center gap-1 px-2 text-xs", disabled: !!max && value.length >= max, onClick: () => (onChange([...value, ""]), focusRow(value.length)), children: [_jsx(Plus, { className: "size-3.5", "aria-hidden": true }), " ", t("siteAdmin.addRow")] }), error && _jsx("p", { className: "mt-1 text-xs text-danger", children: tv(error) })] }));
160
+ }
161
+ function itemTitle(fields, item) {
162
+ for (const f of fields) {
163
+ const v = item[f.name];
164
+ if ((f.kind === "text" || f.kind === "textarea") && typeof v === "string" && v.trim())
165
+ return v.trim().slice(0, 60);
166
+ }
167
+ return "";
168
+ }
169
+ function ListField({ spec, value, onChange, path, ctx, label, error }) {
170
+ const { t, tv } = useForge();
171
+ const fields = spec.fields ?? [];
172
+ const [open, setOpen] = useState(value.length === 1 ? 0 : null);
173
+ const headerId = useId();
174
+ const max = spec.max;
175
+ const update = (next, openAt) => {
176
+ onChange(next);
177
+ if (openAt !== undefined)
178
+ setOpen(openAt);
179
+ };
180
+ return (_jsxs("section", { "aria-labelledby": headerId, children: [_jsx("div", { className: "mb-1.5 flex items-center justify-between gap-2", children: _jsxs("h4", { id: headerId, className: "text-sm font-medium text-ink", children: [label, spec.required && _jsx("span", { className: "ml-0.5 text-danger", children: "*" }), _jsx("span", { className: "ml-2 text-xs font-normal text-ink-subtle", children: max ? `${value.length} / ${max}` : value.length })] }) }), _jsx("ul", { className: "space-y-2", children: value.map((item, i) => {
181
+ const name = itemTitle(fields, item) || t("siteAdmin.itemNumber", { name: label, number: i + 1 });
182
+ const errs = errorCount(ctx.errors, `${path}.${i}`);
183
+ const expanded = open === i;
184
+ const panelId = `${fieldId(ctx, path)}-${i}-panel`;
185
+ return (_jsxs("li", { className: cn("rounded-[var(--forge-radius-control)] border bg-surface", errs ? "border-danger" : "border-line"), children: [_jsxs("div", { className: "flex items-center gap-1 py-1 pr-1 pl-2", children: [_jsxs("button", { type: "button", "aria-expanded": expanded, "aria-controls": panelId, onClick: () => setOpen(expanded ? null : i), className: "forge-focusable flex min-w-0 flex-1 items-center gap-1.5 rounded py-1 text-left text-sm text-ink", children: [expanded ? _jsx(ChevronDown, { className: "size-3.5 shrink-0 text-ink-muted", "aria-hidden": true }) : _jsx(ChevronRight, { className: "size-3.5 shrink-0 text-ink-muted", "aria-hidden": true }), typeof item.icon === "string" && item.icon && _jsx(IconGlyph, { name: item.icon, className: "size-3.5 shrink-0 text-ink-muted" }), _jsx("span", { className: "truncate", children: name }), errs > 0 && _jsx(Badge, { tone: 4, children: t("siteAdmin.issueCount", { count: errs }) })] }), _jsx(RowButtons, { index: i, count: value.length, label: name, onMove: (to) => update(moveItem(value, i, to), expanded ? Math.max(0, Math.min(value.length - 1, to)) : open), onDuplicate: !max || value.length < max ? () => update(duplicateItem(value, i), i + 1) : undefined, onRemove: () => update(removeItem(value, i), null) })] }), expanded && (_jsx("div", { id: panelId, className: "border-t border-line p-3", children: _jsx(PropsForm, { fields: fields, value: item, path: `${path}.${i}`, ctx: ctx, onChange: (next) => onChange(value.map((x, j) => (j === i ? next : x))) }) }))] }, i));
186
+ }) }), _jsxs("button", { type: "button", className: "forge-btn forge-btn-secondary mt-2 inline-flex h-7 items-center gap-1 px-2.5 text-xs font-medium", disabled: !!max && value.length >= max, onClick: () => update([...value, emptyItem(fields, { columns: ctx.columns.length })], value.length), children: [_jsx(Plus, { className: "size-3.5", "aria-hidden": true }), " ", t("siteAdmin.addItem")] }), error && _jsx("p", { className: "mt-1 text-xs text-danger", children: tv(error) })] }));
187
+ }
188
+ function EntityField({ a11y, label, required, error, value, onChange, app }) {
189
+ const { t } = useForge();
190
+ const options = useMemo(() => dataEntities(app), [app]);
191
+ const unavailable = options.filter((o) => o.problem);
192
+ return (_jsxs(Field, { id: a11y.id, label: label, required: required, error: error, children: [_jsxs(Select, { ...a11y, value: value, onChange: (e) => onChange(e.target.value), children: [_jsx("option", { value: "", children: required ? t("common.select") : t("siteAdmin.form.none") }), options.map(({ entity, problem }) => (_jsx("option", { value: entity.name, disabled: !!problem && entity.name !== value, children: problem ? t("siteAdmin.entity.unavailable", { name: entity.pluralLabel }) : entity.pluralLabel }, entity.name)))] }), unavailable.length > 0 && (_jsxs("details", { className: "mt-1 text-xs text-ink-muted", children: [_jsx("summary", { className: "cursor-pointer", children: t("siteAdmin.entity.why") }), _jsx("ul", { className: "mt-1 list-disc space-y-1 pl-4", children: unavailable.map((o) => (_jsx("li", { children: o.problem }, o.entity.name))) })] }))] }));
193
+ }
194
+ function FieldsField({ id, label, error, max, entity, value, onChange }) {
195
+ const { t, tv } = useForge();
196
+ const options = entityFieldOptions(entity, "fields");
197
+ return (_jsxs("fieldset", { id: id, children: [_jsx("legend", { className: "mb-1.5 text-sm font-medium text-ink", children: label }), _jsx("p", { className: "mb-2 text-xs text-ink-muted", children: value.length ? t("siteAdmin.fields.chosen", { count: value.length, max: max ?? options.length }) : t("siteAdmin.fields.auto") }), _jsx("div", { className: "grid gap-1.5 sm:grid-cols-2", children: options.map((f) => {
198
+ const checked = value.includes(f.name);
199
+ return (_jsxs("label", { className: "flex items-center gap-2 text-sm text-ink", children: [_jsx("input", { type: "checkbox", className: "forge-check size-4", checked: checked, disabled: !checked && !!max && value.length >= max, onChange: () => onChange(checked ? value.filter((x) => x !== f.name) : [...value, f.name]) }), f.label] }, f.name));
200
+ }) }), error && _jsx("p", { className: "mt-1 text-xs text-danger", children: tv(error) })] }));
201
+ }
202
+ function FilterField({ id, label, error, entity, value, onChange }) {
203
+ const { t, tv } = useForge();
204
+ // Rows are kept locally so a row with an empty key survives while it's being typed.
205
+ const [rows, setRows] = useState(value);
206
+ // Changed from outside (entity switched, section reverted): start over from the prop.
207
+ if (JSON.stringify(rowsToFilter(rows) ?? {}) !== JSON.stringify(rowsToFilter(value) ?? {}))
208
+ setRows(value);
209
+ const update = (next) => {
210
+ setRows(next);
211
+ onChange(next);
212
+ };
213
+ const listId = `${id}-fields`;
214
+ return (_jsxs("fieldset", { id: id, children: [_jsx("legend", { className: "mb-1.5 text-sm font-medium text-ink", children: label }), _jsx("datalist", { id: listId, children: entityFieldOptions(entity, "filter").map((f) => (_jsx("option", { value: f.name, children: f.label }, f.name))) }), _jsx("ul", { className: "space-y-1.5", children: rows.map((r, i) => (_jsxs("li", { className: "flex items-center gap-1", children: [_jsx(Input, { "aria-label": t("siteAdmin.filter.field"), placeholder: t("siteAdmin.filter.field"), list: listId, value: r.key, onChange: (e) => update(rows.map((x, j) => (j === i ? { ...x, key: e.target.value } : x))) }), _jsx("span", { className: "text-ink-subtle", "aria-hidden": true, children: "=" }), _jsx(Input, { "aria-label": t("siteAdmin.filter.value"), placeholder: t("siteAdmin.filter.value"), value: r.value, onChange: (e) => update(rows.map((x, j) => (j === i ? { ...x, value: e.target.value } : x))) }), _jsx("button", { type: "button", className: "forge-btn forge-btn-danger-ghost shrink-0 p-1", onClick: () => update(removeItem(rows, i)), "aria-label": t("siteAdmin.removeNamed", { name: r.key || String(i + 1) }), children: _jsx(Trash2, { className: "size-3.5", "aria-hidden": true }) })] }, i))) }), _jsxs("button", { type: "button", className: "forge-btn forge-btn-ghost mt-1.5 inline-flex h-7 items-center gap-1 px-2 text-xs", onClick: () => setRows([...rows, { key: "", value: "" }]), children: [_jsx(Plus, { className: "size-3.5", "aria-hidden": true }), " ", t("siteAdmin.filter.add")] }), _jsx("p", { className: "mt-1 text-xs text-ink-muted", children: t("siteAdmin.filter.hint") }), error && _jsx("p", { className: "mt-1 text-xs text-danger", children: tv(error) })] }));
215
+ }
216
+ function SortField({ a11y, label, error, entity, value, onChange }) {
217
+ const { t } = useForge();
218
+ const sort = parseSort(value);
219
+ return (_jsx(Field, { id: a11y.id, label: label, error: error, children: _jsxs("div", { className: "flex gap-2", children: [_jsxs(Select, { ...a11y, value: sort.field, onChange: (e) => onChange(formatSort(e.target.value, sort.desc)), children: [_jsx("option", { value: "", children: t("siteAdmin.form.default") }), entityFieldOptions(entity, "sort").map((f) => (_jsx("option", { value: f.name, children: f.label }, f.name)))] }), _jsxs(Select, { "aria-label": t("siteAdmin.sort.direction"), value: sort.desc ? "desc" : "asc", disabled: !sort.field, onChange: (e) => onChange(formatSort(sort.field, e.target.value === "desc")), className: "max-w-40", children: [_jsx("option", { value: "asc", children: t("siteAdmin.sort.asc") }), _jsx("option", { value: "desc", children: t("siteAdmin.sort.desc") })] })] }) }));
220
+ }
221
+ function CellsField({ id, label, error, columns, value, onChange }) {
222
+ const { t, tv } = useForge();
223
+ const cells = alignCells(value, columns.length);
224
+ const set = (i, v) => onChange(cells.map((c, j) => (j === i ? v : c)));
225
+ if (!columns.length)
226
+ return _jsx("p", { className: "text-xs text-ink-muted", children: t("siteAdmin.cells.noColumns") });
227
+ return (_jsxs("fieldset", { id: id, children: [_jsx("legend", { className: "mb-1.5 text-sm font-medium text-ink", children: label }), _jsx("div", { className: "grid gap-2 sm:grid-cols-2", children: columns.map((col, i) => {
228
+ const cell = cells[i];
229
+ const mode = cell === true ? "yes" : cell === false ? "no" : "text";
230
+ return (_jsxs("div", { className: "forge-card-flat p-2", children: [_jsx("p", { className: "mb-1 truncate text-xs font-medium text-ink-muted", children: col || t("siteAdmin.cells.column", { number: i + 1 }) }), _jsxs("div", { className: "flex items-center gap-1.5", children: [_jsxs(Select, { "aria-label": t("siteAdmin.cells.kind", { column: col || String(i + 1) }), value: mode, onChange: (e) => set(i, e.target.value === "yes" ? true : e.target.value === "no" ? false : ""), className: "h-8 !w-24 py-0 text-xs", children: [_jsx("option", { value: "yes", children: t("siteAdmin.cells.yes") }), _jsx("option", { value: "no", children: t("siteAdmin.cells.no") }), _jsx("option", { value: "text", children: t("siteAdmin.cells.text") })] }), mode === "text" && _jsx(Input, { "aria-label": t("siteAdmin.cells.value", { column: col || String(i + 1) }), value: cell, maxLength: 120, onChange: (e) => set(i, e.target.value), className: "h-8 py-0 text-xs" })] })] }, i));
231
+ }) }), error && _jsx("p", { className: "mt-1 text-xs text-danger", children: tv(error) })] }));
232
+ }
233
+ //# sourceMappingURL=prop-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prop-fields.js","sourceRoot":"","sources":["../../../src/site/editor/prop-fields.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAOb,OAAO,EAAE,UAAU,EAAiB,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AACvH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AACzE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EACL,UAAU,EACV,YAAY,EACZ,aAAa,EACb,SAAS,EACT,kBAAkB,EAClB,OAAO,EACP,UAAU,EACV,UAAU,EACV,SAAS,EACT,QAAQ,EACR,SAAS,EACT,WAAW,EACX,UAAU,EACV,YAAY,EACZ,OAAO,EACP,OAAO,GAIR,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAetC,2IAA2I;AAC3I,MAAM,UAAU,YAAY;IAC1B,MAAM,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IACzB,OAAO,CAAC,IAAY,EAAE,IAAc,EAAE,EAAE;QACtC,MAAM,QAAQ,GAAG,kBAAkB,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACvD,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;IACnE,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,GAAgB,EAAE,IAAY,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC;AAEtG,2EAA2E;AAC3E,MAAM,UAAU,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAkH;IAC9K,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;IACpE,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,gDAAgD;IAChD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvC,IAAI,IAAI,IAAI,IAAI,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;YAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;;YACnH,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,CACL,cAAK,SAAS,EAAC,WAAW,YACvB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACpB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC/B,KAAC,SAAS,IAAiB,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAA3L,IAAI,CAAC,IAAI,CAAsL,CAChN,CAAC,CAAC;YACH,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CACxB,cAA0B,SAAS,EAAC,+BAA+B,YAChE,IAAI,IADG,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,CAElB,CACP,CAAC,CAAC,CAAC,CACF,IAAI,CACL,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAgI;IAChM,MAAM,EAAE,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC1B,OAAO,CACL,0BACE,eAAK,SAAS,EAAC,sCAAsC,aACnD,KAAC,KAAK,IAAC,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,YACnC,KAAK,GACA,EACP,KAAK,IAAI,cAAK,SAAS,EAAC,QAAQ,YAAE,KAAK,GAAO,IAC3C,EACL,QAAQ,EACR,KAAK,CAAC,CAAC,CAAC,CACP,YAAG,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAE,SAAS,EAAC,0BAA0B,YACxE,EAAE,CAAC,KAAK,CAAC,GACR,CACL,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CACT,YAAG,SAAS,EAAC,6BAA6B,YAAE,IAAI,GAAK,CACtD,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAuH;IAC3L,MAAM,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxC,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,EAAW,CAAC;IAC9H,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IAEnE,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC;QACZ,KAAK,MAAM;YACT,OAAO,CACL,KAAC,KAAK,IAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,SAAS,YACnI,KAAC,KAAK,OAAK,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,KAAe,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAI,GACrQ,CACT,CAAC;QACJ,KAAK,UAAU;YACb,OAAO,CACL,KAAC,KAAK,IAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,YAChE,KAAC,QAAQ,OAAK,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,KAAe,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAI,GACvF,CACT,CAAC;QACJ,KAAK,UAAU;YACb,OAAO,KAAC,aAAa,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAe,EAAE,QAAQ,EAAE,GAAG,GAAI,CAAC;QACnI,KAAK,OAAO;YACV,OAAO,KAAC,UAAU,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAe,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,GAAI,CAAC;QACtJ,KAAK,MAAM;YACT,OAAO,KAAC,SAAS,IAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,KAAwC,EAAE,QAAQ,EAAE,GAAG,GAAI,CAAC;QAC/O,KAAK,MAAM;YACT,OAAO,KAAC,SAAS,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAe,EAAE,QAAQ,EAAE,GAAG,GAAI,CAAC;QACtG,KAAK,QAAQ;YACX,OAAO,CACL,KAAC,KAAK,IAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,YAChE,MAAC,MAAM,OAAK,IAAI,EAAE,KAAK,EAAE,KAAe,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,aAC5E,iBAAQ,KAAK,EAAC,EAAE,YAAE,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,GAAU,EAC1H,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAC5F,iBAAgB,KAAK,EAAE,CAAC,YACrB,CAAC,CAAC,oBAAoB,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,IAD7B,CAAC,CAEL,CACV,CAAC,IACK,GACH,CACT,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO,CACL,KAAC,KAAK,IAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,sBAAsB,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,YAClM,KAAC,KAAK,OAAK,IAAI,EAAE,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,SAAS,EAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAe,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAC,UAAU,GAAG,GAChK,CACT,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO,CACL,eAAK,SAAS,EAAC,yCAAyC,aACtD,gBAAO,OAAO,EAAE,EAAE,EAAE,SAAS,EAAC,8BAA8B,YACzD,KAAK,GACA,EACR,KAAC,MAAM,IAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,KAAgB,EAAE,QAAQ,EAAE,GAAG,GAAI,EAC3D,KAAK,IAAI,YAAG,SAAS,EAAC,qBAAqB,YAAE,KAAK,GAAK,IACpD,CACP,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO,KAAC,YAAY,IAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,KAAiB,EAAE,QAAQ,EAAE,GAAG,GAAI,CAAC;QAC/I,KAAK,MAAM;YACT,OAAO,KAAC,SAAS,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAgB,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAI,CAAC;QACxI,KAAK,QAAQ;YACX,OAAO,KAAC,WAAW,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAe,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,GAAI,CAAC;QAC/I,KAAK,QAAQ;YACX,OAAO,KAAC,WAAW,IAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAiB,EAAE,QAAQ,EAAE,GAAG,GAAI,CAAC;QACrI,KAAK,OAAO;YACV,OAAO,CACL,KAAC,KAAK,IAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YACvC,MAAC,MAAM,OAAK,IAAI,EAAE,KAAK,EAAE,KAAe,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,aAC5E,iBAAQ,KAAK,EAAC,EAAE,YAAE,CAAC,CAAC,eAAe,CAAC,GAAU,EAC7C,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAC9C,iBAAqB,KAAK,EAAE,CAAC,CAAC,IAAI,YAC/B,CAAC,CAAC,KAAK,IADG,CAAC,CAAC,IAAI,CAEV,CACV,CAAC,IACK,GACH,CACT,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO,KAAC,WAAW,IAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAoB,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAI,CAAC;QAC5J,KAAK,MAAM;YACT,OAAO,KAAC,SAAS,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,GAAI,CAAC;QACjH,KAAK,OAAO;YACV,OAAO,KAAC,UAAU,IAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,KAAe,EAAE,QAAQ,EAAE,GAAG,GAAI,CAAC;IAC3H,CAAC;AACH,CAAC;AAID,SAAS,aAAa,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAmH;IACvL,MAAM,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,CACL,KAAC,KAAK,IACJ,EAAE,EAAE,IAAI,CAAC,EAAE,EACX,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,CAAC,CAAC,yBAAyB,CAAC,EAClC,KAAK,EACH,eAAK,SAAS,EAAC,sBAAsB,EAAC,IAAI,EAAC,OAAO,gBAAa,KAAK,aAClE,iBAAQ,IAAI,EAAC,QAAQ,kBAAe,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,iBAAiB,CAAC,YACjL,CAAC,CAAC,0BAA0B,CAAC,GACvB,EACT,iBAAQ,IAAI,EAAC,QAAQ,kBAAe,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,iBAAiB,CAAC,YAC9K,CAAC,CAAC,4BAA4B,CAAC,GACzB,IACL,YAGP,OAAO,CAAC,CAAC,CAAC,CACT,cAAK,SAAS,EAAC,iEAAiE,EAAC,QAAQ,EAAE,CAAC,gBAAc,CAAC,CAAC,4BAA4B,CAAC,YACtI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAC,QAAQ,IAAC,MAAM,EAAE,KAAK,GAAI,CAAC,CAAC,CAAC,YAAG,SAAS,EAAC,iBAAiB,YAAE,CAAC,CAAC,0BAA0B,CAAC,GAAK,GAC5G,CACP,CAAC,CAAC,CAAC,CACF,KAAC,QAAQ,OAAK,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,EAAC,mCAAmC,EAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAI,CACvI,GACK,CACT,CAAC;AACJ,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAqI;IACtN,MAAM,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAC/C,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAC9D,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACpE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,KAAK,EAAE,IAAU,EAAE,EAAE;QACjC,cAAc,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,cAAc,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC;QAC1F,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI;YAAE,OAAO,cAAc,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACvF,WAAW,CAAC,CAAC,CAAC,CAAC;QACf,IAAI,CAAC;YACH,QAAQ,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;QAC5C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,cAAc,CAAE,CAAW,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QACnH,CAAC;gBAAS,CAAC;YACT,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC;IACF,OAAO,CACL,MAAC,KAAK,IAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,IAAI,WAAW,IAAI,SAAS,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,2BAA2B,CAAC,aACxJ,eAAK,SAAS,EAAC,wBAAwB,aACrC,cAAK,SAAS,EAAC,6IAA6I,YACzJ,KAAK,IAAI,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,cAAK,GAAG,EAAE,KAAK,EAAE,GAAG,EAAC,EAAE,EAAC,SAAS,EAAC,wBAAwB,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,GAAI,CAAC,CAAC,CAAC,KAAC,OAAO,IAAC,SAAS,EAAC,wBAAwB,wBAAe,GACpL,EACN,eAAK,SAAS,EAAC,0BAA0B,aACvC,KAAC,KAAK,OAAK,IAAI,EAAE,IAAI,EAAC,MAAM,EAAC,SAAS,EAAC,KAAK,EAAC,WAAW,EAAC,8BAAyB,EAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAI,EAC9I,eAAK,SAAS,EAAC,mCAAmC,aAC/C,OAAO,IAAI,CACV,kBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,+FAA+F,EAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,aAClM,KAAC,OAAO,IAAC,SAAS,EAAC,UAAU,wBAAe,OAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,IAC1I,CACV,EACA,KAAK,IAAI,CACR,kBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,2EAA2E,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,aACrI,KAAC,CAAC,IAAC,SAAS,EAAC,UAAU,wBAAe,OAAE,CAAC,CAAC,eAAe,CAAC,IACnD,CACV,IACG,EACL,QAAQ,KAAK,IAAI,IAAI,CACpB,cAAK,SAAS,EAAC,0CAA0C,EAAC,IAAI,EAAC,aAAa,gBAAa,CAAC,CAAC,wBAAwB,CAAC,mBAAiB,QAAQ,mBAAiB,CAAC,mBAAiB,GAAG,YACjL,cAAK,SAAS,EAAC,mBAAmB,EAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,QAAQ,GAAG,EAAE,GAAI,GACnE,CACP,IACG,IACF,EACL,OAAO,IAAI,CACV,gBACE,GAAG,EAAE,OAAO,EACZ,IAAI,EAAC,MAAM,EACX,MAAM,QACN,MAAM,EAAC,SAAS,EAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;oBACd,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;oBAC9B,IAAI,CAAC;wBAAE,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC;oBACrB,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;gBACtB,CAAC,GACD,CACH,IACK,CACT,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAA8M;IAC7Q,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,OAAO,CACL,+BACE,kBAAQ,SAAS,EAAC,qCAAqC,aACpD,KAAK,EACL,QAAQ,IAAI,eAAM,SAAS,EAAC,oBAAoB,kBAAS,IACnD,EACT,eAAK,SAAS,EAAC,uDAAuD,aACpE,0BACE,gBAAO,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,SAAS,EAAC,SAAS,YAC/C,CAAC,CAAC,sBAAsB,CAAC,GACpB,EACR,KAAC,KAAK,IAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,sBAAsB,CAAC,kBAAgB,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAI,IACnM,EACN,0BACE,gBAAO,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAC,SAAS,YAC9C,CAAC,CAAC,qBAAqB,CAAC,GACnB,EACR,KAAC,KAAK,IAAC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAC,UAAU,EAAC,SAAS,EAAC,KAAK,kBAAe,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,GAAI,IAC9L,IACF,EACL,CAAC,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,YAAG,SAAS,EAAC,0BAA0B,YAAE,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAK,IACpQ,CACZ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAE,IAAI,EAAE,SAAS,EAAwC;IACjF,MAAM,IAAI,GAAG,uBAAuB,CAAC,IAAI,CAAC,IAAI,sBAAsB,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC;IACvF,OAAO,KAAC,IAAI,IAAC,SAAS,EAAE,SAAS,IAAI,QAAQ,wBAAgB,CAAC;AAChE,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAA+F;IACrJ,MAAM,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IACzB,OAAO,CACL,KAAC,KAAK,IAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAC5C,eAAK,SAAS,EAAC,yBAAyB,aACtC,eAAM,SAAS,EAAC,8DAA8D,iCAC3E,KAAK,CAAC,CAAC,CAAC,KAAC,SAAS,IAAC,IAAI,EAAE,KAAK,GAAI,CAAC,CAAC,CAAC,KAAC,QAAQ,IAAC,SAAS,EAAC,mBAAmB,GAAG,GAC3E,EACP,MAAC,MAAM,OAAK,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,aACvE,iBAAQ,KAAK,EAAC,EAAE,YAAE,CAAC,CAAC,qBAAqB,CAAC,GAAU,EACnD,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACrB,iBAAgB,KAAK,EAAE,CAAC,YACrB,CAAC,IADS,CAAC,CAEL,CACV,CAAC,IACK,IACL,GACA,CACT,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,EAAiI;IACvM,MAAM,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IACzB,OAAO,CACL,eAAK,SAAS,EAAC,4BAA4B,aACzC,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,+BAA+B,EAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,gBAAc,CAAC,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,kBAAkB,CAAC,YAC5M,KAAC,OAAO,IAAC,SAAS,EAAC,UAAU,wBAAe,GACrC,EACT,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,+BAA+B,EAAC,QAAQ,EAAE,KAAK,KAAK,KAAK,GAAG,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,gBAAc,CAAC,CAAC,yBAAyB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,oBAAoB,CAAC,YACxN,KAAC,SAAS,IAAC,SAAS,EAAC,UAAU,wBAAe,GACvC,EACR,WAAW,IAAI,CACd,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,+BAA+B,EAAC,OAAO,EAAE,WAAW,gBAAc,CAAC,CAAC,0BAA0B,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,qBAAqB,CAAC,YAC/K,KAAC,IAAI,IAAC,SAAS,EAAC,UAAU,wBAAe,GAClC,CACV,EACD,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,sCAAsC,EAAC,OAAO,EAAE,QAAQ,gBAAc,CAAC,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,eAAe,CAAC,YAC1K,KAAC,MAAM,IAAC,SAAS,EAAC,UAAU,wBAAe,GACpC,IACL,CACP,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAqI;IAC3M,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,qBAAqB,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACpH,OAAO,CACL,+BACE,kBAAQ,SAAS,EAAC,qCAAqC,aACpD,KAAK,EACL,QAAQ,IAAI,eAAM,SAAS,EAAC,oBAAoB,kBAAS,IACnD,EACT,aAAI,GAAG,EAAE,OAAO,EAAE,SAAS,EAAC,aAAa,YACtC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACnB,cAAY,SAAS,EAAC,yBAAyB,aAC7C,KAAC,KAAK,IACJ,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,gBAChB,CAAC,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EACrE,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC9E,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;gCACf,IAAI,CAAC,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;oCACtB,CAAC,CAAC,cAAc,EAAE,CAAC;oCACnB,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;wCAC/B,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;wCAChE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;oCAClB,CAAC;gCACH,CAAC;4BACH,CAAC,GACD,EACF,KAAC,UAAU,IAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAI,KAhBnL,CAAC,CAiBL,CACN,CAAC,GACC,EACL,kBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,kFAAkF,EAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,aAC1N,KAAC,IAAI,IAAC,SAAS,EAAC,UAAU,wBAAe,OAAE,CAAC,CAAC,kBAAkB,CAAC,IACzD,EACR,KAAK,IAAI,YAAG,SAAS,EAAC,0BAA0B,YAAE,EAAE,CAAC,KAAK,CAAC,GAAK,IACxD,CACZ,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,MAA2B,EAAE,IAAW;IACzD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE;YAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtH,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAqI;IACtM,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;IACjC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAgB,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/E,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACrB,MAAM,MAAM,GAAG,CAAC,IAAa,EAAE,MAAsB,EAAE,EAAE;QACvD,QAAQ,CAAC,IAAI,CAAC,CAAC;QACf,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,CAAC,CAAC;IACF,OAAO,CACL,sCAA0B,QAAQ,aAChC,cAAK,SAAS,EAAC,gDAAgD,YAC7D,cAAI,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAC,8BAA8B,aACvD,KAAK,EACL,IAAI,CAAC,QAAQ,IAAI,eAAM,SAAS,EAAC,oBAAoB,kBAAS,EAC/D,eAAM,SAAS,EAAC,0CAA0C,YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAQ,IAChH,GACD,EACN,aAAI,SAAS,EAAC,WAAW,YACtB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;oBACrB,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,sBAAsB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAClG,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;oBACpD,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,CAAC;oBAC5B,MAAM,OAAO,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;oBACnD,OAAO,CACL,cAAY,SAAS,EAAE,EAAE,CAAC,yDAAyD,EAAE,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,aAC1H,eAAK,SAAS,EAAC,wCAAwC,aACrD,kBAAQ,IAAI,EAAC,QAAQ,mBAAgB,QAAQ,mBAAiB,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAC,kGAAkG,aAC7N,QAAQ,CAAC,CAAC,CAAC,KAAC,WAAW,IAAC,SAAS,EAAC,kCAAkC,wBAAe,CAAC,CAAC,CAAC,KAAC,YAAY,IAAC,SAAS,EAAC,kCAAkC,wBAAe,EAC/J,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,IAAI,KAAC,SAAS,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,EAAC,kCAAkC,GAAG,EAC1H,eAAM,SAAS,EAAC,UAAU,YAAE,IAAI,GAAQ,EACvC,IAAI,GAAG,CAAC,IAAI,KAAC,KAAK,IAAC,IAAI,EAAE,CAAC,YAAG,CAAC,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,GAAS,IAC1E,EACT,KAAC,UAAU,IACT,KAAK,EAAE,CAAC,EACR,KAAK,EAAE,KAAK,CAAC,MAAM,EACnB,KAAK,EAAE,IAAI,EACX,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAC7G,WAAW,EAAE,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAClG,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,GAClD,IACE,EACL,QAAQ,IAAI,CACX,cAAK,EAAE,EAAE,OAAO,EAAE,SAAS,EAAC,0BAA0B,YACpD,KAAC,SAAS,IAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAI,GAC/I,CACP,KArBM,CAAC,CAsBL,CACN,CAAC;gBACJ,CAAC,CAAC,GACC,EACL,kBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,kGAAkG,EAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,aAC5Q,KAAC,IAAI,IAAC,SAAS,EAAC,UAAU,wBAAe,OAAE,CAAC,CAAC,mBAAmB,CAAC,IAC1D,EACR,KAAK,IAAI,YAAG,SAAS,EAAC,0BAA0B,YAAE,EAAE,CAAC,KAAK,CAAC,GAAK,IACzD,CACX,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAA+H;IACtM,MAAM,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACrD,OAAO,CACL,MAAC,KAAK,IAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,aAChE,MAAC,MAAM,OAAK,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,aACvE,iBAAQ,KAAK,EAAC,EAAE,YAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,GAAU,EACnF,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CACpC,iBAA0B,KAAK,EAAE,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,KAAK,KAAK,YACvF,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,8BAA8B,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,IADpF,MAAM,CAAC,IAAI,CAEf,CACV,CAAC,IACK,EACR,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CACzB,mBAAS,SAAS,EAAC,6BAA6B,aAC9C,kBAAS,SAAS,EAAC,gBAAgB,YAAE,CAAC,CAAC,sBAAsB,CAAC,GAAW,EACzE,aAAI,SAAS,EAAC,+BAA+B,YAC1C,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACtB,uBAAyB,CAAC,CAAC,OAAO,IAAzB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAkB,CACzC,CAAC,GACC,IACG,CACX,IACK,CACT,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAoI;IACvM,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrD,OAAO,CACL,oBAAU,EAAE,EAAE,EAAE,aACd,iBAAQ,SAAS,EAAC,qCAAqC,YAAE,KAAK,GAAU,EACxE,YAAG,SAAS,EAAC,6BAA6B,YAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,GAAK,EAC9K,cAAK,SAAS,EAAC,6BAA6B,YACzC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBACjB,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBACvC,OAAO,CACL,iBAAoB,SAAS,EAAC,0CAA0C,aACtE,gBAAO,IAAI,EAAC,UAAU,EAAC,SAAS,EAAC,oBAAoB,EAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAI,EACzN,CAAC,CAAC,KAAK,KAFE,CAAC,CAAC,IAAI,CAGV,CACT,CAAC;gBACJ,CAAC,CAAC,GACE,EACL,KAAK,IAAI,YAAG,SAAS,EAAC,0BAA0B,YAAE,EAAE,CAAC,KAAK,CAAC,GAAK,IACxD,CACZ,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAA+H;IAC7L,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,oFAAoF;IACpF,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAc,KAAK,CAAC,CAAC;IACrD,sFAAsF;IACtF,IAAI,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3G,MAAM,MAAM,GAAG,CAAC,IAAiB,EAAE,EAAE;QACnC,OAAO,CAAC,IAAI,CAAC,CAAC;QACd,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,GAAG,EAAE,SAAS,CAAC;IAC9B,OAAO,CACL,oBAAU,EAAE,EAAE,EAAE,aACd,iBAAQ,SAAS,EAAC,qCAAqC,YAAE,KAAK,GAAU,EACxE,mBAAU,EAAE,EAAE,MAAM,YACjB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAC/C,iBAAqB,KAAK,EAAE,CAAC,CAAC,IAAI,YAC/B,CAAC,CAAC,KAAK,IADG,CAAC,CAAC,IAAI,CAEV,CACV,CAAC,GACO,EACX,aAAI,SAAS,EAAC,aAAa,YACxB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAClB,cAAY,SAAS,EAAC,yBAAyB,aAC7C,KAAC,KAAK,kBAAa,CAAC,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,wBAAwB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAI,EACpN,eAAM,SAAS,EAAC,iBAAiB,uCAE1B,EACP,KAAC,KAAK,kBAAa,CAAC,CAAC,wBAAwB,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,wBAAwB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAI,EAC1M,iBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,+CAA+C,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,gBAAc,CAAC,CAAC,uBAAuB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,YAClM,KAAC,MAAM,IAAC,SAAS,EAAC,UAAU,wBAAe,GACpC,KARF,CAAC,CASL,CACN,CAAC,GACC,EACL,kBAAQ,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAC,kFAAkF,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,aAC1K,KAAC,IAAI,IAAC,SAAS,EAAC,UAAU,wBAAe,OAAE,CAAC,CAAC,sBAAsB,CAAC,IAC7D,EACT,YAAG,SAAS,EAAC,6BAA6B,YAAE,CAAC,CAAC,uBAAuB,CAAC,GAAK,EAC1E,KAAK,IAAI,YAAG,SAAS,EAAC,0BAA0B,YAAE,EAAE,CAAC,KAAK,CAAC,GAAK,IACxD,CACZ,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAoH;IAClL,MAAM,EAAE,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO,CACL,KAAC,KAAK,IAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,YAC5C,eAAK,SAAS,EAAC,YAAY,aACzB,MAAC,MAAM,OAAK,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,aACnG,iBAAQ,KAAK,EAAC,EAAE,YAAE,CAAC,CAAC,wBAAwB,CAAC,GAAU,EACtD,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAC7C,iBAAqB,KAAK,EAAE,CAAC,CAAC,IAAI,YAC/B,CAAC,CAAC,KAAK,IADG,CAAC,CAAC,IAAI,CAEV,CACV,CAAC,IACK,EACT,MAAC,MAAM,kBAAa,CAAC,CAAC,0BAA0B,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,EAAE,SAAS,EAAC,UAAU,aAC7M,iBAAQ,KAAK,EAAC,KAAK,YAAE,CAAC,CAAC,oBAAoB,CAAC,GAAU,EACtD,iBAAQ,KAAK,EAAC,MAAM,YAAE,CAAC,CAAC,qBAAqB,CAAC,GAAU,IACjD,IACL,GACA,CACT,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAkH;IAChL,MAAM,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,CAAO,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrF,IAAI,CAAC,OAAO,CAAC,MAAM;QAAE,OAAO,YAAG,SAAS,EAAC,wBAAwB,YAAE,CAAC,CAAC,2BAA2B,CAAC,GAAK,CAAC;IACvG,OAAO,CACL,oBAAU,EAAE,EAAE,EAAE,aACd,iBAAQ,SAAS,EAAC,qCAAqC,YAAE,KAAK,GAAU,EACxE,cAAK,SAAS,EAAC,2BAA2B,YACvC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;oBACtB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;oBACvB,MAAM,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;oBACpE,OAAO,CACL,eAAa,SAAS,EAAC,qBAAqB,aAC1C,YAAG,SAAS,EAAC,kDAAkD,YAAE,GAAG,IAAI,CAAC,CAAC,wBAAwB,EAAE,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAK,EAC3H,eAAK,SAAS,EAAC,2BAA2B,aACxC,MAAC,MAAM,kBAAa,CAAC,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,EAAC,wBAAwB,aAC/N,iBAAQ,KAAK,EAAC,KAAK,YAAE,CAAC,CAAC,qBAAqB,CAAC,GAAU,EACvD,iBAAQ,KAAK,EAAC,IAAI,YAAE,CAAC,CAAC,oBAAoB,CAAC,GAAU,EACrD,iBAAQ,KAAK,EAAC,MAAM,YAAE,CAAC,CAAC,sBAAsB,CAAC,GAAU,IAClD,EACR,IAAI,KAAK,MAAM,IAAI,KAAC,KAAK,kBAAa,CAAC,CAAC,uBAAuB,EAAE,EAAE,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,IAAc,EAAE,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,SAAS,EAAC,kBAAkB,GAAG,IAChN,KATE,CAAC,CAUL,CACP,CAAC;gBACJ,CAAC,CAAC,GACE,EACL,KAAK,IAAI,YAAG,SAAS,EAAC,0BAA0B,YAAE,EAAE,CAAC,KAAK,CAAC,GAAK,IACxD,CACZ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { SiteSectionDetail } from "../types.js";
2
+ export interface SectionListProps {
3
+ sections: SiteSectionDetail[];
4
+ removed: SiteSectionDetail[];
5
+ selected: string | null;
6
+ busy?: boolean;
7
+ onSelect: (id: string) => void;
8
+ onReorder: (ids: string[]) => void;
9
+ onToggleHidden: (s: SiteSectionDetail) => void;
10
+ onDelete: (s: SiteSectionDetail) => void;
11
+ onRevert: (s: SiteSectionDetail) => void;
12
+ announce: (text: string) => void;
13
+ }
14
+ export declare function SectionList({ sections, removed, selected, busy, onSelect, onReorder, onToggleHidden, onDelete, onRevert, announce }: SectionListProps): import("react").JSX.Element;
@@ -0,0 +1,110 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /*
4
+ * The sections of a page, in order: select, drag to reorder (pointer, or keyboard on the handle: Space picks up,
5
+ * arrows move, Space/Enter drops, Escape cancels — every step announced), move up/down, hide/show, delete,
6
+ * revert, plus the config sections that were removed (revert brings them back).
7
+ */
8
+ import { ArrowDown, ArrowUp, Eye, EyeOff, GripVertical, RotateCcw, Trash2, TriangleAlert } from "lucide-react";
9
+ import { useEffect, useRef, useState } from "react";
10
+ import { useForge } from "../../context.js";
11
+ import { cn } from "../../ui.js";
12
+ import { dropIndex, keyboardDrag, previewOrder, sectionSummary } from "./model.js";
13
+ import { Pill } from "./widgets.js";
14
+ export function SectionList({ sections, removed, selected, busy, onSelect, onReorder, onToggleHidden, onDelete, onRevert, announce }) {
15
+ const { t } = useForge();
16
+ const [drag, setDrag] = useState(null);
17
+ const rows = useRef(new Map());
18
+ const handles = useRef(new Map());
19
+ const midpoints = useRef([]);
20
+ const focusAfter = useRef(null);
21
+ const ordered = previewOrder(sections, drag);
22
+ const label = (s) => t(`siteAdmin.section.${s.type}.label`);
23
+ const count = sections.length;
24
+ // Moving a focused element in the DOM can drop focus: put it back on the moved handle.
25
+ useEffect(() => {
26
+ const id = focusAfter.current;
27
+ if (!id)
28
+ return;
29
+ focusAfter.current = null;
30
+ handles.current.get(id)?.focus();
31
+ });
32
+ const commit = (from, to) => {
33
+ if (from === to)
34
+ return;
35
+ const ids = previewOrder(sections, { from, at: to }).map((s) => s.id);
36
+ onReorder(ids);
37
+ };
38
+ const onHandleKey = (e, index, s) => {
39
+ const state = drag?.mode === "keyboard" ? drag : null;
40
+ const result = keyboardDrag(state, e.key, index, count);
41
+ if (result.type === "none")
42
+ return;
43
+ e.preventDefault();
44
+ e.stopPropagation();
45
+ focusAfter.current = s.id;
46
+ switch (result.type) {
47
+ case "pick":
48
+ setDrag({ ...result.state, mode: "keyboard" });
49
+ announce(t("siteAdmin.reorder.picked", { name: label(s), position: index + 1, count }));
50
+ break;
51
+ case "move":
52
+ setDrag({ ...result.state, mode: "keyboard" });
53
+ announce(t("siteAdmin.reorder.moved", { name: label(s), position: result.state.at + 1, count }));
54
+ break;
55
+ case "drop":
56
+ setDrag(null);
57
+ commit(result.from, result.to);
58
+ announce(t("siteAdmin.reorder.dropped", { name: label(s), position: result.to + 1, count }));
59
+ break;
60
+ case "cancel":
61
+ setDrag(null);
62
+ announce(t("siteAdmin.reorder.cancelled", { name: label(s), position: result.from + 1 }));
63
+ break;
64
+ }
65
+ };
66
+ const onPointerDown = (e, index) => {
67
+ if (e.button !== 0 || busy)
68
+ return;
69
+ e.preventDefault();
70
+ e.currentTarget.setPointerCapture(e.pointerId);
71
+ midpoints.current = sections.map((s) => {
72
+ const r = rows.current.get(s.id)?.getBoundingClientRect();
73
+ return r ? r.top + r.height / 2 : 0;
74
+ });
75
+ setDrag({ from: index, at: index, mode: "pointer" });
76
+ };
77
+ const onPointerMove = (e) => {
78
+ if (drag?.mode !== "pointer")
79
+ return;
80
+ const at = dropIndex(midpoints.current, e.clientY, drag.from);
81
+ if (at !== drag.at)
82
+ setDrag({ ...drag, at });
83
+ };
84
+ const onPointerUp = (s) => {
85
+ if (drag?.mode !== "pointer")
86
+ return;
87
+ setDrag(null);
88
+ if (drag.at !== drag.from) {
89
+ commit(drag.from, drag.at);
90
+ announce(t("siteAdmin.reorder.dropped", { name: label(s), position: drag.at + 1, count }));
91
+ }
92
+ };
93
+ return (_jsxs("div", { children: [_jsx("p", { id: "site-reorder-help", className: "sr-only", children: t("siteAdmin.reorder.help") }), !sections.length ? (_jsx("p", { className: "px-3 py-6 text-center text-sm text-ink-muted", children: t("siteAdmin.sections.empty") })) : (_jsx("ol", { className: "space-y-1", "aria-label": t("siteAdmin.sections.title"), children: ordered.map((s, i) => {
94
+ const originalIndex = sections.indexOf(s);
95
+ const dragging = drag && sections[drag.from]?.id === s.id;
96
+ const summary = sectionSummary(s.props);
97
+ return (_jsxs("li", { ref: (el) => {
98
+ if (el)
99
+ rows.current.set(s.id, el);
100
+ else
101
+ rows.current.delete(s.id);
102
+ }, className: cn("group flex items-center gap-1 rounded-[var(--forge-radius-control)] border px-1 py-1 transition-colors motion-reduce:transition-none", selected === s.id ? "border-primary bg-selected" : "border-transparent hover:bg-hover", dragging && "border-dashed border-primary bg-surface shadow-sm", s.hidden && "opacity-70"), children: [_jsx("button", { ref: (el) => {
103
+ if (el)
104
+ handles.current.set(s.id, el);
105
+ else
106
+ handles.current.delete(s.id);
107
+ }, type: "button", disabled: busy, "aria-label": t("siteAdmin.reorder.handle", { name: label(s), position: i + 1, count }), "aria-describedby": "site-reorder-help", "aria-pressed": drag?.mode === "keyboard" && dragging ? true : undefined, className: cn("forge-btn forge-btn-ghost shrink-0 cursor-grab touch-none p-1 active:cursor-grabbing", dragging && "text-primary"), onKeyDown: (e) => onHandleKey(e, originalIndex, s), onPointerDown: (e) => onPointerDown(e, originalIndex), onPointerMove: onPointerMove, onPointerUp: () => onPointerUp(s), onPointerCancel: () => setDrag(null), children: _jsx(GripVertical, { className: "size-4", "aria-hidden": true }) }), _jsxs("button", { type: "button", onClick: () => onSelect(s.id), "aria-current": selected === s.id ? "true" : undefined, className: "forge-focusable min-w-0 flex-1 rounded px-1 py-0.5 text-left", children: [_jsx("span", { className: "flex items-center gap-1.5", children: _jsx("span", { className: "truncate text-sm font-medium text-ink", children: label(s) }) }), _jsxs("span", { className: "block truncate text-xs text-ink-muted", children: [_jsx("span", { className: "text-ink-subtle", children: t(`siteAdmin.variant.${s.type}.${s.variant}`) }), summary ? ` · ${summary}` : ""] }), (s.hidden || s.conflict) && (_jsxs("span", { className: "mt-1 flex flex-wrap gap-1", children: [s.hidden && _jsx(Pill, { tone: "muted", children: t("siteAdmin.section.hidden") }), s.conflict && (_jsxs(Pill, { tone: "warning", title: t("siteAdmin.conflict.section"), children: [_jsx(TriangleAlert, { className: "size-3", "aria-hidden": true }), " ", t("siteAdmin.conflict.badge")] }))] }))] }), _jsxs("div", { className: "flex shrink-0 items-center opacity-100 sm:opacity-60 sm:group-focus-within:opacity-100 sm:group-hover:opacity-100", children: [_jsx("button", { type: "button", disabled: busy || originalIndex === 0, className: "forge-btn forge-btn-ghost p-1", "aria-label": t("siteAdmin.moveUpNamed", { name: label(s) }), title: t("siteAdmin.moveUp"), onClick: () => (commit(originalIndex, originalIndex - 1), announce(t("siteAdmin.reorder.dropped", { name: label(s), position: originalIndex, count }))), children: _jsx(ArrowUp, { className: "size-3.5", "aria-hidden": true }) }), _jsx("button", { type: "button", disabled: busy || originalIndex === count - 1, className: "forge-btn forge-btn-ghost p-1", "aria-label": t("siteAdmin.moveDownNamed", { name: label(s) }), title: t("siteAdmin.moveDown"), onClick: () => (commit(originalIndex, originalIndex + 1), announce(t("siteAdmin.reorder.dropped", { name: label(s), position: originalIndex + 2, count }))), children: _jsx(ArrowDown, { className: "size-3.5", "aria-hidden": true }) }), _jsx("button", { type: "button", disabled: busy, className: "forge-btn forge-btn-ghost p-1", "aria-label": s.hidden ? t("siteAdmin.showNamed", { name: label(s) }) : t("siteAdmin.hideNamed", { name: label(s) }), title: s.hidden ? t("siteAdmin.show") : t("siteAdmin.hide"), onClick: () => onToggleHidden(s), children: s.hidden ? _jsx(EyeOff, { className: "size-3.5", "aria-hidden": true }) : _jsx(Eye, { className: "size-3.5", "aria-hidden": true }) }), _jsx("button", { type: "button", disabled: busy, className: "forge-btn forge-btn-danger-ghost p-1", "aria-label": t("siteAdmin.removeNamed", { name: label(s) }), title: t("common.delete"), onClick: () => onDelete(s), children: _jsx(Trash2, { className: "size-3.5", "aria-hidden": true }) })] })] }, s.id));
108
+ }) })), removed.length > 0 && (_jsxs("details", { className: "mt-3 border-t border-line pt-2", children: [_jsx("summary", { className: "cursor-pointer px-1 text-xs font-medium text-ink-muted", children: t("siteAdmin.sections.removed", { count: removed.length }) }), _jsx("ul", { className: "mt-1 space-y-1", children: removed.map((s) => (_jsxs("li", { className: "flex items-center justify-between gap-2 px-1 py-1 text-sm", children: [_jsx("span", { className: "min-w-0 truncate text-ink-muted line-through", children: label(s) }), _jsxs("button", { type: "button", disabled: busy, className: "forge-btn forge-btn-ghost inline-flex h-7 shrink-0 items-center gap-1 px-2 text-xs", onClick: () => onRevert(s), children: [_jsx(RotateCcw, { className: "size-3.5", "aria-hidden": true }), " ", t("siteAdmin.section.restore")] })] }, s.id))) }), _jsx("p", { className: "mt-1 px-1 text-xs text-ink-subtle", children: t("siteAdmin.sections.removedHint") })] }))] }));
109
+ }
110
+ //# sourceMappingURL=section-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-list.js","sourceRoot":"","sources":["../../../src/site/editor/section-list.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare function SectionPicker({ open, onClose, onPick, busy }: {
2
+ open: boolean;
3
+ onClose: () => void;
4
+ onPick: (type: string, variant: string) => void;
5
+ busy?: boolean;
6
+ }): import("react").JSX.Element;
7
+ /** Variant chooser of the section being edited: one thumbnail per variant (radio group). */
8
+ export declare function VariantChooser({ type, value, onChange }: {
9
+ type: string;
10
+ value: string;
11
+ onChange: (variant: string) => void;
12
+ }): import("react").JSX.Element | null;
@@ -0,0 +1,44 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ /*
4
+ * "Add a section": every section type of the library grouped by category (marketing / content / data), each
5
+ * variant drawn as a small thumbnail of the real section. Also the variant chooser of a selected section.
6
+ */
7
+ import { SECTION_SPECS } from "@tekki-forge/compiler/site";
8
+ import { Search } from "lucide-react";
9
+ import { useMemo, useState } from "react";
10
+ import { useForge } from "../../context.js";
11
+ import { cn, Input } from "../../ui.js";
12
+ import { dataEntities } from "./model.js";
13
+ import { SectionThumbnail } from "./preview.js";
14
+ import { EditorDialog, TabPanel, Tabs } from "./widgets.js";
15
+ const CATEGORIES = ["marketing", "content", "data"];
16
+ /** Why a type can't be added to this app (no public entity for data sections), else undefined. */
17
+ function useUnavailable() {
18
+ const { app, t } = useForge();
19
+ return useMemo(() => {
20
+ const anyPublic = dataEntities(app).some((e) => !e.problem);
21
+ return (type) => ((type === "entityList" || type === "entityGrid") && !anyPublic ? t("siteAdmin.picker.needsPublicEntity") : undefined);
22
+ }, [app, t]);
23
+ }
24
+ export function SectionPicker({ open, onClose, onPick, busy }) {
25
+ const { t } = useForge();
26
+ const [category, setCategory] = useState("marketing");
27
+ const [query, setQuery] = useState("");
28
+ const unavailable = useUnavailable();
29
+ const q = query.trim().toLowerCase();
30
+ const specs = SECTION_SPECS.filter((s) => q ? [s.type, s.label, s.description, t(`siteAdmin.section.${s.type}.label`), t(`siteAdmin.section.${s.type}.description`)].some((x) => x.toLowerCase().includes(q)) : s.category === category);
31
+ return (_jsxs(EditorDialog, { open: open, onClose: onClose, size: "xl", title: t("siteAdmin.picker.title"), description: t("siteAdmin.picker.description"), children: [_jsxs("div", { className: "mb-4 flex flex-wrap items-center justify-between gap-3", children: [_jsx(Tabs, { idPrefix: "site-picker", label: t("siteAdmin.picker.categories"), value: category, onChange: (c) => (setCategory(c), setQuery("")), tabs: CATEGORIES.map((c) => ({ key: c, label: t(`siteAdmin.category.${c}`) })) }), _jsxs("div", { className: "relative w-full sm:w-64", children: [_jsx(Search, { className: "pointer-events-none absolute top-1/2 left-2.5 size-4 -translate-y-1/2 text-ink-subtle", "aria-hidden": true }), _jsx(Input, { "data-autofocus": true, type: "search", "aria-label": t("siteAdmin.picker.search"), placeholder: t("siteAdmin.picker.search"), value: query, onChange: (e) => setQuery(e.target.value), className: "pl-8" })] })] }), _jsxs(TabPanel, { idPrefix: "site-picker", tab: category, children: [!specs.length && _jsx("p", { className: "py-10 text-center text-sm text-ink-muted", children: t("siteAdmin.picker.noMatch") }), _jsx("div", { className: "space-y-6", children: specs.map((spec) => {
32
+ const reason = unavailable(spec.type);
33
+ return (_jsxs("section", { "aria-labelledby": `pick-${spec.type}`, children: [_jsxs("div", { className: "mb-2", children: [_jsx("h3", { id: `pick-${spec.type}`, className: "text-sm font-semibold text-ink", children: t(`siteAdmin.section.${spec.type}.label`) }), _jsx("p", { className: "text-xs text-ink-muted", children: reason ?? t(`siteAdmin.section.${spec.type}.description`) })] }), _jsx("div", { className: "grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-3", children: spec.variants.map((variant) => (_jsxs("div", { className: cn("forge-card forge-card-interactive group relative overflow-hidden has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-primary", (!!reason || busy) && "opacity-50"), children: [_jsx(SectionThumbnail, { type: spec.type, variant: variant }), _jsx("button", { type: "button", disabled: !!reason || busy, onClick: () => onPick(spec.type, variant), "aria-label": t("siteAdmin.picker.add", { name: t(`siteAdmin.section.${spec.type}.label`), variant: t(`siteAdmin.variant.${spec.type}.${variant}`) }), className: "block w-full border-t border-line px-3 py-2 text-left text-xs font-medium text-ink outline-none after:absolute after:inset-0 after:content-[''] disabled:cursor-not-allowed", children: t(`siteAdmin.variant.${spec.type}.${variant}`) })] }, variant))) })] }, spec.type));
34
+ }) })] })] }));
35
+ }
36
+ /** Variant chooser of the section being edited: one thumbnail per variant (radio group). */
37
+ export function VariantChooser({ type, value, onChange }) {
38
+ const { t } = useForge();
39
+ const spec = SECTION_SPECS.find((s) => s.type === type);
40
+ if (!spec || spec.variants.length < 2)
41
+ return null;
42
+ return (_jsxs("fieldset", { children: [_jsx("legend", { className: "mb-1.5 text-sm font-medium text-ink", children: t("siteAdmin.form.variant") }), _jsx("div", { className: "grid grid-cols-2 gap-2", children: spec.variants.map((v) => (_jsxs("div", { className: cn("forge-card relative overflow-hidden has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-primary", value === v && "ring-2 ring-primary"), children: [_jsx(SectionThumbnail, { type: type, variant: v }), _jsxs("label", { className: "block cursor-pointer border-t border-line px-2 py-1.5 text-xs font-medium text-ink after:absolute after:inset-0 after:content-['']", children: [_jsx("input", { type: "radio", name: `variant-${type}`, value: v, checked: value === v, onChange: () => onChange(v), className: "sr-only" }), t(`siteAdmin.variant.${type}.${v}`)] })] }, v))) })] }));
43
+ }
44
+ //# sourceMappingURL=section-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-picker.js","sourceRoot":"","sources":["../../../src/site/editor/section-picker.tsx"],"names":[],"mappings":"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"}