@proveanything/smartlinks-utils-ui 1.13.8 → 1.13.13

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 (47) hide show
  1. package/README.md +6 -6
  2. package/dist/ErrorBoundary-J9iKgF_H.d.ts +40 -0
  3. package/dist/{chunk-OTJV62XV.js → chunk-5ZQT2GGU.js} +5 -5
  4. package/dist/chunk-5ZQT2GGU.js.map +1 -0
  5. package/dist/{chunk-4LHF5JB7.js → chunk-DH5HG5DW.js} +15 -6
  6. package/dist/chunk-DH5HG5DW.js.map +1 -0
  7. package/dist/{chunk-E3GQ6LNZ.js → chunk-I3T36FSI.js} +528 -49
  8. package/dist/chunk-I3T36FSI.js.map +1 -0
  9. package/dist/{chunk-7UBXTFZQ.js → chunk-JNCRSL2H.js} +13 -12
  10. package/dist/chunk-JNCRSL2H.js.map +1 -0
  11. package/dist/{chunk-JMCV6FOW.js → chunk-WVCNIX7N.js} +3 -3
  12. package/dist/{chunk-JMCV6FOW.js.map → chunk-WVCNIX7N.js.map} +1 -1
  13. package/dist/{chunk-3RRHM4LP.js → chunk-XASZS7EA.js} +131 -4
  14. package/dist/chunk-XASZS7EA.js.map +1 -0
  15. package/dist/components/AssetPicker/index.css +34 -0
  16. package/dist/components/AssetPicker/index.css.map +1 -1
  17. package/dist/components/AssetPicker/index.js +1 -1
  18. package/dist/components/ConditionsEditor/index.css +34 -0
  19. package/dist/components/ConditionsEditor/index.css.map +1 -1
  20. package/dist/components/ConditionsEditor/index.d.ts +2 -2
  21. package/dist/components/ConditionsEditor/index.js +2 -2
  22. package/dist/components/FacetRuleEditor/index.d.ts +1 -1
  23. package/dist/components/FacetRuleEditor/index.js +2 -2
  24. package/dist/components/FontPicker/index.css +34 -0
  25. package/dist/components/FontPicker/index.css.map +1 -1
  26. package/dist/components/FontPicker/index.js +1 -1
  27. package/dist/components/IconPicker/index.css +34 -0
  28. package/dist/components/IconPicker/index.css.map +1 -1
  29. package/dist/components/LinkPicker/index.css +34 -0
  30. package/dist/components/LinkPicker/index.css.map +1 -1
  31. package/dist/components/RecordsAdmin/index.css +34 -0
  32. package/dist/components/RecordsAdmin/index.css.map +1 -1
  33. package/dist/components/RecordsAdmin/index.d.ts +1 -0
  34. package/dist/components/RecordsAdmin/index.js +15 -11
  35. package/dist/components/RecordsAdmin/index.js.map +1 -1
  36. package/dist/index.css +34 -0
  37. package/dist/index.css.map +1 -1
  38. package/dist/index.d.ts +2 -1
  39. package/dist/index.js +7 -7
  40. package/dist/index.js.map +1 -1
  41. package/dist/{types-a2DdgZ2H.d.ts → types-BLqki3Zy.d.ts} +11 -0
  42. package/package.json +3 -3
  43. package/dist/chunk-3RRHM4LP.js.map +0 -1
  44. package/dist/chunk-4LHF5JB7.js.map +0 -1
  45. package/dist/chunk-7UBXTFZQ.js.map +0 -1
  46. package/dist/chunk-E3GQ6LNZ.js.map +0 -1
  47. package/dist/chunk-OTJV62XV.js.map +0 -1
package/dist/index.d.ts CHANGED
@@ -2,12 +2,13 @@ export { g as ASSET_MIME_FILTERS, A as AssetItem, h as AssetMimeFilter, a as Ass
2
2
  import * as react_jsx_runtime from 'react/jsx-runtime';
3
3
  import { ReactNode } from 'react';
4
4
  export { ConditionsEditor } from './components/ConditionsEditor/index.js';
5
- export { C as Condition, a as ConditionGroup, b as ConditionType, c as ConditionTypeMeta, d as ConditionsEditorProps, S as SelectOption, V as VersionOption } from './types-a2DdgZ2H.js';
5
+ export { C as Condition, a as ConditionGroup, b as ConditionType, c as ConditionTypeMeta, d as ConditionsEditorProps, S as SelectOption, V as VersionOption } from './types-BLqki3Zy.js';
6
6
  export { FacetRuleEditor, FacetRuleEditorProps } from './components/FacetRuleEditor/index.js';
7
7
  export { AppLinkTarget, DeepLinkTarget, DiscoveredApp, ExternalLinkTarget, LinkKind, LinkOpenTarget, LinkPicker, LinkPickerProps, LinkTarget, LinkableEntry, ResolveLinkContext, ResolvedLink, UseLinkTargetsOptions, UseLinkTargetsReturn, resolveLink, useLinkTargets } from './components/LinkPicker/index.js';
8
8
  export { b as IconPicker, c as IconPickerProps, d as IconSelection } from './IconPicker-nhY3wWlB.js';
9
9
  export { CATEGORY_FALLBACKS, CATEGORY_LABELS, FontCategory, FontEntry, FontPicker, FontPickerProps, FontScope, FontSelection, FontSource, FontWeight, GOOGLE_FONTS_CATALOG, getGoogleFontUrl } from './components/FontPicker/index.js';
10
10
  import { ClassValue } from 'clsx';
11
+ export { E as ErrorBoundary, a as ErrorBoundaryProps } from './ErrorBoundary-J9iKgF_H.js';
11
12
  export { FacetRule, FacetRuleClause } from '@proveanything/smartlinks/dist/types/appObjects';
12
13
 
13
14
  type AdminPageHeaderIntroTone = 'info' | 'success' | 'warning';
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
- export { ASSET_MIME_FILTERS, AssetPicker, useAssets } from './chunk-E3GQ6LNZ.js';
2
- export { ConditionsEditor } from './chunk-7UBXTFZQ.js';
1
+ export { ASSET_MIME_FILTERS, AssetPicker, useAssets } from './chunk-I3T36FSI.js';
2
+ export { ConditionsEditor } from './chunk-JNCRSL2H.js';
3
3
  export { IconPicker } from './chunk-JQPS5XPJ.js';
4
- export { CATEGORY_FALLBACKS, CATEGORY_LABELS, FontPicker, GOOGLE_FONTS_CATALOG, getGoogleFontUrl } from './chunk-OTJV62XV.js';
5
- import { useHintsPreference } from './chunk-3RRHM4LP.js';
6
- export { AdminPageHeader, HINTS_PREFS_APP_ID, HINTS_PREFS_KEY, useHintsPreference, useIntroState } from './chunk-3RRHM4LP.js';
4
+ export { CATEGORY_FALLBACKS, CATEGORY_LABELS, FontPicker, GOOGLE_FONTS_CATALOG, getGoogleFontUrl } from './chunk-5ZQT2GGU.js';
5
+ import { useHintsPreference } from './chunk-XASZS7EA.js';
6
+ export { AdminPageHeader, ErrorBoundary, HINTS_PREFS_APP_ID, HINTS_PREFS_KEY, useHintsPreference, useIntroState } from './chunk-XASZS7EA.js';
7
7
  import './chunk-S27GIYV7.js';
8
- export { FacetRuleEditor } from './chunk-JMCV6FOW.js';
9
- import './chunk-4LHF5JB7.js';
8
+ export { FacetRuleEditor } from './chunk-WVCNIX7N.js';
9
+ import './chunk-DH5HG5DW.js';
10
10
  export { LinkPicker, resolveLink, useLinkTargets } from './chunk-WCUKTVWC.js';
11
11
  import { assertStylesLoaded } from './chunk-OLYC54YT.js';
12
12
  import './chunk-5UQQYXCX.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hints/HintsPreferenceToggle.tsx","../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAmBO,SAAS,qBAAA,CAAsB;AAAA,EACpC,EAAA;AAAA,EAAI,KAAA,GAAQ,kBAAA;AAAA,EAAoB,WAAA;AAAA,EAAa;AAC/C,CAAA,EAA+B;AAC7B,EAAA,MAAM,EAAE,SAAA,EAAW,YAAA,EAAc,SAAA,EAAU,GAAI,mBAAmB,EAAE,CAAA;AACpE,EAAA,uBACE,IAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAsB,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,YAAA,EAAc,GAAA,EAAK,QAAA,EAAU,MAAA,EAAQ,WAAU,EAChH,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,UAAA;AAAA,QACL,OAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAU,SAAA;AAAA,QACV,QAAA,EAAU,CAAC,CAAA,KAAM;AAAE,UAAA,KAAK,YAAA,CAAa,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAAA,QAAG,CAAA;AAAA,QACxD,KAAA,EAAO,EAAE,SAAA,EAAW,QAAA;AAAS;AAAA,KAC/B;AAAA,yBACC,MAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAK,KAAA,EAAO,EAAE,UAAA,EAAY,GAAA,IAAQ,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MACxC,WAAA,mBACC,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,QAAA,EAAU,OAAA,EAAS,GAAA,EAAI,EAAI,uBAAY,CAAA,GAChF;AAAA,KAAA,EACN;AAAA,GAAA,EACF,CAAA;AAEJ;;;ACjCA,kBAAA,EAAmB","file":"index.js","sourcesContent":["// =============================================================================\r\n// HintsPreferenceToggle\r\n//\r\n// Tiny opt-in component that flips the global `prefs.showHints` flag on the\r\n// user record. Drop into any settings/account surface — the value affects\r\n// every SmartLinks admin app the user opens, no per-app wiring required.\r\n// =============================================================================\r\nimport { useHintsPreference } from './useHintsPreference';\r\n\r\nexport interface HintsPreferenceToggleProps {\r\n /** SmartLinks SDK namespace (`* as SL from '@proveanything/smartlinks'`). */\r\n SL: any;\r\n /** Visible label. Default: \"Show inline help\". */\r\n label?: string;\r\n /** Optional helper line under the label. */\r\n description?: string;\r\n className?: string;\r\n}\r\n\r\nexport function HintsPreferenceToggle({\r\n SL, label = 'Show inline help', description, className,\r\n}: HintsPreferenceToggleProps) {\r\n const { showHints, setShowHints, isLoading } = useHintsPreference(SL);\r\n return (\r\n <label className={className} style={{ display: 'flex', alignItems: 'flex-start', gap: '0.5rem', cursor: 'pointer' }}>\r\n <input\r\n type=\"checkbox\"\r\n checked={showHints}\r\n disabled={isLoading}\r\n onChange={(e) => { void setShowHints(e.target.checked); }}\r\n style={{ marginTop: '0.2rem' }}\r\n />\r\n <span>\r\n <span style={{ fontWeight: 500 }}>{label}</span>\r\n {description ? (\r\n <span style={{ display: 'block', fontSize: '0.85em', opacity: 0.7 }}>{description}</span>\r\n ) : null}\r\n </span>\r\n </label>\r\n );\r\n}\r\n","// =============================================================================\r\n// @proveanything/smartlinks-ui\r\n// =============================================================================\r\n\r\n// Pre-compiled Tailwind utilities — tsup processes this through PostCSS\r\nimport './styles.css';\r\nimport { assertStylesLoaded } from './utils/assertStylesLoaded';\r\nassertStylesLoaded();\r\n\r\n// --- Asset Picker ---\r\nexport { AssetPicker, useAssets } from './components/AssetPicker';\r\nexport type {\r\n AssetPickerProps,\r\n AssetPickerMode,\r\n AssetScope,\r\n AssetPickerSelection,\r\n AssetItem,\r\n AssetViewMode,\r\n AssetMimeFilter,\r\n} from './components/AssetPicker/types';\r\nexport { ASSET_MIME_FILTERS } from './components/AssetPicker/types';\r\n\r\n// --- Admin Page Header ---\r\nexport { AdminPageHeader } from './components/AdminPageHeader';\r\nexport type {\r\n AdminPageHeaderProps,\r\n AdminPageHeaderIntro,\r\n AdminPageHeaderIntroTone,\r\n} from './components/AdminPageHeader';\r\n\r\n// --- Hints (global user preference + per-browser dismiss) ---\r\nexport {\r\n useHintsPreference, useIntroState, HintsPreferenceToggle,\r\n HINTS_PREFS_APP_ID, HINTS_PREFS_KEY,\r\n} from './hints';\r\nexport type {\r\n UseHintsPreferenceResult, UseIntroStateArgs, UseIntroStateResult,\r\n HintsPreferenceToggleProps,\r\n} from './hints';\r\n\r\n// --- Conditions Editor ---\r\nexport { ConditionsEditor } from './components/ConditionsEditor';\r\nexport type {\r\n ConditionsEditorProps,\r\n Condition,\r\n ConditionGroup,\r\n ConditionType,\r\n ConditionTypeMeta,\r\n SelectOption,\r\n VersionOption,\r\n} from './components/ConditionsEditor/types';\r\n\r\n// --- Facet Rule Editor (records targeting) ---\r\nexport { FacetRuleEditor } from './components/FacetRuleEditor';\r\nexport type {\r\n FacetRuleEditorProps,\r\n FacetRule,\r\n FacetRuleClause,\r\n} from './components/FacetRuleEditor/types';\r\n\r\n// --- Link Picker (universal link/app/deep-link) ---\r\nexport { LinkPicker, useLinkTargets, resolveLink } from './components/LinkPicker';\r\nexport type {\r\n LinkPickerProps,\r\n LinkTarget,\r\n LinkKind,\r\n LinkOpenTarget,\r\n ExternalLinkTarget,\r\n AppLinkTarget,\r\n DeepLinkTarget,\r\n LinkableEntry,\r\n DiscoveredApp,\r\n UseLinkTargetsOptions,\r\n UseLinkTargetsReturn,\r\n ResolveLinkContext,\r\n ResolvedLink,\r\n} from './components/LinkPicker';\r\n\r\n// --- Icon Picker ---\r\nexport { IconPicker } from './components/IconPicker';\r\nexport type {\r\n IconPickerProps,\r\n IconSelection,\r\n} from './components/IconPicker/types';\r\n\r\n// --- Font Picker ---\r\nexport { FontPicker } from './components/FontPicker';\r\nexport type {\r\n FontPickerProps,\r\n FontSelection,\r\n FontSource,\r\n FontCategory,\r\n FontWeight,\r\n FontEntry,\r\n FontScope,\r\n} from './components/FontPicker/types';\r\nexport { GOOGLE_FONTS_CATALOG, getGoogleFontUrl, CATEGORY_LABELS, CATEGORY_FALLBACKS } from './components/FontPicker/google-fonts';\r\n\r\n// --- Shared utilities ---\r\nexport { cn } from './utils/cn';\r\n"]}
1
+ {"version":3,"sources":["../src/hints/HintsPreferenceToggle.tsx","../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAmBO,SAAS,qBAAA,CAAsB;AAAA,EACpC,EAAA;AAAA,EAAI,KAAA,GAAQ,kBAAA;AAAA,EAAoB,WAAA;AAAA,EAAa;AAC/C,CAAA,EAA+B;AAC7B,EAAA,MAAM,EAAE,SAAA,EAAW,YAAA,EAAc,SAAA,EAAU,GAAI,mBAAmB,EAAE,CAAA;AACpE,EAAA,uBACE,IAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAsB,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,YAAA,EAAc,GAAA,EAAK,QAAA,EAAU,MAAA,EAAQ,WAAU,EAChH,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,UAAA;AAAA,QACL,OAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAU,SAAA;AAAA,QACV,QAAA,EAAU,CAAC,CAAA,KAAM;AAAE,UAAA,KAAK,YAAA,CAAa,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAAA,QAAG,CAAA;AAAA,QACxD,KAAA,EAAO,EAAE,SAAA,EAAW,QAAA;AAAS;AAAA,KAC/B;AAAA,yBACC,MAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,UAAK,KAAA,EAAO,EAAE,UAAA,EAAY,GAAA,IAAQ,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MACxC,WAAA,mBACC,GAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,QAAA,EAAU,OAAA,EAAS,GAAA,EAAI,EAAI,uBAAY,CAAA,GAChF;AAAA,KAAA,EACN;AAAA,GAAA,EACF,CAAA;AAEJ;;;ACjCA,kBAAA,EAAmB","file":"index.js","sourcesContent":["// =============================================================================\r\n// HintsPreferenceToggle\r\n//\r\n// Tiny opt-in component that flips the global `prefs.showHints` flag on the\r\n// user record. Drop into any settings/account surface — the value affects\r\n// every SmartLinks admin app the user opens, no per-app wiring required.\r\n// =============================================================================\r\nimport { useHintsPreference } from './useHintsPreference';\r\n\r\nexport interface HintsPreferenceToggleProps {\r\n /** SmartLinks SDK namespace (`* as SL from '@proveanything/smartlinks'`). */\r\n SL: any;\r\n /** Visible label. Default: \"Show inline help\". */\r\n label?: string;\r\n /** Optional helper line under the label. */\r\n description?: string;\r\n className?: string;\r\n}\r\n\r\nexport function HintsPreferenceToggle({\r\n SL, label = 'Show inline help', description, className,\r\n}: HintsPreferenceToggleProps) {\r\n const { showHints, setShowHints, isLoading } = useHintsPreference(SL);\r\n return (\r\n <label className={className} style={{ display: 'flex', alignItems: 'flex-start', gap: '0.5rem', cursor: 'pointer' }}>\r\n <input\r\n type=\"checkbox\"\r\n checked={showHints}\r\n disabled={isLoading}\r\n onChange={(e) => { void setShowHints(e.target.checked); }}\r\n style={{ marginTop: '0.2rem' }}\r\n />\r\n <span>\r\n <span style={{ fontWeight: 500 }}>{label}</span>\r\n {description ? (\r\n <span style={{ display: 'block', fontSize: '0.85em', opacity: 0.7 }}>{description}</span>\r\n ) : null}\r\n </span>\r\n </label>\r\n );\r\n}\r\n","// =============================================================================\r\n// @proveanything/smartlinks-ui\r\n// =============================================================================\r\n\r\n// Pre-compiled Tailwind utilities — tsup processes this through PostCSS\r\nimport './styles.css';\r\nimport { assertStylesLoaded } from './utils/assertStylesLoaded';\r\nassertStylesLoaded();\r\n\r\n// --- Asset Picker ---\r\nexport { AssetPicker, useAssets } from './components/AssetPicker';\r\nexport type {\r\n AssetPickerProps,\r\n AssetPickerMode,\r\n AssetScope,\r\n AssetPickerSelection,\r\n AssetItem,\r\n AssetViewMode,\r\n AssetMimeFilter,\r\n} from './components/AssetPicker/types';\r\nexport { ASSET_MIME_FILTERS } from './components/AssetPicker/types';\r\n\r\n// --- Admin Page Header ---\r\nexport { AdminPageHeader } from './components/AdminPageHeader';\r\nexport type {\r\n AdminPageHeaderProps,\r\n AdminPageHeaderIntro,\r\n AdminPageHeaderIntroTone,\r\n} from './components/AdminPageHeader';\r\n\r\n// --- Hints (global user preference + per-browser dismiss) ---\r\nexport {\r\n useHintsPreference, useIntroState, HintsPreferenceToggle,\r\n HINTS_PREFS_APP_ID, HINTS_PREFS_KEY,\r\n} from './hints';\r\nexport type {\r\n UseHintsPreferenceResult, UseIntroStateArgs, UseIntroStateResult,\r\n HintsPreferenceToggleProps,\r\n} from './hints';\r\n\r\n// --- Conditions Editor ---\r\nexport { ConditionsEditor } from './components/ConditionsEditor';\r\nexport type {\r\n ConditionsEditorProps,\r\n Condition,\r\n ConditionGroup,\r\n ConditionType,\r\n ConditionTypeMeta,\r\n SelectOption,\r\n VersionOption,\r\n} from './components/ConditionsEditor/types';\r\n\r\n// --- Facet Rule Editor (records targeting) ---\r\nexport { FacetRuleEditor } from './components/FacetRuleEditor';\r\nexport type {\r\n FacetRuleEditorProps,\r\n FacetRule,\r\n FacetRuleClause,\r\n} from './components/FacetRuleEditor/types';\r\n\r\n// --- Link Picker (universal link/app/deep-link) ---\r\nexport { LinkPicker, useLinkTargets, resolveLink } from './components/LinkPicker';\r\nexport type {\r\n LinkPickerProps,\r\n LinkTarget,\r\n LinkKind,\r\n LinkOpenTarget,\r\n ExternalLinkTarget,\r\n AppLinkTarget,\r\n DeepLinkTarget,\r\n LinkableEntry,\r\n DiscoveredApp,\r\n UseLinkTargetsOptions,\r\n UseLinkTargetsReturn,\r\n ResolveLinkContext,\r\n ResolvedLink,\r\n} from './components/LinkPicker';\r\n\r\n// --- Icon Picker ---\r\nexport { IconPicker } from './components/IconPicker';\r\nexport type {\r\n IconPickerProps,\r\n IconSelection,\r\n} from './components/IconPicker/types';\r\n\r\n// --- Font Picker ---\r\nexport { FontPicker } from './components/FontPicker';\r\nexport type {\r\n FontPickerProps,\r\n FontSelection,\r\n FontSource,\r\n FontCategory,\r\n FontWeight,\r\n FontEntry,\r\n FontScope,\r\n} from './components/FontPicker/types';\r\nexport { GOOGLE_FONTS_CATALOG, getGoogleFontUrl, CATEGORY_LABELS, CATEGORY_FALLBACKS } from './components/FontPicker/google-fonts';\r\n\r\n// --- Shared utilities ---\r\nexport { cn } from './utils/cn';\r\nexport { ErrorBoundary } from './utils/ErrorBoundary';\r\nexport type { ErrorBoundaryProps } from './utils/ErrorBoundary';\r\n"]}
@@ -24,7 +24,18 @@ interface Condition {
24
24
  displays?: string[];
25
25
  tags?: string[];
26
26
  facetKey?: string;
27
+ /**
28
+ * Facet value keys to test against. Matches the SDK's `FacetCondition.values`
29
+ * field (consumed by `SL.utils.validateCondition`).
30
+ */
31
+ values?: string[];
32
+ /**
33
+ * @deprecated Legacy field name written by older versions of this editor.
34
+ * Read for backwards compatibility, but new writes use `values`.
35
+ */
27
36
  valueKeys?: string[];
37
+ /** Optional match mode for facet conditions. Defaults to 'any' in the SDK. */
38
+ matchMode?: 'any' | 'all' | 'none' | 'hasFacet' | 'notHasFacet';
28
39
  lat1?: number;
29
40
  lng1?: number;
30
41
  lat2?: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@proveanything/smartlinks-utils-ui",
3
- "version": "1.13.8",
3
+ "version": "1.13.13",
4
4
  "description": "Reusable React components for SmartLinks microapps — Asset Picker, Conditions Editor, Icon Picker, and more.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -59,7 +59,7 @@
59
59
  "access": "public"
60
60
  },
61
61
  "peerDependencies": {
62
- "@proveanything/smartlinks": "^1.13.3",
62
+ "@proveanything/smartlinks": "^1.13.10",
63
63
  "@tanstack/react-query": "^5.0.0",
64
64
  "react": "^18.0.0",
65
65
  "react-dom": "^18.0.0"
@@ -70,7 +70,7 @@
70
70
  }
71
71
  },
72
72
  "devDependencies": {
73
- "@proveanything/smartlinks": "^1.13.3",
73
+ "@proveanything/smartlinks": "^1.13.10",
74
74
  "@tanstack/react-query": "^5.56.0",
75
75
  "@types/react": "^18.3.0",
76
76
  "@types/react-dom": "^18.3.0",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/AdminPageHeader/AdminPageHeader.tsx","../src/hints/useHintsPreference.ts","../src/hints/useIntroState.ts"],"names":["useState","useEffect","useCallback"],"mappings":"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","file":"chunk-3RRHM4LP.js","sourcesContent":["// =============================================================================\r\n// AdminPageHeader\r\n//\r\n// A standardised page header for any SmartLinks admin surface. Designed to be\r\n// used standalone (lightweight apps that don't need the full RecordsAdminShell)\r\n// or composed inside other shells. Supports:\r\n//\r\n// • Inline icon + title + full-width subtitle\r\n// • Right-aligned slot for app-specific actions (e.g. \"+ New\" button)\r\n// • External help link (icon-button that opens docs in a new tab)\r\n// • Optional dismissible intro card with `?` reopen affordance\r\n// • Optional `aside` slot for extra header content (stats strips, etc.)\r\n//\r\n// Styling is self-contained under `.sl-aph` and reuses the shared `--ra-*`\r\n// design tokens with sensible fallbacks, so it themes correctly whether the\r\n// host has loaded the records-admin token sheet or not.\r\n// =============================================================================\r\nimport { type ReactNode, useId } from 'react';\r\nimport { BookOpen, HelpCircle, X, Lightbulb, CheckCircle2, AlertTriangle, Info } from 'lucide-react';\r\nimport './admin-page-header.css';\r\n\r\nexport type AdminPageHeaderIntroTone = 'info' | 'success' | 'warning';\r\n\r\nexport interface AdminPageHeaderIntro {\r\n /** Short headline shown in bold at the start of the intro card. */\r\n title: string;\r\n /** Body content — plain text or rich nodes. */\r\n body: ReactNode;\r\n /** Visual tone — controls icon and surface tint. Default `'info'`. */\r\n tone?: AdminPageHeaderIntroTone;\r\n /** Optional action node rendered inline after the body (e.g. a Learn-more link). */\r\n action?: ReactNode;\r\n /** Whether the intro is currently dismissed. Controlled. */\r\n dismissed: boolean;\r\n /** Called when the user clicks the dismiss `X`. */\r\n onDismiss: () => void;\r\n /**\r\n * Called when the user clicks the reopen `?` button (only rendered when\r\n * dismissed is true). Omit to hide the reopen affordance entirely.\r\n */\r\n onReopen?: () => void;\r\n /** Tooltip / aria-label for the reopen button. Default \"How it works\". */\r\n reopenLabel?: string;\r\n}\r\n\r\nexport interface AdminPageHeaderProps {\r\n /** Page title — required. */\r\n title: string;\r\n /** Single-line muted subtitle under the title. */\r\n subtitle?: string;\r\n /** Icon rendered inline before the title. Pass a Lucide element or any node. */\r\n icon?: ReactNode;\r\n /**\r\n * External help / documentation URL. When set, renders a small icon-button\r\n * that opens the URL in a new tab. Use this to point at app-specific docs.\r\n */\r\n helpUrl?: string;\r\n /** Tooltip / aria-label for the help link. Default \"Help & documentation\". */\r\n helpLabel?: string;\r\n /**\r\n * Right-aligned action slot — typically a primary \"+ New\" button and/or\r\n * secondary controls. Rendered before the help / intro-reopen icon-buttons.\r\n */\r\n actions?: ReactNode;\r\n /**\r\n * Extra header content rendered between `actions` and the trailing\r\n * help / reopen icon-buttons. Used by RecordsAdminShell for its stats strip;\r\n * standalone apps rarely need it.\r\n */\r\n aside?: ReactNode;\r\n /**\r\n * Optional dismissible intro card rendered below the header row.\r\n * See {@link AdminPageHeaderIntro}.\r\n */\r\n intro?: AdminPageHeaderIntro;\r\n /** Extra class on the root container for layout overrides. */\r\n className?: string;\r\n}\r\n\r\nconst TONE_ICON = {\r\n info: Lightbulb,\r\n success: CheckCircle2,\r\n warning: AlertTriangle,\r\n} as const;\r\n\r\nexport function AdminPageHeader({\r\n title, subtitle, icon, helpUrl, helpLabel,\r\n actions, aside, intro, className,\r\n}: AdminPageHeaderProps) {\r\n const titleId = useId();\r\n const resolvedHelpLabel = helpLabel ?? 'Help & documentation';\r\n const resolvedReopenLabel = intro?.reopenLabel ?? 'How it works';\r\n const showReopen = !!intro && intro.dismissed && !!intro.onReopen;\r\n const showIntro = !!intro && !intro.dismissed;\r\n\r\n return (\r\n <header className={`sl-aph${className ? ` ${className}` : ''}`} aria-labelledby={titleId}>\r\n <div className=\"sl-aph__row\">\r\n <div className=\"sl-aph__main\">\r\n <div className=\"sl-aph__text\">\r\n <h1 className=\"sl-aph__title\" id={titleId}>\r\n {icon ? (\r\n <span className=\"sl-aph__icon\" aria-hidden=\"true\">{icon}</span>\r\n ) : null}\r\n <span>{title}</span>\r\n </h1>\r\n {subtitle ? <p className=\"sl-aph__subtitle\">{subtitle}</p> : null}\r\n </div>\r\n </div>\r\n {(actions || aside || helpUrl || showReopen) ? (\r\n <div className=\"sl-aph__aside\">\r\n {actions}\r\n {aside}\r\n {helpUrl ? (\r\n <a\r\n href={helpUrl}\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n className=\"sl-aph__icon-btn\"\r\n aria-label={resolvedHelpLabel}\r\n title={resolvedHelpLabel}\r\n >\r\n <BookOpen aria-hidden=\"true\" />\r\n </a>\r\n ) : null}\r\n {showReopen ? (\r\n <button\r\n type=\"button\"\r\n onClick={intro!.onReopen}\r\n className=\"sl-aph__icon-btn\"\r\n aria-label={resolvedReopenLabel}\r\n title={resolvedReopenLabel}\r\n >\r\n <HelpCircle aria-hidden=\"true\" />\r\n </button>\r\n ) : null}\r\n </div>\r\n ) : null}\r\n </div>\r\n {showIntro ? <AdminPageHeaderIntroCard intro={intro!} /> : null}\r\n </header>\r\n );\r\n}\r\n\r\nfunction AdminPageHeaderIntroCard({ intro }: { intro: AdminPageHeaderIntro }) {\r\n const tone = intro.tone ?? 'info';\r\n const Icon = TONE_ICON[tone] ?? Info;\r\n return (\r\n <div className=\"sl-aph__intro\" data-tone={tone} role=\"note\">\r\n <div className=\"sl-aph__intro-icon\">\r\n <Icon aria-hidden=\"true\" style={{ width: '0.95rem', height: '0.95rem' }} />\r\n </div>\r\n <div className=\"sl-aph__intro-body\">\r\n <h4 className=\"sl-aph__intro-title\">{intro.title}</h4>\r\n <span className=\"sl-aph__intro-text\">{intro.body}</span>\r\n {intro.action ? <span className=\"sl-aph__intro-action\">{intro.action}</span> : null}\r\n </div>\r\n <button\r\n type=\"button\"\r\n onClick={intro.onDismiss}\r\n aria-label=\"Dismiss\"\r\n className=\"sl-aph__intro-dismiss\"\r\n >\r\n <X aria-hidden=\"true\" style={{ width: '0.875rem', height: '0.875rem' }} />\r\n </button>\r\n </div>\r\n );\r\n}","// =============================================================================\r\n// useHintsPreference\r\n//\r\n// Single source of truth for the user-level \"show inline hints?\" preference.\r\n// Reads from `SL.auth.getAccount().prefs` (the canonical account-level prefs\r\n// bag added in SmartLinks SDK 1.11.5+) so the same flag follows the user\r\n// across every SmartLinks admin app — flip it once, applies everywhere.\r\n// There is intentionally no per-app preference list; that's what\r\n// `useIntroState` (browser-level dismiss) is for.\r\n//\r\n// Writes still flow through `SL.userAppData('prefs')` because the SDK does\r\n// not yet expose a dedicated `auth.setPrefs(...)`. The server treats the\r\n// `prefs` userAppData document as the backing store for `account.prefs`,\r\n// so reads and writes stay in sync.\r\n//\r\n// Shape on `account.prefs`:\r\n// { showHints?: boolean, ...other future flags }\r\n//\r\n// Default when unset / unauthenticated / SDK missing → `true` (show hints).\r\n// =============================================================================\r\nimport { useCallback, useEffect, useRef, useState } from 'react';\r\n\r\nexport const HINTS_PREFS_APP_ID = 'prefs';\r\nexport const HINTS_PREFS_KEY = 'showHints';\r\n\r\n/** Optional cross-tab cache so multiple components share one fetch per session. */\r\nlet cachedShowHints: boolean | undefined;\r\nlet inflight: Promise<boolean> | null = null;\r\n\r\nasync function readShowHints(SL: any): Promise<boolean> {\r\n if (cachedShowHints !== undefined) return cachedShowHints;\r\n if (inflight) return inflight;\r\n inflight = (async () => {\r\n try {\r\n // Read from the authenticated account's prefs bag. `prefs` may be\r\n // absent (server returned no document) — that's fine, we fall back\r\n // to the default below.\r\n const account = await SL?.auth?.getAccount?.();\r\n const value = account?.prefs?.[HINTS_PREFS_KEY];\r\n const resolved = typeof value === 'boolean' ? value : true;\r\n cachedShowHints = resolved;\r\n return resolved;\r\n } catch {\r\n cachedShowHints = true;\r\n return true;\r\n } finally {\r\n inflight = null;\r\n }\r\n })();\r\n return inflight;\r\n}\r\n\r\nasync function writeShowHints(SL: any, next: boolean): Promise<void> {\r\n cachedShowHints = next;\r\n try {\r\n // No dedicated `auth.setPrefs` setter exists yet — write through\r\n // userAppData('prefs'), which the server uses as the backing store\r\n // for `account.prefs`.\r\n const cfg = await SL?.userAppData?.getConfig?.(HINTS_PREFS_APP_ID).catch(() => ({}));\r\n await SL?.userAppData?.setConfig?.(HINTS_PREFS_APP_ID, {\r\n ...(cfg ?? {}),\r\n [HINTS_PREFS_KEY]: next,\r\n });\r\n } catch { /* best-effort */ }\r\n}\r\n\r\nexport interface UseHintsPreferenceResult {\r\n /** Whether inline hints / intro cards should be shown by default. */\r\n showHints: boolean;\r\n /** True until the first read from `userAppData` resolves. */\r\n isLoading: boolean;\r\n /** Persist a new value on the user record. */\r\n setShowHints: (next: boolean) => Promise<void>;\r\n}\r\n\r\n/**\r\n * Subscribe to the user's global `showHints` preference. Optimistic; defaults\r\n * to `true` while loading so admins coming in fresh always see the help.\r\n */\r\nexport function useHintsPreference(SL: any): UseHintsPreferenceResult {\r\n // NB: do NOT lazy-init from a module-level cache — Vite HMR reloads this\r\n // module while React keeps the old hook queue, which trips\r\n // \"Should have a queue. This is likely a bug in React.\". Always init to\r\n // the same shape and rely on the effect below to hydrate.\r\n const [showHints, setShowHintsState] = useState<boolean>(true);\r\n const [isLoading, setIsLoading] = useState<boolean>(true);\r\n const mounted = useRef(true);\r\n\r\n useEffect(() => {\r\n mounted.current = true;\r\n if (cachedShowHints !== undefined) {\r\n setShowHintsState(cachedShowHints);\r\n setIsLoading(false);\r\n return () => { mounted.current = false; };\r\n }\r\n readShowHints(SL).then((value) => {\r\n if (!mounted.current) return;\r\n setShowHintsState(value);\r\n setIsLoading(false);\r\n });\r\n return () => { mounted.current = false; };\r\n }, [SL]);\r\n\r\n const setShowHints = useCallback(async (next: boolean) => {\r\n setShowHintsState(next);\r\n await writeShowHints(SL, next);\r\n }, [SL]);\r\n\r\n return { showHints, isLoading, setShowHints };\r\n}\r\n\r\n/** Test / sign-out helper — drop the in-memory cache. */\r\nexport function __resetHintsPreferenceCache() {\r\n cachedShowHints = undefined;\r\n inflight = null;\r\n}\r\n","// =============================================================================\r\n// useIntroState\r\n//\r\n// One hook that resolves the full intro-card state for an `<AdminPageHeader>`:\r\n//\r\n// 1. Global user preference (`prefs.showHints` on `userAppData`)\r\n// → if `false`, the intro stays collapsed by default. The `?` reopen\r\n// button is still rendered so the user can pop it open whenever.\r\n// 2. Per-browser, per-app temporary dismiss (`localStorage`)\r\n// → flipped by the dismiss `X`, so reloads on this browser keep it\r\n// collapsed until they click `?`.\r\n//\r\n// Apps just call:\r\n// const intro = useIntroState({ SL, persistKey: appId });\r\n// <AdminPageHeader intro={{ title, body, ...intro }} />\r\n// =============================================================================\r\nimport { useCallback, useEffect, useState } from 'react';\r\nimport { useHintsPreference } from './useHintsPreference';\r\n\r\nconst lsKey = (persistKey: string) => `sl:intro-dismissed:${persistKey}`;\r\n\r\nexport interface UseIntroStateArgs {\r\n /** SmartLinks SDK namespace (`* as SL from '@proveanything/smartlinks'`). */\r\n SL: any;\r\n /**\r\n * Stable per-app key used for the browser-level dismiss. Usually the\r\n * app's `appId`. Pass a more specific value (e.g. `${appId}:rules`) if\r\n * you have multiple intros within one app.\r\n */\r\n persistKey: string;\r\n}\r\n\r\nexport interface UseIntroStateResult {\r\n /** Whether the intro card is currently dismissed/collapsed. */\r\n dismissed: boolean;\r\n /** Wire to AdminPageHeader's `intro.onDismiss`. */\r\n onDismiss: () => void;\r\n /** Wire to AdminPageHeader's `intro.onReopen`. Always available. */\r\n onReopen: () => void;\r\n /** True until the user preference has finished loading. */\r\n isLoading: boolean;\r\n}\r\n\r\nfunction readBrowserDismissed(persistKey: string): boolean {\r\n try { return localStorage.getItem(lsKey(persistKey)) === '1'; }\r\n catch { return false; }\r\n}\r\n\r\n/** Resolve dismiss state from global pref + per-browser flag. */\r\nexport function useIntroState({ SL, persistKey }: UseIntroStateArgs): UseIntroStateResult {\r\n const { showHints, isLoading } = useHintsPreference(SL);\r\n const [browserDismissed, setBrowserDismissed] = useState<boolean>(() => readBrowserDismissed(persistKey));\r\n\r\n // Re-read browser flag if the key changes (rare, but cheap).\r\n useEffect(() => {\r\n setBrowserDismissed(readBrowserDismissed(persistKey));\r\n }, [persistKey]);\r\n\r\n const onDismiss = useCallback(() => {\r\n setBrowserDismissed(true);\r\n try { localStorage.setItem(lsKey(persistKey), '1'); } catch { /* ignore */ }\r\n }, [persistKey]);\r\n\r\n const onReopen = useCallback(() => {\r\n setBrowserDismissed(false);\r\n try { localStorage.removeItem(lsKey(persistKey)); } catch { /* ignore */ }\r\n }, [persistKey]);\r\n\r\n // Dismissed when either: user opted out of hints globally, or they X'd it\r\n // on this browser. Reopening always works (it just clears the browser flag\r\n // for this session — global pref stays as-is).\r\n const dismissed = !showHints || browserDismissed;\r\n\r\n return { dismissed, onDismiss, onReopen, isLoading };\r\n}\r\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/ConditionsEditor/useFacets.ts"],"names":[],"mappings":";;;;AAeA,SAAS,cAAc,KAAA,EAA6B;AAClD,EAAA,OAAA,CAAQ,KAAA,IAAS,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,MAAY;AAAA,IACpC,KAAK,CAAA,CAAE,GAAA;AAAA,IACP,IAAA,EAAM,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,GAAA;AAAA,IAClB,aAAa,CAAA,CAAE,WAAA;AAAA,IACf,SAAS,CAAA,CAAE,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,MAAY;AAAA,MACxC,KAAK,CAAA,CAAE,GAAA;AAAA,MACP,IAAA,EAAM,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,GAAA;AAAA,MAClB,OAAO,CAAA,CAAE,KAAA;AAAA,MACT,aAAa,CAAA,CAAE;AAAA,KACjB,CAAE;AAAA,GACJ,CAAE,CAAA;AACJ;AAEO,SAAS,SAAA,CACd,YAAA,EACA,QAAA,EACA,SAAA,EACe;AACf,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,SAAoC,MAAS,CAAA;AAE3E,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,QAAA,IAAY,CAAC,YAAA,EAAc;AAC/B,IAAA,IAAI,SAAA,GAAY,KAAA;AAGhB,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,CAAC,YAAY;AACX,QAAA,IAAI;AACF,UAAA,MAAM,MAAA,GAAS,MAAM,SAAA,CAAU,YAAY,CAAA;AAC3C,UAAA,IAAI,CAAC,SAAA,EAAW,UAAA,CAAW,MAAM,CAAA;AAAA,QACnC,SAAS,GAAA,EAAK;AAEZ,UAAA,OAAA,CAAQ,IAAA,CAAK,yCAAyC,GAAG,CAAA;AAAA,QAC3D;AAAA,MACF,CAAA,GAAG;AACH,MAAA,OAAO,MAAM;AAAE,QAAA,SAAA,GAAY,IAAA;AAAA,MAAM,CAAA;AAAA,IACnC;AAGA,IAAA,CAAC,YAAY;AACX,MAAA,IAAI;AACF,QAAA,MAAM,GAAA,GAAM,MAAS,EAAA,CAAA,MAAA,CAAO,UAAA,CAAW,cAAc,EAAE,aAAA,EAAe,MAAM,CAAA;AAC5E,QAAA,IAAI,SAAA,IAAa,CAAC,GAAA,EAAK,KAAA,EAAO;AAC9B,QAAA,UAAA,CAAW,aAAA,CAAc,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,MACrC,SAAS,GAAA,EAAK;AAEZ,QAAA,OAAA,CAAQ,IAAA,CAAK,4CAA4C,GAAG,CAAA;AAAA,MAC9D;AAAA,IACF,CAAA,GAAG;AACH,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,GAAY,IAAA;AAAA,IACd,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,YAAA,EAAc,QAAA,EAAU,SAAS,CAAC,CAAA;AAEtC,EAAA,OAAO,QAAA,IAAY,WAAW,EAAC;AACjC","file":"chunk-4LHF5JB7.js","sourcesContent":["// =============================================================================\r\n// CONDITIONS EDITOR — Facet auto-loader\r\n// =============================================================================\r\n// When a `collectionId` is provided to the editor (and `facets` is not),\r\n// fetch facet definitions + values directly from the SmartLinks SDK\r\n// (peer dependency) — same pattern as AssetPicker / FontPicker.\r\n// An optional `getFacets` prop is supported for hosts that want to\r\n// override the data source.\r\n\r\nimport { useEffect, useState } from 'react';\r\nimport * as SL from '@proveanything/smartlinks';\r\nimport type { FacetOption } from './types';\r\n\r\nexport type FacetFetcher = (collectionId: string) => Promise<FacetOption[]>;\r\n\r\nfunction mapFacetItems(items: any[]): FacetOption[] {\r\n return (items || []).map((f: any) => ({\r\n key: f.key,\r\n name: f.name || f.key,\r\n cardinality: f.cardinality,\r\n values: (f.values || []).map((v: any) => ({\r\n key: v.key,\r\n name: v.name || v.key,\r\n color: v.color,\r\n description: v.description,\r\n })),\r\n }));\r\n}\r\n\r\nexport function useFacets(\r\n collectionId: string | undefined,\r\n provided: FacetOption[] | undefined,\r\n getFacets?: FacetFetcher\r\n): FacetOption[] {\r\n const [fetched, setFetched] = useState<FacetOption[] | undefined>(undefined);\r\n\r\n useEffect(() => {\r\n if (provided || !collectionId) return;\r\n let cancelled = false;\r\n\r\n // Optional override hook\r\n if (getFacets) {\r\n (async () => {\r\n try {\r\n const result = await getFacets(collectionId);\r\n if (!cancelled) setFetched(result);\r\n } catch (err) {\r\n // eslint-disable-next-line no-console\r\n console.warn('[ConditionsEditor] getFacets() failed', err);\r\n }\r\n })();\r\n return () => { cancelled = true; };\r\n }\r\n\r\n // Default: call the SDK directly (it's a peer dep, host has initialized it)\r\n (async () => {\r\n try {\r\n const res = await SL.facets.publicList(collectionId, { includeValues: true });\r\n if (cancelled || !res?.items) return;\r\n setFetched(mapFacetItems(res.items));\r\n } catch (err) {\r\n // eslint-disable-next-line no-console\r\n console.warn('[ConditionsEditor] failed to load facets', err);\r\n }\r\n })();\r\n return () => {\r\n cancelled = true;\r\n };\r\n }, [collectionId, provided, getFacets]);\r\n\r\n return provided ?? fetched ?? [];\r\n}\r\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/ConditionsEditor/conditionMeta.ts","../src/components/ConditionsEditor/ConditionTypePicker.tsx","../src/components/ConditionsEditor/countries.ts","../src/components/ConditionsEditor/CountryPicker.tsx","../src/components/ConditionsEditor/ConditionConfig.tsx","../src/components/ConditionsEditor/ConditionCard.tsx","../src/components/ConditionsEditor/ConditionsEditor.tsx"],"names":["inputStyle","jsxs","jsx","useState","ChevronRight","GitBranch"],"mappings":"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","file":"chunk-7UBXTFZQ.js","sourcesContent":["// =============================================================================\r\n// CONDITIONS EDITOR — Condition Type Metadata\r\n// =============================================================================\r\n\r\nimport type { ConditionTypeMeta, ConditionType, Condition, SelectOption, FacetOption } from './types';\r\nimport {\r\n Tags,\r\n Globe,\r\n Hash,\r\n User,\r\n Calendar,\r\n Monitor,\r\n Tag,\r\n MapPin,\r\n Package,\r\n ToggleLeft,\r\n GitBranch,\r\n Layers,\r\n} from 'lucide-react';\r\nimport React from 'react';\r\n\r\nexport const CONDITION_TYPES: ConditionTypeMeta[] = [\r\n { value: 'version', title: 'Version', description: 'Match specific versions', icon: 'tags', color: '#7c3aed', helpText: 'Limit by specific versions of your application or product.' },\r\n { value: 'country', title: 'Country', description: 'Filter by geographic location', icon: 'globe', color: '#2563eb', helpText: \"Limit by the user's country or region.\" },\r\n { value: 'value', title: 'Value', description: 'Match custom field values', icon: 'hash', color: '#ea580c', helpText: 'Compare text, numbers, or boolean values using various operators.' },\r\n { value: 'user', title: 'User', description: 'Filter by auth & permissions', icon: 'user', color: '#16a34a', helpText: 'Limit by authentication status, ownership, group membership, or admin privileges.' },\r\n { value: 'date', title: 'Date', description: 'Time-based conditions', icon: 'calendar', color: '#dc2626', helpText: 'Limit by specific dates or date ranges.' },\r\n { value: 'device', title: 'Device', description: 'Filter by device type', icon: 'monitor', color: '#0891b2', helpText: 'Limit by the type of device or operating system.' },\r\n { value: 'tag', title: 'Label', description: 'Match by tags or labels', icon: 'tag', color: '#db2777', helpText: 'Limit by assigned labels or tags.' },\r\n { value: 'facet', title: 'Facet', description: 'Match product facet values', icon: 'layers', color: '#9333ea', helpText: 'Limit by one or more facet values assigned to products in the collection.' },\r\n { value: 'geofence', title: 'Geofence', description: 'Geographic boundary', icon: 'map-pin', color: '#0d9488', helpText: 'Limit by geographic boundaries (rectangular area).' },\r\n { value: 'product', title: 'Product ID', description: 'Match specific items', icon: 'package', color: '#d97706', helpText: 'Limit by specific product IDs.' },\r\n { value: 'itemStatus', title: 'Item Status', description: 'Filter by item state', icon: 'toggle-left', color: '#ea580c', helpText: 'Limit by item status such as proof, claimable, owner, or virtual.' },\r\n { value: 'condition', title: 'Condition', description: 'Reference another condition', icon: 'git-branch', color: '#4f46e5', helpText: 'Reference another saved condition and check if it passes or fails.' },\r\n];\r\n\r\nconst iconMap: Record<string, React.FC<{ className?: string }>> = {\r\n tags: Tags,\r\n globe: Globe,\r\n hash: Hash,\r\n user: User,\r\n calendar: Calendar,\r\n monitor: Monitor,\r\n tag: Tag,\r\n 'map-pin': MapPin,\r\n package: Package,\r\n 'toggle-left': ToggleLeft,\r\n 'git-branch': GitBranch,\r\n layers: Layers,\r\n};\r\n\r\nexport function getConditionMeta(type: ConditionType | null | undefined): ConditionTypeMeta | undefined {\r\n if (!type) return undefined;\r\n return CONDITION_TYPES.find(t => t.value === type);\r\n}\r\n\r\nexport function getConditionIcon(type: ConditionType | null | undefined): React.FC<{ className?: string }> {\r\n const meta = getConditionMeta(type);\r\n return (meta && iconMap[meta.icon]) || Hash;\r\n}\r\n\r\nexport function getConditionSummary(cond: Condition, options?: {\r\n savedConditions?: SelectOption[];\r\n regionOptions?: { title: string; value: string }[];\r\n facets?: FacetOption[];\r\n}): string {\r\n if (!cond.type) return 'No condition type selected';\r\n const meta = getConditionMeta(cond.type);\r\n let summary = meta?.title || cond.type;\r\n\r\n switch (cond.type) {\r\n case 'version':\r\n if (cond.versions?.length) {\r\n const verb = cond.contains ? 'is' : 'is not';\r\n summary += ` ${verb} ${cond.versions.map(v => typeof v === 'string' ? v : (v.title || v.value || '')).join(', ')}`;\r\n }\r\n break;\r\n case 'country':\r\n if (cond.useRegions && cond.regions?.length) {\r\n const verb = cond.contains ? 'is in' : 'is not in';\r\n const names = cond.regions.map(r => {\r\n const reg = REGION_OPTIONS.find(o => o.value === r);\r\n return reg?.title || r;\r\n });\r\n summary += ` ${verb} ${names.join(', ')}`;\r\n } else if (cond.countries?.length) {\r\n const verb = cond.contains ? 'is' : 'is not';\r\n summary += ` ${verb} ${cond.countries.join(', ')}`;\r\n }\r\n break;\r\n case 'value':\r\n if (cond.field) {\r\n const ops: Record<string, string> = { equal: '=', not: '≠', greater: '>', less: '<' };\r\n summary += `: ${cond.field} ${ops[cond.validationType || ''] || ''} ${cond.value ?? '?'}`;\r\n }\r\n break;\r\n case 'tag':\r\n if (cond.tags?.length) {\r\n const verb = cond.contains ? 'has' : 'does not have';\r\n summary += ` ${verb} ${cond.tags.length} label(s)`;\r\n }\r\n break;\r\n case 'facet': {\r\n const facet = options?.facets?.find(f => f.key === cond.facetKey);\r\n const facetName = facet?.name || cond.facetKey;\r\n if (cond.facetKey && cond.valueKeys?.length) {\r\n const verb = cond.contains === false ? 'is not' : 'is';\r\n const names = cond.valueKeys.map(vk => facet?.values.find(v => v.key === vk)?.name || vk);\r\n summary = `${facetName} ${verb} ${names.join(', ')}`;\r\n } else if (cond.facetKey) {\r\n summary = `${facetName}: (no values selected)`;\r\n }\r\n break;\r\n }\r\n case 'device':\r\n if (cond.displays?.length) {\r\n const verb = cond.contains ? 'is' : 'is not';\r\n summary += ` ${verb} ${cond.displays.join(', ')}`;\r\n }\r\n break;\r\n case 'user': {\r\n const userTypes: Record<string, string> = {\r\n valid: 'is logged in', invalid: 'is logged out', owner: 'is item owner',\r\n group: cond.groupIds?.length ? `in ${cond.groupIds.length} group(s)` : 'in groups',\r\n admin: 'is admin',\r\n };\r\n summary += ` ${userTypes[cond.userType || ''] || ''}`;\r\n break;\r\n }\r\n case 'product':\r\n if (cond.productIds?.length) {\r\n const verb = cond.contains ? 'is' : 'is not';\r\n summary += ` ${verb} ${cond.productIds.length} item(s)`;\r\n }\r\n break;\r\n case 'condition':\r\n if (cond.conditionId) {\r\n const condRef = options?.savedConditions?.find(c => c.value === cond.conditionId);\r\n summary += `: ${condRef?.title || cond.conditionId} ${cond.passes ? 'passes' : 'fails'}`;\r\n }\r\n break;\r\n case 'date': {\r\n const dateTests: Record<string, string> = { before: 'before', after: 'after', between: 'between' };\r\n summary += ` is ${dateTests[cond.dateTest || ''] || ''}`;\r\n if (cond.beforeDate) summary += ` ${cond.beforeDate}`;\r\n if (cond.afterDate) summary += ` ${cond.afterDate}`;\r\n if (cond.rangeDate) summary += ` ${cond.rangeDate}`;\r\n break;\r\n }\r\n case 'geofence': {\r\n const verb = cond.contains ? 'inside' : 'outside';\r\n summary += ` ${verb} bounds`;\r\n break;\r\n }\r\n case 'itemStatus': {\r\n const statusTypes: Record<string, string> = {\r\n hasProof: 'has proof', noProof: 'has no proof', isClaimable: 'is claimable',\r\n notClaimable: 'is not claimable', hasOwner: 'has owner', isVirtual: 'is virtual',\r\n };\r\n summary += ` ${statusTypes[cond.statusType || ''] || ''}`;\r\n break;\r\n }\r\n }\r\n\r\n return summary;\r\n}\r\n\r\nexport const DISPLAY_OPTIONS: SelectOption[] = [\r\n { title: 'Desktop', value: 'desktop' },\r\n { title: 'Mobile', value: 'mobile' },\r\n { title: 'Android', value: 'android' },\r\n { title: 'iOS', value: 'ios' },\r\n { title: 'Apple Mac', value: 'mac' },\r\n { title: 'Microsoft Windows', value: 'win' },\r\n];\r\n\r\nexport const REGION_OPTIONS: (SelectOption & { description?: string })[] = [\r\n { title: 'European Union (EU)', value: 'eu', description: 'All 27 EU member states' },\r\n { title: 'European Economic Area (EEA)', value: 'eea', description: 'EU + Iceland, Liechtenstein, Norway' },\r\n { title: 'United Kingdom', value: 'uk', description: 'England, Scotland, Wales, Northern Ireland' },\r\n { title: 'North America', value: 'northamerica', description: 'USA, Canada, Mexico' },\r\n { title: 'Asia Pacific', value: 'asiapacific', description: 'Major Asia-Pacific markets' },\r\n];\r\n\r\nexport const USER_TYPE_OPTIONS: SelectOption[] = [\r\n { title: 'Is Logged In', value: 'valid' },\r\n { title: 'Is Logged Out', value: 'invalid' },\r\n { title: 'Is Item Owner', value: 'owner' },\r\n { title: 'Is Group Member', value: 'group' },\r\n { title: 'Is Admin', value: 'admin' },\r\n];\r\n\r\nexport const ITEM_STATUS_OPTIONS: SelectOption[] = [\r\n { title: 'Is Product (Not Item)', value: 'hasProof' },\r\n { title: 'Is Single Item', value: 'noProof' },\r\n { title: 'Is Item & Claimable', value: 'isClaimable' },\r\n { title: 'Is Item & Claimed', value: 'notClaimable' },\r\n { title: 'Is Virtual Item', value: 'isVirtual' },\r\n { title: 'Is Not A Virtual Item', value: 'notVirtual' },\r\n];\r\n\r\nexport const VALUE_OPERATORS: SelectOption[] = [\r\n { title: 'Equal to', value: 'equal' },\r\n { title: 'Not Equal', value: 'not' },\r\n { title: 'Greater Than', value: 'greater' },\r\n { title: 'Less Than', value: 'less' },\r\n];\r\n\r\nexport const FIELD_TYPES: SelectOption[] = [\r\n { title: 'Boolean', value: 'boolean' },\r\n { title: 'Integer', value: 'integer' },\r\n { title: 'Text', value: 'text' },\r\n];\r\n","// =============================================================================\r\n// CONDITIONS EDITOR — Condition Type Picker Grid\r\n// =============================================================================\r\n\r\nimport React from 'react';\r\nimport { CONDITION_TYPES } from './conditionMeta';\r\nimport { getConditionIcon } from './conditionMeta';\r\nimport type { ConditionType } from './types';\r\nimport { cn } from '../../utils/cn';\r\n\r\ninterface ConditionTypePickerProps {\r\n onSelect: (type: ConditionType) => void;\r\n}\r\n\r\nexport const ConditionTypePicker: React.FC<ConditionTypePickerProps> = ({ onSelect }) => {\r\n return (\r\n <div className=\"p-4\">\r\n <p className=\"text-xs font-medium text-gray-500 dark:text-gray-400 mb-3\">Choose a condition type:</p>\r\n <div className=\"grid grid-cols-3 sm:grid-cols-4 gap-2\">\r\n {CONDITION_TYPES.map(ct => {\r\n const Icon = getConditionIcon(ct.value);\r\n return (\r\n <button\r\n key={ct.value}\r\n onClick={() => onSelect(ct.value)}\r\n className={cn(\r\n 'flex flex-col items-center gap-1.5 p-3 rounded-lg border-2 border-gray-200 dark:border-gray-700',\r\n 'hover:border-blue-400 dark:hover:border-blue-500 hover:bg-blue-50/50 dark:hover:bg-blue-950/20',\r\n 'transition-all text-center cursor-pointer'\r\n )}\r\n >\r\n <div\r\n className=\"w-8 h-8 rounded-full flex items-center justify-center\"\r\n style={{ backgroundColor: `${ct.color}18`, color: ct.color }}\r\n >\r\n <Icon className=\"w-4 h-4\" />\r\n </div>\r\n <span className=\"text-[11px] font-medium text-gray-700 dark:text-gray-300\">{ct.title}</span>\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n};\r\n","// =============================================================================\r\n// ISO 3166-1 alpha-2 country list\r\n// =============================================================================\r\n\r\nexport interface CountryOption {\r\n code: string;\r\n name: string;\r\n}\r\n\r\nexport const COUNTRIES: CountryOption[] = [\r\n { code: 'AF', name: 'Afghanistan' },\r\n { code: 'AL', name: 'Albania' },\r\n { code: 'DZ', name: 'Algeria' },\r\n { code: 'AD', name: 'Andorra' },\r\n { code: 'AO', name: 'Angola' },\r\n { code: 'AG', name: 'Antigua and Barbuda' },\r\n { code: 'AR', name: 'Argentina' },\r\n { code: 'AM', name: 'Armenia' },\r\n { code: 'AU', name: 'Australia' },\r\n { code: 'AT', name: 'Austria' },\r\n { code: 'AZ', name: 'Azerbaijan' },\r\n { code: 'BS', name: 'Bahamas' },\r\n { code: 'BH', name: 'Bahrain' },\r\n { code: 'BD', name: 'Bangladesh' },\r\n { code: 'BB', name: 'Barbados' },\r\n { code: 'BY', name: 'Belarus' },\r\n { code: 'BE', name: 'Belgium' },\r\n { code: 'BZ', name: 'Belize' },\r\n { code: 'BJ', name: 'Benin' },\r\n { code: 'BT', name: 'Bhutan' },\r\n { code: 'BO', name: 'Bolivia' },\r\n { code: 'BA', name: 'Bosnia and Herzegovina' },\r\n { code: 'BW', name: 'Botswana' },\r\n { code: 'BR', name: 'Brazil' },\r\n { code: 'BN', name: 'Brunei' },\r\n { code: 'BG', name: 'Bulgaria' },\r\n { code: 'BF', name: 'Burkina Faso' },\r\n { code: 'BI', name: 'Burundi' },\r\n { code: 'CV', name: 'Cabo Verde' },\r\n { code: 'KH', name: 'Cambodia' },\r\n { code: 'CM', name: 'Cameroon' },\r\n { code: 'CA', name: 'Canada' },\r\n { code: 'CF', name: 'Central African Republic' },\r\n { code: 'TD', name: 'Chad' },\r\n { code: 'CL', name: 'Chile' },\r\n { code: 'CN', name: 'China' },\r\n { code: 'CO', name: 'Colombia' },\r\n { code: 'KM', name: 'Comoros' },\r\n { code: 'CG', name: 'Congo' },\r\n { code: 'CD', name: 'Congo (DRC)' },\r\n { code: 'CR', name: 'Costa Rica' },\r\n { code: 'CI', name: \"Côte d'Ivoire\" },\r\n { code: 'HR', name: 'Croatia' },\r\n { code: 'CU', name: 'Cuba' },\r\n { code: 'CY', name: 'Cyprus' },\r\n { code: 'CZ', name: 'Czechia' },\r\n { code: 'DK', name: 'Denmark' },\r\n { code: 'DJ', name: 'Djibouti' },\r\n { code: 'DM', name: 'Dominica' },\r\n { code: 'DO', name: 'Dominican Republic' },\r\n { code: 'EC', name: 'Ecuador' },\r\n { code: 'EG', name: 'Egypt' },\r\n { code: 'SV', name: 'El Salvador' },\r\n { code: 'GQ', name: 'Equatorial Guinea' },\r\n { code: 'ER', name: 'Eritrea' },\r\n { code: 'EE', name: 'Estonia' },\r\n { code: 'SZ', name: 'Eswatini' },\r\n { code: 'ET', name: 'Ethiopia' },\r\n { code: 'FJ', name: 'Fiji' },\r\n { code: 'FI', name: 'Finland' },\r\n { code: 'FR', name: 'France' },\r\n { code: 'GA', name: 'Gabon' },\r\n { code: 'GM', name: 'Gambia' },\r\n { code: 'GE', name: 'Georgia' },\r\n { code: 'DE', name: 'Germany' },\r\n { code: 'GH', name: 'Ghana' },\r\n { code: 'GR', name: 'Greece' },\r\n { code: 'GD', name: 'Grenada' },\r\n { code: 'GT', name: 'Guatemala' },\r\n { code: 'GN', name: 'Guinea' },\r\n { code: 'GW', name: 'Guinea-Bissau' },\r\n { code: 'GY', name: 'Guyana' },\r\n { code: 'HT', name: 'Haiti' },\r\n { code: 'HN', name: 'Honduras' },\r\n { code: 'HU', name: 'Hungary' },\r\n { code: 'IS', name: 'Iceland' },\r\n { code: 'IN', name: 'India' },\r\n { code: 'ID', name: 'Indonesia' },\r\n { code: 'IR', name: 'Iran' },\r\n { code: 'IQ', name: 'Iraq' },\r\n { code: 'IE', name: 'Ireland' },\r\n { code: 'IL', name: 'Israel' },\r\n { code: 'IT', name: 'Italy' },\r\n { code: 'JM', name: 'Jamaica' },\r\n { code: 'JP', name: 'Japan' },\r\n { code: 'JO', name: 'Jordan' },\r\n { code: 'KZ', name: 'Kazakhstan' },\r\n { code: 'KE', name: 'Kenya' },\r\n { code: 'KI', name: 'Kiribati' },\r\n { code: 'KP', name: 'North Korea' },\r\n { code: 'KR', name: 'South Korea' },\r\n { code: 'KW', name: 'Kuwait' },\r\n { code: 'KG', name: 'Kyrgyzstan' },\r\n { code: 'LA', name: 'Laos' },\r\n { code: 'LV', name: 'Latvia' },\r\n { code: 'LB', name: 'Lebanon' },\r\n { code: 'LS', name: 'Lesotho' },\r\n { code: 'LR', name: 'Liberia' },\r\n { code: 'LY', name: 'Libya' },\r\n { code: 'LI', name: 'Liechtenstein' },\r\n { code: 'LT', name: 'Lithuania' },\r\n { code: 'LU', name: 'Luxembourg' },\r\n { code: 'MG', name: 'Madagascar' },\r\n { code: 'MW', name: 'Malawi' },\r\n { code: 'MY', name: 'Malaysia' },\r\n { code: 'MV', name: 'Maldives' },\r\n { code: 'ML', name: 'Mali' },\r\n { code: 'MT', name: 'Malta' },\r\n { code: 'MH', name: 'Marshall Islands' },\r\n { code: 'MR', name: 'Mauritania' },\r\n { code: 'MU', name: 'Mauritius' },\r\n { code: 'MX', name: 'Mexico' },\r\n { code: 'FM', name: 'Micronesia' },\r\n { code: 'MD', name: 'Moldova' },\r\n { code: 'MC', name: 'Monaco' },\r\n { code: 'MN', name: 'Mongolia' },\r\n { code: 'ME', name: 'Montenegro' },\r\n { code: 'MA', name: 'Morocco' },\r\n { code: 'MZ', name: 'Mozambique' },\r\n { code: 'MM', name: 'Myanmar' },\r\n { code: 'NA', name: 'Namibia' },\r\n { code: 'NR', name: 'Nauru' },\r\n { code: 'NP', name: 'Nepal' },\r\n { code: 'NL', name: 'Netherlands' },\r\n { code: 'NZ', name: 'New Zealand' },\r\n { code: 'NI', name: 'Nicaragua' },\r\n { code: 'NE', name: 'Niger' },\r\n { code: 'NG', name: 'Nigeria' },\r\n { code: 'MK', name: 'North Macedonia' },\r\n { code: 'NO', name: 'Norway' },\r\n { code: 'OM', name: 'Oman' },\r\n { code: 'PK', name: 'Pakistan' },\r\n { code: 'PW', name: 'Palau' },\r\n { code: 'PS', name: 'Palestine' },\r\n { code: 'PA', name: 'Panama' },\r\n { code: 'PG', name: 'Papua New Guinea' },\r\n { code: 'PY', name: 'Paraguay' },\r\n { code: 'PE', name: 'Peru' },\r\n { code: 'PH', name: 'Philippines' },\r\n { code: 'PL', name: 'Poland' },\r\n { code: 'PT', name: 'Portugal' },\r\n { code: 'QA', name: 'Qatar' },\r\n { code: 'RO', name: 'Romania' },\r\n { code: 'RU', name: 'Russia' },\r\n { code: 'RW', name: 'Rwanda' },\r\n { code: 'KN', name: 'Saint Kitts and Nevis' },\r\n { code: 'LC', name: 'Saint Lucia' },\r\n { code: 'VC', name: 'Saint Vincent and the Grenadines' },\r\n { code: 'WS', name: 'Samoa' },\r\n { code: 'SM', name: 'San Marino' },\r\n { code: 'ST', name: 'São Tomé and Príncipe' },\r\n { code: 'SA', name: 'Saudi Arabia' },\r\n { code: 'SN', name: 'Senegal' },\r\n { code: 'RS', name: 'Serbia' },\r\n { code: 'SC', name: 'Seychelles' },\r\n { code: 'SL', name: 'Sierra Leone' },\r\n { code: 'SG', name: 'Singapore' },\r\n { code: 'SK', name: 'Slovakia' },\r\n { code: 'SI', name: 'Slovenia' },\r\n { code: 'SB', name: 'Solomon Islands' },\r\n { code: 'SO', name: 'Somalia' },\r\n { code: 'ZA', name: 'South Africa' },\r\n { code: 'SS', name: 'South Sudan' },\r\n { code: 'ES', name: 'Spain' },\r\n { code: 'LK', name: 'Sri Lanka' },\r\n { code: 'SD', name: 'Sudan' },\r\n { code: 'SR', name: 'Suriname' },\r\n { code: 'SE', name: 'Sweden' },\r\n { code: 'CH', name: 'Switzerland' },\r\n { code: 'SY', name: 'Syria' },\r\n { code: 'TW', name: 'Taiwan' },\r\n { code: 'TJ', name: 'Tajikistan' },\r\n { code: 'TZ', name: 'Tanzania' },\r\n { code: 'TH', name: 'Thailand' },\r\n { code: 'TL', name: 'Timor-Leste' },\r\n { code: 'TG', name: 'Togo' },\r\n { code: 'TO', name: 'Tonga' },\r\n { code: 'TT', name: 'Trinidad and Tobago' },\r\n { code: 'TN', name: 'Tunisia' },\r\n { code: 'TR', name: 'Turkey' },\r\n { code: 'TM', name: 'Turkmenistan' },\r\n { code: 'TV', name: 'Tuvalu' },\r\n { code: 'UG', name: 'Uganda' },\r\n { code: 'UA', name: 'Ukraine' },\r\n { code: 'AE', name: 'United Arab Emirates' },\r\n { code: 'GB', name: 'United Kingdom' },\r\n { code: 'US', name: 'United States' },\r\n { code: 'UY', name: 'Uruguay' },\r\n { code: 'UZ', name: 'Uzbekistan' },\r\n { code: 'VU', name: 'Vanuatu' },\r\n { code: 'VA', name: 'Vatican City' },\r\n { code: 'VE', name: 'Venezuela' },\r\n { code: 'VN', name: 'Vietnam' },\r\n { code: 'YE', name: 'Yemen' },\r\n { code: 'ZM', name: 'Zambia' },\r\n { code: 'ZW', name: 'Zimbabwe' },\r\n];\r\n\r\nexport function getCountryName(code: string): string {\r\n return COUNTRIES.find(c => c.code === code.toUpperCase())?.name || code;\r\n}\r\n","// =============================================================================\r\n// CONDITIONS EDITOR — Searchable Country Multi-Select (inline styles)\r\n// =============================================================================\r\n\r\nimport React, { useState, useRef, useEffect, useMemo } from 'react';\r\nimport { COUNTRIES, getCountryName } from './countries';\r\n\r\ninterface CountryPickerProps {\r\n selected: string[];\r\n onChange: (codes: string[]) => void;\r\n disabled?: boolean;\r\n placeholder?: string;\r\n}\r\n\r\nexport const CountryPicker: React.FC<CountryPickerProps> = ({\r\n selected,\r\n onChange,\r\n disabled,\r\n placeholder = 'Search countries…',\r\n}) => {\r\n const [open, setOpen] = useState(false);\r\n const [search, setSearch] = useState('');\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n\r\n const filtered = useMemo(() => {\r\n if (!search) return COUNTRIES;\r\n const q = search.toLowerCase();\r\n return COUNTRIES.filter(\r\n c => c.name.toLowerCase().includes(q) || c.code.toLowerCase().includes(q)\r\n );\r\n }, [search]);\r\n\r\n // Close on outside click\r\n useEffect(() => {\r\n if (!open) return;\r\n const handler = (e: MouseEvent) => {\r\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\r\n setOpen(false);\r\n setSearch('');\r\n }\r\n };\r\n document.addEventListener('mousedown', handler);\r\n return () => document.removeEventListener('mousedown', handler);\r\n }, [open]);\r\n\r\n const toggle = (code: string) => {\r\n if (disabled) return;\r\n onChange(\r\n selected.includes(code)\r\n ? selected.filter(c => c !== code)\r\n : [...selected, code]\r\n );\r\n };\r\n\r\n const remove = (code: string) => {\r\n if (disabled) return;\r\n onChange(selected.filter(c => c !== code));\r\n };\r\n\r\n const triggerStyle = {\r\n minHeight: 38,\r\n width: '100%',\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n alignItems: 'center',\r\n gap: 6,\r\n padding: '6px 10px',\r\n borderRadius: 6,\r\n border: `1px solid ${open ? '#3b82f6' : '#d1d5db'}`,\r\n backgroundColor: 'transparent',\r\n cursor: disabled ? 'not-allowed' : 'pointer',\r\n opacity: disabled ? 0.5 : 1,\r\n outline: open ? '1px solid #3b82f6' : 'none',\r\n transition: 'border-color 0.15s',\r\n } as const;\r\n\r\n const chipStyle = {\r\n display: 'inline-flex',\r\n alignItems: 'center',\r\n gap: 4,\r\n padding: '2px 8px',\r\n borderRadius: 9999,\r\n fontSize: 12,\r\n fontWeight: 500,\r\n backgroundColor: '#dbeafe',\r\n color: '#1d4ed8',\r\n border: '1px solid #bfdbfe',\r\n };\r\n\r\n const dropdownStyle = {\r\n position: 'absolute',\r\n zIndex: 50,\r\n marginTop: 4,\r\n width: '100%',\r\n maxHeight: 200,\r\n overflowY: 'auto',\r\n borderRadius: 6,\r\n border: '1px solid #e5e7eb',\r\n backgroundColor: '#ffffff',\r\n boxShadow: '0 4px 12px rgba(0,0,0,0.12)',\r\n } as const;\r\n\r\n const inputStyle = {\r\n flex: 1,\r\n minWidth: 120,\r\n fontSize: 14,\r\n backgroundColor: 'transparent',\r\n outline: 'none',\r\n color: '#111827',\r\n border: 'none',\r\n };\r\n\r\n return (\r\n <div ref={containerRef} style={{ position: 'relative' }}>\r\n {/* Trigger */}\r\n <div\r\n style={triggerStyle}\r\n onClick={() => {\r\n if (disabled) return;\r\n setOpen(true);\r\n setTimeout(() => inputRef.current?.focus(), 0);\r\n }}\r\n >\r\n {selected.map(code => (\r\n <span key={code} style={chipStyle}>\r\n {getCountryName(code)} ({code})\r\n {!disabled && (\r\n <button\r\n type=\"button\"\r\n onClick={(e) => { e.stopPropagation(); remove(code); }}\r\n style={{ background: 'none', border: 'none', cursor: 'pointer', padding: 0, color: '#1d4ed8', fontSize: 14, lineHeight: 1 }}\r\n >\r\n ✕\r\n </button>\r\n )}\r\n </span>\r\n ))}\r\n {selected.length === 0 && !open && (\r\n <span style={{ fontSize: 14, color: '#9ca3af' }}>{placeholder}</span>\r\n )}\r\n {open && (\r\n <input\r\n ref={inputRef}\r\n value={search}\r\n onChange={e => setSearch(e.target.value)}\r\n style={inputStyle}\r\n placeholder={placeholder}\r\n onClick={e => e.stopPropagation()}\r\n />\r\n )}\r\n <span style={{ marginLeft: 'auto', flexShrink: 0, fontSize: 12, color: '#9ca3af', transition: 'transform 0.15s', transform: open ? 'rotate(180deg)' : 'none' }}>▼</span>\r\n </div>\r\n\r\n {/* Dropdown */}\r\n {open && (\r\n <div style={dropdownStyle}>\r\n {filtered.length === 0 ? (\r\n <div style={{ padding: '8px 12px', fontSize: 14, color: '#9ca3af' }}>No countries found</div>\r\n ) : (\r\n filtered.map(country => {\r\n const isSelected = selected.includes(country.code);\r\n return (\r\n <button\r\n key={country.code}\r\n type=\"button\"\r\n onClick={() => toggle(country.code)}\r\n style={{\r\n width: '100%',\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: 8,\r\n padding: '6px 12px',\r\n fontSize: 14,\r\n textAlign: 'left',\r\n border: 'none',\r\n cursor: 'pointer',\r\n transition: 'background-color 0.1s',\r\n backgroundColor: isSelected ? '#eff6ff' : 'transparent',\r\n color: isSelected ? '#1d4ed8' : '#374151',\r\n }}\r\n onMouseEnter={e => { if (!isSelected) (e.currentTarget.style.backgroundColor = '#f9fafb'); }}\r\n onMouseLeave={e => { e.currentTarget.style.backgroundColor = isSelected ? '#eff6ff' : 'transparent'; }}\r\n >\r\n <span style={{\r\n width: 16,\r\n height: 16,\r\n borderRadius: 3,\r\n border: `1px solid ${isSelected ? '#3b82f6' : '#d1d5db'}`,\r\n backgroundColor: isSelected ? '#3b82f6' : 'transparent',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flexShrink: 0,\r\n color: '#ffffff',\r\n fontSize: 10,\r\n }}>\r\n {isSelected && '✓'}\r\n </span>\r\n <span style={{ flex: 1 }}>{country.name}</span>\r\n <span style={{ fontSize: 12, color: '#9ca3af', fontFamily: 'monospace' }}>{country.code}</span>\r\n </button>\r\n );\r\n })\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n","// =============================================================================\r\n// CONDITIONS EDITOR — Per-type configuration UI\r\n// =============================================================================\r\n// Uses inline styles for toggle/pill elements to ensure visibility regardless\r\n// of the host app's Tailwind configuration.\r\n\r\nimport React from 'react';\r\nimport type { Condition, ConditionsEditorProps } from './types';\r\nimport { CountryPicker } from './CountryPicker';\r\nimport {\r\n DISPLAY_OPTIONS, REGION_OPTIONS, USER_TYPE_OPTIONS,\r\n ITEM_STATUS_OPTIONS, VALUE_OPERATORS, FIELD_TYPES,\r\n} from './conditionMeta';\r\n\r\ninterface ConditionConfigProps {\r\n condition: Condition;\r\n onChange: (updated: Condition) => void;\r\n editorProps: Pick<ConditionsEditorProps, 'versions' | 'tags' | 'products' | 'savedConditions' | 'userGroups' | 'facets'>;\r\n readOnly?: boolean;\r\n}\r\n\r\n// Reusable pill-toggle for contains/notContains — uses inline styles\r\nconst ContainsToggle: React.FC<{\r\n value: boolean | undefined;\r\n onChange: (v: boolean) => void;\r\n trueLabel?: string;\r\n falseLabel?: string;\r\n disabled?: boolean;\r\n}> = ({ value = true, onChange, trueLabel = 'Is One Of', falseLabel = 'Is Not One Of', disabled }) => (\r\n <div style={{ display: 'flex', gap: 4, backgroundColor: '#f3f4f6', borderRadius: 6, padding: 4, width: 'fit-content' }}>\r\n {[{ v: true, label: trueLabel }, { v: false, label: falseLabel }].map(opt => (\r\n <button\r\n key={String(opt.v)}\r\n type=\"button\"\r\n onClick={() => onChange(opt.v)}\r\n disabled={disabled}\r\n style={{\r\n padding: '6px 12px',\r\n fontSize: 12,\r\n fontWeight: 600,\r\n borderRadius: 4,\r\n border: 'none',\r\n cursor: disabled ? 'default' : 'pointer',\r\n transition: 'all 0.15s',\r\n ...(value === opt.v\r\n ? { backgroundColor: '#3b82f6', color: '#ffffff', boxShadow: '0 1px 2px rgba(0,0,0,0.1)' }\r\n : { backgroundColor: 'transparent', color: '#6b7280' }\r\n ),\r\n }}\r\n >\r\n {opt.label}\r\n </button>\r\n ))}\r\n </div>\r\n);\r\n\r\n// Toggle switch — uses inline styles\r\nconst ToggleSwitch: React.FC<{\r\n checked: boolean;\r\n onChange: (v: boolean) => void;\r\n label: string;\r\n disabled?: boolean;\r\n}> = ({ checked, onChange, label, disabled }) => (\r\n <label style={{ display: 'inline-flex', alignItems: 'center', gap: 10, fontSize: 12, fontWeight: 500, color: '#4b5563', cursor: 'pointer', userSelect: 'none' }}>\r\n <span\r\n role=\"switch\"\r\n aria-checked={checked}\r\n onClick={() => !disabled && onChange(!checked)}\r\n style={{\r\n display: 'inline-block',\r\n width: 40,\r\n height: 22,\r\n borderRadius: 11,\r\n border: 'none',\r\n cursor: disabled ? 'default' : 'pointer',\r\n position: 'relative',\r\n flexShrink: 0,\r\n transition: 'background-color 0.2s',\r\n backgroundColor: checked ? '#3b82f6' : '#d1d5db',\r\n }}\r\n >\r\n <span style={{\r\n position: 'absolute',\r\n top: 3,\r\n left: checked ? 21 : 3,\r\n width: 16,\r\n height: 16,\r\n borderRadius: '50%',\r\n backgroundColor: '#ffffff',\r\n boxShadow: '0 1px 3px rgba(0,0,0,0.2)',\r\n transition: 'left 0.2s',\r\n }} />\r\n </span>\r\n <span>{label}</span>\r\n </label>\r\n);\r\n\r\n// Multi-select chip picker — uses inline styles\r\nconst ChipSelect: React.FC<{\r\n options: { title: string; value: string; description?: string }[];\r\n selected: string[];\r\n onChange: (values: string[]) => void;\r\n disabled?: boolean;\r\n}> = ({ options, selected, onChange, disabled }) => (\r\n <div style={{ display: 'flex', flexWrap: 'wrap', gap: 6 }}>\r\n {options.map(opt => {\r\n const isSelected = selected.includes(opt.value);\r\n return (\r\n <button\r\n key={opt.value}\r\n type=\"button\"\r\n onClick={() => {\r\n if (disabled) return;\r\n onChange(isSelected ? selected.filter(v => v !== opt.value) : [...selected, opt.value]);\r\n }}\r\n disabled={disabled}\r\n title={opt.description}\r\n style={{\r\n padding: '4px 10px',\r\n fontSize: 12,\r\n borderRadius: 9999,\r\n border: '1px solid',\r\n cursor: disabled ? 'default' : 'pointer',\r\n transition: 'all 0.15s',\r\n ...(isSelected\r\n ? { backgroundColor: '#dbeafe', borderColor: '#93c5fd', color: '#1d4ed8' }\r\n : { backgroundColor: 'transparent', borderColor: '#e5e7eb', color: '#6b7280' }\r\n ),\r\n }}\r\n >\r\n {opt.title}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n);\r\n\r\nconst inputStyle = {\r\n width: '100%',\r\n padding: '6px 10px',\r\n fontSize: 14,\r\n borderRadius: 6,\r\n border: '1px solid #d1d5db',\r\n backgroundColor: 'transparent',\r\n outline: 'none',\r\n};\r\n\r\nconst labelStyle = {\r\n fontSize: 10,\r\n color: '#9ca3af',\r\n marginBottom: 2,\r\n display: 'block',\r\n};\r\n\r\n// Pill group for date/pass-fail style selectors — inline styles\r\nconst PillGroup: React.FC<{\r\n options: { value: string; label: string }[];\r\n selected: string | undefined;\r\n onChange: (v: string) => void;\r\n disabled?: boolean;\r\n}> = ({ options, selected, onChange, disabled }) => (\r\n <div style={{ display: 'flex', gap: 4, backgroundColor: '#f3f4f6', borderRadius: 6, padding: 4, width: 'fit-content' }}>\r\n {options.map(opt => (\r\n <button\r\n key={opt.value}\r\n type=\"button\"\r\n onClick={() => onChange(opt.value)}\r\n disabled={disabled}\r\n style={{\r\n padding: '6px 12px',\r\n fontSize: 12,\r\n fontWeight: 600,\r\n borderRadius: 4,\r\n border: 'none',\r\n cursor: disabled ? 'default' : 'pointer',\r\n transition: 'all 0.15s',\r\n ...(selected === opt.value\r\n ? { backgroundColor: '#3b82f6', color: '#ffffff', boxShadow: '0 1px 2px rgba(0,0,0,0.1)' }\r\n : { backgroundColor: 'transparent', color: '#6b7280' }\r\n ),\r\n }}\r\n >\r\n {opt.label}\r\n </button>\r\n ))}\r\n </div>\r\n);\r\n\r\nexport const ConditionConfig: React.FC<ConditionConfigProps> = ({\r\n condition: cond,\r\n onChange,\r\n editorProps,\r\n readOnly,\r\n}) => {\r\n const update = (patch: Partial<Condition>) => onChange({ ...cond, ...patch });\r\n\r\n switch (cond.type) {\r\n // ─── VERSION ──────────────────────────────────\r\n case 'version':\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\r\n <ContainsToggle value={cond.contains} onChange={v => update({ contains: v })} disabled={readOnly} />\r\n {editorProps.versions?.length ? (\r\n <ChipSelect\r\n options={editorProps.versions.map(v => ({ title: v.title, value: v.value || '' }))}\r\n selected={(cond.versions || []).map(v => typeof v === 'string' ? v : (v.value || ''))}\r\n onChange={vals => update({ versions: vals.map(v => ({ value: v, title: editorProps.versions?.find(o => o.value === v)?.title || v })) })}\r\n disabled={readOnly}\r\n />\r\n ) : (\r\n <p style={{ fontSize: 12, color: '#9ca3af', fontStyle: 'italic' }}>No versions available</p>\r\n )}\r\n </div>\r\n );\r\n\r\n // ─── COUNTRY ──────────────────────────────────\r\n case 'country':\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\r\n <ContainsToggle value={cond.contains} onChange={v => update({ contains: v })} disabled={readOnly} />\r\n <ToggleSwitch\r\n checked={!!cond.useRegions}\r\n onChange={v => update({ useRegions: v })}\r\n label=\"Use regions\"\r\n disabled={readOnly}\r\n />\r\n {cond.useRegions ? (\r\n <ChipSelect\r\n options={REGION_OPTIONS}\r\n selected={cond.regions || []}\r\n onChange={vals => update({ regions: vals })}\r\n disabled={readOnly}\r\n />\r\n ) : (\r\n <CountryPicker\r\n selected={cond.countries || []}\r\n onChange={codes => update({ countries: codes })}\r\n disabled={readOnly}\r\n />\r\n )}\r\n </div>\r\n );\r\n\r\n // ─── VALUE ────────────────────────────────────\r\n case 'value':\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\r\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 8 }}>\r\n <div>\r\n <label style={labelStyle}>Field Name</label>\r\n <input style={inputStyle} value={cond.field || ''} onChange={e => update({ field: e.target.value })} placeholder=\"field_name\" disabled={readOnly} />\r\n </div>\r\n <div>\r\n <label style={labelStyle}>Field Type</label>\r\n <select style={inputStyle} value={cond.fieldType || 'text'} onChange={e => update({ fieldType: e.target.value as any })} disabled={readOnly}>\r\n {FIELD_TYPES.map(ft => <option key={ft.value} value={ft.value}>{ft.title}</option>)}\r\n </select>\r\n </div>\r\n </div>\r\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 8 }}>\r\n <div>\r\n <label style={labelStyle}>Operator</label>\r\n <select style={inputStyle} value={cond.validationType || 'equal'} onChange={e => update({ validationType: e.target.value as any })} disabled={readOnly}>\r\n {VALUE_OPERATORS.map(op => <option key={op.value} value={op.value}>{op.title}</option>)}\r\n </select>\r\n </div>\r\n <div>\r\n <label style={labelStyle}>Value</label>\r\n <input style={inputStyle} value={String(cond.value ?? '')} onChange={e => update({ value: e.target.value })} placeholder=\"value\" disabled={readOnly} />\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n\r\n // ─── USER ─────────────────────────────────────\r\n case 'user':\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\r\n <ChipSelect\r\n options={USER_TYPE_OPTIONS}\r\n selected={cond.userType ? [cond.userType] : []}\r\n onChange={vals => update({ userType: (vals[vals.length - 1] || undefined) as any })}\r\n disabled={readOnly}\r\n />\r\n {cond.userType === 'group' && editorProps.userGroups?.length ? (\r\n <ChipSelect\r\n options={editorProps.userGroups}\r\n selected={cond.groupIds || []}\r\n onChange={vals => update({ groupIds: vals })}\r\n disabled={readOnly}\r\n />\r\n ) : null}\r\n </div>\r\n );\r\n\r\n // ─── DATE ─────────────────────────────────────\r\n case 'date':\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\r\n <PillGroup\r\n options={[\r\n { value: 'before', label: 'Is Before' },\r\n { value: 'after', label: 'Is After' },\r\n { value: 'between', label: 'Is Between' },\r\n ]}\r\n selected={cond.dateTest}\r\n onChange={v => update({ dateTest: v as any })}\r\n disabled={readOnly}\r\n />\r\n {(cond.dateTest === 'before' || cond.dateTest === 'between') && (\r\n <div>\r\n <label style={labelStyle}>{cond.dateTest === 'between' ? 'Start Date' : 'Before Date'}</label>\r\n <input type=\"date\" style={inputStyle} value={cond.beforeDate || ''} onChange={e => update({ beforeDate: e.target.value })} disabled={readOnly} />\r\n </div>\r\n )}\r\n {(cond.dateTest === 'after' || cond.dateTest === 'between') && (\r\n <div>\r\n <label style={labelStyle}>{cond.dateTest === 'between' ? 'End Date' : 'After Date'}</label>\r\n <input type=\"date\" style={inputStyle} value={cond.afterDate || ''} onChange={e => update({ afterDate: e.target.value })} disabled={readOnly} />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n\r\n // ─── DEVICE ───────────────────────────────────\r\n case 'device':\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\r\n <ContainsToggle value={cond.contains} onChange={v => update({ contains: v })} disabled={readOnly} />\r\n <ChipSelect\r\n options={DISPLAY_OPTIONS}\r\n selected={cond.displays || []}\r\n onChange={vals => update({ displays: vals })}\r\n disabled={readOnly}\r\n />\r\n </div>\r\n );\r\n\r\n // ─── TAG ──────────────────────────────────────\r\n case 'tag':\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\r\n <ContainsToggle value={cond.contains} onChange={v => update({ contains: v })} disabled={readOnly} />\r\n {editorProps.tags?.length ? (\r\n <ChipSelect\r\n options={editorProps.tags.map(t => ({ title: t, value: t }))}\r\n selected={cond.tags || []}\r\n onChange={vals => update({ tags: vals })}\r\n disabled={readOnly}\r\n />\r\n ) : (\r\n <input style={inputStyle} value={(cond.tags || []).join(', ')} onChange={e => update({ tags: e.target.value.split(',').map(s => s.trim()).filter(Boolean) })} placeholder=\"tag1, tag2, …\" disabled={readOnly} />\r\n )}\r\n </div>\r\n );\r\n\r\n // ─── FACET ────────────────────────────────────\r\n case 'facet': {\r\n const facets = editorProps.facets || [];\r\n const selectedFacet = facets.find(f => f.key === cond.facetKey);\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\r\n <ContainsToggle\r\n value={cond.contains !== false}\r\n onChange={v => update({ contains: v })}\r\n disabled={readOnly}\r\n />\r\n <div>\r\n <label style={labelStyle}>Facet</label>\r\n {facets.length ? (\r\n <select\r\n style={inputStyle}\r\n value={cond.facetKey || ''}\r\n onChange={e => update({ facetKey: e.target.value || undefined, valueKeys: [] })}\r\n disabled={readOnly}\r\n >\r\n <option value=\"\">Select a facet…</option>\r\n {facets.map(f => (\r\n <option key={f.key} value={f.key}>\r\n {f.name}{f.cardinality === 'multi' ? ' (multi)' : ''}\r\n </option>\r\n ))}\r\n </select>\r\n ) : (\r\n <p style={{ fontSize: 12, color: '#9ca3af', fontStyle: 'italic' }}>\r\n No facets available for this collection\r\n </p>\r\n )}\r\n </div>\r\n {selectedFacet && (\r\n <div>\r\n <label style={labelStyle}>Value{selectedFacet.cardinality === 'multi' ? 's' : ''}</label>\r\n {selectedFacet.values.length ? (\r\n <ChipSelect\r\n options={selectedFacet.values.map(v => ({\r\n title: v.name,\r\n value: v.key,\r\n description: v.description || undefined,\r\n }))}\r\n selected={cond.valueKeys || []}\r\n onChange={vals => update({ valueKeys: vals })}\r\n disabled={readOnly}\r\n />\r\n ) : (\r\n <p style={{ fontSize: 12, color: '#9ca3af', fontStyle: 'italic' }}>\r\n This facet has no values defined\r\n </p>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n\r\n // ─── GEOFENCE ─────────────────────────────────\r\n case 'geofence':\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\r\n <ContainsToggle value={cond.contains} onChange={v => update({ contains: v })} trueLabel=\"Is Inside Of\" falseLabel=\"Is Outside Of\" disabled={readOnly} />\r\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 8 }}>\r\n {[\r\n { label: 'Latitude 1 (NW)', key: 'lat1' as const },\r\n { label: 'Longitude 1 (NW)', key: 'lng1' as const },\r\n { label: 'Latitude 2 (SE)', key: 'lat2' as const },\r\n { label: 'Longitude 2 (SE)', key: 'lng2' as const },\r\n ].map(f => (\r\n <div key={f.key}>\r\n <label style={labelStyle}>{f.label}</label>\r\n <input\r\n type=\"number\"\r\n step=\"any\"\r\n style={inputStyle}\r\n value={cond[f.key] ?? ''}\r\n onChange={e => update({ [f.key]: e.target.value ? parseFloat(e.target.value) : undefined })}\r\n disabled={readOnly}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n\r\n // ─── PRODUCT ──────────────────────────────────\r\n case 'product':\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\r\n <ContainsToggle value={cond.contains} onChange={v => update({ contains: v })} disabled={readOnly} />\r\n {editorProps.products?.length ? (\r\n <ChipSelect\r\n options={editorProps.products}\r\n selected={cond.productIds || []}\r\n onChange={vals => update({ productIds: vals })}\r\n disabled={readOnly}\r\n />\r\n ) : (\r\n <input style={inputStyle} value={(cond.productIds || []).join(', ')} onChange={e => update({ productIds: e.target.value.split(',').map(s => s.trim()).filter(Boolean) })} placeholder=\"product-id-1, product-id-2, …\" disabled={readOnly} />\r\n )}\r\n </div>\r\n );\r\n\r\n // ─── ITEM STATUS ──────────────────────────────\r\n case 'itemStatus':\r\n return (\r\n <ChipSelect\r\n options={ITEM_STATUS_OPTIONS}\r\n selected={cond.statusType ? [cond.statusType] : []}\r\n onChange={vals => update({ statusType: (vals[vals.length - 1] || undefined) as any })}\r\n disabled={readOnly}\r\n />\r\n );\r\n\r\n // ─── CONDITION REFERENCE ──────────────────────\r\n case 'condition':\r\n return (\r\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\r\n {editorProps.savedConditions?.length ? (\r\n <select style={inputStyle} value={cond.conditionId || ''} onChange={e => update({ conditionId: e.target.value })} disabled={readOnly}>\r\n <option value=\"\">Select a condition…</option>\r\n {editorProps.savedConditions.map(c => <option key={c.value} value={c.value}>{c.title}</option>)}\r\n </select>\r\n ) : (\r\n <input style={inputStyle} value={cond.conditionId || ''} onChange={e => update({ conditionId: e.target.value })} placeholder=\"Condition ID\" disabled={readOnly} />\r\n )}\r\n <PillGroup\r\n options={[\r\n { value: 'true', label: 'Passes' },\r\n { value: 'false', label: 'Fails' },\r\n ]}\r\n selected={cond.passes === true ? 'true' : cond.passes === false ? 'false' : undefined}\r\n onChange={v => update({ passes: v === 'true' })}\r\n disabled={readOnly}\r\n />\r\n </div>\r\n );\r\n\r\n default:\r\n return <p style={{ fontSize: 12, color: '#9ca3af', fontStyle: 'italic' }}>Unknown condition type</p>;\r\n }\r\n};\r\n","// =============================================================================\r\n// CONDITIONS EDITOR — Single Condition Card\r\n// =============================================================================\r\n\r\nimport React, { useState } from 'react';\r\nimport type { Condition, ConditionType, ConditionsEditorProps } from './types';\r\nimport { getConditionMeta, getConditionIcon, getConditionSummary } from './conditionMeta';\r\nimport { ConditionTypePicker } from './ConditionTypePicker';\r\nimport { ConditionConfig } from './ConditionConfig';\r\nimport { cn } from '../../utils/cn';\r\nimport { ChevronDown, ChevronRight, Trash2, RefreshCw } from 'lucide-react';\r\n\r\ninterface ConditionCardProps {\r\n condition: Condition;\r\n index: number;\r\n onChange: (updated: Condition) => void;\r\n onDelete: () => void;\r\n editorProps: Pick<ConditionsEditorProps, 'versions' | 'tags' | 'products' | 'savedConditions' | 'userGroups' | 'facets'>;\r\n readOnly?: boolean;\r\n}\r\n\r\nexport const ConditionCard: React.FC<ConditionCardProps> = ({\r\n condition,\r\n index,\r\n onChange,\r\n onDelete,\r\n editorProps,\r\n readOnly,\r\n}) => {\r\n const [expanded, setExpanded] = useState(!condition.type);\r\n const meta = getConditionMeta(condition.type);\r\n const Icon = getConditionIcon(condition.type);\r\n const summary = getConditionSummary(condition, { savedConditions: editorProps.savedConditions, facets: editorProps.facets });\r\n\r\n const handleSelectType = (type: ConditionType) => {\r\n onChange({ ...condition, type });\r\n setExpanded(true);\r\n };\r\n\r\n return (\r\n <div className=\"rounded-lg border border-gray-200 dark:border-gray-700 shadow-sm transition-shadow hover:shadow-md\">\r\n {/* Header */}\r\n <div\r\n className={cn(\r\n 'flex items-center gap-3 px-4 py-3 cursor-pointer select-none transition-colors',\r\n 'hover:bg-gray-50 dark:hover:bg-gray-800/50'\r\n )}\r\n style={meta ? {\r\n background: `linear-gradient(90deg, ${meta.color}08 0%, transparent 100%)`,\r\n } : undefined}\r\n onClick={() => setExpanded(!expanded)}\r\n >\r\n {/* Icon */}\r\n <div\r\n className=\"w-8 h-8 rounded-full flex items-center justify-center flex-shrink-0\"\r\n style={meta ? { backgroundColor: `${meta.color}18`, color: meta.color } : { backgroundColor: '#e5e7eb' }}\r\n >\r\n <Icon className=\"w-4 h-4\" />\r\n </div>\r\n\r\n {/* Title & summary */}\r\n <div className=\"flex-1 min-w-0\">\r\n <p className=\"text-sm font-medium text-gray-800 dark:text-gray-200 truncate\">\r\n {meta?.title || 'Select Condition Type'}\r\n </p>\r\n <p className=\"text-[11px] text-gray-500 dark:text-gray-400 truncate\">{summary}</p>\r\n </div>\r\n\r\n {/* Actions */}\r\n <div className=\"flex items-center gap-1 flex-shrink-0\">\r\n {condition.type && !readOnly && (\r\n <button\r\n onClick={(e) => { e.stopPropagation(); onChange({ type: null }); }}\r\n className=\"p-1 rounded hover:bg-gray-200 dark:hover:bg-gray-700 transition-colors\"\r\n title=\"Change type\"\r\n >\r\n <RefreshCw className=\"w-3.5 h-3.5 text-gray-400\" />\r\n </button>\r\n )}\r\n {!readOnly && (\r\n <button\r\n onClick={(e) => { e.stopPropagation(); onDelete(); }}\r\n className=\"p-1 rounded hover:bg-red-100 dark:hover:bg-red-900/30 transition-colors\"\r\n title=\"Delete\"\r\n >\r\n <Trash2 className=\"w-3.5 h-3.5 text-red-400\" />\r\n </button>\r\n )}\r\n {expanded ? <ChevronDown className=\"w-4 h-4 text-gray-400\" /> : <ChevronRight className=\"w-4 h-4 text-gray-400\" />}\r\n </div>\r\n </div>\r\n\r\n {/* Body */}\r\n {expanded && (\r\n <div className=\"border-t border-gray-100 dark:border-gray-800 px-4 py-3\">\r\n {!condition.type ? (\r\n <ConditionTypePicker onSelect={handleSelectType} />\r\n ) : (\r\n <div className=\"space-y-3\">\r\n {meta?.helpText && (\r\n <p className=\"text-[11px] text-gray-400 dark:text-gray-500 italic\">{meta.helpText}</p>\r\n )}\r\n <ConditionConfig\r\n condition={condition}\r\n onChange={onChange}\r\n editorProps={editorProps}\r\n readOnly={readOnly}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n","// =============================================================================\r\n// CONDITIONS EDITOR — Main Component\r\n// =============================================================================\r\n// Supports inline and dialog modes. Dialog mode shows a summary trigger and\r\n// opens a modal with the full editor.\r\n\r\nimport React, { useCallback, useState } from 'react';\r\nimport type { Condition, ConditionGroup, ConditionsEditorProps } from './types';\r\nimport { ConditionCard } from './ConditionCard';\r\nimport { getConditionMeta, getConditionSummary } from './conditionMeta';\r\nimport { useFacets } from './useFacets';\r\nimport { cn } from '../../utils/cn';\r\nimport { Plus, GitBranch, Filter, X, ChevronRight } from 'lucide-react';\r\n\r\n// ---------------------------------------------------------------------------\r\n// Summary badge for dialog trigger\r\n// ---------------------------------------------------------------------------\r\nconst ConditionsSummary: React.FC<{\r\n value: ConditionGroup;\r\n savedConditions?: { title: string; value: string }[];\r\n facets?: import('./types').FacetOption[];\r\n}> = ({ value, savedConditions, facets }) => {\r\n const count = value.conditions.filter(c => c.type).length;\r\n if (count === 0) {\r\n return (\r\n <div className=\"flex items-center gap-2 text-sm text-gray-500 dark:text-gray-400\">\r\n <Filter className=\"w-4 h-4\" />\r\n <span>No conditions set</span>\r\n <ChevronRight className=\"w-4 h-4 ml-auto\" />\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div className=\"space-y-1\">\r\n <div className=\"flex items-center gap-2 text-xs font-medium text-gray-500 dark:text-gray-400\">\r\n <Filter className=\"w-3.5 h-3.5\" />\r\n {count} condition{count !== 1 ? 's' : ''} · {value.type === 'and' ? 'Match ALL' : 'Match ANY'}\r\n <ChevronRight className=\"w-4 h-4 ml-auto\" />\r\n </div>\r\n <div className=\"flex flex-wrap gap-1.5\">\r\n {value.conditions.filter(c => c.type).slice(0, 5).map((cond, i) => {\r\n const meta = getConditionMeta(cond.type);\r\n return (\r\n <span\r\n key={i}\r\n className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-[11px] font-medium\"\r\n style={{\r\n backgroundColor: meta ? `${meta.color}15` : '#e5e7eb',\r\n color: meta?.color || '#6b7280',\r\n }}\r\n >\r\n {getConditionSummary(cond, { savedConditions, facets })}\r\n </span>\r\n );\r\n })}\r\n {count > 5 && (\r\n <span className=\"inline-flex items-center px-2 py-0.5 rounded-full text-[11px] font-medium bg-gray-100 dark:bg-gray-800 text-gray-500\">\r\n +{count - 5} more\r\n </span>\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n// ---------------------------------------------------------------------------\r\n// Lightweight dialog\r\n// ---------------------------------------------------------------------------\r\nconst EditorDialog: React.FC<{\r\n open: boolean;\r\n onClose: () => void;\r\n children: React.ReactNode;\r\n}> = ({ open, onClose, children }) => {\r\n if (!open) return null;\r\n return (\r\n <div className=\"fixed inset-0 z-50 flex items-center justify-center\">\r\n <div className=\"absolute inset-0 bg-black/50 backdrop-blur-sm\" onClick={onClose} />\r\n <div className=\"relative z-10 w-full max-w-2xl max-h-[80vh] bg-white dark:bg-gray-900 rounded-xl shadow-2xl border border-gray-200 dark:border-gray-700 flex flex-col overflow-hidden mx-4\">\r\n <div className=\"flex items-center justify-between px-4 py-3 border-b border-gray-200 dark:border-gray-700\">\r\n <h3 className=\"text-sm font-semibold text-gray-900 dark:text-gray-100\">\r\n Edit Conditions\r\n </h3>\r\n <button\r\n onClick={onClose}\r\n className=\"p-1 rounded hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors\"\r\n >\r\n <X className=\"w-4 h-4 text-gray-500\" />\r\n </button>\r\n </div>\r\n <div className=\"flex-1 overflow-y-auto p-4\">\r\n {children}\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n// ---------------------------------------------------------------------------\r\n// Inner editor content (shared by both modes)\r\n// ---------------------------------------------------------------------------\r\nconst ConditionsEditorContent: React.FC<Omit<ConditionsEditorProps, 'mode' | 'trigger' | 'open' | 'onClose'>> = ({\r\n value,\r\n onChange,\r\n isGlobal,\r\n versions,\r\n tags,\r\n products,\r\n savedConditions,\r\n userGroups,\r\n facets,\r\n collectionId,\r\n getFacets,\r\n readOnly = false,\r\n className,\r\n}) => {\r\n const resolvedFacets = useFacets(collectionId, facets, getFacets);\r\n const editorProps = { versions, tags, products, savedConditions, userGroups, facets: resolvedFacets };\r\n\r\n const updateCondition = useCallback((index: number, updated: Condition) => {\r\n const next = { ...value, conditions: [...value.conditions] };\r\n next.conditions[index] = updated;\r\n onChange(next);\r\n }, [value, onChange]);\r\n\r\n const deleteCondition = useCallback((index: number) => {\r\n const next = { ...value, conditions: value.conditions.filter((_, i) => i !== index) };\r\n onChange(next);\r\n }, [value, onChange]);\r\n\r\n const addCondition = useCallback(() => {\r\n const next = { ...value, conditions: [...value.conditions, {} as Condition] };\r\n onChange(next);\r\n }, [value, onChange]);\r\n\r\n const toggleLogic = useCallback((logic: 'and' | 'or') => {\r\n onChange({ ...value, type: logic });\r\n }, [value, onChange]);\r\n\r\n return (\r\n <div className={cn('smartlinks-ui-conditions-editor space-y-4', className)}>\r\n {/* Global settings */}\r\n {isGlobal && (\r\n <div className=\"rounded-lg border border-gray-200 dark:border-gray-700 p-4 space-y-3\">\r\n <input\r\n className=\"w-full px-3 py-2 text-sm rounded-md border border-gray-300 dark:border-gray-600 bg-transparent focus:outline-none focus:ring-1 focus:ring-blue-500\"\r\n value={value.title || ''}\r\n onChange={e => onChange({ ...value, title: e.target.value })}\r\n placeholder=\"Condition Title\"\r\n disabled={readOnly}\r\n />\r\n <label className=\"flex items-center gap-2 text-sm text-gray-600 dark:text-gray-400 cursor-pointer\">\r\n <button\r\n onClick={() => onChange({ ...value, disabled: !value.disabled })}\r\n disabled={readOnly}\r\n className={cn(\r\n 'w-9 h-5 rounded-full transition-colors relative',\r\n value.disabled ? 'bg-blue-500' : 'bg-gray-300 dark:bg-gray-600'\r\n )}\r\n >\r\n <span className={cn(\r\n 'absolute top-0.5 w-4 h-4 rounded-full bg-white shadow transition-transform',\r\n value.disabled ? 'translate-x-4' : 'translate-x-0.5'\r\n )} />\r\n </button>\r\n Disabled / Hidden\r\n </label>\r\n </div>\r\n )}\r\n\r\n {/* Logic type toggle */}\r\n <div style={{ borderRadius: 8, border: '1px solid #e5e7eb', padding: 16 }}>\r\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, fontSize: 12, fontWeight: 500, color: '#6b7280', marginBottom: 12 }}>\r\n <GitBranch className=\"w-3.5 h-3.5\" />\r\n Logic Type\r\n </div>\r\n <div style={{ display: 'flex', gap: 4, backgroundColor: '#f3f4f6', borderRadius: 6, padding: 4 }}>\r\n {([{ v: 'and' as const, l: 'Match ALL (AND)' }, { v: 'or' as const, l: 'Match ANY (OR)' }]).map(opt => (\r\n <button\r\n key={opt.v}\r\n type=\"button\"\r\n onClick={() => toggleLogic(opt.v)}\r\n disabled={readOnly}\r\n style={{\r\n flex: 1,\r\n padding: '8px 12px',\r\n fontSize: 14,\r\n fontWeight: 600,\r\n borderRadius: 4,\r\n border: 'none',\r\n cursor: readOnly ? 'default' : 'pointer',\r\n transition: 'all 0.15s',\r\n ...(value.type === opt.v\r\n ? { backgroundColor: '#3b82f6', color: '#ffffff', boxShadow: '0 1px 2px rgba(0,0,0,0.1)' }\r\n : { backgroundColor: 'transparent', color: '#6b7280' }\r\n ),\r\n }}\r\n >\r\n {opt.l}\r\n </button>\r\n ))}\r\n </div>\r\n </div>\r\n\r\n {/* Conditions header */}\r\n <div className=\"flex items-center gap-2\">\r\n <p className=\"text-sm font-semibold text-gray-700 dark:text-gray-300\">Conditions</p>\r\n <span className=\"px-2 py-0.5 text-[10px] font-medium rounded-full bg-blue-100 dark:bg-blue-900/40 text-blue-700 dark:text-blue-300\">\r\n {value.conditions.length}\r\n </span>\r\n </div>\r\n\r\n {/* Condition cards */}\r\n <div className=\"space-y-3\">\r\n {value.conditions.map((cond, idx) => (\r\n <ConditionCard\r\n key={idx}\r\n condition={cond}\r\n index={idx}\r\n onChange={(updated) => updateCondition(idx, updated)}\r\n onDelete={() => deleteCondition(idx)}\r\n editorProps={editorProps}\r\n readOnly={readOnly}\r\n />\r\n ))}\r\n </div>\r\n\r\n {/* Add button */}\r\n {!readOnly && (\r\n <button\r\n onClick={addCondition}\r\n className={cn(\r\n 'w-full flex items-center justify-center gap-2 py-3 rounded-lg',\r\n 'border-2 border-dashed border-gray-300 dark:border-gray-600',\r\n 'text-sm text-gray-500 dark:text-gray-400',\r\n 'hover:border-blue-400 dark:hover:border-blue-500 hover:text-blue-500 dark:hover:text-blue-400',\r\n 'transition-colors cursor-pointer'\r\n )}\r\n >\r\n <Plus className=\"w-4 h-4\" />\r\n Add New Condition\r\n </button>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n// ---------------------------------------------------------------------------\r\n// Public API\r\n// ---------------------------------------------------------------------------\r\nexport const ConditionsEditor: React.FC<ConditionsEditorProps> = (props) => {\r\n const { mode = 'inline', trigger, open: controlledOpen, onClose, value, savedConditions, facets, collectionId, getFacets, className, ...rest } = props;\r\n\r\n const [internalOpen, setInternalOpen] = useState(false);\r\n const isOpen = controlledOpen ?? internalOpen;\r\n\r\n // Resolve facets so the collapsed dialog summary chips can render names too.\r\n const resolvedFacets = useFacets(collectionId, facets, getFacets);\r\n\r\n const handleClose = useCallback(() => {\r\n setInternalOpen(false);\r\n onClose?.();\r\n }, [onClose]);\r\n\r\n // Inline mode — render editor directly\r\n if (mode === 'inline') {\r\n return (\r\n <ConditionsEditorContent\r\n value={value}\r\n savedConditions={savedConditions}\r\n facets={facets}\r\n collectionId={collectionId}\r\n getFacets={getFacets}\r\n className={className}\r\n {...rest}\r\n />\r\n );\r\n }\r\n\r\n // Dialog mode\r\n const triggerElement = trigger || (\r\n <div className={cn(\r\n 'rounded-lg border border-gray-200 dark:border-gray-700 p-3 cursor-pointer',\r\n 'hover:border-gray-300 dark:hover:border-gray-600 transition-colors',\r\n className,\r\n )}>\r\n <ConditionsSummary value={value} savedConditions={savedConditions} facets={resolvedFacets} />\r\n </div>\r\n );\r\n\r\n return (\r\n <>\r\n <span onClick={() => setInternalOpen(true)} className=\"cursor-pointer\">\r\n {triggerElement}\r\n </span>\r\n <EditorDialog open={isOpen} onClose={handleClose}>\r\n <ConditionsEditorContent\r\n value={value}\r\n savedConditions={savedConditions}\r\n facets={facets}\r\n collectionId={collectionId}\r\n getFacets={getFacets}\r\n {...rest}\r\n />\r\n </EditorDialog>\r\n </>\r\n );\r\n};\r\n"]}