@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.
- package/.turbo/turbo-build.log +1 -1
- package/dist/generated/entities.ids.generated.js +1 -0
- package/dist/generated/entities.ids.generated.js.map +2 -2
- package/dist/modules/auth/backend/settings/page.js +14 -9
- package/dist/modules/auth/backend/settings/page.js.map +2 -2
- package/dist/modules/customers/cli.js +17 -7
- package/dist/modules/customers/cli.js.map +2 -2
- package/dist/modules/customers/components/detail/ScheduleActivityDialog.js +229 -216
- package/dist/modules/customers/components/detail/ScheduleActivityDialog.js.map +2 -2
- package/dist/modules/customers/search.js +50 -29
- package/dist/modules/customers/search.js.map +2 -2
- package/dist/modules/data_sync/api/mappings/[id]/route.js +22 -9
- package/dist/modules/data_sync/api/mappings/[id]/route.js.map +2 -2
- package/dist/modules/data_sync/api/mappings/route.js +13 -4
- package/dist/modules/data_sync/api/mappings/route.js.map +2 -2
- package/dist/modules/data_sync/api/options.js +7 -2
- package/dist/modules/data_sync/api/options.js.map +2 -2
- package/dist/modules/data_sync/api/run.js +7 -2
- package/dist/modules/data_sync/api/run.js.map +2 -2
- package/dist/modules/data_sync/api/runs/[id]/cancel.js +8 -3
- package/dist/modules/data_sync/api/runs/[id]/cancel.js.map +2 -2
- package/dist/modules/data_sync/api/runs/[id]/retry.js +7 -2
- package/dist/modules/data_sync/api/runs/[id]/retry.js.map +2 -2
- package/dist/modules/data_sync/api/runs/[id]/route.js +8 -3
- package/dist/modules/data_sync/api/runs/[id]/route.js.map +2 -2
- package/dist/modules/data_sync/api/runs.js +7 -2
- package/dist/modules/data_sync/api/runs.js.map +2 -2
- package/dist/modules/data_sync/api/schedules/[id]/route.js +19 -6
- package/dist/modules/data_sync/api/schedules/[id]/route.js.map +2 -2
- package/dist/modules/data_sync/api/schedules/route.js +13 -4
- package/dist/modules/data_sync/api/schedules/route.js.map +2 -2
- package/dist/modules/data_sync/api/validate.js +9 -4
- package/dist/modules/data_sync/api/validate.js.map +2 -2
- package/dist/modules/design_system/acl.js +9 -0
- package/dist/modules/design_system/acl.js.map +7 -0
- package/dist/modules/design_system/backend/design-system/page.js +11 -0
- package/dist/modules/design_system/backend/design-system/page.js.map +7 -0
- package/dist/modules/design_system/backend/design-system/page.meta.js +15 -0
- package/dist/modules/design_system/backend/design-system/page.meta.js.map +7 -0
- package/dist/modules/design_system/gallery/components/CodeSnippet.js +52 -0
- package/dist/modules/design_system/gallery/components/CodeSnippet.js.map +7 -0
- package/dist/modules/design_system/gallery/components/EntryCard.js +63 -0
- package/dist/modules/design_system/gallery/components/EntryCard.js.map +7 -0
- package/dist/modules/design_system/gallery/components/GalleryShell.js +163 -0
- package/dist/modules/design_system/gallery/components/GalleryShell.js.map +7 -0
- package/dist/modules/design_system/gallery/components/VariantPreview.js +9 -0
- package/dist/modules/design_system/gallery/components/VariantPreview.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/banners.js +186 -0
- package/dist/modules/design_system/gallery/entries/banners.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/buttons.js +361 -0
- package/dist/modules/design_system/gallery/entries/buttons.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/charts.js +457 -0
- package/dist/modules/design_system/gallery/entries/charts.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/dates.js +306 -0
- package/dist/modules/design_system/gallery/entries/dates.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/detail.js +358 -0
- package/dist/modules/design_system/gallery/entries/detail.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/display.js +785 -0
- package/dist/modules/design_system/gallery/entries/display.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/feedback.js +658 -0
- package/dist/modules/design_system/gallery/entries/feedback.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/filters.js +505 -0
- package/dist/modules/design_system/gallery/entries/filters.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/foundations.js +453 -0
- package/dist/modules/design_system/gallery/entries/foundations.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/icons.js +140 -0
- package/dist/modules/design_system/gallery/entries/icons.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/inputs.js +1217 -0
- package/dist/modules/design_system/gallery/entries/inputs.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/messages.js +334 -0
- package/dist/modules/design_system/gallery/entries/messages.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/navigation.js +475 -0
- package/dist/modules/design_system/gallery/entries/navigation.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/notifications.js +257 -0
- package/dist/modules/design_system/gallery/entries/notifications.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/overlays.js +576 -0
- package/dist/modules/design_system/gallery/entries/overlays.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/scaffolding.js +378 -0
- package/dist/modules/design_system/gallery/entries/scaffolding.js.map +7 -0
- package/dist/modules/design_system/gallery/entries/schedule.js +297 -0
- package/dist/modules/design_system/gallery/entries/schedule.js.map +7 -0
- package/dist/modules/design_system/gallery/registry.js +139 -0
- package/dist/modules/design_system/gallery/registry.js.map +7 -0
- package/dist/modules/design_system/gallery/types.js +1 -0
- package/dist/modules/design_system/gallery/types.js.map +7 -0
- package/dist/modules/design_system/index.js +9 -0
- package/dist/modules/design_system/index.js.map +7 -0
- package/dist/modules/design_system/setup.js +14 -0
- package/dist/modules/design_system/setup.js.map +7 -0
- package/dist/modules/inbox_ops/search.js +15 -4
- package/dist/modules/inbox_ops/search.js.map +2 -2
- package/dist/modules/integrations/api/[id]/credentials/route.js +11 -5
- package/dist/modules/integrations/api/[id]/credentials/route.js.map +2 -2
- package/dist/modules/integrations/api/[id]/health/route.js +6 -3
- package/dist/modules/integrations/api/[id]/health/route.js.map +2 -2
- package/dist/modules/integrations/api/[id]/route.js +6 -3
- package/dist/modules/integrations/api/[id]/route.js.map +2 -2
- package/dist/modules/integrations/api/[id]/state/route.js +6 -3
- package/dist/modules/integrations/api/[id]/state/route.js.map +2 -2
- package/dist/modules/integrations/api/[id]/version/route.js +6 -3
- package/dist/modules/integrations/api/[id]/version/route.js.map +2 -2
- package/dist/modules/integrations/api/logs/route.js +6 -3
- package/dist/modules/integrations/api/logs/route.js.map +2 -2
- package/dist/modules/integrations/api/route.js +6 -3
- package/dist/modules/integrations/api/route.js.map +2 -2
- package/dist/modules/integrations/api/umes-read.js +2 -2
- package/dist/modules/integrations/api/umes-read.js.map +2 -2
- package/dist/modules/integrations/lib/organization-scope.js +2 -9
- package/dist/modules/integrations/lib/organization-scope.js.map +2 -2
- package/dist/modules/messages/search.js +10 -5
- package/dist/modules/messages/search.js.map +2 -2
- package/dist/modules/query_index/data/entities.js +2 -1
- package/dist/modules/query_index/data/entities.js.map +2 -2
- package/dist/modules/query_index/lib/engine.js +32 -50
- package/dist/modules/query_index/lib/engine.js.map +2 -2
- package/dist/modules/query_index/migrations/Migration20260731105052_query_index.js +17 -0
- package/dist/modules/query_index/migrations/Migration20260731105052_query_index.js.map +7 -0
- package/generated/entities.ids.generated.ts +1 -0
- package/package.json +16 -16
- package/src/modules/auth/backend/settings/page.tsx +17 -8
- package/src/modules/customers/cli.ts +17 -7
- package/src/modules/customers/components/detail/ScheduleActivityDialog.tsx +24 -13
- package/src/modules/customers/i18n/de.json +17 -0
- package/src/modules/customers/i18n/en.json +17 -0
- package/src/modules/customers/i18n/es.json +17 -0
- package/src/modules/customers/i18n/pl.json +17 -0
- package/src/modules/customers/search.ts +59 -27
- package/src/modules/data_sync/AGENTS.md +1 -0
- package/src/modules/data_sync/api/mappings/[id]/route.ts +22 -9
- package/src/modules/data_sync/api/mappings/route.ts +13 -4
- package/src/modules/data_sync/api/options.ts +7 -2
- package/src/modules/data_sync/api/run.ts +7 -2
- package/src/modules/data_sync/api/runs/[id]/cancel.ts +8 -3
- package/src/modules/data_sync/api/runs/[id]/retry.ts +7 -2
- package/src/modules/data_sync/api/runs/[id]/route.ts +8 -3
- package/src/modules/data_sync/api/runs.ts +7 -2
- package/src/modules/data_sync/api/schedules/[id]/route.ts +19 -6
- package/src/modules/data_sync/api/schedules/route.ts +13 -4
- package/src/modules/data_sync/api/validate.ts +9 -4
- package/src/modules/design_system/AGENTS.md +34 -0
- package/src/modules/design_system/acl.ts +5 -0
- package/src/modules/design_system/backend/design-system/page.meta.ts +11 -0
- package/src/modules/design_system/backend/design-system/page.tsx +14 -0
- package/src/modules/design_system/gallery/components/CodeSnippet.tsx +55 -0
- package/src/modules/design_system/gallery/components/EntryCard.tsx +95 -0
- package/src/modules/design_system/gallery/components/GalleryShell.tsx +206 -0
- package/src/modules/design_system/gallery/components/VariantPreview.tsx +15 -0
- package/src/modules/design_system/gallery/entries/banners.tsx +226 -0
- package/src/modules/design_system/gallery/entries/buttons.tsx +422 -0
- package/src/modules/design_system/gallery/entries/charts.tsx +518 -0
- package/src/modules/design_system/gallery/entries/dates.tsx +325 -0
- package/src/modules/design_system/gallery/entries/detail.tsx +403 -0
- package/src/modules/design_system/gallery/entries/display.tsx +893 -0
- package/src/modules/design_system/gallery/entries/feedback.tsx +746 -0
- package/src/modules/design_system/gallery/entries/filters.tsx +570 -0
- package/src/modules/design_system/gallery/entries/foundations.tsx +529 -0
- package/src/modules/design_system/gallery/entries/icons.tsx +168 -0
- package/src/modules/design_system/gallery/entries/inputs.tsx +1516 -0
- package/src/modules/design_system/gallery/entries/messages.tsx +339 -0
- package/src/modules/design_system/gallery/entries/navigation.tsx +573 -0
- package/src/modules/design_system/gallery/entries/notifications.tsx +285 -0
- package/src/modules/design_system/gallery/entries/overlays.tsx +677 -0
- package/src/modules/design_system/gallery/entries/scaffolding.tsx +430 -0
- package/src/modules/design_system/gallery/entries/schedule.tsx +307 -0
- package/src/modules/design_system/gallery/registry.ts +152 -0
- package/src/modules/design_system/gallery/types.ts +32 -0
- package/src/modules/design_system/i18n/.hardcoded-allowlist.json +71 -0
- package/src/modules/design_system/i18n/de.json +46 -0
- package/src/modules/design_system/i18n/en.json +46 -0
- package/src/modules/design_system/i18n/es.json +46 -0
- package/src/modules/design_system/i18n/pl.json +46 -0
- package/src/modules/design_system/index.ts +7 -0
- package/src/modules/design_system/setup.ts +12 -0
- package/src/modules/inbox_ops/i18n/de.json +3 -0
- package/src/modules/inbox_ops/i18n/en.json +3 -0
- package/src/modules/inbox_ops/i18n/es.json +3 -0
- package/src/modules/inbox_ops/i18n/pl.json +3 -0
- package/src/modules/inbox_ops/search.ts +20 -4
- package/src/modules/integrations/api/[id]/credentials/route.ts +11 -5
- package/src/modules/integrations/api/[id]/health/route.ts +6 -3
- package/src/modules/integrations/api/[id]/route.ts +6 -3
- package/src/modules/integrations/api/[id]/state/route.ts +6 -3
- package/src/modules/integrations/api/[id]/version/route.ts +6 -3
- package/src/modules/integrations/api/logs/route.ts +6 -3
- package/src/modules/integrations/api/route.ts +6 -3
- package/src/modules/integrations/api/umes-read.ts +2 -2
- package/src/modules/integrations/lib/organization-scope.ts +5 -25
- package/src/modules/messages/i18n/de.json +2 -0
- package/src/modules/messages/i18n/en.json +2 -0
- package/src/modules/messages/i18n/es.json +2 -0
- package/src/modules/messages/i18n/pl.json +2 -0
- package/src/modules/messages/search.ts +11 -5
- package/src/modules/query_index/data/entities.ts +7 -0
- package/src/modules/query_index/lib/engine.ts +40 -63
- package/src/modules/query_index/migrations/.snapshot-open-mercato.json +12 -0
- package/src/modules/query_index/migrations/Migration20260731105052_query_index.ts +35 -0
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import * as React from 'react'
|
|
2
|
+
import { useT } from '@open-mercato/shared/lib/i18n/context'
|
|
3
|
+
import { LUCIDE_ICON_REGISTRY } from '@open-mercato/ui/backend/icons/lucideRegistry'
|
|
4
|
+
import { SearchInput } from '@open-mercato/ui/primitives/search-input'
|
|
5
|
+
import {
|
|
6
|
+
Popover,
|
|
7
|
+
PopoverClose,
|
|
8
|
+
PopoverContent,
|
|
9
|
+
PopoverTrigger,
|
|
10
|
+
} from '@open-mercato/ui/primitives/popover'
|
|
11
|
+
import { flash } from '@open-mercato/ui/backend/FlashMessages'
|
|
12
|
+
import type { GalleryEntry } from '../types'
|
|
13
|
+
|
|
14
|
+
// Mirrors the DS Figma icon sheet (node 2716:25504, "Lucide icons"): a plain
|
|
15
|
+
// grid of outline icons with the name beneath each. The gallery shows the
|
|
16
|
+
// icons REGISTERED in the string-icon registry — the set page.meta.ts `icon`
|
|
17
|
+
// accepts; components import from lucide-react directly.
|
|
18
|
+
|
|
19
|
+
const FIGMA_ICONS_NODE = '2716:25504'
|
|
20
|
+
|
|
21
|
+
function pascalCase(registryName: string): string {
|
|
22
|
+
return registryName
|
|
23
|
+
.split(/[-_]/)
|
|
24
|
+
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
25
|
+
.join('')
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// Clicking a tile opens an explicit two-option menu instead of a hidden
|
|
29
|
+
// copy-mode: each option shows exactly what will land in the clipboard.
|
|
30
|
+
function IconTile({ name }: { name: string }) {
|
|
31
|
+
const t = useT()
|
|
32
|
+
const Icon = LUCIDE_ICON_REGISTRY[name]
|
|
33
|
+
const jsxSnippet = `<${pascalCase(name)} aria-hidden className="size-4" />`
|
|
34
|
+
|
|
35
|
+
const copy = React.useCallback(async (payload: string) => {
|
|
36
|
+
try {
|
|
37
|
+
await navigator.clipboard.writeText(payload)
|
|
38
|
+
flash(t('design_system.gallery.iconCopied', 'Copied: {snippet}', { snippet: payload }), 'success')
|
|
39
|
+
} catch {
|
|
40
|
+
flash(t('design_system.gallery.copyFailed', 'Could not copy the snippet'), 'error')
|
|
41
|
+
}
|
|
42
|
+
}, [t])
|
|
43
|
+
|
|
44
|
+
return (
|
|
45
|
+
<Popover>
|
|
46
|
+
<PopoverTrigger asChild>
|
|
47
|
+
<button
|
|
48
|
+
type="button"
|
|
49
|
+
className="flex flex-col items-center gap-1.5 rounded-md border border-transparent p-2 transition-colors hover:border-border hover:bg-muted/40 focus-visible:outline-none focus-visible:shadow-focus"
|
|
50
|
+
>
|
|
51
|
+
<Icon aria-hidden className="size-5 text-foreground" strokeWidth={1.75} />
|
|
52
|
+
<code className="max-w-full truncate text-[10px] leading-tight text-muted-foreground">{name}</code>
|
|
53
|
+
</button>
|
|
54
|
+
</PopoverTrigger>
|
|
55
|
+
<PopoverContent align="center" className="w-auto max-w-xs p-2">
|
|
56
|
+
<div className="space-y-1">
|
|
57
|
+
<PopoverClose asChild>
|
|
58
|
+
<button
|
|
59
|
+
type="button"
|
|
60
|
+
onClick={() => copy(name)}
|
|
61
|
+
className="flex w-full flex-col items-start gap-0.5 rounded-md px-2 py-1.5 text-left transition-colors hover:bg-muted focus-visible:outline-none focus-visible:shadow-focus"
|
|
62
|
+
>
|
|
63
|
+
<span className="text-xs font-medium text-foreground">
|
|
64
|
+
{t('design_system.gallery.iconCopyMeta', 'Copy name for page.meta icon')}
|
|
65
|
+
</span>
|
|
66
|
+
<code className="text-[11px] text-muted-foreground">{name}</code>
|
|
67
|
+
</button>
|
|
68
|
+
</PopoverClose>
|
|
69
|
+
<PopoverClose asChild>
|
|
70
|
+
<button
|
|
71
|
+
type="button"
|
|
72
|
+
onClick={() => copy(jsxSnippet)}
|
|
73
|
+
className="flex w-full flex-col items-start gap-0.5 rounded-md px-2 py-1.5 text-left transition-colors hover:bg-muted focus-visible:outline-none focus-visible:shadow-focus"
|
|
74
|
+
>
|
|
75
|
+
<span className="text-xs font-medium text-foreground">
|
|
76
|
+
{t('design_system.gallery.iconCopyJsx', 'Copy JSX (lucide-react)')}
|
|
77
|
+
</span>
|
|
78
|
+
<code className="max-w-full truncate text-[11px] text-muted-foreground">{jsxSnippet}</code>
|
|
79
|
+
</button>
|
|
80
|
+
</PopoverClose>
|
|
81
|
+
</div>
|
|
82
|
+
</PopoverContent>
|
|
83
|
+
</Popover>
|
|
84
|
+
)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function IconGrid() {
|
|
88
|
+
const t = useT()
|
|
89
|
+
const [query, setQuery] = React.useState('')
|
|
90
|
+
const names = React.useMemo(() => Object.keys(LUCIDE_ICON_REGISTRY).sort((a, b) => a.localeCompare(b)), [])
|
|
91
|
+
const needle = query.trim().toLowerCase()
|
|
92
|
+
const visible = needle ? names.filter((name) => name.toLowerCase().includes(needle)) : names
|
|
93
|
+
|
|
94
|
+
return (
|
|
95
|
+
<div className="space-y-4">
|
|
96
|
+
<div className="flex flex-wrap items-center gap-3">
|
|
97
|
+
<div className="max-w-sm flex-1">
|
|
98
|
+
<SearchInput
|
|
99
|
+
value={query}
|
|
100
|
+
onChange={setQuery}
|
|
101
|
+
placeholder={t('design_system.gallery.iconSearchPlaceholder', 'Filter icons…')}
|
|
102
|
+
aria-label={t('design_system.gallery.iconSearchPlaceholder', 'Filter icons…')}
|
|
103
|
+
/>
|
|
104
|
+
</div>
|
|
105
|
+
<p className="text-xs text-muted-foreground">
|
|
106
|
+
{needle
|
|
107
|
+
? t('design_system.gallery.iconCountFiltered', '{visible} of {total} icons', {
|
|
108
|
+
visible: visible.length,
|
|
109
|
+
total: names.length,
|
|
110
|
+
})
|
|
111
|
+
: t('design_system.gallery.iconCountAll', '{total} icons', { total: names.length })}
|
|
112
|
+
</p>
|
|
113
|
+
</div>
|
|
114
|
+
<div className="grid grid-cols-4 gap-1 sm:grid-cols-6 lg:grid-cols-8">
|
|
115
|
+
{visible.map((name) => (
|
|
116
|
+
<IconTile key={name} name={name} />
|
|
117
|
+
))}
|
|
118
|
+
</div>
|
|
119
|
+
</div>
|
|
120
|
+
)
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const iconRegistryEntry: GalleryEntry = {
|
|
124
|
+
id: 'icon-registry',
|
|
125
|
+
title: 'Icon registry',
|
|
126
|
+
importPath: 'lucide-react',
|
|
127
|
+
usage: {
|
|
128
|
+
do: [
|
|
129
|
+
'size-4 inside buttons, menus and inline text; size-5 in section navs and toolbars.',
|
|
130
|
+
'Always aria-hidden next to a visible label, or aria-label on icon-only controls.',
|
|
131
|
+
'Color with semantic tokens only (text-muted-foreground, text-status-*-icon).',
|
|
132
|
+
'Icon-only actions use IconButton — it ships the focus ring, sizing and the aria-label contract.',
|
|
133
|
+
],
|
|
134
|
+
dont: [
|
|
135
|
+
'No emoji or font glyphs as icons — Lucide only.',
|
|
136
|
+
'Never convey status by icon color alone; pair with text or a label.',
|
|
137
|
+
'No hand-drawn SVGs when a Lucide icon exists.',
|
|
138
|
+
],
|
|
139
|
+
},
|
|
140
|
+
figmaNodeId: FIGMA_ICONS_NODE,
|
|
141
|
+
variants: [
|
|
142
|
+
{
|
|
143
|
+
id: 'registry',
|
|
144
|
+
title: 'registered icons',
|
|
145
|
+
render: () => <IconGrid />,
|
|
146
|
+
code: `export const metadata = { icon: 'shapes' }`,
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
id: 'component-usage',
|
|
150
|
+
title: 'usage in components',
|
|
151
|
+
render: () => {
|
|
152
|
+
const Sample = LUCIDE_ICON_REGISTRY.search ?? Object.values(LUCIDE_ICON_REGISTRY)[0]
|
|
153
|
+
return (
|
|
154
|
+
<div className="flex items-center gap-4">
|
|
155
|
+
<Sample aria-hidden className="size-4 text-muted-foreground" />
|
|
156
|
+
<Sample aria-hidden className="size-5 text-foreground" />
|
|
157
|
+
<Sample aria-hidden className="size-6 text-status-info-icon" />
|
|
158
|
+
</div>
|
|
159
|
+
)
|
|
160
|
+
},
|
|
161
|
+
code: `import { Search } from 'lucide-react'
|
|
162
|
+
|
|
163
|
+
<Search aria-hidden className="size-4 text-muted-foreground" />`,
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
export const entries: GalleryEntry[] = [iconRegistryEntry]
|