@alfadocs/ui-kit-debug 0.83.0 → 0.84.0

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 (120) hide show
  1. package/dist/_chunks/dashboard-grid-D2dm0IRN.js +691 -0
  2. package/dist/_chunks/dashboard-grid-D2dm0IRN.js.map +1 -0
  3. package/dist/_chunks/widget-picker-DEmTVuFL.js +193 -0
  4. package/dist/_chunks/widget-picker-DEmTVuFL.js.map +1 -0
  5. package/dist/agent-catalog.json +182 -1
  6. package/dist/agent-i18n/en.json +20 -0
  7. package/dist/components/dashboard-grid/dashboard-grid-engine.d.ts +37 -0
  8. package/dist/components/dashboard-grid/dashboard-grid-engine.d.ts.map +1 -0
  9. package/dist/components/dashboard-grid/dashboard-grid.agent.d.ts +4 -0
  10. package/dist/components/dashboard-grid/dashboard-grid.agent.d.ts.map +1 -0
  11. package/dist/components/dashboard-grid/dashboard-grid.d.ts +74 -0
  12. package/dist/components/dashboard-grid/dashboard-grid.d.ts.map +1 -0
  13. package/dist/components/dashboard-grid/index.d.ts +3 -0
  14. package/dist/components/dashboard-grid/index.d.ts.map +1 -0
  15. package/dist/components/dashboard-grid/index.js +6 -0
  16. package/dist/components/dashboard-grid/index.js.map +1 -0
  17. package/dist/components/index.d.ts +2 -0
  18. package/dist/components/index.d.ts.map +1 -1
  19. package/dist/components/widget-picker/index.d.ts +3 -0
  20. package/dist/components/widget-picker/index.d.ts.map +1 -0
  21. package/dist/components/widget-picker/index.js +6 -0
  22. package/dist/components/widget-picker/index.js.map +1 -0
  23. package/dist/components/widget-picker/widget-picker.agent.d.ts +4 -0
  24. package/dist/components/widget-picker/widget-picker.agent.d.ts.map +1 -0
  25. package/dist/components/widget-picker/widget-picker.d.ts +49 -0
  26. package/dist/components/widget-picker/widget-picker.d.ts.map +1 -0
  27. package/dist/i18n/locales/ar.d.ts +21 -0
  28. package/dist/i18n/locales/ar.d.ts.map +1 -1
  29. package/dist/i18n/locales/ar.js +21 -0
  30. package/dist/i18n/locales/ar.js.map +1 -1
  31. package/dist/i18n/locales/de.d.ts +21 -0
  32. package/dist/i18n/locales/de.d.ts.map +1 -1
  33. package/dist/i18n/locales/de.js +21 -0
  34. package/dist/i18n/locales/de.js.map +1 -1
  35. package/dist/i18n/locales/el.d.ts +21 -0
  36. package/dist/i18n/locales/el.d.ts.map +1 -1
  37. package/dist/i18n/locales/el.js +21 -0
  38. package/dist/i18n/locales/el.js.map +1 -1
  39. package/dist/i18n/locales/en.d.ts +21 -0
  40. package/dist/i18n/locales/en.d.ts.map +1 -1
  41. package/dist/i18n/locales/en.js +21 -0
  42. package/dist/i18n/locales/en.js.map +1 -1
  43. package/dist/i18n/locales/es.d.ts +21 -0
  44. package/dist/i18n/locales/es.d.ts.map +1 -1
  45. package/dist/i18n/locales/es.js +21 -0
  46. package/dist/i18n/locales/es.js.map +1 -1
  47. package/dist/i18n/locales/fr.d.ts +21 -0
  48. package/dist/i18n/locales/fr.d.ts.map +1 -1
  49. package/dist/i18n/locales/fr.js +21 -0
  50. package/dist/i18n/locales/fr.js.map +1 -1
  51. package/dist/i18n/locales/hi.d.ts +21 -0
  52. package/dist/i18n/locales/hi.d.ts.map +1 -1
  53. package/dist/i18n/locales/hi.js +21 -0
  54. package/dist/i18n/locales/hi.js.map +1 -1
  55. package/dist/i18n/locales/it.d.ts +21 -0
  56. package/dist/i18n/locales/it.d.ts.map +1 -1
  57. package/dist/i18n/locales/it.js +21 -0
  58. package/dist/i18n/locales/it.js.map +1 -1
  59. package/dist/i18n/locales/ja.d.ts +21 -0
  60. package/dist/i18n/locales/ja.d.ts.map +1 -1
  61. package/dist/i18n/locales/ja.js +21 -0
  62. package/dist/i18n/locales/ja.js.map +1 -1
  63. package/dist/i18n/locales/nl.d.ts +21 -0
  64. package/dist/i18n/locales/nl.d.ts.map +1 -1
  65. package/dist/i18n/locales/nl.js +21 -0
  66. package/dist/i18n/locales/nl.js.map +1 -1
  67. package/dist/i18n/locales/pl.d.ts +21 -0
  68. package/dist/i18n/locales/pl.d.ts.map +1 -1
  69. package/dist/i18n/locales/pl.js +21 -0
  70. package/dist/i18n/locales/pl.js.map +1 -1
  71. package/dist/i18n/locales/pt.d.ts +21 -0
  72. package/dist/i18n/locales/pt.d.ts.map +1 -1
  73. package/dist/i18n/locales/pt.js +21 -0
  74. package/dist/i18n/locales/pt.js.map +1 -1
  75. package/dist/i18n/locales/ro.d.ts +21 -0
  76. package/dist/i18n/locales/ro.d.ts.map +1 -1
  77. package/dist/i18n/locales/ro.js +21 -0
  78. package/dist/i18n/locales/ro.js.map +1 -1
  79. package/dist/i18n/locales/ru.d.ts +21 -0
  80. package/dist/i18n/locales/ru.d.ts.map +1 -1
  81. package/dist/i18n/locales/ru.js +21 -0
  82. package/dist/i18n/locales/ru.js.map +1 -1
  83. package/dist/i18n/locales/sq.d.ts +21 -0
  84. package/dist/i18n/locales/sq.d.ts.map +1 -1
  85. package/dist/i18n/locales/sq.js +21 -0
  86. package/dist/i18n/locales/sq.js.map +1 -1
  87. package/dist/i18n/locales/sv.d.ts +21 -0
  88. package/dist/i18n/locales/sv.d.ts.map +1 -1
  89. package/dist/i18n/locales/sv.js +21 -0
  90. package/dist/i18n/locales/sv.js.map +1 -1
  91. package/dist/i18n/locales/tr.d.ts +21 -0
  92. package/dist/i18n/locales/tr.d.ts.map +1 -1
  93. package/dist/i18n/locales/tr.js +21 -0
  94. package/dist/i18n/locales/tr.js.map +1 -1
  95. package/dist/i18n/locales/zh.d.ts +21 -0
  96. package/dist/i18n/locales/zh.d.ts.map +1 -1
  97. package/dist/i18n/locales/zh.js +21 -0
  98. package/dist/i18n/locales/zh.js.map +1 -1
  99. package/dist/index.js +74 -68
  100. package/dist/index.js.map +1 -1
  101. package/dist/locales/ar.json +21 -0
  102. package/dist/locales/de.json +21 -0
  103. package/dist/locales/el.json +21 -0
  104. package/dist/locales/en.json +21 -0
  105. package/dist/locales/es.json +21 -0
  106. package/dist/locales/fr.json +21 -0
  107. package/dist/locales/hi.json +21 -0
  108. package/dist/locales/it.json +21 -0
  109. package/dist/locales/ja.json +21 -0
  110. package/dist/locales/nl.json +21 -0
  111. package/dist/locales/pl.json +21 -0
  112. package/dist/locales/pt.json +21 -0
  113. package/dist/locales/ro.json +21 -0
  114. package/dist/locales/ru.json +21 -0
  115. package/dist/locales/sq.json +21 -0
  116. package/dist/locales/sv.json +21 -0
  117. package/dist/locales/tr.json +21 -0
  118. package/dist/locales/zh.json +21 -0
  119. package/dist/tokens.css +1 -1
  120. package/package.json +9 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../node_modules/lucide-react/dist/esm/icons/arrow-right.mjs","../node_modules/lucide-react/dist/esm/icons/refresh-ccw.mjs","../node_modules/lucide-react/dist/esm/icons/repeat.mjs","../src/patterns/payment-automation-upsell/payment-automation-upsell.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"m12 5 7 7-7 7\", key: \"xquz4c\" }]\n];\nconst ArrowRight = createLucideIcon(\"arrow-right\", __iconNode);\n\nexport { __iconNode, ArrowRight as default };\n//# sourceMappingURL=arrow-right.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\", key: \"14sxne\" }],\n [\"path\", { d: \"M3 3v5h5\", key: \"1xhq8a\" }],\n [\"path\", { d: \"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16\", key: \"1hlbsb\" }],\n [\"path\", { d: \"M16 16h5v5\", key: \"ccwih5\" }]\n];\nconst RefreshCcw = createLucideIcon(\"refresh-ccw\", __iconNode);\n\nexport { __iconNode, RefreshCcw as default };\n//# sourceMappingURL=refresh-ccw.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"m17 2 4 4-4 4\", key: \"nntrym\" }],\n [\"path\", { d: \"M3 11v-1a4 4 0 0 1 4-4h14\", key: \"84bu3i\" }],\n [\"path\", { d: \"m7 22-4-4 4-4\", key: \"1wqhfi\" }],\n [\"path\", { d: \"M21 13v1a4 4 0 0 1-4 4H3\", key: \"1rx37r\" }]\n];\nconst Repeat = createLucideIcon(\"repeat\", __iconNode);\n\nexport { __iconNode, Repeat as default };\n//# sourceMappingURL=repeat.mjs.map\n","/* -------------------------------------------------------------------- */\n/* Payment Automation Upsell — PLG surface for the payment-request index */\n/* when the Payment Automation (PAU) module is NOT enabled. */\n/* */\n/* Replaces the old dead-end \"module disabled\" page with a value preview */\n/* + role-aware call to action. Ships as a RUNTIME pattern (an importable */\n/* component) so the platform mounts it directly instead of hand-rolling */\n/* markup — see src/patterns/README.md § \"Exception — runtime patterns\". */\n/* */\n/* Copy is consumer-owned: every user-visible string arrives pre- */\n/* translated via props (the host app localises through its own i18n), */\n/* mirroring MarketplaceAppShell. The kit owns the design, not the words. */\n/* Marketing-serif display heading is the DS-owner-sanctioned PAU */\n/* exception (CLAUDE.md constraint 10 / 06-i18n § Font Requirements). */\n/* -------------------------------------------------------------------- */\n\nimport { forwardRef, useId, type HTMLAttributes, type ReactNode } from 'react';\nimport {\n ArrowRight,\n CalendarClock,\n CircleCheck,\n Clock,\n CreditCard,\n Lock,\n ReceiptText,\n RefreshCcw,\n Repeat,\n Send,\n ShieldCheck,\n TriangleAlert,\n} from 'lucide-react';\n\nimport { Alert } from '../../components/alert';\nimport { Badge } from '../../components/badge';\nimport { BenefitCard } from '../../components/benefit-card';\nimport { Button } from '../../components/button';\nimport { Card } from '../../components/card';\nimport { List } from '../../components/list';\nimport { Stat } from '../../components/stat';\n\n/** Who is viewing the surface — drives which CTA is shown. */\nexport type PaymentAutomationUpsellRole = 'owner' | 'member';\n\n/** Status of a mock payment request in the preview. */\nexport type PaymentAutomationUpsellRequestStatus =\n | 'paid'\n | 'authorized'\n | 'pending'\n | 'overdue';\n\nexport interface PaymentAutomationUpsellStep {\n id: string;\n /** Pre-translated step title. */\n title: string;\n /** Pre-translated step body. */\n description: string;\n /** Optional icon override; a sensible default is chosen per position. */\n icon?: ReactNode;\n}\n\nexport interface PaymentAutomationUpsellFeature {\n id: string;\n /** Pre-translated single line of the \"what's included\" checklist. */\n label: string;\n}\n\nexport interface PaymentAutomationUpsellMetric {\n id: string;\n /** Headline value, already formatted/localised, e.g. \"3×\" or \"−75%\". */\n value: string;\n /** Pre-translated caption under the value. */\n label: string;\n}\n\nexport interface PaymentAutomationUpsellPreviewRow {\n id: string;\n /** Pre-translated row title, e.g. \"Richiesta RDP-2026-0042\". */\n title: string;\n /** Optional pre-translated secondary line (plan / date). Never real PHI. */\n meta?: string;\n /** Amount in minor units (cents); formatted with `locale` + `currency`. */\n amountCents: number;\n /** Drives the status badge colour + icon. */\n status: PaymentAutomationUpsellRequestStatus;\n /** Pre-translated status label shown in the badge. */\n statusLabel: string;\n}\n\nexport interface PaymentAutomationUpsellLabels {\n /** Small eyebrow above the headline — usually the module name. */\n eyebrow?: string;\n /** Serif display headline. */\n title: string;\n /** One- or two-sentence supporting subtitle. */\n subtitle: string;\n /** Heading for the \"how it works\" step column. */\n howItWorksHeading: string;\n /** Heading for the mock preview. */\n previewHeading: string;\n /** Optional small caption flagging the preview as illustrative. */\n previewCaption?: string;\n /** Title of the right-hand call-to-action card. */\n ctaCardTitle: string;\n /** Optional pitch line under the CTA card title. */\n ctaCardSubtitle?: string;\n /** Optional heading above the feature checklist. */\n featuresHeading?: string;\n /** Optional price / plan note, e.g. \"Incluso nel piano Premium\". */\n priceNote?: string;\n /** Owner primary CTA label. */\n activateLabel: string;\n /** Member: notice title explaining they cannot self-activate. */\n memberNoticeTitle?: string;\n /** Member: notice body. */\n memberNoticeDescription?: string;\n /** Member CTA label. */\n notifyAdminLabel?: string;\n}\n\nexport interface PaymentAutomationUpsellProps extends Omit<\n HTMLAttributes<HTMLElement>,\n 'title'\n> {\n /** Who is viewing. Owners can self-activate; members ask an admin. Default `owner`. */\n role?: PaymentAutomationUpsellRole;\n /** All user-visible copy — pre-translated by the host app. */\n labels: PaymentAutomationUpsellLabels;\n /** \"How it works\" steps, rendered as numbered BenefitCards. */\n steps: PaymentAutomationUpsellStep[];\n /** \"What's included\" checklist. */\n features: PaymentAutomationUpsellFeature[];\n /** Optional proof metrics shown in the CTA card. */\n metrics?: PaymentAutomationUpsellMetric[];\n /** Mock payment-request rows for the preview. */\n previewRows: PaymentAutomationUpsellPreviewRow[];\n /** BCP-47 locale used for currency formatting. Default `it-IT`. */\n locale?: string;\n /** ISO-4217 currency for the preview amounts. Default `EUR`. */\n currency?: string;\n /** Owner CTA handler — host navigates to the activation / upgrade flow. */\n onActivate?: () => void;\n /** Member CTA handler — host notifies the practice owner / admin. */\n onNotifyAdmin?: () => void;\n}\n\n/* Marketing serif is the DS-owner-sanctioned PAU exception; body/UI stays sans. */\nconst HEADLINE_CLASS = [\n // eslint-disable-next-line no-restricted-syntax -- sanctioned PAU marketing serif display heading (constraint 10)\n 'ds:[font-family:var(--font-serif)] ds:italic ds:font-semibold ds:leading-tight',\n 'ds:text-[color:var(--primary)]',\n].join(' ');\n\nconst DEFAULT_STEP_ICONS: ReactNode[] = [\n <CalendarClock aria-hidden=\"true\" className=\"ds:size-5\" key=\"0\" />,\n <CreditCard aria-hidden=\"true\" className=\"ds:size-5\" key=\"1\" />,\n <RefreshCcw aria-hidden=\"true\" className=\"ds:size-5\" key=\"2\" />,\n <Repeat aria-hidden=\"true\" className=\"ds:size-5\" key=\"3\" />,\n];\n\n/* Brand-only accent rotation. The BenefitCard `auto`/`blue`+ wheel pairs each\n hue with the next (blue→green, green→red), so anything past `magenta` bleeds\n into semantic colours. Cap to the three brand hues and wrap. */\nconst STEP_ACCENTS = ['violet', 'purple', 'magenta'] as const;\n\nconst STATUS_META: Record<\n PaymentAutomationUpsellRequestStatus,\n { variant: 'success' | 'info' | 'warning' | 'error'; icon: ReactNode }\n> = {\n paid: {\n variant: 'success',\n icon: <CircleCheck aria-hidden=\"true\" className=\"ds:size-3.5\" />,\n },\n authorized: {\n variant: 'info',\n icon: <ShieldCheck aria-hidden=\"true\" className=\"ds:size-3.5\" />,\n },\n pending: {\n variant: 'warning',\n icon: <Clock aria-hidden=\"true\" className=\"ds:size-3.5\" />,\n },\n overdue: {\n variant: 'error',\n icon: <TriangleAlert aria-hidden=\"true\" className=\"ds:size-3.5\" />,\n },\n};\n\nexport const PaymentAutomationUpsell = forwardRef<\n HTMLElement,\n PaymentAutomationUpsellProps\n>(\n (\n {\n role = 'owner',\n labels,\n steps,\n features,\n metrics,\n previewRows,\n locale = 'it-IT',\n currency = 'EUR',\n onActivate,\n onNotifyAdmin,\n className,\n ...rest\n },\n ref,\n ) => {\n const headingId = useId();\n const howHeadingId = useId();\n const previewHeadingId = useId();\n const ctaTitleId = useId();\n const featuresHeadingId = useId();\n\n const money = new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n });\n\n const stepColumns = Math.min(Math.max(steps.length, 1), 4) as 1 | 2 | 3 | 4;\n\n // Split the \"what's included\" checklist into two balanced columns so the\n // full-width card reads as a filled panel rather than a left-hugging strip.\n const featureMid = Math.ceil(features.length / 2);\n const featureColumns = [\n features.slice(0, featureMid),\n features.slice(featureMid),\n ].filter((column) => column.length > 0);\n\n return (\n <section\n ref={ref}\n data-component=\"payment-automation-upsell\"\n aria-labelledby={headingId}\n className={[\n 'ds:mx-auto ds:flex ds:w-full ds:max-w-[80rem] ds:flex-col ds:gap-[var(--spacing-lg)]',\n 'ds:text-[color:var(--foreground)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n {/* Hero — pure value proposition, no action. */}\n <Card variant=\"elevated\">\n <Card.Body className=\"ds:relative ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:overflow-hidden ds:sm:flex-row ds:sm:items-center ds:sm:justify-between ds:sm:gap-[var(--spacing-lg)]\">\n <div className=\"ds:flex ds:max-w-prose ds:flex-col ds:gap-[var(--spacing-sm)]\">\n {labels.eyebrow ? (\n <span className=\"type-eyebrow ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)] ds:text-[color:var(--accent)]\">\n <CreditCard aria-hidden=\"true\" className=\"ds:size-4\" />\n {labels.eyebrow}\n </span>\n ) : null}\n <h1\n id={headingId}\n className={`${HEADLINE_CLASS} ds:text-[length:var(--font-size-4xl)]`}\n >\n {labels.title}\n </h1>\n <p className=\"type-body ds:text-[color:var(--muted-foreground)]\">\n {labels.subtitle}\n </p>\n </div>\n <CreditCard\n aria-hidden=\"true\"\n className=\"ds:pointer-events-none ds:hidden ds:size-28 ds:shrink-0 ds:text-[color:var(--accent)] ds:opacity-15 ds:lg:block\"\n />\n </Card.Body>\n </Card>\n\n {/* How it works — the flow, as numbered steps. */}\n <section\n aria-labelledby={howHeadingId}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\"\n >\n <h2 id={howHeadingId} className=\"type-title-section\">\n {labels.howItWorksHeading}\n </h2>\n <BenefitCard.Row columns={stepColumns}>\n {steps.map((step, index) => (\n <BenefitCard\n key={step.id}\n step={index + 1}\n accent={STEP_ACCENTS[index % STEP_ACCENTS.length]}\n icon={\n step.icon ??\n DEFAULT_STEP_ICONS[index % DEFAULT_STEP_ICONS.length]\n }\n title={step.title}\n >\n {step.description}\n </BenefitCard>\n ))}\n </BenefitCard.Row>\n </section>\n\n {/* Preview — an illustrative peek at the generated requests. */}\n <section\n aria-labelledby={previewHeadingId}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\"\n >\n <div className=\"ds:flex ds:items-baseline ds:justify-between ds:gap-[var(--spacing-sm)]\">\n <h2 id={previewHeadingId} className=\"type-title-section\">\n {labels.previewHeading}\n </h2>\n {labels.previewCaption ? (\n <span className=\"type-eyebrow ds:text-[color:var(--muted-foreground)]\">\n {labels.previewCaption}\n </span>\n ) : null}\n </div>\n <Card variant=\"elevated\">\n <Card.Body className=\"ds:p-[var(--spacing-lg)]\">\n <List\n divider=\"spaced\"\n density=\"relaxed\"\n aria-labelledby={previewHeadingId}\n >\n {previewRows.map((row) => {\n const status = STATUS_META[row.status];\n return (\n <List.Item\n key={row.id}\n title={row.title}\n description={row.meta}\n leading={\n <span className=\"ds:flex ds:size-10 ds:items-center ds:justify-center ds:rounded-full ds:bg-[color:var(--muted)] ds:text-[color:var(--accent)]\">\n <ReceiptText\n aria-hidden=\"true\"\n className=\"ds:size-5\"\n />\n </span>\n }\n trailing={\n <span className=\"ds:flex ds:flex-col ds:items-end ds:gap-[var(--spacing-2xs)]\">\n <span className=\"type-metric ds:text-[color:var(--foreground)] ds:[--type-metric-size:var(--font-size-xl)]\">\n {money.format(row.amountCents / 100)}\n </span>\n <Badge\n variant={status.variant}\n size=\"sm\"\n leading={status.icon}\n >\n {row.statusLabel}\n </Badge>\n </span>\n }\n />\n );\n })}\n </List>\n </Card.Body>\n </Card>\n </section>\n\n {/* Conversion — proof metrics + what's included + the CTA. */}\n <section\n aria-labelledby={ctaTitleId}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]\"\n >\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n <h2 id={ctaTitleId} className=\"type-title-section\">\n {labels.ctaCardTitle}\n </h2>\n {labels.ctaCardSubtitle ? (\n <p className=\"type-body ds:text-[color:var(--muted-foreground)]\">\n {labels.ctaCardSubtitle}\n </p>\n ) : null}\n </div>\n\n {metrics && metrics.length > 0 ? (\n <div className=\"ds:grid ds:gap-[var(--spacing-md)] ds:[grid-template-columns:repeat(auto-fit,minmax(14rem,1fr))]\">\n {metrics.map((metric) => (\n <Stat\n key={metric.id}\n label={metric.label}\n value={metric.value}\n variant=\"elevated\"\n size=\"lg\"\n intent=\"primary\"\n // eslint-disable-next-line no-restricted-syntax -- sanctioned PAU marketing serif KPI numerals (constraint 10)\n className=\"ds:[--type-metric-family:var(--font-serif)]\"\n />\n ))}\n </div>\n ) : null}\n\n {/* What's included — full-width card, two balanced columns. */}\n <Card variant=\"elevated\">\n <Card.Body className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)] ds:p-[var(--spacing-lg)]\">\n {labels.featuresHeading ? (\n <span\n id={featuresHeadingId}\n className=\"type-eyebrow ds:text-[color:var(--muted-foreground)]\"\n >\n {labels.featuresHeading}\n </span>\n ) : null}\n <div className=\"ds:grid ds:gap-x-[var(--spacing-2xl)] ds:gap-y-[var(--spacing-sm)] ds:sm:grid-cols-2\">\n {featureColumns.map((column, columnIndex) => (\n <List\n key={columnIndex}\n divider=\"spaced\"\n density=\"default\"\n aria-labelledby={\n labels.featuresHeading ? featuresHeadingId : ctaTitleId\n }\n >\n {column.map((feature) => (\n <List.Item\n key={feature.id}\n title={feature.label}\n leading={\n <CircleCheck\n aria-hidden=\"true\"\n className=\"ds:size-5 ds:text-[color:var(--success)]\"\n />\n }\n />\n ))}\n </List>\n ))}\n </div>\n </Card.Body>\n </Card>\n\n {/* CTA — centred + width-capped so the button never stretches full-bleed. */}\n <div className=\"ds:mx-auto ds:flex ds:w-full ds:max-w-[28rem] ds:flex-col ds:gap-[var(--spacing-sm)]\">\n {role === 'member' ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n {labels.memberNoticeTitle || labels.memberNoticeDescription ? (\n <Alert\n variant=\"info\"\n live=\"off\"\n icon={<Lock aria-hidden=\"true\" className=\"ds:size-4\" />}\n >\n {labels.memberNoticeTitle ? (\n <Alert.Title as=\"p\">\n {labels.memberNoticeTitle}\n </Alert.Title>\n ) : null}\n {labels.memberNoticeDescription ? (\n <Alert.Description>\n {labels.memberNoticeDescription}\n </Alert.Description>\n ) : null}\n </Alert>\n ) : null}\n <Button\n intent=\"secondary\"\n size=\"lg\"\n startIcon={<Send />}\n flipIconInRtl\n onClick={onNotifyAdmin}\n className=\"ds:w-full\"\n >\n {labels.notifyAdminLabel ?? labels.activateLabel}\n </Button>\n </div>\n ) : (\n <Button\n intent=\"primary\"\n size=\"lg\"\n endIcon={<ArrowRight />}\n flipIconInRtl\n onClick={onActivate}\n className=\"ds:w-full\"\n >\n {labels.activateLabel}\n </Button>\n )}\n\n {labels.priceNote ? (\n <p className=\"type-meta ds:text-center ds:text-[color:var(--muted-foreground)]\">\n {labels.priceNote}\n </p>\n ) : null}\n </div>\n </section>\n </section>\n );\n },\n);\n\nPaymentAutomationUpsell.displayName = 'PaymentAutomationUpsell';\n"],"names":["__iconNode","ArrowRight","createLucideIcon","RefreshCcw","Repeat","HEADLINE_CLASS","DEFAULT_STEP_ICONS","CalendarClock","CreditCard","STEP_ACCENTS","STATUS_META","jsx","CircleCheck","ShieldCheck","Clock","TriangleAlert","PaymentAutomationUpsell","forwardRef","role","labels","steps","features","metrics","previewRows","locale","currency","onActivate","onNotifyAdmin","className","rest","ref","headingId","useId","howHeadingId","previewHeadingId","ctaTitleId","featuresHeadingId","money","stepColumns","featureMid","featureColumns","column","jsxs","Card","BenefitCard","step","index","List","row","status","ReceiptText","Badge","metric","Stat","columnIndex","feature","Alert","Lock","Button","Send"],"mappings":"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","x_google_ignoreList":[0,1,2]}
1
+ {"version":3,"file":"index.js","sources":["../node_modules/lucide-react/dist/esm/icons/arrow-right.mjs","../node_modules/lucide-react/dist/esm/icons/refresh-ccw.mjs","../node_modules/lucide-react/dist/esm/icons/repeat.mjs","../src/patterns/payment-automation-upsell/payment-automation-upsell.tsx"],"sourcesContent":["/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"m12 5 7 7-7 7\", key: \"xquz4c\" }]\n];\nconst ArrowRight = createLucideIcon(\"arrow-right\", __iconNode);\n\nexport { __iconNode, ArrowRight as default };\n//# sourceMappingURL=arrow-right.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8\", key: \"14sxne\" }],\n [\"path\", { d: \"M3 3v5h5\", key: \"1xhq8a\" }],\n [\"path\", { d: \"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16\", key: \"1hlbsb\" }],\n [\"path\", { d: \"M16 16h5v5\", key: \"ccwih5\" }]\n];\nconst RefreshCcw = createLucideIcon(\"refresh-ccw\", __iconNode);\n\nexport { __iconNode, RefreshCcw as default };\n//# sourceMappingURL=refresh-ccw.mjs.map\n","/**\n * @license lucide-react v1.22.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.mjs';\n\nconst __iconNode = [\n [\"path\", { d: \"m17 2 4 4-4 4\", key: \"nntrym\" }],\n [\"path\", { d: \"M3 11v-1a4 4 0 0 1 4-4h14\", key: \"84bu3i\" }],\n [\"path\", { d: \"m7 22-4-4 4-4\", key: \"1wqhfi\" }],\n [\"path\", { d: \"M21 13v1a4 4 0 0 1-4 4H3\", key: \"1rx37r\" }]\n];\nconst Repeat = createLucideIcon(\"repeat\", __iconNode);\n\nexport { __iconNode, Repeat as default };\n//# sourceMappingURL=repeat.mjs.map\n","/* -------------------------------------------------------------------- */\n/* Payment Automation Upsell — PLG surface for the payment-request index */\n/* when the Payment Automation (PAU) module is NOT enabled. */\n/* */\n/* Replaces the old dead-end \"module disabled\" page with a value preview */\n/* + role-aware call to action. Ships as a RUNTIME pattern (an importable */\n/* component) so the platform mounts it directly instead of hand-rolling */\n/* markup — see src/patterns/README.md § \"Exception — runtime patterns\". */\n/* */\n/* Copy is consumer-owned: every user-visible string arrives pre- */\n/* translated via props (the host app localises through its own i18n), */\n/* mirroring MarketplaceAppShell. The kit owns the design, not the words. */\n/* Marketing-serif display heading is the DS-owner-sanctioned PAU */\n/* exception (CLAUDE.md constraint 10 / 06-i18n § Font Requirements). */\n/* -------------------------------------------------------------------- */\n\nimport { forwardRef, useId, type HTMLAttributes, type ReactNode } from 'react';\nimport {\n ArrowRight,\n CalendarClock,\n CircleCheck,\n Clock,\n CreditCard,\n Lock,\n ReceiptText,\n RefreshCcw,\n Repeat,\n Send,\n ShieldCheck,\n TriangleAlert,\n} from 'lucide-react';\n\nimport { Alert } from '../../components/alert';\nimport { Badge } from '../../components/badge';\nimport { BenefitCard } from '../../components/benefit-card';\nimport { Button } from '../../components/button';\nimport { Card } from '../../components/card';\nimport { List } from '../../components/list';\nimport { Stat } from '../../components/stat';\n\n/** Who is viewing the surface — drives which CTA is shown. */\nexport type PaymentAutomationUpsellRole = 'owner' | 'member';\n\n/** Status of a mock payment request in the preview. */\nexport type PaymentAutomationUpsellRequestStatus =\n | 'paid'\n | 'authorized'\n | 'pending'\n | 'overdue';\n\nexport interface PaymentAutomationUpsellStep {\n id: string;\n /** Pre-translated step title. */\n title: string;\n /** Pre-translated step body. */\n description: string;\n /** Optional icon override; a sensible default is chosen per position. */\n icon?: ReactNode;\n}\n\nexport interface PaymentAutomationUpsellFeature {\n id: string;\n /** Pre-translated single line of the \"what's included\" checklist. */\n label: string;\n}\n\nexport interface PaymentAutomationUpsellMetric {\n id: string;\n /** Headline value, already formatted/localised, e.g. \"3×\" or \"−75%\". */\n value: string;\n /** Pre-translated caption under the value. */\n label: string;\n}\n\nexport interface PaymentAutomationUpsellPreviewRow {\n id: string;\n /** Pre-translated row title, e.g. \"Richiesta RDP-2026-0042\". */\n title: string;\n /** Optional pre-translated secondary line (plan / date). Never real PHI. */\n meta?: string;\n /** Amount in minor units (cents); formatted with `locale` + `currency`. */\n amountCents: number;\n /** Drives the status badge colour + icon. */\n status: PaymentAutomationUpsellRequestStatus;\n /** Pre-translated status label shown in the badge. */\n statusLabel: string;\n}\n\nexport interface PaymentAutomationUpsellLabels {\n /** Small eyebrow above the headline — usually the module name. */\n eyebrow?: string;\n /** Serif display headline. */\n title: string;\n /** One- or two-sentence supporting subtitle. */\n subtitle: string;\n /** Heading for the \"how it works\" step column. */\n howItWorksHeading: string;\n /** Heading for the mock preview. */\n previewHeading: string;\n /** Optional small caption flagging the preview as illustrative. */\n previewCaption?: string;\n /** Title of the right-hand call-to-action card. */\n ctaCardTitle: string;\n /** Optional pitch line under the CTA card title. */\n ctaCardSubtitle?: string;\n /** Optional heading above the feature checklist. */\n featuresHeading?: string;\n /** Optional price / plan note, e.g. \"Incluso nel piano Premium\". */\n priceNote?: string;\n /** Owner primary CTA label. */\n activateLabel: string;\n /** Member: notice title explaining they cannot self-activate. */\n memberNoticeTitle?: string;\n /** Member: notice body. */\n memberNoticeDescription?: string;\n /** Member CTA label. */\n notifyAdminLabel?: string;\n}\n\nexport interface PaymentAutomationUpsellProps extends Omit<\n HTMLAttributes<HTMLElement>,\n 'title'\n> {\n /** Who is viewing. Owners can self-activate; members ask an admin. Default `owner`. */\n role?: PaymentAutomationUpsellRole;\n /** All user-visible copy — pre-translated by the host app. */\n labels: PaymentAutomationUpsellLabels;\n /** \"How it works\" steps, rendered as numbered BenefitCards. */\n steps: PaymentAutomationUpsellStep[];\n /** \"What's included\" checklist. */\n features: PaymentAutomationUpsellFeature[];\n /** Optional proof metrics shown in the CTA card. */\n metrics?: PaymentAutomationUpsellMetric[];\n /** Mock payment-request rows for the preview. */\n previewRows: PaymentAutomationUpsellPreviewRow[];\n /** BCP-47 locale used for currency formatting. Default `it-IT`. */\n locale?: string;\n /** ISO-4217 currency for the preview amounts. Default `EUR`. */\n currency?: string;\n /** Owner CTA handler — host navigates to the activation / upgrade flow. */\n onActivate?: () => void;\n /** Member CTA handler — host notifies the practice owner / admin. */\n onNotifyAdmin?: () => void;\n}\n\n/* Marketing serif is the DS-owner-sanctioned PAU exception; body/UI stays sans. */\nconst HEADLINE_CLASS = [\n // eslint-disable-next-line no-restricted-syntax -- sanctioned PAU marketing serif display heading (constraint 10)\n 'ds:[font-family:var(--font-serif)] ds:italic ds:font-semibold ds:leading-tight',\n 'ds:text-[color:var(--primary)]',\n].join(' ');\n\nconst DEFAULT_STEP_ICONS: ReactNode[] = [\n <CalendarClock aria-hidden=\"true\" className=\"ds:size-5\" key=\"0\" />,\n <CreditCard aria-hidden=\"true\" className=\"ds:size-5\" key=\"1\" />,\n <RefreshCcw aria-hidden=\"true\" className=\"ds:size-5\" key=\"2\" />,\n <Repeat aria-hidden=\"true\" className=\"ds:size-5\" key=\"3\" />,\n];\n\n/* Brand-only accent rotation. The BenefitCard `auto`/`blue`+ wheel pairs each\n hue with the next (blue→green, green→red), so anything past `magenta` bleeds\n into semantic colours. Cap to the three brand hues and wrap. */\nconst STEP_ACCENTS = ['violet', 'purple', 'magenta'] as const;\n\nconst STATUS_META: Record<\n PaymentAutomationUpsellRequestStatus,\n { variant: 'success' | 'info' | 'warning' | 'error'; icon: ReactNode }\n> = {\n paid: {\n variant: 'success',\n icon: <CircleCheck aria-hidden=\"true\" className=\"ds:size-3.5\" />,\n },\n authorized: {\n variant: 'info',\n icon: <ShieldCheck aria-hidden=\"true\" className=\"ds:size-3.5\" />,\n },\n pending: {\n variant: 'warning',\n icon: <Clock aria-hidden=\"true\" className=\"ds:size-3.5\" />,\n },\n overdue: {\n variant: 'error',\n icon: <TriangleAlert aria-hidden=\"true\" className=\"ds:size-3.5\" />,\n },\n};\n\nexport const PaymentAutomationUpsell = forwardRef<\n HTMLElement,\n PaymentAutomationUpsellProps\n>(\n (\n {\n role = 'owner',\n labels,\n steps,\n features,\n metrics,\n previewRows,\n locale = 'it-IT',\n currency = 'EUR',\n onActivate,\n onNotifyAdmin,\n className,\n ...rest\n },\n ref,\n ) => {\n const headingId = useId();\n const howHeadingId = useId();\n const previewHeadingId = useId();\n const ctaTitleId = useId();\n const featuresHeadingId = useId();\n\n const money = new Intl.NumberFormat(locale, {\n style: 'currency',\n currency,\n });\n\n const stepColumns = Math.min(Math.max(steps.length, 1), 4) as 1 | 2 | 3 | 4;\n\n // Split the \"what's included\" checklist into two balanced columns so the\n // full-width card reads as a filled panel rather than a left-hugging strip.\n const featureMid = Math.ceil(features.length / 2);\n const featureColumns = [\n features.slice(0, featureMid),\n features.slice(featureMid),\n ].filter((column) => column.length > 0);\n\n return (\n <section\n ref={ref}\n data-component=\"payment-automation-upsell\"\n aria-labelledby={headingId}\n className={[\n 'ds:mx-auto ds:flex ds:w-full ds:max-w-[80rem] ds:flex-col ds:gap-[var(--spacing-lg)]',\n 'ds:text-[color:var(--foreground)]',\n className ?? '',\n ]\n .filter(Boolean)\n .join(' ')}\n {...rest}\n >\n {/* Hero — pure value proposition, no action. */}\n <Card variant=\"elevated\">\n <Card.Body className=\"ds:relative ds:flex ds:flex-col ds:gap-[var(--spacing-sm)] ds:overflow-hidden ds:sm:flex-row ds:sm:items-center ds:sm:justify-between ds:sm:gap-[var(--spacing-lg)]\">\n <div className=\"ds:flex ds:max-w-prose ds:flex-col ds:gap-[var(--spacing-sm)]\">\n {labels.eyebrow ? (\n <span className=\"type-eyebrow ds:inline-flex ds:items-center ds:gap-[var(--spacing-2xs)] ds:text-[color:var(--accent)]\">\n <CreditCard aria-hidden=\"true\" className=\"ds:size-4\" />\n {labels.eyebrow}\n </span>\n ) : null}\n <h1\n id={headingId}\n className={`${HEADLINE_CLASS} ds:text-[length:var(--font-size-4xl)]`}\n >\n {labels.title}\n </h1>\n <p className=\"type-body ds:text-[color:var(--muted-foreground)]\">\n {labels.subtitle}\n </p>\n </div>\n <CreditCard\n aria-hidden=\"true\"\n className=\"ds:pointer-events-none ds:hidden ds:size-28 ds:shrink-0 ds:text-[color:var(--accent)] ds:opacity-15 ds:lg:block\"\n />\n </Card.Body>\n </Card>\n\n {/* How it works — the flow, as numbered steps. */}\n <section\n aria-labelledby={howHeadingId}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)]\"\n >\n <h2 id={howHeadingId} className=\"type-title-section\">\n {labels.howItWorksHeading}\n </h2>\n <BenefitCard.Row columns={stepColumns}>\n {steps.map((step, index) => (\n <BenefitCard\n key={step.id}\n step={index + 1}\n accent={STEP_ACCENTS[index % STEP_ACCENTS.length]}\n icon={\n step.icon ??\n DEFAULT_STEP_ICONS[index % DEFAULT_STEP_ICONS.length]\n }\n title={step.title}\n >\n {step.description}\n </BenefitCard>\n ))}\n </BenefitCard.Row>\n </section>\n\n {/* Preview — an illustrative peek at the generated requests. */}\n <section\n aria-labelledby={previewHeadingId}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\"\n >\n <div className=\"ds:flex ds:items-baseline ds:justify-between ds:gap-[var(--spacing-sm)]\">\n <h2 id={previewHeadingId} className=\"type-title-section\">\n {labels.previewHeading}\n </h2>\n {labels.previewCaption ? (\n <span className=\"type-eyebrow ds:text-[color:var(--muted-foreground)]\">\n {labels.previewCaption}\n </span>\n ) : null}\n </div>\n <Card variant=\"elevated\">\n <Card.Body className=\"ds:p-[var(--spacing-lg)]\">\n <List\n divider=\"spaced\"\n density=\"relaxed\"\n aria-labelledby={previewHeadingId}\n >\n {previewRows.map((row) => {\n const status = STATUS_META[row.status];\n return (\n <List.Item\n key={row.id}\n title={row.title}\n description={row.meta}\n leading={\n <span className=\"ds:flex ds:size-10 ds:items-center ds:justify-center ds:rounded-full ds:bg-[color:var(--muted)] ds:text-[color:var(--accent)]\">\n <ReceiptText\n aria-hidden=\"true\"\n className=\"ds:size-5\"\n />\n </span>\n }\n trailing={\n <span className=\"ds:flex ds:flex-col ds:items-end ds:gap-[var(--spacing-2xs)]\">\n <span className=\"type-metric ds:text-[color:var(--foreground)] ds:[--type-metric-size:var(--font-size-xl)]\">\n {money.format(row.amountCents / 100)}\n </span>\n <Badge\n variant={status.variant}\n size=\"sm\"\n leading={status.icon}\n >\n {row.statusLabel}\n </Badge>\n </span>\n }\n />\n );\n })}\n </List>\n </Card.Body>\n </Card>\n </section>\n\n {/* Conversion — proof metrics + what's included + the CTA. */}\n <section\n aria-labelledby={ctaTitleId}\n className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-lg)]\"\n >\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-2xs)]\">\n <h2 id={ctaTitleId} className=\"type-title-section\">\n {labels.ctaCardTitle}\n </h2>\n {labels.ctaCardSubtitle ? (\n <p className=\"type-body ds:text-[color:var(--muted-foreground)]\">\n {labels.ctaCardSubtitle}\n </p>\n ) : null}\n </div>\n\n {metrics && metrics.length > 0 ? (\n <div className=\"ds:grid ds:gap-[var(--spacing-md)] ds:[grid-template-columns:repeat(auto-fit,minmax(14rem,1fr))]\">\n {metrics.map((metric) => (\n <Stat\n key={metric.id}\n label={metric.label}\n value={metric.value}\n variant=\"elevated\"\n size=\"lg\"\n intent=\"primary\"\n // eslint-disable-next-line no-restricted-syntax -- sanctioned PAU marketing serif KPI numerals (constraint 10)\n className=\"ds:[--type-metric-family:var(--font-serif)]\"\n />\n ))}\n </div>\n ) : null}\n\n {/* What's included — full-width card, two balanced columns. */}\n <Card variant=\"elevated\">\n <Card.Body className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-md)] ds:p-[var(--spacing-lg)]\">\n {labels.featuresHeading ? (\n <span\n id={featuresHeadingId}\n className=\"type-eyebrow ds:text-[color:var(--muted-foreground)]\"\n >\n {labels.featuresHeading}\n </span>\n ) : null}\n <div className=\"ds:grid ds:gap-x-[var(--spacing-2xl)] ds:gap-y-[var(--spacing-sm)] ds:sm:grid-cols-2\">\n {featureColumns.map((column, columnIndex) => (\n <List\n key={columnIndex}\n divider=\"spaced\"\n density=\"default\"\n aria-labelledby={\n labels.featuresHeading ? featuresHeadingId : ctaTitleId\n }\n >\n {column.map((feature) => (\n <List.Item\n key={feature.id}\n title={feature.label}\n leading={\n <CircleCheck\n aria-hidden=\"true\"\n className=\"ds:size-5 ds:text-[color:var(--success)]\"\n />\n }\n />\n ))}\n </List>\n ))}\n </div>\n </Card.Body>\n </Card>\n\n {/* CTA — centred + width-capped so the button never stretches full-bleed. */}\n <div className=\"ds:mx-auto ds:flex ds:w-full ds:max-w-[28rem] ds:flex-col ds:gap-[var(--spacing-sm)]\">\n {role === 'member' ? (\n <div className=\"ds:flex ds:flex-col ds:gap-[var(--spacing-sm)]\">\n {labels.memberNoticeTitle || labels.memberNoticeDescription ? (\n <Alert\n variant=\"info\"\n live=\"off\"\n icon={<Lock aria-hidden=\"true\" className=\"ds:size-4\" />}\n >\n {labels.memberNoticeTitle ? (\n <Alert.Title as=\"p\">\n {labels.memberNoticeTitle}\n </Alert.Title>\n ) : null}\n {labels.memberNoticeDescription ? (\n <Alert.Description>\n {labels.memberNoticeDescription}\n </Alert.Description>\n ) : null}\n </Alert>\n ) : null}\n <Button\n intent=\"secondary\"\n size=\"lg\"\n startIcon={<Send />}\n flipIconInRtl\n onClick={onNotifyAdmin}\n className=\"ds:w-full\"\n >\n {labels.notifyAdminLabel ?? labels.activateLabel}\n </Button>\n </div>\n ) : (\n <Button\n intent=\"primary\"\n size=\"lg\"\n endIcon={<ArrowRight />}\n flipIconInRtl\n onClick={onActivate}\n className=\"ds:w-full\"\n >\n {labels.activateLabel}\n </Button>\n )}\n\n {labels.priceNote ? (\n <p className=\"type-meta ds:text-center ds:text-[color:var(--muted-foreground)]\">\n {labels.priceNote}\n </p>\n ) : null}\n </div>\n </section>\n </section>\n );\n },\n);\n\nPaymentAutomationUpsell.displayName = 'PaymentAutomationUpsell';\n"],"names":["__iconNode","ArrowRight","createLucideIcon","RefreshCcw","Repeat","HEADLINE_CLASS","DEFAULT_STEP_ICONS","CalendarClock","CreditCard","STEP_ACCENTS","STATUS_META","jsx","CircleCheck","ShieldCheck","Clock","TriangleAlert","PaymentAutomationUpsell","forwardRef","role","labels","steps","features","metrics","previewRows","locale","currency","onActivate","onNotifyAdmin","className","rest","ref","headingId","useId","howHeadingId","previewHeadingId","ctaTitleId","featuresHeadingId","money","stepColumns","featureMid","featureColumns","column","jsxs","Card","BenefitCard","step","index","List","row","status","ReceiptText","Badge","metric","Stat","columnIndex","feature","Alert","Lock","Button","Send"],"mappings":"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","x_google_ignoreList":[0,1,2]}
@@ -2628,6 +2628,27 @@
2628
2628
  "donut": "حلقي"
2629
2629
  }
2630
2630
  },
2631
+ "dashboardGrid": {
2632
+ "move": "نقل {{title}}",
2633
+ "resize": "تغيير حجم {{title}}",
2634
+ "remove": "إزالة {{title}}",
2635
+ "add": "إضافة عنصر",
2636
+ "grabbed": "تم الالتقاط. استخدم الأسهم للنقل، وEnter للإفلات، وEscape للإلغاء.",
2637
+ "resizeGrabbed": "جارٍ تغيير الحجم. استخدم الأسهم للتغيير، وEnter للتأكيد، وEscape للإلغاء.",
2638
+ "movedTo": "العمود {{col}}، الصف {{row}}.",
2639
+ "resizedTo": "{{cols}} × {{rows}}.",
2640
+ "droppedAt": "تم وضع العنصر في العمود {{col}}، الصف {{row}}.",
2641
+ "removed": "تمت إزالة العنصر.",
2642
+ "cancelled": "تم إلغاء التغيير."
2643
+ },
2644
+ "widgetPicker": {
2645
+ "title": "إضافة عنصر",
2646
+ "description": "اختر عنصرًا لإضافته إلى لوحتك.",
2647
+ "searchLabel": "البحث في العناصر",
2648
+ "searchPlaceholder": "البحث في العناصر…",
2649
+ "empty": "لا توجد عناصر مطابقة للبحث.",
2650
+ "none": "لا توجد عناصر واجهة متاحة."
2651
+ },
2631
2652
  "editor": {
2632
2653
  "toolbarLabel": "تنسيق النص",
2633
2654
  "regionLabel": "محرر النص المنسق",
@@ -2628,6 +2628,27 @@
2628
2628
  "donut": "Ring"
2629
2629
  }
2630
2630
  },
2631
+ "dashboardGrid": {
2632
+ "move": "{{title}} verschieben",
2633
+ "resize": "{{title}} skalieren",
2634
+ "remove": "{{title}} entfernen",
2635
+ "add": "Widget hinzufügen",
2636
+ "grabbed": "Aufgenommen. Mit den Pfeiltasten verschieben, Eingabe zum Ablegen, Escape zum Abbrechen.",
2637
+ "resizeGrabbed": "Größe ändern. Mit den Pfeiltasten anpassen, Eingabe zum Bestätigen, Escape zum Abbrechen.",
2638
+ "movedTo": "Spalte {{col}}, Zeile {{row}}.",
2639
+ "resizedTo": "{{cols}} × {{rows}}.",
2640
+ "droppedAt": "Widget platziert in Spalte {{col}}, Zeile {{row}}.",
2641
+ "removed": "Widget entfernt.",
2642
+ "cancelled": "Änderung abgebrochen."
2643
+ },
2644
+ "widgetPicker": {
2645
+ "title": "Widget hinzufügen",
2646
+ "description": "Wählen Sie ein Widget für Ihr Dashboard.",
2647
+ "searchLabel": "Widgets durchsuchen",
2648
+ "searchPlaceholder": "Widgets durchsuchen…",
2649
+ "empty": "Keine Widgets entsprechen der Suche.",
2650
+ "none": "Keine Widgets verfügbar."
2651
+ },
2631
2652
  "editor": {
2632
2653
  "toolbarLabel": "Textformatierung",
2633
2654
  "regionLabel": "Rich-Text-Editor",
@@ -2628,6 +2628,27 @@
2628
2628
  "donut": "Δακτύλιος"
2629
2629
  }
2630
2630
  },
2631
+ "dashboardGrid": {
2632
+ "move": "Μετακίνηση {{title}}",
2633
+ "resize": "Αλλαγή μεγέθους {{title}}",
2634
+ "remove": "Αφαίρεση {{title}}",
2635
+ "add": "Προσθήκη widget",
2636
+ "grabbed": "Επιλέχθηκε. Χρησιμοποιήστε τα βέλη για μετακίνηση, Enter για τοποθέτηση, Escape για ακύρωση.",
2637
+ "resizeGrabbed": "Αλλαγή μεγέθους. Χρησιμοποιήστε τα βέλη, Enter για επιβεβαίωση, Escape για ακύρωση.",
2638
+ "movedTo": "Στήλη {{col}}, γραμμή {{row}}.",
2639
+ "resizedTo": "{{cols}} × {{rows}}.",
2640
+ "droppedAt": "Το widget τοποθετήθηκε στη στήλη {{col}}, γραμμή {{row}}.",
2641
+ "removed": "Το widget αφαιρέθηκε.",
2642
+ "cancelled": "Η αλλαγή ακυρώθηκε."
2643
+ },
2644
+ "widgetPicker": {
2645
+ "title": "Προσθήκη widget",
2646
+ "description": "Επιλέξτε ένα widget για τον πίνακα.",
2647
+ "searchLabel": "Αναζήτηση widget",
2648
+ "searchPlaceholder": "Αναζήτηση widget…",
2649
+ "empty": "Κανένα widget δεν ταιριάζει με την αναζήτηση.",
2650
+ "none": "Δεν υπάρχουν διαθέσιμα widget."
2651
+ },
2631
2652
  "editor": {
2632
2653
  "toolbarLabel": "Μορφοποίηση κειμένου",
2633
2654
  "regionLabel": "Επεξεργαστής εμπλουτισμένου κειμένου",
@@ -2628,6 +2628,27 @@
2628
2628
  "donut": "Donut"
2629
2629
  }
2630
2630
  },
2631
+ "dashboardGrid": {
2632
+ "move": "Move {{title}}",
2633
+ "resize": "Resize {{title}}",
2634
+ "remove": "Remove {{title}}",
2635
+ "add": "Add widget",
2636
+ "grabbed": "Picked up. Use the arrow keys to move, Enter to drop, Escape to cancel.",
2637
+ "resizeGrabbed": "Resizing. Use the arrow keys to change the size, Enter to confirm, Escape to cancel.",
2638
+ "movedTo": "Column {{col}}, row {{row}}.",
2639
+ "resizedTo": "{{cols}} × {{rows}}.",
2640
+ "droppedAt": "Widget placed at column {{col}}, row {{row}}.",
2641
+ "removed": "Widget removed.",
2642
+ "cancelled": "Change cancelled."
2643
+ },
2644
+ "widgetPicker": {
2645
+ "title": "Add a widget",
2646
+ "description": "Choose a widget to add to your dashboard.",
2647
+ "searchLabel": "Search widgets",
2648
+ "searchPlaceholder": "Search widgets…",
2649
+ "empty": "No widgets match your search.",
2650
+ "none": "No widgets available."
2651
+ },
2631
2652
  "editor": {
2632
2653
  "toolbarLabel": "Text formatting",
2633
2654
  "regionLabel": "Rich text editor",
@@ -2628,6 +2628,27 @@
2628
2628
  "donut": "Anillo"
2629
2629
  }
2630
2630
  },
2631
+ "dashboardGrid": {
2632
+ "move": "Mover {{title}}",
2633
+ "resize": "Redimensionar {{title}}",
2634
+ "remove": "Quitar {{title}}",
2635
+ "add": "Añadir widget",
2636
+ "grabbed": "Seleccionado. Usa las flechas para mover, Intro para soltar, Esc para cancelar.",
2637
+ "resizeGrabbed": "Redimensionando. Usa las flechas para cambiar el tamaño, Intro para confirmar, Esc para cancelar.",
2638
+ "movedTo": "Columna {{col}}, fila {{row}}.",
2639
+ "resizedTo": "{{cols}} × {{rows}}.",
2640
+ "droppedAt": "Widget colocado en la columna {{col}}, fila {{row}}.",
2641
+ "removed": "Widget eliminado.",
2642
+ "cancelled": "Cambio cancelado."
2643
+ },
2644
+ "widgetPicker": {
2645
+ "title": "Añadir un widget",
2646
+ "description": "Elige un widget para añadir al panel.",
2647
+ "searchLabel": "Buscar widgets",
2648
+ "searchPlaceholder": "Buscar widgets…",
2649
+ "empty": "Ningún widget coincide con la búsqueda.",
2650
+ "none": "No hay widgets disponibles."
2651
+ },
2631
2652
  "editor": {
2632
2653
  "toolbarLabel": "Formato de texto",
2633
2654
  "regionLabel": "Editor de texto enriquecido",
@@ -2628,6 +2628,27 @@
2628
2628
  "donut": "Anneau"
2629
2629
  }
2630
2630
  },
2631
+ "dashboardGrid": {
2632
+ "move": "Déplacer {{title}}",
2633
+ "resize": "Redimensionner {{title}}",
2634
+ "remove": "Supprimer {{title}}",
2635
+ "add": "Ajouter un widget",
2636
+ "grabbed": "Saisi. Utilisez les flèches pour déplacer, Entrée pour déposer, Échap pour annuler.",
2637
+ "resizeGrabbed": "Redimensionnement. Utilisez les flèches pour changer la taille, Entrée pour confirmer, Échap pour annuler.",
2638
+ "movedTo": "Colonne {{col}}, ligne {{row}}.",
2639
+ "resizedTo": "{{cols}} × {{rows}}.",
2640
+ "droppedAt": "Widget placé en colonne {{col}}, ligne {{row}}.",
2641
+ "removed": "Widget supprimé.",
2642
+ "cancelled": "Modification annulée."
2643
+ },
2644
+ "widgetPicker": {
2645
+ "title": "Ajouter un widget",
2646
+ "description": "Choisissez un widget à ajouter au tableau de bord.",
2647
+ "searchLabel": "Rechercher des widgets",
2648
+ "searchPlaceholder": "Rechercher des widgets…",
2649
+ "empty": "Aucun widget ne correspond à la recherche.",
2650
+ "none": "Aucun widget disponible."
2651
+ },
2631
2652
  "editor": {
2632
2653
  "toolbarLabel": "Mise en forme du texte",
2633
2654
  "regionLabel": "Éditeur de texte enrichi",
@@ -2628,6 +2628,27 @@
2628
2628
  "donut": "डोनट"
2629
2629
  }
2630
2630
  },
2631
+ "dashboardGrid": {
2632
+ "move": "{{title}} ले जाएँ",
2633
+ "resize": "{{title}} का आकार बदलें",
2634
+ "remove": "{{title}} हटाएँ",
2635
+ "add": "विजेट जोड़ें",
2636
+ "grabbed": "उठाया गया। ले जाने के लिए तीर कुंजियाँ, रखने के लिए Enter, रद्द करने के लिए Escape।",
2637
+ "resizeGrabbed": "आकार बदला जा रहा है। तीर कुंजियाँ, पुष्टि के लिए Enter, रद्द करने के लिए Escape।",
2638
+ "movedTo": "कॉलम {{col}}, पंक्ति {{row}}।",
2639
+ "resizedTo": "{{cols}} × {{rows}}.",
2640
+ "droppedAt": "विजेट कॉलम {{col}}, पंक्ति {{row}} पर रखा गया।",
2641
+ "removed": "विजेट हटाया गया।",
2642
+ "cancelled": "बदलाव रद्द।"
2643
+ },
2644
+ "widgetPicker": {
2645
+ "title": "विजेट जोड़ें",
2646
+ "description": "डैशबोर्ड में जोड़ने के लिए एक विजेट चुनें।",
2647
+ "searchLabel": "विजेट खोजें",
2648
+ "searchPlaceholder": "विजेट खोजें…",
2649
+ "empty": "खोज से कोई विजेट मेल नहीं खाता।",
2650
+ "none": "कोई विजेट उपलब्ध नहीं है।"
2651
+ },
2631
2652
  "editor": {
2632
2653
  "toolbarLabel": "टेक्स्ट फ़ॉर्मेटिंग",
2633
2654
  "regionLabel": "रिच टेक्स्ट एडिटर",
@@ -2628,6 +2628,27 @@
2628
2628
  "donut": "Ciambella"
2629
2629
  }
2630
2630
  },
2631
+ "dashboardGrid": {
2632
+ "move": "Sposta {{title}}",
2633
+ "resize": "Ridimensiona {{title}}",
2634
+ "remove": "Rimuovi {{title}}",
2635
+ "add": "Aggiungi widget",
2636
+ "grabbed": "Selezionato. Usa le frecce per spostare, Invio per rilasciare, Esc per annullare.",
2637
+ "resizeGrabbed": "Ridimensionamento. Usa le frecce per cambiare dimensione, Invio per confermare, Esc per annullare.",
2638
+ "movedTo": "Colonna {{col}}, riga {{row}}.",
2639
+ "resizedTo": "{{cols}} × {{rows}}.",
2640
+ "droppedAt": "Widget posizionato in colonna {{col}}, riga {{row}}.",
2641
+ "removed": "Widget rimosso.",
2642
+ "cancelled": "Modifica annullata."
2643
+ },
2644
+ "widgetPicker": {
2645
+ "title": "Aggiungi un widget",
2646
+ "description": "Scegli un widget da aggiungere alla dashboard.",
2647
+ "searchLabel": "Cerca widget",
2648
+ "searchPlaceholder": "Cerca widget…",
2649
+ "empty": "Nessun widget corrisponde alla ricerca.",
2650
+ "none": "Nessun widget disponibile."
2651
+ },
2631
2652
  "editor": {
2632
2653
  "toolbarLabel": "Formattazione testo",
2633
2654
  "regionLabel": "Editor di testo formattato",
@@ -2628,6 +2628,27 @@
2628
2628
  "donut": "ドーナツ"
2629
2629
  }
2630
2630
  },
2631
+ "dashboardGrid": {
2632
+ "move": "{{title}}を移動",
2633
+ "resize": "{{title}}のサイズ変更",
2634
+ "remove": "{{title}}を削除",
2635
+ "add": "ウィジェットを追加",
2636
+ "grabbed": "選択しました。矢印キーで移動、Enterで配置、Escapeでキャンセル。",
2637
+ "resizeGrabbed": "サイズ変更中。矢印キーで変更、Enterで確定、Escapeでキャンセル。",
2638
+ "movedTo": "{{col}}列目、{{row}}行目。",
2639
+ "resizedTo": "{{cols}} × {{rows}}.",
2640
+ "droppedAt": "ウィジェットを{{col}}列目、{{row}}行目に配置しました。",
2641
+ "removed": "ウィジェットを削除しました。",
2642
+ "cancelled": "変更をキャンセルしました。"
2643
+ },
2644
+ "widgetPicker": {
2645
+ "title": "ウィジェットを追加",
2646
+ "description": "ダッシュボードに追加するウィジェットを選択します。",
2647
+ "searchLabel": "ウィジェットを検索",
2648
+ "searchPlaceholder": "ウィジェットを検索…",
2649
+ "empty": "検索に一致するウィジェットはありません。",
2650
+ "none": "利用できるウィジェットがありません。"
2651
+ },
2631
2652
  "editor": {
2632
2653
  "toolbarLabel": "テキスト書式設定",
2633
2654
  "regionLabel": "リッチテキストエディター",
@@ -2628,6 +2628,27 @@
2628
2628
  "donut": "Ring"
2629
2629
  }
2630
2630
  },
2631
+ "dashboardGrid": {
2632
+ "move": "{{title}} verplaatsen",
2633
+ "resize": "{{title}} vergroten/verkleinen",
2634
+ "remove": "{{title}} verwijderen",
2635
+ "add": "Widget toevoegen",
2636
+ "grabbed": "Opgepakt. Gebruik de pijltjestoetsen om te verplaatsen, Enter om neer te zetten, Escape om te annuleren.",
2637
+ "resizeGrabbed": "Formaat wijzigen. Gebruik de pijltjestoetsen, Enter om te bevestigen, Escape om te annuleren.",
2638
+ "movedTo": "Kolom {{col}}, rij {{row}}.",
2639
+ "resizedTo": "{{cols}} × {{rows}}.",
2640
+ "droppedAt": "Widget geplaatst in kolom {{col}}, rij {{row}}.",
2641
+ "removed": "Widget verwijderd.",
2642
+ "cancelled": "Wijziging geannuleerd."
2643
+ },
2644
+ "widgetPicker": {
2645
+ "title": "Widget toevoegen",
2646
+ "description": "Kies een widget om aan je dashboard toe te voegen.",
2647
+ "searchLabel": "Widgets zoeken",
2648
+ "searchPlaceholder": "Widgets zoeken…",
2649
+ "empty": "Geen widgets komen overeen met de zoekopdracht.",
2650
+ "none": "Geen widgets beschikbaar."
2651
+ },
2631
2652
  "editor": {
2632
2653
  "toolbarLabel": "Tekstopmaak",
2633
2654
  "regionLabel": "Tekstverwerker",
@@ -2628,6 +2628,27 @@
2628
2628
  "donut": "Pierścieniowy"
2629
2629
  }
2630
2630
  },
2631
+ "dashboardGrid": {
2632
+ "move": "Przenieś {{title}}",
2633
+ "resize": "Zmień rozmiar {{title}}",
2634
+ "remove": "Usuń {{title}}",
2635
+ "add": "Dodaj widżet",
2636
+ "grabbed": "Podniesiono. Użyj strzałek, aby przenieść, Enter aby upuścić, Escape aby anulować.",
2637
+ "resizeGrabbed": "Zmiana rozmiaru. Użyj strzałek, Enter aby potwierdzić, Escape aby anulować.",
2638
+ "movedTo": "Kolumna {{col}}, wiersz {{row}}.",
2639
+ "resizedTo": "{{cols}} × {{rows}}.",
2640
+ "droppedAt": "Widżet umieszczony w kolumnie {{col}}, wierszu {{row}}.",
2641
+ "removed": "Widżet usunięty.",
2642
+ "cancelled": "Zmiana anulowana."
2643
+ },
2644
+ "widgetPicker": {
2645
+ "title": "Dodaj widżet",
2646
+ "description": "Wybierz widżet do dodania do pulpitu.",
2647
+ "searchLabel": "Szukaj widżetów",
2648
+ "searchPlaceholder": "Szukaj widżetów…",
2649
+ "empty": "Żaden widżet nie pasuje do wyszukiwania.",
2650
+ "none": "Brak dostępnych widżetów."
2651
+ },
2631
2652
  "editor": {
2632
2653
  "toolbarLabel": "Formatowanie tekstu",
2633
2654
  "regionLabel": "Edytor tekstu sformatowanego",
@@ -2628,6 +2628,27 @@
2628
2628
  "donut": "Anel"
2629
2629
  }
2630
2630
  },
2631
+ "dashboardGrid": {
2632
+ "move": "Mover {{title}}",
2633
+ "resize": "Redimensionar {{title}}",
2634
+ "remove": "Remover {{title}}",
2635
+ "add": "Adicionar widget",
2636
+ "grabbed": "Selecionado. Use as setas para mover, Enter para soltar, Esc para cancelar.",
2637
+ "resizeGrabbed": "A redimensionar. Use as setas para alterar o tamanho, Enter para confirmar, Esc para cancelar.",
2638
+ "movedTo": "Coluna {{col}}, linha {{row}}.",
2639
+ "resizedTo": "{{cols}} × {{rows}}.",
2640
+ "droppedAt": "Widget colocado na coluna {{col}}, linha {{row}}.",
2641
+ "removed": "Widget removido.",
2642
+ "cancelled": "Alteração cancelada."
2643
+ },
2644
+ "widgetPicker": {
2645
+ "title": "Adicionar um widget",
2646
+ "description": "Escolha um widget para adicionar ao painel.",
2647
+ "searchLabel": "Pesquisar widgets",
2648
+ "searchPlaceholder": "Pesquisar widgets…",
2649
+ "empty": "Nenhum widget corresponde à pesquisa.",
2650
+ "none": "Nenhum widget disponível."
2651
+ },
2631
2652
  "editor": {
2632
2653
  "toolbarLabel": "Formatação de texto",
2633
2654
  "regionLabel": "Editor de texto formatado",
@@ -2628,6 +2628,27 @@
2628
2628
  "donut": "Inel"
2629
2629
  }
2630
2630
  },
2631
+ "dashboardGrid": {
2632
+ "move": "Mută {{title}}",
2633
+ "resize": "Redimensionează {{title}}",
2634
+ "remove": "Elimină {{title}}",
2635
+ "add": "Adaugă widget",
2636
+ "grabbed": "Selectat. Folosește săgețile pentru a muta, Enter pentru a plasa, Escape pentru a anula.",
2637
+ "resizeGrabbed": "Redimensionare. Folosește săgețile pentru a schimba dimensiunea, Enter pentru a confirma, Escape pentru a anula.",
2638
+ "movedTo": "Coloana {{col}}, rândul {{row}}.",
2639
+ "resizedTo": "{{cols}} × {{rows}}.",
2640
+ "droppedAt": "Widget plasat în coloana {{col}}, rândul {{row}}.",
2641
+ "removed": "Widget eliminat.",
2642
+ "cancelled": "Modificare anulată."
2643
+ },
2644
+ "widgetPicker": {
2645
+ "title": "Adaugă un widget",
2646
+ "description": "Alege un widget de adăugat pe tablou.",
2647
+ "searchLabel": "Caută widgeturi",
2648
+ "searchPlaceholder": "Caută widgeturi…",
2649
+ "empty": "Niciun widget nu corespunde căutării.",
2650
+ "none": "Niciun widget disponibil."
2651
+ },
2631
2652
  "editor": {
2632
2653
  "toolbarLabel": "Formatare text",
2633
2654
  "regionLabel": "Editor de text îmbogățit",
@@ -2628,6 +2628,27 @@
2628
2628
  "donut": "Кольцевая"
2629
2629
  }
2630
2630
  },
2631
+ "dashboardGrid": {
2632
+ "move": "Переместить {{title}}",
2633
+ "resize": "Изменить размер {{title}}",
2634
+ "remove": "Удалить {{title}}",
2635
+ "add": "Добавить виджет",
2636
+ "grabbed": "Захвачено. Стрелки — переместить, Enter — отпустить, Escape — отменить.",
2637
+ "resizeGrabbed": "Изменение размера. Стрелки — изменить размер, Enter — подтвердить, Escape — отменить.",
2638
+ "movedTo": "Столбец {{col}}, строка {{row}}.",
2639
+ "resizedTo": "{{cols}} × {{rows}}.",
2640
+ "droppedAt": "Виджет размещён: столбец {{col}}, строка {{row}}.",
2641
+ "removed": "Виджет удалён.",
2642
+ "cancelled": "Изменение отменено."
2643
+ },
2644
+ "widgetPicker": {
2645
+ "title": "Добавить виджет",
2646
+ "description": "Выберите виджет для панели.",
2647
+ "searchLabel": "Поиск виджетов",
2648
+ "searchPlaceholder": "Поиск виджетов…",
2649
+ "empty": "Ни один виджет не соответствует запросу.",
2650
+ "none": "Нет доступных виджетов."
2651
+ },
2631
2652
  "editor": {
2632
2653
  "toolbarLabel": "Форматирование текста",
2633
2654
  "regionLabel": "Редактор форматированного текста",
@@ -2628,6 +2628,27 @@
2628
2628
  "donut": "Unazë"
2629
2629
  }
2630
2630
  },
2631
+ "dashboardGrid": {
2632
+ "move": "Zhvendos {{title}}",
2633
+ "resize": "Ripërmaso {{title}}",
2634
+ "remove": "Hiq {{title}}",
2635
+ "add": "Shto widget",
2636
+ "grabbed": "U mor. Përdor shigjetat për të zhvendosur, Enter për të lëshuar, Escape për të anuluar.",
2637
+ "resizeGrabbed": "Ripërmasim. Përdor shigjetat për madhësinë, Enter për të konfirmuar, Escape për të anuluar.",
2638
+ "movedTo": "Kolona {{col}}, rreshti {{row}}.",
2639
+ "resizedTo": "{{cols}} × {{rows}}.",
2640
+ "droppedAt": "Widget-i u vendos në kolonën {{col}}, rreshtin {{row}}.",
2641
+ "removed": "Widget-i u hoq.",
2642
+ "cancelled": "Ndryshimi u anulua."
2643
+ },
2644
+ "widgetPicker": {
2645
+ "title": "Shto një widget",
2646
+ "description": "Zgjidh një widget për panelin.",
2647
+ "searchLabel": "Kërko widget-e",
2648
+ "searchPlaceholder": "Kërko widget-e…",
2649
+ "empty": "Asnjë widget nuk përputhet me kërkimin.",
2650
+ "none": "Nuk ka miniaplikacione të disponueshme."
2651
+ },
2631
2652
  "editor": {
2632
2653
  "toolbarLabel": "Formatimi i tekstit",
2633
2654
  "regionLabel": "Redaktues teksti i pasur",
@@ -2628,6 +2628,27 @@
2628
2628
  "donut": "Ring"
2629
2629
  }
2630
2630
  },
2631
+ "dashboardGrid": {
2632
+ "move": "Flytta {{title}}",
2633
+ "resize": "Ändra storlek på {{title}}",
2634
+ "remove": "Ta bort {{title}}",
2635
+ "add": "Lägg till widget",
2636
+ "grabbed": "Upplockad. Använd piltangenterna för att flytta, Enter för att släppa, Escape för att avbryta.",
2637
+ "resizeGrabbed": "Storleksändring. Använd piltangenterna, Enter för att bekräfta, Escape för att avbryta.",
2638
+ "movedTo": "Kolumn {{col}}, rad {{row}}.",
2639
+ "resizedTo": "{{cols}} × {{rows}}.",
2640
+ "droppedAt": "Widget placerad i kolumn {{col}}, rad {{row}}.",
2641
+ "removed": "Widget borttagen.",
2642
+ "cancelled": "Ändring avbruten."
2643
+ },
2644
+ "widgetPicker": {
2645
+ "title": "Lägg till widget",
2646
+ "description": "Välj en widget att lägga till på panelen.",
2647
+ "searchLabel": "Sök widgetar",
2648
+ "searchPlaceholder": "Sök widgetar…",
2649
+ "empty": "Inga widgetar matchar sökningen.",
2650
+ "none": "Inga widgetar tillgängliga."
2651
+ },
2631
2652
  "editor": {
2632
2653
  "toolbarLabel": "Textformatering",
2633
2654
  "regionLabel": "Redigerare för formaterad text",