@open-mercato/ui 0.5.1-develop.2860.07af3a6a9d → 0.5.1-develop.2874.77704bccbd
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/AGENTS.md +204 -121
- package/dist/backend/AppShell.js +25 -28
- package/dist/backend/AppShell.js.map +2 -2
- package/dist/backend/ContextHelp.js +1 -1
- package/dist/backend/ContextHelp.js.map +1 -1
- package/dist/backend/CrudForm.js +12 -15
- package/dist/backend/CrudForm.js.map +2 -2
- package/dist/backend/DataTable.js +9 -10
- package/dist/backend/DataTable.js.map +2 -2
- package/dist/backend/FilterBar.js +6 -8
- package/dist/backend/FilterBar.js.map +2 -2
- package/dist/backend/FilterOverlay.js +10 -10
- package/dist/backend/FilterOverlay.js.map +2 -2
- package/dist/backend/FlashMessages.js +1 -1
- package/dist/backend/FlashMessages.js.map +2 -2
- package/dist/backend/JsonBuilder.js +6 -6
- package/dist/backend/JsonBuilder.js.map +1 -1
- package/dist/backend/NextStepCallout.js +1 -1
- package/dist/backend/NextStepCallout.js.map +1 -1
- package/dist/backend/PerspectiveSidebar.js +2 -2
- package/dist/backend/PerspectiveSidebar.js.map +2 -2
- package/dist/backend/ProfileDropdown.js +1 -1
- package/dist/backend/ProfileDropdown.js.map +1 -1
- package/dist/backend/RowActions.js +1 -1
- package/dist/backend/RowActions.js.map +1 -1
- package/dist/backend/UserMenu.js +2 -2
- package/dist/backend/UserMenu.js.map +1 -1
- package/dist/backend/WebhookSetupGuide.js +11 -11
- package/dist/backend/WebhookSetupGuide.js.map +2 -2
- package/dist/backend/charts/KpiCard.js +3 -3
- package/dist/backend/charts/KpiCard.js.map +1 -1
- package/dist/backend/columns/ColumnChooserPanel.js +1 -1
- package/dist/backend/columns/ColumnChooserPanel.js.map +2 -2
- package/dist/backend/custom-fields/FieldDefinitionsEditor.js +3 -3
- package/dist/backend/custom-fields/FieldDefinitionsEditor.js.map +2 -2
- package/dist/backend/dashboard/DashboardScreen.js +1 -1
- package/dist/backend/dashboard/DashboardScreen.js.map +1 -1
- package/dist/backend/date-range/DateRangeSelect.js +1 -1
- package/dist/backend/date-range/DateRangeSelect.js.map +1 -1
- package/dist/backend/date-range/InlineDateRangeSelect.js +1 -1
- package/dist/backend/date-range/InlineDateRangeSelect.js.map +1 -1
- package/dist/backend/detail/AccessDeniedMessage.js +1 -1
- package/dist/backend/detail/AccessDeniedMessage.js.map +1 -1
- package/dist/backend/detail/ActivitiesSection.js +5 -5
- package/dist/backend/detail/ActivitiesSection.js.map +1 -1
- package/dist/backend/detail/AddressEditor.js +3 -3
- package/dist/backend/detail/AddressEditor.js.map +2 -2
- package/dist/backend/detail/AddressTiles.js +3 -3
- package/dist/backend/detail/AddressTiles.js.map +2 -2
- package/dist/backend/detail/AttachmentMetadataDialog.js +1 -1
- package/dist/backend/detail/AttachmentMetadataDialog.js.map +1 -1
- package/dist/backend/detail/CustomDataSection.js +1 -1
- package/dist/backend/detail/CustomDataSection.js.map +1 -1
- package/dist/backend/detail/InlineEditors.js +5 -5
- package/dist/backend/detail/InlineEditors.js.map +1 -1
- package/dist/backend/detail/NotesSection.js +6 -6
- package/dist/backend/detail/NotesSection.js.map +1 -1
- package/dist/backend/detail/TagsSection.js +1 -1
- package/dist/backend/detail/TagsSection.js.map +1 -1
- package/dist/backend/devtools/UmesDevToolsPanel.js +6 -6
- package/dist/backend/devtools/UmesDevToolsPanel.js.map +2 -2
- package/dist/backend/devtools/components/ConflictWarnings.js +3 -3
- package/dist/backend/devtools/components/ConflictWarnings.js.map +2 -2
- package/dist/backend/devtools/components/EnricherTiming.js +2 -2
- package/dist/backend/devtools/components/EnricherTiming.js.map +2 -2
- package/dist/backend/devtools/components/EventFlow.js +5 -5
- package/dist/backend/devtools/components/EventFlow.js.map +2 -2
- package/dist/backend/devtools/components/ExtensionPointList.js +3 -3
- package/dist/backend/devtools/components/ExtensionPointList.js.map +2 -2
- package/dist/backend/devtools/components/InterceptorActivity.js +6 -6
- package/dist/backend/devtools/components/InterceptorActivity.js.map +2 -2
- package/dist/backend/forms/ActionsDropdown.js +1 -1
- package/dist/backend/forms/ActionsDropdown.js.map +1 -1
- package/dist/backend/forms/FormActionButtons.js +2 -3
- package/dist/backend/forms/FormActionButtons.js.map +2 -2
- package/dist/backend/indexes/PartialIndexBanner.js +8 -8
- package/dist/backend/indexes/PartialIndexBanner.js.map +2 -2
- package/dist/backend/inputs/ComboboxInput.js +1 -1
- package/dist/backend/inputs/ComboboxInput.js.map +2 -2
- package/dist/backend/inputs/DatePicker.js +3 -3
- package/dist/backend/inputs/DatePicker.js.map +1 -1
- package/dist/backend/inputs/DateTimePicker.js +3 -3
- package/dist/backend/inputs/DateTimePicker.js.map +1 -1
- package/dist/backend/inputs/EventSelect.js +1 -1
- package/dist/backend/inputs/EventSelect.js.map +2 -2
- package/dist/backend/inputs/LookupSelect.js +1 -1
- package/dist/backend/inputs/LookupSelect.js.map +1 -1
- package/dist/backend/inputs/SwitchableMarkdownInput.js +1 -1
- package/dist/backend/inputs/SwitchableMarkdownInput.js.map +1 -1
- package/dist/backend/inputs/TagsInput.js +2 -2
- package/dist/backend/inputs/TagsInput.js.map +2 -2
- package/dist/backend/inputs/TimeInput.js +1 -1
- package/dist/backend/inputs/TimeInput.js.map +1 -1
- package/dist/backend/inputs/TimePicker.js +3 -3
- package/dist/backend/inputs/TimePicker.js.map +1 -1
- package/dist/backend/messages/MessageObjectDetail.js +1 -1
- package/dist/backend/messages/MessageObjectDetail.js.map +1 -1
- package/dist/backend/messages/MessageObjectPreview.js +1 -1
- package/dist/backend/messages/MessageObjectPreview.js.map +1 -1
- package/dist/backend/messages/message-compose-form-groups.js +3 -3
- package/dist/backend/messages/message-compose-form-groups.js.map +1 -1
- package/dist/backend/notifications/NotificationCountBadge.js +1 -1
- package/dist/backend/notifications/NotificationCountBadge.js.map +2 -2
- package/dist/backend/notifications/NotificationPanel.js +3 -3
- package/dist/backend/notifications/NotificationPanel.js.map +1 -1
- package/dist/backend/progress/ProgressTopBar.js +4 -4
- package/dist/backend/progress/ProgressTopBar.js.map +2 -2
- package/dist/backend/schedule/ScheduleAgenda.js +1 -1
- package/dist/backend/schedule/ScheduleAgenda.js.map +2 -2
- package/dist/backend/schedule/ScheduleCalendar.js +1 -1
- package/dist/backend/schedule/ScheduleCalendar.js.map +1 -1
- package/dist/backend/schedule/ScheduleGrid.js +1 -1
- package/dist/backend/schedule/ScheduleGrid.js.map +2 -2
- package/dist/backend/version-history/VersionHistoryPanel.js +4 -4
- package/dist/backend/version-history/VersionHistoryPanel.js.map +2 -2
- package/dist/frontend/AuthFooter.js +1 -1
- package/dist/frontend/AuthFooter.js.map +1 -1
- package/dist/frontend/LanguageSwitcher.js +1 -1
- package/dist/frontend/LanguageSwitcher.js.map +1 -1
- package/dist/frontend/Layout.js +2 -2
- package/dist/frontend/Layout.js.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +2 -2
- package/dist/portal/PortalShell.js +15 -15
- package/dist/portal/PortalShell.js.map +2 -2
- package/dist/portal/components/PortalCard.js +2 -2
- package/dist/portal/components/PortalCard.js.map +2 -2
- package/dist/portal/components/PortalNotificationPanel.js +18 -18
- package/dist/portal/components/PortalNotificationPanel.js.map +2 -2
- package/dist/portal/components/PortalPageHeader.js +1 -1
- package/dist/portal/components/PortalPageHeader.js.map +2 -2
- package/dist/primitives/avatar.js +11 -1
- package/dist/primitives/avatar.js.map +2 -2
- package/dist/primitives/badge.js +1 -1
- package/dist/primitives/badge.js.map +1 -1
- package/dist/primitives/button.js +9 -5
- package/dist/primitives/button.js.map +2 -2
- package/dist/primitives/calendar.js +1 -1
- package/dist/primitives/calendar.js.map +1 -1
- package/dist/primitives/checkbox-field.js +63 -0
- package/dist/primitives/checkbox-field.js.map +7 -0
- package/dist/primitives/checkbox.js +31 -17
- package/dist/primitives/checkbox.js.map +2 -2
- package/dist/primitives/dialog.js +4 -4
- package/dist/primitives/dialog.js.map +1 -1
- package/dist/primitives/fancy-button.js +72 -0
- package/dist/primitives/fancy-button.js.map +7 -0
- package/dist/primitives/icon-button.js +20 -4
- package/dist/primitives/icon-button.js.map +2 -2
- package/dist/primitives/kbd.js +27 -0
- package/dist/primitives/kbd.js.map +7 -0
- package/dist/primitives/link-button.js +56 -0
- package/dist/primitives/link-button.js.map +7 -0
- package/dist/primitives/popover.js +1 -1
- package/dist/primitives/popover.js.map +1 -1
- package/dist/primitives/social-button.js +61 -0
- package/dist/primitives/social-button.js.map +7 -0
- package/dist/primitives/tabs.js +1 -1
- package/dist/primitives/tabs.js.map +1 -1
- package/dist/primitives/tag.js +45 -0
- package/dist/primitives/tag.js.map +7 -0
- package/dist/primitives/tooltip.js +1 -1
- package/dist/primitives/tooltip.js.map +1 -1
- package/package.json +3 -3
- package/src/backend/AppShell.tsx +25 -28
- package/src/backend/ContextHelp.tsx +1 -1
- package/src/backend/CrudForm.tsx +12 -15
- package/src/backend/DataTable.tsx +9 -10
- package/src/backend/FilterBar.tsx +6 -5
- package/src/backend/FilterOverlay.tsx +10 -10
- package/src/backend/FlashMessages.tsx +1 -1
- package/src/backend/JsonBuilder.tsx +6 -6
- package/src/backend/NextStepCallout.tsx +1 -1
- package/src/backend/PerspectiveSidebar.tsx +2 -2
- package/src/backend/ProfileDropdown.tsx +1 -1
- package/src/backend/RowActions.tsx +1 -1
- package/src/backend/UserMenu.tsx +2 -2
- package/src/backend/WebhookSetupGuide.tsx +11 -11
- package/src/backend/charts/KpiCard.tsx +3 -3
- package/src/backend/columns/ColumnChooserPanel.tsx +1 -1
- package/src/backend/custom-fields/FieldDefinitionsEditor.tsx +3 -3
- package/src/backend/dashboard/DashboardScreen.tsx +1 -1
- package/src/backend/date-range/DateRangeSelect.tsx +1 -1
- package/src/backend/date-range/InlineDateRangeSelect.tsx +1 -1
- package/src/backend/detail/AccessDeniedMessage.tsx +1 -1
- package/src/backend/detail/ActivitiesSection.tsx +5 -5
- package/src/backend/detail/AddressEditor.tsx +3 -3
- package/src/backend/detail/AddressTiles.tsx +3 -3
- package/src/backend/detail/AttachmentMetadataDialog.tsx +1 -1
- package/src/backend/detail/CustomDataSection.tsx +1 -1
- package/src/backend/detail/InlineEditors.tsx +5 -5
- package/src/backend/detail/NotesSection.tsx +6 -6
- package/src/backend/detail/TagsSection.tsx +1 -1
- package/src/backend/devtools/UmesDevToolsPanel.tsx +6 -6
- package/src/backend/devtools/components/ConflictWarnings.tsx +4 -4
- package/src/backend/devtools/components/EnricherTiming.tsx +2 -2
- package/src/backend/devtools/components/EventFlow.tsx +5 -5
- package/src/backend/devtools/components/ExtensionPointList.tsx +3 -3
- package/src/backend/devtools/components/InterceptorActivity.tsx +6 -6
- package/src/backend/forms/ActionsDropdown.tsx +1 -1
- package/src/backend/forms/FormActionButtons.tsx +4 -5
- package/src/backend/indexes/PartialIndexBanner.tsx +8 -8
- package/src/backend/inputs/ComboboxInput.tsx +1 -1
- package/src/backend/inputs/DatePicker.tsx +3 -3
- package/src/backend/inputs/DateTimePicker.tsx +3 -3
- package/src/backend/inputs/EventSelect.tsx +1 -1
- package/src/backend/inputs/LookupSelect.tsx +1 -1
- package/src/backend/inputs/SwitchableMarkdownInput.tsx +1 -1
- package/src/backend/inputs/TagsInput.tsx +2 -2
- package/src/backend/inputs/TimeInput.tsx +1 -1
- package/src/backend/inputs/TimePicker.tsx +3 -3
- package/src/backend/messages/MessageObjectDetail.tsx +1 -1
- package/src/backend/messages/MessageObjectPreview.tsx +1 -1
- package/src/backend/messages/message-compose-form-groups.tsx +3 -3
- package/src/backend/notifications/NotificationCountBadge.tsx +1 -1
- package/src/backend/notifications/NotificationPanel.tsx +3 -3
- package/src/backend/progress/ProgressTopBar.tsx +4 -4
- package/src/backend/schedule/ScheduleAgenda.tsx +1 -1
- package/src/backend/schedule/ScheduleCalendar.tsx +1 -1
- package/src/backend/schedule/ScheduleGrid.tsx +1 -1
- package/src/backend/version-history/VersionHistoryPanel.tsx +4 -4
- package/src/frontend/AuthFooter.tsx +1 -1
- package/src/frontend/LanguageSwitcher.tsx +1 -1
- package/src/frontend/Layout.tsx +2 -2
- package/src/index.ts +6 -1
- package/src/portal/PortalShell.tsx +15 -15
- package/src/portal/components/PortalCard.tsx +2 -2
- package/src/portal/components/PortalNotificationPanel.tsx +18 -18
- package/src/portal/components/PortalPageHeader.tsx +1 -1
- package/src/primitives/avatar.tsx +22 -0
- package/src/primitives/badge.tsx +1 -1
- package/src/primitives/button.tsx +12 -5
- package/src/primitives/calendar.tsx +1 -1
- package/src/primitives/checkbox-field.tsx +85 -0
- package/src/primitives/checkbox.tsx +44 -18
- package/src/primitives/dialog.tsx +4 -4
- package/src/primitives/fancy-button.tsx +89 -0
- package/src/primitives/icon-button.tsx +19 -2
- package/src/primitives/kbd.tsx +38 -0
- package/src/primitives/link-button.tsx +55 -0
- package/src/primitives/popover.tsx +1 -1
- package/src/primitives/social-button.tsx +80 -0
- package/src/primitives/tabs.tsx +1 -1
- package/src/primitives/tag.tsx +66 -0
- package/src/primitives/tooltip.tsx +1 -1
|
@@ -397,7 +397,7 @@ export function FieldDefinitionsEditor({
|
|
|
397
397
|
</div>
|
|
398
398
|
)}
|
|
399
399
|
{orderNotice?.dirty && (
|
|
400
|
-
<div className="sticky top-0 z-
|
|
400
|
+
<div className="sticky top-0 z-sticky -mt-1 -mb-1">
|
|
401
401
|
<div className="inline-flex items-center gap-2 text-xs px-2 py-1 rounded border bg-amber-50 text-amber-800 shadow-sm">
|
|
402
402
|
{orderNotice?.saving ? 'Saving order…' : (orderNotice?.message ?? 'Reordered — saving soon')}
|
|
403
403
|
</div>
|
|
@@ -906,7 +906,7 @@ const FieldDefinitionCard = React.memo(function FieldDefinitionCard({
|
|
|
906
906
|
>
|
|
907
907
|
<div>
|
|
908
908
|
<div className="font-medium text-foreground">{option.label}</div>
|
|
909
|
-
<div className="text-muted-foreground font-mono text-
|
|
909
|
+
<div className="text-muted-foreground font-mono text-overline">{option.value}</div>
|
|
910
910
|
</div>
|
|
911
911
|
<IconButton
|
|
912
912
|
variant="ghost"
|
|
@@ -1328,7 +1328,7 @@ const FieldDefinitionCard = React.memo(function FieldDefinitionCard({
|
|
|
1328
1328
|
<div>
|
|
1329
1329
|
<label className="text-xs font-medium">Group code</label>
|
|
1330
1330
|
<input
|
|
1331
|
-
className="mt-1 w-full rounded border px-2 py-1 text-sm font-mono disabled:cursor-not-allowed disabled:bg-muted/
|
|
1331
|
+
className="mt-1 w-full rounded border px-2 py-1 text-sm font-mono disabled:cursor-not-allowed disabled:bg-muted/50 disabled:text-muted-foreground"
|
|
1332
1332
|
value={groupDraft.code}
|
|
1333
1333
|
onChange={(event) => {
|
|
1334
1334
|
setGroupDraft((prev) => ({ ...prev, code: event.target.value }))
|
|
@@ -379,7 +379,7 @@ export function DashboardScreen() {
|
|
|
379
379
|
<InjectionSpot spotId={dashboardBeforeSpotId} context={injectionContext} />
|
|
380
380
|
|
|
381
381
|
{editing && availableWidgets.length > 0 && (
|
|
382
|
-
<div className="rounded-lg border border-dashed bg-muted/
|
|
382
|
+
<div className="rounded-lg border border-dashed bg-muted/50 p-4">
|
|
383
383
|
<div className="mb-2 text-sm font-medium text-muted-foreground">{t('dashboard.addWidget')}</div>
|
|
384
384
|
<div className="flex flex-wrap gap-2">
|
|
385
385
|
{availableWidgets.map((meta) => (
|
|
@@ -33,7 +33,7 @@ export function DateRangeSelect({
|
|
|
33
33
|
)}
|
|
34
34
|
<select
|
|
35
35
|
id={id}
|
|
36
|
-
className="w-full rounded-md border bg-background px-2 py-1 text-sm text-foreground focus:border-
|
|
36
|
+
className="w-full rounded-md border bg-background px-2 py-1 text-sm text-foreground focus-visible:border-ring focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"
|
|
37
37
|
value={value}
|
|
38
38
|
onChange={(e) => onChange(e.target.value as DateRangePreset)}
|
|
39
39
|
>
|
|
@@ -25,7 +25,7 @@ export function InlineDateRangeSelect({
|
|
|
25
25
|
return (
|
|
26
26
|
<div className={`relative inline-flex items-center ${className}`}>
|
|
27
27
|
<select
|
|
28
|
-
className="appearance-none rounded-md border border-border bg-background px-2 py-0.5 pr-6 text-xs text-foreground hover:border-primary/50 focus:border-
|
|
28
|
+
className="appearance-none rounded-md border border-border bg-background px-2 py-0.5 pr-6 text-xs text-foreground hover:border-primary/50 focus-visible:border-ring focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring cursor-pointer"
|
|
29
29
|
value={value}
|
|
30
30
|
onChange={(e) => onChange(e.target.value as DateRangePreset)}
|
|
31
31
|
title={displayLabel}
|
|
@@ -16,7 +16,7 @@ export function AccessDeniedMessage({ label, description, action, className, ico
|
|
|
16
16
|
return (
|
|
17
17
|
<div
|
|
18
18
|
className={cn(
|
|
19
|
-
'flex items-start gap-3 rounded border border-
|
|
19
|
+
'flex items-start gap-3 rounded border border-status-warning-border bg-status-warning-bg px-3 py-2 text-sm text-status-warning-text',
|
|
20
20
|
className
|
|
21
21
|
)}
|
|
22
22
|
role="alert"
|
|
@@ -177,7 +177,7 @@ function TimelineItemHeader({
|
|
|
177
177
|
return (
|
|
178
178
|
<div className={['flex items-start gap-3', className].filter(Boolean).join(' ')}>
|
|
179
179
|
{iconNode ? (
|
|
180
|
-
<span className={['inline-flex items-center justify-center rounded border border-border bg-muted/
|
|
180
|
+
<span className={['inline-flex items-center justify-center rounded border border-border bg-muted/50', wrapperSize].join(' ')}>
|
|
181
181
|
{iconNode}
|
|
182
182
|
</span>
|
|
183
183
|
) : null}
|
|
@@ -323,7 +323,7 @@ function ActivityForm({
|
|
|
323
323
|
typeof value === 'string' && value.length ? value : normalizedEntityOptions[0]?.id ?? ''
|
|
324
324
|
return (
|
|
325
325
|
<select
|
|
326
|
-
className="h-9 w-full rounded border border-muted-foreground/40 bg-background px-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-
|
|
326
|
+
className="h-9 w-full rounded border border-muted-foreground/40 bg-background px-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
327
327
|
value={currentValue}
|
|
328
328
|
onChange={(event) => setValue(event.target.value)}
|
|
329
329
|
>
|
|
@@ -348,7 +348,7 @@ function ActivityForm({
|
|
|
348
348
|
const currentValue = typeof value === 'string' ? value : ''
|
|
349
349
|
return (
|
|
350
350
|
<select
|
|
351
|
-
className="h-9 w-full rounded border border-muted-foreground/40 bg-background px-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-
|
|
351
|
+
className="h-9 w-full rounded border border-muted-foreground/40 bg-background px-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
352
352
|
value={currentValue}
|
|
353
353
|
onChange={(event) => setValue(event.target.value)}
|
|
354
354
|
>
|
|
@@ -410,7 +410,7 @@ function ActivityForm({
|
|
|
410
410
|
component: ({ value, setValue }) => (
|
|
411
411
|
<input
|
|
412
412
|
type="datetime-local"
|
|
413
|
-
className="w-full rounded-md border px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring"
|
|
413
|
+
className="w-full rounded-md border px-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
414
414
|
value={typeof value === 'string' ? value : ''}
|
|
415
415
|
onChange={(event) => setValue(event.target.value || '')}
|
|
416
416
|
onFocus={(event) => {
|
|
@@ -1120,7 +1120,7 @@ function ActivitiesSectionImpl<C = unknown>({
|
|
|
1120
1120
|
return (
|
|
1121
1121
|
<div
|
|
1122
1122
|
key={activity.id}
|
|
1123
|
-
className="group space-y-3 rounded-lg border bg-card p-4 transition hover:border-border/
|
|
1123
|
+
className="group space-y-3 rounded-lg border bg-card p-4 transition hover:border-border/70 cursor-pointer"
|
|
1124
1124
|
role="button"
|
|
1125
1125
|
tabIndex={0}
|
|
1126
1126
|
onClick={() => openEditDialog(activity)}
|
|
@@ -216,8 +216,8 @@ export function AddressEditor<C = unknown>({
|
|
|
216
216
|
|
|
217
217
|
const inputClass = (field: AddressEditorField) =>
|
|
218
218
|
[
|
|
219
|
-
'w-full rounded-md border px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring',
|
|
220
|
-
errors[field] ? 'border-red-500
|
|
219
|
+
'w-full rounded-md border px-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
|
|
220
|
+
errors[field] ? 'border-red-500 aria-invalid:ring-destructive' : 'border-input bg-background',
|
|
221
221
|
].join(' ')
|
|
222
222
|
|
|
223
223
|
return (
|
|
@@ -430,7 +430,7 @@ export function AddressEditor<C = unknown>({
|
|
|
430
430
|
value={countryQuery}
|
|
431
431
|
onChange={(evt) => setCountryQuery(evt.target.value)}
|
|
432
432
|
/>
|
|
433
|
-
<div className="max-h-64 overflow-auto rounded-md border border-border/
|
|
433
|
+
<div className="max-h-64 overflow-auto rounded-md border border-border/70">
|
|
434
434
|
<ul className="divide-y divide-border/50">
|
|
435
435
|
{filteredCountryOptions.map((option) => (
|
|
436
436
|
<li key={option.code}>
|
|
@@ -397,7 +397,7 @@ export function AddressTiles<C = unknown>({
|
|
|
397
397
|
(key: string) => (
|
|
398
398
|
<div
|
|
399
399
|
key={key}
|
|
400
|
-
className="rounded-lg border-2 border-dashed border-muted-foreground/50 bg-muted/
|
|
400
|
+
className="rounded-lg border-2 border-dashed border-muted-foreground/50 bg-muted/30 p-4 text-sm"
|
|
401
401
|
onKeyDown={(event) => {
|
|
402
402
|
if (!(event.metaKey || event.ctrlKey)) return
|
|
403
403
|
if (event.key !== 'Enter') return
|
|
@@ -514,7 +514,7 @@ export function AddressTiles<C = unknown>({
|
|
|
514
514
|
return (
|
|
515
515
|
<div
|
|
516
516
|
key={address.id}
|
|
517
|
-
className="group rounded-lg border border-border/
|
|
517
|
+
className="group rounded-lg border border-border/70 bg-card p-4 text-sm transition hover:border-border"
|
|
518
518
|
>
|
|
519
519
|
<div className="flex items-start justify-between gap-2">
|
|
520
520
|
<div className="space-y-1">
|
|
@@ -523,7 +523,7 @@ export function AddressTiles<C = unknown>({
|
|
|
523
523
|
{address.name ?? label('labelFallback', 'Address')}
|
|
524
524
|
</p>
|
|
525
525
|
{address.isPrimary ? (
|
|
526
|
-
<span className="rounded-full border border-border bg-muted px-2 py-0.5 text-
|
|
526
|
+
<span className="rounded-full border border-border bg-muted px-2 py-0.5 text-overline font-semibold uppercase">
|
|
527
527
|
{label('primaryBadge', 'Primary')}
|
|
528
528
|
</span>
|
|
529
529
|
) : null}
|
|
@@ -634,7 +634,7 @@ export function AttachmentMetadataDialog({ open, onOpenChange, item, availableTa
|
|
|
634
634
|
{loadError}
|
|
635
635
|
</div>
|
|
636
636
|
) : null}
|
|
637
|
-
<div className="rounded border border-border/
|
|
637
|
+
<div className="rounded border border-border/70 bg-muted/30 px-3 py-2">
|
|
638
638
|
<div className="text-xs font-semibold text-muted-foreground">
|
|
639
639
|
{t('attachments.library.metadata.extractedTitle', 'Extracted text')}
|
|
640
640
|
</div>
|
|
@@ -630,7 +630,7 @@ function CustomDataSectionImpl({
|
|
|
630
630
|
) : (
|
|
631
631
|
<div
|
|
632
632
|
className={cn(
|
|
633
|
-
'rounded-lg border bg-muted/
|
|
633
|
+
'rounded-lg border bg-muted/30 p-3 sm:p-4 space-y-2 sm:space-y-3 transition hover:border-border/70 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
|
|
634
634
|
hasFields && !loading ? 'cursor-pointer' : 'cursor-default',
|
|
635
635
|
)}
|
|
636
636
|
role={hasFields && !loading ? 'button' : undefined}
|
|
@@ -131,7 +131,7 @@ export function InlineTextEditor({
|
|
|
131
131
|
const containerClasses = cn(
|
|
132
132
|
'group overflow-hidden',
|
|
133
133
|
variant === 'muted'
|
|
134
|
-
? 'relative rounded border bg-muted/
|
|
134
|
+
? 'relative rounded border bg-muted/30 p-3'
|
|
135
135
|
: variant === 'plain'
|
|
136
136
|
? 'relative flex items-center gap-3 rounded-none border-0 p-0'
|
|
137
137
|
: 'rounded-lg border p-4',
|
|
@@ -324,7 +324,7 @@ export function InlineTextEditor({
|
|
|
324
324
|
/>
|
|
325
325
|
) : (
|
|
326
326
|
<input
|
|
327
|
-
className="w-full rounded-md border px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring"
|
|
327
|
+
className="w-full rounded-md border px-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
328
328
|
value={draft}
|
|
329
329
|
onChange={(event) => {
|
|
330
330
|
if (error) setError(null)
|
|
@@ -554,7 +554,7 @@ export function InlineMultilineEditor({
|
|
|
554
554
|
|
|
555
555
|
const containerClasses = cn(
|
|
556
556
|
'group rounded-lg border p-4',
|
|
557
|
-
variant === 'muted' ? 'bg-muted/
|
|
557
|
+
variant === 'muted' ? 'bg-muted/30' : null,
|
|
558
558
|
activateOnClick && !editing ? 'cursor-pointer' : null,
|
|
559
559
|
containerClassName ?? null,
|
|
560
560
|
)
|
|
@@ -638,7 +638,7 @@ export function InlineMultilineEditor({
|
|
|
638
638
|
<Textarea
|
|
639
639
|
ref={textareaRef}
|
|
640
640
|
rows={3}
|
|
641
|
-
className="w-full resize-none overflow-hidden rounded-md border px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring"
|
|
641
|
+
className="w-full resize-none overflow-hidden rounded-md border px-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
642
642
|
placeholder={placeholder}
|
|
643
643
|
value={draft}
|
|
644
644
|
onChange={(event) => {
|
|
@@ -827,7 +827,7 @@ export function InlineSelectEditor({
|
|
|
827
827
|
renderEditor({ value: draft, onChange: setDraft })
|
|
828
828
|
) : (
|
|
829
829
|
<select
|
|
830
|
-
className="w-full rounded-md border px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring"
|
|
830
|
+
className="w-full rounded-md border px-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
831
831
|
value={draft}
|
|
832
832
|
onChange={(event) => setDraft(event.target.value)}
|
|
833
833
|
>
|
|
@@ -157,7 +157,7 @@ function TimelineItemHeader({
|
|
|
157
157
|
return (
|
|
158
158
|
<div className={['flex items-start gap-3', className].filter(Boolean).join(' ')}>
|
|
159
159
|
{icon && renderIcon ? (
|
|
160
|
-
<span className={['inline-flex items-center justify-center rounded border border-border bg-muted/
|
|
160
|
+
<span className={['inline-flex items-center justify-center rounded border border-border bg-muted/50', wrapperSize].join(' ')}>
|
|
161
161
|
{renderIcon(icon, iconSizeClass)}
|
|
162
162
|
</span>
|
|
163
163
|
) : null}
|
|
@@ -948,7 +948,7 @@ function NotesSectionImpl<C = unknown>({
|
|
|
948
948
|
<div
|
|
949
949
|
className={[
|
|
950
950
|
'overflow-hidden rounded-xl transition-all duration-300 ease-out',
|
|
951
|
-
composerOpen ? 'max-h-[1200px] bg-muted/
|
|
951
|
+
composerOpen ? 'max-h-[1200px] bg-muted/30 p-4 opacity-100' : 'pointer-events-none max-h-0 p-0 opacity-0',
|
|
952
952
|
].join(' ')}
|
|
953
953
|
aria-hidden={!composerOpen}
|
|
954
954
|
>
|
|
@@ -1015,7 +1015,7 @@ function NotesSectionImpl<C = unknown>({
|
|
|
1015
1015
|
</label>
|
|
1016
1016
|
<select
|
|
1017
1017
|
id="note-entity-select"
|
|
1018
|
-
className="h-9 rounded border border-muted-foreground/40 bg-background px-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-
|
|
1018
|
+
className="h-9 rounded border border-muted-foreground/40 bg-background px-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
1019
1019
|
value={selectedEntityId}
|
|
1020
1020
|
onChange={(event) => setSelectedEntityId(event.target.value)}
|
|
1021
1021
|
disabled={isSubmitting || isLoading || !normalizedEntityOptions.length}
|
|
@@ -1038,7 +1038,7 @@ function NotesSectionImpl<C = unknown>({
|
|
|
1038
1038
|
</label>
|
|
1039
1039
|
<select
|
|
1040
1040
|
id="note-deal-select"
|
|
1041
|
-
className="h-9 rounded border border-muted-foreground/40 bg-background px-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-
|
|
1041
|
+
className="h-9 rounded border border-muted-foreground/40 bg-background px-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
1042
1042
|
value={selectedDealId}
|
|
1043
1043
|
onChange={(event) => setSelectedDealId(event.target.value)}
|
|
1044
1044
|
disabled={isSubmitting || isLoading}
|
|
@@ -1072,7 +1072,7 @@ function NotesSectionImpl<C = unknown>({
|
|
|
1072
1072
|
<div className="flex flex-wrap items-center justify-between gap-3 rounded-lg border border-dashed border-muted-foreground/40 px-3 py-2">
|
|
1073
1073
|
<div className="flex flex-wrap items-center gap-3 text-sm">
|
|
1074
1074
|
{draftIcon && renderIcon ? (
|
|
1075
|
-
<span className="inline-flex h-7 w-7 items-center justify-center rounded border border-border bg-muted/
|
|
1075
|
+
<span className="inline-flex h-7 w-7 items-center justify-center rounded border border-border bg-muted/50">
|
|
1076
1076
|
{renderIcon(draftIcon, 'h-4 w-4')}
|
|
1077
1077
|
</span>
|
|
1078
1078
|
) : null}
|
|
@@ -1231,7 +1231,7 @@ function NotesSectionImpl<C = unknown>({
|
|
|
1231
1231
|
rows={3}
|
|
1232
1232
|
textareaRef={contentTextareaRef}
|
|
1233
1233
|
onTextareaInput={(event) => adjustTextareaSize(event.currentTarget)}
|
|
1234
|
-
textareaClassName="w-full resize-none overflow-hidden rounded-md border border-border px-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-
|
|
1234
|
+
textareaClassName="w-full resize-none overflow-hidden rounded-md border border-border px-3 py-2 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
1235
1235
|
editorWrapperClassName="w-full rounded-md border border-muted-foreground/20 bg-background p-2"
|
|
1236
1236
|
remarkPlugins={markdownPlugins}
|
|
1237
1237
|
/>
|
|
@@ -412,7 +412,7 @@ function TagsSectionImpl({
|
|
|
412
412
|
</div>
|
|
413
413
|
) : (
|
|
414
414
|
<div
|
|
415
|
-
className="group/tags relative rounded-lg border bg-muted/
|
|
415
|
+
className="group/tags relative rounded-lg border bg-muted/30 p-4 transition-colors hover:border-primary/40 focus-visible:border-primary focus-visible:outline-none"
|
|
416
416
|
role={disableInteraction ? undefined : 'button'}
|
|
417
417
|
tabIndex={disableInteraction ? -1 : 0}
|
|
418
418
|
onClick={disableInteraction ? undefined : startEditing}
|
|
@@ -46,18 +46,18 @@ export function UmesDevToolsPanel() {
|
|
|
46
46
|
const hasErrors = data.conflicts.some((c) => c.severity === 'error')
|
|
47
47
|
|
|
48
48
|
return (
|
|
49
|
-
<div className="fixed inset-y-0 right-0 z-
|
|
49
|
+
<div className="fixed inset-y-0 right-0 z-top flex w-[440px] flex-col border-l bg-background text-foreground shadow-lg"
|
|
50
50
|
style={{ fontSize: '13px' }}
|
|
51
51
|
>
|
|
52
52
|
{/* Header */}
|
|
53
53
|
<div className="flex shrink-0 items-center justify-between border-b bg-muted/50 px-4 py-2.5">
|
|
54
54
|
<div className="flex items-center gap-2">
|
|
55
55
|
<strong className="text-sm">UMES DevTools</strong>
|
|
56
|
-
<span className="rounded bg-
|
|
56
|
+
<span className="rounded bg-status-info-bg px-1.5 py-px text-overline font-semibold text-status-info-text">
|
|
57
57
|
{data.extensions.length} ext
|
|
58
58
|
</span>
|
|
59
59
|
{conflictCount > 0 && (
|
|
60
|
-
<span className={`rounded px-1.5 py-px text-
|
|
60
|
+
<span className={`rounded px-1.5 py-px text-overline font-semibold ${hasErrors ? 'bg-status-error-bg text-status-error-text' : 'bg-status-warning-bg text-status-warning-text'}`}>
|
|
61
61
|
{conflictCount} conflict{conflictCount !== 1 ? 's' : ''}
|
|
62
62
|
</span>
|
|
63
63
|
)}
|
|
@@ -67,7 +67,7 @@ export function UmesDevToolsPanel() {
|
|
|
67
67
|
type="button"
|
|
68
68
|
variant="outline"
|
|
69
69
|
size="sm"
|
|
70
|
-
className="h-auto px-2 py-0.5 text-
|
|
70
|
+
className="h-auto px-2 py-0.5 text-overline"
|
|
71
71
|
onClick={() => data.refresh()}
|
|
72
72
|
>
|
|
73
73
|
Refresh
|
|
@@ -92,7 +92,7 @@ export function UmesDevToolsPanel() {
|
|
|
92
92
|
type="button"
|
|
93
93
|
variant="ghost"
|
|
94
94
|
size="sm"
|
|
95
|
-
className={`h-auto flex-1 rounded-none border-b-2 px-1 py-2 text-
|
|
95
|
+
className={`h-auto flex-1 rounded-none border-b-2 px-1 py-2 text-overline hover:bg-transparent ${
|
|
96
96
|
activeTab === tab.id
|
|
97
97
|
? 'border-primary font-semibold text-primary'
|
|
98
98
|
: 'border-transparent text-muted-foreground'
|
|
@@ -114,7 +114,7 @@ export function UmesDevToolsPanel() {
|
|
|
114
114
|
</div>
|
|
115
115
|
|
|
116
116
|
{/* Footer */}
|
|
117
|
-
<div className="shrink-0 border-t bg-muted/50 px-4 py-1.5 text-center text-
|
|
117
|
+
<div className="shrink-0 border-t bg-muted/50 px-4 py-1.5 text-center text-overline text-muted-foreground">
|
|
118
118
|
Ctrl+Shift+U to toggle | Dev mode only
|
|
119
119
|
</div>
|
|
120
120
|
</div>
|
|
@@ -5,7 +5,7 @@ import type { UmesConflict } from '@open-mercato/shared/lib/umes/devtools-types'
|
|
|
5
5
|
export function ConflictWarnings({ conflicts }: { conflicts: UmesConflict[] }) {
|
|
6
6
|
if (conflicts.length === 0) {
|
|
7
7
|
return (
|
|
8
|
-
<p className="text-xs italic text-
|
|
8
|
+
<p className="text-xs italic text-status-success-text">
|
|
9
9
|
No conflicts detected
|
|
10
10
|
</p>
|
|
11
11
|
)
|
|
@@ -18,15 +18,15 @@ export function ConflictWarnings({ conflicts }: { conflicts: UmesConflict[] }) {
|
|
|
18
18
|
key={idx}
|
|
19
19
|
className={`mb-1.5 rounded border-l-[3px] p-2 text-xs ${
|
|
20
20
|
conflict.severity === 'error'
|
|
21
|
-
? 'border-l-
|
|
22
|
-
: 'border-l-
|
|
21
|
+
? 'border-l-status-error-border bg-status-error-bg'
|
|
22
|
+
: 'border-l-status-warning-border bg-status-warning-bg'
|
|
23
23
|
}`}
|
|
24
24
|
>
|
|
25
25
|
<div className="mb-0.5 font-semibold">
|
|
26
26
|
{conflict.severity === 'error' ? 'Error' : 'Warning'}: {conflict.type}
|
|
27
27
|
</div>
|
|
28
28
|
<div className="text-foreground/80">{conflict.message}</div>
|
|
29
|
-
<div className="mt-0.5 text-
|
|
29
|
+
<div className="mt-0.5 text-overline text-muted-foreground">
|
|
30
30
|
Modules: {conflict.moduleIds.join(', ')} | Target: {conflict.target}
|
|
31
31
|
</div>
|
|
32
32
|
</div>
|
|
@@ -26,7 +26,7 @@ export function EnricherTiming({ entries }: { entries: EnricherTimingEntry[] })
|
|
|
26
26
|
{recent.map((entry, idx) => {
|
|
27
27
|
const classes = getTimingClasses(entry.durationMs)
|
|
28
28
|
return (
|
|
29
|
-
<div key={idx} className="border-b border-border/
|
|
29
|
+
<div key={idx} className="border-b border-border/70 py-1 text-xs">
|
|
30
30
|
<div className="mb-0.5 flex justify-between">
|
|
31
31
|
<span className="font-medium">{entry.enricherId}</span>
|
|
32
32
|
<span className={`font-mono font-semibold ${classes.text}`}>
|
|
@@ -39,7 +39,7 @@ export function EnricherTiming({ entries }: { entries: EnricherTimingEntry[] })
|
|
|
39
39
|
style={{ width: getTimingBarWidth(entry.durationMs, maxMs) }}
|
|
40
40
|
/>
|
|
41
41
|
</div>
|
|
42
|
-
<div className="mt-px text-
|
|
42
|
+
<div className="mt-px text-overline text-muted-foreground">
|
|
43
43
|
{entry.targetEntity} | {entry.moduleId}
|
|
44
44
|
</div>
|
|
45
45
|
</div>
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
import type { EventFlowEntry } from '@open-mercato/shared/lib/umes/devtools-types'
|
|
4
4
|
|
|
5
5
|
const RESULT_CLASSES: Record<string, { text: string; bg: string }> = {
|
|
6
|
-
allowed: { text: 'text-
|
|
7
|
-
blocked: { text: 'text-
|
|
8
|
-
error: { text: 'text-
|
|
6
|
+
allowed: { text: 'text-status-success-icon', bg: 'bg-status-success-bg' },
|
|
7
|
+
blocked: { text: 'text-status-error-icon', bg: 'bg-status-error-bg' },
|
|
8
|
+
error: { text: 'text-status-warning-icon', bg: 'bg-status-warning-bg' },
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
export function EventFlow({ entries }: { entries: EventFlowEntry[] }) {
|
|
@@ -30,11 +30,11 @@ export function EventFlow({ entries }: { entries: EventFlowEntry[] }) {
|
|
|
30
30
|
>
|
|
31
31
|
<div>
|
|
32
32
|
<span className="font-medium">{entry.eventName}</span>
|
|
33
|
-
<span className="ml-1.5 text-
|
|
33
|
+
<span className="ml-1.5 text-overline text-muted-foreground">
|
|
34
34
|
{entry.widgetId}
|
|
35
35
|
</span>
|
|
36
36
|
</div>
|
|
37
|
-
<span className={`text-
|
|
37
|
+
<span className={`text-overline font-semibold ${classes.text}`}>
|
|
38
38
|
{entry.result}
|
|
39
39
|
</span>
|
|
40
40
|
</div>
|
|
@@ -35,16 +35,16 @@ export function ExtensionPointList({ extensions }: { extensions: UmesExtensionIn
|
|
|
35
35
|
{items.map((ext, idx) => (
|
|
36
36
|
<div
|
|
37
37
|
key={`${ext.id}-${idx}`}
|
|
38
|
-
className="flex items-center justify-between border-b border-border/
|
|
38
|
+
className="flex items-center justify-between border-b border-border/70 py-1 text-xs"
|
|
39
39
|
>
|
|
40
40
|
<div>
|
|
41
41
|
<span className="font-medium">{ext.id}</span>
|
|
42
42
|
<span className="ml-1.5 text-muted-foreground">[{ext.moduleId}]</span>
|
|
43
43
|
</div>
|
|
44
44
|
<div className="flex items-center gap-2">
|
|
45
|
-
<span className="text-
|
|
45
|
+
<span className="text-overline text-muted-foreground">{ext.target}</span>
|
|
46
46
|
{ext.priority !== 0 && (
|
|
47
|
-
<span className="rounded bg-muted px-1.5 py-px text-
|
|
47
|
+
<span className="rounded bg-muted px-1.5 py-px text-overline font-semibold">
|
|
48
48
|
P{ext.priority}
|
|
49
49
|
</span>
|
|
50
50
|
)}
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
import type { InterceptorActivityEntry } from '@open-mercato/shared/lib/umes/devtools-types'
|
|
4
4
|
|
|
5
5
|
const RESULT_CLASSES: Record<string, { text: string; bg: string }> = {
|
|
6
|
-
allowed: { text: 'text-
|
|
7
|
-
blocked: { text: 'text-
|
|
8
|
-
modified: { text: 'text-
|
|
6
|
+
allowed: { text: 'text-status-success-icon', bg: 'bg-status-success-bg' },
|
|
7
|
+
blocked: { text: 'text-status-error-icon', bg: 'bg-status-error-bg' },
|
|
8
|
+
modified: { text: 'text-status-warning-icon', bg: 'bg-status-warning-bg' },
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
export function InterceptorActivity({ entries }: { entries: InterceptorActivityEntry[] }) {
|
|
@@ -27,16 +27,16 @@ export function InterceptorActivity({ entries }: { entries: InterceptorActivityE
|
|
|
27
27
|
<div key={idx} className={`mb-1 rounded p-1.5 px-2 text-xs ${classes.bg}`}>
|
|
28
28
|
<div className="flex items-center justify-between">
|
|
29
29
|
<span className="font-medium">{entry.interceptorId}</span>
|
|
30
|
-
<span className={`text-
|
|
30
|
+
<span className={`text-overline font-semibold uppercase ${classes.text}`}>
|
|
31
31
|
{entry.result}
|
|
32
32
|
</span>
|
|
33
33
|
</div>
|
|
34
|
-
<div className="mt-0.5 text-
|
|
34
|
+
<div className="mt-0.5 text-overline text-muted-foreground">
|
|
35
35
|
{entry.method} {entry.route} | {entry.durationMs}ms
|
|
36
36
|
{entry.statusCode ? ` | ${entry.statusCode}` : ''}
|
|
37
37
|
</div>
|
|
38
38
|
{entry.message && (
|
|
39
|
-
<div className="mt-px text-
|
|
39
|
+
<div className="mt-px text-overline text-muted-foreground/70">
|
|
40
40
|
{entry.message}
|
|
41
41
|
</div>
|
|
42
42
|
)}
|
|
@@ -154,7 +154,7 @@ export function ActionsDropdown({
|
|
|
154
154
|
<div
|
|
155
155
|
ref={menuRef}
|
|
156
156
|
role="menu"
|
|
157
|
-
className="fixed w-52 rounded-md border bg-background p-1 shadow-md focus:outline-none z-
|
|
157
|
+
className="fixed w-52 rounded-md border bg-background p-1 shadow-md focus-visible:outline-none z-dropdown"
|
|
158
158
|
onMouseEnter={handleMouseEnter}
|
|
159
159
|
onMouseLeave={handleMouseLeave}
|
|
160
160
|
style={{
|
|
@@ -65,10 +65,9 @@ export function FormActionButtons({
|
|
|
65
65
|
{showDelete ? (
|
|
66
66
|
<Button
|
|
67
67
|
type="button"
|
|
68
|
-
variant="outline"
|
|
68
|
+
variant="destructive-outline"
|
|
69
69
|
onClick={onDelete}
|
|
70
70
|
disabled={isDeleting}
|
|
71
|
-
className="text-red-600 border-red-200 hover:bg-red-50 rounded"
|
|
72
71
|
>
|
|
73
72
|
{isDeleting ? (
|
|
74
73
|
<Loader2 className="size-4 mr-2 animate-spin" />
|
|
@@ -79,9 +78,9 @@ export function FormActionButtons({
|
|
|
79
78
|
</Button>
|
|
80
79
|
) : null}
|
|
81
80
|
{cancelHref ? (
|
|
82
|
-
<
|
|
83
|
-
{resolvedCancelLabel}
|
|
84
|
-
</
|
|
81
|
+
<Button asChild variant="outline">
|
|
82
|
+
<Link href={cancelHref}>{resolvedCancelLabel}</Link>
|
|
83
|
+
</Button>
|
|
85
84
|
) : null}
|
|
86
85
|
{submit ? (
|
|
87
86
|
<Button
|
|
@@ -33,27 +33,27 @@ export function PartialIndexBanner() {
|
|
|
33
33
|
const hasExcessIndexedRows = hasCounts && indexed > base
|
|
34
34
|
|
|
35
35
|
return (
|
|
36
|
-
<div className="mb-4 flex flex-col gap-3 rounded-md border border-
|
|
36
|
+
<div className="mb-4 flex flex-col gap-3 rounded-md border border-status-warning-border bg-status-warning-bg px-3 py-3 text-sm text-status-warning-text md:flex-row md:items-center md:justify-between">
|
|
37
37
|
<div className="flex flex-col gap-2 text-sm">
|
|
38
|
-
<div className="flex items-center gap-2 font-medium text-
|
|
38
|
+
<div className="flex items-center gap-2 font-medium text-status-warning-text">
|
|
39
39
|
<AlertTriangle className="size-4" aria-hidden="true" />
|
|
40
40
|
<span>{t('query_index.banner.partial_title')}</span>
|
|
41
41
|
</div>
|
|
42
|
-
<p className="text-
|
|
42
|
+
<p className="text-status-warning-text">
|
|
43
43
|
{t('query_index.banner.partial_description')}
|
|
44
44
|
</p>
|
|
45
|
-
<p className="text-xs text-
|
|
45
|
+
<p className="text-xs text-status-warning-text">
|
|
46
46
|
{t('query_index.banner.partial_entity', { entity: entityLabel })}
|
|
47
47
|
</p>
|
|
48
48
|
{hasCounts && (
|
|
49
|
-
<p className="text-xs text-
|
|
49
|
+
<p className="text-xs text-status-warning-text">
|
|
50
50
|
{hasExcessIndexedRows
|
|
51
51
|
? t('query_index.banner.partial_counts_excess', { indexed, total: base })
|
|
52
52
|
: t('query_index.banner.partial_counts', { indexed, total: base })}
|
|
53
53
|
</p>
|
|
54
54
|
)}
|
|
55
55
|
{warning.scope === 'global' && (
|
|
56
|
-
<p className="text-xs text-
|
|
56
|
+
<p className="text-xs text-status-warning-text">
|
|
57
57
|
{t('query_index.banner.partial_global_note')}
|
|
58
58
|
</p>
|
|
59
59
|
)}
|
|
@@ -63,7 +63,7 @@ export function PartialIndexBanner() {
|
|
|
63
63
|
asChild
|
|
64
64
|
variant="outline"
|
|
65
65
|
size="sm"
|
|
66
|
-
className="border-
|
|
66
|
+
className="border-status-warning-border text-status-warning-text hover:bg-status-warning-bg"
|
|
67
67
|
>
|
|
68
68
|
<Link href={manageIndexesHref}>
|
|
69
69
|
{t('query_index.banner.manage_indexes')}
|
|
@@ -74,7 +74,7 @@ export function PartialIndexBanner() {
|
|
|
74
74
|
size="sm"
|
|
75
75
|
type="button"
|
|
76
76
|
onClick={() => dismissPartialIndexWarning()}
|
|
77
|
-
className="text-
|
|
77
|
+
className="text-status-warning-text hover:bg-status-warning-bg"
|
|
78
78
|
aria-label={t('query_index.banner.dismiss')}
|
|
79
79
|
>
|
|
80
80
|
<X className="mr-1 size-4" aria-hidden="true" />
|
|
@@ -238,7 +238,7 @@ export function ComboboxInput({
|
|
|
238
238
|
/>
|
|
239
239
|
|
|
240
240
|
{showSuggestions && !disabled && (loading || filteredSuggestions.length > 0) && (
|
|
241
|
-
<div className="absolute z-
|
|
241
|
+
<div className="absolute z-dropdown w-full mt-1 rounded border bg-popover shadow-lg max-h-48 sm:max-h-60 overflow-auto">
|
|
242
242
|
{loading && touched ? (
|
|
243
243
|
<div className="px-3 py-2 text-xs text-muted-foreground">Loading suggestions…</div>
|
|
244
244
|
) : (
|
|
@@ -111,7 +111,7 @@ export function DatePicker({
|
|
|
111
111
|
className={cn(
|
|
112
112
|
'w-full h-9 flex items-center gap-2 rounded border px-3 text-sm text-left',
|
|
113
113
|
'bg-background transition-colors',
|
|
114
|
-
'focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-1',
|
|
114
|
+
'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1',
|
|
115
115
|
'disabled:bg-muted disabled:text-muted-foreground disabled:cursor-not-allowed',
|
|
116
116
|
readOnly && 'cursor-default opacity-70',
|
|
117
117
|
!formattedValue && 'text-muted-foreground',
|
|
@@ -140,7 +140,7 @@ export function DatePicker({
|
|
|
140
140
|
<button
|
|
141
141
|
type="button"
|
|
142
142
|
onClick={handleToday}
|
|
143
|
-
className="text-sm text-primary hover:underline focus:outline-none"
|
|
143
|
+
className="text-sm text-primary hover:underline focus-visible:outline-none"
|
|
144
144
|
>
|
|
145
145
|
{todayText}
|
|
146
146
|
</button>
|
|
@@ -149,7 +149,7 @@ export function DatePicker({
|
|
|
149
149
|
<button
|
|
150
150
|
type="button"
|
|
151
151
|
onClick={handleClear}
|
|
152
|
-
className="text-sm text-muted-foreground hover:text-foreground hover:underline focus:outline-none ml-auto"
|
|
152
|
+
className="text-sm text-muted-foreground hover:text-foreground hover:underline focus-visible:outline-none ml-auto"
|
|
153
153
|
>
|
|
154
154
|
{clearText}
|
|
155
155
|
</button>
|