@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,297 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import {
4
+ ScheduleAgenda,
5
+ ScheduleGrid,
6
+ ScheduleToolbar,
7
+ ScheduleView
8
+ } from "@open-mercato/ui/backend/schedule";
9
+ const weekRange = {
10
+ start: new Date(2026, 5, 7),
11
+ end: new Date(2026, 5, 13, 23, 59, 59, 999)
12
+ };
13
+ const monthRange = {
14
+ start: new Date(2026, 5, 1),
15
+ end: new Date(2026, 5, 30, 23, 59, 59, 999)
16
+ };
17
+ const boardRange = {
18
+ start: new Date(2026, 5, 8),
19
+ end: new Date(2026, 5, 10, 23, 59, 59, 999)
20
+ };
21
+ const emptyDayRange = {
22
+ start: new Date(2026, 5, 11),
23
+ end: new Date(2026, 5, 11, 23, 59, 59, 999)
24
+ };
25
+ const agendaRange = {
26
+ start: new Date(2026, 5, 8),
27
+ end: new Date(2026, 5, 9, 23, 59, 59, 999)
28
+ };
29
+ const draftDayRange = {
30
+ start: new Date(2026, 5, 12),
31
+ end: new Date(2026, 5, 12, 23, 59, 59, 999)
32
+ };
33
+ const sampleItems = [
34
+ {
35
+ id: "availability-1",
36
+ kind: "availability",
37
+ title: "Open studio hours",
38
+ startsAt: new Date(2026, 5, 8, 9, 0),
39
+ endsAt: new Date(2026, 5, 8, 12, 0),
40
+ status: "confirmed",
41
+ subjectType: "member",
42
+ subjectId: "member-1"
43
+ },
44
+ {
45
+ id: "event-1",
46
+ kind: "event",
47
+ title: "Fitting \u2014 Anna Nowak",
48
+ startsAt: new Date(2026, 5, 8, 13, 0),
49
+ endsAt: new Date(2026, 5, 8, 14, 0),
50
+ status: "negotiation"
51
+ },
52
+ {
53
+ id: "event-2",
54
+ kind: "event",
55
+ title: "Delivery walkthrough",
56
+ startsAt: new Date(2026, 5, 9, 10, 0),
57
+ endsAt: new Date(2026, 5, 9, 11, 30),
58
+ status: "confirmed"
59
+ },
60
+ {
61
+ id: "exception-1",
62
+ kind: "exception",
63
+ title: "Studio closed",
64
+ startsAt: new Date(2026, 5, 10, 0, 0),
65
+ endsAt: new Date(2026, 5, 10, 23, 59),
66
+ status: "cancelled"
67
+ },
68
+ {
69
+ id: "event-3",
70
+ kind: "event",
71
+ title: "Quarterly review",
72
+ startsAt: new Date(2026, 5, 12, 15, 0),
73
+ endsAt: new Date(2026, 5, 12, 16, 0),
74
+ status: "draft"
75
+ }
76
+ ];
77
+ function initialRangeFor(view) {
78
+ return view === "month" ? monthRange : weekRange;
79
+ }
80
+ function DemoScheduleView({ initialView }) {
81
+ const [view, setView] = React.useState(initialView);
82
+ const [range, setRange] = React.useState(initialRangeFor(initialView));
83
+ const [timezone, setTimezone] = React.useState("Europe/Warsaw");
84
+ return /* @__PURE__ */ jsx(
85
+ ScheduleView,
86
+ {
87
+ items: sampleItems,
88
+ view,
89
+ range,
90
+ timezone,
91
+ onViewChange: setView,
92
+ onRangeChange: setRange,
93
+ onTimezoneChange: setTimezone,
94
+ className: "w-full"
95
+ }
96
+ );
97
+ }
98
+ function DemoScheduleToolbar({ initialView }) {
99
+ const [view, setView] = React.useState(initialView);
100
+ const [range, setRange] = React.useState(initialRangeFor(initialView));
101
+ const [timezone, setTimezone] = React.useState("Europe/Warsaw");
102
+ return /* @__PURE__ */ jsx(
103
+ ScheduleToolbar,
104
+ {
105
+ view,
106
+ range,
107
+ timezone,
108
+ onViewChange: setView,
109
+ onRangeChange: setRange,
110
+ onTimezoneChange: setTimezone,
111
+ className: "w-full"
112
+ }
113
+ );
114
+ }
115
+ const scheduleViewEntry = {
116
+ id: "schedule-view",
117
+ title: "ScheduleView",
118
+ importPath: "@open-mercato/ui/backend/schedule",
119
+ variants: [
120
+ {
121
+ id: "week",
122
+ title: "Week (controlled)",
123
+ render: () => /* @__PURE__ */ jsx(DemoScheduleView, { initialView: "week" }),
124
+ code: `import { ScheduleView, type ScheduleItem, type ScheduleRange, type ScheduleViewMode } from '@open-mercato/ui/backend/schedule'
125
+
126
+ const [view, setView] = React.useState<ScheduleViewMode>('week')
127
+ const [range, setRange] = React.useState<ScheduleRange>({
128
+ start: new Date(2026, 5, 7),
129
+ end: new Date(2026, 5, 13, 23, 59, 59, 999),
130
+ })
131
+
132
+ <ScheduleView
133
+ items={items /* ScheduleItem[] mapped from your domain records */}
134
+ view={view}
135
+ range={range}
136
+ timezone="Europe/Warsaw"
137
+ onViewChange={setView}
138
+ onRangeChange={setRange}
139
+ />`
140
+ },
141
+ {
142
+ id: "month",
143
+ title: "Month (controlled)",
144
+ render: () => /* @__PURE__ */ jsx(DemoScheduleView, { initialView: "month" }),
145
+ code: `import { ScheduleView, type ScheduleRange, type ScheduleViewMode } from '@open-mercato/ui/backend/schedule'
146
+
147
+ const [view, setView] = React.useState<ScheduleViewMode>('month')
148
+ const [range, setRange] = React.useState<ScheduleRange>({
149
+ start: new Date(2026, 5, 1),
150
+ end: new Date(2026, 5, 30, 23, 59, 59, 999),
151
+ })
152
+
153
+ <ScheduleView items={items} view={view} range={range} onViewChange={setView} onRangeChange={setRange} />`
154
+ }
155
+ ]
156
+ };
157
+ const scheduleToolbarEntry = {
158
+ id: "schedule-toolbar",
159
+ title: "ScheduleToolbar",
160
+ importPath: "@open-mercato/ui/backend/schedule",
161
+ variants: [
162
+ {
163
+ id: "week-with-timezone",
164
+ title: "Week range with timezone",
165
+ render: () => /* @__PURE__ */ jsx(DemoScheduleToolbar, { initialView: "week" }),
166
+ code: `import { ScheduleToolbar, type ScheduleRange, type ScheduleViewMode } from '@open-mercato/ui/backend/schedule'
167
+
168
+ const [view, setView] = React.useState<ScheduleViewMode>('week')
169
+ const [range, setRange] = React.useState<ScheduleRange>({
170
+ start: new Date(2026, 5, 7),
171
+ end: new Date(2026, 5, 13, 23, 59, 59, 999),
172
+ })
173
+ const [timezone, setTimezone] = React.useState('Europe/Warsaw')
174
+
175
+ <ScheduleToolbar
176
+ view={view}
177
+ range={range}
178
+ timezone={timezone}
179
+ onViewChange={setView}
180
+ onRangeChange={setRange}
181
+ onTimezoneChange={setTimezone}
182
+ />`
183
+ },
184
+ {
185
+ id: "month-range",
186
+ title: "Month range",
187
+ render: () => /* @__PURE__ */ jsx(DemoScheduleToolbar, { initialView: "month" }),
188
+ code: `import { ScheduleToolbar, type ScheduleRange, type ScheduleViewMode } from '@open-mercato/ui/backend/schedule'
189
+
190
+ const [view, setView] = React.useState<ScheduleViewMode>('month')
191
+ const [range, setRange] = React.useState<ScheduleRange>({
192
+ start: new Date(2026, 5, 1),
193
+ end: new Date(2026, 5, 30, 23, 59, 59, 999),
194
+ })
195
+
196
+ <ScheduleToolbar view={view} range={range} onViewChange={setView} onRangeChange={setRange} />`
197
+ }
198
+ ]
199
+ };
200
+ const scheduleGridEntry = {
201
+ id: "schedule-grid",
202
+ title: "ScheduleGrid",
203
+ importPath: "@open-mercato/ui/backend/schedule",
204
+ variants: [
205
+ {
206
+ id: "three-day-board",
207
+ title: "Three-day board",
208
+ render: () => /* @__PURE__ */ jsx(
209
+ ScheduleGrid,
210
+ {
211
+ items: sampleItems,
212
+ range: boardRange,
213
+ timezone: "Europe/Warsaw",
214
+ onItemClick: () => {
215
+ },
216
+ onSlotClick: () => {
217
+ },
218
+ className: "w-full"
219
+ }
220
+ ),
221
+ code: `import { ScheduleGrid, type ScheduleItem } from '@open-mercato/ui/backend/schedule'
222
+
223
+ <ScheduleGrid
224
+ items={items /* ScheduleItem[] */}
225
+ range={{ start: new Date(2026, 5, 8), end: new Date(2026, 5, 10, 23, 59, 59, 999) }}
226
+ timezone="Europe/Warsaw"
227
+ onItemClick={(item) => openItem(item)}
228
+ onSlotClick={(slot) => createDraft(slot)}
229
+ />`
230
+ },
231
+ {
232
+ id: "read-only-empty",
233
+ title: "Read-only empty day",
234
+ render: () => /* @__PURE__ */ jsx(ScheduleGrid, { items: [], range: emptyDayRange, className: "w-full" }),
235
+ code: `import { ScheduleGrid } from '@open-mercato/ui/backend/schedule'
236
+
237
+ <ScheduleGrid
238
+ items={[]}
239
+ range={{ start: new Date(2026, 5, 11), end: new Date(2026, 5, 11, 23, 59, 59, 999) }}
240
+ />`
241
+ }
242
+ ]
243
+ };
244
+ const scheduleAgendaEntry = {
245
+ id: "schedule-agenda",
246
+ title: "ScheduleAgenda",
247
+ importPath: "@open-mercato/ui/backend/schedule",
248
+ variants: [
249
+ {
250
+ id: "two-days",
251
+ title: "Two days with statuses",
252
+ render: () => /* @__PURE__ */ jsx(
253
+ ScheduleAgenda,
254
+ {
255
+ items: sampleItems,
256
+ range: agendaRange,
257
+ timezone: "Europe/Warsaw",
258
+ onItemClick: () => {
259
+ },
260
+ onSlotClick: () => {
261
+ },
262
+ className: "w-full"
263
+ }
264
+ ),
265
+ code: `import { ScheduleAgenda, type ScheduleItem } from '@open-mercato/ui/backend/schedule'
266
+
267
+ <ScheduleAgenda
268
+ items={items /* ScheduleItem[] */}
269
+ range={{ start: new Date(2026, 5, 8), end: new Date(2026, 5, 9, 23, 59, 59, 999) }}
270
+ timezone="Europe/Warsaw"
271
+ onItemClick={(item) => openItem(item)}
272
+ onSlotClick={(slot) => createDraft(slot)}
273
+ />`
274
+ },
275
+ {
276
+ id: "read-only-day",
277
+ title: "Read-only day (draft item)",
278
+ render: () => /* @__PURE__ */ jsx(ScheduleAgenda, { items: sampleItems, range: draftDayRange, className: "w-full" }),
279
+ code: `import { ScheduleAgenda } from '@open-mercato/ui/backend/schedule'
280
+
281
+ <ScheduleAgenda
282
+ items={items}
283
+ range={{ start: new Date(2026, 5, 12), end: new Date(2026, 5, 12, 23, 59, 59, 999) }}
284
+ />`
285
+ }
286
+ ]
287
+ };
288
+ const entries = [
289
+ scheduleViewEntry,
290
+ scheduleToolbarEntry,
291
+ scheduleGridEntry,
292
+ scheduleAgendaEntry
293
+ ];
294
+ export {
295
+ entries
296
+ };
297
+ //# sourceMappingURL=schedule.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/modules/design_system/gallery/entries/schedule.tsx"],
4
+ "sourcesContent": ["import * as React from 'react'\nimport {\n ScheduleAgenda,\n ScheduleGrid,\n ScheduleToolbar,\n ScheduleView,\n type ScheduleItem,\n type ScheduleRange,\n type ScheduleViewMode,\n} from '@open-mercato/ui/backend/schedule'\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// Fixed sample dates (June 2026) \u2014 previews must not depend on \"today\" so the\n// gallery renders identically on any day.\nconst weekRange: ScheduleRange = {\n start: new Date(2026, 5, 7),\n end: new Date(2026, 5, 13, 23, 59, 59, 999),\n}\nconst monthRange: ScheduleRange = {\n start: new Date(2026, 5, 1),\n end: new Date(2026, 5, 30, 23, 59, 59, 999),\n}\nconst boardRange: ScheduleRange = {\n start: new Date(2026, 5, 8),\n end: new Date(2026, 5, 10, 23, 59, 59, 999),\n}\nconst emptyDayRange: ScheduleRange = {\n start: new Date(2026, 5, 11),\n end: new Date(2026, 5, 11, 23, 59, 59, 999),\n}\nconst agendaRange: ScheduleRange = {\n start: new Date(2026, 5, 8),\n end: new Date(2026, 5, 9, 23, 59, 59, 999),\n}\nconst draftDayRange: ScheduleRange = {\n start: new Date(2026, 5, 12),\n end: new Date(2026, 5, 12, 23, 59, 59, 999),\n}\n\nconst sampleItems: ScheduleItem[] = [\n {\n id: 'availability-1',\n kind: 'availability',\n title: 'Open studio hours',\n startsAt: new Date(2026, 5, 8, 9, 0),\n endsAt: new Date(2026, 5, 8, 12, 0),\n status: 'confirmed',\n subjectType: 'member',\n subjectId: 'member-1',\n },\n {\n id: 'event-1',\n kind: 'event',\n title: 'Fitting \u2014 Anna Nowak',\n startsAt: new Date(2026, 5, 8, 13, 0),\n endsAt: new Date(2026, 5, 8, 14, 0),\n status: 'negotiation',\n },\n {\n id: 'event-2',\n kind: 'event',\n title: 'Delivery walkthrough',\n startsAt: new Date(2026, 5, 9, 10, 0),\n endsAt: new Date(2026, 5, 9, 11, 30),\n status: 'confirmed',\n },\n {\n id: 'exception-1',\n kind: 'exception',\n title: 'Studio closed',\n startsAt: new Date(2026, 5, 10, 0, 0),\n endsAt: new Date(2026, 5, 10, 23, 59),\n status: 'cancelled',\n },\n {\n id: 'event-3',\n kind: 'event',\n title: 'Quarterly review',\n startsAt: new Date(2026, 5, 12, 15, 0),\n endsAt: new Date(2026, 5, 12, 16, 0),\n status: 'draft',\n },\n]\n\nfunction initialRangeFor(view: ScheduleViewMode): ScheduleRange {\n return view === 'month' ? monthRange : weekRange\n}\n\nfunction DemoScheduleView({ initialView }: { initialView: ScheduleViewMode }) {\n const [view, setView] = React.useState<ScheduleViewMode>(initialView)\n const [range, setRange] = React.useState<ScheduleRange>(initialRangeFor(initialView))\n const [timezone, setTimezone] = React.useState('Europe/Warsaw')\n return (\n <ScheduleView\n items={sampleItems}\n view={view}\n range={range}\n timezone={timezone}\n onViewChange={setView}\n onRangeChange={setRange}\n onTimezoneChange={setTimezone}\n className=\"w-full\"\n />\n )\n}\n\nfunction DemoScheduleToolbar({ initialView }: { initialView: ScheduleViewMode }) {\n const [view, setView] = React.useState<ScheduleViewMode>(initialView)\n const [range, setRange] = React.useState<ScheduleRange>(initialRangeFor(initialView))\n const [timezone, setTimezone] = React.useState('Europe/Warsaw')\n return (\n <ScheduleToolbar\n view={view}\n range={range}\n timezone={timezone}\n onViewChange={setView}\n onRangeChange={setRange}\n onTimezoneChange={setTimezone}\n className=\"w-full\"\n />\n )\n}\n\nconst scheduleViewEntry: GalleryEntry = {\n id: 'schedule-view',\n title: 'ScheduleView',\n importPath: '@open-mercato/ui/backend/schedule',\n variants: [\n {\n id: 'week',\n title: 'Week (controlled)',\n render: () => <DemoScheduleView initialView=\"week\" />,\n code: `import { ScheduleView, type ScheduleItem, type ScheduleRange, type ScheduleViewMode } from '@open-mercato/ui/backend/schedule'\n\nconst [view, setView] = React.useState<ScheduleViewMode>('week')\nconst [range, setRange] = React.useState<ScheduleRange>({\n start: new Date(2026, 5, 7),\n end: new Date(2026, 5, 13, 23, 59, 59, 999),\n})\n\n<ScheduleView\n items={items /* ScheduleItem[] mapped from your domain records */}\n view={view}\n range={range}\n timezone=\"Europe/Warsaw\"\n onViewChange={setView}\n onRangeChange={setRange}\n/>`,\n },\n {\n id: 'month',\n title: 'Month (controlled)',\n render: () => <DemoScheduleView initialView=\"month\" />,\n code: `import { ScheduleView, type ScheduleRange, type ScheduleViewMode } from '@open-mercato/ui/backend/schedule'\n\nconst [view, setView] = React.useState<ScheduleViewMode>('month')\nconst [range, setRange] = React.useState<ScheduleRange>({\n start: new Date(2026, 5, 1),\n end: new Date(2026, 5, 30, 23, 59, 59, 999),\n})\n\n<ScheduleView items={items} view={view} range={range} onViewChange={setView} onRangeChange={setRange} />`,\n },\n ],\n}\n\nconst scheduleToolbarEntry: GalleryEntry = {\n id: 'schedule-toolbar',\n title: 'ScheduleToolbar',\n importPath: '@open-mercato/ui/backend/schedule',\n variants: [\n {\n id: 'week-with-timezone',\n title: 'Week range with timezone',\n render: () => <DemoScheduleToolbar initialView=\"week\" />,\n code: `import { ScheduleToolbar, type ScheduleRange, type ScheduleViewMode } from '@open-mercato/ui/backend/schedule'\n\nconst [view, setView] = React.useState<ScheduleViewMode>('week')\nconst [range, setRange] = React.useState<ScheduleRange>({\n start: new Date(2026, 5, 7),\n end: new Date(2026, 5, 13, 23, 59, 59, 999),\n})\nconst [timezone, setTimezone] = React.useState('Europe/Warsaw')\n\n<ScheduleToolbar\n view={view}\n range={range}\n timezone={timezone}\n onViewChange={setView}\n onRangeChange={setRange}\n onTimezoneChange={setTimezone}\n/>`,\n },\n {\n id: 'month-range',\n title: 'Month range',\n render: () => <DemoScheduleToolbar initialView=\"month\" />,\n code: `import { ScheduleToolbar, type ScheduleRange, type ScheduleViewMode } from '@open-mercato/ui/backend/schedule'\n\nconst [view, setView] = React.useState<ScheduleViewMode>('month')\nconst [range, setRange] = React.useState<ScheduleRange>({\n start: new Date(2026, 5, 1),\n end: new Date(2026, 5, 30, 23, 59, 59, 999),\n})\n\n<ScheduleToolbar view={view} range={range} onViewChange={setView} onRangeChange={setRange} />`,\n },\n ],\n}\n\nconst scheduleGridEntry: GalleryEntry = {\n id: 'schedule-grid',\n title: 'ScheduleGrid',\n importPath: '@open-mercato/ui/backend/schedule',\n variants: [\n {\n id: 'three-day-board',\n title: 'Three-day board',\n render: () => (\n <ScheduleGrid\n items={sampleItems}\n range={boardRange}\n timezone=\"Europe/Warsaw\"\n onItemClick={() => {}}\n onSlotClick={() => {}}\n className=\"w-full\"\n />\n ),\n code: `import { ScheduleGrid, type ScheduleItem } from '@open-mercato/ui/backend/schedule'\n\n<ScheduleGrid\n items={items /* ScheduleItem[] */}\n range={{ start: new Date(2026, 5, 8), end: new Date(2026, 5, 10, 23, 59, 59, 999) }}\n timezone=\"Europe/Warsaw\"\n onItemClick={(item) => openItem(item)}\n onSlotClick={(slot) => createDraft(slot)}\n/>`,\n },\n {\n id: 'read-only-empty',\n title: 'Read-only empty day',\n render: () => <ScheduleGrid items={[]} range={emptyDayRange} className=\"w-full\" />,\n code: `import { ScheduleGrid } from '@open-mercato/ui/backend/schedule'\n\n<ScheduleGrid\n items={[]}\n range={{ start: new Date(2026, 5, 11), end: new Date(2026, 5, 11, 23, 59, 59, 999) }}\n/>`,\n },\n ],\n}\n\nconst scheduleAgendaEntry: GalleryEntry = {\n id: 'schedule-agenda',\n title: 'ScheduleAgenda',\n importPath: '@open-mercato/ui/backend/schedule',\n variants: [\n {\n id: 'two-days',\n title: 'Two days with statuses',\n render: () => (\n <ScheduleAgenda\n items={sampleItems}\n range={agendaRange}\n timezone=\"Europe/Warsaw\"\n onItemClick={() => {}}\n onSlotClick={() => {}}\n className=\"w-full\"\n />\n ),\n code: `import { ScheduleAgenda, type ScheduleItem } from '@open-mercato/ui/backend/schedule'\n\n<ScheduleAgenda\n items={items /* ScheduleItem[] */}\n range={{ start: new Date(2026, 5, 8), end: new Date(2026, 5, 9, 23, 59, 59, 999) }}\n timezone=\"Europe/Warsaw\"\n onItemClick={(item) => openItem(item)}\n onSlotClick={(slot) => createDraft(slot)}\n/>`,\n },\n {\n id: 'read-only-day',\n title: 'Read-only day (draft item)',\n render: () => (\n <ScheduleAgenda items={sampleItems} range={draftDayRange} className=\"w-full\" />\n ),\n code: `import { ScheduleAgenda } from '@open-mercato/ui/backend/schedule'\n\n<ScheduleAgenda\n items={items}\n range={{ start: new Date(2026, 5, 12), end: new Date(2026, 5, 12, 23, 59, 59, 999) }}\n/>`,\n },\n ],\n}\n\nexport const entries: GalleryEntry[] = [\n scheduleViewEntry,\n scheduleToolbarEntry,\n scheduleGridEntry,\n scheduleAgendaEntry,\n]\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,139 @@
1
+ import * as React from "react";
2
+ import {
3
+ Palette,
4
+ Shapes,
5
+ MousePointerClick,
6
+ TextCursorInput,
7
+ CalendarDays,
8
+ BellRing,
9
+ Layers,
10
+ Compass,
11
+ Table2,
12
+ BarChart3,
13
+ Filter,
14
+ PanelsTopLeft,
15
+ LayoutTemplate,
16
+ Megaphone,
17
+ Bell,
18
+ CalendarClock,
19
+ Mail
20
+ } from "lucide-react";
21
+ const familyIcon = (Icon) => React.createElement(Icon, { className: "size-4", "aria-hidden": true });
22
+ const DS_FIGMA_FILE = "qCq9z6q1if0mpoRstV5OEA";
23
+ const DS_DOCS_URL = "https://github.com/open-mercato/open-mercato/blob/main/.ai/ui-components.md";
24
+ const GALLERY_BASE_PATH = "/backend/design-system";
25
+ function figmaNodeUrl(nodeId) {
26
+ return `https://www.figma.com/design/${DS_FIGMA_FILE}/?node-id=${nodeId.replace(":", "-")}`;
27
+ }
28
+ const galleryFamilies = [
29
+ {
30
+ id: "foundations",
31
+ labelKey: "design_system.families.foundations",
32
+ icon: familyIcon(Palette),
33
+ load: () => import("./entries/foundations.js")
34
+ },
35
+ {
36
+ id: "icons",
37
+ labelKey: "design_system.families.icons",
38
+ icon: familyIcon(Shapes),
39
+ load: () => import("./entries/icons.js")
40
+ },
41
+ {
42
+ id: "buttons",
43
+ labelKey: "design_system.families.buttons",
44
+ icon: familyIcon(MousePointerClick),
45
+ load: () => import("./entries/buttons.js")
46
+ },
47
+ {
48
+ id: "inputs",
49
+ labelKey: "design_system.families.inputs",
50
+ icon: familyIcon(TextCursorInput),
51
+ load: () => import("./entries/inputs.js")
52
+ },
53
+ {
54
+ id: "dates",
55
+ labelKey: "design_system.families.dates",
56
+ icon: familyIcon(CalendarDays),
57
+ load: () => import("./entries/dates.js")
58
+ },
59
+ {
60
+ id: "feedback",
61
+ labelKey: "design_system.families.feedback",
62
+ icon: familyIcon(BellRing),
63
+ load: () => import("./entries/feedback.js")
64
+ },
65
+ {
66
+ id: "overlays",
67
+ labelKey: "design_system.families.overlays",
68
+ icon: familyIcon(Layers),
69
+ load: () => import("./entries/overlays.js")
70
+ },
71
+ {
72
+ id: "navigation",
73
+ labelKey: "design_system.families.navigation",
74
+ icon: familyIcon(Compass),
75
+ load: () => import("./entries/navigation.js")
76
+ },
77
+ {
78
+ id: "display",
79
+ labelKey: "design_system.families.display",
80
+ icon: familyIcon(Table2),
81
+ load: () => import("./entries/display.js")
82
+ },
83
+ {
84
+ id: "charts",
85
+ labelKey: "design_system.families.charts",
86
+ icon: familyIcon(BarChart3),
87
+ load: () => import("./entries/charts.js")
88
+ },
89
+ {
90
+ id: "filters",
91
+ labelKey: "design_system.families.filters",
92
+ icon: familyIcon(Filter),
93
+ load: () => import("./entries/filters.js")
94
+ },
95
+ {
96
+ id: "detail",
97
+ labelKey: "design_system.families.detail",
98
+ icon: familyIcon(PanelsTopLeft),
99
+ load: () => import("./entries/detail.js")
100
+ },
101
+ {
102
+ id: "scaffolding",
103
+ labelKey: "design_system.families.scaffolding",
104
+ icon: familyIcon(LayoutTemplate),
105
+ load: () => import("./entries/scaffolding.js")
106
+ },
107
+ {
108
+ id: "banners",
109
+ labelKey: "design_system.families.banners",
110
+ icon: familyIcon(Megaphone),
111
+ load: () => import("./entries/banners.js")
112
+ },
113
+ {
114
+ id: "notifications",
115
+ labelKey: "design_system.families.notifications",
116
+ icon: familyIcon(Bell),
117
+ load: () => import("./entries/notifications.js")
118
+ },
119
+ {
120
+ id: "schedule",
121
+ labelKey: "design_system.families.schedule",
122
+ icon: familyIcon(CalendarClock),
123
+ load: () => import("./entries/schedule.js")
124
+ },
125
+ {
126
+ id: "messages",
127
+ labelKey: "design_system.families.messages",
128
+ icon: familyIcon(Mail),
129
+ load: () => import("./entries/messages.js")
130
+ }
131
+ ];
132
+ export {
133
+ DS_DOCS_URL,
134
+ DS_FIGMA_FILE,
135
+ GALLERY_BASE_PATH,
136
+ figmaNodeUrl,
137
+ galleryFamilies
138
+ };
139
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/modules/design_system/gallery/registry.ts"],
4
+ "sourcesContent": ["import * as React from 'react'\nimport {\n Palette,\n Shapes,\n MousePointerClick,\n TextCursorInput,\n CalendarDays,\n BellRing,\n Layers,\n Compass,\n Table2,\n BarChart3,\n Filter,\n PanelsTopLeft,\n LayoutTemplate,\n Megaphone,\n Bell,\n CalendarClock,\n Mail,\n} from 'lucide-react'\nimport type { GalleryFamily } from './types'\n\nconst familyIcon = (Icon: typeof Palette) => React.createElement(Icon, { className: 'size-4', 'aria-hidden': true })\n\n/** The DS Figma file id \u2014 every `figmaNodeId` in gallery entries points into this file. */\nexport const DS_FIGMA_FILE = 'qCq9z6q1if0mpoRstV5OEA'\n\n/** Base of the deep links into the monorepo DS docs (`.ai/ui-components.md`). */\nexport const DS_DOCS_URL = 'https://github.com/open-mercato/open-mercato/blob/main/.ai/ui-components.md'\n\n/** Route of the gallery backend page; used for section-nav hrefs and deep links. */\nexport const GALLERY_BASE_PATH = '/backend/design-system'\n\n/** Builds a Figma deep link for a `nodeId` in `<page>:<node>` format. */\nexport function figmaNodeUrl(nodeId: string): string {\n return `https://www.figma.com/design/${DS_FIGMA_FILE}/?node-id=${nodeId.replace(':', '-')}`\n}\n\n/**\n * Family manifest. Each family's entries live in `entries/<family>.tsx` and are\n * loaded lazily via a dynamic import so a family's primitives (and their\n * dependencies) only load when its section is opened.\n *\n * Adding a family: add the manifest row here and create `entries/<id>.tsx`\n * exporting `entries: GalleryEntry[]`. The coverage-guard test\n * (`__tests__/gallery-coverage.test.ts`) will tell you which primitives the\n * new file must cover.\n */\nexport const galleryFamilies: GalleryFamily[] = [\n {\n id: 'foundations',\n labelKey: 'design_system.families.foundations',\n icon: familyIcon(Palette),\n load: () => import('./entries/foundations'),\n },\n {\n id: 'icons',\n labelKey: 'design_system.families.icons',\n icon: familyIcon(Shapes),\n load: () => import('./entries/icons'),\n },\n {\n id: 'buttons',\n labelKey: 'design_system.families.buttons',\n icon: familyIcon(MousePointerClick),\n load: () => import('./entries/buttons'),\n },\n {\n id: 'inputs',\n labelKey: 'design_system.families.inputs',\n icon: familyIcon(TextCursorInput),\n load: () => import('./entries/inputs'),\n },\n {\n id: 'dates',\n labelKey: 'design_system.families.dates',\n icon: familyIcon(CalendarDays),\n load: () => import('./entries/dates'),\n },\n {\n id: 'feedback',\n labelKey: 'design_system.families.feedback',\n icon: familyIcon(BellRing),\n load: () => import('./entries/feedback'),\n },\n {\n id: 'overlays',\n labelKey: 'design_system.families.overlays',\n icon: familyIcon(Layers),\n load: () => import('./entries/overlays'),\n },\n {\n id: 'navigation',\n labelKey: 'design_system.families.navigation',\n icon: familyIcon(Compass),\n load: () => import('./entries/navigation'),\n },\n {\n id: 'display',\n labelKey: 'design_system.families.display',\n icon: familyIcon(Table2),\n load: () => import('./entries/display'),\n },\n {\n id: 'charts',\n labelKey: 'design_system.families.charts',\n icon: familyIcon(BarChart3),\n load: () => import('./entries/charts'),\n },\n {\n id: 'filters',\n labelKey: 'design_system.families.filters',\n icon: familyIcon(Filter),\n load: () => import('./entries/filters'),\n },\n {\n id: 'detail',\n labelKey: 'design_system.families.detail',\n icon: familyIcon(PanelsTopLeft),\n load: () => import('./entries/detail'),\n },\n {\n id: 'scaffolding',\n labelKey: 'design_system.families.scaffolding',\n icon: familyIcon(LayoutTemplate),\n load: () => import('./entries/scaffolding'),\n },\n {\n id: 'banners',\n labelKey: 'design_system.families.banners',\n icon: familyIcon(Megaphone),\n load: () => import('./entries/banners'),\n },\n {\n id: 'notifications',\n labelKey: 'design_system.families.notifications',\n icon: familyIcon(Bell),\n load: () => import('./entries/notifications'),\n },\n {\n id: 'schedule',\n labelKey: 'design_system.families.schedule',\n icon: familyIcon(CalendarClock),\n load: () => import('./entries/schedule'),\n },\n {\n id: 'messages',\n labelKey: 'design_system.families.messages',\n icon: familyIcon(Mail),\n load: () => import('./entries/messages'),\n },\n]\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,9 @@
1
+ const metadata = {
2
+ name: "design_system",
3
+ title: "Design system gallery",
4
+ description: "Live, in-app component gallery for the Open Mercato design system."
5
+ };
6
+ export {
7
+ metadata
8
+ };
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/modules/design_system/index.ts"],
4
+ "sourcesContent": ["import type { ModuleInfo } from '@open-mercato/shared/modules/registry'\n\nexport const metadata: ModuleInfo = {\n name: 'design_system',\n title: 'Design system gallery',\n description: 'Live, in-app component gallery for the Open Mercato design system.',\n}\n"],
5
+ "mappings": "AAEO,MAAM,WAAuB;AAAA,EAClC,MAAM;AAAA,EACN,OAAO;AAAA,EACP,aAAa;AACf;",
6
+ "names": []
7
+ }
@@ -0,0 +1,14 @@
1
+ const setup = {
2
+ defaultRoleFeatures: {
3
+ // View-only module: the gallery reads no tenant data, so the grant is safe
4
+ // to hand out broadly. Superadmin is covered by wildcard grants.
5
+ admin: ["design_system.view"],
6
+ employee: ["design_system.view"]
7
+ }
8
+ };
9
+ var setup_default = setup;
10
+ export {
11
+ setup_default as default,
12
+ setup
13
+ };
14
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/modules/design_system/setup.ts"],
4
+ "sourcesContent": ["import type { ModuleSetupConfig } from '@open-mercato/shared/modules/setup'\n\nexport const setup: ModuleSetupConfig = {\n defaultRoleFeatures: {\n // View-only module: the gallery reads no tenant data, so the grant is safe\n // to hand out broadly. Superadmin is covered by wildcard grants.\n admin: ['design_system.view'],\n employee: ['design_system.view'],\n },\n}\n\nexport default setup\n"],
5
+ "mappings": "AAEO,MAAM,QAA2B;AAAA,EACtC,qBAAqB;AAAA;AAAA;AAAA,IAGnB,OAAO,CAAC,oBAAoB;AAAA,IAC5B,UAAU,CAAC,oBAAoB;AAAA,EACjC;AACF;AAEA,IAAO,gBAAQ;",
6
+ "names": []
7
+ }
@@ -1,3 +1,4 @@
1
+ import { resolveTranslations } from "@open-mercato/shared/lib/i18n/server";
1
2
  function assertTenantContext(ctx) {
2
3
  if (typeof ctx.tenantId !== "string" || ctx.tenantId.length === 0) {
3
4
  throw new Error("[search.inbox_ops] Missing tenantId in search build context");
@@ -17,6 +18,11 @@ const searchConfig = {
17
18
  assertTenantContext(ctx);
18
19
  const record = ctx.record;
19
20
  if (!record.summary) return null;
21
+ const { t } = await resolveTranslations();
22
+ const confidence = String(record.confidence ?? "");
23
+ const status = String(record.status ?? "");
24
+ const category = record.category ? String(record.category) : "";
25
+ const subtitle = category ? t("inbox_ops.search.subtitle.templateWithCategory", "Confidence: {{confidence}} \xB7 Status: {{status}} \xB7 Category: {{category}}", { confidence, status, category }) : t("inbox_ops.search.subtitle.template", "Confidence: {{confidence}} \xB7 Status: {{status}}", { confidence, status });
20
26
  return {
21
27
  text: String(record.summary || ""),
22
28
  fields: {
@@ -26,8 +32,8 @@ const searchConfig = {
26
32
  detected_language: record.detected_language
27
33
  },
28
34
  presenter: {
29
- title: String(record.summary || "Inbox Proposal").slice(0, 80),
30
- subtitle: `Confidence: ${record.confidence} - Status: ${record.status}${record.category ? ` - Category: ${record.category}` : ""}`,
35
+ title: String(record.summary || t("inbox_ops.search.fallback.title", "Inbox Proposal")).slice(0, 80),
36
+ subtitle,
31
37
  icon: "inbox"
32
38
  },
33
39
  checksumSource: {
@@ -40,9 +46,14 @@ const searchConfig = {
40
46
  };
41
47
  },
42
48
  formatResult: async (ctx) => {
49
+ const { t } = await resolveTranslations();
50
+ const confidence = String(ctx.record.confidence ?? "");
51
+ const status = String(ctx.record.status ?? "");
52
+ const category = ctx.record.category ? String(ctx.record.category) : "";
53
+ const subtitle = category ? t("inbox_ops.search.subtitle.templateWithCategory", "Confidence: {{confidence}} \xB7 Status: {{status}} \xB7 Category: {{category}}", { confidence, status, category }) : t("inbox_ops.search.subtitle.template", "Confidence: {{confidence}} \xB7 Status: {{status}}", { confidence, status });
43
54
  return {
44
- title: String(ctx.record.summary || "Inbox Proposal").slice(0, 80),
45
- subtitle: `Confidence: ${ctx.record.confidence} - Status: ${ctx.record.status}${ctx.record.category ? ` - Category: ${ctx.record.category}` : ""}`,
55
+ title: String(ctx.record.summary || t("inbox_ops.search.fallback.title", "Inbox Proposal")).slice(0, 80),
56
+ subtitle,
46
57
  icon: "inbox"
47
58
  };
48
59
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/modules/inbox_ops/search.ts"],
4
- "sourcesContent": ["import type {\n SearchModuleConfig,\n SearchBuildContext,\n SearchResultPresenter,\n SearchIndexSource,\n} from '@open-mercato/shared/modules/search'\n\ntype SearchContext = SearchBuildContext & {\n tenantId: string\n}\n\nfunction assertTenantContext(ctx: SearchBuildContext): asserts ctx is SearchContext {\n if (typeof ctx.tenantId !== 'string' || ctx.tenantId.length === 0) {\n throw new Error('[search.inbox_ops] Missing tenantId in search build context')\n }\n}\n\nexport const searchConfig: SearchModuleConfig = {\n entities: [\n {\n entityId: 'inbox_ops:inbox_proposal',\n enabled: true,\n priority: 6,\n fieldPolicy: {\n searchable: ['summary', 'category'],\n excluded: ['metadata', 'participants'],\n },\n buildSource: async (ctx: SearchBuildContext): Promise<SearchIndexSource | null> => {\n assertTenantContext(ctx)\n const record = ctx.record\n if (!record.summary) return null\n\n return {\n text: String(record.summary || ''),\n fields: {\n status: record.status,\n confidence: record.confidence,\n category: record.category,\n detected_language: record.detected_language,\n },\n presenter: {\n title: String(record.summary || 'Inbox Proposal').slice(0, 80),\n subtitle: `Confidence: ${record.confidence} - Status: ${record.status}${record.category ? ` - Category: ${record.category}` : ''}`,\n icon: 'inbox',\n },\n checksumSource: {\n summary: record.summary,\n status: record.status,\n confidence: record.confidence,\n category: record.category,\n detectedLanguage: record.detected_language,\n },\n }\n },\n formatResult: async (ctx: SearchBuildContext): Promise<SearchResultPresenter | null> => {\n return {\n title: String(ctx.record.summary || 'Inbox Proposal').slice(0, 80),\n subtitle: `Confidence: ${ctx.record.confidence} - Status: ${ctx.record.status}${ctx.record.category ? ` - Category: ${ctx.record.category}` : ''}`,\n icon: 'inbox',\n }\n },\n resolveUrl: async (ctx: SearchBuildContext): Promise<string | null> => {\n const id = ctx.record.id\n if (!id) return null\n return `/backend/inbox-ops/proposals/${encodeURIComponent(String(id))}`\n },\n },\n ],\n}\n\nexport const config = searchConfig\nexport default searchConfig\n"],
5
- "mappings": "AAWA,SAAS,oBAAoB,KAAuD;AAClF,MAAI,OAAO,IAAI,aAAa,YAAY,IAAI,SAAS,WAAW,GAAG;AACjE,UAAM,IAAI,MAAM,6DAA6D;AAAA,EAC/E;AACF;AAEO,MAAM,eAAmC;AAAA,EAC9C,UAAU;AAAA,IACR;AAAA,MACE,UAAU;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,MACV,aAAa;AAAA,QACX,YAAY,CAAC,WAAW,UAAU;AAAA,QAClC,UAAU,CAAC,YAAY,cAAc;AAAA,MACvC;AAAA,MACA,aAAa,OAAO,QAA+D;AACjF,4BAAoB,GAAG;AACvB,cAAM,SAAS,IAAI;AACnB,YAAI,CAAC,OAAO,QAAS,QAAO;AAE5B,eAAO;AAAA,UACL,MAAM,OAAO,OAAO,WAAW,EAAE;AAAA,UACjC,QAAQ;AAAA,YACN,QAAQ,OAAO;AAAA,YACf,YAAY,OAAO;AAAA,YACnB,UAAU,OAAO;AAAA,YACjB,mBAAmB,OAAO;AAAA,UAC5B;AAAA,UACA,WAAW;AAAA,YACT,OAAO,OAAO,OAAO,WAAW,gBAAgB,EAAE,MAAM,GAAG,EAAE;AAAA,YAC7D,UAAU,eAAe,OAAO,UAAU,cAAc,OAAO,MAAM,GAAG,OAAO,WAAW,gBAAgB,OAAO,QAAQ,KAAK,EAAE;AAAA,YAChI,MAAM;AAAA,UACR;AAAA,UACA,gBAAgB;AAAA,YACd,SAAS,OAAO;AAAA,YAChB,QAAQ,OAAO;AAAA,YACf,YAAY,OAAO;AAAA,YACnB,UAAU,OAAO;AAAA,YACjB,kBAAkB,OAAO;AAAA,UAC3B;AAAA,QACF;AAAA,MACF;AAAA,MACA,cAAc,OAAO,QAAmE;AACtF,eAAO;AAAA,UACL,OAAO,OAAO,IAAI,OAAO,WAAW,gBAAgB,EAAE,MAAM,GAAG,EAAE;AAAA,UACjE,UAAU,eAAe,IAAI,OAAO,UAAU,cAAc,IAAI,OAAO,MAAM,GAAG,IAAI,OAAO,WAAW,gBAAgB,IAAI,OAAO,QAAQ,KAAK,EAAE;AAAA,UAChJ,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MACA,YAAY,OAAO,QAAoD;AACrE,cAAM,KAAK,IAAI,OAAO;AACtB,YAAI,CAAC,GAAI,QAAO;AAChB,eAAO,gCAAgC,mBAAmB,OAAO,EAAE,CAAC,CAAC;AAAA,MACvE;AAAA,IACF;AAAA,EACF;AACF;AAEO,MAAM,SAAS;AACtB,IAAO,iBAAQ;",
4
+ "sourcesContent": ["import type {\n SearchModuleConfig,\n SearchBuildContext,\n SearchResultPresenter,\n SearchIndexSource,\n} from '@open-mercato/shared/modules/search'\nimport { resolveTranslations } from '@open-mercato/shared/lib/i18n/server'\n\ntype SearchContext = SearchBuildContext & {\n tenantId: string\n}\n\nfunction assertTenantContext(ctx: SearchBuildContext): asserts ctx is SearchContext {\n if (typeof ctx.tenantId !== 'string' || ctx.tenantId.length === 0) {\n throw new Error('[search.inbox_ops] Missing tenantId in search build context')\n }\n}\n\nexport const searchConfig: SearchModuleConfig = {\n entities: [\n {\n entityId: 'inbox_ops:inbox_proposal',\n enabled: true,\n priority: 6,\n fieldPolicy: {\n searchable: ['summary', 'category'],\n excluded: ['metadata', 'participants'],\n },\n buildSource: async (ctx: SearchBuildContext): Promise<SearchIndexSource | null> => {\n assertTenantContext(ctx)\n const record = ctx.record\n if (!record.summary) return null\n\n const { t } = await resolveTranslations()\n const confidence = String(record.confidence ?? '')\n const status = String(record.status ?? '')\n const category = record.category ? String(record.category) : ''\n const subtitle = category\n ? t('inbox_ops.search.subtitle.templateWithCategory', 'Confidence: {{confidence}} \u00B7 Status: {{status}} \u00B7 Category: {{category}}', { confidence, status, category })\n : t('inbox_ops.search.subtitle.template', 'Confidence: {{confidence}} \u00B7 Status: {{status}}', { confidence, status })\n\n return {\n text: String(record.summary || ''),\n fields: {\n status: record.status,\n confidence: record.confidence,\n category: record.category,\n detected_language: record.detected_language,\n },\n presenter: {\n title: String(record.summary || t('inbox_ops.search.fallback.title', 'Inbox Proposal')).slice(0, 80),\n subtitle,\n icon: 'inbox',\n },\n checksumSource: {\n summary: record.summary,\n status: record.status,\n confidence: record.confidence,\n category: record.category,\n detectedLanguage: record.detected_language,\n },\n }\n },\n formatResult: async (ctx: SearchBuildContext): Promise<SearchResultPresenter | null> => {\n const { t } = await resolveTranslations()\n const confidence = String(ctx.record.confidence ?? '')\n const status = String(ctx.record.status ?? '')\n const category = ctx.record.category ? String(ctx.record.category) : ''\n const subtitle = category\n ? t('inbox_ops.search.subtitle.templateWithCategory', 'Confidence: {{confidence}} \u00B7 Status: {{status}} \u00B7 Category: {{category}}', { confidence, status, category })\n : t('inbox_ops.search.subtitle.template', 'Confidence: {{confidence}} \u00B7 Status: {{status}}', { confidence, status })\n return {\n title: String(ctx.record.summary || t('inbox_ops.search.fallback.title', 'Inbox Proposal')).slice(0, 80),\n subtitle,\n icon: 'inbox',\n }\n },\n resolveUrl: async (ctx: SearchBuildContext): Promise<string | null> => {\n const id = ctx.record.id\n if (!id) return null\n return `/backend/inbox-ops/proposals/${encodeURIComponent(String(id))}`\n },\n },\n ],\n}\n\nexport const config = searchConfig\nexport default searchConfig\n"],
5
+ "mappings": "AAMA,SAAS,2BAA2B;AAMpC,SAAS,oBAAoB,KAAuD;AAClF,MAAI,OAAO,IAAI,aAAa,YAAY,IAAI,SAAS,WAAW,GAAG;AACjE,UAAM,IAAI,MAAM,6DAA6D;AAAA,EAC/E;AACF;AAEO,MAAM,eAAmC;AAAA,EAC9C,UAAU;AAAA,IACR;AAAA,MACE,UAAU;AAAA,MACV,SAAS;AAAA,MACT,UAAU;AAAA,MACV,aAAa;AAAA,QACX,YAAY,CAAC,WAAW,UAAU;AAAA,QAClC,UAAU,CAAC,YAAY,cAAc;AAAA,MACvC;AAAA,MACA,aAAa,OAAO,QAA+D;AACjF,4BAAoB,GAAG;AACvB,cAAM,SAAS,IAAI;AACnB,YAAI,CAAC,OAAO,QAAS,QAAO;AAE5B,cAAM,EAAE,EAAE,IAAI,MAAM,oBAAoB;AACxC,cAAM,aAAa,OAAO,OAAO,cAAc,EAAE;AACjD,cAAM,SAAS,OAAO,OAAO,UAAU,EAAE;AACzC,cAAM,WAAW,OAAO,WAAW,OAAO,OAAO,QAAQ,IAAI;AAC7D,cAAM,WAAW,WACb,EAAE,kDAAkD,kFAA4E,EAAE,YAAY,QAAQ,SAAS,CAAC,IAChK,EAAE,sCAAsC,sDAAmD,EAAE,YAAY,OAAO,CAAC;AAErH,eAAO;AAAA,UACL,MAAM,OAAO,OAAO,WAAW,EAAE;AAAA,UACjC,QAAQ;AAAA,YACN,QAAQ,OAAO;AAAA,YACf,YAAY,OAAO;AAAA,YACnB,UAAU,OAAO;AAAA,YACjB,mBAAmB,OAAO;AAAA,UAC5B;AAAA,UACA,WAAW;AAAA,YACT,OAAO,OAAO,OAAO,WAAW,EAAE,mCAAmC,gBAAgB,CAAC,EAAE,MAAM,GAAG,EAAE;AAAA,YACnG;AAAA,YACA,MAAM;AAAA,UACR;AAAA,UACA,gBAAgB;AAAA,YACd,SAAS,OAAO;AAAA,YAChB,QAAQ,OAAO;AAAA,YACf,YAAY,OAAO;AAAA,YACnB,UAAU,OAAO;AAAA,YACjB,kBAAkB,OAAO;AAAA,UAC3B;AAAA,QACF;AAAA,MACF;AAAA,MACA,cAAc,OAAO,QAAmE;AACtF,cAAM,EAAE,EAAE,IAAI,MAAM,oBAAoB;AACxC,cAAM,aAAa,OAAO,IAAI,OAAO,cAAc,EAAE;AACrD,cAAM,SAAS,OAAO,IAAI,OAAO,UAAU,EAAE;AAC7C,cAAM,WAAW,IAAI,OAAO,WAAW,OAAO,IAAI,OAAO,QAAQ,IAAI;AACrE,cAAM,WAAW,WACb,EAAE,kDAAkD,kFAA4E,EAAE,YAAY,QAAQ,SAAS,CAAC,IAChK,EAAE,sCAAsC,sDAAmD,EAAE,YAAY,OAAO,CAAC;AACrH,eAAO;AAAA,UACL,OAAO,OAAO,IAAI,OAAO,WAAW,EAAE,mCAAmC,gBAAgB,CAAC,EAAE,MAAM,GAAG,EAAE;AAAA,UACvG;AAAA,UACA,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MACA,YAAY,OAAO,QAAoD;AACrE,cAAM,KAAK,IAAI,OAAO;AACtB,YAAI,CAAC,GAAI,QAAO;AAChB,eAAO,gCAAgC,mBAAmB,OAAO,EAAE,CAAC,CAAC;AAAA,MACvE;AAAA,IACF;AAAA,EACF;AACF;AAEO,MAAM,SAAS;AACtB,IAAO,iBAAQ;",
6
6
  "names": []
7
7
  }