@k2b/ui 0.10.0 → 0.12.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 (83) hide show
  1. package/dist/browser/content/FileView.js +203 -136
  2. package/dist/browser/content/FileView.js.map +1 -1
  3. package/dist/browser/content/markdown-title.js +52 -0
  4. package/dist/browser/content/markdown-title.js.map +1 -0
  5. package/dist/browser/feedback/HoverPreview.js +6 -6
  6. package/dist/browser/feedback/HoverPreview.js.map +1 -1
  7. package/dist/browser/feedback/index.js.map +1 -1
  8. package/dist/browser/feedback/prompts.js +18 -19
  9. package/dist/browser/feedback/prompts.js.map +1 -1
  10. package/dist/browser/feedback/toast.js +363 -122
  11. package/dist/browser/feedback/toast.js.map +1 -1
  12. package/dist/browser/inputs/DatePicker.js +263 -222
  13. package/dist/browser/inputs/DatePicker.js.map +1 -1
  14. package/dist/browser/inputs/MultiSelectInput.js +139 -105
  15. package/dist/browser/inputs/MultiSelectInput.js.map +1 -1
  16. package/dist/browser/inputs/NumberInput.js +209 -122
  17. package/dist/browser/inputs/NumberInput.js.map +1 -1
  18. package/dist/browser/inputs/Select.js +184 -92
  19. package/dist/browser/inputs/Select.js.map +1 -1
  20. package/dist/browser/inputs/index.js.map +1 -1
  21. package/dist/browser/intl/messages.js +4 -0
  22. package/dist/browser/intl/messages.js.map +1 -1
  23. package/dist/browser/layout/AppWorkspace.js +105 -77
  24. package/dist/browser/layout/AppWorkspace.js.map +1 -1
  25. package/dist/browser/layout/DetailPanel.js +2 -1
  26. package/dist/browser/layout/DetailPanel.js.map +1 -1
  27. package/dist/browser/layout/Navigation.js +1 -0
  28. package/dist/browser/layout/Navigation.js.map +1 -1
  29. package/dist/browser/layout/PanelDialog.js +1 -0
  30. package/dist/browser/layout/PanelDialog.js.map +1 -1
  31. package/dist/browser/layout/Settings.js +2 -2
  32. package/dist/browser/layout/Settings.js.map +1 -1
  33. package/dist/browser/layout/app-workspace-controller.js +30 -2
  34. package/dist/browser/layout/app-workspace-controller.js.map +1 -1
  35. package/dist/ssr/content/FileView.js +141 -81
  36. package/dist/ssr/content/FileView.js.map +1 -1
  37. package/dist/ssr/content/markdown-title.js +52 -0
  38. package/dist/ssr/content/markdown-title.js.map +1 -0
  39. package/dist/ssr/feedback/HoverPreview.js +6 -6
  40. package/dist/ssr/feedback/HoverPreview.js.map +1 -1
  41. package/dist/ssr/feedback/index.js.map +1 -1
  42. package/dist/ssr/feedback/prompts.js +1 -1
  43. package/dist/ssr/feedback/prompts.js.map +1 -1
  44. package/dist/ssr/feedback/toast.js +363 -122
  45. package/dist/ssr/feedback/toast.js.map +1 -1
  46. package/dist/ssr/inputs/DatePicker.js +78 -52
  47. package/dist/ssr/inputs/DatePicker.js.map +1 -1
  48. package/dist/ssr/inputs/MultiSelectInput.js +52 -32
  49. package/dist/ssr/inputs/MultiSelectInput.js.map +1 -1
  50. package/dist/ssr/inputs/NumberInput.js +93 -40
  51. package/dist/ssr/inputs/NumberInput.js.map +1 -1
  52. package/dist/ssr/inputs/Select.js +108 -29
  53. package/dist/ssr/inputs/Select.js.map +1 -1
  54. package/dist/ssr/inputs/index.js.map +1 -1
  55. package/dist/ssr/intl/messages.js +4 -0
  56. package/dist/ssr/intl/messages.js.map +1 -1
  57. package/dist/ssr/layout/AppWorkspace.js +84 -66
  58. package/dist/ssr/layout/AppWorkspace.js.map +1 -1
  59. package/dist/ssr/layout/DetailPanel.js +2 -1
  60. package/dist/ssr/layout/DetailPanel.js.map +1 -1
  61. package/dist/ssr/layout/Navigation.js +1 -0
  62. package/dist/ssr/layout/Navigation.js.map +1 -1
  63. package/dist/ssr/layout/PanelDialog.js +1 -0
  64. package/dist/ssr/layout/PanelDialog.js.map +1 -1
  65. package/dist/ssr/layout/Settings.js +2 -2
  66. package/dist/ssr/layout/Settings.js.map +1 -1
  67. package/dist/ssr/layout/app-workspace-controller.js +30 -2
  68. package/dist/ssr/layout/app-workspace-controller.js.map +1 -1
  69. package/dist/styles.css +1 -1
  70. package/dist/types/content/FileView.d.ts +11 -1
  71. package/dist/types/content/markdown-title.d.ts +9 -0
  72. package/dist/types/feedback/index.d.ts +1 -1
  73. package/dist/types/feedback/toast.d.ts +7 -0
  74. package/dist/types/inputs/DatePicker.d.ts +11 -2
  75. package/dist/types/inputs/MultiSelectInput.d.ts +5 -1
  76. package/dist/types/inputs/NumberInput.d.ts +14 -0
  77. package/dist/types/inputs/Select.d.ts +10 -0
  78. package/dist/types/inputs/index.d.ts +1 -1
  79. package/dist/types/intl/messages.d.ts +2 -0
  80. package/dist/types/layout/AppWorkspace.d.ts +14 -0
  81. package/dist/types/layout/Settings.d.ts +2 -2
  82. package/dist/types/layout/app-workspace-controller.d.ts +5 -0
  83. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["feedback/toast.ts"],"sourcesContent":["import { getK2bPortalRoot } from \"../internal/portal\";\nimport { resolveUiMessages } from \"../intl/messages\";\n\nexport type ToastVariant = \"default\" | \"success\" | \"error\";\n\nexport type ToastAction = {\n label: string;\n} & ({ href: string } | { onClick: () => void });\n\nexport type ToastOptions = {\n variant?: ToastVariant;\n duration?: number;\n iconClass?: string;\n title?: string;\n action?: ToastAction | null;\n /** Fraction from 0 to 1, or an indeterminate activity indicator. null removes it. */\n progress?: number | \"indeterminate\" | null;\n dismissLabel?: string;\n};\n\nexport type ToastHandle = {\n dismiss: () => void;\n update: (description: string, options?: ToastOptions) => void;\n};\n\nexport interface ToastFn {\n (description: string, options?: ToastOptions): ToastHandle;\n success: (description: string, options?: Omit<ToastOptions, \"variant\">) => ToastHandle;\n error: (description: string, options?: Omit<ToastOptions, \"variant\">) => ToastHandle;\n dismissAll: () => void;\n}\n\nconst DEFAULT_DURATION_MS = 3000;\nconst MAX_VISIBLE_TOASTS = 5;\nconst ANIMATION_MS = 200;\nexport const K2B_TOAST_CONTAINER_ID = \"k2b-ui-toast-container\";\nconst CONTAINER_ATTRIBUTE = \"data-k2b-toast-container\";\n\ntype VariantStyle = {\n tone: \"info\" | \"success\" | \"danger\";\n iconClass: string;\n titleKey: \"info\" | \"success\" | \"error\";\n};\n\nconst VARIANT_STYLES: Record<ToastVariant, VariantStyle> = {\n default: {\n tone: \"info\",\n iconClass: \"ti-info-circle\",\n titleKey: \"info\",\n },\n success: {\n tone: \"success\",\n iconClass: \"ti-check\",\n titleKey: \"success\",\n },\n error: {\n tone: \"danger\",\n iconClass: \"ti-x\",\n titleKey: \"error\",\n },\n};\n\n/** Default titles follow the document locale, like the other imperative `@k2b/ui` surfaces. */\nconst defaultTitle = (variant: ToastVariant): string => resolveUiMessages()[VARIANT_STYLES[variant].titleKey];\n\nconst normalizedIconClass = (iconClass: string): string => {\n const tokens = iconClass\n .split(/\\s+/)\n .filter(Boolean)\n .filter((token) => token !== \"ti\");\n return [\"ti\", ...tokens].join(\" \");\n};\n\nconst applyIconClass = (icon: HTMLElement, iconClass: string): void => {\n icon.className = normalizedIconClass(iconClass);\n};\n\nconst applyLiveRegion = (element: HTMLElement, variant: ToastVariant): void => {\n const isError = variant === \"error\";\n element.setAttribute(\"role\", isError ? \"alert\" : \"status\");\n element.setAttribute(\"aria-live\", isError ? \"assertive\" : \"polite\");\n element.setAttribute(\"aria-atomic\", \"true\");\n};\n\nconst liveToasts = new Set<ToastHandle>();\n\nconst ensureContainer = (): HTMLElement | null => {\n if (typeof document === \"undefined\") return null;\n const root = getK2bPortalRoot();\n let container = root.querySelector<HTMLElement>(`[${CONTAINER_ATTRIBUTE}]`);\n if (container) return container;\n\n container = document.createElement(\"div\");\n container.id = K2B_TOAST_CONTAINER_ID;\n container.setAttribute(CONTAINER_ATTRIBUTE, \"\");\n container.setAttribute(\"popover\", \"manual\");\n // Keep the source rail geometry inline: it must defeat UA popover defaults\n // even when a consumer has not loaded the optional package stylesheet yet.\n // The stylesheet only moves the rail to the top edge on narrow viewports\n // through the two edge variables.\n container.style.cssText =\n \"position:fixed;left:auto;right:env(safe-area-inset-right,0px);\" +\n \"top:var(--k2b-toast-rail-top,auto);bottom:var(--k2b-toast-rail-bottom,env(safe-area-inset-bottom,0px));\" +\n \"z-index:50;box-sizing:border-box;display:flex;flex-direction:column;gap:0.5rem;\" +\n \"width:min(22rem,calc(100vw - env(safe-area-inset-left,0px) - env(safe-area-inset-right,0px)));\" +\n \"height:auto;max-width:100vw;\" +\n \"max-height:calc(100dvh - env(safe-area-inset-top,0px) - env(safe-area-inset-bottom,0px));\" +\n \"margin:0;padding:1rem;border:0;background:transparent;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;\" +\n \"pointer-events:none;\";\n root.appendChild(container);\n return container;\n};\n\nconst promoteToTopLayer = (container: HTMLElement): HTMLElement => {\n if (typeof container.showPopover !== \"function\" || !container.isConnected) return container;\n let active = container;\n try {\n if (container.matches(\":popover-open\") || document.querySelector(\"dialog:modal\")) {\n const next = container.cloneNode(false) as HTMLElement;\n while (container.firstChild) next.appendChild(container.firstChild);\n const root = container.parentElement ?? getK2bPortalRoot();\n container.remove();\n root.appendChild(next);\n active = next;\n }\n if (!active.matches(\":popover-open\")) active.showPopover();\n } catch {\n active.removeAttribute(\"popover\");\n }\n return active;\n};\n\n/** Close every empty rail so an emptied container does not linger in the top\n * layer. Rails are resolved at call time on purpose: `promoteToTopLayer`\n * swaps the element for a fresh clone, so a container captured when the toast\n * was created can already be detached by the time the toast is dismissed. */\nconst hideEmptyContainers = (): void => {\n if (typeof document === \"undefined\") return;\n for (const container of Array.from(document.querySelectorAll<HTMLElement>(`[${CONTAINER_ATTRIBUTE}]`))) {\n if (container.childElementCount > 0 || typeof container.hidePopover !== \"function\") continue;\n try {\n if (container.matches(\":popover-open\")) container.hidePopover();\n } catch {\n // Already hidden or disconnected.\n }\n }\n};\n\nconst renderLead = (lead: HTMLElement, variant: ToastVariant, iconClassOverride?: string): HTMLElement => {\n const style = VARIANT_STYLES[variant];\n lead.replaceChildren();\n lead.className = \"k2b-toast__icon\";\n lead.dataset.tone = style.tone;\n const icon = document.createElement(\"i\");\n applyIconClass(icon, iconClassOverride ?? style.iconClass);\n icon.setAttribute(\"aria-hidden\", \"true\");\n lead.appendChild(icon);\n return icon;\n};\n\nconst showToast = (description: string, options?: ToastOptions): ToastHandle => {\n const initialContainer = ensureContainer();\n if (!initialContainer) {\n const noop = () => {};\n return { dismiss: noop, update: noop };\n }\n\n let dismissed = false;\n let dismissTimer: ReturnType<typeof setTimeout> | null = null;\n let currentVariant: ToastVariant = options?.variant ?? \"default\";\n let currentProgress = options?.progress ?? null;\n let currentDuration = options?.duration ?? DEFAULT_DURATION_MS;\n let remainingDuration = currentDuration;\n let timerStartedAt = 0;\n let pausedByPointer = false;\n let pausedByFocus = false;\n\n const toastElement = document.createElement(\"div\");\n toastElement.className = \"k2b-toast\";\n toastElement.dataset.tone = VARIANT_STYLES[currentVariant].tone;\n toastElement.dataset.k2bToast = \"\";\n\n const leadElement = document.createElement(\"div\");\n let leadIconElement = renderLead(leadElement, currentVariant, options?.iconClass);\n\n const contentElement = document.createElement(\"div\");\n contentElement.className = \"k2b-toast__content\";\n applyLiveRegion(contentElement, currentVariant);\n\n const titleElement = document.createElement(\"div\");\n titleElement.className = \"k2b-toast__title\";\n titleElement.textContent = options?.title ?? defaultTitle(currentVariant);\n const descriptionElement = document.createElement(\"div\");\n descriptionElement.className = \"k2b-toast__description\";\n descriptionElement.textContent = description;\n contentElement.append(titleElement, descriptionElement);\n\n const closeButton = document.createElement(\"button\");\n closeButton.type = \"button\";\n closeButton.className = \"k2b-toast__close\";\n closeButton.setAttribute(\"aria-label\", options?.dismissLabel ?? resolveUiMessages().dismissNotification);\n const closeIcon = document.createElement(\"i\");\n closeIcon.className = \"ti ti-x\";\n closeIcon.setAttribute(\"aria-hidden\", \"true\");\n closeButton.appendChild(closeIcon);\n\n toastElement.append(leadElement, contentElement, closeButton);\n\n const clearDismissTimer = () => {\n if (dismissTimer === null) return;\n clearTimeout(dismissTimer);\n dismissTimer = null;\n };\n\n const pauseDismissTimer = () => {\n if (dismissTimer === null) return;\n remainingDuration = Math.max(0, remainingDuration - (Date.now() - timerStartedAt));\n clearDismissTimer();\n };\n\n const resumeDismissTimer = () => {\n if (dismissed || currentProgress !== null || currentDuration === 0 || remainingDuration <= 0 || pausedByPointer || pausedByFocus)\n return;\n clearDismissTimer();\n timerStartedAt = Date.now();\n dismissTimer = setTimeout(() => dismiss(), remainingDuration);\n };\n\n const resetDismissTimer = (duration: number) => {\n clearDismissTimer();\n currentDuration = duration;\n remainingDuration = duration;\n resumeDismissTimer();\n };\n\n const dismiss = () => {\n if (dismissed) return;\n dismissed = true;\n clearDismissTimer();\n liveToasts.delete(handle);\n toastElement.dataset.closing = \"true\";\n setTimeout(() => {\n toastElement.remove();\n hideEmptyContainers();\n }, ANIMATION_MS);\n };\n\n const progressElement = document.createElement(\"progress\");\n progressElement.className = \"k2b-toast__progress\";\n progressElement.max = 1;\n const renderProgress = () => {\n progressElement.hidden = currentProgress === null;\n progressElement.setAttribute(\"aria-label\", titleElement.textContent || descriptionElement.textContent || \"\");\n if (typeof currentProgress === \"number\")\n progressElement.value = Number.isFinite(currentProgress) ? Math.max(0, Math.min(1, currentProgress)) : 0;\n else progressElement.removeAttribute(\"value\");\n };\n contentElement.append(progressElement);\n renderProgress();\n let actionElement: HTMLAnchorElement | HTMLButtonElement | null = null;\n const renderAction = (action: ToastAction | null | undefined) => {\n actionElement?.remove();\n actionElement = null;\n if (!action) return;\n if (\"href\" in action) {\n const link = document.createElement(\"a\");\n link.href = action.href;\n actionElement = link;\n } else {\n const button = document.createElement(\"button\");\n button.type = \"button\";\n actionElement = button;\n }\n actionElement.className = \"k2b-toast__action\";\n actionElement.textContent = action.label;\n actionElement.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n if (\"onClick\" in action) action.onClick();\n else dismiss();\n });\n contentElement.appendChild(actionElement);\n };\n renderAction(options?.action);\n\n const update = (nextDescription: string, nextOptions?: ToastOptions) => {\n if (dismissed) return;\n descriptionElement.textContent = nextDescription;\n\n const variantChanged = nextOptions?.variant !== undefined && nextOptions.variant !== currentVariant;\n if (variantChanged) {\n currentVariant = nextOptions.variant!;\n toastElement.dataset.tone = VARIANT_STYLES[currentVariant].tone;\n leadIconElement = renderLead(leadElement, currentVariant, nextOptions.iconClass);\n applyLiveRegion(contentElement, currentVariant);\n } else if (nextOptions?.iconClass !== undefined) {\n applyIconClass(leadIconElement, nextOptions.iconClass);\n }\n\n if (nextOptions && Object.prototype.hasOwnProperty.call(nextOptions, \"title\")) {\n titleElement.textContent = nextOptions.title ?? \"\";\n } else if (variantChanged) {\n titleElement.textContent = defaultTitle(currentVariant);\n }\n if (nextOptions && Object.prototype.hasOwnProperty.call(nextOptions, \"action\")) renderAction(nextOptions.action);\n if (nextOptions && Object.prototype.hasOwnProperty.call(nextOptions, \"duration\")) {\n currentDuration = nextOptions.duration ?? DEFAULT_DURATION_MS;\n }\n if (nextOptions && Object.prototype.hasOwnProperty.call(nextOptions, \"progress\")) currentProgress = nextOptions.progress ?? null;\n if (nextOptions?.dismissLabel) closeButton.setAttribute(\"aria-label\", nextOptions.dismissLabel);\n renderProgress();\n resetDismissTimer(currentDuration);\n };\n\n toastElement.addEventListener(\"click\", () => {\n if (currentProgress === null) dismiss();\n });\n closeButton.addEventListener(\"click\", (event) => {\n event.stopPropagation();\n dismiss();\n });\n toastElement.addEventListener(\"pointerenter\", () => {\n pausedByPointer = true;\n pauseDismissTimer();\n });\n toastElement.addEventListener(\"pointerleave\", () => {\n pausedByPointer = false;\n resumeDismissTimer();\n });\n toastElement.addEventListener(\"focusin\", () => {\n pausedByFocus = true;\n pauseDismissTimer();\n });\n toastElement.addEventListener(\"focusout\", (event) => {\n if (toastElement.contains(event.relatedTarget as Node | null)) return;\n pausedByFocus = false;\n resumeDismissTimer();\n });\n\n const handle: ToastHandle = { dismiss, update };\n liveToasts.add(handle);\n if (liveToasts.size > MAX_VISIBLE_TOASTS) liveToasts.values().next().value?.dismiss();\n promoteToTopLayer(initialContainer).appendChild(toastElement);\n requestAnimationFrame(() => {\n if (!dismissed) toastElement.dataset.open = \"true\";\n });\n resetDismissTimer(currentDuration);\n return handle;\n};\n\nexport const isPointInsideToast = (x: number, y: number): boolean => {\n if (typeof document === \"undefined\") return false;\n const containers = Array.from(document.querySelectorAll<HTMLElement>(`[${CONTAINER_ATTRIBUTE}]`));\n for (const container of containers) {\n for (const child of Array.from(container.children)) {\n const rect = child.getBoundingClientRect();\n if (x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom) return true;\n }\n }\n return false;\n};\n\nconst toastFn = ((description: string, options?: ToastOptions) => showToast(description, options)) as ToastFn;\ntoastFn.success = (description, options) => showToast(description, { ...options, variant: \"success\" });\ntoastFn.error = (description, options) => showToast(description, { ...options, variant: \"error\" });\ntoastFn.dismissAll = () => {\n for (const handle of Array.from(liveToasts)) handle.dismiss();\n};\n\nexport const toast: ToastFn = toastFn;\n"],"mappings":"AAAA,SAAS,gBAAgB,QAAQ,oBAAoB;AACrD,SAAS,iBAAiB,QAAQ,kBAAkB;AA+BpD,MAAM,mBAAmB,GAAG,IAAI;AAChC,MAAM,kBAAkB,GAAG,CAAC;AAC5B,MAAM,YAAY,GAAG,GAAG;AACxB,OAAO,MAAM,sBAAsB,GAAG,wBAAwB;AAC9D,MAAM,mBAAmB,GAAG,0BAA0B;AAQtD,MAAM,cAAkD,GAAG;EACzD,OAAO,EAAE;IACP,IAAI,EAAE,MAAM;IACZ,SAAS,EAAE,gBAAgB;IAC3B,QAAQ,EAAE;EACZ,CAAC;EACD,OAAO,EAAE;IACP,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,UAAU;IACrB,QAAQ,EAAE;EACZ,CAAC;EACD,KAAK,EAAE;IACL,IAAI,EAAE,QAAQ;IACd,SAAS,EAAE,MAAM;IACjB,QAAQ,EAAE;EACZ;AACF,CAAC;;AAED;AACA,MAAM,YAAY,GAAI,OAAqB,IAAa,iBAAiB,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC;AAE7G,MAAM,mBAAmB,GAAI,SAAiB,IAAa;EACzD,MAAM,MAAM,GAAG,SAAS,CACrB,KAAK,CAAC,KAAK,CAAC,CACZ,MAAM,CAAC,OAAO,CAAC,CACf,MAAM,CAAE,KAAK,IAAK,KAAK,KAAK,IAAI,CAAC;EACpC,OAAO,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;AACpC,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,IAAiB,EAAE,SAAiB,KAAW;EACrE,IAAI,CAAC,SAAS,GAAG,mBAAmB,CAAC,SAAS,CAAC;AACjD,CAAC;AAED,MAAM,eAAe,GAAG,CAAC,OAAoB,EAAE,OAAqB,KAAW;EAC7E,MAAM,OAAO,GAAG,OAAO,KAAK,OAAO;EACnC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;EAC1D,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,GAAG,WAAW,GAAG,QAAQ,CAAC;EACnE,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,GAAG,IAAI,GAAG,CAAc,CAAC;AAEzC,MAAM,eAAe,GAAG,MAA0B;EAChD,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,OAAO,IAAI;EAChD,MAAM,IAAI,GAAG,gBAAgB,CAAC,CAAC;EAC/B,IAAI,SAAS,GAAG,IAAI,CAAC,aAAa,CAAc,IAAI,mBAAmB,GAAG,CAAC;EAC3E,IAAI,SAAS,EAAE,OAAO,SAAS;EAE/B,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;EACzC,SAAS,CAAC,EAAE,GAAG,sBAAsB;EACrC,SAAS,CAAC,YAAY,CAAC,mBAAmB,EAAE,EAAE,CAAC;EAC/C,SAAS,CAAC,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC;EAC3C;EACA;EACA;EACA;EACA,SAAS,CAAC,KAAK,CAAC,OAAO,GACrB,gEAAgE,GAChE,yGAAyG,GACzG,iFAAiF,GACjF,gGAAgG,GAChG,8BAA8B,GAC9B,2FAA2F,GAC3F,sHAAsH,GACtH,sBAAsB;EACxB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;EAC3B,OAAO,SAAS;AAClB,CAAC;AAED,MAAM,iBAAiB,GAAI,SAAsB,IAAkB;EACjE,IAAI,OAAO,SAAS,CAAC,WAAW,KAAK,UAAU,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,OAAO,SAAS;EAC3F,IAAI,MAAM,GAAG,SAAS;EACtB,IAAI;IACF,IAAI,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,EAAE;MAChF,MAAM,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,KAAK,CAAgB;MACtD,OAAO,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC;MACnE,MAAM,IAAI,GAAG,SAAS,CAAC,aAAa,IAAI,gBAAgB,CAAC,CAAC;MAC1D,SAAS,CAAC,MAAM,CAAC,CAAC;MAClB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;MACtB,MAAM,GAAG,IAAI;IACf;IACA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;EAC5D,CAAC,CAAC,MAAM;IACN,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC;EACnC;EACA,OAAO,MAAM;AACf,CAAC;;AAED;AACA;AACA;AACA;AACA,MAAM,mBAAmB,GAAG,MAAY;EACtC,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;EACrC,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAc,IAAI,mBAAmB,GAAG,CAAC,CAAC,EAAE;IACtG,IAAI,SAAS,CAAC,iBAAiB,GAAG,CAAC,IAAI,OAAO,SAAS,CAAC,WAAW,KAAK,UAAU,EAAE;IACpF,IAAI;MACF,IAAI,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IACjE,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ;AACF,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAiB,EAAE,OAAqB,EAAE,iBAA0B,KAAkB;EACxG,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC;EACrC,IAAI,CAAC,eAAe,CAAC,CAAC;EACtB,IAAI,CAAC,SAAS,GAAG,iBAAiB;EAClC,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI;EAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;EACxC,cAAc,CAAC,IAAI,EAAE,iBAAiB,IAAI,KAAK,CAAC,SAAS,CAAC;EAC1D,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;EACxC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;EACtB,OAAO,IAAI;AACb,CAAC;AAED,MAAM,SAAS,GAAG,CAAC,WAAmB,EAAE,OAAsB,KAAkB;EAC9E,MAAM,gBAAgB,GAAG,eAAe,CAAC,CAAC;EAC1C,IAAI,CAAC,gBAAgB,EAAE;IACrB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC;IACrB,OAAO;MAAE,OAAO,EAAE,IAAI;MAAE,MAAM,EAAE;IAAK,CAAC;EACxC;EAEA,IAAI,SAAS,GAAG,KAAK;EACrB,IAAI,YAAkD,GAAG,IAAI;EAC7D,IAAI,cAA4B,GAAG,OAAO,EAAE,OAAO,IAAI,SAAS;EAChE,IAAI,eAAe,GAAG,OAAO,EAAE,QAAQ,IAAI,IAAI;EAC/C,IAAI,eAAe,GAAG,OAAO,EAAE,QAAQ,IAAI,mBAAmB;EAC9D,IAAI,iBAAiB,GAAG,eAAe;EACvC,IAAI,cAAc,GAAG,CAAC;EACtB,IAAI,eAAe,GAAG,KAAK;EAC3B,IAAI,aAAa,GAAG,KAAK;EAEzB,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;EAClD,YAAY,CAAC,SAAS,GAAG,WAAW;EACpC,YAAY,CAAC,OAAO,CAAC,IAAI,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC,IAAI;EAC/D,YAAY,CAAC,OAAO,CAAC,QAAQ,GAAG,EAAE;EAElC,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;EACjD,IAAI,eAAe,GAAG,UAAU,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,SAAS,CAAC;EAEjF,MAAM,cAAc,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;EACpD,cAAc,CAAC,SAAS,GAAG,oBAAoB;EAC/C,eAAe,CAAC,cAAc,EAAE,cAAc,CAAC;EAE/C,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;EAClD,YAAY,CAAC,SAAS,GAAG,kBAAkB;EAC3C,YAAY,CAAC,WAAW,GAAG,OAAO,EAAE,KAAK,IAAI,YAAY,CAAC,cAAc,CAAC;EACzE,MAAM,kBAAkB,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;EACxD,kBAAkB,CAAC,SAAS,GAAG,wBAAwB;EACvD,kBAAkB,CAAC,WAAW,GAAG,WAAW;EAC5C,cAAc,CAAC,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC;EAEvD,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;EACpD,WAAW,CAAC,IAAI,GAAG,QAAQ;EAC3B,WAAW,CAAC,SAAS,GAAG,kBAAkB;EAC1C,WAAW,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,EAAE,YAAY,IAAI,iBAAiB,CAAC,CAAC,CAAC,mBAAmB,CAAC;EACxG,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;EAC7C,SAAS,CAAC,SAAS,GAAG,SAAS;EAC/B,SAAS,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;EAC7C,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC;EAElC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,EAAE,WAAW,CAAC;EAE7D,MAAM,iBAAiB,GAAG,MAAM;IAC9B,IAAI,YAAY,KAAK,IAAI,EAAE;IAC3B,YAAY,CAAC,YAAY,CAAC;IAC1B,YAAY,GAAG,IAAI;EACrB,CAAC;EAED,MAAM,iBAAiB,GAAG,MAAM;IAC9B,IAAI,YAAY,KAAK,IAAI,EAAE;IAC3B,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC;IAClF,iBAAiB,CAAC,CAAC;EACrB,CAAC;EAED,MAAM,kBAAkB,GAAG,MAAM;IAC/B,IAAI,SAAS,IAAI,eAAe,KAAK,IAAI,IAAI,eAAe,KAAK,CAAC,IAAI,iBAAiB,IAAI,CAAC,IAAI,eAAe,IAAI,aAAa,EAC9H;IACF,iBAAiB,CAAC,CAAC;IACnB,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,YAAY,GAAG,UAAU,CAAC,MAAM,OAAO,CAAC,CAAC,EAAE,iBAAiB,CAAC;EAC/D,CAAC;EAED,MAAM,iBAAiB,GAAI,QAAgB,IAAK;IAC9C,iBAAiB,CAAC,CAAC;IACnB,eAAe,GAAG,QAAQ;IAC1B,iBAAiB,GAAG,QAAQ;IAC5B,kBAAkB,CAAC,CAAC;EACtB,CAAC;EAED,MAAM,OAAO,GAAG,MAAM;IACpB,IAAI,SAAS,EAAE;IACf,SAAS,GAAG,IAAI;IAChB,iBAAiB,CAAC,CAAC;IACnB,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;IACzB,YAAY,CAAC,OAAO,CAAC,OAAO,GAAG,MAAM;IACrC,UAAU,CAAC,MAAM;MACf,YAAY,CAAC,MAAM,CAAC,CAAC;MACrB,mBAAmB,CAAC,CAAC;IACvB,CAAC,EAAE,YAAY,CAAC;EAClB,CAAC;EAED,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC;EAC1D,eAAe,CAAC,SAAS,GAAG,qBAAqB;EACjD,eAAe,CAAC,GAAG,GAAG,CAAC;EACvB,MAAM,cAAc,GAAG,MAAM;IAC3B,eAAe,CAAC,MAAM,GAAG,eAAe,KAAK,IAAI;IACjD,eAAe,CAAC,YAAY,CAAC,YAAY,EAAE,YAAY,CAAC,WAAW,IAAI,kBAAkB,CAAC,WAAW,IAAI,EAAE,CAAC;IAC5G,IAAI,OAAO,eAAe,KAAK,QAAQ,EACrC,eAAe,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,GAAG,CAAC,CAAC,KACtG,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC;EAC/C,CAAC;EACD,cAAc,CAAC,MAAM,CAAC,eAAe,CAAC;EACtC,cAAc,CAAC,CAAC;EAChB,IAAI,aAA2D,GAAG,IAAI;EACtE,MAAM,YAAY,GAAI,MAAsC,IAAK;IAC/D,aAAa,EAAE,MAAM,CAAC,CAAC;IACvB,aAAa,GAAG,IAAI;IACpB,IAAI,CAAC,MAAM,EAAE;IACb,IAAI,MAAM,IAAI,MAAM,EAAE;MACpB,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC;MACxC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;MACvB,aAAa,GAAG,IAAI;IACtB,CAAC,MAAM;MACL,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;MAC/C,MAAM,CAAC,IAAI,GAAG,QAAQ;MACtB,aAAa,GAAG,MAAM;IACxB;IACA,aAAa,CAAC,SAAS,GAAG,mBAAmB;IAC7C,aAAa,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK;IACxC,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAG,KAAK,IAAK;MACjD,KAAK,CAAC,eAAe,CAAC,CAAC;MACvB,IAAI,SAAS,IAAI,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KACrC,OAAO,CAAC,CAAC;IAChB,CAAC,CAAC;IACF,cAAc,CAAC,WAAW,CAAC,aAAa,CAAC;EAC3C,CAAC;EACD,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC;EAE7B,MAAM,MAAM,GAAG,CAAC,eAAuB,EAAE,WAA0B,KAAK;IACtE,IAAI,SAAS,EAAE;IACf,kBAAkB,CAAC,WAAW,GAAG,eAAe;IAEhD,MAAM,cAAc,GAAG,WAAW,EAAE,OAAO,KAAK,SAAS,IAAI,WAAW,CAAC,OAAO,KAAK,cAAc;IACnG,IAAI,cAAc,EAAE;MAClB,cAAc,GAAG,WAAW,CAAC,OAAQ;MACrC,YAAY,CAAC,OAAO,CAAC,IAAI,GAAG,cAAc,CAAC,cAAc,CAAC,CAAC,IAAI;MAC/D,eAAe,GAAG,UAAU,CAAC,WAAW,EAAE,cAAc,EAAE,WAAW,CAAC,SAAS,CAAC;MAChF,eAAe,CAAC,cAAc,EAAE,cAAc,CAAC;IACjD,CAAC,MAAM,IAAI,WAAW,EAAE,SAAS,KAAK,SAAS,EAAE;MAC/C,cAAc,CAAC,eAAe,EAAE,WAAW,CAAC,SAAS,CAAC;IACxD;IAEA,IAAI,WAAW,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE;MAC7E,YAAY,CAAC,WAAW,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;IACpD,CAAC,MAAM,IAAI,cAAc,EAAE;MACzB,YAAY,CAAC,WAAW,GAAG,YAAY,CAAC,cAAc,CAAC;IACzD;IACA,IAAI,WAAW,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,YAAY,CAAC,WAAW,CAAC,MAAM,CAAC;IAChH,IAAI,WAAW,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE;MAChF,eAAe,GAAG,WAAW,CAAC,QAAQ,IAAI,mBAAmB;IAC/D;IACA,IAAI,WAAW,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,eAAe,GAAG,WAAW,CAAC,QAAQ,IAAI,IAAI;IAChI,IAAI,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC,YAAY,CAAC,YAAY,EAAE,WAAW,CAAC,YAAY,CAAC;IAC/F,cAAc,CAAC,CAAC;IAChB,iBAAiB,CAAC,eAAe,CAAC;EACpC,CAAC;EAED,YAAY,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM;IAC3C,IAAI,eAAe,KAAK,IAAI,EAAE,OAAO,CAAC,CAAC;EACzC,CAAC,CAAC;EACF,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAG,KAAK,IAAK;IAC/C,KAAK,CAAC,eAAe,CAAC,CAAC;IACvB,OAAO,CAAC,CAAC;EACX,CAAC,CAAC;EACF,YAAY,CAAC,gBAAgB,CAAC,cAAc,EAAE,MAAM;IAClD,eAAe,GAAG,IAAI;IACtB,iBAAiB,CAAC,CAAC;EACrB,CAAC,CAAC;EACF,YAAY,CAAC,gBAAgB,CAAC,cAAc,EAAE,MAAM;IAClD,eAAe,GAAG,KAAK;IACvB,kBAAkB,CAAC,CAAC;EACtB,CAAC,CAAC;EACF,YAAY,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM;IAC7C,aAAa,GAAG,IAAI;IACpB,iBAAiB,CAAC,CAAC;EACrB,CAAC,CAAC;EACF,YAAY,CAAC,gBAAgB,CAAC,UAAU,EAAG,KAAK,IAAK;IACnD,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,aAA4B,CAAC,EAAE;IAC/D,aAAa,GAAG,KAAK;IACrB,kBAAkB,CAAC,CAAC;EACtB,CAAC,CAAC;EAEF,MAAM,MAAmB,GAAG;IAAE,OAAO;IAAE;EAAO,CAAC;EAC/C,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC;EACtB,IAAI,UAAU,CAAC,IAAI,GAAG,kBAAkB,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;EACrF,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC;EAC7D,qBAAqB,CAAC,MAAM;IAC1B,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,GAAG,MAAM;EACpD,CAAC,CAAC;EACF,iBAAiB,CAAC,eAAe,CAAC;EAClC,OAAO,MAAM;AACf,CAAC;AAED,OAAO,MAAM,kBAAkB,GAAG,CAAC,CAAS,EAAE,CAAS,KAAc;EACnE,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE,OAAO,KAAK;EACjD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAc,IAAI,mBAAmB,GAAG,CAAC,CAAC;EACjG,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;IAClC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE;MAClD,MAAM,IAAI,GAAG,KAAK,CAAC,qBAAqB,CAAC,CAAC;MAC1C,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI;IACzF;EACF;EACA,OAAO,KAAK;AACd,CAAC;AAED,MAAM,OAAO,GAAI,CAAC,WAAmB,EAAE,OAAsB,KAAK,SAAS,CAAC,WAAW,EAAE,OAAO,CAAa;AAC7G,OAAO,CAAC,OAAO,GAAG,CAAC,WAAW,EAAE,OAAO,KAAK,SAAS,CAAC,WAAW,EAAE;EAAE,GAAG,OAAO;EAAE,OAAO,EAAE;AAAU,CAAC,CAAC;AACtG,OAAO,CAAC,KAAK,GAAG,CAAC,WAAW,EAAE,OAAO,KAAK,SAAS,CAAC,WAAW,EAAE;EAAE,GAAG,OAAO;EAAE,OAAO,EAAE;AAAQ,CAAC,CAAC;AAClG,OAAO,CAAC,UAAU,GAAG,MAAM;EACzB,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AAC/D,CAAC;AAED,OAAO,MAAM,KAAc,GAAG,OAAO","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["feedback/toast.ts"],"sourcesContent":["import { getK2bPortalRoot } from \"../internal/portal\";\nimport { resolveUiMessages } from \"../intl/messages\";\n\nexport type ToastVariant = \"default\" | \"success\" | \"error\";\n\nexport type ToastAction = {\n label: string;\n} & ({ href: string } | { onClick: () => void });\n\nexport type ToastOptions = {\n variant?: ToastVariant;\n /** Milliseconds until the toast closes; `0` keeps it until it is closed. Omit it for the default by variant, length, and action. */\n duration?: number;\n iconClass?: string;\n /** A short line of context above the message. There is no default title. */\n title?: string;\n action?: ToastAction | null;\n /** Fraction from 0 to 1, or an indeterminate activity indicator. null removes it. */\n progress?: number | \"indeterminate\" | null;\n dismissLabel?: string;\n};\n\nexport type ToastHandle = {\n dismiss: () => void;\n update: (description: string, options?: ToastOptions) => void;\n};\n\nexport type ToastSlot = {\n dismiss: () => void;\n};\n\nexport interface ToastFn {\n (description: string, options?: ToastOptions): ToastHandle;\n success: (description: string, options?: Omit<ToastOptions, \"variant\">) => ToastHandle;\n error: (description: string, options?: Omit<ToastOptions, \"variant\">) => ToastHandle;\n /** Places an application-owned element in the toast rail, in toast chrome; the caller owns its content and lifetime. */\n custom: (content: HTMLElement) => ToastSlot;\n dismissAll: () => void;\n}\n\n/** Visible toasts on a wide viewport; the rail's narrow layout shows fewer. */\nconst MAX_VISIBLE_TOASTS = 3;\nconst MAX_VISIBLE_TOASTS_NARROW = 2;\n/** The same media query that moves the rail to the top edge in the stylesheet. */\nconst NARROW_RAIL_QUERY = \"(max-width: 47.999rem), (max-height: 29.999rem)\";\nconst ANIMATION_MS = 200;\n/** Reading time: a short message stays 4 s, longer text about 1 s more per 30 characters, up to 12 s. */\nconst READ_BASE_MS = 4_000;\nconst READ_FREE_CHARACTERS = 40;\nconst READ_MS_PER_CHARACTER = 35;\nconst READ_MAX_MS = 12_000;\n/** Errors and toasts with an action stay long enough to reach them with a keyboard or a screen magnifier. */\nconst REACHABLE_MS = 8_000;\n/** An error longer than this stays until it is closed, so it can be read and copied. */\nconst STICKY_ERROR_CHARACTERS = 120;\n/** A live region needs a moment between being found and being written to. */\nconst ANNOUNCE_DELAY_MS = 100;\nconst ANNOUNCEMENT_LIFETIME_MS = 7_000;\nexport const K2B_TOAST_CONTAINER_ID = \"k2b-ui-toast-container\";\nconst CONTAINER_ATTRIBUTE = \"data-k2b-toast-container\";\nconst LIVE_ATTRIBUTE = \"data-k2b-toast-live\";\n\ntype VariantStyle = {\n tone: \"info\" | \"success\" | \"danger\";\n iconClass: string;\n};\n\nconst VARIANT_STYLES: Record<ToastVariant, VariantStyle> = {\n default: { tone: \"info\", iconClass: \"ti-info-circle\" },\n success: { tone: \"success\", iconClass: \"ti-circle-check\" },\n error: { tone: \"danger\", iconClass: \"ti-alert-circle\" },\n};\n\n/** How long a toast stays when the caller passes no duration. */\nconst defaultDuration = (variant: ToastVariant, text: string, hasAction: boolean): number => {\n if (variant === \"error\" && text.length > STICKY_ERROR_CHARACTERS) return 0;\n const reading = Math.min(READ_MAX_MS, READ_BASE_MS + Math.max(0, text.length - READ_FREE_CHARACTERS) * READ_MS_PER_CHARACTER);\n return variant === \"error\" || hasAction ? Math.max(REACHABLE_MS, reading) : reading;\n};\n\nconst normalizedIconClass = (iconClass: string): string => {\n const tokens = iconClass\n .split(/\\s+/)\n .filter(Boolean)\n .filter((token) => token !== \"ti\");\n return [\"ti\", ...tokens].join(\" \");\n};\n\nconst applyIconClass = (icon: HTMLElement, iconClass: string): void => {\n icon.className = normalizedIconClass(iconClass);\n};\n\ntype LiveToast = {\n dismiss: () => void;\n /** Errors, sticky toasts, and running progress stay when the rail is full; older timed confirmations leave first. */\n keep: () => boolean;\n progress: () => boolean;\n /** Under the pointer or holding keyboard focus: the rail limit never removes it. */\n held: () => boolean;\n pause: () => void;\n resume: () => void;\n};\n\nconst liveToasts = new Set<LiveToast>();\n\n/**\n * Cards under the pointer or holding keyboard focus. While the rail holds any, no toast times out, so nothing moves\n * under the pointer or out from under focus because a neighbour expired.\n */\nconst pointerHolds = new Set<HTMLElement>();\nconst focusHolds = new Set<HTMLElement>();\nconst railHeld = (): boolean => pointerHolds.size + focusHolds.size > 0;\n\n/**\n * Firefox and WebKit fire no focusout when a focused element leaves the document, and WebKit no pointerleave when\n * the hovered element inside a card is removed, as when custom content replaces a button or the rail's scope\n * unmounts. While anything holds the rail, a change to the document or the pointer moving onto something else\n * drops the holds that no longer apply, so one stale hold never freezes the rail.\n */\nconst releaseStaleHolds = (pointerTarget?: Node | null): void => {\n for (const card of Array.from(pointerHolds))\n if (!card.isConnected || (pointerTarget !== undefined && !card.contains(pointerTarget))) setHold(pointerHolds, card, false);\n for (const card of Array.from(focusHolds))\n if (!card.isConnected || !card.contains(card.ownerDocument.activeElement)) setHold(focusHolds, card, false);\n};\n\nconst watchStaleHolds = (doc: Document): (() => void) => {\n const observer = new MutationObserver(() => releaseStaleHolds());\n observer.observe(doc, { childList: true, subtree: true });\n const onPointerOver = (event: Event) => releaseStaleHolds(event.target instanceof Node ? event.target : null);\n doc.addEventListener(\"pointerover\", onPointerOver, true);\n return () => {\n observer.disconnect();\n doc.removeEventListener(\"pointerover\", onPointerOver, true);\n };\n};\nlet unwatchStaleHolds: (() => void) | null = null;\n\nfunction setHold(holds: Set<HTMLElement>, card: HTMLElement, held: boolean): void {\n const wasHeld = railHeld();\n if (held) holds.add(card);\n else holds.delete(card);\n if (railHeld() !== wasHeld) {\n for (const item of Array.from(liveToasts)) (wasHeld ? item.resume : item.pause)();\n unwatchStaleHolds?.();\n unwatchStaleHolds = wasHeld ? null : watchStaleHolds(card.ownerDocument);\n }\n // A released card may be the one the rail limit had to wait for.\n if (!held) enforceCap();\n}\n\nconst VISUALLY_HIDDEN =\n \"position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;\";\n\n/**\n * Two persistent, empty live regions beside the rail: polite for every toast, assertive for errors. A region that\n * already exists when its text arrives is announced reliably, unlike one inserted with its text already inside.\n * They sit outside the rail because the rail moves into a fresh top-layer element for every toast.\n */\nconst ensureLiveRegions = (root: HTMLElement): HTMLElement => {\n const existing = Array.from(root.children).find((child) => child.hasAttribute(LIVE_ATTRIBUTE));\n if (existing instanceof HTMLElement) return existing;\n const live = document.createElement(\"div\");\n live.setAttribute(LIVE_ATTRIBUTE, \"\");\n live.style.cssText = VISUALLY_HIDDEN;\n for (const assertive of [false, true]) {\n const region = document.createElement(\"div\");\n region.setAttribute(\"role\", assertive ? \"alert\" : \"status\");\n region.setAttribute(\"aria-live\", assertive ? \"assertive\" : \"polite\");\n // Both roles are atomic by default, which would read every line still in the region again with each new one.\n region.setAttribute(\"aria-atomic\", \"false\");\n region.dataset.politeness = assertive ? \"assertive\" : \"polite\";\n live.appendChild(region);\n }\n root.appendChild(live);\n return live;\n};\n\n/** Each announcement is its own line, so a burst of toasts or a repeated message is still read. */\nconst announce = (root: HTMLElement | null, text: string, assertive: boolean): void => {\n if (!root || !text) return;\n const region = ensureLiveRegions(root).querySelector<HTMLElement>(`[data-politeness=\"${assertive ? \"assertive\" : \"polite\"}\"]`);\n if (!region) return;\n const line = document.createElement(\"div\");\n line.textContent = text;\n setTimeout(() => {\n region.appendChild(line);\n setTimeout(() => line.remove(), ANNOUNCEMENT_LIFETIME_MS);\n }, ANNOUNCE_DELAY_MS);\n};\n\nconst ensureContainer = (): HTMLElement | null => {\n if (typeof document === \"undefined\") return null;\n const root = getK2bPortalRoot();\n ensureLiveRegions(root);\n let container = root.querySelector<HTMLElement>(`[${CONTAINER_ATTRIBUTE}]`);\n if (container) return container;\n\n container = document.createElement(\"div\");\n container.id = K2B_TOAST_CONTAINER_ID;\n container.setAttribute(CONTAINER_ATTRIBUTE, \"\");\n container.setAttribute(\"popover\", \"manual\");\n container.setAttribute(\"role\", \"region\");\n container.setAttribute(\"aria-label\", resolveUiMessages().notifications);\n // Keep the source rail geometry inline: it must defeat UA popover defaults\n // even when a consumer has not loaded the optional package stylesheet yet.\n // The stylesheet only moves the rail to the top edge, and to the full width\n // of a phone, through the rail variables.\n container.style.cssText =\n \"position:fixed;left:var(--k2b-toast-rail-left,auto);right:env(safe-area-inset-right,0px);\" +\n \"top:var(--k2b-toast-rail-top,auto);bottom:var(--k2b-toast-rail-bottom,env(safe-area-inset-bottom,0px));\" +\n \"z-index:50;box-sizing:border-box;display:flex;flex-direction:var(--k2b-toast-rail-direction,column);\" +\n \"width:var(--k2b-toast-rail-width,min(24rem,calc(100vw - env(safe-area-inset-left,0px) - env(safe-area-inset-right,0px))));\" +\n \"height:auto;max-width:100vw;\" +\n \"max-height:calc(100dvh - env(safe-area-inset-top,0px) - var(--k2b-toast-offset-top,0px) - env(safe-area-inset-bottom,0px));\" +\n \"margin:0;padding:var(--k2b-toast-rail-padding,0.75rem 1rem);border:0;background:transparent;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;\" +\n \"pointer-events:none;\";\n root.appendChild(container);\n return container;\n};\n\n/** Moving nodes resets their scroll offsets and drops focus; a custom slot can hold a scrolled list or a focused control. */\nconst captureViewState = (container: HTMLElement) => {\n const focused =\n document.activeElement instanceof HTMLElement && container.contains(document.activeElement) ? document.activeElement : null;\n const scrolled = Array.from(container.querySelectorAll<HTMLElement>(\"*\"))\n .filter((element) => element.scrollTop || element.scrollLeft)\n .map((element) => [element, element.scrollTop, element.scrollLeft] as const);\n const railTop = container.scrollTop;\n return (rail: HTMLElement) => {\n rail.scrollTop = railTop;\n for (const [element, top, left] of scrolled) {\n element.scrollTop = top;\n element.scrollLeft = left;\n }\n if (focused?.isConnected && rail.contains(focused)) focused.focus({ preventScroll: true });\n };\n};\n\nconst promoteToTopLayer = (container: HTMLElement): HTMLElement => {\n if (typeof container.showPopover !== \"function\" || !container.isConnected) return container;\n let active = container;\n let restore: ((rail: HTMLElement) => void) | null = null;\n try {\n if (container.matches(\":popover-open\") || document.querySelector(\"dialog:modal\")) {\n restore = captureViewState(container);\n const next = container.cloneNode(false) as HTMLElement;\n while (container.firstChild) next.appendChild(container.firstChild);\n const root = container.parentElement ?? getK2bPortalRoot();\n container.remove();\n root.appendChild(next);\n active = next;\n }\n if (!active.matches(\":popover-open\")) active.showPopover();\n } catch {\n active.removeAttribute(\"popover\");\n }\n // Offsets apply only once the rail is rendered again, so after it is shown.\n restore?.(active);\n return active;\n};\n\n/** Close every empty rail so an emptied container does not linger in the top\n * layer. Rails are resolved at call time on purpose: `promoteToTopLayer`\n * swaps the element for a fresh clone, so a container captured when the toast\n * was created can already be detached by the time the toast is dismissed. */\nconst hideEmptyContainers = (): void => {\n if (typeof document === \"undefined\") return;\n for (const container of Array.from(document.querySelectorAll<HTMLElement>(`[${CONTAINER_ATTRIBUTE}]`))) {\n if (container.childElementCount > 0 || typeof container.hidePopover !== \"function\") continue;\n try {\n if (container.matches(\":popover-open\")) container.hidePopover();\n } catch {\n // Already hidden or disconnected.\n }\n }\n};\n\n/**\n * Every toast and custom slot sits in a slot that grows from and collapses to zero height, so its neighbours glide\n * instead of jumping when it arrives or leaves. The card carries the chrome and `data-open` / `data-closing`.\n */\ntype RailItem = {\n slot: HTMLElement;\n open: () => void;\n close: (onRemoved?: () => void) => void;\n};\n\nconst railItem = (card: HTMLElement): RailItem => {\n card.addEventListener(\"pointerenter\", () => setHold(pointerHolds, card, true));\n card.addEventListener(\"pointerleave\", () => setHold(pointerHolds, card, false));\n card.addEventListener(\"focusin\", () => setHold(focusHolds, card, true));\n card.addEventListener(\"focusout\", (event) => {\n if (!card.contains(event.relatedTarget as Node | null)) setHold(focusHolds, card, false);\n });\n const slot = document.createElement(\"div\");\n slot.className = \"k2b-toast-slot\";\n slot.dataset.state = \"entering\";\n const clip = document.createElement(\"div\");\n clip.className = \"k2b-toast-slot__clip\";\n clip.appendChild(card);\n slot.appendChild(clip);\n return {\n slot,\n open: () => {\n // The entering state must be laid out once before it changes, or nothing transitions.\n slot.getBoundingClientRect();\n requestAnimationFrame(() => {\n if (card.dataset.closing) return;\n slot.dataset.state = \"open\";\n card.dataset.open = \"true\";\n });\n },\n close: (onRemoved) => {\n slot.dataset.state = \"closing\";\n card.dataset.closing = \"true\";\n // A card that leaves under the pointer or with focus no longer holds the rail.\n if (pointerHolds.has(card)) setHold(pointerHolds, card, false);\n if (focusHolds.has(card)) setHold(focusHolds, card, false);\n setTimeout(() => {\n slot.remove();\n hideEmptyContainers();\n onRemoved?.();\n }, ANIMATION_MS);\n },\n };\n};\n\n/**\n * The rail is full: older timed confirmations leave first, then older errors and sticky toasts. Running progress, the\n * newest toast, and a toast under the pointer or with focus stay; the rail waits until they are released.\n */\nfunction enforceCap(): void {\n const narrow = typeof matchMedia === \"function\" && matchMedia(NARROW_RAIL_QUERY).matches;\n const cap = narrow ? MAX_VISIBLE_TOASTS_NARROW : MAX_VISIBLE_TOASTS;\n while (liveToasts.size > cap) {\n const older = Array.from(liveToasts)\n .slice(0, -1)\n .filter((item) => !item.held());\n const victim = older.find((item) => !item.keep()) ?? older.find((item) => !item.progress());\n if (!victim) return;\n victim.dismiss();\n }\n}\n\nconst showToast = (description: string, options?: ToastOptions): ToastHandle => {\n const initialContainer = ensureContainer();\n if (!initialContainer) {\n const noop = () => {};\n return { dismiss: noop, update: noop };\n }\n const messages = resolveUiMessages();\n const doc = initialContainer.ownerDocument;\n // Focus returns here when a focused toast closes and no other toast can take it.\n const opener =\n doc.activeElement instanceof HTMLElement && !doc.activeElement.closest(`[${CONTAINER_ATTRIBUTE}]`) ? doc.activeElement : null;\n\n let dismissed = false;\n let dismissTimer: ReturnType<typeof setTimeout> | null = null;\n let currentVariant: ToastVariant = options?.variant ?? \"default\";\n let currentProgress = options?.progress ?? null;\n let currentAction = options?.action ?? null;\n let explicitDuration = options?.duration;\n let remainingDuration = 0;\n let timerStartedAt = 0;\n let lastAnnouncement = \"\";\n\n const toastElement = doc.createElement(\"div\");\n toastElement.className = \"k2b-toast\";\n toastElement.dataset.tone = VARIANT_STYLES[currentVariant].tone;\n toastElement.dataset.k2bToast = \"\";\n\n const leadElement = doc.createElement(\"div\");\n leadElement.className = \"k2b-toast__icon\";\n leadElement.setAttribute(\"aria-hidden\", \"true\");\n const leadIconElement = doc.createElement(\"i\");\n leadElement.appendChild(leadIconElement);\n const renderLead = (iconClassOverride?: string) => {\n leadElement.dataset.tone = VARIANT_STYLES[currentVariant].tone;\n applyIconClass(leadIconElement, iconClassOverride ?? VARIANT_STYLES[currentVariant].iconClass);\n };\n renderLead(options?.iconClass);\n\n const contentElement = doc.createElement(\"div\");\n contentElement.className = \"k2b-toast__content\";\n const titleElement = doc.createElement(\"div\");\n titleElement.className = \"k2b-toast__title\";\n const renderTitle = (title: string | undefined) => {\n titleElement.textContent = title ?? \"\";\n titleElement.hidden = !title;\n };\n renderTitle(options?.title);\n const descriptionElement = doc.createElement(\"div\");\n descriptionElement.className = \"k2b-toast__description\";\n descriptionElement.textContent = description;\n contentElement.append(titleElement, descriptionElement);\n\n const closeButton = doc.createElement(\"button\");\n closeButton.type = \"button\";\n closeButton.className = \"k2b-toast__close\";\n closeButton.setAttribute(\"aria-label\", options?.dismissLabel ?? messages.dismissNotification);\n const closeIcon = doc.createElement(\"i\");\n closeIcon.className = \"ti ti-x\";\n closeIcon.setAttribute(\"aria-hidden\", \"true\");\n closeButton.appendChild(closeIcon);\n\n // Inside the content, so a titled progress toast can place the bar between its title and its summary line.\n const progressElement = doc.createElement(\"progress\");\n progressElement.className = \"k2b-toast__progress\";\n progressElement.max = 1;\n contentElement.appendChild(progressElement);\n\n toastElement.append(leadElement, contentElement, closeButton);\n const item = railItem(toastElement);\n\n const text = () => [titleElement.textContent, descriptionElement.textContent].filter(Boolean).join(\". \");\n const effectiveDuration = () => explicitDuration ?? defaultDuration(currentVariant, text(), currentAction !== null);\n /** The error word is read before the message; the action is left out. */\n const spoken = () => (currentVariant === \"error\" ? `${resolveUiMessages().error}: ${text()}` : text());\n const say = () => {\n lastAnnouncement = spoken();\n announce(item.slot.parentElement?.parentElement ?? null, lastAnnouncement, currentVariant === \"error\");\n };\n\n const clearDismissTimer = () => {\n if (dismissTimer === null) return;\n clearTimeout(dismissTimer);\n dismissTimer = null;\n };\n\n const pauseDismissTimer = () => {\n if (dismissTimer === null) return;\n remainingDuration = Math.max(0, remainingDuration - (Date.now() - timerStartedAt));\n clearDismissTimer();\n };\n\n const resumeDismissTimer = () => {\n if (dismissed || currentProgress !== null || remainingDuration <= 0 || railHeld() || doc.hidden) return;\n clearDismissTimer();\n timerStartedAt = Date.now();\n dismissTimer = setTimeout(() => dismiss(), remainingDuration);\n };\n\n const resetDismissTimer = () => {\n clearDismissTimer();\n remainingDuration = effectiveDuration();\n resumeDismissTimer();\n };\n\n const onVisibilityChange = () => (doc.hidden ? pauseDismissTimer() : resumeDismissTimer());\n\n /** The close button of the nearest open toast in one direction, past neighbours that are still closing. */\n const nearestOpenClose = (step: (slot: Element) => Element | null): HTMLElement | null => {\n for (let slot = step(item.slot); slot; slot = step(slot)) {\n const button = slot.querySelector<HTMLElement>(\".k2b-toast:not([data-closing]) .k2b-toast__close\");\n if (button) return button;\n }\n return null;\n };\n\n /** A focused toast hands focus to its neighbour, or back to where the user was, instead of dropping it on the page. */\n const moveFocusAway = () => {\n if (!toastElement.contains(doc.activeElement)) return;\n const next = nearestOpenClose((slot) => slot.nextElementSibling) ?? nearestOpenClose((slot) => slot.previousElementSibling);\n const target = next ?? (opener?.isConnected ? opener : null);\n if (target) target.focus({ preventScroll: true });\n else (doc.activeElement as HTMLElement | null)?.blur();\n };\n\n const dismiss = () => {\n if (dismissed) return;\n dismissed = true;\n clearDismissTimer();\n liveToasts.delete(live);\n doc.removeEventListener(\"visibilitychange\", onVisibilityChange);\n moveFocusAway();\n item.close();\n };\n\n const renderProgress = () => {\n progressElement.hidden = currentProgress === null;\n toastElement.dataset.progress = String(currentProgress !== null);\n const title = titleElement.textContent;\n const summary = descriptionElement.textContent ?? \"\";\n progressElement.setAttribute(\"aria-label\", title || summary);\n // With a title, the message is the summary line under the bar (\"6 of 12 files\"), read instead of a bare percentage.\n if (typeof currentProgress === \"number\" && title && summary) progressElement.setAttribute(\"aria-valuetext\", summary);\n else progressElement.removeAttribute(\"aria-valuetext\");\n if (typeof currentProgress === \"number\")\n progressElement.value = Number.isFinite(currentProgress) ? Math.max(0, Math.min(1, currentProgress)) : 0;\n else progressElement.removeAttribute(\"value\");\n };\n renderProgress();\n\n let actionElement: HTMLAnchorElement | HTMLButtonElement | null = null;\n const createAction = (action: ToastAction): HTMLAnchorElement | HTMLButtonElement => {\n let element: HTMLAnchorElement | HTMLButtonElement;\n if (\"href\" in action) {\n element = doc.createElement(\"a\");\n element.href = action.href;\n } else {\n element = doc.createElement(\"button\");\n element.type = \"button\";\n }\n element.className = \"k2b-toast__action\";\n element.textContent = action.label;\n element.addEventListener(\"click\", () => {\n if (\"onClick\" in action) action.onClick();\n else dismiss();\n });\n return element;\n };\n const renderAction = (action: ToastAction | null | undefined) => {\n const previous = actionElement;\n currentAction = action ?? null;\n actionElement = action ? createAction(action) : null;\n if (actionElement) contentElement.appendChild(actionElement);\n // The keyboard stays in the toast, on the new action or the close button, instead of falling to the page.\n if (previous?.contains(doc.activeElement)) (actionElement ?? closeButton).focus({ preventScroll: true });\n previous?.remove();\n };\n renderAction(options?.action);\n\n const update = (nextDescription: string, nextOptions?: ToastOptions) => {\n if (dismissed) return;\n const has = (key: keyof ToastOptions) => nextOptions !== undefined && Object.prototype.hasOwnProperty.call(nextOptions, key);\n const previousProgress = currentProgress;\n descriptionElement.textContent = nextDescription;\n\n const variantChanged = nextOptions?.variant !== undefined && nextOptions.variant !== currentVariant;\n if (variantChanged) {\n currentVariant = nextOptions.variant!;\n toastElement.dataset.tone = VARIANT_STYLES[currentVariant].tone;\n renderLead(nextOptions.iconClass);\n } else if (nextOptions?.iconClass !== undefined) {\n applyIconClass(leadIconElement, nextOptions.iconClass);\n }\n\n if (has(\"title\")) renderTitle(nextOptions!.title);\n if (has(\"action\")) renderAction(nextOptions!.action);\n if (has(\"duration\")) explicitDuration = nextOptions!.duration;\n if (has(\"progress\")) currentProgress = nextOptions!.progress ?? null;\n if (nextOptions?.dismissLabel) closeButton.setAttribute(\"aria-label\", nextOptions.dismissLabel);\n renderProgress();\n resetDismissTimer();\n\n // Progress is announced at its start, half way, and its end, never at every step, and only with something new to say.\n // The comparison includes the error word, so a change to an error with the same text is still announced.\n const ticking = previousProgress !== null && currentProgress !== null;\n const halfway =\n typeof currentProgress === \"number\" && currentProgress >= 0.5 && !(typeof previousProgress === \"number\" && previousProgress >= 0.5);\n if ((!ticking || halfway || variantChanged) && spoken() !== lastAnnouncement) say();\n // Finished progress or a new duration can make this toast one the rail limit removes.\n enforceCap();\n };\n\n closeButton.addEventListener(\"click\", () => dismiss());\n toastElement.addEventListener(\"keydown\", (event) => {\n if (event.key !== \"Escape\" || event.defaultPrevented) return;\n event.preventDefault();\n event.stopPropagation();\n dismiss();\n });\n doc.addEventListener(\"visibilitychange\", onVisibilityChange);\n\n const handle: ToastHandle = { dismiss, update };\n const live: LiveToast = {\n dismiss,\n keep: () => currentVariant === \"error\" || currentProgress !== null || effectiveDuration() === 0,\n progress: () => currentProgress !== null,\n held: () => pointerHolds.has(toastElement) || focusHolds.has(toastElement),\n pause: pauseDismissTimer,\n resume: resumeDismissTimer,\n };\n liveToasts.add(live);\n promoteToTopLayer(initialContainer).appendChild(item.slot);\n item.open();\n say();\n enforceCap();\n resetDismissTimer();\n return handle;\n};\n\n/*\n * A custom slot shares the rail, chrome, and enter/leave motion with toasts, so it stacks beside them in the same\n * corner instead of covering them. It has no timer, close button, or live region of its own, and neither the\n * toast limit nor `dismissAll` removes it: the application that placed it decides when it goes.\n */\nconst showCustom = (content: HTMLElement): ToastSlot => {\n const initialContainer = ensureContainer();\n if (!initialContainer) return { dismiss: () => {} };\n let dismissed = false;\n const slotElement = document.createElement(\"div\");\n slotElement.className = \"k2b-toast\";\n slotElement.dataset.k2bToast = \"\";\n slotElement.dataset.custom = \"true\";\n slotElement.append(content);\n const item = railItem(slotElement);\n const dismiss = () => {\n if (dismissed) return;\n dismissed = true;\n item.close();\n };\n promoteToTopLayer(initialContainer).appendChild(item.slot);\n item.open();\n return { dismiss };\n};\n\nexport const isPointInsideToast = (x: number, y: number): boolean => {\n if (typeof document === \"undefined\") return false;\n for (const card of Array.from(document.querySelectorAll<HTMLElement>(`[${CONTAINER_ATTRIBUTE}] [data-k2b-toast]`))) {\n const rect = card.getBoundingClientRect();\n if (x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom) return true;\n }\n return false;\n};\n\nconst toastFn = ((description: string, options?: ToastOptions) => showToast(description, options)) as ToastFn;\ntoastFn.success = (description, options) => showToast(description, { ...options, variant: \"success\" });\ntoastFn.error = (description, options) => showToast(description, { ...options, variant: \"error\" });\ntoastFn.custom = showCustom;\ntoastFn.dismissAll = () => {\n for (const item of Array.from(liveToasts)) item.dismiss();\n};\n\nexport const toast: ToastFn = toastFn;\n"],"mappings":"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","ignoreList":[]}
@@ -6,32 +6,33 @@ import { ssr as _$ssr } from "solid-js/web";
6
6
  import { ssrAttribute as _$ssrAttribute } from "solid-js/web";
7
7
  import { escape as _$escape } from "solid-js/web";
8
8
  var _tmpl$ = ["<i class=\"", "\" aria-hidden=\"true\"></i>"],
9
- _tmpl$2 = ["<span class=\"k2b-date-trigger__value\">", "</span>"],
9
+ _tmpl$2 = ["<span id=\"", "\" class=\"k2b-date-trigger__value\">", "</span>"],
10
10
  _tmpl$3 = "<i class=\"ti ti-chevron-down k2b-date-trigger__chevron\" aria-hidden=\"true\"></i>",
11
11
  _tmpl$4 = ["<button type=\"button\" class=\"k2b-date-trigger__clear k2b-input-clear-action\"", "><i class=\"ti ti-x\" aria-hidden=\"true\"></i></button>"],
12
- _tmpl$5 = ["<span class=\"k2b-date-popover__timezone\"><i class=\"ti ti-world\" aria-hidden=\"true\"></i>", "</span>"],
13
- _tmpl$6 = ["<footer class=\"k2b-date-popover__footer\"><span>", "</span>", "</footer>"],
14
- _tmpl$7 = ["<div class=\"k2b-date-picker\"", ">", "", "<div id=\"", "\" class=\"k2b-date-popover\" popover=\"auto\" role=\"dialog\"", ">", "", "</div></div>"],
15
- _tmpl$8 = ["<aside class=\"k2b-date-presets\"", ">", "</aside>"],
16
- _tmpl$9 = ["<button type=\"button\">", "</button>"],
17
- _tmpl$0 = ["<div class=\"k2b-date-weekdays\" aria-hidden=\"true\">", "</div>"],
18
- _tmpl$1 = ["<div class=\"k2b-date-grid\" role=\"grid\">", "</div>"],
19
- _tmpl$10 = ["<section class=\"k2b-date-calendar\"", "><header class=\"k2b-date-calendar__header\"><button type=\"button\" class=\"k2b-date-calendar__nav\"", "><i class=\"ti ti-chevron-left\" aria-hidden=\"true\"></i></button><button type=\"button\" class=\"k2b-date-calendar__title\">", "</button><button type=\"button\" class=\"k2b-date-calendar__nav\"", "><i class=\"ti ti-chevron-right\" aria-hidden=\"true\"></i></button></header>", "</section>"],
20
- _tmpl$11 = ["<div class=\"k2b-date-months\" role=\"group\" aria-label=\"", "\">", "</div>"],
21
- _tmpl$12 = ["<button type=\"button\"", ">", "</button>"],
22
- _tmpl$13 = ["<span>", "</span>"],
23
- _tmpl$14 = ["<div class=\"k2b-date-week\" role=\"row\">", "</div>"],
24
- _tmpl$15 = ["<button type=\"button\" role=\"gridcell\"", ">", "</button>"],
25
- _tmpl$16 = ["<label class=\"k2b-date-time\">", "<span class=\"k2b-date-time__control\"><input type=\"text\" inputmode=\"numeric\"", " placeholder=\"09:00\"", "><i class=\"ti ti-clock\" aria-hidden=\"true\"></i></span></label>"],
26
- _tmpl$17 = ["<div class=\"k2b-date-popover__body\">", "", "</div>"],
27
- _tmpl$18 = ["<div class=\"k2b-date-actions\">", "<button type=\"button\" class=\"k2b-date-apply\"", ">Apply</button></div>"],
28
- _tmpl$19 = ["<span class=\"k2b-date-range-value\"><span>", "</span><i class=\"ti ti-arrow-narrow-right\" aria-hidden=\"true\"></i><span>", "</span></span>"],
29
- _tmpl$20 = ["<span class=\"k2b-date-duration\"><i class=\"ti ti-hourglass-low\" aria-hidden=\"true\"></i>", "</span>"],
30
- _tmpl$21 = ["<div class=\"k2b-date-range-times\">", "", "</div>"],
31
- _tmpl$22 = ["<div class=\"k2b-date-durations\" role=\"group\"", ">", "</div>"];
12
+ _tmpl$5 = ["<button type=\"button\" class=\"k2b-date-popover__clear\"><i class=\"ti ti-x\" aria-hidden=\"true\"></i>", "</button>"],
13
+ _tmpl$6 = ["<span class=\"k2b-date-popover__timezone\"><i class=\"ti ti-world\" aria-hidden=\"true\"></i>", "</span>"],
14
+ _tmpl$7 = ["<footer class=\"k2b-date-popover__footer\"><span>", "</span>", "", "</footer>"],
15
+ _tmpl$8 = ["<div class=\"k2b-date-picker\"", ">", "", "<div id=\"", "\" class=\"k2b-date-popover\" popover=\"auto\" role=\"dialog\"", ">", "", "</div></div>"],
16
+ _tmpl$9 = ["<aside class=\"k2b-date-presets\"", ">", "</aside>"],
17
+ _tmpl$0 = ["<button type=\"button\">", "</button>"],
18
+ _tmpl$1 = ["<div class=\"k2b-date-weekdays\" aria-hidden=\"true\">", "</div>"],
19
+ _tmpl$10 = ["<div class=\"k2b-date-grid\" role=\"grid\">", "</div>"],
20
+ _tmpl$11 = ["<section class=\"k2b-date-calendar\"", "><header class=\"k2b-date-calendar__header\"><button type=\"button\" class=\"k2b-date-calendar__nav\"", "><i class=\"ti ti-chevron-left\" aria-hidden=\"true\"></i></button><button type=\"button\" class=\"k2b-date-calendar__title\">", "</button><button type=\"button\" class=\"k2b-date-calendar__nav\"", "><i class=\"ti ti-chevron-right\" aria-hidden=\"true\"></i></button></header>", "</section>"],
21
+ _tmpl$12 = ["<div class=\"k2b-date-months\" role=\"group\" aria-label=\"", "\">", "</div>"],
22
+ _tmpl$13 = ["<button type=\"button\"", ">", "</button>"],
23
+ _tmpl$14 = ["<span>", "</span>"],
24
+ _tmpl$15 = ["<div class=\"k2b-date-week\" role=\"row\">", "</div>"],
25
+ _tmpl$16 = ["<button type=\"button\" role=\"gridcell\"", ">", "</button>"],
26
+ _tmpl$17 = ["<label class=\"k2b-date-time\">", "<span class=\"k2b-date-time__control\"><input type=\"text\" inputmode=\"numeric\"", " placeholder=\"09:00\"", "><i class=\"ti ti-clock\" aria-hidden=\"true\"></i></span></label>"],
27
+ _tmpl$18 = ["<div class=\"k2b-date-popover__body\">", "", "</div>"],
28
+ _tmpl$19 = ["<div class=\"k2b-date-actions\">", "<button type=\"button\" class=\"k2b-date-apply\"", ">", "</button></div>"],
29
+ _tmpl$20 = ["<span class=\"k2b-date-range-value\"><span>", "</span><i class=\"ti ti-arrow-narrow-right\" aria-hidden=\"true\"></i><span>", "</span></span>"],
30
+ _tmpl$21 = ["<span class=\"k2b-date-duration\"><i class=\"ti ti-hourglass-low\" aria-hidden=\"true\"></i>", "</span>"],
31
+ _tmpl$22 = ["<div class=\"k2b-date-range-times\">", "", "</div>"],
32
+ _tmpl$23 = ["<div class=\"k2b-date-durations\" role=\"group\"", ">", "</div>"];
32
33
  import { dates } from "@k2b/stdlib";
33
34
  import { createEffect, createMemo, createSignal, For, onCleanup, onMount, Show } from "solid-js";
34
- import { createFieldMeta, Field, fieldControlAria } from "../internal/field";
35
+ import { createFieldMeta, Field, fieldControlAria, fieldDescribedBy } from "../internal/field";
35
36
  import { returnFocus, ringOnReturn } from "../internal/focus-return";
36
37
  import { useDateConfigLocale } from "../intl/locale";
37
38
  import { useUiMessages } from "../intl/messages";
@@ -93,6 +94,13 @@ function PickerShell(props) {
93
94
  });
94
95
  };
95
96
  const toggle = () => open() ? close() : show();
97
+ const plain = () => props.owner.appearance === "plain";
98
+ const canClear = () => Boolean(props.owner.clearable && props.valueLabel() && !props.owner.disabled);
99
+ const clear = () => {
100
+ close();
101
+ commitFieldValue(props.owner, props.clearValue);
102
+ trigger?.focus();
103
+ };
96
104
  onMount(() => {
97
105
  const syncOpenState = () => setOpen(popoverIsOpen(popover));
98
106
  popover?.addEventListener("toggle", syncOpenState);
@@ -129,7 +137,7 @@ function PickerShell(props) {
129
137
  },
130
138
  meta: meta,
131
139
  get children() {
132
- return _$ssr(_tmpl$7, _$ssrAttribute("data-invalid", error() ? "true" : _$escape(undefined, true), false), _$ssrElement("button", _$mergeProps({
140
+ return _$ssr(_tmpl$8, _$ssrAttribute("data-appearance", _$escape(props.owner.appearance ?? "field", true), false) + _$ssrAttribute("data-invalid", error() ? "true" : _$escape(undefined, true), false), _$ssrElement("button", _$mergeProps({
133
141
  get id() {
134
142
  return meta.controlId;
135
143
  },
@@ -151,7 +159,11 @@ function PickerShell(props) {
151
159
  get ["aria-controls"]() {
152
160
  return `${meta.controlId}-popover`;
153
161
  }
154
- }, () => fieldControlAria(meta, props.owner)), [_$ssr(_tmpl$, `${_$escape(props.icon, true)} k2b-date-trigger__icon`), _$ssr(_tmpl$2, _$escape(_$createComponent(Show, {
162
+ }, () => fieldControlAria(meta, props.owner), {
163
+ get ["aria-describedby"]() {
164
+ return [fieldDescribedBy(meta, props.owner), `${meta.controlId}-value`].filter(Boolean).join(" ");
165
+ }
166
+ }), [_$ssr(_tmpl$, `${_$escape(props.icon, true)} k2b-date-trigger__icon`), _$ssr(_tmpl$2, `${_$escape(meta.controlId, true)}-value`, _$escape(_$createComponent(Show, {
155
167
  get when() {
156
168
  return props.valueLabel();
157
169
  },
@@ -163,22 +175,29 @@ function PickerShell(props) {
163
175
  }
164
176
  }))), _$ssr(_tmpl$3)], false), _$escape(_$createComponent(Show, {
165
177
  get when() {
166
- return _$memo(() => !!(props.owner.clearable && props.valueLabel()))() && !props.owner.disabled;
178
+ return _$memo(() => !!canClear())() && !plain();
167
179
  },
168
180
  get children() {
169
181
  return _$ssr(_tmpl$4, _$ssrAttribute("aria-label", _$escape(messages().clearDate, true), false));
170
182
  }
171
183
  })), `${_$escape(meta.controlId, true)}-popover`, _$ssrAttribute("aria-label", typeof props.owner.label === "string" ? _$escape(props.owner.label, true) : _$escape(messages().datePicker, true), false), _$escape(props.children(close)), _$escape(_$createComponent(Show, {
172
184
  get when() {
173
- return props.footerMeta || props.timezone;
185
+ return props.footerMeta || props.timezone || plain() && canClear();
174
186
  },
175
187
  get children() {
176
- return _$ssr(_tmpl$6, _$escape(props.footerMeta?.()), _$escape(_$createComponent(Show, {
188
+ return _$ssr(_tmpl$7, _$escape(props.footerMeta?.()), _$escape(_$createComponent(Show, {
189
+ get when() {
190
+ return _$memo(() => !!plain())() && canClear();
191
+ },
192
+ get children() {
193
+ return _$ssr(_tmpl$5, _$escape(messages().clearDate));
194
+ }
195
+ })), _$escape(_$createComponent(Show, {
177
196
  get when() {
178
197
  return props.timezone;
179
198
  },
180
199
  get children() {
181
- return _$ssr(_tmpl$5, _$escape(props.timezone));
200
+ return _$ssr(_tmpl$6, _$escape(props.timezone));
182
201
  }
183
202
  })));
184
203
  }
@@ -193,11 +212,11 @@ function PresetRail(props) {
193
212
  return props.presets?.length;
194
213
  },
195
214
  get children() {
196
- return _$ssr(_tmpl$8, _$ssrAttribute("aria-label", _$escape(messages().datePresets, true), false), _$escape(_$createComponent(For, {
215
+ return _$ssr(_tmpl$9, _$ssrAttribute("aria-label", _$escape(messages().datePresets, true), false), _$escape(_$createComponent(For, {
197
216
  get each() {
198
217
  return props.presets;
199
218
  },
200
- children: preset => _$ssr(_tmpl$9, _$escape(preset.label))
219
+ children: preset => _$ssr(_tmpl$0, _$escape(preset.label))
201
220
  })));
202
221
  }
203
222
  });
@@ -271,7 +290,7 @@ function DatePickerPanel(props) {
271
290
  focusDate(dates.addDays(day, offset, context()));
272
291
  }
273
292
  };
274
- return _$ssr(_tmpl$10, _$ssrAttribute("aria-label", _$escape(messages().calendar, true), false), _$ssrAttribute("aria-label", _$escape(previousLabel(), true), false), _$escape(_$createComponent(Show, {
293
+ return _$ssr(_tmpl$11, _$ssrAttribute("aria-label", _$escape(messages().calendar, true), false), _$ssrAttribute("aria-label", _$escape(previousLabel(), true), false), _$escape(_$createComponent(Show, {
275
294
  get when() {
276
295
  return view() === "days";
277
296
  },
@@ -286,24 +305,24 @@ function DatePickerPanel(props) {
286
305
  return view() === "days";
287
306
  },
288
307
  get fallback() {
289
- return _$ssr(_tmpl$11, `Months in ${_$escape(month().year, true)}`, _$escape(_$createComponent(For, {
308
+ return _$ssr(_tmpl$12, `Months in ${_$escape(month().year, true)}`, _$escape(_$createComponent(For, {
290
309
  get each() {
291
310
  return months();
292
311
  },
293
- children: (name, index) => _$ssr(_tmpl$12, _$ssrAttribute("aria-pressed", _$escape(index(), true) === _$escape(month().month, true), false) + _$ssrAttribute("data-selected", index() === month().month ? "true" : _$escape(undefined, true), false), _$escape(name))
312
+ children: (name, index) => _$ssr(_tmpl$13, _$ssrAttribute("aria-pressed", _$escape(index(), true) === _$escape(month().month, true), false) + _$ssrAttribute("data-selected", index() === month().month ? "true" : _$escape(undefined, true), false), _$escape(name))
294
313
  })));
295
314
  },
296
315
  get children() {
297
- return [_$ssr(_tmpl$0, _$escape(_$createComponent(For, {
316
+ return [_$ssr(_tmpl$1, _$escape(_$createComponent(For, {
298
317
  get each() {
299
318
  return weekdays();
300
319
  },
301
- children: day => _$ssr(_tmpl$13, _$escape(day))
302
- }))), _$ssr(_tmpl$1, _$escape(_$createComponent(For, {
320
+ children: day => _$ssr(_tmpl$14, _$escape(day))
321
+ }))), _$ssr(_tmpl$10, _$escape(_$createComponent(For, {
303
322
  get each() {
304
323
  return dayRows();
305
324
  },
306
- children: week => _$ssr(_tmpl$14, _$escape(_$createComponent(For, {
325
+ children: week => _$ssr(_tmpl$15, _$escape(_$createComponent(For, {
307
326
  each: week,
308
327
  children: cell => {
309
328
  const selected = () => props.selected?.() === cell.key;
@@ -313,7 +332,7 @@ function DatePickerPanel(props) {
313
332
  };
314
333
  const active = () => selected() || isRangeEdge(cell.key, range());
315
334
  const focusable = () => cell.key === defaultFocus();
316
- return _$ssr(_tmpl$15, _$ssrAttribute("data-date-day", _$escape(cell.key, true), false) + _$ssrAttribute("data-date-focus", focusable() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-outside", cell.outside ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-in-range", inRange(cell.key, range()) && !active() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("aria-label", _$escape(cell.label, true), false) + _$ssrAttribute("aria-selected", _$escape(active(), true), false) + _$ssrAttribute("tabindex", focusable() ? 0 : -1, false), _$escape(cell.number));
335
+ return _$ssr(_tmpl$16, _$ssrAttribute("data-date-day", _$escape(cell.key, true), false) + _$ssrAttribute("data-date-focus", focusable() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-outside", cell.outside ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("data-in-range", inRange(cell.key, range()) && !active() ? "true" : _$escape(undefined, true), false) + _$ssrAttribute("aria-label", _$escape(cell.label, true), false) + _$ssrAttribute("aria-selected", _$escape(active(), true), false) + _$ssrAttribute("tabindex", focusable() ? 0 : -1, false), _$escape(cell.number));
317
336
  }
318
337
  })))
319
338
  })))];
@@ -322,12 +341,12 @@ function DatePickerPanel(props) {
322
341
  }
323
342
  function TimeInput(props) {
324
343
  const messages = useUiMessages();
325
- return _$ssr(_tmpl$16, _$escape(_$createComponent(Show, {
344
+ return _$ssr(_tmpl$17, _$escape(_$createComponent(Show, {
326
345
  get when() {
327
346
  return props.label;
328
347
  },
329
348
  get children() {
330
- return _$ssr(_tmpl$13, _$escape(props.label));
349
+ return _$ssr(_tmpl$14, _$escape(props.label));
331
350
  }
332
351
  })), _$ssrAttribute("value", _$escape(props.time, true), false), _$ssrAttribute("aria-label", props.label ? _$escape(messages().timeLabel({
333
352
  label: props.label
@@ -342,12 +361,15 @@ export function DatePicker(props) {
342
361
  owner: props,
343
362
  icon: "ti ti-calendar",
344
363
  valueLabel: valueLabel,
364
+ get valueContent() {
365
+ return props.renderValue ? () => props.renderValue(value()) : undefined;
366
+ },
345
367
  clearValue: null,
346
368
  onOpen: () => setVisibleMonth(parseDateValue(value(), dateConfig())),
347
369
  get wide() {
348
370
  return Boolean(props.presets?.length);
349
371
  },
350
- children: close => _$ssr(_tmpl$17, _$escape(_$createComponent(PresetRail, {
372
+ children: close => _$ssr(_tmpl$18, _$escape(_$createComponent(PresetRail, {
351
373
  get presets() {
352
374
  return props.presets;
353
375
  },
@@ -371,6 +393,7 @@ export function DatePicker(props) {
371
393
  });
372
394
  }
373
395
  export function DateTimePicker(props) {
396
+ const messages = useUiMessages();
374
397
  const value = () => resolveMaybeAccessor(props.value);
375
398
  const dateConfig = useDateConfigLocale(() => props.dateConfig);
376
399
  const parts = () => splitDateTime(value(), dateConfig());
@@ -388,6 +411,9 @@ export function DateTimePicker(props) {
388
411
  owner: props,
389
412
  icon: "ti ti-calendar-time",
390
413
  valueLabel: valueLabel,
414
+ get valueContent() {
415
+ return props.renderValue ? () => props.renderValue(value()) : undefined;
416
+ },
391
417
  clearValue: null,
392
418
  get timezone() {
393
419
  return dateConfig().timeZone;
@@ -396,7 +422,7 @@ export function DateTimePicker(props) {
396
422
  get wide() {
397
423
  return Boolean(props.presets?.length);
398
424
  },
399
- children: close => [_$ssr(_tmpl$17, _$escape(_$createComponent(PresetRail, {
425
+ children: close => [_$ssr(_tmpl$18, _$escape(_$createComponent(PresetRail, {
400
426
  get presets() {
401
427
  return props.presets;
402
428
  },
@@ -416,12 +442,12 @@ export function DateTimePicker(props) {
416
442
  get dateConfig() {
417
443
  return dateConfig();
418
444
  }
419
- }))), _$ssr(_tmpl$18, _$escape(_$createComponent(TimeInput, {
445
+ }))), _$ssr(_tmpl$19, _$escape(_$createComponent(TimeInput, {
420
446
  get time() {
421
447
  return draftTime();
422
448
  },
423
449
  onChange: setDraftTime
424
- })), _$ssrAttribute("disabled", !draftDate() || !isCompleteTime(draftTime()), true))]
450
+ })), _$ssrAttribute("disabled", !draftDate() || !isCompleteTime(draftTime()), true), _$escape(messages().apply))]
425
451
  });
426
452
  }
427
453
  export function DateRangePicker(props) {
@@ -466,7 +492,7 @@ export function DateRangePicker(props) {
466
492
  };
467
493
  const valueContent = () => {
468
494
  const format = withTime() ? formatDateTimeValue : displayDate;
469
- return _$ssr(_tmpl$19, value().start ? _$escape(format(value().start, dateConfig())) : _$escape(messages().start), value().end ? _$escape(format(value().end, dateConfig())) : "End");
495
+ return _$ssr(_tmpl$20, value().start ? _$escape(format(value().start, dateConfig())) : _$escape(messages().start), value().end ? _$escape(format(value().end, dateConfig())) : "End");
470
496
  };
471
497
  const selectDate = value => {
472
498
  const current = draftRange();
@@ -542,14 +568,14 @@ export function DateRangePicker(props) {
542
568
  return durationLabel();
543
569
  },
544
570
  get children() {
545
- return _$ssr(_tmpl$20, _$escape(durationLabel()));
571
+ return _$ssr(_tmpl$21, _$escape(durationLabel()));
546
572
  }
547
573
  }),
548
574
  onOpen: syncDraft,
549
575
  get wide() {
550
576
  return Boolean(props.datePresets?.length || props.presets?.length);
551
577
  },
552
- children: close => [_$ssr(_tmpl$17, _$escape(_$createComponent(Show, {
578
+ children: close => [_$ssr(_tmpl$18, _$escape(_$createComponent(Show, {
553
579
  get when() {
554
580
  return props.datePresets?.length;
555
581
  },
@@ -599,7 +625,7 @@ export function DateRangePicker(props) {
599
625
  return withTime();
600
626
  },
601
627
  get children() {
602
- return _$ssr(_tmpl$21, _$escape(_$createComponent(TimeInput, {
628
+ return _$ssr(_tmpl$22, _$escape(_$createComponent(TimeInput, {
603
629
  get label() {
604
630
  return messages().start;
605
631
  },
@@ -617,19 +643,19 @@ export function DateRangePicker(props) {
617
643
  onChange: setEndTime
618
644
  })));
619
645
  }
620
- }), _$ssr(_tmpl$18, _$escape(_$createComponent(Show, {
646
+ }), _$ssr(_tmpl$19, _$escape(_$createComponent(Show, {
621
647
  get when() {
622
648
  return _$memo(() => !!withTime())() && props.durationPresets?.length;
623
649
  },
624
650
  get children() {
625
- return _$ssr(_tmpl$22, _$ssrAttribute("aria-label", _$escape(messages().durationPresets, true), false), _$escape(_$createComponent(For, {
651
+ return _$ssr(_tmpl$23, _$ssrAttribute("aria-label", _$escape(messages().durationPresets, true), false), _$escape(_$createComponent(For, {
626
652
  get each() {
627
653
  return props.durationPresets;
628
654
  },
629
- children: preset => _$ssr(_tmpl$12, _$ssrAttribute("aria-pressed", _$escape(durationMinutes(), true) === _$escape(preset.minutes, true), false), _$escape(preset.label))
655
+ children: preset => _$ssr(_tmpl$13, _$ssrAttribute("aria-pressed", _$escape(durationMinutes(), true) === _$escape(preset.minutes, true), false), _$escape(preset.label))
630
656
  })));
631
657
  }
632
- })), _$ssrAttribute("disabled", Boolean(draftRange().start) !== Boolean(draftRange().end) || Boolean(withTime() && draftRange().start && draftRange().end && (!isCompleteTime(startTime()) || !isCompleteTime(endTime()))), true))]
658
+ })), _$ssrAttribute("disabled", Boolean(draftRange().start) !== Boolean(draftRange().end) || Boolean(withTime() && draftRange().start && draftRange().end && (!isCompleteTime(startTime()) || !isCompleteTime(endTime()))), true), _$escape(messages().apply))]
633
659
  });
634
660
  }
635
661
  //# sourceMappingURL=DatePicker.js.map