@agimon-ai/doompi-web-components 0.0.1-alpha.26 → 0.0.1-alpha.27

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 (113) hide show
  1. package/dist/components/PdfPreview.d.cts.map +1 -1
  2. package/dist/src/components/Accordion.cjs +1 -1
  3. package/dist/src/components/Accordion.cjs.map +1 -1
  4. package/dist/src/components/Accordion.mjs +1 -1
  5. package/dist/src/components/Accordion.mjs.map +1 -1
  6. package/dist/src/components/Avatar.cjs +1 -1
  7. package/dist/src/components/Avatar.cjs.map +1 -1
  8. package/dist/src/components/Avatar.mjs +1 -1
  9. package/dist/src/components/Avatar.mjs.map +1 -1
  10. package/dist/src/components/Badge.cjs +1 -1
  11. package/dist/src/components/Badge.cjs.map +1 -1
  12. package/dist/src/components/Badge.mjs +1 -1
  13. package/dist/src/components/Badge.mjs.map +1 -1
  14. package/dist/src/components/Breadcrumb.cjs +1 -1
  15. package/dist/src/components/Breadcrumb.cjs.map +1 -1
  16. package/dist/src/components/Breadcrumb.mjs +1 -1
  17. package/dist/src/components/Breadcrumb.mjs.map +1 -1
  18. package/dist/src/components/Button.cjs +1 -1
  19. package/dist/src/components/Button.cjs.map +1 -1
  20. package/dist/src/components/Button.mjs +1 -1
  21. package/dist/src/components/Button.mjs.map +1 -1
  22. package/dist/src/components/Checkbox.cjs +1 -1
  23. package/dist/src/components/Checkbox.cjs.map +1 -1
  24. package/dist/src/components/Checkbox.mjs +1 -1
  25. package/dist/src/components/Checkbox.mjs.map +1 -1
  26. package/dist/src/components/CodeBlock.cjs +1 -1
  27. package/dist/src/components/CodeBlock.cjs.map +1 -1
  28. package/dist/src/components/CodeBlock.mjs +1 -1
  29. package/dist/src/components/CodeBlock.mjs.map +1 -1
  30. package/dist/src/components/Command.cjs +1 -1
  31. package/dist/src/components/Command.cjs.map +1 -1
  32. package/dist/src/components/Command.mjs +1 -1
  33. package/dist/src/components/Command.mjs.map +1 -1
  34. package/dist/src/components/Dialog.cjs +1 -1
  35. package/dist/src/components/Dialog.cjs.map +1 -1
  36. package/dist/src/components/Dialog.mjs +1 -1
  37. package/dist/src/components/Dialog.mjs.map +1 -1
  38. package/dist/src/components/DropdownMenu.cjs +1 -1
  39. package/dist/src/components/DropdownMenu.cjs.map +1 -1
  40. package/dist/src/components/DropdownMenu.mjs +1 -1
  41. package/dist/src/components/DropdownMenu.mjs.map +1 -1
  42. package/dist/src/components/EmptyState.cjs +1 -1
  43. package/dist/src/components/EmptyState.cjs.map +1 -1
  44. package/dist/src/components/EmptyState.mjs +1 -1
  45. package/dist/src/components/EmptyState.mjs.map +1 -1
  46. package/dist/src/components/Input.cjs +1 -1
  47. package/dist/src/components/Input.cjs.map +1 -1
  48. package/dist/src/components/Input.mjs +1 -1
  49. package/dist/src/components/Input.mjs.map +1 -1
  50. package/dist/src/components/Kbd.cjs +1 -1
  51. package/dist/src/components/Kbd.cjs.map +1 -1
  52. package/dist/src/components/Kbd.mjs +1 -1
  53. package/dist/src/components/Kbd.mjs.map +1 -1
  54. package/dist/src/components/Label.cjs +1 -1
  55. package/dist/src/components/Label.cjs.map +1 -1
  56. package/dist/src/components/Label.mjs +1 -1
  57. package/dist/src/components/Label.mjs.map +1 -1
  58. package/dist/src/components/Markdown.cjs +2 -2
  59. package/dist/src/components/Markdown.cjs.map +1 -1
  60. package/dist/src/components/Markdown.mjs +2 -2
  61. package/dist/src/components/Markdown.mjs.map +1 -1
  62. package/dist/src/components/MessageItem.cjs +1 -1
  63. package/dist/src/components/MessageItem.cjs.map +1 -1
  64. package/dist/src/components/MessageItem.mjs +1 -1
  65. package/dist/src/components/MessageItem.mjs.map +1 -1
  66. package/dist/src/components/OptionList.cjs +1 -1
  67. package/dist/src/components/OptionList.cjs.map +1 -1
  68. package/dist/src/components/OptionList.mjs +1 -1
  69. package/dist/src/components/OptionList.mjs.map +1 -1
  70. package/dist/src/components/Panel.cjs +1 -1
  71. package/dist/src/components/Panel.cjs.map +1 -1
  72. package/dist/src/components/Panel.mjs +1 -1
  73. package/dist/src/components/Panel.mjs.map +1 -1
  74. package/dist/src/components/PdfPreview.cjs +1 -1
  75. package/dist/src/components/PdfPreview.cjs.map +1 -1
  76. package/dist/src/components/PdfPreview.d.mts.map +1 -1
  77. package/dist/src/components/PdfPreview.mjs +1 -1
  78. package/dist/src/components/PdfPreview.mjs.map +1 -1
  79. package/dist/src/components/Popover.cjs +1 -1
  80. package/dist/src/components/Popover.cjs.map +1 -1
  81. package/dist/src/components/Popover.mjs +1 -1
  82. package/dist/src/components/Popover.mjs.map +1 -1
  83. package/dist/src/components/SectionLabel.cjs +1 -1
  84. package/dist/src/components/SectionLabel.cjs.map +1 -1
  85. package/dist/src/components/SectionLabel.mjs +1 -1
  86. package/dist/src/components/SectionLabel.mjs.map +1 -1
  87. package/dist/src/components/Select.cjs +1 -1
  88. package/dist/src/components/Select.cjs.map +1 -1
  89. package/dist/src/components/Select.mjs +1 -1
  90. package/dist/src/components/Select.mjs.map +1 -1
  91. package/dist/src/components/Sheet.cjs +1 -1
  92. package/dist/src/components/Sheet.cjs.map +1 -1
  93. package/dist/src/components/Sheet.mjs +1 -1
  94. package/dist/src/components/Sheet.mjs.map +1 -1
  95. package/dist/src/components/StatusBadge.cjs +1 -1
  96. package/dist/src/components/StatusBadge.cjs.map +1 -1
  97. package/dist/src/components/StatusBadge.mjs +1 -1
  98. package/dist/src/components/StatusBadge.mjs.map +1 -1
  99. package/dist/src/components/Tabs.cjs +1 -1
  100. package/dist/src/components/Tabs.cjs.map +1 -1
  101. package/dist/src/components/Tabs.mjs +1 -1
  102. package/dist/src/components/Tabs.mjs.map +1 -1
  103. package/dist/src/components/Toast.cjs +1 -1
  104. package/dist/src/components/Toast.cjs.map +1 -1
  105. package/dist/src/components/Toast.mjs +1 -1
  106. package/dist/src/components/Toast.mjs.map +1 -1
  107. package/dist/src/components/Tooltip.cjs +1 -1
  108. package/dist/src/components/Tooltip.cjs.map +1 -1
  109. package/dist/src/components/Tooltip.mjs +1 -1
  110. package/dist/src/components/Tooltip.mjs.map +1 -1
  111. package/package.json +2 -2
  112. package/styles/preview.css +17 -0
  113. package/styles/tokens.css +50 -0
@@ -1 +1 @@
1
- {"version":3,"file":"PdfPreview.d.cts","names":[],"sources":["../../src/components/PdfPreview.tsx"],"mappings":";iBAKiB;EACf;EACA;EACA;EACA;;iBAGe;EACf;EACA;EACA;EACA;;iBAGe;EACf;EACA,MAAM;;iBAGS;EACf,gBAAgB;EAChB,UAAU;EACV,wBAAwB;IACtB;IACA;IACA;IACA;QACI;EACN,cAAc,mCAAmC,qBAAqB,QAAQ;;iBAG/D;EACf;EACA;EACA;EACA;EACA,gCAAgC,IAAI;;wBAUtB,yBACd,cACA;EAAU;EAAc;EAAa;EAAe;EAAgB;EAAe;GACnF;EAAa;EAAc;EAAa;EAAe;IACtD;;wBA0Ba,aAAa,KAAK,MAAM,WAAW,8BAA8B,UAAU,kCAAe,IAAA"}
1
+ {"version":3,"file":"PdfPreview.d.cts","names":[],"sources":["../../src/components/PdfPreview.tsx"],"mappings":";iBAOiB;EACf;EACA;EACA;EACA;;iBAGe;EACf;EACA;EACA;EACA;;iBAGe;EACf;EACA,MAAM;;iBAGS;EACf,gBAAgB;EAChB,UAAU;EACV,wBAAwB;IACtB;IACA;IACA;IACA;QACI;EACN,cAAc,mCAAmC,qBAAqB,QAAQ;;iBAG/D;EACf;EACA;EACA;EACA;EACA,gCAAgC,IAAI;;wBAUtB,yBACd,cACA;EAAU;EAAc;EAAa;EAAe;EAAgB;EAAe;GACnF;EAAa;EAAc;EAAa;EAAe;IACtD;;wBA0Ba,aAAa,KAAK,MAAM,WAAW,8BAA8B,UAAU,kCAAe,IAAA"}
@@ -1,2 +1,2 @@
1
- require("../icons/icons.cjs");const e=require("../lib/cn.cjs");let t=require("radix-ui"),n=require("react/jsx-runtime"),r=require("lucide-react");function i(e){return(0,n.jsx)(t.Accordion.Root,{"data-slot":`accordion`,...e})}function a({className:r,...i}){return(0,n.jsx)(t.Accordion.Item,{"data-slot":`accordion-item`,className:e.cn(`border-b border-doom-border-soft last:border-b-0`,r),...i})}function o({className:i,children:a,...o}){return(0,n.jsx)(t.Accordion.Header,{className:`flex`,children:(0,n.jsxs)(t.Accordion.Trigger,{"data-slot":`accordion-trigger`,className:e.cn(`flex flex-1 cursor-pointer items-center justify-between gap-2 py-2 text-left text-[11px] text-doom-hi outline-none transition-colors hover:text-doom-blue focus-visible:text-doom-blue [&[data-state=open]>svg]:rotate-180`,i),...o,children:[a,(0,n.jsx)(r.ChevronDown,{className:`h-3 w-3 shrink-0 text-doom-faint transition-transform`})]})})}function s({className:r,...i}){return(0,n.jsx)(t.Accordion.Content,{"data-slot":`accordion-content`,className:e.cn(`overflow-hidden pb-2 text-[11px] text-doom-dim`,r),...i})}exports.Accordion=i,exports.AccordionContent=s,exports.AccordionItem=a,exports.AccordionTrigger=o;
1
+ require("../icons/icons.cjs");const e=require("../lib/cn.cjs");let t=require("radix-ui"),n=require("react/jsx-runtime"),r=require("lucide-react");function i(e){return(0,n.jsx)(t.Accordion.Root,{"data-slot":`accordion`,...e})}function a({className:r,...i}){return(0,n.jsx)(t.Accordion.Item,{"data-slot":`accordion-item`,className:e.cn(`border-b border-doom-border-soft last:border-b-0`,r),...i})}function o({className:i,children:a,...o}){return(0,n.jsx)(t.Accordion.Header,{className:`flex`,children:(0,n.jsxs)(t.Accordion.Trigger,{"data-slot":`accordion-trigger`,className:e.cn(`flex flex-1 cursor-pointer items-center justify-between gap-2 py-2 text-left text-sm text-doom-hi outline-none transition-colors hover:text-doom-blue focus-visible:text-doom-blue [&[data-state=open]>svg]:rotate-180`,i),...o,children:[a,(0,n.jsx)(r.ChevronDown,{className:`h-3 w-3 shrink-0 text-doom-faint transition-transform`})]})})}function s({className:r,...i}){return(0,n.jsx)(t.Accordion.Content,{"data-slot":`accordion-content`,className:e.cn(`overflow-hidden pb-2 text-sm text-doom-dim`,r),...i})}exports.Accordion=i,exports.AccordionContent=s,exports.AccordionItem=a,exports.AccordionTrigger=o;
2
2
  //# sourceMappingURL=Accordion.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Accordion.cjs","names":["AccordionPrimitive","cn","ChevronDownIcon"],"sources":["../../../src/components/Accordion.tsx"],"sourcesContent":["import { Accordion as AccordionPrimitive } from 'radix-ui';\nimport type { ComponentProps } from 'react';\nimport { ChevronDownIcon } from '../icons/icons.ts';\nimport { cn } from '../lib/cn.ts';\n\n/** Several collapsibles that know about each other; pass type=\"single\" for one open at a time. */\nexport function Accordion(props: ComponentProps<typeof AccordionPrimitive.Root>) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />;\n}\n\nexport function AccordionItem({ className, ...props }: ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn('border-b border-doom-border-soft last:border-b-0', className)}\n {...props}\n />\n );\n}\n\nexport function AccordionTrigger({ className, children, ...props }: ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n 'flex flex-1 cursor-pointer items-center justify-between gap-2 py-2 text-left text-[11px] text-doom-hi outline-none transition-colors hover:text-doom-blue focus-visible:text-doom-blue [&[data-state=open]>svg]:rotate-180',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\"h-3 w-3 shrink-0 text-doom-faint transition-transform\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n}\n\nexport function AccordionContent({ className, ...props }: ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className={cn('overflow-hidden pb-2 text-[11px] text-doom-dim', className)}\n {...props}\n />\n );\n}\n"],"mappings":"kJAMA,SAAgB,EAAU,EAAuD,CAC/E,OAAO,EAAA,EAAA,IAAA,CAACA,EAAAA,UAAmB,KAApB,CAAyB,YAAU,YAAY,GAAI,CAAQ,CAAA,CACpE,CAEA,SAAgB,EAAc,CAAE,YAAW,GAAG,GAAyD,CACrG,OACE,EAAA,EAAA,IAAA,CAACA,EAAAA,UAAmB,KAApB,CACE,YAAU,iBACV,UAAWC,EAAAA,GAAG,mDAAoD,CAAS,EAC3E,GAAI,CACL,CAAA,CAEL,CAEA,SAAgB,EAAiB,CAAE,YAAW,WAAU,GAAG,GAA4D,CACrH,OACE,EAAA,EAAA,IAAA,CAACD,EAAAA,UAAmB,OAApB,CAA2B,UAAU,OACnC,UAAA,EAAA,EAAA,KAAA,CAACA,EAAAA,UAAmB,QAApB,CACE,YAAU,oBACV,UAAWC,EAAAA,GACT,6NACA,CACF,EACA,GAAI,EANN,SAAA,CAQG,GACD,EAAA,EAAA,IAAA,CAACC,EAAAA,YAAD,CAAiB,UAAU,uDAAyD,CAAA,CAC1D,GACH,CAAA,CAE/B,CAEA,SAAgB,EAAiB,CAAE,YAAW,GAAG,GAA4D,CAC3G,OACE,EAAA,EAAA,IAAA,CAACF,EAAAA,UAAmB,QAApB,CACE,YAAU,oBACV,UAAWC,EAAAA,GAAG,iDAAkD,CAAS,EACzE,GAAI,CACL,CAAA,CAEL"}
1
+ {"version":3,"file":"Accordion.cjs","names":["AccordionPrimitive","cn","ChevronDownIcon"],"sources":["../../../src/components/Accordion.tsx"],"sourcesContent":["import { Accordion as AccordionPrimitive } from 'radix-ui';\nimport type { ComponentProps } from 'react';\nimport { ChevronDownIcon } from '../icons/icons.ts';\nimport { cn } from '../lib/cn.ts';\n\n/** Several collapsibles that know about each other; pass type=\"single\" for one open at a time. */\nexport function Accordion(props: ComponentProps<typeof AccordionPrimitive.Root>) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />;\n}\n\nexport function AccordionItem({ className, ...props }: ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn('border-b border-doom-border-soft last:border-b-0', className)}\n {...props}\n />\n );\n}\n\nexport function AccordionTrigger({ className, children, ...props }: ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n 'flex flex-1 cursor-pointer items-center justify-between gap-2 py-2 text-left text-sm text-doom-hi outline-none transition-colors hover:text-doom-blue focus-visible:text-doom-blue [&[data-state=open]>svg]:rotate-180',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\"h-3 w-3 shrink-0 text-doom-faint transition-transform\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n}\n\nexport function AccordionContent({ className, ...props }: ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className={cn('overflow-hidden pb-2 text-sm text-doom-dim', className)}\n {...props}\n />\n );\n}\n"],"mappings":"kJAMA,SAAgB,EAAU,EAAuD,CAC/E,OAAO,EAAA,EAAA,IAAA,CAACA,EAAAA,UAAmB,KAApB,CAAyB,YAAU,YAAY,GAAI,CAAQ,CAAA,CACpE,CAEA,SAAgB,EAAc,CAAE,YAAW,GAAG,GAAyD,CACrG,OACE,EAAA,EAAA,IAAA,CAACA,EAAAA,UAAmB,KAApB,CACE,YAAU,iBACV,UAAWC,EAAAA,GAAG,mDAAoD,CAAS,EAC3E,GAAI,CACL,CAAA,CAEL,CAEA,SAAgB,EAAiB,CAAE,YAAW,WAAU,GAAG,GAA4D,CACrH,OACE,EAAA,EAAA,IAAA,CAACD,EAAAA,UAAmB,OAApB,CAA2B,UAAU,OACnC,UAAA,EAAA,EAAA,KAAA,CAACA,EAAAA,UAAmB,QAApB,CACE,YAAU,oBACV,UAAWC,EAAAA,GACT,yNACA,CACF,EACA,GAAI,EANN,SAAA,CAQG,GACD,EAAA,EAAA,IAAA,CAACC,EAAAA,YAAD,CAAiB,UAAU,uDAAyD,CAAA,CAC1D,GACH,CAAA,CAE/B,CAEA,SAAgB,EAAiB,CAAE,YAAW,GAAG,GAA4D,CAC3G,OACE,EAAA,EAAA,IAAA,CAACF,EAAAA,UAAmB,QAApB,CACE,YAAU,oBACV,UAAWC,EAAAA,GAAG,6CAA8C,CAAS,EACrE,GAAI,CACL,CAAA,CAEL"}
@@ -1,2 +1,2 @@
1
- import{ChevronDownIcon as e}from"../icons/icons.mjs";import{cn as t}from"../lib/cn.mjs";import{Accordion as n}from"radix-ui";import{jsx as r,jsxs as i}from"react/jsx-runtime";function a(e){return r(n.Root,{"data-slot":`accordion`,...e})}function o({className:e,...i}){return r(n.Item,{"data-slot":`accordion-item`,className:t(`border-b border-doom-border-soft last:border-b-0`,e),...i})}function s({className:a,children:o,...s}){return r(n.Header,{className:`flex`,children:i(n.Trigger,{"data-slot":`accordion-trigger`,className:t(`flex flex-1 cursor-pointer items-center justify-between gap-2 py-2 text-left text-[11px] text-doom-hi outline-none transition-colors hover:text-doom-blue focus-visible:text-doom-blue [&[data-state=open]>svg]:rotate-180`,a),...s,children:[o,r(e,{className:`h-3 w-3 shrink-0 text-doom-faint transition-transform`})]})})}function c({className:e,...i}){return r(n.Content,{"data-slot":`accordion-content`,className:t(`overflow-hidden pb-2 text-[11px] text-doom-dim`,e),...i})}export{a as Accordion,c as AccordionContent,o as AccordionItem,s as AccordionTrigger};
1
+ import{ChevronDownIcon as e}from"../icons/icons.mjs";import{cn as t}from"../lib/cn.mjs";import{Accordion as n}from"radix-ui";import{jsx as r,jsxs as i}from"react/jsx-runtime";function a(e){return r(n.Root,{"data-slot":`accordion`,...e})}function o({className:e,...i}){return r(n.Item,{"data-slot":`accordion-item`,className:t(`border-b border-doom-border-soft last:border-b-0`,e),...i})}function s({className:a,children:o,...s}){return r(n.Header,{className:`flex`,children:i(n.Trigger,{"data-slot":`accordion-trigger`,className:t(`flex flex-1 cursor-pointer items-center justify-between gap-2 py-2 text-left text-sm text-doom-hi outline-none transition-colors hover:text-doom-blue focus-visible:text-doom-blue [&[data-state=open]>svg]:rotate-180`,a),...s,children:[o,r(e,{className:`h-3 w-3 shrink-0 text-doom-faint transition-transform`})]})})}function c({className:e,...i}){return r(n.Content,{"data-slot":`accordion-content`,className:t(`overflow-hidden pb-2 text-sm text-doom-dim`,e),...i})}export{a as Accordion,c as AccordionContent,o as AccordionItem,s as AccordionTrigger};
2
2
  //# sourceMappingURL=Accordion.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Accordion.mjs","names":["Accordion","AccordionPrimitive"],"sources":["../../../src/components/Accordion.tsx"],"sourcesContent":["import { Accordion as AccordionPrimitive } from 'radix-ui';\nimport type { ComponentProps } from 'react';\nimport { ChevronDownIcon } from '../icons/icons.ts';\nimport { cn } from '../lib/cn.ts';\n\n/** Several collapsibles that know about each other; pass type=\"single\" for one open at a time. */\nexport function Accordion(props: ComponentProps<typeof AccordionPrimitive.Root>) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />;\n}\n\nexport function AccordionItem({ className, ...props }: ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn('border-b border-doom-border-soft last:border-b-0', className)}\n {...props}\n />\n );\n}\n\nexport function AccordionTrigger({ className, children, ...props }: ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n 'flex flex-1 cursor-pointer items-center justify-between gap-2 py-2 text-left text-[11px] text-doom-hi outline-none transition-colors hover:text-doom-blue focus-visible:text-doom-blue [&[data-state=open]>svg]:rotate-180',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\"h-3 w-3 shrink-0 text-doom-faint transition-transform\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n}\n\nexport function AccordionContent({ className, ...props }: ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className={cn('overflow-hidden pb-2 text-[11px] text-doom-dim', className)}\n {...props}\n />\n );\n}\n"],"mappings":"+KAMA,SAAgBA,EAAU,EAAuD,CAC/E,OAAO,EAACC,EAAmB,KAApB,CAAyB,YAAU,YAAY,GAAI,CAAQ,CAAA,CACpE,CAEA,SAAgB,EAAc,CAAE,YAAW,GAAG,GAAyD,CACrG,OACE,EAACA,EAAmB,KAApB,CACE,YAAU,iBACV,UAAW,EAAG,mDAAoD,CAAS,EAC3E,GAAI,CACL,CAAA,CAEL,CAEA,SAAgB,EAAiB,CAAE,YAAW,WAAU,GAAG,GAA4D,CACrH,OACE,EAACA,EAAmB,OAApB,CAA2B,UAAU,OACnC,SAAA,EAACA,EAAmB,QAApB,CACE,YAAU,oBACV,UAAW,EACT,6NACA,CACF,EACA,GAAI,EANN,SAAA,CAQG,EACD,EAAC,EAAD,CAAiB,UAAU,uDAAyD,CAAA,CAC1D,GACH,CAAA,CAE/B,CAEA,SAAgB,EAAiB,CAAE,YAAW,GAAG,GAA4D,CAC3G,OACE,EAACA,EAAmB,QAApB,CACE,YAAU,oBACV,UAAW,EAAG,iDAAkD,CAAS,EACzE,GAAI,CACL,CAAA,CAEL"}
1
+ {"version":3,"file":"Accordion.mjs","names":["Accordion","AccordionPrimitive"],"sources":["../../../src/components/Accordion.tsx"],"sourcesContent":["import { Accordion as AccordionPrimitive } from 'radix-ui';\nimport type { ComponentProps } from 'react';\nimport { ChevronDownIcon } from '../icons/icons.ts';\nimport { cn } from '../lib/cn.ts';\n\n/** Several collapsibles that know about each other; pass type=\"single\" for one open at a time. */\nexport function Accordion(props: ComponentProps<typeof AccordionPrimitive.Root>) {\n return <AccordionPrimitive.Root data-slot=\"accordion\" {...props} />;\n}\n\nexport function AccordionItem({ className, ...props }: ComponentProps<typeof AccordionPrimitive.Item>) {\n return (\n <AccordionPrimitive.Item\n data-slot=\"accordion-item\"\n className={cn('border-b border-doom-border-soft last:border-b-0', className)}\n {...props}\n />\n );\n}\n\nexport function AccordionTrigger({ className, children, ...props }: ComponentProps<typeof AccordionPrimitive.Trigger>) {\n return (\n <AccordionPrimitive.Header className=\"flex\">\n <AccordionPrimitive.Trigger\n data-slot=\"accordion-trigger\"\n className={cn(\n 'flex flex-1 cursor-pointer items-center justify-between gap-2 py-2 text-left text-sm text-doom-hi outline-none transition-colors hover:text-doom-blue focus-visible:text-doom-blue [&[data-state=open]>svg]:rotate-180',\n className,\n )}\n {...props}\n >\n {children}\n <ChevronDownIcon className=\"h-3 w-3 shrink-0 text-doom-faint transition-transform\" />\n </AccordionPrimitive.Trigger>\n </AccordionPrimitive.Header>\n );\n}\n\nexport function AccordionContent({ className, ...props }: ComponentProps<typeof AccordionPrimitive.Content>) {\n return (\n <AccordionPrimitive.Content\n data-slot=\"accordion-content\"\n className={cn('overflow-hidden pb-2 text-sm text-doom-dim', className)}\n {...props}\n />\n );\n}\n"],"mappings":"+KAMA,SAAgBA,EAAU,EAAuD,CAC/E,OAAO,EAACC,EAAmB,KAApB,CAAyB,YAAU,YAAY,GAAI,CAAQ,CAAA,CACpE,CAEA,SAAgB,EAAc,CAAE,YAAW,GAAG,GAAyD,CACrG,OACE,EAACA,EAAmB,KAApB,CACE,YAAU,iBACV,UAAW,EAAG,mDAAoD,CAAS,EAC3E,GAAI,CACL,CAAA,CAEL,CAEA,SAAgB,EAAiB,CAAE,YAAW,WAAU,GAAG,GAA4D,CACrH,OACE,EAACA,EAAmB,OAApB,CAA2B,UAAU,OACnC,SAAA,EAACA,EAAmB,QAApB,CACE,YAAU,oBACV,UAAW,EACT,yNACA,CACF,EACA,GAAI,EANN,SAAA,CAQG,EACD,EAAC,EAAD,CAAiB,UAAU,uDAAyD,CAAA,CAC1D,GACH,CAAA,CAE/B,CAEA,SAAgB,EAAiB,CAAE,YAAW,GAAG,GAA4D,CAC3G,OACE,EAACA,EAAmB,QAApB,CACE,YAAU,oBACV,UAAW,EAAG,6CAA8C,CAAS,EACrE,GAAI,CACL,CAAA,CAEL"}
@@ -1,2 +1,2 @@
1
- const e=require("../lib/cn.cjs");let t=require("radix-ui"),n=require("react/jsx-runtime");function r({className:r,...i}){return(0,n.jsx)(t.Avatar.Root,{"data-slot":`avatar`,className:e.cn(`relative flex h-6 w-6 shrink-0 overflow-hidden rounded-full bg-doom-deep`,r),...i})}function i({className:r,...i}){return(0,n.jsx)(t.Avatar.Image,{"data-slot":`avatar-image`,className:e.cn(`h-full w-full object-cover`,r),...i})}function a({className:r,...i}){return(0,n.jsx)(t.Avatar.Fallback,{"data-slot":`avatar-fallback`,className:e.cn(`flex h-full w-full items-center justify-center text-[10px] font-bold text-doom-dim`,r),...i})}exports.Avatar=r,exports.AvatarFallback=a,exports.AvatarImage=i;
1
+ const e=require("../lib/cn.cjs");let t=require("radix-ui"),n=require("react/jsx-runtime");function r({className:r,...i}){return(0,n.jsx)(t.Avatar.Root,{"data-slot":`avatar`,className:e.cn(`relative flex h-6 w-6 shrink-0 overflow-hidden rounded-full bg-doom-deep`,r),...i})}function i({className:r,...i}){return(0,n.jsx)(t.Avatar.Image,{"data-slot":`avatar-image`,className:e.cn(`h-full w-full object-cover`,r),...i})}function a({className:r,...i}){return(0,n.jsx)(t.Avatar.Fallback,{"data-slot":`avatar-fallback`,className:e.cn(`flex h-full w-full items-center justify-center text-xs font-bold text-doom-dim`,r),...i})}exports.Avatar=r,exports.AvatarFallback=a,exports.AvatarImage=i;
2
2
  //# sourceMappingURL=Avatar.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.cjs","names":["AvatarPrimitive","cn"],"sources":["../../../src/components/Avatar.tsx"],"sourcesContent":["import { Avatar as AvatarPrimitive } from 'radix-ui';\nimport type { ComponentProps } from 'react';\nimport { cn } from '../lib/cn.ts';\n\n/** A face or an initial; Radix only shows the fallback once the image has actually failed. */\nexport function Avatar({ className, ...props }: ComponentProps<typeof AvatarPrimitive.Root>) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n className={cn('relative flex h-6 w-6 shrink-0 overflow-hidden rounded-full bg-doom-deep', className)}\n {...props}\n />\n );\n}\n\nexport function AvatarImage({ className, ...props }: ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn('h-full w-full object-cover', className)}\n {...props}\n />\n );\n}\n\nexport function AvatarFallback({ className, ...props }: ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn('flex h-full w-full items-center justify-center text-[10px] font-bold text-doom-dim', className)}\n {...props}\n />\n );\n}\n"],"mappings":"0FAKA,SAAgB,EAAO,CAAE,YAAW,GAAG,GAAsD,CAC3F,OACE,EAAA,EAAA,IAAA,CAACA,EAAAA,OAAgB,KAAjB,CACE,YAAU,SACV,UAAWC,EAAAA,GAAG,2EAA4E,CAAS,EACnG,GAAI,CACL,CAAA,CAEL,CAEA,SAAgB,EAAY,CAAE,YAAW,GAAG,GAAuD,CACjG,OACE,EAAA,EAAA,IAAA,CAACD,EAAAA,OAAgB,MAAjB,CACE,YAAU,eACV,UAAWC,EAAAA,GAAG,6BAA8B,CAAS,EACrD,GAAI,CACL,CAAA,CAEL,CAEA,SAAgB,EAAe,CAAE,YAAW,GAAG,GAA0D,CACvG,OACE,EAAA,EAAA,IAAA,CAACD,EAAAA,OAAgB,SAAjB,CACE,YAAU,kBACV,UAAWC,EAAAA,GAAG,qFAAsF,CAAS,EAC7G,GAAI,CACL,CAAA,CAEL"}
1
+ {"version":3,"file":"Avatar.cjs","names":["AvatarPrimitive","cn"],"sources":["../../../src/components/Avatar.tsx"],"sourcesContent":["import { Avatar as AvatarPrimitive } from 'radix-ui';\nimport type { ComponentProps } from 'react';\nimport { cn } from '../lib/cn.ts';\n\n/** A face or an initial; Radix only shows the fallback once the image has actually failed. */\nexport function Avatar({ className, ...props }: ComponentProps<typeof AvatarPrimitive.Root>) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n className={cn('relative flex h-6 w-6 shrink-0 overflow-hidden rounded-full bg-doom-deep', className)}\n {...props}\n />\n );\n}\n\nexport function AvatarImage({ className, ...props }: ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn('h-full w-full object-cover', className)}\n {...props}\n />\n );\n}\n\nexport function AvatarFallback({ className, ...props }: ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn('flex h-full w-full items-center justify-center text-xs font-bold text-doom-dim', className)}\n {...props}\n />\n );\n}\n"],"mappings":"0FAKA,SAAgB,EAAO,CAAE,YAAW,GAAG,GAAsD,CAC3F,OACE,EAAA,EAAA,IAAA,CAACA,EAAAA,OAAgB,KAAjB,CACE,YAAU,SACV,UAAWC,EAAAA,GAAG,2EAA4E,CAAS,EACnG,GAAI,CACL,CAAA,CAEL,CAEA,SAAgB,EAAY,CAAE,YAAW,GAAG,GAAuD,CACjG,OACE,EAAA,EAAA,IAAA,CAACD,EAAAA,OAAgB,MAAjB,CACE,YAAU,eACV,UAAWC,EAAAA,GAAG,6BAA8B,CAAS,EACrD,GAAI,CACL,CAAA,CAEL,CAEA,SAAgB,EAAe,CAAE,YAAW,GAAG,GAA0D,CACvG,OACE,EAAA,EAAA,IAAA,CAACD,EAAAA,OAAgB,SAAjB,CACE,YAAU,kBACV,UAAWC,EAAAA,GAAG,iFAAkF,CAAS,EACzG,GAAI,CACL,CAAA,CAEL"}
@@ -1,2 +1,2 @@
1
- import{cn as e}from"../lib/cn.mjs";import{Avatar as t}from"radix-ui";import{jsx as n}from"react/jsx-runtime";function r({className:r,...i}){return n(t.Root,{"data-slot":`avatar`,className:e(`relative flex h-6 w-6 shrink-0 overflow-hidden rounded-full bg-doom-deep`,r),...i})}function i({className:r,...i}){return n(t.Image,{"data-slot":`avatar-image`,className:e(`h-full w-full object-cover`,r),...i})}function a({className:r,...i}){return n(t.Fallback,{"data-slot":`avatar-fallback`,className:e(`flex h-full w-full items-center justify-center text-[10px] font-bold text-doom-dim`,r),...i})}export{r as Avatar,a as AvatarFallback,i as AvatarImage};
1
+ import{cn as e}from"../lib/cn.mjs";import{Avatar as t}from"radix-ui";import{jsx as n}from"react/jsx-runtime";function r({className:r,...i}){return n(t.Root,{"data-slot":`avatar`,className:e(`relative flex h-6 w-6 shrink-0 overflow-hidden rounded-full bg-doom-deep`,r),...i})}function i({className:r,...i}){return n(t.Image,{"data-slot":`avatar-image`,className:e(`h-full w-full object-cover`,r),...i})}function a({className:r,...i}){return n(t.Fallback,{"data-slot":`avatar-fallback`,className:e(`flex h-full w-full items-center justify-center text-xs font-bold text-doom-dim`,r),...i})}export{r as Avatar,a as AvatarFallback,i as AvatarImage};
2
2
  //# sourceMappingURL=Avatar.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Avatar.mjs","names":["Avatar","AvatarPrimitive"],"sources":["../../../src/components/Avatar.tsx"],"sourcesContent":["import { Avatar as AvatarPrimitive } from 'radix-ui';\nimport type { ComponentProps } from 'react';\nimport { cn } from '../lib/cn.ts';\n\n/** A face or an initial; Radix only shows the fallback once the image has actually failed. */\nexport function Avatar({ className, ...props }: ComponentProps<typeof AvatarPrimitive.Root>) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n className={cn('relative flex h-6 w-6 shrink-0 overflow-hidden rounded-full bg-doom-deep', className)}\n {...props}\n />\n );\n}\n\nexport function AvatarImage({ className, ...props }: ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn('h-full w-full object-cover', className)}\n {...props}\n />\n );\n}\n\nexport function AvatarFallback({ className, ...props }: ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn('flex h-full w-full items-center justify-center text-[10px] font-bold text-doom-dim', className)}\n {...props}\n />\n );\n}\n"],"mappings":"6GAKA,SAAgBA,EAAO,CAAE,YAAW,GAAG,GAAsD,CAC3F,OACE,EAACC,EAAgB,KAAjB,CACE,YAAU,SACV,UAAW,EAAG,2EAA4E,CAAS,EACnG,GAAI,CACL,CAAA,CAEL,CAEA,SAAgB,EAAY,CAAE,YAAW,GAAG,GAAuD,CACjG,OACE,EAACA,EAAgB,MAAjB,CACE,YAAU,eACV,UAAW,EAAG,6BAA8B,CAAS,EACrD,GAAI,CACL,CAAA,CAEL,CAEA,SAAgB,EAAe,CAAE,YAAW,GAAG,GAA0D,CACvG,OACE,EAACA,EAAgB,SAAjB,CACE,YAAU,kBACV,UAAW,EAAG,qFAAsF,CAAS,EAC7G,GAAI,CACL,CAAA,CAEL"}
1
+ {"version":3,"file":"Avatar.mjs","names":["Avatar","AvatarPrimitive"],"sources":["../../../src/components/Avatar.tsx"],"sourcesContent":["import { Avatar as AvatarPrimitive } from 'radix-ui';\nimport type { ComponentProps } from 'react';\nimport { cn } from '../lib/cn.ts';\n\n/** A face or an initial; Radix only shows the fallback once the image has actually failed. */\nexport function Avatar({ className, ...props }: ComponentProps<typeof AvatarPrimitive.Root>) {\n return (\n <AvatarPrimitive.Root\n data-slot=\"avatar\"\n className={cn('relative flex h-6 w-6 shrink-0 overflow-hidden rounded-full bg-doom-deep', className)}\n {...props}\n />\n );\n}\n\nexport function AvatarImage({ className, ...props }: ComponentProps<typeof AvatarPrimitive.Image>) {\n return (\n <AvatarPrimitive.Image\n data-slot=\"avatar-image\"\n className={cn('h-full w-full object-cover', className)}\n {...props}\n />\n );\n}\n\nexport function AvatarFallback({ className, ...props }: ComponentProps<typeof AvatarPrimitive.Fallback>) {\n return (\n <AvatarPrimitive.Fallback\n data-slot=\"avatar-fallback\"\n className={cn('flex h-full w-full items-center justify-center text-xs font-bold text-doom-dim', className)}\n {...props}\n />\n );\n}\n"],"mappings":"6GAKA,SAAgBA,EAAO,CAAE,YAAW,GAAG,GAAsD,CAC3F,OACE,EAACC,EAAgB,KAAjB,CACE,YAAU,SACV,UAAW,EAAG,2EAA4E,CAAS,EACnG,GAAI,CACL,CAAA,CAEL,CAEA,SAAgB,EAAY,CAAE,YAAW,GAAG,GAAuD,CACjG,OACE,EAACA,EAAgB,MAAjB,CACE,YAAU,eACV,UAAW,EAAG,6BAA8B,CAAS,EACrD,GAAI,CACL,CAAA,CAEL,CAEA,SAAgB,EAAe,CAAE,YAAW,GAAG,GAA0D,CACvG,OACE,EAACA,EAAgB,SAAjB,CACE,YAAU,kBACV,UAAW,EAAG,iFAAkF,CAAS,EACzG,GAAI,CACL,CAAA,CAEL"}
@@ -1,2 +1,2 @@
1
- const e=require("../lib/cn.cjs");let t=require("radix-ui"),n=require("react/jsx-runtime");const r=(0,require("class-variance-authority").cva)(`inline-flex items-center gap-1.5 whitespace-nowrap rounded border font-mono`,{variants:{tone:{neutral:`border-doom-border text-doom-dim`,blue:`border-doom-blue/40 text-doom-blue`,green:`border-doom-green/40 text-doom-green`,yellow:`border-doom-yellow/40 text-doom-yellow`,red:`border-doom-red/40 text-doom-red`,magenta:`border-doom-magenta/40 text-doom-magenta`,violet:`border-doom-violet/40 text-doom-violet`,cyan:`border-doom-cyan/40 text-doom-cyan`,orange:`border-doom-orange/40 text-doom-orange`,teal:`border-doom-teal/40 text-doom-teal`},size:{xs:`px-1.5 py-0.5 text-[8px] font-bold`,sm:`px-2 py-0.5 text-[10px]`,md:`px-2.5 py-1 text-[11px]`,lg:`px-3 py-1.5 text-[12px]`}},defaultVariants:{tone:`neutral`,size:`sm`}});function i({className:i,tone:a,size:o,asChild:s=!1,...c}){let l=s?t.Slot.Root:`span`;return(0,n.jsx)(l,{"data-slot":`badge`,className:e.cn(r({tone:a,size:o}),i),...c})}exports.Badge=i,exports.badgeVariants=r;
1
+ const e=require("../lib/cn.cjs");let t=require("radix-ui"),n=require("react/jsx-runtime");const r=(0,require("class-variance-authority").cva)(`inline-flex items-center gap-1.5 whitespace-nowrap rounded border font-mono`,{variants:{tone:{neutral:`border-doom-border text-doom-dim`,blue:`border-doom-blue/40 text-doom-blue`,green:`border-doom-green/40 text-doom-green`,yellow:`border-doom-yellow/40 text-doom-yellow`,red:`border-doom-red/40 text-doom-red`,magenta:`border-doom-magenta/40 text-doom-magenta`,violet:`border-doom-violet/40 text-doom-violet`,cyan:`border-doom-cyan/40 text-doom-cyan`,orange:`border-doom-orange/40 text-doom-orange`,teal:`border-doom-teal/40 text-doom-teal`},size:{xs:`px-1.5 py-0.5 text-2xs font-bold`,sm:`px-2 py-0.5 text-xs`,md:`px-2.5 py-1 text-sm`,lg:`px-3 py-1.5 text-base`}},defaultVariants:{tone:`neutral`,size:`sm`}});function i({className:i,tone:a,size:o,asChild:s=!1,...c}){let l=s?t.Slot.Root:`span`;return(0,n.jsx)(l,{"data-slot":`badge`,className:e.cn(r({tone:a,size:o}),i),...c})}exports.Badge=i,exports.badgeVariants=r;
2
2
  //# sourceMappingURL=Badge.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.cjs","names":["cva","Slot","cn"],"sources":["../../../src/components/Badge.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport type { ComponentProps } from 'react';\nimport { Slot } from 'radix-ui';\nimport { cn } from '../lib/cn.ts';\nimport type { ChipTone } from '../types/tone.ts';\n\nexport const badgeVariants = cva('inline-flex items-center gap-1.5 whitespace-nowrap rounded border font-mono', {\n variants: {\n tone: {\n neutral: 'border-doom-border text-doom-dim',\n blue: 'border-doom-blue/40 text-doom-blue',\n green: 'border-doom-green/40 text-doom-green',\n yellow: 'border-doom-yellow/40 text-doom-yellow',\n red: 'border-doom-red/40 text-doom-red',\n magenta: 'border-doom-magenta/40 text-doom-magenta',\n violet: 'border-doom-violet/40 text-doom-violet',\n cyan: 'border-doom-cyan/40 text-doom-cyan',\n orange: 'border-doom-orange/40 text-doom-orange',\n teal: 'border-doom-teal/40 text-doom-teal',\n } satisfies Record<ChipTone, string>,\n /** The same rungs Button names, so a chip can sit beside a button of any size. */\n size: {\n xs: 'px-1.5 py-0.5 text-[8px] font-bold',\n sm: 'px-2 py-0.5 text-[10px]',\n md: 'px-2.5 py-1 text-[11px]',\n lg: 'px-3 py-1.5 text-[12px]',\n },\n },\n defaultVariants: { tone: 'neutral', size: 'sm' },\n});\n\nexport type BadgeTone = ChipTone;\n\nexport interface BadgeProps extends ComponentProps<'span'>, VariantProps<typeof badgeVariants> {\n /** Render the child element instead of a <span>, so a link can look like a chip. */\n asChild?: boolean;\n}\n\n/** An outlined chip in one of the accent tones; the Chip the cockpit mockup draws. */\nexport function Badge({ className, tone, size, asChild = false, ...props }: BadgeProps) {\n const Component = asChild ? Slot.Root : 'span';\n return <Component data-slot=\"badge\" className={cn(badgeVariants({ tone, size }), className)} {...props} />;\n}\n"],"mappings":"0FAMA,MAAa,GAAA,oCAAgBA,CAAAA,CAAAA,IAAAA,CAAI,8EAA+E,CAC9G,SAAU,CACR,KAAM,CACJ,QAAS,mCACT,KAAM,qCACN,MAAO,uCACP,OAAQ,yCACR,IAAK,mCACL,QAAS,2CACT,OAAQ,yCACR,KAAM,qCACN,OAAQ,yCACR,KAAM,oCACR,EAEA,KAAM,CACJ,GAAI,qCACJ,GAAI,0BACJ,GAAI,0BACJ,GAAI,yBACN,CACF,EACA,gBAAiB,CAAE,KAAM,UAAW,KAAM,IAAK,CACjD,CAAC,EAUD,SAAgB,EAAM,CAAE,YAAW,OAAM,OAAM,UAAU,GAAO,GAAG,GAAqB,CACtF,IAAM,EAAY,EAAUC,EAAAA,KAAK,KAAO,OACxC,OAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAW,YAAU,QAAQ,UAAWC,EAAAA,GAAG,EAAc,CAAE,OAAM,MAAK,CAAC,EAAG,CAAS,EAAG,GAAI,CAAQ,CAAA,CAC3G"}
1
+ {"version":3,"file":"Badge.cjs","names":["cva","Slot","cn"],"sources":["../../../src/components/Badge.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport type { ComponentProps } from 'react';\nimport { Slot } from 'radix-ui';\nimport { cn } from '../lib/cn.ts';\nimport type { ChipTone } from '../types/tone.ts';\n\nexport const badgeVariants = cva('inline-flex items-center gap-1.5 whitespace-nowrap rounded border font-mono', {\n variants: {\n tone: {\n neutral: 'border-doom-border text-doom-dim',\n blue: 'border-doom-blue/40 text-doom-blue',\n green: 'border-doom-green/40 text-doom-green',\n yellow: 'border-doom-yellow/40 text-doom-yellow',\n red: 'border-doom-red/40 text-doom-red',\n magenta: 'border-doom-magenta/40 text-doom-magenta',\n violet: 'border-doom-violet/40 text-doom-violet',\n cyan: 'border-doom-cyan/40 text-doom-cyan',\n orange: 'border-doom-orange/40 text-doom-orange',\n teal: 'border-doom-teal/40 text-doom-teal',\n } satisfies Record<ChipTone, string>,\n /** The same rungs Button names, so a chip can sit beside a button of any size. */\n size: {\n xs: 'px-1.5 py-0.5 text-2xs font-bold',\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-1 text-sm',\n lg: 'px-3 py-1.5 text-base',\n },\n },\n defaultVariants: { tone: 'neutral', size: 'sm' },\n});\n\nexport type BadgeTone = ChipTone;\n\nexport interface BadgeProps extends ComponentProps<'span'>, VariantProps<typeof badgeVariants> {\n /** Render the child element instead of a <span>, so a link can look like a chip. */\n asChild?: boolean;\n}\n\n/** An outlined chip in one of the accent tones; the Chip the cockpit mockup draws. */\nexport function Badge({ className, tone, size, asChild = false, ...props }: BadgeProps) {\n const Component = asChild ? Slot.Root : 'span';\n return <Component data-slot=\"badge\" className={cn(badgeVariants({ tone, size }), className)} {...props} />;\n}\n"],"mappings":"0FAMA,MAAa,GAAA,oCAAgBA,CAAAA,CAAAA,IAAAA,CAAI,8EAA+E,CAC9G,SAAU,CACR,KAAM,CACJ,QAAS,mCACT,KAAM,qCACN,MAAO,uCACP,OAAQ,yCACR,IAAK,mCACL,QAAS,2CACT,OAAQ,yCACR,KAAM,qCACN,OAAQ,yCACR,KAAM,oCACR,EAEA,KAAM,CACJ,GAAI,mCACJ,GAAI,sBACJ,GAAI,sBACJ,GAAI,uBACN,CACF,EACA,gBAAiB,CAAE,KAAM,UAAW,KAAM,IAAK,CACjD,CAAC,EAUD,SAAgB,EAAM,CAAE,YAAW,OAAM,OAAM,UAAU,GAAO,GAAG,GAAqB,CACtF,IAAM,EAAY,EAAUC,EAAAA,KAAK,KAAO,OACxC,OAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAW,YAAU,QAAQ,UAAWC,EAAAA,GAAG,EAAc,CAAE,OAAM,MAAK,CAAC,EAAG,CAAS,EAAG,GAAI,CAAQ,CAAA,CAC3G"}
@@ -1,2 +1,2 @@
1
- import{cn as e}from"../lib/cn.mjs";import{Slot as t}from"radix-ui";import{jsx as n}from"react/jsx-runtime";import{cva as r}from"class-variance-authority";const i=r(`inline-flex items-center gap-1.5 whitespace-nowrap rounded border font-mono`,{variants:{tone:{neutral:`border-doom-border text-doom-dim`,blue:`border-doom-blue/40 text-doom-blue`,green:`border-doom-green/40 text-doom-green`,yellow:`border-doom-yellow/40 text-doom-yellow`,red:`border-doom-red/40 text-doom-red`,magenta:`border-doom-magenta/40 text-doom-magenta`,violet:`border-doom-violet/40 text-doom-violet`,cyan:`border-doom-cyan/40 text-doom-cyan`,orange:`border-doom-orange/40 text-doom-orange`,teal:`border-doom-teal/40 text-doom-teal`},size:{xs:`px-1.5 py-0.5 text-[8px] font-bold`,sm:`px-2 py-0.5 text-[10px]`,md:`px-2.5 py-1 text-[11px]`,lg:`px-3 py-1.5 text-[12px]`}},defaultVariants:{tone:`neutral`,size:`sm`}});function a({className:r,tone:a,size:o,asChild:s=!1,...c}){let l=s?t.Root:`span`;return n(l,{"data-slot":`badge`,className:e(i({tone:a,size:o}),r),...c})}export{a as Badge,i as badgeVariants};
1
+ import{cn as e}from"../lib/cn.mjs";import{Slot as t}from"radix-ui";import{jsx as n}from"react/jsx-runtime";import{cva as r}from"class-variance-authority";const i=r(`inline-flex items-center gap-1.5 whitespace-nowrap rounded border font-mono`,{variants:{tone:{neutral:`border-doom-border text-doom-dim`,blue:`border-doom-blue/40 text-doom-blue`,green:`border-doom-green/40 text-doom-green`,yellow:`border-doom-yellow/40 text-doom-yellow`,red:`border-doom-red/40 text-doom-red`,magenta:`border-doom-magenta/40 text-doom-magenta`,violet:`border-doom-violet/40 text-doom-violet`,cyan:`border-doom-cyan/40 text-doom-cyan`,orange:`border-doom-orange/40 text-doom-orange`,teal:`border-doom-teal/40 text-doom-teal`},size:{xs:`px-1.5 py-0.5 text-2xs font-bold`,sm:`px-2 py-0.5 text-xs`,md:`px-2.5 py-1 text-sm`,lg:`px-3 py-1.5 text-base`}},defaultVariants:{tone:`neutral`,size:`sm`}});function a({className:r,tone:a,size:o,asChild:s=!1,...c}){let l=s?t.Root:`span`;return n(l,{"data-slot":`badge`,className:e(i({tone:a,size:o}),r),...c})}export{a as Badge,i as badgeVariants};
2
2
  //# sourceMappingURL=Badge.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.mjs","names":[],"sources":["../../../src/components/Badge.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport type { ComponentProps } from 'react';\nimport { Slot } from 'radix-ui';\nimport { cn } from '../lib/cn.ts';\nimport type { ChipTone } from '../types/tone.ts';\n\nexport const badgeVariants = cva('inline-flex items-center gap-1.5 whitespace-nowrap rounded border font-mono', {\n variants: {\n tone: {\n neutral: 'border-doom-border text-doom-dim',\n blue: 'border-doom-blue/40 text-doom-blue',\n green: 'border-doom-green/40 text-doom-green',\n yellow: 'border-doom-yellow/40 text-doom-yellow',\n red: 'border-doom-red/40 text-doom-red',\n magenta: 'border-doom-magenta/40 text-doom-magenta',\n violet: 'border-doom-violet/40 text-doom-violet',\n cyan: 'border-doom-cyan/40 text-doom-cyan',\n orange: 'border-doom-orange/40 text-doom-orange',\n teal: 'border-doom-teal/40 text-doom-teal',\n } satisfies Record<ChipTone, string>,\n /** The same rungs Button names, so a chip can sit beside a button of any size. */\n size: {\n xs: 'px-1.5 py-0.5 text-[8px] font-bold',\n sm: 'px-2 py-0.5 text-[10px]',\n md: 'px-2.5 py-1 text-[11px]',\n lg: 'px-3 py-1.5 text-[12px]',\n },\n },\n defaultVariants: { tone: 'neutral', size: 'sm' },\n});\n\nexport type BadgeTone = ChipTone;\n\nexport interface BadgeProps extends ComponentProps<'span'>, VariantProps<typeof badgeVariants> {\n /** Render the child element instead of a <span>, so a link can look like a chip. */\n asChild?: boolean;\n}\n\n/** An outlined chip in one of the accent tones; the Chip the cockpit mockup draws. */\nexport function Badge({ className, tone, size, asChild = false, ...props }: BadgeProps) {\n const Component = asChild ? Slot.Root : 'span';\n return <Component data-slot=\"badge\" className={cn(badgeVariants({ tone, size }), className)} {...props} />;\n}\n"],"mappings":"0JAMA,MAAa,EAAgB,EAAI,8EAA+E,CAC9G,SAAU,CACR,KAAM,CACJ,QAAS,mCACT,KAAM,qCACN,MAAO,uCACP,OAAQ,yCACR,IAAK,mCACL,QAAS,2CACT,OAAQ,yCACR,KAAM,qCACN,OAAQ,yCACR,KAAM,oCACR,EAEA,KAAM,CACJ,GAAI,qCACJ,GAAI,0BACJ,GAAI,0BACJ,GAAI,yBACN,CACF,EACA,gBAAiB,CAAE,KAAM,UAAW,KAAM,IAAK,CACjD,CAAC,EAUD,SAAgB,EAAM,CAAE,YAAW,OAAM,OAAM,UAAU,GAAO,GAAG,GAAqB,CACtF,IAAM,EAAY,EAAU,EAAK,KAAO,OACxC,OAAO,EAAC,EAAD,CAAW,YAAU,QAAQ,UAAW,EAAG,EAAc,CAAE,OAAM,MAAK,CAAC,EAAG,CAAS,EAAG,GAAI,CAAQ,CAAA,CAC3G"}
1
+ {"version":3,"file":"Badge.mjs","names":[],"sources":["../../../src/components/Badge.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport type { ComponentProps } from 'react';\nimport { Slot } from 'radix-ui';\nimport { cn } from '../lib/cn.ts';\nimport type { ChipTone } from '../types/tone.ts';\n\nexport const badgeVariants = cva('inline-flex items-center gap-1.5 whitespace-nowrap rounded border font-mono', {\n variants: {\n tone: {\n neutral: 'border-doom-border text-doom-dim',\n blue: 'border-doom-blue/40 text-doom-blue',\n green: 'border-doom-green/40 text-doom-green',\n yellow: 'border-doom-yellow/40 text-doom-yellow',\n red: 'border-doom-red/40 text-doom-red',\n magenta: 'border-doom-magenta/40 text-doom-magenta',\n violet: 'border-doom-violet/40 text-doom-violet',\n cyan: 'border-doom-cyan/40 text-doom-cyan',\n orange: 'border-doom-orange/40 text-doom-orange',\n teal: 'border-doom-teal/40 text-doom-teal',\n } satisfies Record<ChipTone, string>,\n /** The same rungs Button names, so a chip can sit beside a button of any size. */\n size: {\n xs: 'px-1.5 py-0.5 text-2xs font-bold',\n sm: 'px-2 py-0.5 text-xs',\n md: 'px-2.5 py-1 text-sm',\n lg: 'px-3 py-1.5 text-base',\n },\n },\n defaultVariants: { tone: 'neutral', size: 'sm' },\n});\n\nexport type BadgeTone = ChipTone;\n\nexport interface BadgeProps extends ComponentProps<'span'>, VariantProps<typeof badgeVariants> {\n /** Render the child element instead of a <span>, so a link can look like a chip. */\n asChild?: boolean;\n}\n\n/** An outlined chip in one of the accent tones; the Chip the cockpit mockup draws. */\nexport function Badge({ className, tone, size, asChild = false, ...props }: BadgeProps) {\n const Component = asChild ? Slot.Root : 'span';\n return <Component data-slot=\"badge\" className={cn(badgeVariants({ tone, size }), className)} {...props} />;\n}\n"],"mappings":"0JAMA,MAAa,EAAgB,EAAI,8EAA+E,CAC9G,SAAU,CACR,KAAM,CACJ,QAAS,mCACT,KAAM,qCACN,MAAO,uCACP,OAAQ,yCACR,IAAK,mCACL,QAAS,2CACT,OAAQ,yCACR,KAAM,qCACN,OAAQ,yCACR,KAAM,oCACR,EAEA,KAAM,CACJ,GAAI,mCACJ,GAAI,sBACJ,GAAI,sBACJ,GAAI,uBACN,CACF,EACA,gBAAiB,CAAE,KAAM,UAAW,KAAM,IAAK,CACjD,CAAC,EAUD,SAAgB,EAAM,CAAE,YAAW,OAAM,OAAM,UAAU,GAAO,GAAG,GAAqB,CACtF,IAAM,EAAY,EAAU,EAAK,KAAO,OACxC,OAAO,EAAC,EAAD,CAAW,YAAU,QAAQ,UAAW,EAAG,EAAc,CAAE,OAAM,MAAK,CAAC,EAAG,CAAS,EAAG,GAAI,CAAQ,CAAA,CAC3G"}
@@ -1,2 +1,2 @@
1
- const e=require("../lib/cn.cjs"),t=require("./Tooltip.cjs");let n=require("react/jsx-runtime");function r(e,t=4){let n=e.split(`/`).filter(e=>e!==``);return n.length===0?[e]:n.length<=t?n:[n[0]??``,`…`,...n.slice(n.length-(t-2))]}function i({path:i,keep:a,className:o,"data-testid":s}){let c=r(i,a),l=c.length-1;return(0,n.jsx)(t.TooltipProvider,{children:(0,n.jsxs)(t.Tooltip,{children:[(0,n.jsx)(t.TooltipTrigger,{asChild:!0,children:(0,n.jsx)(`span`,{"data-slot":`breadcrumb`,"data-testid":s,title:void 0,className:e.cn(`flex min-w-0 items-baseline gap-1 truncate font-mono text-[12px]`,o),children:c.map((e,t)=>(0,n.jsxs)(`span`,{className:`flex min-w-0 items-baseline gap-1`,children:[t>0?(0,n.jsx)(`span`,{className:`shrink-0 text-doom-faint`,children:`/`}):null,(0,n.jsx)(`span`,{className:t===l?`truncate font-bold text-doom-hi`:`shrink-0 truncate text-doom-faint`,children:e})]},`${e}-${String(t)}`))})}),(0,n.jsx)(t.TooltipContent,{className:`max-w-[32rem] break-all whitespace-normal`,children:i})]})})}exports.BREADCRUMB_ELLIPSIS=`…`,exports.Breadcrumb=i,exports.breadcrumbSegments=r;
1
+ const e=require("../lib/cn.cjs"),t=require("./Tooltip.cjs");let n=require("react/jsx-runtime");function r(e,t=4){let n=e.split(`/`).filter(e=>e!==``);return n.length===0?[e]:n.length<=t?n:[n[0]??``,`…`,...n.slice(n.length-(t-2))]}function i({path:i,keep:a,className:o,"data-testid":s}){let c=r(i,a),l=c.length-1;return(0,n.jsx)(t.TooltipProvider,{children:(0,n.jsxs)(t.Tooltip,{children:[(0,n.jsx)(t.TooltipTrigger,{asChild:!0,children:(0,n.jsx)(`span`,{"data-slot":`breadcrumb`,"data-testid":s,title:void 0,className:e.cn(`flex min-w-0 items-baseline gap-1 truncate font-mono text-sm`,o),children:c.map((e,t)=>(0,n.jsxs)(`span`,{className:`flex min-w-0 items-baseline gap-1`,children:[t>0?(0,n.jsx)(`span`,{className:`shrink-0 text-doom-faint`,children:`/`}):null,(0,n.jsx)(`span`,{className:t===l?`truncate font-bold text-doom-hi`:`shrink-0 truncate text-doom-faint`,children:e})]},`${e}-${String(t)}`))})}),(0,n.jsx)(t.TooltipContent,{className:`max-w-[32rem] break-all whitespace-normal`,children:i})]})})}exports.BREADCRUMB_ELLIPSIS=`…`,exports.Breadcrumb=i,exports.breadcrumbSegments=r;
2
2
  //# sourceMappingURL=Breadcrumb.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Breadcrumb.cjs","names":["TooltipProvider","Tooltip","TooltipTrigger","cn","TooltipContent"],"sources":["../../../src/components/Breadcrumb.tsx"],"sourcesContent":["import { cn } from '../lib/cn.ts';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './Tooltip.tsx';\n\n/** The marker a collapsed run of segments is shown as. */\nexport const BREADCRUMB_ELLIPSIS = '…';\n\n/**\n * A path as breadcrumb segments, with the middle collapsed when it is deeper\n * than `keep` allows.\n *\n * The first segment and the last few are what place a leaf; the ones between\n * are what a reader skims past, so those are the ones that go. The leaf is\n * always the final segment and is never collapsed.\n */\nexport function breadcrumbSegments(path: string, keep = 4): string[] {\n const segments = path.split('/').filter((segment) => segment !== '');\n if (segments.length === 0) return [path];\n if (segments.length <= keep) return segments;\n // One leading segment for orientation, then the tail that names the leaf.\n return [segments[0] ?? '', BREADCRUMB_ELLIPSIS, ...segments.slice(segments.length - (keep - 2))];\n}\n\nexport interface BreadcrumbProps {\n /** The path to show, separated by forward slashes. */\n path: string;\n /** How many segments survive before the middle collapses. */\n keep?: number;\n /** Marks the trail so a test can find it. */\n 'data-testid'?: string;\n className?: string;\n}\n\n/**\n * A slash-separated path, shortened to fit and readable in full on hover.\n *\n * Two things shorten it, because they solve different problems. Collapsing the\n * middle keeps a deep path legible at any width, and truncation handles what is\n * left when the container is narrower than even that. Either one hides\n * something, so the whole path is always one hover away, wrapped rather than\n * clipped: a tooltip that truncates too would defeat the point of having one.\n *\n * The leaf carries the emphasis. A reader scanning a header is looking for the\n * file, and the directories are context for it.\n */\nexport function Breadcrumb({ path, keep, className, 'data-testid': testId }: BreadcrumbProps) {\n const segments = breadcrumbSegments(path, keep);\n const lastIndex = segments.length - 1;\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n data-slot=\"breadcrumb\"\n data-testid={testId}\n title={undefined}\n className={cn('flex min-w-0 items-baseline gap-1 truncate font-mono text-[12px]', className)}\n >\n {segments.map((segment, index) => (\n // Segments repeat in a path (src/app/src), so the index is what\n // keeps two of the same name apart.\n <span key={`${segment}-${String(index)}`} className=\"flex min-w-0 items-baseline gap-1\">\n {index > 0 ? <span className=\"shrink-0 text-doom-faint\">/</span> : null}\n <span\n className={\n index === lastIndex ? 'truncate font-bold text-doom-hi' : 'shrink-0 truncate text-doom-faint'\n }\n >\n {segment}\n </span>\n </span>\n ))}\n </span>\n </TooltipTrigger>\n <TooltipContent className=\"max-w-[32rem] break-all whitespace-normal\">{path}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n"],"mappings":"+FAcA,SAAgB,EAAmB,EAAc,EAAO,EAAa,CACnE,IAAM,EAAW,EAAK,MAAM,GAAG,CAAC,CAAC,OAAQ,GAAY,IAAY,EAAE,EAInE,OAHI,EAAS,SAAW,EAAU,CAAC,CAAI,EACnC,EAAS,QAAU,EAAa,EAE7B,CAAC,EAAS,IAAM,OAAyB,GAAG,EAAS,MAAM,EAAS,QAAU,EAAO,EAAE,CAAC,CACjG,CAwBA,SAAgB,EAAW,CAAE,OAAM,OAAM,YAAW,cAAe,GAA2B,CAC5F,IAAM,EAAW,EAAmB,EAAM,CAAI,EACxC,EAAY,EAAS,OAAS,EAEpC,OACE,EAAA,EAAA,IAAA,CAACA,EAAAA,gBAAD,CAAA,UACE,EAAA,EAAA,KAAA,CAACC,EAAAA,QAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,QAAA,GACd,UAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CACE,YAAU,aACV,cAAa,EACb,MAAO,IAAA,GACP,UAAWC,EAAAA,GAAG,mEAAoE,CAAS,EAE1F,SAAA,EAAS,KAAK,EAAS,KAGtB,EAAA,EAAA,KAAA,CAAC,OAAD,CAA0C,UAAU,oCAApD,SAAA,CACG,EAAQ,GAAI,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,2BAA2B,SAAA,GAAO,CAAA,EAAI,MACnE,EAAA,EAAA,IAAA,CAAC,OAAD,CACE,UACE,IAAU,EAAY,kCAAoC,oCAG3D,SAAA,CACG,CAAA,CACF,CATK,EAAA,GAAG,EAAQ,GAAG,OAAO,CAAK,GAS/B,CACP,CACG,CAAA,CACQ,CAAA,GAChB,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,UAAU,4CAA6C,SAAA,CAAqB,CAAA,CACrF,CAAA,CAAA,CACM,CAAA,CAErB"}
1
+ {"version":3,"file":"Breadcrumb.cjs","names":["TooltipProvider","Tooltip","TooltipTrigger","cn","TooltipContent"],"sources":["../../../src/components/Breadcrumb.tsx"],"sourcesContent":["import { cn } from '../lib/cn.ts';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './Tooltip.tsx';\n\n/** The marker a collapsed run of segments is shown as. */\nexport const BREADCRUMB_ELLIPSIS = '…';\n\n/**\n * A path as breadcrumb segments, with the middle collapsed when it is deeper\n * than `keep` allows.\n *\n * The first segment and the last few are what place a leaf; the ones between\n * are what a reader skims past, so those are the ones that go. The leaf is\n * always the final segment and is never collapsed.\n */\nexport function breadcrumbSegments(path: string, keep = 4): string[] {\n const segments = path.split('/').filter((segment) => segment !== '');\n if (segments.length === 0) return [path];\n if (segments.length <= keep) return segments;\n // One leading segment for orientation, then the tail that names the leaf.\n return [segments[0] ?? '', BREADCRUMB_ELLIPSIS, ...segments.slice(segments.length - (keep - 2))];\n}\n\nexport interface BreadcrumbProps {\n /** The path to show, separated by forward slashes. */\n path: string;\n /** How many segments survive before the middle collapses. */\n keep?: number;\n /** Marks the trail so a test can find it. */\n 'data-testid'?: string;\n className?: string;\n}\n\n/**\n * A slash-separated path, shortened to fit and readable in full on hover.\n *\n * Two things shorten it, because they solve different problems. Collapsing the\n * middle keeps a deep path legible at any width, and truncation handles what is\n * left when the container is narrower than even that. Either one hides\n * something, so the whole path is always one hover away, wrapped rather than\n * clipped: a tooltip that truncates too would defeat the point of having one.\n *\n * The leaf carries the emphasis. A reader scanning a header is looking for the\n * file, and the directories are context for it.\n */\nexport function Breadcrumb({ path, keep, className, 'data-testid': testId }: BreadcrumbProps) {\n const segments = breadcrumbSegments(path, keep);\n const lastIndex = segments.length - 1;\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n data-slot=\"breadcrumb\"\n data-testid={testId}\n title={undefined}\n className={cn('flex min-w-0 items-baseline gap-1 truncate font-mono text-sm', className)}\n >\n {segments.map((segment, index) => (\n // Segments repeat in a path (src/app/src), so the index is what\n // keeps two of the same name apart.\n <span key={`${segment}-${String(index)}`} className=\"flex min-w-0 items-baseline gap-1\">\n {index > 0 ? <span className=\"shrink-0 text-doom-faint\">/</span> : null}\n <span\n className={\n index === lastIndex ? 'truncate font-bold text-doom-hi' : 'shrink-0 truncate text-doom-faint'\n }\n >\n {segment}\n </span>\n </span>\n ))}\n </span>\n </TooltipTrigger>\n <TooltipContent className=\"max-w-[32rem] break-all whitespace-normal\">{path}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n"],"mappings":"+FAcA,SAAgB,EAAmB,EAAc,EAAO,EAAa,CACnE,IAAM,EAAW,EAAK,MAAM,GAAG,CAAC,CAAC,OAAQ,GAAY,IAAY,EAAE,EAInE,OAHI,EAAS,SAAW,EAAU,CAAC,CAAI,EACnC,EAAS,QAAU,EAAa,EAE7B,CAAC,EAAS,IAAM,OAAyB,GAAG,EAAS,MAAM,EAAS,QAAU,EAAO,EAAE,CAAC,CACjG,CAwBA,SAAgB,EAAW,CAAE,OAAM,OAAM,YAAW,cAAe,GAA2B,CAC5F,IAAM,EAAW,EAAmB,EAAM,CAAI,EACxC,EAAY,EAAS,OAAS,EAEpC,OACE,EAAA,EAAA,IAAA,CAACA,EAAAA,gBAAD,CAAA,UACE,EAAA,EAAA,KAAA,CAACC,EAAAA,QAAD,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,QAAA,GACd,UAAA,EAAA,EAAA,IAAA,CAAC,OAAD,CACE,YAAU,aACV,cAAa,EACb,MAAO,IAAA,GACP,UAAWC,EAAAA,GAAG,+DAAgE,CAAS,EAEtF,SAAA,EAAS,KAAK,EAAS,KAGtB,EAAA,EAAA,KAAA,CAAC,OAAD,CAA0C,UAAU,oCAApD,SAAA,CACG,EAAQ,GAAI,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,2BAA2B,SAAA,GAAO,CAAA,EAAI,MACnE,EAAA,EAAA,IAAA,CAAC,OAAD,CACE,UACE,IAAU,EAAY,kCAAoC,oCAG3D,SAAA,CACG,CAAA,CACF,CATK,EAAA,GAAG,EAAQ,GAAG,OAAO,CAAK,GAS/B,CACP,CACG,CAAA,CACQ,CAAA,GAChB,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,UAAU,4CAA6C,SAAA,CAAqB,CAAA,CACrF,CAAA,CAAA,CACM,CAAA,CAErB"}
@@ -1,2 +1,2 @@
1
- import{cn as e}from"../lib/cn.mjs";import{Tooltip as t,TooltipContent as n,TooltipProvider as r,TooltipTrigger as i}from"./Tooltip.mjs";import{jsx as a,jsxs as o}from"react/jsx-runtime";const s=`…`;function c(e,t=4){let n=e.split(`/`).filter(e=>e!==``);return n.length===0?[e]:n.length<=t?n:[n[0]??``,`…`,...n.slice(n.length-(t-2))]}function l({path:s,keep:l,className:u,"data-testid":d}){let f=c(s,l),p=f.length-1;return a(r,{children:o(t,{children:[a(i,{asChild:!0,children:a(`span`,{"data-slot":`breadcrumb`,"data-testid":d,title:void 0,className:e(`flex min-w-0 items-baseline gap-1 truncate font-mono text-[12px]`,u),children:f.map((e,t)=>o(`span`,{className:`flex min-w-0 items-baseline gap-1`,children:[t>0?a(`span`,{className:`shrink-0 text-doom-faint`,children:`/`}):null,a(`span`,{className:t===p?`truncate font-bold text-doom-hi`:`shrink-0 truncate text-doom-faint`,children:e})]},`${e}-${String(t)}`))})}),a(n,{className:`max-w-[32rem] break-all whitespace-normal`,children:s})]})})}export{s as BREADCRUMB_ELLIPSIS,l as Breadcrumb,c as breadcrumbSegments};
1
+ import{cn as e}from"../lib/cn.mjs";import{Tooltip as t,TooltipContent as n,TooltipProvider as r,TooltipTrigger as i}from"./Tooltip.mjs";import{jsx as a,jsxs as o}from"react/jsx-runtime";const s=`…`;function c(e,t=4){let n=e.split(`/`).filter(e=>e!==``);return n.length===0?[e]:n.length<=t?n:[n[0]??``,`…`,...n.slice(n.length-(t-2))]}function l({path:s,keep:l,className:u,"data-testid":d}){let f=c(s,l),p=f.length-1;return a(r,{children:o(t,{children:[a(i,{asChild:!0,children:a(`span`,{"data-slot":`breadcrumb`,"data-testid":d,title:void 0,className:e(`flex min-w-0 items-baseline gap-1 truncate font-mono text-sm`,u),children:f.map((e,t)=>o(`span`,{className:`flex min-w-0 items-baseline gap-1`,children:[t>0?a(`span`,{className:`shrink-0 text-doom-faint`,children:`/`}):null,a(`span`,{className:t===p?`truncate font-bold text-doom-hi`:`shrink-0 truncate text-doom-faint`,children:e})]},`${e}-${String(t)}`))})}),a(n,{className:`max-w-[32rem] break-all whitespace-normal`,children:s})]})})}export{s as BREADCRUMB_ELLIPSIS,l as Breadcrumb,c as breadcrumbSegments};
2
2
  //# sourceMappingURL=Breadcrumb.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Breadcrumb.mjs","names":[],"sources":["../../../src/components/Breadcrumb.tsx"],"sourcesContent":["import { cn } from '../lib/cn.ts';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './Tooltip.tsx';\n\n/** The marker a collapsed run of segments is shown as. */\nexport const BREADCRUMB_ELLIPSIS = '…';\n\n/**\n * A path as breadcrumb segments, with the middle collapsed when it is deeper\n * than `keep` allows.\n *\n * The first segment and the last few are what place a leaf; the ones between\n * are what a reader skims past, so those are the ones that go. The leaf is\n * always the final segment and is never collapsed.\n */\nexport function breadcrumbSegments(path: string, keep = 4): string[] {\n const segments = path.split('/').filter((segment) => segment !== '');\n if (segments.length === 0) return [path];\n if (segments.length <= keep) return segments;\n // One leading segment for orientation, then the tail that names the leaf.\n return [segments[0] ?? '', BREADCRUMB_ELLIPSIS, ...segments.slice(segments.length - (keep - 2))];\n}\n\nexport interface BreadcrumbProps {\n /** The path to show, separated by forward slashes. */\n path: string;\n /** How many segments survive before the middle collapses. */\n keep?: number;\n /** Marks the trail so a test can find it. */\n 'data-testid'?: string;\n className?: string;\n}\n\n/**\n * A slash-separated path, shortened to fit and readable in full on hover.\n *\n * Two things shorten it, because they solve different problems. Collapsing the\n * middle keeps a deep path legible at any width, and truncation handles what is\n * left when the container is narrower than even that. Either one hides\n * something, so the whole path is always one hover away, wrapped rather than\n * clipped: a tooltip that truncates too would defeat the point of having one.\n *\n * The leaf carries the emphasis. A reader scanning a header is looking for the\n * file, and the directories are context for it.\n */\nexport function Breadcrumb({ path, keep, className, 'data-testid': testId }: BreadcrumbProps) {\n const segments = breadcrumbSegments(path, keep);\n const lastIndex = segments.length - 1;\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n data-slot=\"breadcrumb\"\n data-testid={testId}\n title={undefined}\n className={cn('flex min-w-0 items-baseline gap-1 truncate font-mono text-[12px]', className)}\n >\n {segments.map((segment, index) => (\n // Segments repeat in a path (src/app/src), so the index is what\n // keeps two of the same name apart.\n <span key={`${segment}-${String(index)}`} className=\"flex min-w-0 items-baseline gap-1\">\n {index > 0 ? <span className=\"shrink-0 text-doom-faint\">/</span> : null}\n <span\n className={\n index === lastIndex ? 'truncate font-bold text-doom-hi' : 'shrink-0 truncate text-doom-faint'\n }\n >\n {segment}\n </span>\n </span>\n ))}\n </span>\n </TooltipTrigger>\n <TooltipContent className=\"max-w-[32rem] break-all whitespace-normal\">{path}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n"],"mappings":"0LAIA,MAAa,EAAsB,IAUnC,SAAgB,EAAmB,EAAc,EAAO,EAAa,CACnE,IAAM,EAAW,EAAK,MAAM,GAAG,CAAC,CAAC,OAAQ,GAAY,IAAY,EAAE,EAInE,OAHI,EAAS,SAAW,EAAU,CAAC,CAAI,EACnC,EAAS,QAAU,EAAa,EAE7B,CAAC,EAAS,IAAM,OAAyB,GAAG,EAAS,MAAM,EAAS,QAAU,EAAO,EAAE,CAAC,CACjG,CAwBA,SAAgB,EAAW,CAAE,OAAM,OAAM,YAAW,cAAe,GAA2B,CAC5F,IAAM,EAAW,EAAmB,EAAM,CAAI,EACxC,EAAY,EAAS,OAAS,EAEpC,OACE,EAAC,EAAD,CAAA,SACE,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAgB,QAAA,GACd,SAAA,EAAC,OAAD,CACE,YAAU,aACV,cAAa,EACb,MAAO,IAAA,GACP,UAAW,EAAG,mEAAoE,CAAS,EAE1F,SAAA,EAAS,KAAK,EAAS,IAGtB,EAAC,OAAD,CAA0C,UAAU,oCAApD,SAAA,CACG,EAAQ,EAAI,EAAC,OAAD,CAAM,UAAU,2BAA2B,SAAA,GAAO,CAAA,EAAI,KACnE,EAAC,OAAD,CACE,UACE,IAAU,EAAY,kCAAoC,oCAG3D,SAAA,CACG,CAAA,CACF,CATK,EAAA,GAAG,EAAQ,GAAG,OAAO,CAAK,GAS/B,CACP,CACG,CAAA,CACQ,CAAA,EAChB,EAAC,EAAD,CAAgB,UAAU,4CAA6C,SAAA,CAAqB,CAAA,CACrF,CAAA,CAAA,CACM,CAAA,CAErB"}
1
+ {"version":3,"file":"Breadcrumb.mjs","names":[],"sources":["../../../src/components/Breadcrumb.tsx"],"sourcesContent":["import { cn } from '../lib/cn.ts';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './Tooltip.tsx';\n\n/** The marker a collapsed run of segments is shown as. */\nexport const BREADCRUMB_ELLIPSIS = '…';\n\n/**\n * A path as breadcrumb segments, with the middle collapsed when it is deeper\n * than `keep` allows.\n *\n * The first segment and the last few are what place a leaf; the ones between\n * are what a reader skims past, so those are the ones that go. The leaf is\n * always the final segment and is never collapsed.\n */\nexport function breadcrumbSegments(path: string, keep = 4): string[] {\n const segments = path.split('/').filter((segment) => segment !== '');\n if (segments.length === 0) return [path];\n if (segments.length <= keep) return segments;\n // One leading segment for orientation, then the tail that names the leaf.\n return [segments[0] ?? '', BREADCRUMB_ELLIPSIS, ...segments.slice(segments.length - (keep - 2))];\n}\n\nexport interface BreadcrumbProps {\n /** The path to show, separated by forward slashes. */\n path: string;\n /** How many segments survive before the middle collapses. */\n keep?: number;\n /** Marks the trail so a test can find it. */\n 'data-testid'?: string;\n className?: string;\n}\n\n/**\n * A slash-separated path, shortened to fit and readable in full on hover.\n *\n * Two things shorten it, because they solve different problems. Collapsing the\n * middle keeps a deep path legible at any width, and truncation handles what is\n * left when the container is narrower than even that. Either one hides\n * something, so the whole path is always one hover away, wrapped rather than\n * clipped: a tooltip that truncates too would defeat the point of having one.\n *\n * The leaf carries the emphasis. A reader scanning a header is looking for the\n * file, and the directories are context for it.\n */\nexport function Breadcrumb({ path, keep, className, 'data-testid': testId }: BreadcrumbProps) {\n const segments = breadcrumbSegments(path, keep);\n const lastIndex = segments.length - 1;\n\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span\n data-slot=\"breadcrumb\"\n data-testid={testId}\n title={undefined}\n className={cn('flex min-w-0 items-baseline gap-1 truncate font-mono text-sm', className)}\n >\n {segments.map((segment, index) => (\n // Segments repeat in a path (src/app/src), so the index is what\n // keeps two of the same name apart.\n <span key={`${segment}-${String(index)}`} className=\"flex min-w-0 items-baseline gap-1\">\n {index > 0 ? <span className=\"shrink-0 text-doom-faint\">/</span> : null}\n <span\n className={\n index === lastIndex ? 'truncate font-bold text-doom-hi' : 'shrink-0 truncate text-doom-faint'\n }\n >\n {segment}\n </span>\n </span>\n ))}\n </span>\n </TooltipTrigger>\n <TooltipContent className=\"max-w-[32rem] break-all whitespace-normal\">{path}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n}\n"],"mappings":"0LAIA,MAAa,EAAsB,IAUnC,SAAgB,EAAmB,EAAc,EAAO,EAAa,CACnE,IAAM,EAAW,EAAK,MAAM,GAAG,CAAC,CAAC,OAAQ,GAAY,IAAY,EAAE,EAInE,OAHI,EAAS,SAAW,EAAU,CAAC,CAAI,EACnC,EAAS,QAAU,EAAa,EAE7B,CAAC,EAAS,IAAM,OAAyB,GAAG,EAAS,MAAM,EAAS,QAAU,EAAO,EAAE,CAAC,CACjG,CAwBA,SAAgB,EAAW,CAAE,OAAM,OAAM,YAAW,cAAe,GAA2B,CAC5F,IAAM,EAAW,EAAmB,EAAM,CAAI,EACxC,EAAY,EAAS,OAAS,EAEpC,OACE,EAAC,EAAD,CAAA,SACE,EAAC,EAAD,CAAA,SAAA,CACE,EAAC,EAAD,CAAgB,QAAA,GACd,SAAA,EAAC,OAAD,CACE,YAAU,aACV,cAAa,EACb,MAAO,IAAA,GACP,UAAW,EAAG,+DAAgE,CAAS,EAEtF,SAAA,EAAS,KAAK,EAAS,IAGtB,EAAC,OAAD,CAA0C,UAAU,oCAApD,SAAA,CACG,EAAQ,EAAI,EAAC,OAAD,CAAM,UAAU,2BAA2B,SAAA,GAAO,CAAA,EAAI,KACnE,EAAC,OAAD,CACE,UACE,IAAU,EAAY,kCAAoC,oCAG3D,SAAA,CACG,CAAA,CACF,CATK,EAAA,GAAG,EAAQ,GAAG,OAAO,CAAK,GAS/B,CACP,CACG,CAAA,CACQ,CAAA,EAChB,EAAC,EAAD,CAAgB,UAAU,4CAA6C,SAAA,CAAqB,CAAA,CACrF,CAAA,CAAA,CACM,CAAA,CAErB"}
@@ -1,2 +1,2 @@
1
- const e=require("../lib/cn.cjs"),t=require("./Spinner.cjs");let n=require("radix-ui"),r=require("react/jsx-runtime");const i=(0,require("class-variance-authority").cva)(`inline-flex shrink-0 cursor-pointer items-center justify-center gap-1.5 whitespace-nowrap rounded-md font-mono transition-[color,background-color,border-color,filter] outline-none focus-visible:ring-2 focus-visible:ring-doom-blue/50 disabled:pointer-events-none disabled:opacity-40 [&_svg]:pointer-events-none [&_svg]:shrink-0`,{variants:{variant:{primary:`bg-doom-blue font-bold text-doom-rail hover:brightness-110`,outline:`border border-doom-border text-doom-dim hover:border-doom-blue/50 hover:text-doom-hi`,ghost:`text-doom-dim hover:bg-doom-panel hover:text-doom-hi`,subtle:`bg-doom-panel text-doom-dim hover:bg-doom-deep hover:text-doom-hi`,danger:`bg-doom-red font-bold text-doom-rail hover:brightness-110`,"danger-outline":`border border-doom-edge-red bg-doom-tint-red font-bold text-doom-red hover:brightness-110`,success:`bg-doom-green font-bold text-doom-rail hover:brightness-110`,link:`text-doom-blue hover:underline`},size:{xs:`h-5 rounded px-1.5 text-[9px]`,sm:`h-6 px-2.5 text-[10px]`,md:`h-7 px-3 text-[11px]`,lg:`h-8 px-3.5 text-[12px]`,icon:`h-5 w-5 rounded p-0`,"icon-md":`h-7 w-7 p-0`,card:`h-auto w-full flex-col items-stretch justify-start gap-1 px-[11px] py-2.5 text-left whitespace-normal`}},defaultVariants:{variant:`outline`,size:`md`}});function a({className:a,variant:o,size:s,asChild:c=!1,loading:l=!1,loadingLabel:u,disabled:d,type:f,children:p,...m}){let h=c?n.Slot.Root:`button`,g=!c&&l;return(0,r.jsx)(h,{"data-slot":`button`,type:c?void 0:f??`button`,"aria-busy":g?!0:void 0,disabled:c?void 0:d??g,className:e.cn(i({variant:o,size:s}),a),...m,children:c?p:(0,r.jsxs)(r.Fragment,{children:[g?(0,r.jsx)(t.Spinner,{label:u}):null,p]})})}exports.Button=a,exports.buttonVariants=i;
1
+ const e=require("../lib/cn.cjs"),t=require("./Spinner.cjs");let n=require("radix-ui"),r=require("react/jsx-runtime");const i=(0,require("class-variance-authority").cva)(`inline-flex shrink-0 cursor-pointer items-center justify-center gap-1.5 whitespace-nowrap rounded-md font-mono transition-[color,background-color,border-color,filter] outline-none focus-visible:ring-2 focus-visible:ring-doom-blue/50 disabled:pointer-events-none disabled:opacity-40 [&_svg]:pointer-events-none [&_svg]:shrink-0`,{variants:{variant:{primary:`bg-doom-blue font-bold text-doom-rail hover:brightness-110`,outline:`border border-doom-border text-doom-dim hover:border-doom-blue/50 hover:text-doom-hi`,ghost:`text-doom-dim hover:bg-doom-panel hover:text-doom-hi`,subtle:`bg-doom-panel text-doom-dim hover:bg-doom-deep hover:text-doom-hi`,danger:`bg-doom-red font-bold text-doom-rail hover:brightness-110`,"danger-outline":`border border-doom-edge-red bg-doom-tint-red font-bold text-doom-red hover:brightness-110`,success:`bg-doom-green font-bold text-doom-rail hover:brightness-110`,link:`text-doom-blue hover:underline`},size:{xs:`h-5 rounded px-1.5 text-2xs`,sm:`h-6 px-2.5 text-xs`,md:`h-7 px-3 text-sm`,lg:`h-8 px-3.5 text-base`,icon:`h-5 w-5 rounded p-0`,"icon-md":`h-7 w-7 p-0`,card:`h-auto w-full flex-col items-stretch justify-start gap-1 px-[11px] py-2.5 text-left whitespace-normal`}},defaultVariants:{variant:`outline`,size:`md`}});function a({className:a,variant:o,size:s,asChild:c=!1,loading:l=!1,loadingLabel:u,disabled:d,type:f,children:p,...m}){let h=c?n.Slot.Root:`button`,g=!c&&l;return(0,r.jsx)(h,{"data-slot":`button`,type:c?void 0:f??`button`,"aria-busy":g?!0:void 0,disabled:c?void 0:d??g,className:e.cn(i({variant:o,size:s}),a),...m,children:c?p:(0,r.jsxs)(r.Fragment,{children:[g?(0,r.jsx)(t.Spinner,{label:u}):null,p]})})}exports.Button=a,exports.buttonVariants=i;
2
2
  //# sourceMappingURL=Button.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Button.cjs","names":["cva","Slot","cn","Spinner"],"sources":["../../../src/components/Button.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\nimport type { ComponentProps } from 'react';\nimport { cn } from '../lib/cn.ts';\nimport { Spinner } from './Spinner.tsx';\n\nexport const buttonVariants = cva(\n 'inline-flex shrink-0 cursor-pointer items-center justify-center gap-1.5 whitespace-nowrap rounded-md font-mono transition-[color,background-color,border-color,filter] outline-none focus-visible:ring-2 focus-visible:ring-doom-blue/50 disabled:pointer-events-none disabled:opacity-40 [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n primary: 'bg-doom-blue font-bold text-doom-rail hover:brightness-110',\n outline: 'border border-doom-border text-doom-dim hover:border-doom-blue/50 hover:text-doom-hi',\n ghost: 'text-doom-dim hover:bg-doom-panel hover:text-doom-hi',\n subtle: 'bg-doom-panel text-doom-dim hover:bg-doom-deep hover:text-doom-hi',\n danger: 'bg-doom-red font-bold text-doom-rail hover:brightness-110',\n 'danger-outline': 'border border-doom-edge-red bg-doom-tint-red font-bold text-doom-red hover:brightness-110',\n success: 'bg-doom-green font-bold text-doom-rail hover:brightness-110',\n link: 'text-doom-blue hover:underline',\n },\n size: {\n xs: 'h-5 rounded px-1.5 text-[9px]',\n sm: 'h-6 px-2.5 text-[10px]',\n md: 'h-7 px-3 text-[11px]',\n lg: 'h-8 px-3.5 text-[12px]',\n icon: 'h-5 w-5 rounded p-0',\n 'icon-md': 'h-7 w-7 p-0',\n /**\n * A whole card that is one click target: a session in the rail, a run\n * in a panel. It keeps the button's focus ring and cursor and gives up\n * the button's single-line box, which is what a card-shaped <button>\n * would otherwise have to restate.\n */\n card: 'h-auto w-full flex-col items-stretch justify-start gap-1 px-[11px] py-2.5 text-left whitespace-normal',\n },\n },\n defaultVariants: { variant: 'outline', size: 'md' },\n },\n);\n\nexport type ButtonVariant = NonNullable<VariantProps<typeof buttonVariants>['variant']>;\nexport type ButtonSize = NonNullable<VariantProps<typeof buttonVariants>['size']>;\n\nexport interface ButtonProps extends ComponentProps<'button'>, VariantProps<typeof buttonVariants> {\n /** Render the child element instead of a <button>, passing the classes down (shadcn's asChild). */\n asChild?: boolean;\n /**\n * Work is in flight: the button shows a spinner and stops accepting clicks.\n * Ignored under asChild, where the child owns its own content.\n */\n loading?: boolean;\n /** What the spinner announces while loading; omit it and the wait is silent. */\n loadingLabel?: string;\n}\n\n/** The one button: every variant is a theme token, so it recolours with the theme. */\nexport function Button({\n className,\n variant,\n size,\n asChild = false,\n loading = false,\n loadingLabel,\n disabled,\n type,\n children,\n ...props\n}: ButtonProps) {\n const Component = asChild ? Slot.Root : 'button';\n const busy = !asChild && loading;\n return (\n <Component\n data-slot=\"button\"\n type={asChild ? undefined : (type ?? 'button')}\n aria-busy={busy ? true : undefined}\n disabled={asChild ? undefined : (disabled ?? busy)}\n className={cn(buttonVariants({ variant, size }), className)}\n {...props}\n >\n {/* Slot takes exactly one child, so asChild hands its element straight through. */}\n {asChild ? (\n children\n ) : (\n <>\n {busy ? <Spinner label={loadingLabel} /> : null}\n {children}\n </>\n )}\n </Component>\n );\n}\n"],"mappings":"qHAMA,MAAa,GAAA,oCAAiBA,CAAAA,CAAAA,IAAAA,CAC5B,yUACA,CACE,SAAU,CACR,QAAS,CACP,QAAS,6DACT,QAAS,uFACT,MAAO,uDACP,OAAQ,oEACR,OAAQ,4DACR,iBAAkB,4FAClB,QAAS,8DACT,KAAM,gCACR,EACA,KAAM,CACJ,GAAI,gCACJ,GAAI,yBACJ,GAAI,uBACJ,GAAI,yBACJ,KAAM,sBACN,UAAW,cAOX,KAAM,uGACR,CACF,EACA,gBAAiB,CAAE,QAAS,UAAW,KAAM,IAAK,CACpD,CACF,EAkBA,SAAgB,EAAO,CACrB,YACA,UACA,OACA,UAAU,GACV,UAAU,GACV,eACA,WACA,OACA,WACA,GAAG,GACW,CACd,IAAM,EAAY,EAAUC,EAAAA,KAAK,KAAO,SAClC,EAAO,CAAC,GAAW,EACzB,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,YAAU,SACV,KAAM,EAAU,IAAA,GAAa,GAAQ,SACrC,YAAW,EAAO,GAAO,IAAA,GACzB,SAAU,EAAU,IAAA,GAAa,GAAY,EAC7C,UAAWC,EAAAA,GAAG,EAAe,CAAE,UAAS,MAAK,CAAC,EAAG,CAAS,EAC1D,GAAI,EAGH,SAAA,EACC,GAEA,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,CACG,GAAO,EAAA,EAAA,IAAA,CAACC,EAAAA,QAAD,CAAS,MAAO,CAAe,CAAA,EAAI,KAC1C,CACD,CAAA,CAAA,CAEK,CAAA,CAEf"}
1
+ {"version":3,"file":"Button.cjs","names":["cva","Slot","cn","Spinner"],"sources":["../../../src/components/Button.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\nimport type { ComponentProps } from 'react';\nimport { cn } from '../lib/cn.ts';\nimport { Spinner } from './Spinner.tsx';\n\nexport const buttonVariants = cva(\n 'inline-flex shrink-0 cursor-pointer items-center justify-center gap-1.5 whitespace-nowrap rounded-md font-mono transition-[color,background-color,border-color,filter] outline-none focus-visible:ring-2 focus-visible:ring-doom-blue/50 disabled:pointer-events-none disabled:opacity-40 [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n primary: 'bg-doom-blue font-bold text-doom-rail hover:brightness-110',\n outline: 'border border-doom-border text-doom-dim hover:border-doom-blue/50 hover:text-doom-hi',\n ghost: 'text-doom-dim hover:bg-doom-panel hover:text-doom-hi',\n subtle: 'bg-doom-panel text-doom-dim hover:bg-doom-deep hover:text-doom-hi',\n danger: 'bg-doom-red font-bold text-doom-rail hover:brightness-110',\n 'danger-outline': 'border border-doom-edge-red bg-doom-tint-red font-bold text-doom-red hover:brightness-110',\n success: 'bg-doom-green font-bold text-doom-rail hover:brightness-110',\n link: 'text-doom-blue hover:underline',\n },\n size: {\n xs: 'h-5 rounded px-1.5 text-2xs',\n sm: 'h-6 px-2.5 text-xs',\n md: 'h-7 px-3 text-sm',\n lg: 'h-8 px-3.5 text-base',\n icon: 'h-5 w-5 rounded p-0',\n 'icon-md': 'h-7 w-7 p-0',\n /**\n * A whole card that is one click target: a session in the rail, a run\n * in a panel. It keeps the button's focus ring and cursor and gives up\n * the button's single-line box, which is what a card-shaped <button>\n * would otherwise have to restate.\n */\n card: 'h-auto w-full flex-col items-stretch justify-start gap-1 px-[11px] py-2.5 text-left whitespace-normal',\n },\n },\n defaultVariants: { variant: 'outline', size: 'md' },\n },\n);\n\nexport type ButtonVariant = NonNullable<VariantProps<typeof buttonVariants>['variant']>;\nexport type ButtonSize = NonNullable<VariantProps<typeof buttonVariants>['size']>;\n\nexport interface ButtonProps extends ComponentProps<'button'>, VariantProps<typeof buttonVariants> {\n /** Render the child element instead of a <button>, passing the classes down (shadcn's asChild). */\n asChild?: boolean;\n /**\n * Work is in flight: the button shows a spinner and stops accepting clicks.\n * Ignored under asChild, where the child owns its own content.\n */\n loading?: boolean;\n /** What the spinner announces while loading; omit it and the wait is silent. */\n loadingLabel?: string;\n}\n\n/** The one button: every variant is a theme token, so it recolours with the theme. */\nexport function Button({\n className,\n variant,\n size,\n asChild = false,\n loading = false,\n loadingLabel,\n disabled,\n type,\n children,\n ...props\n}: ButtonProps) {\n const Component = asChild ? Slot.Root : 'button';\n const busy = !asChild && loading;\n return (\n <Component\n data-slot=\"button\"\n type={asChild ? undefined : (type ?? 'button')}\n aria-busy={busy ? true : undefined}\n disabled={asChild ? undefined : (disabled ?? busy)}\n className={cn(buttonVariants({ variant, size }), className)}\n {...props}\n >\n {/* Slot takes exactly one child, so asChild hands its element straight through. */}\n {asChild ? (\n children\n ) : (\n <>\n {busy ? <Spinner label={loadingLabel} /> : null}\n {children}\n </>\n )}\n </Component>\n );\n}\n"],"mappings":"qHAMA,MAAa,GAAA,oCAAiBA,CAAAA,CAAAA,IAAAA,CAC5B,yUACA,CACE,SAAU,CACR,QAAS,CACP,QAAS,6DACT,QAAS,uFACT,MAAO,uDACP,OAAQ,oEACR,OAAQ,4DACR,iBAAkB,4FAClB,QAAS,8DACT,KAAM,gCACR,EACA,KAAM,CACJ,GAAI,8BACJ,GAAI,qBACJ,GAAI,mBACJ,GAAI,uBACJ,KAAM,sBACN,UAAW,cAOX,KAAM,uGACR,CACF,EACA,gBAAiB,CAAE,QAAS,UAAW,KAAM,IAAK,CACpD,CACF,EAkBA,SAAgB,EAAO,CACrB,YACA,UACA,OACA,UAAU,GACV,UAAU,GACV,eACA,WACA,OACA,WACA,GAAG,GACW,CACd,IAAM,EAAY,EAAUC,EAAAA,KAAK,KAAO,SAClC,EAAO,CAAC,GAAW,EACzB,OACE,EAAA,EAAA,IAAA,CAAC,EAAD,CACE,YAAU,SACV,KAAM,EAAU,IAAA,GAAa,GAAQ,SACrC,YAAW,EAAO,GAAO,IAAA,GACzB,SAAU,EAAU,IAAA,GAAa,GAAY,EAC7C,UAAWC,EAAAA,GAAG,EAAe,CAAE,UAAS,MAAK,CAAC,EAAG,CAAS,EAC1D,GAAI,EAGH,SAAA,EACC,GAEA,EAAA,EAAA,KAAA,CAAA,EAAA,SAAA,CAAA,SAAA,CACG,GAAO,EAAA,EAAA,IAAA,CAACC,EAAAA,QAAD,CAAS,MAAO,CAAe,CAAA,EAAI,KAC1C,CACD,CAAA,CAAA,CAEK,CAAA,CAEf"}
@@ -1,2 +1,2 @@
1
- import{cn as e}from"../lib/cn.mjs";import{Spinner as t}from"./Spinner.mjs";import{Slot as n}from"radix-ui";import{Fragment as r,jsx as i,jsxs as a}from"react/jsx-runtime";import{cva as o}from"class-variance-authority";const s=o(`inline-flex shrink-0 cursor-pointer items-center justify-center gap-1.5 whitespace-nowrap rounded-md font-mono transition-[color,background-color,border-color,filter] outline-none focus-visible:ring-2 focus-visible:ring-doom-blue/50 disabled:pointer-events-none disabled:opacity-40 [&_svg]:pointer-events-none [&_svg]:shrink-0`,{variants:{variant:{primary:`bg-doom-blue font-bold text-doom-rail hover:brightness-110`,outline:`border border-doom-border text-doom-dim hover:border-doom-blue/50 hover:text-doom-hi`,ghost:`text-doom-dim hover:bg-doom-panel hover:text-doom-hi`,subtle:`bg-doom-panel text-doom-dim hover:bg-doom-deep hover:text-doom-hi`,danger:`bg-doom-red font-bold text-doom-rail hover:brightness-110`,"danger-outline":`border border-doom-edge-red bg-doom-tint-red font-bold text-doom-red hover:brightness-110`,success:`bg-doom-green font-bold text-doom-rail hover:brightness-110`,link:`text-doom-blue hover:underline`},size:{xs:`h-5 rounded px-1.5 text-[9px]`,sm:`h-6 px-2.5 text-[10px]`,md:`h-7 px-3 text-[11px]`,lg:`h-8 px-3.5 text-[12px]`,icon:`h-5 w-5 rounded p-0`,"icon-md":`h-7 w-7 p-0`,card:`h-auto w-full flex-col items-stretch justify-start gap-1 px-[11px] py-2.5 text-left whitespace-normal`}},defaultVariants:{variant:`outline`,size:`md`}});function c({className:o,variant:c,size:l,asChild:u=!1,loading:d=!1,loadingLabel:f,disabled:p,type:m,children:h,...g}){let _=u?n.Root:`button`,v=!u&&d;return i(_,{"data-slot":`button`,type:u?void 0:m??`button`,"aria-busy":v?!0:void 0,disabled:u?void 0:p??v,className:e(s({variant:c,size:l}),o),...g,children:u?h:a(r,{children:[v?i(t,{label:f}):null,h]})})}export{c as Button,s as buttonVariants};
1
+ import{cn as e}from"../lib/cn.mjs";import{Spinner as t}from"./Spinner.mjs";import{Slot as n}from"radix-ui";import{Fragment as r,jsx as i,jsxs as a}from"react/jsx-runtime";import{cva as o}from"class-variance-authority";const s=o(`inline-flex shrink-0 cursor-pointer items-center justify-center gap-1.5 whitespace-nowrap rounded-md font-mono transition-[color,background-color,border-color,filter] outline-none focus-visible:ring-2 focus-visible:ring-doom-blue/50 disabled:pointer-events-none disabled:opacity-40 [&_svg]:pointer-events-none [&_svg]:shrink-0`,{variants:{variant:{primary:`bg-doom-blue font-bold text-doom-rail hover:brightness-110`,outline:`border border-doom-border text-doom-dim hover:border-doom-blue/50 hover:text-doom-hi`,ghost:`text-doom-dim hover:bg-doom-panel hover:text-doom-hi`,subtle:`bg-doom-panel text-doom-dim hover:bg-doom-deep hover:text-doom-hi`,danger:`bg-doom-red font-bold text-doom-rail hover:brightness-110`,"danger-outline":`border border-doom-edge-red bg-doom-tint-red font-bold text-doom-red hover:brightness-110`,success:`bg-doom-green font-bold text-doom-rail hover:brightness-110`,link:`text-doom-blue hover:underline`},size:{xs:`h-5 rounded px-1.5 text-2xs`,sm:`h-6 px-2.5 text-xs`,md:`h-7 px-3 text-sm`,lg:`h-8 px-3.5 text-base`,icon:`h-5 w-5 rounded p-0`,"icon-md":`h-7 w-7 p-0`,card:`h-auto w-full flex-col items-stretch justify-start gap-1 px-[11px] py-2.5 text-left whitespace-normal`}},defaultVariants:{variant:`outline`,size:`md`}});function c({className:o,variant:c,size:l,asChild:u=!1,loading:d=!1,loadingLabel:f,disabled:p,type:m,children:h,...g}){let _=u?n.Root:`button`,v=!u&&d;return i(_,{"data-slot":`button`,type:u?void 0:m??`button`,"aria-busy":v?!0:void 0,disabled:u?void 0:p??v,className:e(s({variant:c,size:l}),o),...g,children:u?h:a(r,{children:[v?i(t,{label:f}):null,h]})})}export{c as Button,s as buttonVariants};
2
2
  //# sourceMappingURL=Button.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Button.mjs","names":[],"sources":["../../../src/components/Button.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\nimport type { ComponentProps } from 'react';\nimport { cn } from '../lib/cn.ts';\nimport { Spinner } from './Spinner.tsx';\n\nexport const buttonVariants = cva(\n 'inline-flex shrink-0 cursor-pointer items-center justify-center gap-1.5 whitespace-nowrap rounded-md font-mono transition-[color,background-color,border-color,filter] outline-none focus-visible:ring-2 focus-visible:ring-doom-blue/50 disabled:pointer-events-none disabled:opacity-40 [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n primary: 'bg-doom-blue font-bold text-doom-rail hover:brightness-110',\n outline: 'border border-doom-border text-doom-dim hover:border-doom-blue/50 hover:text-doom-hi',\n ghost: 'text-doom-dim hover:bg-doom-panel hover:text-doom-hi',\n subtle: 'bg-doom-panel text-doom-dim hover:bg-doom-deep hover:text-doom-hi',\n danger: 'bg-doom-red font-bold text-doom-rail hover:brightness-110',\n 'danger-outline': 'border border-doom-edge-red bg-doom-tint-red font-bold text-doom-red hover:brightness-110',\n success: 'bg-doom-green font-bold text-doom-rail hover:brightness-110',\n link: 'text-doom-blue hover:underline',\n },\n size: {\n xs: 'h-5 rounded px-1.5 text-[9px]',\n sm: 'h-6 px-2.5 text-[10px]',\n md: 'h-7 px-3 text-[11px]',\n lg: 'h-8 px-3.5 text-[12px]',\n icon: 'h-5 w-5 rounded p-0',\n 'icon-md': 'h-7 w-7 p-0',\n /**\n * A whole card that is one click target: a session in the rail, a run\n * in a panel. It keeps the button's focus ring and cursor and gives up\n * the button's single-line box, which is what a card-shaped <button>\n * would otherwise have to restate.\n */\n card: 'h-auto w-full flex-col items-stretch justify-start gap-1 px-[11px] py-2.5 text-left whitespace-normal',\n },\n },\n defaultVariants: { variant: 'outline', size: 'md' },\n },\n);\n\nexport type ButtonVariant = NonNullable<VariantProps<typeof buttonVariants>['variant']>;\nexport type ButtonSize = NonNullable<VariantProps<typeof buttonVariants>['size']>;\n\nexport interface ButtonProps extends ComponentProps<'button'>, VariantProps<typeof buttonVariants> {\n /** Render the child element instead of a <button>, passing the classes down (shadcn's asChild). */\n asChild?: boolean;\n /**\n * Work is in flight: the button shows a spinner and stops accepting clicks.\n * Ignored under asChild, where the child owns its own content.\n */\n loading?: boolean;\n /** What the spinner announces while loading; omit it and the wait is silent. */\n loadingLabel?: string;\n}\n\n/** The one button: every variant is a theme token, so it recolours with the theme. */\nexport function Button({\n className,\n variant,\n size,\n asChild = false,\n loading = false,\n loadingLabel,\n disabled,\n type,\n children,\n ...props\n}: ButtonProps) {\n const Component = asChild ? Slot.Root : 'button';\n const busy = !asChild && loading;\n return (\n <Component\n data-slot=\"button\"\n type={asChild ? undefined : (type ?? 'button')}\n aria-busy={busy ? true : undefined}\n disabled={asChild ? undefined : (disabled ?? busy)}\n className={cn(buttonVariants({ variant, size }), className)}\n {...props}\n >\n {/* Slot takes exactly one child, so asChild hands its element straight through. */}\n {asChild ? (\n children\n ) : (\n <>\n {busy ? <Spinner label={loadingLabel} /> : null}\n {children}\n </>\n )}\n </Component>\n );\n}\n"],"mappings":"0NAMA,MAAa,EAAiB,EAC5B,yUACA,CACE,SAAU,CACR,QAAS,CACP,QAAS,6DACT,QAAS,uFACT,MAAO,uDACP,OAAQ,oEACR,OAAQ,4DACR,iBAAkB,4FAClB,QAAS,8DACT,KAAM,gCACR,EACA,KAAM,CACJ,GAAI,gCACJ,GAAI,yBACJ,GAAI,uBACJ,GAAI,yBACJ,KAAM,sBACN,UAAW,cAOX,KAAM,uGACR,CACF,EACA,gBAAiB,CAAE,QAAS,UAAW,KAAM,IAAK,CACpD,CACF,EAkBA,SAAgB,EAAO,CACrB,YACA,UACA,OACA,UAAU,GACV,UAAU,GACV,eACA,WACA,OACA,WACA,GAAG,GACW,CACd,IAAM,EAAY,EAAU,EAAK,KAAO,SAClC,EAAO,CAAC,GAAW,EACzB,OACE,EAAC,EAAD,CACE,YAAU,SACV,KAAM,EAAU,IAAA,GAAa,GAAQ,SACrC,YAAW,EAAO,GAAO,IAAA,GACzB,SAAU,EAAU,IAAA,GAAa,GAAY,EAC7C,UAAW,EAAG,EAAe,CAAE,UAAS,MAAK,CAAC,EAAG,CAAS,EAC1D,GAAI,EAGH,SAAA,EACC,EAEA,EAAA,EAAA,CAAA,SAAA,CACG,EAAO,EAAC,EAAD,CAAS,MAAO,CAAe,CAAA,EAAI,KAC1C,CACD,CAAA,CAAA,CAEK,CAAA,CAEf"}
1
+ {"version":3,"file":"Button.mjs","names":[],"sources":["../../../src/components/Button.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport { Slot } from 'radix-ui';\nimport type { ComponentProps } from 'react';\nimport { cn } from '../lib/cn.ts';\nimport { Spinner } from './Spinner.tsx';\n\nexport const buttonVariants = cva(\n 'inline-flex shrink-0 cursor-pointer items-center justify-center gap-1.5 whitespace-nowrap rounded-md font-mono transition-[color,background-color,border-color,filter] outline-none focus-visible:ring-2 focus-visible:ring-doom-blue/50 disabled:pointer-events-none disabled:opacity-40 [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n primary: 'bg-doom-blue font-bold text-doom-rail hover:brightness-110',\n outline: 'border border-doom-border text-doom-dim hover:border-doom-blue/50 hover:text-doom-hi',\n ghost: 'text-doom-dim hover:bg-doom-panel hover:text-doom-hi',\n subtle: 'bg-doom-panel text-doom-dim hover:bg-doom-deep hover:text-doom-hi',\n danger: 'bg-doom-red font-bold text-doom-rail hover:brightness-110',\n 'danger-outline': 'border border-doom-edge-red bg-doom-tint-red font-bold text-doom-red hover:brightness-110',\n success: 'bg-doom-green font-bold text-doom-rail hover:brightness-110',\n link: 'text-doom-blue hover:underline',\n },\n size: {\n xs: 'h-5 rounded px-1.5 text-2xs',\n sm: 'h-6 px-2.5 text-xs',\n md: 'h-7 px-3 text-sm',\n lg: 'h-8 px-3.5 text-base',\n icon: 'h-5 w-5 rounded p-0',\n 'icon-md': 'h-7 w-7 p-0',\n /**\n * A whole card that is one click target: a session in the rail, a run\n * in a panel. It keeps the button's focus ring and cursor and gives up\n * the button's single-line box, which is what a card-shaped <button>\n * would otherwise have to restate.\n */\n card: 'h-auto w-full flex-col items-stretch justify-start gap-1 px-[11px] py-2.5 text-left whitespace-normal',\n },\n },\n defaultVariants: { variant: 'outline', size: 'md' },\n },\n);\n\nexport type ButtonVariant = NonNullable<VariantProps<typeof buttonVariants>['variant']>;\nexport type ButtonSize = NonNullable<VariantProps<typeof buttonVariants>['size']>;\n\nexport interface ButtonProps extends ComponentProps<'button'>, VariantProps<typeof buttonVariants> {\n /** Render the child element instead of a <button>, passing the classes down (shadcn's asChild). */\n asChild?: boolean;\n /**\n * Work is in flight: the button shows a spinner and stops accepting clicks.\n * Ignored under asChild, where the child owns its own content.\n */\n loading?: boolean;\n /** What the spinner announces while loading; omit it and the wait is silent. */\n loadingLabel?: string;\n}\n\n/** The one button: every variant is a theme token, so it recolours with the theme. */\nexport function Button({\n className,\n variant,\n size,\n asChild = false,\n loading = false,\n loadingLabel,\n disabled,\n type,\n children,\n ...props\n}: ButtonProps) {\n const Component = asChild ? Slot.Root : 'button';\n const busy = !asChild && loading;\n return (\n <Component\n data-slot=\"button\"\n type={asChild ? undefined : (type ?? 'button')}\n aria-busy={busy ? true : undefined}\n disabled={asChild ? undefined : (disabled ?? busy)}\n className={cn(buttonVariants({ variant, size }), className)}\n {...props}\n >\n {/* Slot takes exactly one child, so asChild hands its element straight through. */}\n {asChild ? (\n children\n ) : (\n <>\n {busy ? <Spinner label={loadingLabel} /> : null}\n {children}\n </>\n )}\n </Component>\n );\n}\n"],"mappings":"0NAMA,MAAa,EAAiB,EAC5B,yUACA,CACE,SAAU,CACR,QAAS,CACP,QAAS,6DACT,QAAS,uFACT,MAAO,uDACP,OAAQ,oEACR,OAAQ,4DACR,iBAAkB,4FAClB,QAAS,8DACT,KAAM,gCACR,EACA,KAAM,CACJ,GAAI,8BACJ,GAAI,qBACJ,GAAI,mBACJ,GAAI,uBACJ,KAAM,sBACN,UAAW,cAOX,KAAM,uGACR,CACF,EACA,gBAAiB,CAAE,QAAS,UAAW,KAAM,IAAK,CACpD,CACF,EAkBA,SAAgB,EAAO,CACrB,YACA,UACA,OACA,UAAU,GACV,UAAU,GACV,eACA,WACA,OACA,WACA,GAAG,GACW,CACd,IAAM,EAAY,EAAU,EAAK,KAAO,SAClC,EAAO,CAAC,GAAW,EACzB,OACE,EAAC,EAAD,CACE,YAAU,SACV,KAAM,EAAU,IAAA,GAAa,GAAQ,SACrC,YAAW,EAAO,GAAO,IAAA,GACzB,SAAU,EAAU,IAAA,GAAa,GAAY,EAC7C,UAAW,EAAG,EAAe,CAAE,UAAS,MAAK,CAAC,EAAG,CAAS,EAC1D,GAAI,EAGH,SAAA,EACC,EAEA,EAAA,EAAA,CAAA,SAAA,CACG,EAAO,EAAC,EAAD,CAAS,MAAO,CAAe,CAAA,EAAI,KAC1C,CACD,CAAA,CAAA,CAEK,CAAA,CAEf"}
@@ -1,2 +1,2 @@
1
- require("../icons/icons.cjs");const e=require("../lib/cn.cjs");let t=require("radix-ui"),n=require("react/jsx-runtime"),r=require("lucide-react");function i({className:i,...a}){return(0,n.jsx)(t.Checkbox.Root,{"data-slot":`checkbox`,className:e.cn(`flex h-3.5 w-3.5 shrink-0 cursor-pointer items-center justify-center rounded-[3px] border border-doom-border bg-doom-deep outline-none transition-colors focus-visible:ring-2 focus-visible:ring-doom-blue/50 disabled:pointer-events-none disabled:opacity-40 data-[state=checked]:border-doom-blue data-[state=indeterminate]:border-doom-blue`,i),...a,children:(0,n.jsx)(t.Checkbox.Indicator,{"data-slot":`checkbox-indicator`,className:`text-doom-blue`,children:(0,n.jsx)(r.Check,{className:`h-2.5 w-2.5`})})})}exports.Checkbox=i;
1
+ require("../icons/icons.cjs");const e=require("../lib/cn.cjs");let t=require("radix-ui"),n=require("react/jsx-runtime"),r=require("lucide-react");function i({className:i,...a}){return(0,n.jsx)(t.Checkbox.Root,{"data-slot":`checkbox`,className:e.cn(`flex h-3.5 w-3.5 shrink-0 cursor-pointer items-center justify-center rounded-sm border border-doom-border bg-doom-deep outline-none transition-colors focus-visible:ring-2 focus-visible:ring-doom-blue/50 disabled:pointer-events-none disabled:opacity-40 data-[state=checked]:border-doom-blue data-[state=indeterminate]:border-doom-blue`,i),...a,children:(0,n.jsx)(t.Checkbox.Indicator,{"data-slot":`checkbox-indicator`,className:`text-doom-blue`,children:(0,n.jsx)(r.Check,{className:`h-2.5 w-2.5`})})})}exports.Checkbox=i;
2
2
  //# sourceMappingURL=Checkbox.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox.cjs","names":["CheckboxPrimitive","cn","CheckIcon"],"sources":["../../../src/components/Checkbox.tsx"],"sourcesContent":["import { Checkbox as CheckboxPrimitive } from 'radix-ui';\nimport type { ComponentProps } from 'react';\nimport { CheckIcon } from '../icons/icons.ts';\nimport { cn } from '../lib/cn.ts';\n\n/** A box that is on, off, or indeterminate; the tick is the accent on the deep well. */\nexport function Checkbox({ className, ...props }: ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'flex h-3.5 w-3.5 shrink-0 cursor-pointer items-center justify-center rounded-[3px] border border-doom-border bg-doom-deep outline-none transition-colors focus-visible:ring-2 focus-visible:ring-doom-blue/50 disabled:pointer-events-none disabled:opacity-40 data-[state=checked]:border-doom-blue data-[state=indeterminate]:border-doom-blue',\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator data-slot=\"checkbox-indicator\" className=\"text-doom-blue\">\n <CheckIcon className=\"h-2.5 w-2.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n"],"mappings":"kJAMA,SAAgB,EAAS,CAAE,YAAW,GAAG,GAAwD,CAC/F,OACE,EAAA,EAAA,IAAA,CAACA,EAAAA,SAAkB,KAAnB,CACE,YAAU,WACV,UAAWC,EAAAA,GACT,mVACA,CACF,EACA,GAAI,EAEJ,UAAA,EAAA,EAAA,IAAA,CAACD,EAAAA,SAAkB,UAAnB,CAA6B,YAAU,qBAAqB,UAAU,iBACpE,UAAA,EAAA,EAAA,IAAA,CAACE,EAAAA,MAAD,CAAW,UAAU,aAAe,CAAA,CACT,CAAA,CACP,CAAA,CAE5B"}
1
+ {"version":3,"file":"Checkbox.cjs","names":["CheckboxPrimitive","cn","CheckIcon"],"sources":["../../../src/components/Checkbox.tsx"],"sourcesContent":["import { Checkbox as CheckboxPrimitive } from 'radix-ui';\nimport type { ComponentProps } from 'react';\nimport { CheckIcon } from '../icons/icons.ts';\nimport { cn } from '../lib/cn.ts';\n\n/** A box that is on, off, or indeterminate; the tick is the accent on the deep well. */\nexport function Checkbox({ className, ...props }: ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'flex h-3.5 w-3.5 shrink-0 cursor-pointer items-center justify-center rounded-sm border border-doom-border bg-doom-deep outline-none transition-colors focus-visible:ring-2 focus-visible:ring-doom-blue/50 disabled:pointer-events-none disabled:opacity-40 data-[state=checked]:border-doom-blue data-[state=indeterminate]:border-doom-blue',\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator data-slot=\"checkbox-indicator\" className=\"text-doom-blue\">\n <CheckIcon className=\"h-2.5 w-2.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n"],"mappings":"kJAMA,SAAgB,EAAS,CAAE,YAAW,GAAG,GAAwD,CAC/F,OACE,EAAA,EAAA,IAAA,CAACA,EAAAA,SAAkB,KAAnB,CACE,YAAU,WACV,UAAWC,EAAAA,GACT,gVACA,CACF,EACA,GAAI,EAEJ,UAAA,EAAA,EAAA,IAAA,CAACD,EAAAA,SAAkB,UAAnB,CAA6B,YAAU,qBAAqB,UAAU,iBACpE,UAAA,EAAA,EAAA,IAAA,CAACE,EAAAA,MAAD,CAAW,UAAU,aAAe,CAAA,CACT,CAAA,CACP,CAAA,CAE5B"}
@@ -1,2 +1,2 @@
1
- import{CheckIcon as e}from"../icons/icons.mjs";import{cn as t}from"../lib/cn.mjs";import{Checkbox as n}from"radix-ui";import{jsx as r}from"react/jsx-runtime";function i({className:i,...a}){return r(n.Root,{"data-slot":`checkbox`,className:t(`flex h-3.5 w-3.5 shrink-0 cursor-pointer items-center justify-center rounded-[3px] border border-doom-border bg-doom-deep outline-none transition-colors focus-visible:ring-2 focus-visible:ring-doom-blue/50 disabled:pointer-events-none disabled:opacity-40 data-[state=checked]:border-doom-blue data-[state=indeterminate]:border-doom-blue`,i),...a,children:r(n.Indicator,{"data-slot":`checkbox-indicator`,className:`text-doom-blue`,children:r(e,{className:`h-2.5 w-2.5`})})})}export{i as Checkbox};
1
+ import{CheckIcon as e}from"../icons/icons.mjs";import{cn as t}from"../lib/cn.mjs";import{Checkbox as n}from"radix-ui";import{jsx as r}from"react/jsx-runtime";function i({className:i,...a}){return r(n.Root,{"data-slot":`checkbox`,className:t(`flex h-3.5 w-3.5 shrink-0 cursor-pointer items-center justify-center rounded-sm border border-doom-border bg-doom-deep outline-none transition-colors focus-visible:ring-2 focus-visible:ring-doom-blue/50 disabled:pointer-events-none disabled:opacity-40 data-[state=checked]:border-doom-blue data-[state=indeterminate]:border-doom-blue`,i),...a,children:r(n.Indicator,{"data-slot":`checkbox-indicator`,className:`text-doom-blue`,children:r(e,{className:`h-2.5 w-2.5`})})})}export{i as Checkbox};
2
2
  //# sourceMappingURL=Checkbox.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox.mjs","names":["Checkbox","CheckboxPrimitive"],"sources":["../../../src/components/Checkbox.tsx"],"sourcesContent":["import { Checkbox as CheckboxPrimitive } from 'radix-ui';\nimport type { ComponentProps } from 'react';\nimport { CheckIcon } from '../icons/icons.ts';\nimport { cn } from '../lib/cn.ts';\n\n/** A box that is on, off, or indeterminate; the tick is the accent on the deep well. */\nexport function Checkbox({ className, ...props }: ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'flex h-3.5 w-3.5 shrink-0 cursor-pointer items-center justify-center rounded-[3px] border border-doom-border bg-doom-deep outline-none transition-colors focus-visible:ring-2 focus-visible:ring-doom-blue/50 disabled:pointer-events-none disabled:opacity-40 data-[state=checked]:border-doom-blue data-[state=indeterminate]:border-doom-blue',\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator data-slot=\"checkbox-indicator\" className=\"text-doom-blue\">\n <CheckIcon className=\"h-2.5 w-2.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n"],"mappings":"8JAMA,SAAgBA,EAAS,CAAE,YAAW,GAAG,GAAwD,CAC/F,OACE,EAACC,EAAkB,KAAnB,CACE,YAAU,WACV,UAAW,EACT,mVACA,CACF,EACA,GAAI,EAEJ,SAAA,EAACA,EAAkB,UAAnB,CAA6B,YAAU,qBAAqB,UAAU,iBACpE,SAAA,EAAC,EAAD,CAAW,UAAU,aAAe,CAAA,CACT,CAAA,CACP,CAAA,CAE5B"}
1
+ {"version":3,"file":"Checkbox.mjs","names":["Checkbox","CheckboxPrimitive"],"sources":["../../../src/components/Checkbox.tsx"],"sourcesContent":["import { Checkbox as CheckboxPrimitive } from 'radix-ui';\nimport type { ComponentProps } from 'react';\nimport { CheckIcon } from '../icons/icons.ts';\nimport { cn } from '../lib/cn.ts';\n\n/** A box that is on, off, or indeterminate; the tick is the accent on the deep well. */\nexport function Checkbox({ className, ...props }: ComponentProps<typeof CheckboxPrimitive.Root>) {\n return (\n <CheckboxPrimitive.Root\n data-slot=\"checkbox\"\n className={cn(\n 'flex h-3.5 w-3.5 shrink-0 cursor-pointer items-center justify-center rounded-sm border border-doom-border bg-doom-deep outline-none transition-colors focus-visible:ring-2 focus-visible:ring-doom-blue/50 disabled:pointer-events-none disabled:opacity-40 data-[state=checked]:border-doom-blue data-[state=indeterminate]:border-doom-blue',\n className,\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator data-slot=\"checkbox-indicator\" className=\"text-doom-blue\">\n <CheckIcon className=\"h-2.5 w-2.5\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n );\n}\n"],"mappings":"8JAMA,SAAgBA,EAAS,CAAE,YAAW,GAAG,GAAwD,CAC/F,OACE,EAACC,EAAkB,KAAnB,CACE,YAAU,WACV,UAAW,EACT,gVACA,CACF,EACA,GAAI,EAEJ,SAAA,EAACA,EAAkB,UAAnB,CAA6B,YAAU,qBAAqB,UAAU,iBACpE,SAAA,EAAC,EAAD,CAAW,UAAU,aAAe,CAAA,CACT,CAAA,CACP,CAAA,CAE5B"}
@@ -1,2 +1,2 @@
1
- const e=require("./SyntaxText.cjs"),t=require("../lib/fenceGrammar.cjs"),n=require("./CopyButton.cjs"),r=require("./MermaidDiagram.cjs");let i=require("react/jsx-runtime");function a({text:a,className:o}){let s=t.fenceLanguageOf(o),c=s===`mermaid`?(0,i.jsx)(r.MermaidDiagram,{code:a}):(0,i.jsx)(e.SyntaxText,{text:a,grammar:t.fenceGrammarOf(s),className:`overflow-x-auto text-[12px] leading-relaxed text-doom-text`});return(0,i.jsxs)(`div`,{"data-slot":`code-block`,"data-language":s??``,className:`relative rounded border border-doom-border bg-doom-deep p-2.5`,children:[c,(0,i.jsx)(n.CopyButton,{text:a,className:`absolute top-1.5 right-1.5`})]})}exports.CodeBlock=a;
1
+ const e=require("./SyntaxText.cjs"),t=require("../lib/fenceGrammar.cjs"),n=require("./CopyButton.cjs"),r=require("./MermaidDiagram.cjs");let i=require("react/jsx-runtime");function a({text:a,className:o}){let s=t.fenceLanguageOf(o),c=s===`mermaid`?(0,i.jsx)(r.MermaidDiagram,{code:a}):(0,i.jsx)(e.SyntaxText,{text:a,grammar:t.fenceGrammarOf(s),className:`overflow-x-auto text-sm leading-relaxed text-doom-text`});return(0,i.jsxs)(`div`,{"data-slot":`code-block`,"data-language":s??``,className:`relative rounded border border-doom-border bg-doom-deep p-2.5`,children:[c,(0,i.jsx)(n.CopyButton,{text:a,className:`absolute top-1.5 right-1.5`})]})}exports.CodeBlock=a;
2
2
  //# sourceMappingURL=CodeBlock.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"CodeBlock.cjs","names":["fenceLanguageOf","MermaidDiagram","SyntaxText","fenceGrammarOf","CopyButton"],"sources":["../../../src/components/CodeBlock.tsx"],"sourcesContent":["import { fenceGrammarOf, fenceLanguageOf, MERMAID_LANGUAGE } from '../lib/fenceGrammar.ts';\nimport { CopyButton } from './CopyButton.tsx';\nimport { MermaidDiagram } from './MermaidDiagram.tsx';\nimport { SyntaxText } from './SyntaxText.tsx';\n\n/**\n * A fenced code block: coloured, copyable, and a picture when it is mermaid.\n *\n * DESIGN PATTERNS:\n * - The fence's own word picks the grammar, and an unknown word means plain\n * text rather than a guess at the wrong language.\n * - Colour and the diagram both arrive asynchronously, so the block always has\n * the source on screen from the first frame of a streaming reply.\n *\n * AVOID:\n * - Reading the language anywhere but the fence. A block in a message has no\n * path, and guessing from the body colours prose as code.\n */\n\nexport interface CodeBlockProps {\n /** The block's source, without the fence lines. */\n text: string;\n /** The `language-*` class react-markdown puts on the inner <code>. */\n className?: string | undefined;\n}\n\nexport function CodeBlock({ text, className }: CodeBlockProps) {\n const language = fenceLanguageOf(className);\n const body =\n language === MERMAID_LANGUAGE ? (\n <MermaidDiagram code={text} />\n ) : (\n <SyntaxText\n text={text}\n grammar={fenceGrammarOf(language)}\n className=\"overflow-x-auto text-[12px] leading-relaxed text-doom-text\"\n />\n );\n return (\n <div\n data-slot=\"code-block\"\n data-language={language ?? ''}\n className=\"relative rounded border border-doom-border bg-doom-deep p-2.5\"\n >\n {body}\n <CopyButton text={text} className=\"absolute top-1.5 right-1.5\" />\n </div>\n );\n}\n"],"mappings":"4KA0BA,SAAgB,EAAU,CAAE,OAAM,aAA6B,CAC7D,IAAM,EAAWA,EAAAA,gBAAgB,CAAS,EACpC,EACJ,IAAA,WACE,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,KAAM,CAAO,CAAA,GAE7B,EAAA,EAAA,IAAA,CAACC,EAAAA,WAAD,CACQ,OACN,QAASC,EAAAA,eAAe,CAAQ,EAChC,UAAU,4DACX,CAAA,EAEL,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CACE,YAAU,aACV,gBAAe,GAAY,GAC3B,UAAU,gEAHZ,SAAA,CAKG,GACD,EAAA,EAAA,IAAA,CAACC,EAAAA,WAAD,CAAkB,OAAM,UAAU,4BAA8B,CAAA,CAC7D,GAET"}
1
+ {"version":3,"file":"CodeBlock.cjs","names":["fenceLanguageOf","MermaidDiagram","SyntaxText","fenceGrammarOf","CopyButton"],"sources":["../../../src/components/CodeBlock.tsx"],"sourcesContent":["import { fenceGrammarOf, fenceLanguageOf, MERMAID_LANGUAGE } from '../lib/fenceGrammar.ts';\nimport { CopyButton } from './CopyButton.tsx';\nimport { MermaidDiagram } from './MermaidDiagram.tsx';\nimport { SyntaxText } from './SyntaxText.tsx';\n\n/**\n * A fenced code block: coloured, copyable, and a picture when it is mermaid.\n *\n * DESIGN PATTERNS:\n * - The fence's own word picks the grammar, and an unknown word means plain\n * text rather than a guess at the wrong language.\n * - Colour and the diagram both arrive asynchronously, so the block always has\n * the source on screen from the first frame of a streaming reply.\n *\n * AVOID:\n * - Reading the language anywhere but the fence. A block in a message has no\n * path, and guessing from the body colours prose as code.\n */\n\nexport interface CodeBlockProps {\n /** The block's source, without the fence lines. */\n text: string;\n /** The `language-*` class react-markdown puts on the inner <code>. */\n className?: string | undefined;\n}\n\nexport function CodeBlock({ text, className }: CodeBlockProps) {\n const language = fenceLanguageOf(className);\n const body =\n language === MERMAID_LANGUAGE ? (\n <MermaidDiagram code={text} />\n ) : (\n <SyntaxText\n text={text}\n grammar={fenceGrammarOf(language)}\n className=\"overflow-x-auto text-sm leading-relaxed text-doom-text\"\n />\n );\n return (\n <div\n data-slot=\"code-block\"\n data-language={language ?? ''}\n className=\"relative rounded border border-doom-border bg-doom-deep p-2.5\"\n >\n {body}\n <CopyButton text={text} className=\"absolute top-1.5 right-1.5\" />\n </div>\n );\n}\n"],"mappings":"4KA0BA,SAAgB,EAAU,CAAE,OAAM,aAA6B,CAC7D,IAAM,EAAWA,EAAAA,gBAAgB,CAAS,EACpC,EACJ,IAAA,WACE,EAAA,EAAA,IAAA,CAACC,EAAAA,eAAD,CAAgB,KAAM,CAAO,CAAA,GAE7B,EAAA,EAAA,IAAA,CAACC,EAAAA,WAAD,CACQ,OACN,QAASC,EAAAA,eAAe,CAAQ,EAChC,UAAU,wDACX,CAAA,EAEL,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CACE,YAAU,aACV,gBAAe,GAAY,GAC3B,UAAU,gEAHZ,SAAA,CAKG,GACD,EAAA,EAAA,IAAA,CAACC,EAAAA,WAAD,CAAkB,OAAM,UAAU,4BAA8B,CAAA,CAC7D,GAET"}
@@ -1,2 +1,2 @@
1
- import{SyntaxText as e}from"./SyntaxText.mjs";import{fenceGrammarOf as t,fenceLanguageOf as n}from"../lib/fenceGrammar.mjs";import{CopyButton as r}from"./CopyButton.mjs";import{MermaidDiagram as i}from"./MermaidDiagram.mjs";import{jsx as a,jsxs as o}from"react/jsx-runtime";function s({text:s,className:c}){let l=n(c),u=l===`mermaid`?a(i,{code:s}):a(e,{text:s,grammar:t(l),className:`overflow-x-auto text-[12px] leading-relaxed text-doom-text`});return o(`div`,{"data-slot":`code-block`,"data-language":l??``,className:`relative rounded border border-doom-border bg-doom-deep p-2.5`,children:[u,a(r,{text:s,className:`absolute top-1.5 right-1.5`})]})}export{s as CodeBlock};
1
+ import{SyntaxText as e}from"./SyntaxText.mjs";import{fenceGrammarOf as t,fenceLanguageOf as n}from"../lib/fenceGrammar.mjs";import{CopyButton as r}from"./CopyButton.mjs";import{MermaidDiagram as i}from"./MermaidDiagram.mjs";import{jsx as a,jsxs as o}from"react/jsx-runtime";function s({text:s,className:c}){let l=n(c),u=l===`mermaid`?a(i,{code:s}):a(e,{text:s,grammar:t(l),className:`overflow-x-auto text-sm leading-relaxed text-doom-text`});return o(`div`,{"data-slot":`code-block`,"data-language":l??``,className:`relative rounded border border-doom-border bg-doom-deep p-2.5`,children:[u,a(r,{text:s,className:`absolute top-1.5 right-1.5`})]})}export{s as CodeBlock};
2
2
  //# sourceMappingURL=CodeBlock.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"CodeBlock.mjs","names":[],"sources":["../../../src/components/CodeBlock.tsx"],"sourcesContent":["import { fenceGrammarOf, fenceLanguageOf, MERMAID_LANGUAGE } from '../lib/fenceGrammar.ts';\nimport { CopyButton } from './CopyButton.tsx';\nimport { MermaidDiagram } from './MermaidDiagram.tsx';\nimport { SyntaxText } from './SyntaxText.tsx';\n\n/**\n * A fenced code block: coloured, copyable, and a picture when it is mermaid.\n *\n * DESIGN PATTERNS:\n * - The fence's own word picks the grammar, and an unknown word means plain\n * text rather than a guess at the wrong language.\n * - Colour and the diagram both arrive asynchronously, so the block always has\n * the source on screen from the first frame of a streaming reply.\n *\n * AVOID:\n * - Reading the language anywhere but the fence. A block in a message has no\n * path, and guessing from the body colours prose as code.\n */\n\nexport interface CodeBlockProps {\n /** The block's source, without the fence lines. */\n text: string;\n /** The `language-*` class react-markdown puts on the inner <code>. */\n className?: string | undefined;\n}\n\nexport function CodeBlock({ text, className }: CodeBlockProps) {\n const language = fenceLanguageOf(className);\n const body =\n language === MERMAID_LANGUAGE ? (\n <MermaidDiagram code={text} />\n ) : (\n <SyntaxText\n text={text}\n grammar={fenceGrammarOf(language)}\n className=\"overflow-x-auto text-[12px] leading-relaxed text-doom-text\"\n />\n );\n return (\n <div\n data-slot=\"code-block\"\n data-language={language ?? ''}\n className=\"relative rounded border border-doom-border bg-doom-deep p-2.5\"\n >\n {body}\n <CopyButton text={text} className=\"absolute top-1.5 right-1.5\" />\n </div>\n );\n}\n"],"mappings":"kRA0BA,SAAgB,EAAU,CAAE,OAAM,aAA6B,CAC7D,IAAM,EAAW,EAAgB,CAAS,EACpC,EACJ,IAAA,UACE,EAAC,EAAD,CAAgB,KAAM,CAAO,CAAA,EAE7B,EAAC,EAAD,CACQ,OACN,QAAS,EAAe,CAAQ,EAChC,UAAU,4DACX,CAAA,EAEL,OACE,EAAC,MAAD,CACE,YAAU,aACV,gBAAe,GAAY,GAC3B,UAAU,gEAHZ,SAAA,CAKG,EACD,EAAC,EAAD,CAAkB,OAAM,UAAU,4BAA8B,CAAA,CAC7D,GAET"}
1
+ {"version":3,"file":"CodeBlock.mjs","names":[],"sources":["../../../src/components/CodeBlock.tsx"],"sourcesContent":["import { fenceGrammarOf, fenceLanguageOf, MERMAID_LANGUAGE } from '../lib/fenceGrammar.ts';\nimport { CopyButton } from './CopyButton.tsx';\nimport { MermaidDiagram } from './MermaidDiagram.tsx';\nimport { SyntaxText } from './SyntaxText.tsx';\n\n/**\n * A fenced code block: coloured, copyable, and a picture when it is mermaid.\n *\n * DESIGN PATTERNS:\n * - The fence's own word picks the grammar, and an unknown word means plain\n * text rather than a guess at the wrong language.\n * - Colour and the diagram both arrive asynchronously, so the block always has\n * the source on screen from the first frame of a streaming reply.\n *\n * AVOID:\n * - Reading the language anywhere but the fence. A block in a message has no\n * path, and guessing from the body colours prose as code.\n */\n\nexport interface CodeBlockProps {\n /** The block's source, without the fence lines. */\n text: string;\n /** The `language-*` class react-markdown puts on the inner <code>. */\n className?: string | undefined;\n}\n\nexport function CodeBlock({ text, className }: CodeBlockProps) {\n const language = fenceLanguageOf(className);\n const body =\n language === MERMAID_LANGUAGE ? (\n <MermaidDiagram code={text} />\n ) : (\n <SyntaxText\n text={text}\n grammar={fenceGrammarOf(language)}\n className=\"overflow-x-auto text-sm leading-relaxed text-doom-text\"\n />\n );\n return (\n <div\n data-slot=\"code-block\"\n data-language={language ?? ''}\n className=\"relative rounded border border-doom-border bg-doom-deep p-2.5\"\n >\n {body}\n <CopyButton text={text} className=\"absolute top-1.5 right-1.5\" />\n </div>\n );\n}\n"],"mappings":"kRA0BA,SAAgB,EAAU,CAAE,OAAM,aAA6B,CAC7D,IAAM,EAAW,EAAgB,CAAS,EACpC,EACJ,IAAA,UACE,EAAC,EAAD,CAAgB,KAAM,CAAO,CAAA,EAE7B,EAAC,EAAD,CACQ,OACN,QAAS,EAAe,CAAQ,EAChC,UAAU,wDACX,CAAA,EAEL,OACE,EAAC,MAAD,CACE,YAAU,aACV,gBAAe,GAAY,GAC3B,UAAU,gEAHZ,SAAA,CAKG,EACD,EAAC,EAAD,CAAkB,OAAM,UAAU,4BAA8B,CAAA,CAC7D,GAET"}
@@ -1,2 +1,2 @@
1
- const e=require("../lib/cn.cjs"),t=require("./Dialog.cjs"),n=require("./Input.cjs"),r=require("./OptionList.cjs");let i=require("react/jsx-runtime");function a({open:n,onOpenChange:r,title:a,titleVisible:o=!1,className:s,children:c,width:l=`lg`,...u}){return(0,i.jsx)(t.Dialog,{open:n,onOpenChange:r,children:(0,i.jsxs)(t.DialogContent,{"data-slot":`command-dialog`,width:l,className:e.cn(`max-h-[70vh]`,s),...u,children:[(0,i.jsx)(t.DialogTitle,{className:o?void 0:`sr-only`,children:a}),c]})})}function o({className:t,...n}){return(0,i.jsx)(`div`,{"data-slot":`command-header`,className:e.cn(`flex shrink-0 items-center gap-2 border-b border-doom-border px-3 py-2.5`,t),...n})}function s({className:t,...r}){return(0,i.jsx)(n.Input,{"data-slot":`command-input`,variant:`bare`,autoFocus:!0,autoComplete:`off`,className:e.cn(`flex-1`,t),...r})}function c({className:t,...n}){return(0,i.jsx)(`div`,{role:`listbox`,"data-slot":`command-list`,className:e.cn(`flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto p-1.5`,t),...n})}function l({className:t,...n}){return(0,i.jsx)(`div`,{"data-slot":`command-group`,className:e.cn(`flex flex-col gap-0.5`,t),...n})}function u({className:t,...n}){return(0,i.jsx)(`div`,{"data-slot":`command-group-label`,className:e.cn(`px-2 pt-2 pb-1 text-[8px] font-bold tracking-[0.14em] text-doom-faint uppercase`,t),...n})}function d({density:e=`compact`,...t}){return(0,i.jsx)(r.OptionRow,{"data-slot":`command-item`,density:e,...t})}function f(e){return(0,i.jsx)(r.OptionLabel,{"data-slot":`command-item-label`,density:`compact`,...e})}function p({className:t,...n}){return(0,i.jsx)(`div`,{"data-slot":`command-empty`,className:e.cn(`px-2 py-6 text-center text-[11px] text-doom-faint`,t),...n})}function m({className:t,...n}){return(0,i.jsx)(`div`,{"data-slot":`command-footer`,className:e.cn(`flex min-h-[30px] shrink-0 items-center justify-between gap-3 border-t border-doom-border-soft bg-doom-deep px-3 text-[9px] text-doom-faint`,t),...n})}exports.CommandDialog=a,exports.CommandEmpty=p,exports.CommandFooter=m,exports.CommandGroup=l,exports.CommandGroupLabel=u,exports.CommandHeader=o,exports.CommandInput=s,exports.CommandItem=d,exports.CommandItemLabel=f,exports.CommandList=c;
1
+ const e=require("../lib/cn.cjs"),t=require("./Dialog.cjs"),n=require("./Input.cjs"),r=require("./OptionList.cjs");let i=require("react/jsx-runtime");function a({open:n,onOpenChange:r,title:a,titleVisible:o=!1,className:s,children:c,width:l=`lg`,...u}){return(0,i.jsx)(t.Dialog,{open:n,onOpenChange:r,children:(0,i.jsxs)(t.DialogContent,{"data-slot":`command-dialog`,width:l,className:e.cn(`max-h-[70vh]`,s),...u,children:[(0,i.jsx)(t.DialogTitle,{className:o?void 0:`sr-only`,children:a}),c]})})}function o({className:t,...n}){return(0,i.jsx)(`div`,{"data-slot":`command-header`,className:e.cn(`flex shrink-0 items-center gap-2 border-b border-doom-border px-3 py-2.5`,t),...n})}function s({className:t,...r}){return(0,i.jsx)(n.Input,{"data-slot":`command-input`,variant:`bare`,autoFocus:!0,autoComplete:`off`,className:e.cn(`flex-1`,t),...r})}function c({className:t,...n}){return(0,i.jsx)(`div`,{role:`listbox`,"data-slot":`command-list`,className:e.cn(`flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto p-1.5`,t),...n})}function l({className:t,...n}){return(0,i.jsx)(`div`,{"data-slot":`command-group`,className:e.cn(`flex flex-col gap-0.5`,t),...n})}function u({className:t,...n}){return(0,i.jsx)(`div`,{"data-slot":`command-group-label`,className:e.cn(`px-2 pt-2 pb-1 text-2xs font-bold tracking-wider text-doom-faint uppercase`,t),...n})}function d({density:e=`compact`,...t}){return(0,i.jsx)(r.OptionRow,{"data-slot":`command-item`,density:e,...t})}function f(e){return(0,i.jsx)(r.OptionLabel,{"data-slot":`command-item-label`,density:`compact`,...e})}function p({className:t,...n}){return(0,i.jsx)(`div`,{"data-slot":`command-empty`,className:e.cn(`px-2 py-6 text-center text-sm text-doom-faint`,t),...n})}function m({className:t,...n}){return(0,i.jsx)(`div`,{"data-slot":`command-footer`,className:e.cn(`flex min-h-[30px] shrink-0 items-center justify-between gap-3 border-t border-doom-border-soft bg-doom-deep px-3 text-2xs text-doom-faint`,t),...n})}exports.CommandDialog=a,exports.CommandEmpty=p,exports.CommandFooter=m,exports.CommandGroup=l,exports.CommandGroupLabel=u,exports.CommandHeader=o,exports.CommandInput=s,exports.CommandItem=d,exports.CommandItemLabel=f,exports.CommandList=c;
2
2
  //# sourceMappingURL=Command.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Command.cjs","names":["Dialog","DialogContent","cn","DialogTitle","Input","OptionRow","OptionLabel"],"sources":["../../../src/components/Command.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\nimport { cn } from '../lib/cn.ts';\nimport { Dialog, DialogContent, type DialogContentProps, DialogTitle } from './Dialog.tsx';\nimport { Input, type InputProps } from './Input.tsx';\nimport { OptionLabel, OptionRow, type OptionRowProps } from './OptionList.tsx';\n\n/**\n * The command palette's frame, its search strip, its rows, and its hint.\n *\n * It has no Radix counterpart and it deliberately does no filtering: the\n * surface that opens a palette already knows how to rank its own commands,\n * and a matcher baked in here would be a second, worse one. Built on Dialog,\n * Input, and the option row so a palette and a select popover cannot drift\n * apart, rather than on a new dependency.\n */\n\nexport interface CommandDialogProps extends Omit<DialogContentProps, 'title'> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Names the dialog for assistive tech; visually hidden unless the palette draws its own heading. */\n title: ReactNode;\n titleVisible?: boolean;\n}\n\nexport function CommandDialog({\n open,\n onOpenChange,\n title,\n titleVisible = false,\n className,\n children,\n width = 'lg',\n ...props\n}: CommandDialogProps) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent data-slot=\"command-dialog\" width={width} className={cn('max-h-[70vh]', className)} {...props}>\n <DialogTitle className={titleVisible ? undefined : 'sr-only'}>{title}</DialogTitle>\n {children}\n </DialogContent>\n </Dialog>\n );\n}\n\n/** The strip the search field sits in. */\nexport function CommandHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"command-header\"\n className={cn('flex shrink-0 items-center gap-2 border-b border-doom-border px-3 py-2.5', className)}\n {...props}\n />\n );\n}\n\n/** The search field: bare, because the header already draws the surface. */\nexport function CommandInput({ className, ...props }: InputProps) {\n return (\n <Input\n data-slot=\"command-input\"\n variant=\"bare\"\n autoFocus\n autoComplete=\"off\"\n className={cn('flex-1', className)}\n {...props}\n />\n );\n}\n\n/** The scrolling body. It is the listbox, so its rows are the options. */\nexport function CommandList({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n role=\"listbox\"\n data-slot=\"command-list\"\n className={cn('flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto p-1.5', className)}\n {...props}\n />\n );\n}\n\n/** A labelled run of rows. */\nexport function CommandGroup({ className, ...props }: ComponentProps<'div'>) {\n return <div data-slot=\"command-group\" className={cn('flex flex-col gap-0.5', className)} {...props} />;\n}\n\nexport function CommandGroupLabel({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"command-group-label\"\n className={cn('px-2 pt-2 pb-1 text-[8px] font-bold tracking-[0.14em] text-doom-faint uppercase', className)}\n {...props}\n />\n );\n}\n\n/** One command. Compact by default, since a palette shows many at once. */\nexport function CommandItem({ density = 'compact', ...props }: OptionRowProps) {\n return <OptionRow data-slot=\"command-item\" density={density} {...props} />;\n}\n\n/** A command's name, taking the width the row has left. */\nexport function CommandItemLabel(props: ComponentProps<'span'>) {\n return <OptionLabel data-slot=\"command-item-label\" density=\"compact\" {...props} />;\n}\n\n/** What the palette says when nothing matches. */\nexport function CommandEmpty({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"command-empty\"\n className={cn('px-2 py-6 text-center text-[11px] text-doom-faint', className)}\n {...props}\n />\n );\n}\n\n/** The hint strip along the bottom: what the keys do. */\nexport function CommandFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"command-footer\"\n className={cn(\n 'flex min-h-[30px] shrink-0 items-center justify-between gap-3 border-t border-doom-border-soft bg-doom-deep px-3 text-[9px] text-doom-faint',\n className,\n )}\n {...props}\n />\n );\n}\n"],"mappings":"qJAwBA,SAAgB,EAAc,CAC5B,OACA,eACA,QACA,eAAe,GACf,YACA,WACA,QAAQ,KACR,GAAG,GACkB,CACrB,OACE,EAAA,EAAA,IAAA,CAACA,EAAAA,OAAD,CAAc,OAAoB,eAChC,UAAA,EAAA,EAAA,KAAA,CAACC,EAAAA,cAAD,CAAe,YAAU,iBAAwB,QAAO,UAAWC,EAAAA,GAAG,eAAgB,CAAS,EAAG,GAAI,EAAtG,SAAA,EACE,EAAA,EAAA,IAAA,CAACC,EAAAA,YAAD,CAAa,UAAW,EAAe,IAAA,GAAY,UAAY,SAAA,CAAmB,CAAA,EACjF,CACY,GACT,CAAA,CAEZ,CAGA,SAAgB,EAAc,CAAE,YAAW,GAAG,GAAgC,CAC5E,OACE,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,YAAU,iBACV,UAAWD,EAAAA,GAAG,2EAA4E,CAAS,EACnG,GAAI,CACL,CAAA,CAEL,CAGA,SAAgB,EAAa,CAAE,YAAW,GAAG,GAAqB,CAChE,OACE,EAAA,EAAA,IAAA,CAACE,EAAAA,MAAD,CACE,YAAU,gBACV,QAAQ,OACR,UAAA,GACA,aAAa,MACb,UAAWF,EAAAA,GAAG,SAAU,CAAS,EACjC,GAAI,CACL,CAAA,CAEL,CAGA,SAAgB,EAAY,CAAE,YAAW,GAAG,GAAgC,CAC1E,OACE,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,KAAK,UACL,YAAU,eACV,UAAWA,EAAAA,GAAG,6DAA8D,CAAS,EACrF,GAAI,CACL,CAAA,CAEL,CAGA,SAAgB,EAAa,CAAE,YAAW,GAAG,GAAgC,CAC3E,OAAO,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,YAAU,gBAAgB,UAAWA,EAAAA,GAAG,wBAAyB,CAAS,EAAG,GAAI,CAAQ,CAAA,CACvG,CAEA,SAAgB,EAAkB,CAAE,YAAW,GAAG,GAAgC,CAChF,OACE,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,YAAU,sBACV,UAAWA,EAAAA,GAAG,kFAAmF,CAAS,EAC1G,GAAI,CACL,CAAA,CAEL,CAGA,SAAgB,EAAY,CAAE,UAAU,UAAW,GAAG,GAAyB,CAC7E,OAAO,EAAA,EAAA,IAAA,CAACG,EAAAA,UAAD,CAAW,YAAU,eAAwB,UAAS,GAAI,CAAQ,CAAA,CAC3E,CAGA,SAAgB,EAAiB,EAA+B,CAC9D,OAAO,EAAA,EAAA,IAAA,CAACC,EAAAA,YAAD,CAAa,YAAU,qBAAqB,QAAQ,UAAU,GAAI,CAAQ,CAAA,CACnF,CAGA,SAAgB,EAAa,CAAE,YAAW,GAAG,GAAgC,CAC3E,OACE,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,YAAU,gBACV,UAAWJ,EAAAA,GAAG,oDAAqD,CAAS,EAC5E,GAAI,CACL,CAAA,CAEL,CAGA,SAAgB,EAAc,CAAE,YAAW,GAAG,GAAgC,CAC5E,OACE,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,YAAU,iBACV,UAAWA,EAAAA,GACT,8IACA,CACF,EACA,GAAI,CACL,CAAA,CAEL"}
1
+ {"version":3,"file":"Command.cjs","names":["Dialog","DialogContent","cn","DialogTitle","Input","OptionRow","OptionLabel"],"sources":["../../../src/components/Command.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\nimport { cn } from '../lib/cn.ts';\nimport { Dialog, DialogContent, type DialogContentProps, DialogTitle } from './Dialog.tsx';\nimport { Input, type InputProps } from './Input.tsx';\nimport { OptionLabel, OptionRow, type OptionRowProps } from './OptionList.tsx';\n\n/**\n * The command palette's frame, its search strip, its rows, and its hint.\n *\n * It has no Radix counterpart and it deliberately does no filtering: the\n * surface that opens a palette already knows how to rank its own commands,\n * and a matcher baked in here would be a second, worse one. Built on Dialog,\n * Input, and the option row so a palette and a select popover cannot drift\n * apart, rather than on a new dependency.\n */\n\nexport interface CommandDialogProps extends Omit<DialogContentProps, 'title'> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Names the dialog for assistive tech; visually hidden unless the palette draws its own heading. */\n title: ReactNode;\n titleVisible?: boolean;\n}\n\nexport function CommandDialog({\n open,\n onOpenChange,\n title,\n titleVisible = false,\n className,\n children,\n width = 'lg',\n ...props\n}: CommandDialogProps) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent data-slot=\"command-dialog\" width={width} className={cn('max-h-[70vh]', className)} {...props}>\n <DialogTitle className={titleVisible ? undefined : 'sr-only'}>{title}</DialogTitle>\n {children}\n </DialogContent>\n </Dialog>\n );\n}\n\n/** The strip the search field sits in. */\nexport function CommandHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"command-header\"\n className={cn('flex shrink-0 items-center gap-2 border-b border-doom-border px-3 py-2.5', className)}\n {...props}\n />\n );\n}\n\n/** The search field: bare, because the header already draws the surface. */\nexport function CommandInput({ className, ...props }: InputProps) {\n return (\n <Input\n data-slot=\"command-input\"\n variant=\"bare\"\n autoFocus\n autoComplete=\"off\"\n className={cn('flex-1', className)}\n {...props}\n />\n );\n}\n\n/** The scrolling body. It is the listbox, so its rows are the options. */\nexport function CommandList({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n role=\"listbox\"\n data-slot=\"command-list\"\n className={cn('flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto p-1.5', className)}\n {...props}\n />\n );\n}\n\n/** A labelled run of rows. */\nexport function CommandGroup({ className, ...props }: ComponentProps<'div'>) {\n return <div data-slot=\"command-group\" className={cn('flex flex-col gap-0.5', className)} {...props} />;\n}\n\nexport function CommandGroupLabel({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"command-group-label\"\n className={cn('px-2 pt-2 pb-1 text-2xs font-bold tracking-wider text-doom-faint uppercase', className)}\n {...props}\n />\n );\n}\n\n/** One command. Compact by default, since a palette shows many at once. */\nexport function CommandItem({ density = 'compact', ...props }: OptionRowProps) {\n return <OptionRow data-slot=\"command-item\" density={density} {...props} />;\n}\n\n/** A command's name, taking the width the row has left. */\nexport function CommandItemLabel(props: ComponentProps<'span'>) {\n return <OptionLabel data-slot=\"command-item-label\" density=\"compact\" {...props} />;\n}\n\n/** What the palette says when nothing matches. */\nexport function CommandEmpty({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"command-empty\"\n className={cn('px-2 py-6 text-center text-sm text-doom-faint', className)}\n {...props}\n />\n );\n}\n\n/** The hint strip along the bottom: what the keys do. */\nexport function CommandFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"command-footer\"\n className={cn(\n 'flex min-h-[30px] shrink-0 items-center justify-between gap-3 border-t border-doom-border-soft bg-doom-deep px-3 text-2xs text-doom-faint',\n className,\n )}\n {...props}\n />\n );\n}\n"],"mappings":"qJAwBA,SAAgB,EAAc,CAC5B,OACA,eACA,QACA,eAAe,GACf,YACA,WACA,QAAQ,KACR,GAAG,GACkB,CACrB,OACE,EAAA,EAAA,IAAA,CAACA,EAAAA,OAAD,CAAc,OAAoB,eAChC,UAAA,EAAA,EAAA,KAAA,CAACC,EAAAA,cAAD,CAAe,YAAU,iBAAwB,QAAO,UAAWC,EAAAA,GAAG,eAAgB,CAAS,EAAG,GAAI,EAAtG,SAAA,EACE,EAAA,EAAA,IAAA,CAACC,EAAAA,YAAD,CAAa,UAAW,EAAe,IAAA,GAAY,UAAY,SAAA,CAAmB,CAAA,EACjF,CACY,GACT,CAAA,CAEZ,CAGA,SAAgB,EAAc,CAAE,YAAW,GAAG,GAAgC,CAC5E,OACE,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,YAAU,iBACV,UAAWD,EAAAA,GAAG,2EAA4E,CAAS,EACnG,GAAI,CACL,CAAA,CAEL,CAGA,SAAgB,EAAa,CAAE,YAAW,GAAG,GAAqB,CAChE,OACE,EAAA,EAAA,IAAA,CAACE,EAAAA,MAAD,CACE,YAAU,gBACV,QAAQ,OACR,UAAA,GACA,aAAa,MACb,UAAWF,EAAAA,GAAG,SAAU,CAAS,EACjC,GAAI,CACL,CAAA,CAEL,CAGA,SAAgB,EAAY,CAAE,YAAW,GAAG,GAAgC,CAC1E,OACE,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,KAAK,UACL,YAAU,eACV,UAAWA,EAAAA,GAAG,6DAA8D,CAAS,EACrF,GAAI,CACL,CAAA,CAEL,CAGA,SAAgB,EAAa,CAAE,YAAW,GAAG,GAAgC,CAC3E,OAAO,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,YAAU,gBAAgB,UAAWA,EAAAA,GAAG,wBAAyB,CAAS,EAAG,GAAI,CAAQ,CAAA,CACvG,CAEA,SAAgB,EAAkB,CAAE,YAAW,GAAG,GAAgC,CAChF,OACE,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,YAAU,sBACV,UAAWA,EAAAA,GAAG,6EAA8E,CAAS,EACrG,GAAI,CACL,CAAA,CAEL,CAGA,SAAgB,EAAY,CAAE,UAAU,UAAW,GAAG,GAAyB,CAC7E,OAAO,EAAA,EAAA,IAAA,CAACG,EAAAA,UAAD,CAAW,YAAU,eAAwB,UAAS,GAAI,CAAQ,CAAA,CAC3E,CAGA,SAAgB,EAAiB,EAA+B,CAC9D,OAAO,EAAA,EAAA,IAAA,CAACC,EAAAA,YAAD,CAAa,YAAU,qBAAqB,QAAQ,UAAU,GAAI,CAAQ,CAAA,CACnF,CAGA,SAAgB,EAAa,CAAE,YAAW,GAAG,GAAgC,CAC3E,OACE,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,YAAU,gBACV,UAAWJ,EAAAA,GAAG,gDAAiD,CAAS,EACxE,GAAI,CACL,CAAA,CAEL,CAGA,SAAgB,EAAc,CAAE,YAAW,GAAG,GAAgC,CAC5E,OACE,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,YAAU,iBACV,UAAWA,EAAAA,GACT,4IACA,CACF,EACA,GAAI,CACL,CAAA,CAEL"}
@@ -1,2 +1,2 @@
1
- import{cn as e}from"../lib/cn.mjs";import{Dialog as t,DialogContent as n,DialogTitle as r}from"./Dialog.mjs";import{Input as i}from"./Input.mjs";import{OptionLabel as a,OptionRow as o}from"./OptionList.mjs";import{jsx as s,jsxs as c}from"react/jsx-runtime";function l({open:i,onOpenChange:a,title:o,titleVisible:l=!1,className:u,children:d,width:f=`lg`,...p}){return s(t,{open:i,onOpenChange:a,children:c(n,{"data-slot":`command-dialog`,width:f,className:e(`max-h-[70vh]`,u),...p,children:[s(r,{className:l?void 0:`sr-only`,children:o}),d]})})}function u({className:t,...n}){return s(`div`,{"data-slot":`command-header`,className:e(`flex shrink-0 items-center gap-2 border-b border-doom-border px-3 py-2.5`,t),...n})}function d({className:t,...n}){return s(i,{"data-slot":`command-input`,variant:`bare`,autoFocus:!0,autoComplete:`off`,className:e(`flex-1`,t),...n})}function f({className:t,...n}){return s(`div`,{role:`listbox`,"data-slot":`command-list`,className:e(`flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto p-1.5`,t),...n})}function p({className:t,...n}){return s(`div`,{"data-slot":`command-group`,className:e(`flex flex-col gap-0.5`,t),...n})}function m({className:t,...n}){return s(`div`,{"data-slot":`command-group-label`,className:e(`px-2 pt-2 pb-1 text-[8px] font-bold tracking-[0.14em] text-doom-faint uppercase`,t),...n})}function h({density:e=`compact`,...t}){return s(o,{"data-slot":`command-item`,density:e,...t})}function g(e){return s(a,{"data-slot":`command-item-label`,density:`compact`,...e})}function _({className:t,...n}){return s(`div`,{"data-slot":`command-empty`,className:e(`px-2 py-6 text-center text-[11px] text-doom-faint`,t),...n})}function v({className:t,...n}){return s(`div`,{"data-slot":`command-footer`,className:e(`flex min-h-[30px] shrink-0 items-center justify-between gap-3 border-t border-doom-border-soft bg-doom-deep px-3 text-[9px] text-doom-faint`,t),...n})}export{l as CommandDialog,_ as CommandEmpty,v as CommandFooter,p as CommandGroup,m as CommandGroupLabel,u as CommandHeader,d as CommandInput,h as CommandItem,g as CommandItemLabel,f as CommandList};
1
+ import{cn as e}from"../lib/cn.mjs";import{Dialog as t,DialogContent as n,DialogTitle as r}from"./Dialog.mjs";import{Input as i}from"./Input.mjs";import{OptionLabel as a,OptionRow as o}from"./OptionList.mjs";import{jsx as s,jsxs as c}from"react/jsx-runtime";function l({open:i,onOpenChange:a,title:o,titleVisible:l=!1,className:u,children:d,width:f=`lg`,...p}){return s(t,{open:i,onOpenChange:a,children:c(n,{"data-slot":`command-dialog`,width:f,className:e(`max-h-[70vh]`,u),...p,children:[s(r,{className:l?void 0:`sr-only`,children:o}),d]})})}function u({className:t,...n}){return s(`div`,{"data-slot":`command-header`,className:e(`flex shrink-0 items-center gap-2 border-b border-doom-border px-3 py-2.5`,t),...n})}function d({className:t,...n}){return s(i,{"data-slot":`command-input`,variant:`bare`,autoFocus:!0,autoComplete:`off`,className:e(`flex-1`,t),...n})}function f({className:t,...n}){return s(`div`,{role:`listbox`,"data-slot":`command-list`,className:e(`flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto p-1.5`,t),...n})}function p({className:t,...n}){return s(`div`,{"data-slot":`command-group`,className:e(`flex flex-col gap-0.5`,t),...n})}function m({className:t,...n}){return s(`div`,{"data-slot":`command-group-label`,className:e(`px-2 pt-2 pb-1 text-2xs font-bold tracking-wider text-doom-faint uppercase`,t),...n})}function h({density:e=`compact`,...t}){return s(o,{"data-slot":`command-item`,density:e,...t})}function g(e){return s(a,{"data-slot":`command-item-label`,density:`compact`,...e})}function _({className:t,...n}){return s(`div`,{"data-slot":`command-empty`,className:e(`px-2 py-6 text-center text-sm text-doom-faint`,t),...n})}function v({className:t,...n}){return s(`div`,{"data-slot":`command-footer`,className:e(`flex min-h-[30px] shrink-0 items-center justify-between gap-3 border-t border-doom-border-soft bg-doom-deep px-3 text-2xs text-doom-faint`,t),...n})}export{l as CommandDialog,_ as CommandEmpty,v as CommandFooter,p as CommandGroup,m as CommandGroupLabel,u as CommandHeader,d as CommandInput,h as CommandItem,g as CommandItemLabel,f as CommandList};
2
2
  //# sourceMappingURL=Command.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Command.mjs","names":[],"sources":["../../../src/components/Command.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\nimport { cn } from '../lib/cn.ts';\nimport { Dialog, DialogContent, type DialogContentProps, DialogTitle } from './Dialog.tsx';\nimport { Input, type InputProps } from './Input.tsx';\nimport { OptionLabel, OptionRow, type OptionRowProps } from './OptionList.tsx';\n\n/**\n * The command palette's frame, its search strip, its rows, and its hint.\n *\n * It has no Radix counterpart and it deliberately does no filtering: the\n * surface that opens a palette already knows how to rank its own commands,\n * and a matcher baked in here would be a second, worse one. Built on Dialog,\n * Input, and the option row so a palette and a select popover cannot drift\n * apart, rather than on a new dependency.\n */\n\nexport interface CommandDialogProps extends Omit<DialogContentProps, 'title'> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Names the dialog for assistive tech; visually hidden unless the palette draws its own heading. */\n title: ReactNode;\n titleVisible?: boolean;\n}\n\nexport function CommandDialog({\n open,\n onOpenChange,\n title,\n titleVisible = false,\n className,\n children,\n width = 'lg',\n ...props\n}: CommandDialogProps) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent data-slot=\"command-dialog\" width={width} className={cn('max-h-[70vh]', className)} {...props}>\n <DialogTitle className={titleVisible ? undefined : 'sr-only'}>{title}</DialogTitle>\n {children}\n </DialogContent>\n </Dialog>\n );\n}\n\n/** The strip the search field sits in. */\nexport function CommandHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"command-header\"\n className={cn('flex shrink-0 items-center gap-2 border-b border-doom-border px-3 py-2.5', className)}\n {...props}\n />\n );\n}\n\n/** The search field: bare, because the header already draws the surface. */\nexport function CommandInput({ className, ...props }: InputProps) {\n return (\n <Input\n data-slot=\"command-input\"\n variant=\"bare\"\n autoFocus\n autoComplete=\"off\"\n className={cn('flex-1', className)}\n {...props}\n />\n );\n}\n\n/** The scrolling body. It is the listbox, so its rows are the options. */\nexport function CommandList({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n role=\"listbox\"\n data-slot=\"command-list\"\n className={cn('flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto p-1.5', className)}\n {...props}\n />\n );\n}\n\n/** A labelled run of rows. */\nexport function CommandGroup({ className, ...props }: ComponentProps<'div'>) {\n return <div data-slot=\"command-group\" className={cn('flex flex-col gap-0.5', className)} {...props} />;\n}\n\nexport function CommandGroupLabel({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"command-group-label\"\n className={cn('px-2 pt-2 pb-1 text-[8px] font-bold tracking-[0.14em] text-doom-faint uppercase', className)}\n {...props}\n />\n );\n}\n\n/** One command. Compact by default, since a palette shows many at once. */\nexport function CommandItem({ density = 'compact', ...props }: OptionRowProps) {\n return <OptionRow data-slot=\"command-item\" density={density} {...props} />;\n}\n\n/** A command's name, taking the width the row has left. */\nexport function CommandItemLabel(props: ComponentProps<'span'>) {\n return <OptionLabel data-slot=\"command-item-label\" density=\"compact\" {...props} />;\n}\n\n/** What the palette says when nothing matches. */\nexport function CommandEmpty({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"command-empty\"\n className={cn('px-2 py-6 text-center text-[11px] text-doom-faint', className)}\n {...props}\n />\n );\n}\n\n/** The hint strip along the bottom: what the keys do. */\nexport function CommandFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"command-footer\"\n className={cn(\n 'flex min-h-[30px] shrink-0 items-center justify-between gap-3 border-t border-doom-border-soft bg-doom-deep px-3 text-[9px] text-doom-faint',\n className,\n )}\n {...props}\n />\n );\n}\n"],"mappings":"iQAwBA,SAAgB,EAAc,CAC5B,OACA,eACA,QACA,eAAe,GACf,YACA,WACA,QAAQ,KACR,GAAG,GACkB,CACrB,OACE,EAAC,EAAD,CAAc,OAAoB,eAChC,SAAA,EAAC,EAAD,CAAe,YAAU,iBAAwB,QAAO,UAAW,EAAG,eAAgB,CAAS,EAAG,GAAI,EAAtG,SAAA,CACE,EAAC,EAAD,CAAa,UAAW,EAAe,IAAA,GAAY,UAAY,SAAA,CAAmB,CAAA,EACjF,CACY,GACT,CAAA,CAEZ,CAGA,SAAgB,EAAc,CAAE,YAAW,GAAG,GAAgC,CAC5E,OACE,EAAC,MAAD,CACE,YAAU,iBACV,UAAW,EAAG,2EAA4E,CAAS,EACnG,GAAI,CACL,CAAA,CAEL,CAGA,SAAgB,EAAa,CAAE,YAAW,GAAG,GAAqB,CAChE,OACE,EAAC,EAAD,CACE,YAAU,gBACV,QAAQ,OACR,UAAA,GACA,aAAa,MACb,UAAW,EAAG,SAAU,CAAS,EACjC,GAAI,CACL,CAAA,CAEL,CAGA,SAAgB,EAAY,CAAE,YAAW,GAAG,GAAgC,CAC1E,OACE,EAAC,MAAD,CACE,KAAK,UACL,YAAU,eACV,UAAW,EAAG,6DAA8D,CAAS,EACrF,GAAI,CACL,CAAA,CAEL,CAGA,SAAgB,EAAa,CAAE,YAAW,GAAG,GAAgC,CAC3E,OAAO,EAAC,MAAD,CAAK,YAAU,gBAAgB,UAAW,EAAG,wBAAyB,CAAS,EAAG,GAAI,CAAQ,CAAA,CACvG,CAEA,SAAgB,EAAkB,CAAE,YAAW,GAAG,GAAgC,CAChF,OACE,EAAC,MAAD,CACE,YAAU,sBACV,UAAW,EAAG,kFAAmF,CAAS,EAC1G,GAAI,CACL,CAAA,CAEL,CAGA,SAAgB,EAAY,CAAE,UAAU,UAAW,GAAG,GAAyB,CAC7E,OAAO,EAAC,EAAD,CAAW,YAAU,eAAwB,UAAS,GAAI,CAAQ,CAAA,CAC3E,CAGA,SAAgB,EAAiB,EAA+B,CAC9D,OAAO,EAAC,EAAD,CAAa,YAAU,qBAAqB,QAAQ,UAAU,GAAI,CAAQ,CAAA,CACnF,CAGA,SAAgB,EAAa,CAAE,YAAW,GAAG,GAAgC,CAC3E,OACE,EAAC,MAAD,CACE,YAAU,gBACV,UAAW,EAAG,oDAAqD,CAAS,EAC5E,GAAI,CACL,CAAA,CAEL,CAGA,SAAgB,EAAc,CAAE,YAAW,GAAG,GAAgC,CAC5E,OACE,EAAC,MAAD,CACE,YAAU,iBACV,UAAW,EACT,8IACA,CACF,EACA,GAAI,CACL,CAAA,CAEL"}
1
+ {"version":3,"file":"Command.mjs","names":[],"sources":["../../../src/components/Command.tsx"],"sourcesContent":["import type { ComponentProps, ReactNode } from 'react';\nimport { cn } from '../lib/cn.ts';\nimport { Dialog, DialogContent, type DialogContentProps, DialogTitle } from './Dialog.tsx';\nimport { Input, type InputProps } from './Input.tsx';\nimport { OptionLabel, OptionRow, type OptionRowProps } from './OptionList.tsx';\n\n/**\n * The command palette's frame, its search strip, its rows, and its hint.\n *\n * It has no Radix counterpart and it deliberately does no filtering: the\n * surface that opens a palette already knows how to rank its own commands,\n * and a matcher baked in here would be a second, worse one. Built on Dialog,\n * Input, and the option row so a palette and a select popover cannot drift\n * apart, rather than on a new dependency.\n */\n\nexport interface CommandDialogProps extends Omit<DialogContentProps, 'title'> {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n /** Names the dialog for assistive tech; visually hidden unless the palette draws its own heading. */\n title: ReactNode;\n titleVisible?: boolean;\n}\n\nexport function CommandDialog({\n open,\n onOpenChange,\n title,\n titleVisible = false,\n className,\n children,\n width = 'lg',\n ...props\n}: CommandDialogProps) {\n return (\n <Dialog open={open} onOpenChange={onOpenChange}>\n <DialogContent data-slot=\"command-dialog\" width={width} className={cn('max-h-[70vh]', className)} {...props}>\n <DialogTitle className={titleVisible ? undefined : 'sr-only'}>{title}</DialogTitle>\n {children}\n </DialogContent>\n </Dialog>\n );\n}\n\n/** The strip the search field sits in. */\nexport function CommandHeader({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"command-header\"\n className={cn('flex shrink-0 items-center gap-2 border-b border-doom-border px-3 py-2.5', className)}\n {...props}\n />\n );\n}\n\n/** The search field: bare, because the header already draws the surface. */\nexport function CommandInput({ className, ...props }: InputProps) {\n return (\n <Input\n data-slot=\"command-input\"\n variant=\"bare\"\n autoFocus\n autoComplete=\"off\"\n className={cn('flex-1', className)}\n {...props}\n />\n );\n}\n\n/** The scrolling body. It is the listbox, so its rows are the options. */\nexport function CommandList({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n role=\"listbox\"\n data-slot=\"command-list\"\n className={cn('flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto p-1.5', className)}\n {...props}\n />\n );\n}\n\n/** A labelled run of rows. */\nexport function CommandGroup({ className, ...props }: ComponentProps<'div'>) {\n return <div data-slot=\"command-group\" className={cn('flex flex-col gap-0.5', className)} {...props} />;\n}\n\nexport function CommandGroupLabel({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"command-group-label\"\n className={cn('px-2 pt-2 pb-1 text-2xs font-bold tracking-wider text-doom-faint uppercase', className)}\n {...props}\n />\n );\n}\n\n/** One command. Compact by default, since a palette shows many at once. */\nexport function CommandItem({ density = 'compact', ...props }: OptionRowProps) {\n return <OptionRow data-slot=\"command-item\" density={density} {...props} />;\n}\n\n/** A command's name, taking the width the row has left. */\nexport function CommandItemLabel(props: ComponentProps<'span'>) {\n return <OptionLabel data-slot=\"command-item-label\" density=\"compact\" {...props} />;\n}\n\n/** What the palette says when nothing matches. */\nexport function CommandEmpty({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"command-empty\"\n className={cn('px-2 py-6 text-center text-sm text-doom-faint', className)}\n {...props}\n />\n );\n}\n\n/** The hint strip along the bottom: what the keys do. */\nexport function CommandFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"command-footer\"\n className={cn(\n 'flex min-h-[30px] shrink-0 items-center justify-between gap-3 border-t border-doom-border-soft bg-doom-deep px-3 text-2xs text-doom-faint',\n className,\n )}\n {...props}\n />\n );\n}\n"],"mappings":"iQAwBA,SAAgB,EAAc,CAC5B,OACA,eACA,QACA,eAAe,GACf,YACA,WACA,QAAQ,KACR,GAAG,GACkB,CACrB,OACE,EAAC,EAAD,CAAc,OAAoB,eAChC,SAAA,EAAC,EAAD,CAAe,YAAU,iBAAwB,QAAO,UAAW,EAAG,eAAgB,CAAS,EAAG,GAAI,EAAtG,SAAA,CACE,EAAC,EAAD,CAAa,UAAW,EAAe,IAAA,GAAY,UAAY,SAAA,CAAmB,CAAA,EACjF,CACY,GACT,CAAA,CAEZ,CAGA,SAAgB,EAAc,CAAE,YAAW,GAAG,GAAgC,CAC5E,OACE,EAAC,MAAD,CACE,YAAU,iBACV,UAAW,EAAG,2EAA4E,CAAS,EACnG,GAAI,CACL,CAAA,CAEL,CAGA,SAAgB,EAAa,CAAE,YAAW,GAAG,GAAqB,CAChE,OACE,EAAC,EAAD,CACE,YAAU,gBACV,QAAQ,OACR,UAAA,GACA,aAAa,MACb,UAAW,EAAG,SAAU,CAAS,EACjC,GAAI,CACL,CAAA,CAEL,CAGA,SAAgB,EAAY,CAAE,YAAW,GAAG,GAAgC,CAC1E,OACE,EAAC,MAAD,CACE,KAAK,UACL,YAAU,eACV,UAAW,EAAG,6DAA8D,CAAS,EACrF,GAAI,CACL,CAAA,CAEL,CAGA,SAAgB,EAAa,CAAE,YAAW,GAAG,GAAgC,CAC3E,OAAO,EAAC,MAAD,CAAK,YAAU,gBAAgB,UAAW,EAAG,wBAAyB,CAAS,EAAG,GAAI,CAAQ,CAAA,CACvG,CAEA,SAAgB,EAAkB,CAAE,YAAW,GAAG,GAAgC,CAChF,OACE,EAAC,MAAD,CACE,YAAU,sBACV,UAAW,EAAG,6EAA8E,CAAS,EACrG,GAAI,CACL,CAAA,CAEL,CAGA,SAAgB,EAAY,CAAE,UAAU,UAAW,GAAG,GAAyB,CAC7E,OAAO,EAAC,EAAD,CAAW,YAAU,eAAwB,UAAS,GAAI,CAAQ,CAAA,CAC3E,CAGA,SAAgB,EAAiB,EAA+B,CAC9D,OAAO,EAAC,EAAD,CAAa,YAAU,qBAAqB,QAAQ,UAAU,GAAI,CAAQ,CAAA,CACnF,CAGA,SAAgB,EAAa,CAAE,YAAW,GAAG,GAAgC,CAC3E,OACE,EAAC,MAAD,CACE,YAAU,gBACV,UAAW,EAAG,gDAAiD,CAAS,EACxE,GAAI,CACL,CAAA,CAEL,CAGA,SAAgB,EAAc,CAAE,YAAW,GAAG,GAAgC,CAC5E,OACE,EAAC,MAAD,CACE,YAAU,iBACV,UAAW,EACT,4IACA,CACF,EACA,GAAI,CACL,CAAA,CAEL"}
@@ -1,2 +1,2 @@
1
- require("../icons/icons.cjs");const e=require("../lib/cn.cjs"),t=require("./Button.cjs");let n=require("radix-ui"),r=require("react/jsx-runtime"),i=require("react"),a=require("class-variance-authority"),o=require("lucide-react");const s=(0,i.createContext)(void 0);function c(e){let t=e.onOpenChange===void 0?void 0:t=>e.onOpenChange?.(t);return(0,r.jsx)(s.Provider,{value:t,children:(0,r.jsx)(n.Dialog.Root,{"data-slot":`dialog`,...e,onOpenChange:t})})}function l(e){return(0,r.jsx)(n.Dialog.Trigger,{"data-slot":`dialog-trigger`,...e})}function u(e){return(0,r.jsx)(n.Dialog.Portal,{"data-slot":`dialog-portal`,...e})}function d(e){return(0,r.jsx)(n.Dialog.Close,{"data-slot":`dialog-close`,...e})}function f({className:t,onPointerDownCapture:a,...o}){let c=(0,i.useContext)(s);return(0,r.jsx)(n.Dialog.Overlay,{"data-slot":`dialog-overlay`,className:e.cn(`fixed inset-0 z-40 bg-doom-deep/70 data-[state=open]:animate-doom-fade`,t),onPointerDownCapture:e=>{a?.(e),!(e.defaultPrevented||c===void 0)&&e.currentTarget.nextElementSibling?.querySelector(`[data-slot="select-trigger"][data-state="open"]`)!=null&&(e.stopPropagation(),c(!1))},...o})}const p={sm:`w-[360px]`,md:`w-[480px]`,lg:`w-[620px]`};function m({className:t,children:i,width:a=`md`,...o}){return(0,r.jsxs)(u,{children:[(0,r.jsx)(f,{}),(0,r.jsx)(n.Dialog.Content,{"data-slot":`dialog-content`,className:e.cn(`fixed top-1/2 left-1/2 z-50 flex max-h-[calc(100dvh-24px)] max-w-[calc(100vw-24px)] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-lg border border-doom-border bg-doom-panel font-mono shadow-2xl outline-none data-[state=open]:animate-doom-pop`,p[a],t),...o,children:i})]})}function h({className:i,dismissible:a=!1,closeLabel:s=`close`,children:c,...l}){return(0,r.jsxs)(`div`,{"data-slot":`dialog-header`,className:e.cn(`flex min-w-0 items-center justify-between gap-3 border-b border-doom-border px-3 py-3 sm:px-4`,i),...l,children:[c,a?(0,r.jsx)(n.Dialog.Close,{asChild:!0,children:(0,r.jsx)(t.Button,{variant:`ghost`,size:`icon`,"aria-label":s,className:`text-doom-faint hover:text-doom-hi`,children:(0,r.jsx)(o.X,{className:`h-3 w-3`})})}):null]})}function g({className:t,...i}){return(0,r.jsx)(n.Dialog.Title,{"data-slot":`dialog-title`,className:e.cn(`text-[12px] font-bold tracking-wide text-doom-hi`,t),...i})}function _({className:t,...i}){return(0,r.jsx)(n.Dialog.Description,{"data-slot":`dialog-description`,className:e.cn(`text-[11px] leading-relaxed text-doom-dim`,t),...i})}function v({className:t,...n}){return(0,r.jsx)(`div`,{"data-slot":`dialog-body`,className:e.cn(`flex min-h-0 flex-col gap-3 overflow-y-auto px-3 py-3 sm:px-4 sm:py-4`,t),...n})}const y=(0,a.cva)(`flex shrink-0 items-center gap-2`,{variants:{variant:{plain:`justify-end`,bar:`min-h-[34px] flex-wrap justify-between border-t border-doom-border-soft bg-doom-deep px-3 py-1.5 sm:flex-nowrap sm:px-4 sm:py-0`}},defaultVariants:{variant:`plain`}});function b({className:t,variant:n,...i}){return(0,r.jsx)(`div`,{"data-slot":`dialog-footer`,className:e.cn(y({variant:n}),t),...i})}exports.Dialog=c,exports.DialogBody=v,exports.DialogClose=d,exports.DialogContent=m,exports.DialogDescription=_,exports.DialogFooter=b,exports.DialogHeader=h,exports.DialogOverlay=f,exports.DialogPortal=u,exports.DialogTitle=g,exports.DialogTrigger=l,exports.dialogFooterVariants=y;
1
+ require("../icons/icons.cjs");const e=require("../lib/cn.cjs"),t=require("./Button.cjs");let n=require("radix-ui"),r=require("react/jsx-runtime"),i=require("react"),a=require("class-variance-authority"),o=require("lucide-react");const s=(0,i.createContext)(void 0);function c(e){let t=e.onOpenChange===void 0?void 0:t=>e.onOpenChange?.(t);return(0,r.jsx)(s.Provider,{value:t,children:(0,r.jsx)(n.Dialog.Root,{"data-slot":`dialog`,...e,onOpenChange:t})})}function l(e){return(0,r.jsx)(n.Dialog.Trigger,{"data-slot":`dialog-trigger`,...e})}function u(e){return(0,r.jsx)(n.Dialog.Portal,{"data-slot":`dialog-portal`,...e})}function d(e){return(0,r.jsx)(n.Dialog.Close,{"data-slot":`dialog-close`,...e})}function f({className:t,onPointerDownCapture:a,...o}){let c=(0,i.useContext)(s);return(0,r.jsx)(n.Dialog.Overlay,{"data-slot":`dialog-overlay`,className:e.cn(`fixed inset-0 z-40 bg-doom-deep/70 data-[state=open]:animate-doom-fade`,t),onPointerDownCapture:e=>{a?.(e),!(e.defaultPrevented||c===void 0)&&e.currentTarget.nextElementSibling?.querySelector(`[data-slot="select-trigger"][data-state="open"]`)!=null&&(e.stopPropagation(),c(!1))},...o})}const p={sm:`w-[360px]`,md:`w-[480px]`,lg:`w-[620px]`};function m({className:t,children:i,width:a=`md`,...o}){return(0,r.jsxs)(u,{children:[(0,r.jsx)(f,{}),(0,r.jsx)(n.Dialog.Content,{"data-slot":`dialog-content`,className:e.cn(`fixed top-1/2 left-1/2 z-50 flex max-h-[calc(100dvh-24px)] max-w-[calc(100vw-24px)] -translate-x-1/2 -translate-y-1/2 flex-col overflow-hidden rounded-lg border border-doom-border bg-doom-panel font-mono shadow-2xl outline-none data-[state=open]:animate-doom-pop`,p[a],t),...o,children:i})]})}function h({className:i,dismissible:a=!1,closeLabel:s=`close`,children:c,...l}){return(0,r.jsxs)(`div`,{"data-slot":`dialog-header`,className:e.cn(`flex min-w-0 items-center justify-between gap-3 border-b border-doom-border px-3 py-3 sm:px-4`,i),...l,children:[c,a?(0,r.jsx)(n.Dialog.Close,{asChild:!0,children:(0,r.jsx)(t.Button,{variant:`ghost`,size:`icon`,"aria-label":s,className:`text-doom-faint hover:text-doom-hi`,children:(0,r.jsx)(o.X,{className:`h-3 w-3`})})}):null]})}function g({className:t,...i}){return(0,r.jsx)(n.Dialog.Title,{"data-slot":`dialog-title`,className:e.cn(`text-sm font-bold tracking-wide text-doom-hi`,t),...i})}function _({className:t,...i}){return(0,r.jsx)(n.Dialog.Description,{"data-slot":`dialog-description`,className:e.cn(`text-sm leading-relaxed text-doom-dim`,t),...i})}function v({className:t,...n}){return(0,r.jsx)(`div`,{"data-slot":`dialog-body`,className:e.cn(`flex min-h-0 flex-col gap-3 overflow-y-auto px-3 py-3 sm:px-4 sm:py-4`,t),...n})}const y=(0,a.cva)(`flex shrink-0 items-center gap-2`,{variants:{variant:{plain:`justify-end`,bar:`min-h-[34px] flex-wrap justify-between border-t border-doom-border-soft bg-doom-deep px-3 py-1.5 sm:flex-nowrap sm:px-4 sm:py-0`}},defaultVariants:{variant:`plain`}});function b({className:t,variant:n,...i}){return(0,r.jsx)(`div`,{"data-slot":`dialog-footer`,className:e.cn(y({variant:n}),t),...i})}exports.Dialog=c,exports.DialogBody=v,exports.DialogClose=d,exports.DialogContent=m,exports.DialogDescription=_,exports.DialogFooter=b,exports.DialogHeader=h,exports.DialogOverlay=f,exports.DialogPortal=u,exports.DialogTitle=g,exports.DialogTrigger=l,exports.dialogFooterVariants=y;
2
2
  //# sourceMappingURL=Dialog.cjs.map