@photon-ai/pho-ui 4.6.0 → 4.7.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 (44) hide show
  1. package/dist/chunks/{basic-page-D2PDJklw.js → basic-page-E_on0m1X.js} +638 -638
  2. package/dist/chunks/basic-page-E_on0m1X.js.map +1 -0
  3. package/dist/chunks/{button-CgUS0j3D.js → button-C9VqBBIr.js} +9 -9
  4. package/dist/chunks/button-C9VqBBIr.js.map +1 -0
  5. package/dist/chunks/{chat-BXjycPi9.js → chat-B0WIgEyM.js} +2 -2
  6. package/dist/chunks/{chat-BXjycPi9.js.map → chat-B0WIgEyM.js.map} +1 -1
  7. package/dist/chunks/{code-block-BGgbp-6Q.js → code-block-BuFfh0zH.js} +2 -2
  8. package/dist/chunks/{code-block-BGgbp-6Q.js.map → code-block-BuFfh0zH.js.map} +1 -1
  9. package/dist/chunks/{command-BfCCRaoc.js → command-iYvU6Mhf.js} +2 -2
  10. package/dist/chunks/{command-BfCCRaoc.js.map → command-iYvU6Mhf.js.map} +1 -1
  11. package/dist/chunks/{dialog-DeM4axJ6.js → dialog-MPvem7yV.js} +2 -2
  12. package/dist/chunks/{dialog-DeM4axJ6.js.map → dialog-MPvem7yV.js.map} +1 -1
  13. package/dist/chunks/{error-VvHnteyf.js → error-D5SzZ0ev.js} +2 -2
  14. package/dist/chunks/{error-VvHnteyf.js.map → error-D5SzZ0ev.js.map} +1 -1
  15. package/dist/chunks/{filter-bar-BcpeTKCC.js → filter-bar-B-oYYBsU.js} +3 -3
  16. package/dist/chunks/{filter-bar-BcpeTKCC.js.map → filter-bar-B-oYYBsU.js.map} +1 -1
  17. package/dist/chunks/{log-list-Didt-MV4.js → log-list-tNuCFGlP.js} +2 -2
  18. package/dist/chunks/{log-list-Didt-MV4.js.map → log-list-tNuCFGlP.js.map} +1 -1
  19. package/dist/chunks/{message-CTml-TrB.js → message-Dz2-numf.js} +32 -29
  20. package/dist/chunks/{message-CTml-TrB.js.map → message-Dz2-numf.js.map} +1 -1
  21. package/dist/chunks/{sidebar-BmloUwJQ.js → sidebar-BP39w1iA.js} +3 -3
  22. package/dist/chunks/sidebar-BP39w1iA.js.map +1 -0
  23. package/dist/chunks/{toast-DUvjSZF7.js → toast-BACxYsv6.js} +2 -2
  24. package/dist/chunks/{toast-DUvjSZF7.js.map → toast-BACxYsv6.js.map} +1 -1
  25. package/dist/components/button.js +1 -1
  26. package/dist/components/chat.js +1 -1
  27. package/dist/components/code-block.js +1 -1
  28. package/dist/components/command.js +1 -1
  29. package/dist/components/dialog.js +1 -1
  30. package/dist/components/error.js +1 -1
  31. package/dist/components/filter-bar.js +1 -1
  32. package/dist/components/log-list.js +1 -1
  33. package/dist/components/message.js +1 -1
  34. package/dist/components/toast.js +1 -1
  35. package/dist/index.js +10 -10
  36. package/dist/sections/basic-page.js +1 -1
  37. package/dist/sections/sidebar.js +1 -1
  38. package/dist/src/components/button/button.d.ts +7 -7
  39. package/dist/src/components/message/message-status.d.ts +7 -3
  40. package/dist/src/sections/basic-page/basic-page.d.ts +6 -1
  41. package/package.json +1 -1
  42. package/dist/chunks/basic-page-D2PDJklw.js.map +0 -1
  43. package/dist/chunks/button-CgUS0j3D.js.map +0 -1
  44. package/dist/chunks/sidebar-BmloUwJQ.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"toast-DUvjSZF7.js","names":["__iconNode","__iconNode","__iconNode"],"sources":["../../../../node_modules/.pnpm/@tabler+icons-react@3.46.0_react@19.2.8/node_modules/@tabler/icons-react/dist/esm/icons/IconAlertOctagonFilled.mjs","../../../../node_modules/.pnpm/@tabler+icons-react@3.46.0_react@19.2.8/node_modules/@tabler/icons-react/dist/esm/icons/IconAlertTriangleFilled.mjs","../../../../node_modules/.pnpm/@tabler+icons-react@3.46.0_react@19.2.8/node_modules/@tabler/icons-react/dist/esm/icons/IconCircleCheckFilled.mjs","../../../../node_modules/.pnpm/@tabler+icons-react@3.46.0_react@19.2.8/node_modules/@tabler/icons-react/dist/esm/icons/IconInfoCircleFilled.mjs","../../src/components/toast/toast.tsx"],"sourcesContent":["/**\n * @license @tabler/icons-react v3.46.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M14.897 1a4 4 0 0 1 2.664 1.016l.165 .156l4.1 4.1a4 4 0 0 1 1.168 2.605l.006 .227v5.794a4 4 0 0 1 -1.016 2.664l-.156 .165l-4.1 4.1a4 4 0 0 1 -2.603 1.168l-.227 .006h-5.795a3.999 3.999 0 0 1 -2.664 -1.017l-.165 -.156l-4.1 -4.1a4 4 0 0 1 -1.168 -2.604l-.006 -.227v-5.794a4 4 0 0 1 1.016 -2.664l.156 -.165l4.1 -4.1a4 4 0 0 1 2.605 -1.168l.227 -.006h5.793zm-2.887 14l-.127 .007a1 1 0 0 0 0 1.986l.117 .007l.127 -.007a1 1 0 0 0 0 -1.986l-.117 -.007zm-.01 -8a1 1 0 0 0 -.993 .883l-.007 .117v4l.007 .117a1 1 0 0 0 1.986 0l.007 -.117v-4l-.007 -.117a1 1 0 0 0 -.993 -.883z\", \"key\": \"svg-0\" }]];\nconst IconAlertOctagonFilled = createReactComponent(\"filled\", \"alert-octagon-filled\", \"AlertOctagonFilled\", __iconNode);\n\nexport { __iconNode, IconAlertOctagonFilled as default };\n//# sourceMappingURL=IconAlertOctagonFilled.mjs.map\n","/**\n * @license @tabler/icons-react v3.46.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 1.67c.955 0 1.845 .467 2.39 1.247l.105 .16l8.114 13.548a2.914 2.914 0 0 1 -2.307 4.363l-.195 .008h-16.225a2.914 2.914 0 0 1 -2.582 -4.2l.099 -.185l8.11 -13.538a2.914 2.914 0 0 1 2.491 -1.403zm.01 13.33l-.127 .007a1 1 0 0 0 0 1.986l.117 .007l.127 -.007a1 1 0 0 0 0 -1.986l-.117 -.007zm-.01 -7a1 1 0 0 0 -.993 .883l-.007 .117v4l.007 .117a1 1 0 0 0 1.986 0l.007 -.117v-4l-.007 -.117a1 1 0 0 0 -.993 -.883z\", \"key\": \"svg-0\" }]];\nconst IconAlertTriangleFilled = createReactComponent(\"filled\", \"alert-triangle-filled\", \"AlertTriangleFilled\", __iconNode);\n\nexport { __iconNode, IconAlertTriangleFilled as default };\n//# sourceMappingURL=IconAlertTriangleFilled.mjs.map\n","/**\n * @license @tabler/icons-react v3.46.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M17 3.34a10 10 0 1 1 -14.995 8.984l-.005 -.324l.005 -.324a10 10 0 0 1 14.995 -8.336zm-1.293 5.953a1 1 0 0 0 -1.32 -.083l-.094 .083l-3.293 3.292l-1.293 -1.292l-.094 -.083a1 1 0 0 0 -1.403 1.403l.083 .094l2 2l.094 .083a1 1 0 0 0 1.226 0l.094 -.083l4 -4l.083 -.094a1 1 0 0 0 -.083 -1.32z\", \"key\": \"svg-0\" }]];\nconst IconCircleCheckFilled = createReactComponent(\"filled\", \"circle-check-filled\", \"CircleCheckFilled\", __iconNode);\n\nexport { __iconNode, IconCircleCheckFilled as default };\n//# sourceMappingURL=IconCircleCheckFilled.mjs.map\n","/**\n * @license @tabler/icons-react v3.46.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 2c5.523 0 10 4.477 10 10a10 10 0 0 1 -19.995 .324l-.005 -.324l.004 -.28c.148 -5.393 4.566 -9.72 9.996 -9.72zm0 9h-1l-.117 .007a1 1 0 0 0 0 1.986l.117 .007v3l.007 .117a1 1 0 0 0 .876 .876l.117 .007h1l.117 -.007a1 1 0 0 0 .876 -.876l.007 -.117l-.007 -.117a1 1 0 0 0 -.764 -.857l-.112 -.02l-.117 -.006v-3l-.007 -.117a1 1 0 0 0 -.876 -.876l-.117 -.007zm.01 -3l-.127 .007a1 1 0 0 0 0 1.986l.117 .007l.127 -.007a1 1 0 0 0 0 -1.986l-.117 -.007z\", \"key\": \"svg-0\" }]];\nconst IconInfoCircleFilled = createReactComponent(\"filled\", \"info-circle-filled\", \"InfoCircleFilled\", __iconNode);\n\nexport { __iconNode, IconInfoCircleFilled as default };\n//# sourceMappingURL=IconInfoCircleFilled.mjs.map\n","import { type ComponentProps, type ElementType, type ReactNode } from \"react\";\nimport { FADE_SWAP } from \"../../motion\";\nimport { Toast as BaseToast } from \"@base-ui/react/toast\";\nimport { AnimatePresence, motion, useReducedMotion } from \"motion/react\";\nimport {\n IconAlertOctagonFilled,\n IconAlertTriangleFilled,\n IconCircleCheckFilled,\n IconInfoCircleFilled,\n IconX,\n type Icon,\n} from \"@tabler/icons-react\";\nimport { BLUR_MAX_PX } from \"../scroll-area\";\nimport { Button } from \"../button\";\nimport { Spinner } from \"../spinner\";\nimport { cn } from \"../../utils/cn\";\n\n/** Override Base UI's `string | (state) => string` className with plain string. */\ntype StyledProps<T extends ElementType> = Omit<\n ComponentProps<T>,\n \"className\"\n> & {\n className?: string;\n};\n\n/** The system's swap: fade through the 1px soft focus, ease-out. */\nconst FACE_SWAP = FADE_SWAP;\n\nconst Provider = BaseToast.Provider;\nconst Portal = BaseToast.Portal;\nconst Action = BaseToast.Action;\n\n/** Imperative toast API: `const toast = useToastManager(); toast.add({ title })`. */\nconst useToastManager = BaseToast.useToastManager;\nconst createToastManager = BaseToast.createToastManager;\n\n/**\n * Status glyphs per toast `type` (Kumo's set in Tabler's hand): the glyph\n * and the title take the status ink, the hairline tints with it, and a\n * translucent wash of the same ink sits over the surface. `info` speaks\n * in the brand ink — Pho has no separate info hue. `loading` is what\n * `manager.promise` shows while the work runs.\n */\nconst TOAST_ICONS: Record<string, Icon> = {\n success: IconCircleCheckFilled,\n error: IconAlertOctagonFilled,\n warning: IconAlertTriangleFilled,\n info: IconInfoCircleFilled,\n};\n\nconst TOAST_WASH: Record<string, string> = {\n success:\n \"bg-[color-mix(in_oklab,var(--text-color-pho-success)_7%,transparent)]\",\n error: \"bg-[color-mix(in_oklab,var(--text-color-pho-error)_7%,transparent)]\",\n warning:\n \"bg-[color-mix(in_oklab,var(--text-color-pho-warning)_7%,transparent)]\",\n info: \"bg-[color-mix(in_oklab,var(--text-color-pho-brand)_7%,transparent)]\",\n};\n\nfunction Viewport({\n className,\n ...props\n}: StyledProps<typeof BaseToast.Viewport>) {\n return (\n <BaseToast.Viewport\n // The stack's anchor box; the cards position themselves absolutely\n // against its bottom edge, and hovering any card expands the stack.\n className={cn(\n \"fixed right-4 bottom-4 z-50 flex w-[calc(100%-2rem)] outline-none sm:w-[22rem]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Root({ className, ...props }: StyledProps<typeof BaseToast.Root>) {\n return (\n <BaseToast.Root\n className={cn(\n // Floating layer: keeps its elevation shadow, sits on the card surface\n // with the site hairline (ring-pho-secondary).\n \"bg-pho-primary text-pho-primary shadow-pho-lg ring-pho-secondary rounded-base absolute right-0 bottom-0 w-full origin-bottom ring-1 select-none ring-inset\",\n // Kumo's stack math on Base UI's variables: a 12px gap folded into\n // the expanded offsets, a 12px peek and −10% scale per depth at\n // rest, the newest card on top.\n \"[--gap:0.75rem] [--height:var(--toast-frontmost-height,var(--toast-height))] [--peek:0.75rem] [--scale:calc(max(0,1-(var(--toast-index)*0.1)))] [--shrink:calc(1-var(--scale))]\",\n \"[--offset-y:calc(var(--toast-offset-y)*-1+var(--toast-index)*var(--gap)*-1+var(--toast-swipe-movement-y,0px))]\",\n \"[z-index:calc(1000-var(--toast-index))] h-[var(--height)]\",\n \"[transform:translateX(var(--toast-swipe-movement-x,0px))_translateY(calc(var(--toast-swipe-movement-y,0px)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))]\",\n \"[transition:transform_0.5s_cubic-bezier(0.22,1,0.36,1),opacity_0.5s,height_0.15s,box-shadow_0.2s_ease-out]\",\n // Invisible bridge below each card so the hover survives the gaps.\n \"after:absolute after:top-full after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']\",\n // Hovering (or focusing) the stack expands it into a true list.\n \"data-[expanded]:h-[var(--toast-height)] data-[expanded]:[transform:translateX(var(--toast-swipe-movement-x,0px))_translateY(var(--offset-y))]\",\n // Beyond the provider's limit a card parks invisibly until room frees.\n \"data-[limited]:opacity-0\",\n // In from below; out along the swipe, or back down when timed out.\n \"data-[starting-style]:[transform:translateY(150%)]\",\n \"data-[ending-style]:opacity-0\",\n \"[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(150%)]\",\n \"data-[ending-style]:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y,0px)+150%))]\",\n \"data-[ending-style]:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y,0px)-150%))]\",\n \"data-[ending-style]:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x,0px)-150%))_translateY(var(--offset-y))]\",\n \"data-[ending-style]:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x,0px)+150%))_translateY(var(--offset-y))]\",\n \"data-[swiping]:[transition:none]\",\n // Status inks: hairline, glyph, and title tint together per type.\n \"data-[type=success]:[&_[data-toast-icon]]:text-pho-success data-[type=success]:[&_[data-toast-title]]:text-pho-success data-[type=success]:[&_[data-toast-action]]:text-pho-success data-[type=success]:[&_[data-toast-close]]:text-pho-success data-[type=success]:ring-[color-mix(in_oklab,var(--text-color-pho-success)_45%,transparent)] data-[type=success]:[&_[data-toast-action]]:ring-[color-mix(in_oklab,var(--text-color-pho-success)_45%,transparent)]\",\n \"data-[type=error]:[&_[data-toast-icon]]:text-pho-error data-[type=error]:[&_[data-toast-title]]:text-pho-error data-[type=error]:[&_[data-toast-action]]:text-pho-error data-[type=error]:[&_[data-toast-close]]:text-pho-error data-[type=error]:ring-[color-mix(in_oklab,var(--text-color-pho-error)_45%,transparent)] data-[type=error]:[&_[data-toast-action]]:ring-[color-mix(in_oklab,var(--text-color-pho-error)_45%,transparent)]\",\n \"data-[type=warning]:[&_[data-toast-icon]]:text-pho-warning data-[type=warning]:[&_[data-toast-title]]:text-pho-warning data-[type=warning]:[&_[data-toast-action]]:text-pho-warning data-[type=warning]:[&_[data-toast-close]]:text-pho-warning data-[type=warning]:ring-[color-mix(in_oklab,var(--text-color-pho-warning)_45%,transparent)] data-[type=warning]:[&_[data-toast-action]]:ring-[color-mix(in_oklab,var(--text-color-pho-warning)_45%,transparent)]\",\n \"data-[type=info]:[&_[data-toast-icon]]:text-pho-brand data-[type=info]:[&_[data-toast-title]]:text-pho-brand data-[type=info]:[&_[data-toast-action]]:text-pho-brand data-[type=info]:[&_[data-toast-close]]:text-pho-brand data-[type=info]:ring-[color-mix(in_oklab,var(--text-color-pho-brand)_45%,transparent)] data-[type=info]:[&_[data-toast-action]]:ring-[color-mix(in_oklab,var(--text-color-pho-brand)_45%,transparent)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Content({\n className,\n ...props\n}: StyledProps<typeof BaseToast.Content>) {\n return (\n <BaseToast.Content\n // Cards behind the front one show only their peeking edge — the\n // words appear when the stack expands.\n className={cn(\n \"isolate flex flex-col p-4 pr-10 transition-opacity [transition-duration:250ms]\",\n \"data-[behind]:pointer-events-none data-[behind]:opacity-0 data-[expanded]:pointer-events-auto data-[expanded]:opacity-100\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Title({ className, ...props }: StyledProps<typeof BaseToast.Title>) {\n return (\n <BaseToast.Title\n data-toast-title\n className={cn(\"text-pho-primary text-md font-medium\", className)}\n {...props}\n />\n );\n}\n\nfunction Description({\n className,\n ...props\n}: StyledProps<typeof BaseToast.Description>) {\n return (\n <BaseToast.Description\n className={cn(\"text-pho-description text-md\", className)}\n {...props}\n />\n );\n}\n\nfunction Close({ className, ...props }: StyledProps<typeof BaseToast.Close>) {\n return (\n <BaseToast.Close\n data-toast-close\n className={cn(\n \"text-pho-secondary hover:text-pho-secondary-hover hover:bg-pho-ghost-hover outline-pho-brand absolute top-2.5 right-2.5 flex size-6 cursor-pointer items-center justify-center rounded-sm transition focus-visible:outline-2 [&>svg]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * The status glyph for a typed toast — its own row above the title, the\n * Dialog header's arrangement at card scale, an 8px breath before the\n * title. `loading` shows the spinner.\n */\nfunction TypeIcon({ type }: { type?: string }) {\n if (type === \"loading\") {\n return <Spinner aria-hidden className=\"mb-2 size-6 shrink-0\" />;\n }\n const Glyph = type != null ? TOAST_ICONS[type] : undefined;\n if (Glyph == null) return null;\n return <Glyph aria-hidden data-toast-icon className=\"mb-2 size-6 shrink-0\" />;\n}\n\nfunction ToastyList() {\n const { toasts, close } = BaseToast.useToastManager();\n const reduceMotion = useReducedMotion();\n const blurAway = reduceMotion ? \"blur(0px)\" : `blur(${BLUR_MAX_PX}px)`;\n return toasts.map((toast) => (\n <Root key={toast.id} toast={toast}>\n {/* The status wash: a breath of the status ink over the surface. */}\n <div\n aria-hidden\n className={cn(\n \"pointer-events-none absolute inset-0 rounded-[inherit] transition-colors duration-200 ease-out\",\n toast.type != null ? TOAST_WASH[toast.type] : undefined,\n )}\n />\n <Content>\n {/* One grid cell, faces stacked: when a promise walks the card\n from loading to its outcome, the old face fades out through\n the system's soft focus exactly where the new one fades in —\n the values ride each face, so the goer keeps its words. */}\n <span className=\"grid\">\n <AnimatePresence initial={false}>\n <motion.div\n key={`${toast.type ?? \"\"}|${String(toast.title ?? \"\")}`}\n className=\"flex min-w-0 flex-col [grid-area:1/1]\"\n initial={{ opacity: 0, filter: blurAway }}\n animate={{ opacity: 1, filter: \"blur(0px)\" }}\n exit={{ opacity: 0, filter: blurAway }}\n transition={FACE_SWAP}\n >\n <TypeIcon type={toast.type} />\n <Title>{toast.title}</Title>\n <Description>{toast.description}</Description>\n {toast.actionProps != null ? (\n <Action\n data-toast-action\n render={<Button variant=\"outlined\" size=\"sm\" />}\n className=\"mt-2 self-start\"\n onClick={(event) => {\n toast.actionProps?.onClick?.(event);\n close(toast.id);\n }}\n >\n {toast.actionProps.children}\n </Action>\n ) : null}\n </motion.div>\n </AnimatePresence>\n </span>\n </Content>\n <Close aria-label=\"Dismiss\">\n <IconX />\n </Close>\n </Root>\n ));\n}\n\n/**\n * Toasty — the whole toast system in one wrapper, Kumo-shaped: provider,\n * portal, viewport, and the stacked card list with status variants. Wrap\n * the app once and call `Toast.useToastManager().add({ title, type })`\n * from any child; pass a `toastManager` from `createToastManager()` so\n * code outside the tree (a form's auto-save, a query cache) can speak\n * through the same lane. `manager.promise` shows loading → success/error\n * with the matching glyphs.\n */\nexport function Toasty({\n children,\n toastManager,\n}: {\n children?: ReactNode;\n toastManager?: ComponentProps<typeof BaseToast.Provider>[\"toastManager\"];\n}) {\n return (\n <Provider toastManager={toastManager}>\n {children}\n <Portal>\n <Viewport>\n <ToastyList />\n </Viewport>\n </Portal>\n </Provider>\n );\n}\n\n/**\n * Toast built on Base UI `Toast` — transient, non-blocking notifications\n * in a sonner-style stack, styled after Cloudflare's Kumo: at rest the\n * cards collapse into a peek (12px rise and −10% scale per depth, words\n * hidden behind the front card), expand into a true list with a 12px gap\n * on hover or focus, swipe to dismiss, three visible at most. `type`\n * (`success` / `error` / `warning` / `info` / `loading`) tints hairline,\n * glyph, and title together. Reach for `Toasty` unless you need to\n * compose the parts yourself.\n */\nexport const Toast = {\n Provider,\n Portal,\n Viewport,\n Root,\n Content,\n Title,\n Description,\n Close,\n Action,\n useToastManager,\n createToastManager,\n};\n"],"x_google_ignoreList":[0,1,2,3],"mappings":"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"}
1
+ {"version":3,"file":"toast-BACxYsv6.js","names":["__iconNode","__iconNode","__iconNode"],"sources":["../../../../node_modules/.pnpm/@tabler+icons-react@3.46.0_react@19.2.8/node_modules/@tabler/icons-react/dist/esm/icons/IconAlertOctagonFilled.mjs","../../../../node_modules/.pnpm/@tabler+icons-react@3.46.0_react@19.2.8/node_modules/@tabler/icons-react/dist/esm/icons/IconAlertTriangleFilled.mjs","../../../../node_modules/.pnpm/@tabler+icons-react@3.46.0_react@19.2.8/node_modules/@tabler/icons-react/dist/esm/icons/IconCircleCheckFilled.mjs","../../../../node_modules/.pnpm/@tabler+icons-react@3.46.0_react@19.2.8/node_modules/@tabler/icons-react/dist/esm/icons/IconInfoCircleFilled.mjs","../../src/components/toast/toast.tsx"],"sourcesContent":["/**\n * @license @tabler/icons-react v3.46.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M14.897 1a4 4 0 0 1 2.664 1.016l.165 .156l4.1 4.1a4 4 0 0 1 1.168 2.605l.006 .227v5.794a4 4 0 0 1 -1.016 2.664l-.156 .165l-4.1 4.1a4 4 0 0 1 -2.603 1.168l-.227 .006h-5.795a3.999 3.999 0 0 1 -2.664 -1.017l-.165 -.156l-4.1 -4.1a4 4 0 0 1 -1.168 -2.604l-.006 -.227v-5.794a4 4 0 0 1 1.016 -2.664l.156 -.165l4.1 -4.1a4 4 0 0 1 2.605 -1.168l.227 -.006h5.793zm-2.887 14l-.127 .007a1 1 0 0 0 0 1.986l.117 .007l.127 -.007a1 1 0 0 0 0 -1.986l-.117 -.007zm-.01 -8a1 1 0 0 0 -.993 .883l-.007 .117v4l.007 .117a1 1 0 0 0 1.986 0l.007 -.117v-4l-.007 -.117a1 1 0 0 0 -.993 -.883z\", \"key\": \"svg-0\" }]];\nconst IconAlertOctagonFilled = createReactComponent(\"filled\", \"alert-octagon-filled\", \"AlertOctagonFilled\", __iconNode);\n\nexport { __iconNode, IconAlertOctagonFilled as default };\n//# sourceMappingURL=IconAlertOctagonFilled.mjs.map\n","/**\n * @license @tabler/icons-react v3.46.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 1.67c.955 0 1.845 .467 2.39 1.247l.105 .16l8.114 13.548a2.914 2.914 0 0 1 -2.307 4.363l-.195 .008h-16.225a2.914 2.914 0 0 1 -2.582 -4.2l.099 -.185l8.11 -13.538a2.914 2.914 0 0 1 2.491 -1.403zm.01 13.33l-.127 .007a1 1 0 0 0 0 1.986l.117 .007l.127 -.007a1 1 0 0 0 0 -1.986l-.117 -.007zm-.01 -7a1 1 0 0 0 -.993 .883l-.007 .117v4l.007 .117a1 1 0 0 0 1.986 0l.007 -.117v-4l-.007 -.117a1 1 0 0 0 -.993 -.883z\", \"key\": \"svg-0\" }]];\nconst IconAlertTriangleFilled = createReactComponent(\"filled\", \"alert-triangle-filled\", \"AlertTriangleFilled\", __iconNode);\n\nexport { __iconNode, IconAlertTriangleFilled as default };\n//# sourceMappingURL=IconAlertTriangleFilled.mjs.map\n","/**\n * @license @tabler/icons-react v3.46.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M17 3.34a10 10 0 1 1 -14.995 8.984l-.005 -.324l.005 -.324a10 10 0 0 1 14.995 -8.336zm-1.293 5.953a1 1 0 0 0 -1.32 -.083l-.094 .083l-3.293 3.292l-1.293 -1.292l-.094 -.083a1 1 0 0 0 -1.403 1.403l.083 .094l2 2l.094 .083a1 1 0 0 0 1.226 0l.094 -.083l4 -4l.083 -.094a1 1 0 0 0 -.083 -1.32z\", \"key\": \"svg-0\" }]];\nconst IconCircleCheckFilled = createReactComponent(\"filled\", \"circle-check-filled\", \"CircleCheckFilled\", __iconNode);\n\nexport { __iconNode, IconCircleCheckFilled as default };\n//# sourceMappingURL=IconCircleCheckFilled.mjs.map\n","/**\n * @license @tabler/icons-react v3.46.0 - MIT\n *\n * This source code is licensed under the MIT license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createReactComponent from '../createReactComponent.mjs';\n\nconst __iconNode = [[\"path\", { \"d\": \"M12 2c5.523 0 10 4.477 10 10a10 10 0 0 1 -19.995 .324l-.005 -.324l.004 -.28c.148 -5.393 4.566 -9.72 9.996 -9.72zm0 9h-1l-.117 .007a1 1 0 0 0 0 1.986l.117 .007v3l.007 .117a1 1 0 0 0 .876 .876l.117 .007h1l.117 -.007a1 1 0 0 0 .876 -.876l.007 -.117l-.007 -.117a1 1 0 0 0 -.764 -.857l-.112 -.02l-.117 -.006v-3l-.007 -.117a1 1 0 0 0 -.876 -.876l-.117 -.007zm.01 -3l-.127 .007a1 1 0 0 0 0 1.986l.117 .007l.127 -.007a1 1 0 0 0 0 -1.986l-.117 -.007z\", \"key\": \"svg-0\" }]];\nconst IconInfoCircleFilled = createReactComponent(\"filled\", \"info-circle-filled\", \"InfoCircleFilled\", __iconNode);\n\nexport { __iconNode, IconInfoCircleFilled as default };\n//# sourceMappingURL=IconInfoCircleFilled.mjs.map\n","import { type ComponentProps, type ElementType, type ReactNode } from \"react\";\nimport { FADE_SWAP } from \"../../motion\";\nimport { Toast as BaseToast } from \"@base-ui/react/toast\";\nimport { AnimatePresence, motion, useReducedMotion } from \"motion/react\";\nimport {\n IconAlertOctagonFilled,\n IconAlertTriangleFilled,\n IconCircleCheckFilled,\n IconInfoCircleFilled,\n IconX,\n type Icon,\n} from \"@tabler/icons-react\";\nimport { BLUR_MAX_PX } from \"../scroll-area\";\nimport { Button } from \"../button\";\nimport { Spinner } from \"../spinner\";\nimport { cn } from \"../../utils/cn\";\n\n/** Override Base UI's `string | (state) => string` className with plain string. */\ntype StyledProps<T extends ElementType> = Omit<\n ComponentProps<T>,\n \"className\"\n> & {\n className?: string;\n};\n\n/** The system's swap: fade through the 1px soft focus, ease-out. */\nconst FACE_SWAP = FADE_SWAP;\n\nconst Provider = BaseToast.Provider;\nconst Portal = BaseToast.Portal;\nconst Action = BaseToast.Action;\n\n/** Imperative toast API: `const toast = useToastManager(); toast.add({ title })`. */\nconst useToastManager = BaseToast.useToastManager;\nconst createToastManager = BaseToast.createToastManager;\n\n/**\n * Status glyphs per toast `type` (Kumo's set in Tabler's hand): the glyph\n * and the title take the status ink, the hairline tints with it, and a\n * translucent wash of the same ink sits over the surface. `info` speaks\n * in the brand ink — Pho has no separate info hue. `loading` is what\n * `manager.promise` shows while the work runs.\n */\nconst TOAST_ICONS: Record<string, Icon> = {\n success: IconCircleCheckFilled,\n error: IconAlertOctagonFilled,\n warning: IconAlertTriangleFilled,\n info: IconInfoCircleFilled,\n};\n\nconst TOAST_WASH: Record<string, string> = {\n success:\n \"bg-[color-mix(in_oklab,var(--text-color-pho-success)_7%,transparent)]\",\n error: \"bg-[color-mix(in_oklab,var(--text-color-pho-error)_7%,transparent)]\",\n warning:\n \"bg-[color-mix(in_oklab,var(--text-color-pho-warning)_7%,transparent)]\",\n info: \"bg-[color-mix(in_oklab,var(--text-color-pho-brand)_7%,transparent)]\",\n};\n\nfunction Viewport({\n className,\n ...props\n}: StyledProps<typeof BaseToast.Viewport>) {\n return (\n <BaseToast.Viewport\n // The stack's anchor box; the cards position themselves absolutely\n // against its bottom edge, and hovering any card expands the stack.\n className={cn(\n \"fixed right-4 bottom-4 z-50 flex w-[calc(100%-2rem)] outline-none sm:w-[22rem]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Root({ className, ...props }: StyledProps<typeof BaseToast.Root>) {\n return (\n <BaseToast.Root\n className={cn(\n // Floating layer: keeps its elevation shadow, sits on the card surface\n // with the site hairline (ring-pho-secondary).\n \"bg-pho-primary text-pho-primary shadow-pho-lg ring-pho-secondary rounded-base absolute right-0 bottom-0 w-full origin-bottom ring-1 select-none ring-inset\",\n // Kumo's stack math on Base UI's variables: a 12px gap folded into\n // the expanded offsets, a 12px peek and −10% scale per depth at\n // rest, the newest card on top.\n \"[--gap:0.75rem] [--height:var(--toast-frontmost-height,var(--toast-height))] [--peek:0.75rem] [--scale:calc(max(0,1-(var(--toast-index)*0.1)))] [--shrink:calc(1-var(--scale))]\",\n \"[--offset-y:calc(var(--toast-offset-y)*-1+var(--toast-index)*var(--gap)*-1+var(--toast-swipe-movement-y,0px))]\",\n \"[z-index:calc(1000-var(--toast-index))] h-[var(--height)]\",\n \"[transform:translateX(var(--toast-swipe-movement-x,0px))_translateY(calc(var(--toast-swipe-movement-y,0px)-(var(--toast-index)*var(--peek))-(var(--shrink)*var(--height))))_scale(var(--scale))]\",\n \"[transition:transform_0.5s_cubic-bezier(0.22,1,0.36,1),opacity_0.5s,height_0.15s,box-shadow_0.2s_ease-out]\",\n // Invisible bridge below each card so the hover survives the gaps.\n \"after:absolute after:top-full after:left-0 after:h-[calc(var(--gap)+1px)] after:w-full after:content-['']\",\n // Hovering (or focusing) the stack expands it into a true list.\n \"data-[expanded]:h-[var(--toast-height)] data-[expanded]:[transform:translateX(var(--toast-swipe-movement-x,0px))_translateY(var(--offset-y))]\",\n // Beyond the provider's limit a card parks invisibly until room frees.\n \"data-[limited]:opacity-0\",\n // In from below; out along the swipe, or back down when timed out.\n \"data-[starting-style]:[transform:translateY(150%)]\",\n \"data-[ending-style]:opacity-0\",\n \"[&[data-ending-style]:not([data-limited]):not([data-swipe-direction])]:[transform:translateY(150%)]\",\n \"data-[ending-style]:data-[swipe-direction=down]:[transform:translateY(calc(var(--toast-swipe-movement-y,0px)+150%))]\",\n \"data-[ending-style]:data-[swipe-direction=up]:[transform:translateY(calc(var(--toast-swipe-movement-y,0px)-150%))]\",\n \"data-[ending-style]:data-[swipe-direction=left]:[transform:translateX(calc(var(--toast-swipe-movement-x,0px)-150%))_translateY(var(--offset-y))]\",\n \"data-[ending-style]:data-[swipe-direction=right]:[transform:translateX(calc(var(--toast-swipe-movement-x,0px)+150%))_translateY(var(--offset-y))]\",\n \"data-[swiping]:[transition:none]\",\n // Status inks: hairline, glyph, and title tint together per type.\n \"data-[type=success]:[&_[data-toast-icon]]:text-pho-success data-[type=success]:[&_[data-toast-title]]:text-pho-success data-[type=success]:[&_[data-toast-action]]:text-pho-success data-[type=success]:[&_[data-toast-close]]:text-pho-success data-[type=success]:ring-[color-mix(in_oklab,var(--text-color-pho-success)_45%,transparent)] data-[type=success]:[&_[data-toast-action]]:ring-[color-mix(in_oklab,var(--text-color-pho-success)_45%,transparent)]\",\n \"data-[type=error]:[&_[data-toast-icon]]:text-pho-error data-[type=error]:[&_[data-toast-title]]:text-pho-error data-[type=error]:[&_[data-toast-action]]:text-pho-error data-[type=error]:[&_[data-toast-close]]:text-pho-error data-[type=error]:ring-[color-mix(in_oklab,var(--text-color-pho-error)_45%,transparent)] data-[type=error]:[&_[data-toast-action]]:ring-[color-mix(in_oklab,var(--text-color-pho-error)_45%,transparent)]\",\n \"data-[type=warning]:[&_[data-toast-icon]]:text-pho-warning data-[type=warning]:[&_[data-toast-title]]:text-pho-warning data-[type=warning]:[&_[data-toast-action]]:text-pho-warning data-[type=warning]:[&_[data-toast-close]]:text-pho-warning data-[type=warning]:ring-[color-mix(in_oklab,var(--text-color-pho-warning)_45%,transparent)] data-[type=warning]:[&_[data-toast-action]]:ring-[color-mix(in_oklab,var(--text-color-pho-warning)_45%,transparent)]\",\n \"data-[type=info]:[&_[data-toast-icon]]:text-pho-brand data-[type=info]:[&_[data-toast-title]]:text-pho-brand data-[type=info]:[&_[data-toast-action]]:text-pho-brand data-[type=info]:[&_[data-toast-close]]:text-pho-brand data-[type=info]:ring-[color-mix(in_oklab,var(--text-color-pho-brand)_45%,transparent)] data-[type=info]:[&_[data-toast-action]]:ring-[color-mix(in_oklab,var(--text-color-pho-brand)_45%,transparent)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Content({\n className,\n ...props\n}: StyledProps<typeof BaseToast.Content>) {\n return (\n <BaseToast.Content\n // Cards behind the front one show only their peeking edge — the\n // words appear when the stack expands.\n className={cn(\n \"isolate flex flex-col p-4 pr-10 transition-opacity [transition-duration:250ms]\",\n \"data-[behind]:pointer-events-none data-[behind]:opacity-0 data-[expanded]:pointer-events-auto data-[expanded]:opacity-100\",\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction Title({ className, ...props }: StyledProps<typeof BaseToast.Title>) {\n return (\n <BaseToast.Title\n data-toast-title\n className={cn(\"text-pho-primary text-md font-medium\", className)}\n {...props}\n />\n );\n}\n\nfunction Description({\n className,\n ...props\n}: StyledProps<typeof BaseToast.Description>) {\n return (\n <BaseToast.Description\n className={cn(\"text-pho-description text-md\", className)}\n {...props}\n />\n );\n}\n\nfunction Close({ className, ...props }: StyledProps<typeof BaseToast.Close>) {\n return (\n <BaseToast.Close\n data-toast-close\n className={cn(\n \"text-pho-secondary hover:text-pho-secondary-hover hover:bg-pho-ghost-hover outline-pho-brand absolute top-2.5 right-2.5 flex size-6 cursor-pointer items-center justify-center rounded-sm transition focus-visible:outline-2 [&>svg]:size-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/**\n * The status glyph for a typed toast — its own row above the title, the\n * Dialog header's arrangement at card scale, an 8px breath before the\n * title. `loading` shows the spinner.\n */\nfunction TypeIcon({ type }: { type?: string }) {\n if (type === \"loading\") {\n return <Spinner aria-hidden className=\"mb-2 size-6 shrink-0\" />;\n }\n const Glyph = type != null ? TOAST_ICONS[type] : undefined;\n if (Glyph == null) return null;\n return <Glyph aria-hidden data-toast-icon className=\"mb-2 size-6 shrink-0\" />;\n}\n\nfunction ToastyList() {\n const { toasts, close } = BaseToast.useToastManager();\n const reduceMotion = useReducedMotion();\n const blurAway = reduceMotion ? \"blur(0px)\" : `blur(${BLUR_MAX_PX}px)`;\n return toasts.map((toast) => (\n <Root key={toast.id} toast={toast}>\n {/* The status wash: a breath of the status ink over the surface. */}\n <div\n aria-hidden\n className={cn(\n \"pointer-events-none absolute inset-0 rounded-[inherit] transition-colors duration-200 ease-out\",\n toast.type != null ? TOAST_WASH[toast.type] : undefined,\n )}\n />\n <Content>\n {/* One grid cell, faces stacked: when a promise walks the card\n from loading to its outcome, the old face fades out through\n the system's soft focus exactly where the new one fades in —\n the values ride each face, so the goer keeps its words. */}\n <span className=\"grid\">\n <AnimatePresence initial={false}>\n <motion.div\n key={`${toast.type ?? \"\"}|${String(toast.title ?? \"\")}`}\n className=\"flex min-w-0 flex-col [grid-area:1/1]\"\n initial={{ opacity: 0, filter: blurAway }}\n animate={{ opacity: 1, filter: \"blur(0px)\" }}\n exit={{ opacity: 0, filter: blurAway }}\n transition={FACE_SWAP}\n >\n <TypeIcon type={toast.type} />\n <Title>{toast.title}</Title>\n <Description>{toast.description}</Description>\n {toast.actionProps != null ? (\n <Action\n data-toast-action\n render={<Button variant=\"outlined\" size=\"sm\" />}\n className=\"mt-2 self-start\"\n onClick={(event) => {\n toast.actionProps?.onClick?.(event);\n close(toast.id);\n }}\n >\n {toast.actionProps.children}\n </Action>\n ) : null}\n </motion.div>\n </AnimatePresence>\n </span>\n </Content>\n <Close aria-label=\"Dismiss\">\n <IconX />\n </Close>\n </Root>\n ));\n}\n\n/**\n * Toasty — the whole toast system in one wrapper, Kumo-shaped: provider,\n * portal, viewport, and the stacked card list with status variants. Wrap\n * the app once and call `Toast.useToastManager().add({ title, type })`\n * from any child; pass a `toastManager` from `createToastManager()` so\n * code outside the tree (a form's auto-save, a query cache) can speak\n * through the same lane. `manager.promise` shows loading → success/error\n * with the matching glyphs.\n */\nexport function Toasty({\n children,\n toastManager,\n}: {\n children?: ReactNode;\n toastManager?: ComponentProps<typeof BaseToast.Provider>[\"toastManager\"];\n}) {\n return (\n <Provider toastManager={toastManager}>\n {children}\n <Portal>\n <Viewport>\n <ToastyList />\n </Viewport>\n </Portal>\n </Provider>\n );\n}\n\n/**\n * Toast built on Base UI `Toast` — transient, non-blocking notifications\n * in a sonner-style stack, styled after Cloudflare's Kumo: at rest the\n * cards collapse into a peek (12px rise and −10% scale per depth, words\n * hidden behind the front card), expand into a true list with a 12px gap\n * on hover or focus, swipe to dismiss, three visible at most. `type`\n * (`success` / `error` / `warning` / `info` / `loading`) tints hairline,\n * glyph, and title together. Reach for `Toasty` unless you need to\n * compose the parts yourself.\n */\nexport const Toast = {\n Provider,\n Portal,\n Viewport,\n Root,\n Content,\n Title,\n Description,\n Close,\n Action,\n useToastManager,\n createToastManager,\n};\n"],"x_google_ignoreList":[0,1,2,3],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { a, c as s, d as o, i as n, l as T, n as B, o as u, r as e, s as f, t as i, u as r } from "../chunks/button-CgUS0j3D.js";
2
+ import { a, c as s, d as o, i as n, l as T, n as B, o as u, r as e, s as f, t as i, u as r } from "../chunks/button-C9VqBBIr.js";
3
3
  import { t as E } from "../chunks/close-button-GvqWbLl0.js";
4
4
  export {
5
5
  i as BUTTON_COLORS,
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { t as e } from "../chunks/chat-BXjycPi9.js";
2
+ import { t as e } from "../chunks/chat-B0WIgEyM.js";
3
3
  export {
4
4
  e as Chat
5
5
  };
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { n as e, t } from "../chunks/code-block-BGgbp-6Q.js";
2
+ import { n as e, t } from "../chunks/code-block-BuFfh0zH.js";
3
3
  export {
4
4
  t as CodeBlock,
5
5
  e as tokenizeJson
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { n as t, t as a } from "../chunks/command-BfCCRaoc.js";
2
+ import { n as t, t as a } from "../chunks/command-iYvU6Mhf.js";
3
3
  export {
4
4
  a as Command,
5
5
  t as useCommandState
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { n as i, t as o } from "../chunks/dialog-DeM4axJ6.js";
2
+ import { n as i, t as o } from "../chunks/dialog-MPvem7yV.js";
3
3
  export {
4
4
  o as Dialog,
5
5
  i as useDialogPending
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { a, c as s, i as t, l as e, n as o, o as i, r as E, s as p, t as l } from "../chunks/error-VvHnteyf.js";
2
+ import { a, c as s, i as t, l as e, n as o, o as i, r as E, s as p, t as l } from "../chunks/error-D5SzZ0ev.js";
3
3
  export {
4
4
  l as Error,
5
5
  o as ErrorView,
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { i as t, n as e, r as a, t as i } from "../chunks/filter-bar-BcpeTKCC.js";
2
+ import { i as t, n as e, r as a, t as i } from "../chunks/filter-bar-B-oYYBsU.js";
3
3
  export {
4
4
  i as FILTER_DATE_PRESETS,
5
5
  e as FilterBar,
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { i as a, n as o, r as s, t as e } from "../chunks/log-list-Didt-MV4.js";
2
+ import { i as a, n as o, r as s, t as e } from "../chunks/log-list-tNuCFGlP.js";
3
3
  export {
4
4
  e as LogList,
5
5
  o as logStatusColor,
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { n as e, r as a, t } from "../chunks/message-CTml-TrB.js";
2
+ import { n as e, r as a, t } from "../chunks/message-Dz2-numf.js";
3
3
  export {
4
4
  a as Message,
5
5
  t as messageStatusKey,
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { n as o, t as s } from "../chunks/toast-DUvjSZF7.js";
2
+ import { n as o, t as s } from "../chunks/toast-BACxYsv6.js";
3
3
  export {
4
4
  s as Toast,
5
5
  o as Toasty
package/dist/index.js CHANGED
@@ -7,33 +7,33 @@ import { BAR_RISE_PX as n, BLUR_PX as m, EASE_POP as I, EASE_STACK as T, FADE_EN
7
7
  import { n as V, r as d, t as U } from "./chunks/use-press-pulse-IbNstUT0.js";
8
8
  import { n as b, t as g } from "./chunks/use-copy-D6JwKUll.js";
9
9
  import "./utils.js";
10
- import { a as F, c as k, d as v, i as w, l as W, n as x, o as y, r as H, s as K, t as z, u as X } from "./chunks/button-CgUS0j3D.js";
11
- import { a as Z, c as j, i as J, l as Q, n as q, o as $, r as aa, s as sa, t as ta } from "./chunks/error-VvHnteyf.js";
12
- import { t as oa } from "./chunks/chat-BXjycPi9.js";
10
+ import { a as F, c as k, d as v, i as w, l as W, n as x, o as y, r as H, s as K, t as z, u as X } from "./chunks/button-C9VqBBIr.js";
11
+ import { a as Z, c as j, i as J, l as Q, n as q, o as $, r as aa, s as sa, t as ta } from "./chunks/error-D5SzZ0ev.js";
12
+ import { t as oa } from "./chunks/chat-B0WIgEyM.js";
13
13
  import { A as ia, B as Ea, C as Sa, D as _a, E as na, F as ma, I as Ia, L as Ta, M as pa, N as Aa, O as Ra, P as la, R as Ca, S as Ba, T as fa, V as ua, _ as Na, a as Pa, b as La, c as ca, d as Da, f as Oa, g as Va, h as da, i as Ua, j as Ga, k as ba, l as ga, m as Ma, n as ha, o as Fa, p as ka, r as va, s as wa, t as Wa, u as xa, v as ya, w as Ha, x as Ka, y as za, z as Xa } from "./chunks/trace-CjOi3_IP.js";
14
14
  import { n as Za, t as ja } from "./chunks/date-picker-CZbcNIe-.js";
15
15
  import { n as Qa, t as qa } from "./chunks/copy-button-D8XyP0oR.js";
16
- import { a as as, c as ss, d as ts, i as rs, l as os, n as es, o as is, r as Es, s as Ss, t as _s, u as ns } from "./chunks/sidebar-BmloUwJQ.js";
16
+ import { a as as, c as ss, d as ts, i as rs, l as os, n as es, o as is, r as Es, s as Ss, t as _s, u as ns } from "./chunks/sidebar-BP39w1iA.js";
17
17
  import { t as Is } from "./chunks/input-DjvZoF8v.js";
18
- import { i as ps, n as As, r as Rs, t as ls } from "./chunks/filter-bar-BcpeTKCC.js";
18
+ import { i as ps, n as As, r as Rs, t as ls } from "./chunks/filter-bar-B-oYYBsU.js";
19
19
  import { a as Bs } from "./chunks/data-table-Mog6m3d9.js";
20
- import { n as us, t as Ns } from "./chunks/code-block-BGgbp-6Q.js";
20
+ import { n as us, t as Ns } from "./chunks/code-block-BuFfh0zH.js";
21
21
  import { n as Ls, t as cs } from "./chunks/stat-hnNqjWVG.js";
22
22
  import { t as Os } from "./chunks/calendar-4OFiCLAv.js";
23
23
  import { t as ds } from "./chunks/close-button-GvqWbLl0.js";
24
24
  import { t as Gs } from "./chunks/input-group-fc9_jD4d.js";
25
25
  import { n as gs, t as Ms } from "./chunks/card-N-tvFsuV.js";
26
- import { n as Fs, t as ks } from "./chunks/dialog-DeM4axJ6.js";
26
+ import { n as Fs, t as ks } from "./chunks/dialog-MPvem7yV.js";
27
27
  import { i as ws, n as Ws, r as xs, t as ys } from "./chunks/status-view-C8tabjDu.js";
28
28
  import { t as Ks } from "./chunks/description-list-8qm83WZB.js";
29
- import { a as Xs, c as Ys, d as Zs, f as js, i as Js, l as Qs, m as qs, n as $s, o as at, p as st, r as tt, s as rt, t as ot, u as et } from "./chunks/basic-page-D2PDJklw.js";
29
+ import { a as Xs, c as Ys, d as Zs, f as js, i as Js, l as Qs, m as qs, n as $s, o as at, p as st, r as tt, s as rt, t as ot, u as et } from "./chunks/basic-page-E_on0m1X.js";
30
30
  import { i as Et, n as St, r as _t, t as nt } from "./chunks/legend-C0mU7dqd.js";
31
31
  import "./components/chart.js";
32
32
  import { t as Tt } from "./chunks/bar-chart-DIALC2_z.js";
33
33
  import { t as At } from "./chunks/line-chart-VuMYKzW3.js";
34
- import { i as lt, n as Ct, r as Bt, t as ft } from "./chunks/log-list-Didt-MV4.js";
34
+ import { i as lt, n as Ct, r as Bt, t as ft } from "./chunks/log-list-tNuCFGlP.js";
35
35
  import { n as Nt, t as Pt } from "./chunks/bubble-eaoLJP4N.js";
36
- import { n as ct, r as Dt, t as Ot } from "./chunks/message-CTml-TrB.js";
36
+ import { n as ct, r as Dt, t as Ot } from "./chunks/message-Dz2-numf.js";
37
37
  export {
38
38
  ot as AUTO_SAVE_DELAY_MS,
39
39
  n as BAR_RISE_PX,
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { a as s } from "../chunks/data-table-Mog6m3d9.js";
3
- import { a as E, c as a, d as C, f as S, i as I, l as e, m as o, n as B, o as P, p as N, r, s as t, t as D, u as R } from "../chunks/basic-page-D2PDJklw.js";
3
+ import { a as E, c as a, d as C, f as S, i as I, l as e, m as o, n as B, o as P, p as N, r, s as t, t as D, u as R } from "../chunks/basic-page-E_on0m1X.js";
4
4
  export {
5
5
  D as AUTO_SAVE_DELAY_MS,
6
6
  B as BASIC_PAGE_CALLOUT,
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { a as I, c as _, d as S, i as R, l as A, n as B, o as T, r as a, s, t as D, u as N } from "../chunks/sidebar-BmloUwJQ.js";
2
+ import { a as I, c as _, d as S, i as R, l as A, n as B, o as T, r as a, s, t as D, u as N } from "../chunks/sidebar-BP39w1iA.js";
3
3
  export {
4
4
  D as SIDEBAR_HEADER_INSET,
5
5
  B as SIDEBAR_ITEM,
@@ -2,13 +2,13 @@ import { AnchorHTMLAttributes, ButtonHTMLAttributes, FC, ReactNode, Ref } from '
2
2
  /**
3
3
  * Size axis — padding, text size, and icon-only (svgOnly) padding.
4
4
  *
5
- * Icon-side tuck (LiftKit-derived optical correction): a side that carries an
6
- * icon gets its padding divided by the golden ratio — an icon's rounded form
7
- * brings its own whitespace, so the full text-edge padding reads as a hole.
8
- * LiftKit: `--button-padX-sideWithIcon: calc(font-size / 1.618)`. Applied to
9
- * Pho's paddings: sm 14px/φ ≈ 8px · md 16px/φ ≈ 10px · lg 20px/φ ≈ 12px,
10
- * selected structurally via `:has()` on the slot markers (`data-icon` is
11
- * `prefix`, `suffix`, or `loading` — the spinner is an icon too).
5
+ * Icon-side tuck (optical correction): a side that carries an icon sits 4px
6
+ * closer to its edge than the label does to the other — sm 12/16 · md 14/18 ·
7
+ * lg 18/22. An icon's box brings its own whitespace, so equal padding reads
8
+ * as a looser icon side; the tuck is small enough to look equal, not measured
9
+ * to be. Selected structurally via `:has()` on the slot markers (`data-icon`
10
+ * is `prefix`, `suffix`, or `loading` — the spinner is an icon too). The
11
+ * label has no padding of its own: its inset from an icon is the `gap`.
12
12
  */
13
13
  export declare const BUTTON_SIZES: {
14
14
  sm: {
@@ -9,14 +9,18 @@ export interface MessageStatusItem {
9
9
  }
10
10
  /**
11
11
  * The coalesce key for a row: outbound status word, lowercased. Inbound
12
- * and empty statuses are `null`, so they break a run. A failure keeps its
12
+ * and empty statuses are `null`: they carry no status and sit outside the
13
+ * runs (see `shouldShowMessageStatus`). A failure keeps its
13
14
  * whole text (`failed. 30007`) so two different error codes never
14
15
  * collapse into one caption.
15
16
  */
16
17
  export declare function messageStatusKey(outbound: boolean, status: string | null | undefined): string | null;
17
18
  /**
18
19
  * Whether this row should render its outbound status (Delivered, Sent,
19
- * Failed). Only the last message in a consecutive same-status run shows
20
- * it. Inbound never does.
20
+ * Failed). Only the last message in a same-status run shows it. Inbound
21
+ * never does, and a reply in between does not break the run: the run is
22
+ * over the outbound messages alone, so a conversation going back and forth
23
+ * wears one Delivered, under the latest message it holds for, not one
24
+ * under every turn.
21
25
  */
22
26
  export declare function shouldShowMessageStatus(messages: readonly MessageStatusItem[], index: number): boolean;
@@ -95,8 +95,13 @@ export interface BasicPageRootProps extends ComponentProps<"div"> {
95
95
  * and its control drift out of one glance. Either width can host an
96
96
  * `Aside` — the column keeps its cap beside the panel, and leftover
97
97
  * space is margin, not content width.
98
+ *
99
+ * `full` takes the cap and the gutters off: the column is the pane, edge
100
+ * to edge, with no trim under it. For a page that is one surface filling
101
+ * the pane (an inbox, a board) — pair it with `condense="pinned"`, and
102
+ * `Stack` sits flush under the bar. Its content brings its own padding.
98
103
  */
99
- width?: "base" | "wide";
104
+ width?: "base" | "wide" | "full";
100
105
  /**
101
106
  * This page was painted before React — rendered to a string and inlined
102
107
  * ahead of the bundle (a boot skeleton), or the React twin re-rendering
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@photon-ai/pho-ui",
3
- "version": "4.6.0",
3
+ "version": "4.7.0",
4
4
  "description": "Pho Design System — Photon's React component library, built on Base UI",
5
5
  "license": "UNLICENSED",
6
6
  "repository": {