@endora-commerce/mod-invoices 0.105.0 → 0.107.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 (144) hide show
  1. package/README.md +7 -8
  2. package/dist/admin/components/InvoiceSectionTabs.d.ts +8 -0
  3. package/dist/admin/components/InvoiceSectionTabs.d.ts.map +1 -1
  4. package/dist/admin/components/InvoiceSectionTabs.js +13 -2
  5. package/dist/admin/components/InvoiceSectionTabs.js.map +1 -1
  6. package/dist/admin/document-blocks/InvoiceDivider.d.ts +5 -0
  7. package/dist/admin/document-blocks/InvoiceDivider.d.ts.map +1 -0
  8. package/dist/admin/document-blocks/InvoiceDivider.js +5 -0
  9. package/dist/admin/document-blocks/InvoiceDivider.js.map +1 -0
  10. package/dist/admin/document-blocks/InvoiceFooter.d.ts +5 -0
  11. package/dist/admin/document-blocks/InvoiceFooter.d.ts.map +1 -0
  12. package/dist/admin/document-blocks/InvoiceFooter.js +5 -0
  13. package/dist/admin/document-blocks/InvoiceFooter.js.map +1 -0
  14. package/dist/admin/document-blocks/InvoiceHeader.d.ts +5 -0
  15. package/dist/admin/document-blocks/InvoiceHeader.d.ts.map +1 -0
  16. package/dist/admin/document-blocks/InvoiceHeader.js +5 -0
  17. package/dist/admin/document-blocks/InvoiceHeader.js.map +1 -0
  18. package/dist/admin/document-blocks/InvoiceLineItems.d.ts +5 -0
  19. package/dist/admin/document-blocks/InvoiceLineItems.d.ts.map +1 -0
  20. package/dist/admin/document-blocks/InvoiceLineItems.js +5 -0
  21. package/dist/admin/document-blocks/InvoiceLineItems.js.map +1 -0
  22. package/dist/admin/document-blocks/InvoiceLogo.d.ts +5 -0
  23. package/dist/admin/document-blocks/InvoiceLogo.d.ts.map +1 -0
  24. package/dist/admin/document-blocks/InvoiceLogo.js +5 -0
  25. package/dist/admin/document-blocks/InvoiceLogo.js.map +1 -0
  26. package/dist/admin/document-blocks/InvoiceNotes.d.ts +5 -0
  27. package/dist/admin/document-blocks/InvoiceNotes.d.ts.map +1 -0
  28. package/dist/admin/document-blocks/InvoiceNotes.js +5 -0
  29. package/dist/admin/document-blocks/InvoiceNotes.js.map +1 -0
  30. package/dist/admin/document-blocks/InvoiceParties.d.ts +5 -0
  31. package/dist/admin/document-blocks/InvoiceParties.d.ts.map +1 -0
  32. package/dist/admin/document-blocks/InvoiceParties.js +5 -0
  33. package/dist/admin/document-blocks/InvoiceParties.js.map +1 -0
  34. package/dist/admin/document-blocks/InvoiceSpacer.d.ts +5 -0
  35. package/dist/admin/document-blocks/InvoiceSpacer.d.ts.map +1 -0
  36. package/dist/admin/document-blocks/InvoiceSpacer.js +5 -0
  37. package/dist/admin/document-blocks/InvoiceSpacer.js.map +1 -0
  38. package/dist/admin/document-blocks/InvoiceTotals.d.ts +5 -0
  39. package/dist/admin/document-blocks/InvoiceTotals.d.ts.map +1 -0
  40. package/dist/admin/document-blocks/InvoiceTotals.js +5 -0
  41. package/dist/admin/document-blocks/InvoiceTotals.js.map +1 -0
  42. package/dist/admin/document-blocks/InvoiceVatSummary.d.ts +5 -0
  43. package/dist/admin/document-blocks/InvoiceVatSummary.d.ts.map +1 -0
  44. package/dist/admin/document-blocks/InvoiceVatSummary.js +5 -0
  45. package/dist/admin/document-blocks/InvoiceVatSummary.js.map +1 -0
  46. package/dist/admin/index.d.ts +3 -1
  47. package/dist/admin/index.d.ts.map +1 -1
  48. package/dist/admin/index.js +62 -2
  49. package/dist/admin/index.js.map +1 -1
  50. package/dist/admin/pages/InvoiceTemplatesRedirect.d.ts +10 -0
  51. package/dist/admin/pages/InvoiceTemplatesRedirect.d.ts.map +1 -0
  52. package/dist/admin/pages/InvoiceTemplatesRedirect.js +14 -0
  53. package/dist/admin/pages/InvoiceTemplatesRedirect.js.map +1 -0
  54. package/dist/admin/templates/invoice-puck-config.d.ts +7 -21
  55. package/dist/admin/templates/invoice-puck-config.d.ts.map +1 -1
  56. package/dist/admin/templates/invoice-puck-config.js +7 -26
  57. package/dist/admin/templates/invoice-puck-config.js.map +1 -1
  58. package/dist/backend/document/block-descriptions.d.ts +22 -0
  59. package/dist/backend/document/block-descriptions.d.ts.map +1 -0
  60. package/dist/backend/{pdf-components/descriptor.js → document/block-descriptions.js} +8 -24
  61. package/dist/backend/document/block-descriptions.js.map +1 -0
  62. package/dist/backend/document/document-templates-grant.d.ts +29 -0
  63. package/dist/backend/document/document-templates-grant.d.ts.map +1 -0
  64. package/dist/backend/document/document-templates-grant.js +45 -0
  65. package/dist/backend/document/document-templates-grant.js.map +1 -0
  66. package/dist/backend/document/invoice-document-type.d.ts +38 -0
  67. package/dist/backend/document/invoice-document-type.d.ts.map +1 -0
  68. package/dist/backend/document/invoice-document-type.js +108 -0
  69. package/dist/backend/document/invoice-document-type.js.map +1 -0
  70. package/dist/backend/document/render-invoice.d.ts +14 -0
  71. package/dist/backend/document/render-invoice.d.ts.map +1 -0
  72. package/dist/backend/document/render-invoice.js +24 -0
  73. package/dist/backend/document/render-invoice.js.map +1 -0
  74. package/dist/backend/index.d.ts +1 -3
  75. package/dist/backend/index.d.ts.map +1 -1
  76. package/dist/backend/index.js +48 -6
  77. package/dist/backend/index.js.map +1 -1
  78. package/dist/backend/pdf-components/tree-mapper.d.ts +5 -21
  79. package/dist/backend/pdf-components/tree-mapper.d.ts.map +1 -1
  80. package/dist/backend/pdf-components/tree-mapper.js +8 -44
  81. package/dist/backend/pdf-components/tree-mapper.js.map +1 -1
  82. package/dist/backend/plugin.d.ts +9 -12
  83. package/dist/backend/plugin.d.ts.map +1 -1
  84. package/dist/backend/plugin.js +3 -16
  85. package/dist/backend/plugin.js.map +1 -1
  86. package/dist/backend/routes.admin.d.ts +3 -5
  87. package/dist/backend/routes.admin.d.ts.map +1 -1
  88. package/dist/backend/routes.admin.js +8 -53
  89. package/dist/backend/routes.admin.js.map +1 -1
  90. package/dist/backend/routes.customer.d.ts +3 -5
  91. package/dist/backend/routes.customer.d.ts.map +1 -1
  92. package/dist/backend/routes.customer.js +3 -3
  93. package/dist/backend/routes.customer.js.map +1 -1
  94. package/dist/backend/services/invoice-email-dispatch.d.ts +7 -3
  95. package/dist/backend/services/invoice-email-dispatch.d.ts.map +1 -1
  96. package/dist/backend/services/invoice-email-dispatch.js +2 -1
  97. package/dist/backend/services/invoice-email-dispatch.js.map +1 -1
  98. package/dist/manifest.d.ts +9 -3
  99. package/dist/manifest.d.ts.map +1 -1
  100. package/dist/manifest.js +25 -14
  101. package/dist/manifest.js.map +1 -1
  102. package/dist/migrations/20261017T075839_invoices_drop_invoice_templates.d.ts +20 -0
  103. package/dist/migrations/20261017T075839_invoices_drop_invoice_templates.d.ts.map +1 -0
  104. package/dist/migrations/20261017T075839_invoices_drop_invoice_templates.js +43 -0
  105. package/dist/migrations/20261017T075839_invoices_drop_invoice_templates.js.map +1 -0
  106. package/dist/migrations/index.d.ts +2 -1
  107. package/dist/migrations/index.d.ts.map +1 -1
  108. package/dist/migrations/index.js +3 -1
  109. package/dist/migrations/index.js.map +1 -1
  110. package/docs/invoices.md +21 -14
  111. package/i18n/en.json +3 -3
  112. package/i18n/pl.json +3 -3
  113. package/package.json +13 -13
  114. package/dist/admin/pages/InvoiceTemplateEditor.d.ts +0 -11
  115. package/dist/admin/pages/InvoiceTemplateEditor.d.ts.map +0 -1
  116. package/dist/admin/pages/InvoiceTemplateEditor.js +0 -189
  117. package/dist/admin/pages/InvoiceTemplateEditor.js.map +0 -1
  118. package/dist/admin/pages/InvoiceTemplatesPage.d.ts +0 -10
  119. package/dist/admin/pages/InvoiceTemplatesPage.d.ts.map +0 -1
  120. package/dist/admin/pages/InvoiceTemplatesPage.js +0 -60
  121. package/dist/admin/pages/InvoiceTemplatesPage.js.map +0 -1
  122. package/dist/admin/templates/described-blocks.d.ts +0 -67
  123. package/dist/admin/templates/described-blocks.d.ts.map +0 -1
  124. package/dist/admin/templates/described-blocks.js +0 -83
  125. package/dist/admin/templates/described-blocks.js.map +0 -1
  126. package/dist/admin/templates/invoice-builder-plugin.d.ts +0 -4
  127. package/dist/admin/templates/invoice-builder-plugin.d.ts.map +0 -1
  128. package/dist/admin/templates/invoice-builder-plugin.js +0 -12
  129. package/dist/admin/templates/invoice-builder-plugin.js.map +0 -1
  130. package/dist/backend/entities/invoice-template.entity.d.ts +0 -22
  131. package/dist/backend/entities/invoice-template.entity.d.ts.map +0 -1
  132. package/dist/backend/entities/invoice-template.entity.js +0 -84
  133. package/dist/backend/entities/invoice-template.entity.js.map +0 -1
  134. package/dist/backend/pdf-components/descriptor.d.ts +0 -29
  135. package/dist/backend/pdf-components/descriptor.d.ts.map +0 -1
  136. package/dist/backend/pdf-components/descriptor.js.map +0 -1
  137. package/dist/backend/services/invoice-pdf-renderer.d.ts +0 -57
  138. package/dist/backend/services/invoice-pdf-renderer.d.ts.map +0 -1
  139. package/dist/backend/services/invoice-pdf-renderer.js +0 -158
  140. package/dist/backend/services/invoice-pdf-renderer.js.map +0 -1
  141. package/dist/backend/services/invoice-template-service.d.ts +0 -43
  142. package/dist/backend/services/invoice-template-service.d.ts.map +0 -1
  143. package/dist/backend/services/invoice-template-service.js +0 -147
  144. package/dist/backend/services/invoice-template-service.js.map +0 -1
@@ -1,189 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useCallback, useEffect, useMemo, useState } from 'react';
3
- import { useParams, useNavigate, Link } from 'react-router-dom';
4
- import { Puck } from '@puckeditor/core';
5
- import '@puckeditor/core/puck.css';
6
- import { apiBaseUrl, apiClient, ApiError, cn } from '@endora-commerce/admin-kit/lib';
7
- import { Alert, AlertDescription, Button, Card, CardContent, PageHeader, SaveButtonGroup } from '@endora-commerce/admin-kit/ui';
8
- import { useTranslation } from '@endora-commerce/admin-kit/i18n';
9
- import { PageBuilderHeaderActions } from '@endora-commerce/page-builder-admin';
10
- import { PageBuilderOverlayBridge } from '@endora-commerce/page-builder-admin';
11
- import { countBlockNames } from '@endora-commerce/page-builder-core';
12
- import { PUCK_LEGACY_DND, PUCK_LEGACY_VIEWPORTS, withPuckLegacySideBar, } from '@endora-commerce/page-builder-core/editor';
13
- import { invoicePuckConfig, invoicePuckPalette } from '../templates/invoice-puck-config.js';
14
- import { withDescribedInvoiceBlocks, } from '../templates/described-blocks.js';
15
- import { createInvoiceBuilderEditorPlugin } from '../templates/invoice-builder-plugin.js';
16
- const emptyData = { root: { props: {} }, content: [] };
17
- const LANGUAGE = 'pl-PL';
18
- /**
19
- * `apiBaseUrl` and not `import.meta.env`: this file compiles under `tsc` inside
20
- * its own package, where Vite's client types are not in scope, and the kit
21
- * publishes the resolved value — with this exact fallback — for exactly this
22
- * (feature 091).
23
- */
24
- const API_BASE = apiBaseUrl;
25
- const invoiceBuilderPlugins = withPuckLegacySideBar([createInvoiceBuilderEditorPlugin()]);
26
- /**
27
- * This module's own config: the namespaced renderer map plus its one derived
28
- * section (feature 096, T303). The config Puck renders is this merged with the
29
- * served descriptor and the stored document's names
30
- * (`withDescribedInvoiceBlocks`, `specs/134-paid-module-extraction/` T138).
31
- */
32
- const localConfig = { ...invoicePuckConfig, categories: invoicePuckPalette };
33
- /**
34
- * Fill missing props from each component's `defaultProps`. Persisted trees
35
- * (esp. older seeds) often only store `{ id }`, which leaves radio/select
36
- * fields unselected in the Puck sidebar even though canvas fallbacks work.
37
- */
38
- function hydrateInvoiceDefaults(data) {
39
- const components = invoicePuckConfig.components ?? {};
40
- const content = (data.content ?? []).map((node) => {
41
- const defaults = components[node.type]?.defaultProps;
42
- if (!defaults)
43
- return node;
44
- const props = node.props;
45
- const merged = { ...defaults };
46
- for (const [key, value] of Object.entries(props)) {
47
- if (value !== undefined)
48
- merged[key] = value;
49
- }
50
- return { ...node, props: merged };
51
- });
52
- return { ...data, content };
53
- }
54
- /** Admin editor for an invoice PDF template (feature 047, US6). */
55
- export function InvoiceTemplateEditor() {
56
- const t = useTranslation('core');
57
- const { id = '' } = useParams();
58
- const navigate = useNavigate();
59
- const [tpl, setTpl] = useState(null);
60
- const [draft, setDraft] = useState(emptyData);
61
- const [loaded, setLoaded] = useState(false);
62
- const [error, setError] = useState(null);
63
- const [notice, setNotice] = useState(null);
64
- const [fullscreen, setFullscreen] = useState(false);
65
- const [canvasEpoch, setCanvasEpoch] = useState(0);
66
- const [previewBusy, setPreviewBusy] = useState(false);
67
- /**
68
- * The served descriptor — `null` until it arrives or when it cannot be
69
- * fetched, in which case the editor keeps its own blocks and gives every
70
- * stored block it cannot render a placeholder; it never drops a node (T138).
71
- */
72
- const [descriptor, setDescriptor] = useState(null);
73
- useEffect(() => {
74
- let cancelled = false;
75
- apiClient
76
- .get('/api/v1/admin/invoice-templates/page-builder/config')
77
- .then((res) => {
78
- if (!cancelled)
79
- setDescriptor(res.data);
80
- })
81
- .catch(() => {
82
- if (!cancelled)
83
- setDescriptor(null);
84
- });
85
- return () => {
86
- cancelled = true;
87
- };
88
- }, []);
89
- // Keyed on the sorted set of stored names, as the CMS editor's merge is: a
90
- // keystroke moves the document, not the names, so typing does not rebuild
91
- // the Puck config.
92
- const storedNamesKey = [...countBlockNames(draft).keys()].sort().join('\n');
93
- const puckConfig = useMemo(() => {
94
- const text = {
95
- standIn: ({ label, owner }) => t('invoiceTemplates.describedBlock.standIn', { label, owner }),
96
- placeholder: ({ owner, name }) => owner === null
97
- ? t('invoiceTemplates.describedBlock.placeholderNoOwner', { name })
98
- : t('invoiceTemplates.describedBlock.placeholder', { owner }),
99
- };
100
- return withDescribedInvoiceBlocks(localConfig, descriptor, storedNamesKey === '' ? [] : storedNamesKey.split('\n'), text);
101
- }, [descriptor, storedNamesKey, t]);
102
- useEffect(() => {
103
- if (!fullscreen)
104
- return undefined;
105
- const onKey = (e) => {
106
- if (e.key === 'Escape')
107
- setFullscreen(false);
108
- };
109
- window.addEventListener('keydown', onKey);
110
- return () => window.removeEventListener('keydown', onKey);
111
- }, [fullscreen]);
112
- const load = useCallback(async () => {
113
- try {
114
- const res = await apiClient.get(`/api/v1/admin/invoice-templates/${id}`);
115
- setTpl(res.data);
116
- const tree = res.data.content.languages?.[LANGUAGE] ?? emptyData;
117
- setDraft(hydrateInvoiceDefaults(tree));
118
- setLoaded(true);
119
- }
120
- catch (err) {
121
- setError(err instanceof ApiError ? err.envelope.error.message : 'Failed to load template.');
122
- }
123
- }, [id]);
124
- useEffect(() => {
125
- void load();
126
- }, [load]);
127
- const applyCanvasData = useCallback((next) => {
128
- setDraft(next);
129
- setCanvasEpoch((n) => n + 1);
130
- }, []);
131
- const save = useCallback(async () => {
132
- if (!tpl)
133
- return false;
134
- setError(null);
135
- setNotice(null);
136
- try {
137
- const res = await apiClient.put(`/api/v1/admin/invoice-templates/${tpl.id}/content/${LANGUAGE}`, { version: tpl.version, data: draft });
138
- setTpl((prev) => (prev ? { ...prev, version: res.data.version } : prev));
139
- setNotice(t('invoiceTemplates.saved'));
140
- return true;
141
- }
142
- catch (err) {
143
- setError(err instanceof ApiError ? err.envelope.error.message : 'Failed to save.');
144
- return false;
145
- }
146
- }, [tpl, draft, t]);
147
- const saveAndExit = useCallback(async () => {
148
- if (await save())
149
- navigate('/invoices/templates');
150
- }, [save, navigate]);
151
- const previewPdf = useCallback(async () => {
152
- if (!tpl)
153
- return;
154
- setPreviewBusy(true);
155
- setError(null);
156
- try {
157
- const res = await fetch(`${API_BASE.replace(/\/+$/, '')}/api/v1/admin/invoice-templates/${tpl.id}/preview`, {
158
- method: 'POST',
159
- credentials: 'include',
160
- headers: { 'Content-Type': 'application/json', Accept: 'application/pdf' },
161
- body: JSON.stringify({ data: draft }),
162
- });
163
- if (!res.ok) {
164
- throw new Error(t('invoiceTemplates.previewError'));
165
- }
166
- const blob = await res.blob();
167
- const url = URL.createObjectURL(blob);
168
- window.open(url, '_blank', 'noopener,noreferrer');
169
- window.setTimeout(() => URL.revokeObjectURL(url), 60_000);
170
- }
171
- catch (err) {
172
- setError(err instanceof Error ? err.message : t('invoiceTemplates.previewError'));
173
- }
174
- finally {
175
- setPreviewBusy(false);
176
- }
177
- }, [tpl, draft, t]);
178
- return (_jsxs(_Fragment, { children: [_jsx(PageHeader, { title: tpl?.name ?? t('invoiceTemplates.editTitle'), description: t('invoiceTemplates.editDescription'), actions: _jsxs("div", { className: "flex gap-2", children: [_jsx(Button, { variant: "outline", size: "sm", asChild: true, children: _jsx(Link, { to: "/invoices/templates", children: t('common.action.back') }) }), tpl ? (_jsx(Button, { type: "button", variant: "outline", size: "sm", disabled: previewBusy, onClick: () => void previewPdf(), children: previewBusy ? t('invoiceTemplates.previewLoading') : t('invoiceTemplates.preview') })) : null, _jsx(SaveButtonGroup, { size: "sm", onSave: () => void save(), onSaveAndExit: () => void saveAndExit(), saveLabel: t('common.action.save'), savingLabel: t('common.action.save'), saveAndExitLabel: t('common.action.saveAndExit') })] }) }), error ? (_jsx(Alert, { variant: "destructive", className: "mb-4", children: _jsx(AlertDescription, { children: error }) })) : null, notice ? (_jsx(Alert, { className: "mb-4", children: _jsx(AlertDescription, { children: notice }) })) : null, _jsx(Card, { children: _jsx(CardContent, { className: "pt-6", children: _jsx("div", { className: cn('cms-page-builder space-y-3', fullscreen && 'fixed inset-0 z-50 flex flex-col overflow-auto bg-background p-4'), children: _jsx("div", { className: cn('overflow-hidden rounded-md border', fullscreen ? 'min-h-0 flex-1' : 'min-h-[560px]'), children: loaded ? (_jsx(Puck, { config: puckConfig, data: draft, onChange: setDraft, plugins: invoiceBuilderPlugins, viewports: PUCK_LEGACY_VIEWPORTS, dnd: PUCK_LEGACY_DND, overrides: {
179
- headerActions: () => (_jsx(PageBuilderHeaderActions, { fullscreen: fullscreen, onToggleFullscreen: () => setFullscreen((f) => !f), currentData: draft, onClearCanvas: () => applyCanvasData(emptyData), t: t })),
180
- componentOverlay: ({ children, hover, isSelected, componentId, componentType, }) => (_jsx(PageBuilderOverlayBridge, { hover: hover, isSelected: isSelected, componentId: componentId, componentType: componentType, children: children })),
181
- } }, `${id}:${LANGUAGE}:${canvasEpoch}`)) : (_jsx("div", { className: "flex min-h-[560px] items-center justify-center text-sm text-muted-foreground", children: t('invoiceTemplates.loading') })) }) }) }) })] }));
182
- }
183
- /**
184
- * The registry loads a route component through a dynamic-import factory and
185
- * reads its default export (feature 091, FR-013). The named export stays: it is
186
- * the spelling this module's own code and its tests use.
187
- */
188
- export default InvoiceTemplateEditor;
189
- //# sourceMappingURL=InvoiceTemplateEditor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"InvoiceTemplateEditor.js","sourceRoot":"","sources":["../../../src/admin/pages/InvoiceTemplateEditor.tsx"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import { type ReactNode } from 'react';
2
- /** Admin invoice templates list + create (feature 047, US6). */
3
- export declare function InvoiceTemplatesPage(): ReactNode;
4
- /**
5
- * The registry loads a route component through a dynamic-import factory and
6
- * reads its default export (feature 091, FR-013). The named export stays: it is
7
- * the spelling this module's own code and its tests use.
8
- */
9
- export default InvoiceTemplatesPage;
10
- //# sourceMappingURL=InvoiceTemplatesPage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"InvoiceTemplatesPage.d.ts","sourceRoot":"","sources":["../../../src/admin/pages/InvoiceTemplatesPage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAiBzE,gEAAgE;AAChE,wBAAgB,oBAAoB,IAAI,SAAS,CA4HhD;AAED;;;;GAIG;AACH,eAAe,oBAAoB,CAAC"}
@@ -1,60 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useCallback, useEffect, useState } from 'react';
3
- import { Link } from 'react-router-dom';
4
- import { ApiError, apiClient } from '@endora-commerce/admin-kit/lib';
5
- import { Alert, AlertDescription, Badge, Button, Card, CardContent, Input, Label, PageHeader, Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from '@endora-commerce/admin-kit/ui';
6
- import { SalesChannelPicker } from '@endora-commerce/admin-kit/components';
7
- import { InvoiceSectionTabs } from '../components/InvoiceSectionTabs.js';
8
- import { useTranslation } from '@endora-commerce/admin-kit/i18n';
9
- /** Admin invoice templates list + create (feature 047, US6). */
10
- export function InvoiceTemplatesPage() {
11
- const t = useTranslation('core');
12
- const [rows, setRows] = useState([]);
13
- const [loading, setLoading] = useState(true);
14
- const [error, setError] = useState(null);
15
- const [code, setCode] = useState('');
16
- const [name, setName] = useState('');
17
- const [channelId, setChannelId] = useState('');
18
- const refresh = useCallback(async () => {
19
- setLoading(true);
20
- setError(null);
21
- try {
22
- const res = await apiClient.get('/api/v1/admin/invoice-templates');
23
- setRows(res.data);
24
- }
25
- catch (err) {
26
- setError(err instanceof ApiError ? err.envelope.error.message : 'Failed to load.');
27
- }
28
- finally {
29
- setLoading(false);
30
- }
31
- }, []);
32
- useEffect(() => {
33
- void refresh();
34
- }, [refresh]);
35
- const create = useCallback(async () => {
36
- setError(null);
37
- try {
38
- await apiClient.post('/api/v1/admin/invoice-templates', {
39
- code,
40
- name,
41
- salesChannelId: channelId.trim() ? channelId.trim() : null,
42
- });
43
- setCode('');
44
- setName('');
45
- setChannelId('');
46
- await refresh();
47
- }
48
- catch (err) {
49
- setError(err instanceof ApiError ? err.envelope.error.message : 'Failed to create.');
50
- }
51
- }, [code, name, channelId, refresh]);
52
- return (_jsxs(_Fragment, { children: [_jsx(PageHeader, { title: t('invoiceTemplates.title'), description: t('invoiceTemplates.description') }), _jsx(InvoiceSectionTabs, {}), error ? (_jsx(Alert, { variant: "destructive", className: "mb-4", children: _jsx(AlertDescription, { children: error }) })) : null, _jsx(Card, { className: "mb-4", children: _jsxs(CardContent, { className: "grid gap-3 pt-6 md:grid-cols-4", children: [_jsxs("div", { className: "space-y-1", children: [_jsx(Label, { htmlFor: "tcode", children: t('invoiceTemplates.fields.code') }), _jsx(Input, { id: "tcode", value: code, onChange: (e) => setCode(e.target.value) })] }), _jsxs("div", { className: "space-y-1", children: [_jsx(Label, { htmlFor: "tname", children: t('invoiceTemplates.fields.name') }), _jsx(Input, { id: "tname", value: name, onChange: (e) => setName(e.target.value) })] }), _jsxs("div", { className: "space-y-1", children: [_jsx(Label, { htmlFor: "tchan", children: t('invoiceTemplates.fields.channel') }), _jsx(SalesChannelPicker, { id: "tchan", value: channelId.trim() ? channelId : null, onChange: (id) => setChannelId(id ?? ''), placeholder: t('invoiceTemplates.fields.channelHint'), clearable: true })] }), _jsx("div", { className: "flex items-end", children: _jsx(Button, { onClick: () => void create(), disabled: !code || !name, children: t('invoiceTemplates.create') }) })] }) }), _jsx(Card, { children: _jsx(CardContent, { className: "pt-6", children: loading ? (_jsx("p", { className: "text-sm text-muted-foreground", children: t('common.state.loading') })) : (_jsxs(Table, { children: [_jsx(TableHeader, { children: _jsxs(TableRow, { children: [_jsx(TableHead, { children: t('invoiceTemplates.columns.name') }), _jsx(TableHead, { children: t('invoiceTemplates.columns.scope') }), _jsx(TableHead, { children: t('invoiceTemplates.columns.active') }), _jsx(TableHead, {})] }) }), _jsx(TableBody, { children: rows.map((r) => (_jsxs(TableRow, { children: [_jsxs(TableCell, { className: "font-medium", children: [r.name, r.isSystem ? _jsx(Badge, { className: "ml-2", variant: "secondary", children: "system" }) : null] }), _jsx(TableCell, { className: "font-mono text-xs", children: r.salesChannelId ? r.salesChannelId.slice(0, 8) : t('invoiceTemplates.global') }), _jsx(TableCell, { children: r.active ? _jsx(Badge, { variant: "success", children: t('invoiceTemplates.active') }) : null }), _jsx(TableCell, { children: _jsx(Button, { asChild: true, variant: "outline", size: "sm", children: _jsx(Link, { to: `/invoices/templates/${r.id}`, children: t('common.action.edit') }) }) })] }, r.id))) })] })) }) })] }));
53
- }
54
- /**
55
- * The registry loads a route component through a dynamic-import factory and
56
- * reads its default export (feature 091, FR-013). The named export stays: it is
57
- * the spelling this module's own code and its tests use.
58
- */
59
- export default InvoiceTemplatesPage;
60
- //# sourceMappingURL=InvoiceTemplatesPage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"InvoiceTemplatesPage.js","sourceRoot":"","sources":["../../../src/admin/pages/InvoiceTemplatesPage.tsx"],"names":[],"mappings":"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"}
@@ -1,67 +0,0 @@
1
- import type { Config } from '@puckeditor/core';
2
- import type { InvoiceTemplateBlockField } from '@endora-commerce/contracts';
3
- /**
4
- * The invoice editor's view of blocks it has no React binding for —
5
- * `specs/134-paid-module-extraction/` T138 (`research.md` D22 §3(b)).
6
- *
7
- * `invoicePuckConfig` binds this module's own ten blocks. A block another
8
- * module declares reaches the editor as **data**: the served descriptor
9
- * (`GET /api/v1/admin/invoice-templates/page-builder/config`) lists every
10
- * present contributor's block with its label and fields, and this merge turns
11
- * each one the local map does not bind into a config Puck can insert and
12
- * configure. Its canvas render is a neutral stand-in; the *Preview PDF* button
13
- * renders it for real, server-side, through the contributor's registration.
14
- *
15
- * **This is not a contribution kind (α).** No module hands this editor React;
16
- * the keys come from the descriptor at runtime, so this module's admin names no
17
- * other module's block. The shape is the CMS editor's `mergeConfig` and
18
- * FR-019's degradation merge, applied to this surface.
19
- *
20
- * **A stored name nothing covers** — its module off, not installed, or a name
21
- * nobody recognises (`specs/096-page-builder-block-ownership/` FR-019, FR-020,
22
- * identical for all three) — gets a visible, data-preserving placeholder that
23
- * is **not** in the palette: it stays where it is, and nobody may insert it.
24
- * It is built here rather than taken from `@endora-commerce/cms-components`,
25
- * whose placeholder speaks about storefront builds and would bring that
26
- * package's peers into this module.
27
- *
28
- * Strings arrive through `text` so they are translated by the caller, and both
29
- * are statements of fact on the surface where the block sits (D-265): no link,
30
- * no action, and a palette that only ever lists present contributors.
31
- */
32
- /** One block as the served descriptor describes it. */
33
- export interface InvoiceBuilderDescriptorEntry {
34
- readonly name: string;
35
- readonly ownerModule: string;
36
- readonly label: string;
37
- readonly fields: Readonly<Record<string, InvoiceTemplateBlockField>>;
38
- }
39
- /** The served descriptor, as the editor reads it. */
40
- export interface InvoiceBuilderDescriptor {
41
- readonly components: readonly InvoiceBuilderDescriptorEntry[];
42
- }
43
- /** The two sentences this merge renders, already translated. */
44
- export interface DescribedBlockText {
45
- /** A present contributor's block on the canvas. */
46
- standIn(input: {
47
- readonly label: string;
48
- readonly owner: string;
49
- }): string;
50
- /** A stored block nothing covers; `owner` is `null` for a name that states none. */
51
- placeholder(input: {
52
- readonly owner: string | null;
53
- readonly name: string;
54
- }): string;
55
- }
56
- /** The one palette section this editor has. */
57
- export declare const INVOICE_PALETTE_CATEGORY = "invoice";
58
- /**
59
- * `config` plus every present contributor's described block (insertable, in
60
- * the invoice category) and a placeholder for every stored name neither covers
61
- * (not in any category). `descriptor` is `null` when it could not be fetched:
62
- * nothing is then described, and every stored unknown name is kept.
63
- *
64
- * Entries the local map already binds are left exactly as they are.
65
- */
66
- export declare function withDescribedInvoiceBlocks(config: Config, descriptor: InvoiceBuilderDescriptor | null, storedNames: Iterable<string>, text: DescribedBlockText): Config;
67
- //# sourceMappingURL=described-blocks.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"described-blocks.d.ts","sourceRoot":"","sources":["../../../src/admin/templates/described-blocks.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAmB,MAAM,EAAS,MAAM,kBAAkB,CAAC;AACvE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAG5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,uDAAuD;AACvD,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC,CAAC;CACtE;AAED,qDAAqD;AACrD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,UAAU,EAAE,SAAS,6BAA6B,EAAE,CAAC;CAC/D;AAED,gEAAgE;AAChE,MAAM,WAAW,kBAAkB;IACjC,mDAAmD;IACnD,OAAO,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IAC3E,oFAAoF;IACpF,WAAW,CAAC,KAAK,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;CACtF;AAED,+CAA+C;AAC/C,eAAO,MAAM,wBAAwB,YAAY,CAAC;AAmDlD;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,wBAAwB,GAAG,IAAI,EAC3C,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,EAC7B,IAAI,EAAE,kBAAkB,GACvB,MAAM,CA4BR"}
@@ -1,83 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { createColorField, ownerOf } from '@endora-commerce/page-builder-core';
3
- /** The one palette section this editor has. */
4
- export const INVOICE_PALETTE_CATEGORY = 'invoice';
5
- const noteStyle = {
6
- fontFamily: 'system-ui, sans-serif',
7
- fontSize: 12,
8
- color: '#475569',
9
- background: '#f8fafc',
10
- border: '1px dashed #cbd5e1',
11
- borderRadius: 4,
12
- padding: '8px 10px',
13
- margin: '6px 0',
14
- };
15
- function Note({ text }) {
16
- return (_jsx("div", { role: "note", style: noteStyle, children: text }));
17
- }
18
- function puckField(field) {
19
- if (field.type === 'color')
20
- return createColorField({ label: field.label });
21
- if (field.type === 'select' || field.type === 'radio') {
22
- return { type: field.type, label: field.label, options: [...(field.options ?? [])] };
23
- }
24
- return { type: field.type, label: field.label };
25
- }
26
- function describedBlock(entry, text) {
27
- const sentence = text.standIn({ label: entry.label, owner: entry.ownerModule });
28
- const fields = {};
29
- for (const [key, field] of Object.entries(entry.fields))
30
- fields[key] = puckField(field);
31
- return {
32
- label: entry.label,
33
- fields,
34
- render: () => _jsx(Note, { text: sentence }),
35
- };
36
- }
37
- function placeholderBlock(name, text) {
38
- const sentence = text.placeholder({ owner: ownerOf(name), name });
39
- // No fields and no defaults: Puck neither offers nor writes a prop, so every
40
- // stored prop goes back through a save exactly as it came.
41
- return {
42
- label: name,
43
- fields: {},
44
- render: () => _jsx(Note, { text: sentence }),
45
- };
46
- }
47
- /**
48
- * `config` plus every present contributor's described block (insertable, in
49
- * the invoice category) and a placeholder for every stored name neither covers
50
- * (not in any category). `descriptor` is `null` when it could not be fetched:
51
- * nothing is then described, and every stored unknown name is kept.
52
- *
53
- * Entries the local map already binds are left exactly as they are.
54
- */
55
- export function withDescribedInvoiceBlocks(config, descriptor, storedNames, text) {
56
- const local = (config.components ?? {});
57
- const components = { ...local };
58
- const described = [];
59
- for (const entry of descriptor?.components ?? []) {
60
- if (entry.name in components)
61
- continue;
62
- components[entry.name] = describedBlock(entry, text);
63
- described.push(entry.name);
64
- }
65
- for (const name of new Set(storedNames)) {
66
- if (name in components)
67
- continue;
68
- components[name] = placeholderBlock(name, text);
69
- }
70
- const categories = { ...(config.categories ?? {}) };
71
- const section = categories[INVOICE_PALETTE_CATEGORY];
72
- if (described.length > 0) {
73
- categories[INVOICE_PALETTE_CATEGORY] = {
74
- ...section,
75
- components: [...(section?.components ?? []), ...described],
76
- };
77
- }
78
- // A placeholder belongs to no category, and Puck would otherwise list every
79
- // uncategorised name under "Other" — which would make it insertable.
80
- categories.other = { ...categories.other, visible: false };
81
- return { ...config, components, categories };
82
- }
83
- //# sourceMappingURL=described-blocks.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"described-blocks.js","sourceRoot":"","sources":["../../../src/admin/templates/described-blocks.tsx"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import type { Plugin } from '@puckeditor/core';
2
- /** Invoice builder plugin — Outline like CMS/email, without viewport fields. */
3
- export declare function createInvoiceBuilderEditorPlugin(): Plugin;
4
- //# sourceMappingURL=invoice-builder-plugin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invoice-builder-plugin.d.ts","sourceRoot":"","sources":["../../../src/admin/templates/invoice-builder-plugin.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG/C,gFAAgF;AAChF,wBAAgB,gCAAgC,IAAI,MAAM,CAQzD"}
@@ -1,12 +0,0 @@
1
- 'use client';
2
- import { jsx as _jsx } from "react/jsx-runtime";
3
- import { PageBuilderOutline } from '@endora-commerce/page-builder-core/editor';
4
- /** Invoice builder plugin — Outline like CMS/email, without viewport fields. */
5
- export function createInvoiceBuilderEditorPlugin() {
6
- return {
7
- overrides: {
8
- outline: ({ children }) => (_jsx(PageBuilderOutline, { children: children })),
9
- },
10
- };
11
- }
12
- //# sourceMappingURL=invoice-builder-plugin.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invoice-builder-plugin.js","sourceRoot":"","sources":["../../../src/admin/templates/invoice-builder-plugin.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAIb,OAAO,EAAE,kBAAkB,EAAE,MAAM,2CAA2C,CAAC;AAE/E,gFAAgF;AAChF,MAAM,UAAU,gCAAgC;IAC9C,OAAO;QACL,SAAS,EAAE;YACT,OAAO,EAAE,CAAC,EAAE,QAAQ,EAA2B,EAAgB,EAAE,CAAC,CAChE,KAAC,kBAAkB,cAAE,QAAQ,GAAsB,CACpD;SACF;KACF,CAAC;AACJ,CAAC"}
@@ -1,22 +0,0 @@
1
- import { OptionalProps } from '@mikro-orm/core';
2
- /**
3
- * WYSIWYG (Puck) invoice PDF template (feature 047, research R2). One global
4
- * generic default (`salesChannelId = null`, `isSystem = true`); optional
5
- * per-channel overrides. `content` is a Puck envelope
6
- * `{ schema_version, languages: { <lang>: <PuckTree> } }`.
7
- */
8
- export declare class InvoiceTemplate {
9
- [OptionalProps]?: 'id' | 'salesChannelId' | 'active' | 'isSystem' | 'version' | 'languages' | 'createdAt' | 'updatedAt';
10
- id: string;
11
- code: string;
12
- name: string;
13
- salesChannelId?: string | null;
14
- content: Record<string, unknown>;
15
- languages: string[];
16
- active: boolean;
17
- isSystem: boolean;
18
- version: number;
19
- createdAt: Date;
20
- updatedAt: Date;
21
- }
22
- //# sourceMappingURL=invoice-template.entity.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invoice-template.entity.d.ts","sourceRoot":"","sources":["../../../src/backend/entities/invoice-template.entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,aAAa,EAAwB,MAAM,iBAAiB,CAAC;AAIrF;;;;;GAKG;AACH,qBAEa,eAAe;IAC1B,CAAC,aAAa,CAAC,CAAC,EACZ,IAAI,GACJ,gBAAgB,GAChB,QAAQ,GACR,UAAU,GACV,SAAS,GACT,WAAW,GACX,WAAW,GACX,WAAW,CAAC;IAGhB,EAAE,EAAE,MAAM,CAAgB;IAI1B,IAAI,EAAG,MAAM,CAAC;IAGd,IAAI,EAAG,MAAM,CAAC;IAId,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAG/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAwC;IAGxE,SAAS,EAAE,MAAM,EAAE,CAAM;IAGzB,MAAM,EAAE,OAAO,CAAQ;IAGvB,QAAQ,EAAE,OAAO,CAAS;IAG1B,OAAO,EAAE,MAAM,CAAK;IAGpB,SAAS,EAAE,IAAI,CAAc;IAG7B,SAAS,EAAE,IAAI,CAAc;CAC9B"}
@@ -1,84 +0,0 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- var __metadata = (this && this.__metadata) || function (k, v) {
8
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
- };
10
- import { Entity, Index, OptionalProps, PrimaryKey, Property } from '@mikro-orm/core';
11
- import { GlobalEntity } from '@endora-commerce/platform/tenancy';
12
- import { randomUUID } from 'crypto';
13
- /**
14
- * WYSIWYG (Puck) invoice PDF template (feature 047, research R2). One global
15
- * generic default (`salesChannelId = null`, `isSystem = true`); optional
16
- * per-channel overrides. `content` is a Puck envelope
17
- * `{ schema_version, languages: { <lang>: <PuckTree> } }`.
18
- */
19
- let InvoiceTemplate = class InvoiceTemplate {
20
- [OptionalProps];
21
- id = randomUUID();
22
- code;
23
- name;
24
- salesChannelId;
25
- content = { schema_version: 1, languages: {} };
26
- languages = [];
27
- active = true;
28
- isSystem = false;
29
- version = 1;
30
- createdAt = new Date();
31
- updatedAt = new Date();
32
- };
33
- __decorate([
34
- PrimaryKey({ type: 'uuid' }),
35
- __metadata("design:type", String)
36
- ], InvoiceTemplate.prototype, "id", void 0);
37
- __decorate([
38
- Property({ type: 'string', length: 180 }),
39
- Index(),
40
- __metadata("design:type", String)
41
- ], InvoiceTemplate.prototype, "code", void 0);
42
- __decorate([
43
- Property({ type: 'string', length: 200 }),
44
- __metadata("design:type", String)
45
- ], InvoiceTemplate.prototype, "name", void 0);
46
- __decorate([
47
- Property({ type: 'uuid', nullable: true }),
48
- Index(),
49
- __metadata("design:type", Object)
50
- ], InvoiceTemplate.prototype, "salesChannelId", void 0);
51
- __decorate([
52
- Property({ type: 'json' }),
53
- __metadata("design:type", Object)
54
- ], InvoiceTemplate.prototype, "content", void 0);
55
- __decorate([
56
- Property({ type: 'json' }),
57
- __metadata("design:type", Array)
58
- ], InvoiceTemplate.prototype, "languages", void 0);
59
- __decorate([
60
- Property({ type: 'boolean' }),
61
- __metadata("design:type", Boolean)
62
- ], InvoiceTemplate.prototype, "active", void 0);
63
- __decorate([
64
- Property({ type: 'boolean' }),
65
- __metadata("design:type", Boolean)
66
- ], InvoiceTemplate.prototype, "isSystem", void 0);
67
- __decorate([
68
- Property({ type: 'integer' }),
69
- __metadata("design:type", Number)
70
- ], InvoiceTemplate.prototype, "version", void 0);
71
- __decorate([
72
- Property({ type: 'datetime', onCreate: () => new Date() }),
73
- __metadata("design:type", Date)
74
- ], InvoiceTemplate.prototype, "createdAt", void 0);
75
- __decorate([
76
- Property({ type: 'datetime', onUpdate: () => new Date() }),
77
- __metadata("design:type", Date)
78
- ], InvoiceTemplate.prototype, "updatedAt", void 0);
79
- InvoiceTemplate = __decorate([
80
- GlobalEntity(),
81
- Entity({ tableName: 'invoice_templates' })
82
- ], InvoiceTemplate);
83
- export { InvoiceTemplate };
84
- //# sourceMappingURL=invoice-template.entity.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"invoice-template.entity.js","sourceRoot":"","sources":["../../../src/backend/entities/invoice-template.entity.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;;;;GAKG;AAGI,IAAM,eAAe,GAArB,MAAM,eAAe;IAC1B,CAAC,aAAa,CAAC,CAQC;IAGhB,EAAE,GAAW,UAAU,EAAE,CAAC;IAI1B,IAAI,CAAU;IAGd,IAAI,CAAU;IAId,cAAc,CAAiB;IAG/B,OAAO,GAA4B,EAAE,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAGxE,SAAS,GAAa,EAAE,CAAC;IAGzB,MAAM,GAAY,IAAI,CAAC;IAGvB,QAAQ,GAAY,KAAK,CAAC;IAG1B,OAAO,GAAW,CAAC,CAAC;IAGpB,SAAS,GAAS,IAAI,IAAI,EAAE,CAAC;IAG7B,SAAS,GAAS,IAAI,IAAI,EAAE,CAAC;CAC9B,CAAA;AAjCC;IADC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;2CACH;AAI1B;IAFC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IACzC,KAAK,EAAE;;6CACM;AAGd;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;6CAC5B;AAId;IAFC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC1C,KAAK,EAAE;;uDACuB;AAG/B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;gDAC6C;AAGxE;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;;kDACF;AAGzB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;+CACP;AAGvB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;iDACJ;AAG1B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;;gDACV;AAGpB;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;8BAChD,IAAI;kDAAc;AAG7B;IADC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;8BAChD,IAAI;kDAAc;AA5ClB,eAAe;IAF3B,YAAY,EAAE;IACd,MAAM,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;GAC9B,eAAe,CA6C3B"}