@open-mercato/core 0.6.7-develop.6785.1.1dd7cfac55 → 0.6.7-develop.6795.1.8a3f27921c

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 (196) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/generated/entities.ids.generated.js +1 -0
  3. package/dist/generated/entities.ids.generated.js.map +2 -2
  4. package/dist/modules/auth/backend/settings/page.js +14 -9
  5. package/dist/modules/auth/backend/settings/page.js.map +2 -2
  6. package/dist/modules/customers/cli.js +17 -7
  7. package/dist/modules/customers/cli.js.map +2 -2
  8. package/dist/modules/customers/components/detail/ScheduleActivityDialog.js +229 -216
  9. package/dist/modules/customers/components/detail/ScheduleActivityDialog.js.map +2 -2
  10. package/dist/modules/customers/search.js +50 -29
  11. package/dist/modules/customers/search.js.map +2 -2
  12. package/dist/modules/data_sync/api/mappings/[id]/route.js +22 -9
  13. package/dist/modules/data_sync/api/mappings/[id]/route.js.map +2 -2
  14. package/dist/modules/data_sync/api/mappings/route.js +13 -4
  15. package/dist/modules/data_sync/api/mappings/route.js.map +2 -2
  16. package/dist/modules/data_sync/api/options.js +7 -2
  17. package/dist/modules/data_sync/api/options.js.map +2 -2
  18. package/dist/modules/data_sync/api/run.js +7 -2
  19. package/dist/modules/data_sync/api/run.js.map +2 -2
  20. package/dist/modules/data_sync/api/runs/[id]/cancel.js +8 -3
  21. package/dist/modules/data_sync/api/runs/[id]/cancel.js.map +2 -2
  22. package/dist/modules/data_sync/api/runs/[id]/retry.js +7 -2
  23. package/dist/modules/data_sync/api/runs/[id]/retry.js.map +2 -2
  24. package/dist/modules/data_sync/api/runs/[id]/route.js +8 -3
  25. package/dist/modules/data_sync/api/runs/[id]/route.js.map +2 -2
  26. package/dist/modules/data_sync/api/runs.js +7 -2
  27. package/dist/modules/data_sync/api/runs.js.map +2 -2
  28. package/dist/modules/data_sync/api/schedules/[id]/route.js +19 -6
  29. package/dist/modules/data_sync/api/schedules/[id]/route.js.map +2 -2
  30. package/dist/modules/data_sync/api/schedules/route.js +13 -4
  31. package/dist/modules/data_sync/api/schedules/route.js.map +2 -2
  32. package/dist/modules/data_sync/api/validate.js +9 -4
  33. package/dist/modules/data_sync/api/validate.js.map +2 -2
  34. package/dist/modules/design_system/acl.js +9 -0
  35. package/dist/modules/design_system/acl.js.map +7 -0
  36. package/dist/modules/design_system/backend/design-system/page.js +11 -0
  37. package/dist/modules/design_system/backend/design-system/page.js.map +7 -0
  38. package/dist/modules/design_system/backend/design-system/page.meta.js +15 -0
  39. package/dist/modules/design_system/backend/design-system/page.meta.js.map +7 -0
  40. package/dist/modules/design_system/gallery/components/CodeSnippet.js +52 -0
  41. package/dist/modules/design_system/gallery/components/CodeSnippet.js.map +7 -0
  42. package/dist/modules/design_system/gallery/components/EntryCard.js +63 -0
  43. package/dist/modules/design_system/gallery/components/EntryCard.js.map +7 -0
  44. package/dist/modules/design_system/gallery/components/GalleryShell.js +163 -0
  45. package/dist/modules/design_system/gallery/components/GalleryShell.js.map +7 -0
  46. package/dist/modules/design_system/gallery/components/VariantPreview.js +9 -0
  47. package/dist/modules/design_system/gallery/components/VariantPreview.js.map +7 -0
  48. package/dist/modules/design_system/gallery/entries/banners.js +186 -0
  49. package/dist/modules/design_system/gallery/entries/banners.js.map +7 -0
  50. package/dist/modules/design_system/gallery/entries/buttons.js +361 -0
  51. package/dist/modules/design_system/gallery/entries/buttons.js.map +7 -0
  52. package/dist/modules/design_system/gallery/entries/charts.js +457 -0
  53. package/dist/modules/design_system/gallery/entries/charts.js.map +7 -0
  54. package/dist/modules/design_system/gallery/entries/dates.js +306 -0
  55. package/dist/modules/design_system/gallery/entries/dates.js.map +7 -0
  56. package/dist/modules/design_system/gallery/entries/detail.js +358 -0
  57. package/dist/modules/design_system/gallery/entries/detail.js.map +7 -0
  58. package/dist/modules/design_system/gallery/entries/display.js +785 -0
  59. package/dist/modules/design_system/gallery/entries/display.js.map +7 -0
  60. package/dist/modules/design_system/gallery/entries/feedback.js +658 -0
  61. package/dist/modules/design_system/gallery/entries/feedback.js.map +7 -0
  62. package/dist/modules/design_system/gallery/entries/filters.js +505 -0
  63. package/dist/modules/design_system/gallery/entries/filters.js.map +7 -0
  64. package/dist/modules/design_system/gallery/entries/foundations.js +453 -0
  65. package/dist/modules/design_system/gallery/entries/foundations.js.map +7 -0
  66. package/dist/modules/design_system/gallery/entries/icons.js +140 -0
  67. package/dist/modules/design_system/gallery/entries/icons.js.map +7 -0
  68. package/dist/modules/design_system/gallery/entries/inputs.js +1217 -0
  69. package/dist/modules/design_system/gallery/entries/inputs.js.map +7 -0
  70. package/dist/modules/design_system/gallery/entries/messages.js +334 -0
  71. package/dist/modules/design_system/gallery/entries/messages.js.map +7 -0
  72. package/dist/modules/design_system/gallery/entries/navigation.js +475 -0
  73. package/dist/modules/design_system/gallery/entries/navigation.js.map +7 -0
  74. package/dist/modules/design_system/gallery/entries/notifications.js +257 -0
  75. package/dist/modules/design_system/gallery/entries/notifications.js.map +7 -0
  76. package/dist/modules/design_system/gallery/entries/overlays.js +576 -0
  77. package/dist/modules/design_system/gallery/entries/overlays.js.map +7 -0
  78. package/dist/modules/design_system/gallery/entries/scaffolding.js +378 -0
  79. package/dist/modules/design_system/gallery/entries/scaffolding.js.map +7 -0
  80. package/dist/modules/design_system/gallery/entries/schedule.js +297 -0
  81. package/dist/modules/design_system/gallery/entries/schedule.js.map +7 -0
  82. package/dist/modules/design_system/gallery/registry.js +139 -0
  83. package/dist/modules/design_system/gallery/registry.js.map +7 -0
  84. package/dist/modules/design_system/gallery/types.js +1 -0
  85. package/dist/modules/design_system/gallery/types.js.map +7 -0
  86. package/dist/modules/design_system/index.js +9 -0
  87. package/dist/modules/design_system/index.js.map +7 -0
  88. package/dist/modules/design_system/setup.js +14 -0
  89. package/dist/modules/design_system/setup.js.map +7 -0
  90. package/dist/modules/inbox_ops/search.js +15 -4
  91. package/dist/modules/inbox_ops/search.js.map +2 -2
  92. package/dist/modules/integrations/api/[id]/credentials/route.js +11 -5
  93. package/dist/modules/integrations/api/[id]/credentials/route.js.map +2 -2
  94. package/dist/modules/integrations/api/[id]/health/route.js +6 -3
  95. package/dist/modules/integrations/api/[id]/health/route.js.map +2 -2
  96. package/dist/modules/integrations/api/[id]/route.js +6 -3
  97. package/dist/modules/integrations/api/[id]/route.js.map +2 -2
  98. package/dist/modules/integrations/api/[id]/state/route.js +6 -3
  99. package/dist/modules/integrations/api/[id]/state/route.js.map +2 -2
  100. package/dist/modules/integrations/api/[id]/version/route.js +6 -3
  101. package/dist/modules/integrations/api/[id]/version/route.js.map +2 -2
  102. package/dist/modules/integrations/api/logs/route.js +6 -3
  103. package/dist/modules/integrations/api/logs/route.js.map +2 -2
  104. package/dist/modules/integrations/api/route.js +6 -3
  105. package/dist/modules/integrations/api/route.js.map +2 -2
  106. package/dist/modules/integrations/api/umes-read.js +2 -2
  107. package/dist/modules/integrations/api/umes-read.js.map +2 -2
  108. package/dist/modules/integrations/lib/organization-scope.js +2 -9
  109. package/dist/modules/integrations/lib/organization-scope.js.map +2 -2
  110. package/dist/modules/messages/search.js +10 -5
  111. package/dist/modules/messages/search.js.map +2 -2
  112. package/dist/modules/query_index/data/entities.js +2 -1
  113. package/dist/modules/query_index/data/entities.js.map +2 -2
  114. package/dist/modules/query_index/lib/engine.js +32 -50
  115. package/dist/modules/query_index/lib/engine.js.map +2 -2
  116. package/dist/modules/query_index/migrations/Migration20260731105052_query_index.js +17 -0
  117. package/dist/modules/query_index/migrations/Migration20260731105052_query_index.js.map +7 -0
  118. package/generated/entities.ids.generated.ts +1 -0
  119. package/package.json +16 -16
  120. package/src/modules/auth/backend/settings/page.tsx +17 -8
  121. package/src/modules/customers/cli.ts +17 -7
  122. package/src/modules/customers/components/detail/ScheduleActivityDialog.tsx +24 -13
  123. package/src/modules/customers/i18n/de.json +17 -0
  124. package/src/modules/customers/i18n/en.json +17 -0
  125. package/src/modules/customers/i18n/es.json +17 -0
  126. package/src/modules/customers/i18n/pl.json +17 -0
  127. package/src/modules/customers/search.ts +59 -27
  128. package/src/modules/data_sync/AGENTS.md +1 -0
  129. package/src/modules/data_sync/api/mappings/[id]/route.ts +22 -9
  130. package/src/modules/data_sync/api/mappings/route.ts +13 -4
  131. package/src/modules/data_sync/api/options.ts +7 -2
  132. package/src/modules/data_sync/api/run.ts +7 -2
  133. package/src/modules/data_sync/api/runs/[id]/cancel.ts +8 -3
  134. package/src/modules/data_sync/api/runs/[id]/retry.ts +7 -2
  135. package/src/modules/data_sync/api/runs/[id]/route.ts +8 -3
  136. package/src/modules/data_sync/api/runs.ts +7 -2
  137. package/src/modules/data_sync/api/schedules/[id]/route.ts +19 -6
  138. package/src/modules/data_sync/api/schedules/route.ts +13 -4
  139. package/src/modules/data_sync/api/validate.ts +9 -4
  140. package/src/modules/design_system/AGENTS.md +34 -0
  141. package/src/modules/design_system/acl.ts +5 -0
  142. package/src/modules/design_system/backend/design-system/page.meta.ts +11 -0
  143. package/src/modules/design_system/backend/design-system/page.tsx +14 -0
  144. package/src/modules/design_system/gallery/components/CodeSnippet.tsx +55 -0
  145. package/src/modules/design_system/gallery/components/EntryCard.tsx +95 -0
  146. package/src/modules/design_system/gallery/components/GalleryShell.tsx +206 -0
  147. package/src/modules/design_system/gallery/components/VariantPreview.tsx +15 -0
  148. package/src/modules/design_system/gallery/entries/banners.tsx +226 -0
  149. package/src/modules/design_system/gallery/entries/buttons.tsx +422 -0
  150. package/src/modules/design_system/gallery/entries/charts.tsx +518 -0
  151. package/src/modules/design_system/gallery/entries/dates.tsx +325 -0
  152. package/src/modules/design_system/gallery/entries/detail.tsx +403 -0
  153. package/src/modules/design_system/gallery/entries/display.tsx +893 -0
  154. package/src/modules/design_system/gallery/entries/feedback.tsx +746 -0
  155. package/src/modules/design_system/gallery/entries/filters.tsx +570 -0
  156. package/src/modules/design_system/gallery/entries/foundations.tsx +529 -0
  157. package/src/modules/design_system/gallery/entries/icons.tsx +168 -0
  158. package/src/modules/design_system/gallery/entries/inputs.tsx +1516 -0
  159. package/src/modules/design_system/gallery/entries/messages.tsx +339 -0
  160. package/src/modules/design_system/gallery/entries/navigation.tsx +573 -0
  161. package/src/modules/design_system/gallery/entries/notifications.tsx +285 -0
  162. package/src/modules/design_system/gallery/entries/overlays.tsx +677 -0
  163. package/src/modules/design_system/gallery/entries/scaffolding.tsx +430 -0
  164. package/src/modules/design_system/gallery/entries/schedule.tsx +307 -0
  165. package/src/modules/design_system/gallery/registry.ts +152 -0
  166. package/src/modules/design_system/gallery/types.ts +32 -0
  167. package/src/modules/design_system/i18n/.hardcoded-allowlist.json +71 -0
  168. package/src/modules/design_system/i18n/de.json +46 -0
  169. package/src/modules/design_system/i18n/en.json +46 -0
  170. package/src/modules/design_system/i18n/es.json +46 -0
  171. package/src/modules/design_system/i18n/pl.json +46 -0
  172. package/src/modules/design_system/index.ts +7 -0
  173. package/src/modules/design_system/setup.ts +12 -0
  174. package/src/modules/inbox_ops/i18n/de.json +3 -0
  175. package/src/modules/inbox_ops/i18n/en.json +3 -0
  176. package/src/modules/inbox_ops/i18n/es.json +3 -0
  177. package/src/modules/inbox_ops/i18n/pl.json +3 -0
  178. package/src/modules/inbox_ops/search.ts +20 -4
  179. package/src/modules/integrations/api/[id]/credentials/route.ts +11 -5
  180. package/src/modules/integrations/api/[id]/health/route.ts +6 -3
  181. package/src/modules/integrations/api/[id]/route.ts +6 -3
  182. package/src/modules/integrations/api/[id]/state/route.ts +6 -3
  183. package/src/modules/integrations/api/[id]/version/route.ts +6 -3
  184. package/src/modules/integrations/api/logs/route.ts +6 -3
  185. package/src/modules/integrations/api/route.ts +6 -3
  186. package/src/modules/integrations/api/umes-read.ts +2 -2
  187. package/src/modules/integrations/lib/organization-scope.ts +5 -25
  188. package/src/modules/messages/i18n/de.json +2 -0
  189. package/src/modules/messages/i18n/en.json +2 -0
  190. package/src/modules/messages/i18n/es.json +2 -0
  191. package/src/modules/messages/i18n/pl.json +2 -0
  192. package/src/modules/messages/search.ts +11 -5
  193. package/src/modules/query_index/data/entities.ts +7 -0
  194. package/src/modules/query_index/lib/engine.ts +40 -63
  195. package/src/modules/query_index/migrations/.snapshot-open-mercato.json +12 -0
  196. package/src/modules/query_index/migrations/Migration20260731105052_query_index.ts +35 -0
@@ -0,0 +1,378 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { Archive, Copy, Download, Lock, Plus, Trash2, UserRound } from "lucide-react";
4
+ import { Badge } from "@open-mercato/ui/primitives/badge";
5
+ import { Button } from "@open-mercato/ui/primitives/button";
6
+ import { Page, PageBody, PageHeader } from "@open-mercato/ui/backend/Page";
7
+ import { CollapsibleSection, SectionHeader } from "@open-mercato/ui/backend/SectionHeader";
8
+ import {
9
+ SectionNav,
10
+ SectionPage
11
+ } from "@open-mercato/ui/backend/section-page";
12
+ import {
13
+ ActionsDropdown,
14
+ FormFooter,
15
+ FormHeader
16
+ } from "@open-mercato/ui/backend/forms";
17
+ const demoSections = [
18
+ {
19
+ id: "account",
20
+ label: "Account",
21
+ items: [
22
+ { id: "profile", label: "Profile", href: "#profile", icon: /* @__PURE__ */ jsx(UserRound, { className: "size-4" }) },
23
+ { id: "security", label: "Security", href: "#security", icon: /* @__PURE__ */ jsx(Lock, { className: "size-4" }) }
24
+ ]
25
+ }
26
+ ];
27
+ function SectionPageMiniDemo() {
28
+ return /* @__PURE__ */ jsx("div", { className: "h-80 w-full overflow-hidden rounded-lg border bg-background", children: /* @__PURE__ */ jsx(SectionPage, { title: "Settings", sections: demoSections, activePath: "#profile", children: /* @__PURE__ */ jsxs("div", { className: "space-y-2", children: [
29
+ /* @__PURE__ */ jsx("h2", { className: "text-sm font-semibold", children: "Profile" }),
30
+ /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: "Section content renders here." })
31
+ ] }) }) });
32
+ }
33
+ function SectionNavDemo() {
34
+ const [collapsed, setCollapsed] = React.useState(false);
35
+ return /* @__PURE__ */ jsx("div", { className: "w-64 rounded-lg border bg-background px-3 py-4", children: /* @__PURE__ */ jsx(
36
+ SectionNav,
37
+ {
38
+ title: "Settings",
39
+ sections: demoSections,
40
+ activePath: "#profile",
41
+ collapsed,
42
+ onToggleCollapse: () => setCollapsed((value) => !value)
43
+ }
44
+ ) });
45
+ }
46
+ const demoActions = [
47
+ { id: "duplicate", label: "Duplicate record", icon: Copy, onSelect: () => {
48
+ } },
49
+ { id: "export", label: "Export as CSV", icon: Download, onSelect: () => {
50
+ } },
51
+ { id: "delete", label: "Delete record", icon: Trash2, onSelect: () => {
52
+ } }
53
+ ];
54
+ const pageEntry = {
55
+ id: "page",
56
+ title: "Page",
57
+ importPath: "@open-mercato/ui/backend/Page",
58
+ variants: [
59
+ {
60
+ id: "basic",
61
+ title: "Page + PageHeader + PageBody",
62
+ render: () => /* @__PURE__ */ jsx("div", { className: "w-full", children: /* @__PURE__ */ jsxs(Page, { children: [
63
+ /* @__PURE__ */ jsx(PageHeader, { title: "Currencies", description: "Exchange rates refresh nightly." }),
64
+ /* @__PURE__ */ jsx(PageBody, { children: /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-dashed p-6 text-sm text-muted-foreground", children: "Page content" }) })
65
+ ] }) }),
66
+ code: `import { Page, PageBody, PageHeader } from '@open-mercato/ui/backend/Page'
67
+
68
+ <Page>
69
+ <PageHeader title={t('currencies.list.title')} description={t('currencies.list.description')} />
70
+ <PageBody>{/* DataTable, sections\u2026 */}</PageBody>
71
+ </Page>`
72
+ },
73
+ {
74
+ id: "with-actions",
75
+ title: "Header actions",
76
+ render: () => /* @__PURE__ */ jsx("div", { className: "w-full", children: /* @__PURE__ */ jsxs(Page, { children: [
77
+ /* @__PURE__ */ jsx(
78
+ PageHeader,
79
+ {
80
+ title: "Currencies",
81
+ description: "Exchange rates refresh nightly.",
82
+ actions: /* @__PURE__ */ jsxs(Fragment, { children: [
83
+ /* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm", children: "Import" }),
84
+ /* @__PURE__ */ jsxs(Button, { size: "sm", children: [
85
+ /* @__PURE__ */ jsx(Plus, { className: "size-4" }),
86
+ " Add currency"
87
+ ] })
88
+ ] })
89
+ }
90
+ ),
91
+ /* @__PURE__ */ jsx(PageBody, { children: /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-dashed p-6 text-sm text-muted-foreground", children: "Page content" }) })
92
+ ] }) }),
93
+ code: `import { Plus } from 'lucide-react'
94
+ import { Page, PageBody, PageHeader } from '@open-mercato/ui/backend/Page'
95
+ import { Button } from '@open-mercato/ui/primitives/button'
96
+
97
+ <Page>
98
+ <PageHeader
99
+ title={t('currencies.list.title')}
100
+ actions={
101
+ <>
102
+ <Button variant="outline" size="sm">Import</Button>
103
+ <Button size="sm"><Plus className="size-4" /> Add currency</Button>
104
+ </>
105
+ }
106
+ />
107
+ <PageBody>{/* \u2026 */}</PageBody>
108
+ </Page>`
109
+ }
110
+ ]
111
+ };
112
+ const sectionHeaderEntry = {
113
+ id: "section-header",
114
+ title: "SectionHeader",
115
+ importPath: "@open-mercato/ui/backend/SectionHeader",
116
+ variants: [
117
+ {
118
+ id: "count-and-action",
119
+ title: "With count and action",
120
+ render: () => /* @__PURE__ */ jsx("div", { className: "w-full max-w-md", children: /* @__PURE__ */ jsx(
121
+ SectionHeader,
122
+ {
123
+ title: "Addresses",
124
+ count: 3,
125
+ action: /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", children: [
126
+ /* @__PURE__ */ jsx(Plus, { className: "size-4" }),
127
+ " Add"
128
+ ] })
129
+ }
130
+ ) }),
131
+ code: `import { Plus } from 'lucide-react'
132
+ import { SectionHeader } from '@open-mercato/ui/backend/SectionHeader'
133
+ import { Button } from '@open-mercato/ui/primitives/button'
134
+
135
+ <SectionHeader
136
+ title={t('customers.people.detail.addresses.title')}
137
+ count={addresses.length}
138
+ action={<Button variant="ghost" size="sm"><Plus className="size-4" /> {t('common.add')}</Button>}
139
+ />`
140
+ },
141
+ {
142
+ id: "collapsible",
143
+ title: "CollapsibleSection",
144
+ render: () => /* @__PURE__ */ jsx("div", { className: "w-full max-w-md", children: /* @__PURE__ */ jsx(CollapsibleSection, { title: "Billing details", count: 2, children: /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-dashed p-4 text-sm text-muted-foreground", children: "Section content" }) }) }),
145
+ code: `import { CollapsibleSection } from '@open-mercato/ui/backend/SectionHeader'
146
+
147
+ <CollapsibleSection title={t('billing.details.title')} count={2}>
148
+ {/* section content */}
149
+ </CollapsibleSection>`
150
+ }
151
+ ]
152
+ };
153
+ const sectionPageEntry = {
154
+ id: "section-page",
155
+ title: "SectionPage",
156
+ importPath: "@open-mercato/ui/backend/section-page",
157
+ variants: [
158
+ {
159
+ id: "miniature",
160
+ title: "Two-item miniature (clipped frame)",
161
+ render: () => /* @__PURE__ */ jsx(SectionPageMiniDemo, {}),
162
+ code: `import { UserRound, Lock } from 'lucide-react'
163
+ import { SectionPage, type SectionNavGroup } from '@open-mercato/ui/backend/section-page'
164
+
165
+ const sections: SectionNavGroup[] = [
166
+ {
167
+ id: 'account',
168
+ label: 'Account',
169
+ items: [
170
+ { id: 'profile', label: 'Profile', href: '/backend/profile', icon: <UserRound className="size-4" /> },
171
+ { id: 'security', label: 'Security', href: '/backend/profile/security', icon: <Lock className="size-4" /> },
172
+ ],
173
+ },
174
+ ]
175
+
176
+ <SectionPage title={t('profile.title')} sections={sections} activePath={pathname}>
177
+ {children}
178
+ </SectionPage>`
179
+ },
180
+ {
181
+ id: "section-nav",
182
+ title: "SectionNav (standalone, controlled collapse)",
183
+ render: () => /* @__PURE__ */ jsx(SectionNavDemo, {}),
184
+ code: `import { SectionNav, type SectionNavGroup } from '@open-mercato/ui/backend/section-page'
185
+
186
+ const [collapsed, setCollapsed] = React.useState(false)
187
+
188
+ <SectionNav
189
+ title={t('profile.title')}
190
+ sections={sections}
191
+ activePath={pathname}
192
+ collapsed={collapsed}
193
+ onToggleCollapse={() => setCollapsed((value) => !value)}
194
+ />`
195
+ }
196
+ ]
197
+ };
198
+ const formHeaderEntry = {
199
+ id: "form-header",
200
+ title: "FormHeader",
201
+ importPath: "@open-mercato/ui/backend/forms",
202
+ variants: [
203
+ {
204
+ id: "edit-mode",
205
+ title: "Edit mode",
206
+ render: () => /* @__PURE__ */ jsx("div", { className: "w-full", children: /* @__PURE__ */ jsx(
207
+ FormHeader,
208
+ {
209
+ backHref: "#form-header",
210
+ backLabel: "Back",
211
+ title: "Edit product",
212
+ actions: {
213
+ cancelHref: "#form-header",
214
+ cancelLabel: "Cancel",
215
+ submit: { label: "Save", pendingLabel: "Saving\u2026" }
216
+ }
217
+ }
218
+ ) }),
219
+ code: `import { FormHeader } from '@open-mercato/ui/backend/forms'
220
+
221
+ <FormHeader
222
+ backHref="/backend/products"
223
+ backLabel={t('ui.navigation.back')}
224
+ title={t('products.edit.title')}
225
+ actions={{
226
+ cancelHref: '/backend/products',
227
+ cancelLabel: t('ui.forms.actions.cancel'),
228
+ submit: { formId: 'product-form', label: t('ui.forms.actions.save'), pendingLabel: t('ui.forms.actions.saving') },
229
+ }}
230
+ />`
231
+ },
232
+ {
233
+ id: "detail-mode",
234
+ title: "Detail mode",
235
+ render: () => /* @__PURE__ */ jsx("div", { className: "w-full", children: /* @__PURE__ */ jsx(
236
+ FormHeader,
237
+ {
238
+ mode: "detail",
239
+ backHref: "#form-header",
240
+ entityTypeLabel: "Company",
241
+ title: "Acme Logistics",
242
+ subtitle: "Created 12 Mar 2026",
243
+ statusBadge: /* @__PURE__ */ jsx(Badge, { variant: "muted", children: "Active" }),
244
+ menuActions: [
245
+ { id: "duplicate", label: "Duplicate", icon: Copy, onSelect: () => {
246
+ } },
247
+ { id: "archive", label: "Archive", icon: Archive, onSelect: () => {
248
+ } }
249
+ ],
250
+ onDelete: () => {
251
+ },
252
+ deleteLabel: "Delete"
253
+ }
254
+ ) }),
255
+ code: `import { Archive, Copy } from 'lucide-react'
256
+ import { FormHeader } from '@open-mercato/ui/backend/forms'
257
+
258
+ <FormHeader
259
+ mode="detail"
260
+ backHref="/backend/customers/companies"
261
+ entityTypeLabel={t('customers.companies.detail.entityType')}
262
+ title={company.name}
263
+ subtitle={t('customers.companies.detail.createdAt', { date: createdAt })}
264
+ statusBadge={<Badge variant="muted">{statusLabel}</Badge>}
265
+ menuActions={[
266
+ { id: 'duplicate', label: t('ui.actions.duplicate'), icon: Copy, onSelect: duplicate },
267
+ { id: 'archive', label: t('ui.actions.archive'), icon: Archive, onSelect: archive },
268
+ ]}
269
+ onDelete={confirmDelete}
270
+ deleteLabel={t('ui.forms.actions.delete')}
271
+ />`
272
+ }
273
+ ]
274
+ };
275
+ const formFooterEntry = {
276
+ id: "form-footer",
277
+ title: "FormFooter",
278
+ importPath: "@open-mercato/ui/backend/forms",
279
+ variants: [
280
+ {
281
+ id: "default",
282
+ title: "default",
283
+ render: () => /* @__PURE__ */ jsx("div", { className: "w-full", children: /* @__PURE__ */ jsx(
284
+ FormFooter,
285
+ {
286
+ actions: {
287
+ cancelHref: "#form-footer",
288
+ cancelLabel: "Cancel",
289
+ submit: { label: "Save changes", pendingLabel: "Saving\u2026" }
290
+ }
291
+ }
292
+ ) }),
293
+ code: `import { FormFooter } from '@open-mercato/ui/backend/forms'
294
+
295
+ <FormFooter
296
+ actions={{
297
+ cancelHref: '/backend/products',
298
+ cancelLabel: t('ui.forms.actions.cancel'),
299
+ submit: { formId: 'product-form', label: t('ui.forms.actions.save'), pendingLabel: t('ui.forms.actions.saving') },
300
+ }}
301
+ />`
302
+ },
303
+ {
304
+ id: "embedded-with-delete",
305
+ title: "embedded, with delete",
306
+ render: () => /* @__PURE__ */ jsx("div", { className: "w-full", children: /* @__PURE__ */ jsx(
307
+ FormFooter,
308
+ {
309
+ embedded: true,
310
+ actions: {
311
+ showDelete: true,
312
+ onDelete: () => {
313
+ },
314
+ deleteLabel: "Delete",
315
+ cancelHref: "#form-footer",
316
+ cancelLabel: "Cancel",
317
+ submit: { label: "Save" }
318
+ }
319
+ }
320
+ ) }),
321
+ code: `import { FormFooter } from '@open-mercato/ui/backend/forms'
322
+
323
+ <FormFooter
324
+ embedded
325
+ actions={{
326
+ showDelete: true,
327
+ onDelete: confirmDelete,
328
+ deleteLabel: t('ui.forms.actions.delete'),
329
+ cancelHref: '/backend/products',
330
+ cancelLabel: t('ui.forms.actions.cancel'),
331
+ submit: { label: t('ui.forms.actions.save') },
332
+ }}
333
+ />`
334
+ }
335
+ ]
336
+ };
337
+ const actionsDropdownEntry = {
338
+ id: "actions-dropdown",
339
+ title: "ActionsDropdown",
340
+ importPath: "@open-mercato/ui/backend/forms",
341
+ variants: [
342
+ {
343
+ id: "label-trigger",
344
+ title: "Label trigger",
345
+ render: () => /* @__PURE__ */ jsx(ActionsDropdown, { items: demoActions }),
346
+ code: `import { Copy, Download, Trash2 } from 'lucide-react'
347
+ import { ActionsDropdown, type ActionItem } from '@open-mercato/ui/backend/forms'
348
+
349
+ const items: ActionItem[] = [
350
+ { id: 'duplicate', label: t('ui.actions.duplicate'), icon: Copy, onSelect: duplicate },
351
+ { id: 'export', label: t('ui.actions.export'), icon: Download, onSelect: exportCsv },
352
+ { id: 'delete', label: t('ui.actions.delete'), icon: Trash2, onSelect: confirmDelete },
353
+ ]
354
+
355
+ <ActionsDropdown items={items} />`
356
+ },
357
+ {
358
+ id: "icon-trigger",
359
+ title: "Icon trigger",
360
+ render: () => /* @__PURE__ */ jsx(ActionsDropdown, { items: demoActions, triggerMode: "icon", ariaLabel: "More actions" }),
361
+ code: `import { ActionsDropdown } from '@open-mercato/ui/backend/forms'
362
+
363
+ <ActionsDropdown items={items} triggerMode="icon" ariaLabel={t('ui.actions.more')} />`
364
+ }
365
+ ]
366
+ };
367
+ const entries = [
368
+ pageEntry,
369
+ sectionHeaderEntry,
370
+ sectionPageEntry,
371
+ formHeaderEntry,
372
+ formFooterEntry,
373
+ actionsDropdownEntry
374
+ ];
375
+ export {
376
+ entries
377
+ };
378
+ //# sourceMappingURL=scaffolding.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/modules/design_system/gallery/entries/scaffolding.tsx"],
4
+ "sourcesContent": ["import * as React from 'react'\nimport { Archive, Copy, Download, Lock, Plus, Trash2, UserRound } from 'lucide-react'\nimport { Badge } from '@open-mercato/ui/primitives/badge'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Page, PageBody, PageHeader } from '@open-mercato/ui/backend/Page'\nimport { CollapsibleSection, SectionHeader } from '@open-mercato/ui/backend/SectionHeader'\nimport {\n SectionNav,\n SectionPage,\n type SectionNavGroup,\n} from '@open-mercato/ui/backend/section-page'\nimport {\n ActionsDropdown,\n FormFooter,\n FormHeader,\n type ActionItem,\n} from '@open-mercato/ui/backend/forms'\nimport type { GalleryEntry } from '../types'\n\n// Component titles and variant names are proper nouns from the codebase and\n// are deliberately not translated. `code` MUST contain the entry's importPath\n// (enforced by the registry-integrity test) and is always reviewed alongside\n// its sibling `render`.\n\n// The demos use `#`-anchors as hrefs so clicking inside the gallery never\n// navigates away, and every callback is a no-op.\n\nconst demoSections: SectionNavGroup[] = [\n {\n id: 'account',\n label: 'Account',\n items: [\n { id: 'profile', label: 'Profile', href: '#profile', icon: <UserRound className=\"size-4\" /> },\n { id: 'security', label: 'Security', href: '#security', icon: <Lock className=\"size-4\" /> },\n ],\n },\n]\n\n// SectionPage stretches to the viewport by design \u2014 the miniature demo clips\n// it inside a fixed-height frame so the two-item nav plus content stay small.\nfunction SectionPageMiniDemo() {\n return (\n <div className=\"h-80 w-full overflow-hidden rounded-lg border bg-background\">\n <SectionPage title=\"Settings\" sections={demoSections} activePath=\"#profile\">\n <div className=\"space-y-2\">\n <h2 className=\"text-sm font-semibold\">Profile</h2>\n <p className=\"text-sm text-muted-foreground\">Section content renders here.</p>\n </div>\n </SectionPage>\n </div>\n )\n}\n\n// SectionNav is controlled \u2014 the demo owns the collapsed state.\nfunction SectionNavDemo() {\n const [collapsed, setCollapsed] = React.useState(false)\n return (\n <div className=\"w-64 rounded-lg border bg-background px-3 py-4\">\n <SectionNav\n title=\"Settings\"\n sections={demoSections}\n activePath=\"#profile\"\n collapsed={collapsed}\n onToggleCollapse={() => setCollapsed((value) => !value)}\n />\n </div>\n )\n}\n\nconst demoActions: ActionItem[] = [\n { id: 'duplicate', label: 'Duplicate record', icon: Copy, onSelect: () => {} },\n { id: 'export', label: 'Export as CSV', icon: Download, onSelect: () => {} },\n { id: 'delete', label: 'Delete record', icon: Trash2, onSelect: () => {} },\n]\n\nconst pageEntry: GalleryEntry = {\n id: 'page',\n title: 'Page',\n importPath: '@open-mercato/ui/backend/Page',\n variants: [\n {\n id: 'basic',\n title: 'Page + PageHeader + PageBody',\n render: () => (\n <div className=\"w-full\">\n <Page>\n <PageHeader title=\"Currencies\" description=\"Exchange rates refresh nightly.\" />\n <PageBody>\n <div className=\"rounded-lg border border-dashed p-6 text-sm text-muted-foreground\">\n Page content\n </div>\n </PageBody>\n </Page>\n </div>\n ),\n code: `import { Page, PageBody, PageHeader } from '@open-mercato/ui/backend/Page'\n\n<Page>\n <PageHeader title={t('currencies.list.title')} description={t('currencies.list.description')} />\n <PageBody>{/* DataTable, sections\u2026 */}</PageBody>\n</Page>`,\n },\n {\n id: 'with-actions',\n title: 'Header actions',\n render: () => (\n <div className=\"w-full\">\n <Page>\n <PageHeader\n title=\"Currencies\"\n description=\"Exchange rates refresh nightly.\"\n actions={\n <>\n <Button variant=\"outline\" size=\"sm\">\n Import\n </Button>\n <Button size=\"sm\">\n <Plus className=\"size-4\" /> Add currency\n </Button>\n </>\n }\n />\n <PageBody>\n <div className=\"rounded-lg border border-dashed p-6 text-sm text-muted-foreground\">\n Page content\n </div>\n </PageBody>\n </Page>\n </div>\n ),\n code: `import { Plus } from 'lucide-react'\nimport { Page, PageBody, PageHeader } from '@open-mercato/ui/backend/Page'\nimport { Button } from '@open-mercato/ui/primitives/button'\n\n<Page>\n <PageHeader\n title={t('currencies.list.title')}\n actions={\n <>\n <Button variant=\"outline\" size=\"sm\">Import</Button>\n <Button size=\"sm\"><Plus className=\"size-4\" /> Add currency</Button>\n </>\n }\n />\n <PageBody>{/* \u2026 */}</PageBody>\n</Page>`,\n },\n ],\n}\n\nconst sectionHeaderEntry: GalleryEntry = {\n id: 'section-header',\n title: 'SectionHeader',\n importPath: '@open-mercato/ui/backend/SectionHeader',\n variants: [\n {\n id: 'count-and-action',\n title: 'With count and action',\n render: () => (\n <div className=\"w-full max-w-md\">\n <SectionHeader\n title=\"Addresses\"\n count={3}\n action={\n <Button variant=\"ghost\" size=\"sm\">\n <Plus className=\"size-4\" /> Add\n </Button>\n }\n />\n </div>\n ),\n code: `import { Plus } from 'lucide-react'\nimport { SectionHeader } from '@open-mercato/ui/backend/SectionHeader'\nimport { Button } from '@open-mercato/ui/primitives/button'\n\n<SectionHeader\n title={t('customers.people.detail.addresses.title')}\n count={addresses.length}\n action={<Button variant=\"ghost\" size=\"sm\"><Plus className=\"size-4\" /> {t('common.add')}</Button>}\n/>`,\n },\n {\n id: 'collapsible',\n title: 'CollapsibleSection',\n render: () => (\n <div className=\"w-full max-w-md\">\n <CollapsibleSection title=\"Billing details\" count={2}>\n <div className=\"rounded-lg border border-dashed p-4 text-sm text-muted-foreground\">\n Section content\n </div>\n </CollapsibleSection>\n </div>\n ),\n code: `import { CollapsibleSection } from '@open-mercato/ui/backend/SectionHeader'\n\n<CollapsibleSection title={t('billing.details.title')} count={2}>\n {/* section content */}\n</CollapsibleSection>`,\n },\n ],\n}\n\nconst sectionPageEntry: GalleryEntry = {\n id: 'section-page',\n title: 'SectionPage',\n importPath: '@open-mercato/ui/backend/section-page',\n variants: [\n {\n id: 'miniature',\n title: 'Two-item miniature (clipped frame)',\n render: () => <SectionPageMiniDemo />,\n code: `import { UserRound, Lock } from 'lucide-react'\nimport { SectionPage, type SectionNavGroup } from '@open-mercato/ui/backend/section-page'\n\nconst sections: SectionNavGroup[] = [\n {\n id: 'account',\n label: 'Account',\n items: [\n { id: 'profile', label: 'Profile', href: '/backend/profile', icon: <UserRound className=\"size-4\" /> },\n { id: 'security', label: 'Security', href: '/backend/profile/security', icon: <Lock className=\"size-4\" /> },\n ],\n },\n]\n\n<SectionPage title={t('profile.title')} sections={sections} activePath={pathname}>\n {children}\n</SectionPage>`,\n },\n {\n id: 'section-nav',\n title: 'SectionNav (standalone, controlled collapse)',\n render: () => <SectionNavDemo />,\n code: `import { SectionNav, type SectionNavGroup } from '@open-mercato/ui/backend/section-page'\n\nconst [collapsed, setCollapsed] = React.useState(false)\n\n<SectionNav\n title={t('profile.title')}\n sections={sections}\n activePath={pathname}\n collapsed={collapsed}\n onToggleCollapse={() => setCollapsed((value) => !value)}\n/>`,\n },\n ],\n}\n\nconst formHeaderEntry: GalleryEntry = {\n id: 'form-header',\n title: 'FormHeader',\n importPath: '@open-mercato/ui/backend/forms',\n variants: [\n {\n id: 'edit-mode',\n title: 'Edit mode',\n render: () => (\n <div className=\"w-full\">\n <FormHeader\n backHref=\"#form-header\"\n backLabel=\"Back\"\n title=\"Edit product\"\n actions={{\n cancelHref: '#form-header',\n cancelLabel: 'Cancel',\n submit: { label: 'Save', pendingLabel: 'Saving\u2026' },\n }}\n />\n </div>\n ),\n code: `import { FormHeader } from '@open-mercato/ui/backend/forms'\n\n<FormHeader\n backHref=\"/backend/products\"\n backLabel={t('ui.navigation.back')}\n title={t('products.edit.title')}\n actions={{\n cancelHref: '/backend/products',\n cancelLabel: t('ui.forms.actions.cancel'),\n submit: { formId: 'product-form', label: t('ui.forms.actions.save'), pendingLabel: t('ui.forms.actions.saving') },\n }}\n/>`,\n },\n {\n id: 'detail-mode',\n title: 'Detail mode',\n render: () => (\n <div className=\"w-full\">\n <FormHeader\n mode=\"detail\"\n backHref=\"#form-header\"\n entityTypeLabel=\"Company\"\n title=\"Acme Logistics\"\n subtitle=\"Created 12 Mar 2026\"\n statusBadge={<Badge variant=\"muted\">Active</Badge>}\n menuActions={[\n { id: 'duplicate', label: 'Duplicate', icon: Copy, onSelect: () => {} },\n { id: 'archive', label: 'Archive', icon: Archive, onSelect: () => {} },\n ]}\n onDelete={() => {}}\n deleteLabel=\"Delete\"\n />\n </div>\n ),\n code: `import { Archive, Copy } from 'lucide-react'\nimport { FormHeader } from '@open-mercato/ui/backend/forms'\n\n<FormHeader\n mode=\"detail\"\n backHref=\"/backend/customers/companies\"\n entityTypeLabel={t('customers.companies.detail.entityType')}\n title={company.name}\n subtitle={t('customers.companies.detail.createdAt', { date: createdAt })}\n statusBadge={<Badge variant=\"muted\">{statusLabel}</Badge>}\n menuActions={[\n { id: 'duplicate', label: t('ui.actions.duplicate'), icon: Copy, onSelect: duplicate },\n { id: 'archive', label: t('ui.actions.archive'), icon: Archive, onSelect: archive },\n ]}\n onDelete={confirmDelete}\n deleteLabel={t('ui.forms.actions.delete')}\n/>`,\n },\n ],\n}\n\nconst formFooterEntry: GalleryEntry = {\n id: 'form-footer',\n title: 'FormFooter',\n importPath: '@open-mercato/ui/backend/forms',\n variants: [\n {\n id: 'default',\n title: 'default',\n render: () => (\n <div className=\"w-full\">\n <FormFooter\n actions={{\n cancelHref: '#form-footer',\n cancelLabel: 'Cancel',\n submit: { label: 'Save changes', pendingLabel: 'Saving\u2026' },\n }}\n />\n </div>\n ),\n code: `import { FormFooter } from '@open-mercato/ui/backend/forms'\n\n<FormFooter\n actions={{\n cancelHref: '/backend/products',\n cancelLabel: t('ui.forms.actions.cancel'),\n submit: { formId: 'product-form', label: t('ui.forms.actions.save'), pendingLabel: t('ui.forms.actions.saving') },\n }}\n/>`,\n },\n {\n id: 'embedded-with-delete',\n title: 'embedded, with delete',\n render: () => (\n <div className=\"w-full\">\n <FormFooter\n embedded\n actions={{\n showDelete: true,\n onDelete: () => {},\n deleteLabel: 'Delete',\n cancelHref: '#form-footer',\n cancelLabel: 'Cancel',\n submit: { label: 'Save' },\n }}\n />\n </div>\n ),\n code: `import { FormFooter } from '@open-mercato/ui/backend/forms'\n\n<FormFooter\n embedded\n actions={{\n showDelete: true,\n onDelete: confirmDelete,\n deleteLabel: t('ui.forms.actions.delete'),\n cancelHref: '/backend/products',\n cancelLabel: t('ui.forms.actions.cancel'),\n submit: { label: t('ui.forms.actions.save') },\n }}\n/>`,\n },\n ],\n}\n\nconst actionsDropdownEntry: GalleryEntry = {\n id: 'actions-dropdown',\n title: 'ActionsDropdown',\n importPath: '@open-mercato/ui/backend/forms',\n variants: [\n {\n id: 'label-trigger',\n title: 'Label trigger',\n render: () => <ActionsDropdown items={demoActions} />,\n code: `import { Copy, Download, Trash2 } from 'lucide-react'\nimport { ActionsDropdown, type ActionItem } from '@open-mercato/ui/backend/forms'\n\nconst items: ActionItem[] = [\n { id: 'duplicate', label: t('ui.actions.duplicate'), icon: Copy, onSelect: duplicate },\n { id: 'export', label: t('ui.actions.export'), icon: Download, onSelect: exportCsv },\n { id: 'delete', label: t('ui.actions.delete'), icon: Trash2, onSelect: confirmDelete },\n]\n\n<ActionsDropdown items={items} />`,\n },\n {\n id: 'icon-trigger',\n title: 'Icon trigger',\n render: () => (\n <ActionsDropdown items={demoActions} triggerMode=\"icon\" ariaLabel=\"More actions\" />\n ),\n code: `import { ActionsDropdown } from '@open-mercato/ui/backend/forms'\n\n<ActionsDropdown items={items} triggerMode=\"icon\" ariaLabel={t('ui.actions.more')} />`,\n },\n ],\n}\n\nexport const entries: GalleryEntry[] = [\n pageEntry,\n sectionHeaderEntry,\n sectionPageEntry,\n formHeaderEntry,\n formFooterEntry,\n actionsDropdownEntry,\n]\n"],
5
+ "mappings": "AAgCiE,SAgFjD,UAhFiD,KAYzD,YAZyD;AAhCjE,YAAY,WAAW;AACvB,SAAS,SAAS,MAAM,UAAU,MAAM,MAAM,QAAQ,iBAAiB;AACvE,SAAS,aAAa;AACtB,SAAS,cAAc;AACvB,SAAS,MAAM,UAAU,kBAAkB;AAC3C,SAAS,oBAAoB,qBAAqB;AAClD;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAWP,MAAM,eAAkC;AAAA,EACtC;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,OAAO;AAAA,MACL,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,YAAY,MAAM,oBAAC,aAAU,WAAU,UAAS,EAAG;AAAA,MAC5F,EAAE,IAAI,YAAY,OAAO,YAAY,MAAM,aAAa,MAAM,oBAAC,QAAK,WAAU,UAAS,EAAG;AAAA,IAC5F;AAAA,EACF;AACF;AAIA,SAAS,sBAAsB;AAC7B,SACE,oBAAC,SAAI,WAAU,+DACb,8BAAC,eAAY,OAAM,YAAW,UAAU,cAAc,YAAW,YAC/D,+BAAC,SAAI,WAAU,aACb;AAAA,wBAAC,QAAG,WAAU,yBAAwB,qBAAO;AAAA,IAC7C,oBAAC,OAAE,WAAU,iCAAgC,2CAA6B;AAAA,KAC5E,GACF,GACF;AAEJ;AAGA,SAAS,iBAAiB;AACxB,QAAM,CAAC,WAAW,YAAY,IAAI,MAAM,SAAS,KAAK;AACtD,SACE,oBAAC,SAAI,WAAU,kDACb;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,UAAU;AAAA,MACV,YAAW;AAAA,MACX;AAAA,MACA,kBAAkB,MAAM,aAAa,CAAC,UAAU,CAAC,KAAK;AAAA;AAAA,EACxD,GACF;AAEJ;AAEA,MAAM,cAA4B;AAAA,EAChC,EAAE,IAAI,aAAa,OAAO,oBAAoB,MAAM,MAAM,UAAU,MAAM;AAAA,EAAC,EAAE;AAAA,EAC7E,EAAE,IAAI,UAAU,OAAO,iBAAiB,MAAM,UAAU,UAAU,MAAM;AAAA,EAAC,EAAE;AAAA,EAC3E,EAAE,IAAI,UAAU,OAAO,iBAAiB,MAAM,QAAQ,UAAU,MAAM;AAAA,EAAC,EAAE;AAC3E;AAEA,MAAM,YAA0B;AAAA,EAC9B,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,UAAU;AAAA,IACR;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,QAAQ,MACN,oBAAC,SAAI,WAAU,UACb,+BAAC,QACC;AAAA,4BAAC,cAAW,OAAM,cAAa,aAAY,mCAAkC;AAAA,QAC7E,oBAAC,YACC,8BAAC,SAAI,WAAU,qEAAoE,0BAEnF,GACF;AAAA,SACF,GACF;AAAA,MAEF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMR;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,QAAQ,MACN,oBAAC,SAAI,WAAU,UACb,+BAAC,QACC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,OAAM;AAAA,YACN,aAAY;AAAA,YACZ,SACE,iCACE;AAAA,kCAAC,UAAO,SAAQ,WAAU,MAAK,MAAK,oBAEpC;AAAA,cACA,qBAAC,UAAO,MAAK,MACX;AAAA,oCAAC,QAAK,WAAU,UAAS;AAAA,gBAAE;AAAA,iBAC7B;AAAA,eACF;AAAA;AAAA,QAEJ;AAAA,QACA,oBAAC,YACC,8BAAC,SAAI,WAAU,qEAAoE,0BAEnF,GACF;AAAA,SACF,GACF;AAAA,MAEF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAgBR;AAAA,EACF;AACF;AAEA,MAAM,qBAAmC;AAAA,EACvC,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,UAAU;AAAA,IACR;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,QAAQ,MACN,oBAAC,SAAI,WAAU,mBACb;AAAA,QAAC;AAAA;AAAA,UACC,OAAM;AAAA,UACN,OAAO;AAAA,UACP,QACE,qBAAC,UAAO,SAAQ,SAAQ,MAAK,MAC3B;AAAA,gCAAC,QAAK,WAAU,UAAS;AAAA,YAAE;AAAA,aAC7B;AAAA;AAAA,MAEJ,GACF;AAAA,MAEF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASR;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,QAAQ,MACN,oBAAC,SAAI,WAAU,mBACb,8BAAC,sBAAmB,OAAM,mBAAkB,OAAO,GACjD,8BAAC,SAAI,WAAU,qEAAoE,6BAEnF,GACF,GACF;AAAA,MAEF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,IAKR;AAAA,EACF;AACF;AAEA,MAAM,mBAAiC;AAAA,EACrC,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,UAAU;AAAA,IACR;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,QAAQ,MAAM,oBAAC,uBAAoB;AAAA,MACnC,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAiBR;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,QAAQ,MAAM,oBAAC,kBAAe;AAAA,MAC9B,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWR;AAAA,EACF;AACF;AAEA,MAAM,kBAAgC;AAAA,EACpC,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,UAAU;AAAA,IACR;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,QAAQ,MACN,oBAAC,SAAI,WAAU,UACb;AAAA,QAAC;AAAA;AAAA,UACC,UAAS;AAAA,UACT,WAAU;AAAA,UACV,OAAM;AAAA,UACN,SAAS;AAAA,YACP,YAAY;AAAA,YACZ,aAAa;AAAA,YACb,QAAQ,EAAE,OAAO,QAAQ,cAAc,eAAU;AAAA,UACnD;AAAA;AAAA,MACF,GACF;AAAA,MAEF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYR;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,QAAQ,MACN,oBAAC,SAAI,WAAU,UACb;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,UAAS;AAAA,UACT,iBAAgB;AAAA,UAChB,OAAM;AAAA,UACN,UAAS;AAAA,UACT,aAAa,oBAAC,SAAM,SAAQ,SAAQ,oBAAM;AAAA,UAC1C,aAAa;AAAA,YACX,EAAE,IAAI,aAAa,OAAO,aAAa,MAAM,MAAM,UAAU,MAAM;AAAA,YAAC,EAAE;AAAA,YACtE,EAAE,IAAI,WAAW,OAAO,WAAW,MAAM,SAAS,UAAU,MAAM;AAAA,YAAC,EAAE;AAAA,UACvE;AAAA,UACA,UAAU,MAAM;AAAA,UAAC;AAAA,UACjB,aAAY;AAAA;AAAA,MACd,GACF;AAAA,MAEF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAiBR;AAAA,EACF;AACF;AAEA,MAAM,kBAAgC;AAAA,EACpC,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,UAAU;AAAA,IACR;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,QAAQ,MACN,oBAAC,SAAI,WAAU,UACb;AAAA,QAAC;AAAA;AAAA,UACC,SAAS;AAAA,YACP,YAAY;AAAA,YACZ,aAAa;AAAA,YACb,QAAQ,EAAE,OAAO,gBAAgB,cAAc,eAAU;AAAA,UAC3D;AAAA;AAAA,MACF,GACF;AAAA,MAEF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASR;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,QAAQ,MACN,oBAAC,SAAI,WAAU,UACb;AAAA,QAAC;AAAA;AAAA,UACC,UAAQ;AAAA,UACR,SAAS;AAAA,YACP,YAAY;AAAA,YACZ,UAAU,MAAM;AAAA,YAAC;AAAA,YACjB,aAAa;AAAA,YACb,YAAY;AAAA,YACZ,aAAa;AAAA,YACb,QAAQ,EAAE,OAAO,OAAO;AAAA,UAC1B;AAAA;AAAA,MACF,GACF;AAAA,MAEF,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAaR;AAAA,EACF;AACF;AAEA,MAAM,uBAAqC;AAAA,EACzC,IAAI;AAAA,EACJ,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,UAAU;AAAA,IACR;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,QAAQ,MAAM,oBAAC,mBAAgB,OAAO,aAAa;AAAA,MACnD,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUR;AAAA,IACA;AAAA,MACE,IAAI;AAAA,MACJ,OAAO;AAAA,MACP,QAAQ,MACN,oBAAC,mBAAgB,OAAO,aAAa,aAAY,QAAO,WAAU,gBAAe;AAAA,MAEnF,MAAM;AAAA;AAAA;AAAA,IAGR;AAAA,EACF;AACF;AAEO,MAAM,UAA0B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
6
+ "names": []
7
+ }