@agimon-ai/doompi-web-components 0.0.1-alpha.4 → 0.0.1-alpha.6
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.
- package/README.md +6 -6
- package/dist/components/Accordion.d.cts +4 -4
- package/dist/components/Accordion.d.cts.map +1 -1
- package/dist/components/Avatar.d.cts +3 -3
- package/dist/components/Avatar.d.cts.map +1 -1
- package/dist/components/Badge.d.cts +1 -1
- package/dist/components/Badge.d.cts.map +1 -1
- package/dist/components/Breadcrumb.d.cts +1 -1
- package/dist/components/Breadcrumb.d.cts.map +1 -1
- package/dist/components/Button.d.cts +1 -1
- package/dist/components/Button.d.cts.map +1 -1
- package/dist/components/Checkbox.d.cts +1 -1
- package/dist/components/Checkbox.d.cts.map +1 -1
- package/dist/components/CodeEditor.d.cts +1 -1
- package/dist/components/CodeEditor.d.cts.map +1 -1
- package/dist/components/Collapsible.d.cts +3 -3
- package/dist/components/Collapsible.d.cts.map +1 -1
- package/dist/components/Command.d.cts +10 -10
- package/dist/components/Command.d.cts.map +1 -1
- package/dist/components/Dialog.d.cts +9 -9
- package/dist/components/Dialog.d.cts.map +1 -1
- package/dist/components/Dot.d.cts +1 -1
- package/dist/components/Dot.d.cts.map +1 -1
- package/dist/components/DropdownMenu.d.cts +14 -14
- package/dist/components/DropdownMenu.d.cts.map +1 -1
- package/dist/components/EmptyState.d.cts +1 -1
- package/dist/components/EmptyState.d.cts.map +1 -1
- package/dist/components/HashlineLines.d.cts +17 -0
- package/dist/components/HashlineLines.d.cts.map +1 -0
- package/dist/components/Input.d.cts +1 -1
- package/dist/components/Input.d.cts.map +1 -1
- package/dist/components/Kbd.d.cts +1 -1
- package/dist/components/Kbd.d.cts.map +1 -1
- package/dist/components/Label.d.cts +1 -1
- package/dist/components/Label.d.cts.map +1 -1
- package/dist/components/Markdown.d.cts +13 -3
- package/dist/components/Markdown.d.cts.map +1 -1
- package/dist/components/MediaPreview.d.cts +1 -1
- package/dist/components/MediaPreview.d.cts.map +1 -1
- package/dist/components/MessageItem.d.cts +4 -4
- package/dist/components/MessageItem.d.cts.map +1 -1
- package/dist/components/MessageLines.d.cts +1 -1
- package/dist/components/MessageLines.d.cts.map +1 -1
- package/dist/components/OptionList.d.cts +3 -3
- package/dist/components/OptionList.d.cts.map +1 -1
- package/dist/components/Panel.d.cts +3 -3
- package/dist/components/Panel.d.cts.map +1 -1
- package/dist/components/Popover.d.cts +7 -7
- package/dist/components/Popover.d.cts.map +1 -1
- package/dist/components/Progress.d.cts +1 -1
- package/dist/components/Progress.d.cts.map +1 -1
- package/dist/components/RadioGroup.d.cts +3 -3
- package/dist/components/RadioGroup.d.cts.map +1 -1
- package/dist/components/ScrollArea.d.cts +2 -2
- package/dist/components/ScrollArea.d.cts.map +1 -1
- package/dist/components/SectionLabel.d.cts +1 -1
- package/dist/components/SectionLabel.d.cts.map +1 -1
- package/dist/components/Select.d.cts +8 -8
- package/dist/components/Select.d.cts.map +1 -1
- package/dist/components/Separator.d.cts +1 -1
- package/dist/components/Separator.d.cts.map +1 -1
- package/dist/components/Sheet.d.cts +36 -0
- package/dist/components/Sheet.d.cts.map +1 -0
- package/dist/components/Skeleton.d.cts +1 -1
- package/dist/components/Skeleton.d.cts.map +1 -1
- package/dist/components/Spinner.d.cts +1 -1
- package/dist/components/Spinner.d.cts.map +1 -1
- package/dist/components/StatusBadge.d.cts +1 -1
- package/dist/components/StatusBadge.d.cts.map +1 -1
- package/dist/components/StreamCursor.d.cts +1 -1
- package/dist/components/StreamCursor.d.cts.map +1 -1
- package/dist/components/Switch.d.cts +1 -1
- package/dist/components/Switch.d.cts.map +1 -1
- package/dist/components/Tabs.d.cts +6 -6
- package/dist/components/Tabs.d.cts.map +1 -1
- package/dist/components/Textarea.d.cts +1 -1
- package/dist/components/Textarea.d.cts.map +1 -1
- package/dist/components/Toast.d.cts +7 -7
- package/dist/components/Toast.d.cts.map +1 -1
- package/dist/components/Tooltip.d.cts +4 -4
- package/dist/components/Tooltip.d.cts.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +4 -1
- package/dist/index.d.mts +4 -1
- package/dist/index.mjs +1 -1
- package/dist/lib/hashlineView.d.cts +61 -0
- package/dist/lib/hashlineView.d.cts.map +1 -0
- package/dist/src/components/Accordion.d.mts +4 -4
- package/dist/src/components/Accordion.d.mts.map +1 -1
- package/dist/src/components/Avatar.d.mts +3 -3
- package/dist/src/components/Avatar.d.mts.map +1 -1
- package/dist/src/components/Badge.d.mts +1 -1
- package/dist/src/components/Badge.d.mts.map +1 -1
- package/dist/src/components/Breadcrumb.d.mts +1 -1
- package/dist/src/components/Breadcrumb.d.mts.map +1 -1
- package/dist/src/components/Button.d.mts +1 -1
- package/dist/src/components/Button.d.mts.map +1 -1
- package/dist/src/components/Checkbox.d.mts +1 -1
- package/dist/src/components/Checkbox.d.mts.map +1 -1
- package/dist/src/components/CodeEditor.d.mts +1 -1
- package/dist/src/components/CodeEditor.d.mts.map +1 -1
- package/dist/src/components/CodeEditorView.cjs +1 -1
- package/dist/src/components/CodeEditorView.cjs.map +1 -1
- package/dist/src/components/CodeEditorView.mjs +1 -1
- package/dist/src/components/CodeEditorView.mjs.map +1 -1
- package/dist/src/components/Collapsible.d.mts +3 -3
- package/dist/src/components/Collapsible.d.mts.map +1 -1
- package/dist/src/components/Command.d.mts +10 -10
- package/dist/src/components/Command.d.mts.map +1 -1
- package/dist/src/components/Dialog.d.mts +9 -9
- package/dist/src/components/Dialog.d.mts.map +1 -1
- package/dist/src/components/Dot.d.mts +1 -1
- package/dist/src/components/Dot.d.mts.map +1 -1
- package/dist/src/components/DropdownMenu.d.mts +14 -14
- package/dist/src/components/DropdownMenu.d.mts.map +1 -1
- package/dist/src/components/EmptyState.d.mts +1 -1
- package/dist/src/components/EmptyState.d.mts.map +1 -1
- package/dist/src/components/HashlineLines.cjs +2 -0
- package/dist/src/components/HashlineLines.cjs.map +1 -0
- package/dist/src/components/HashlineLines.d.mts +17 -0
- package/dist/src/components/HashlineLines.d.mts.map +1 -0
- package/dist/src/components/HashlineLines.mjs +2 -0
- package/dist/src/components/HashlineLines.mjs.map +1 -0
- package/dist/src/components/Input.d.mts +1 -1
- package/dist/src/components/Input.d.mts.map +1 -1
- package/dist/src/components/Kbd.d.mts +1 -1
- package/dist/src/components/Kbd.d.mts.map +1 -1
- package/dist/src/components/Label.d.mts +1 -1
- package/dist/src/components/Label.d.mts.map +1 -1
- package/dist/src/components/Markdown.cjs +2 -1
- package/dist/src/components/Markdown.cjs.map +1 -1
- package/dist/src/components/Markdown.d.mts +13 -3
- package/dist/src/components/Markdown.d.mts.map +1 -1
- package/dist/src/components/Markdown.mjs +2 -1
- package/dist/src/components/Markdown.mjs.map +1 -1
- package/dist/src/components/MediaPreview.cjs +1 -1
- package/dist/src/components/MediaPreview.cjs.map +1 -1
- package/dist/src/components/MediaPreview.d.mts +1 -1
- package/dist/src/components/MediaPreview.d.mts.map +1 -1
- package/dist/src/components/MediaPreview.mjs +1 -1
- package/dist/src/components/MediaPreview.mjs.map +1 -1
- package/dist/src/components/MessageItem.d.mts +4 -4
- package/dist/src/components/MessageItem.d.mts.map +1 -1
- package/dist/src/components/MessageLines.d.mts +1 -1
- package/dist/src/components/MessageLines.d.mts.map +1 -1
- package/dist/src/components/OptionList.d.mts +3 -3
- package/dist/src/components/OptionList.d.mts.map +1 -1
- package/dist/src/components/Panel.d.mts +3 -3
- package/dist/src/components/Panel.d.mts.map +1 -1
- package/dist/src/components/Popover.d.mts +7 -7
- package/dist/src/components/Popover.d.mts.map +1 -1
- package/dist/src/components/Progress.d.mts +1 -1
- package/dist/src/components/Progress.d.mts.map +1 -1
- package/dist/src/components/RadioGroup.d.mts +3 -3
- package/dist/src/components/RadioGroup.d.mts.map +1 -1
- package/dist/src/components/ScrollArea.d.mts +2 -2
- package/dist/src/components/ScrollArea.d.mts.map +1 -1
- package/dist/src/components/SectionLabel.d.mts +1 -1
- package/dist/src/components/SectionLabel.d.mts.map +1 -1
- package/dist/src/components/Select.d.mts +8 -8
- package/dist/src/components/Select.d.mts.map +1 -1
- package/dist/src/components/Separator.d.mts +1 -1
- package/dist/src/components/Separator.d.mts.map +1 -1
- package/dist/src/components/Sheet.cjs +2 -0
- package/dist/src/components/Sheet.cjs.map +1 -0
- package/dist/src/components/Sheet.d.mts +36 -0
- package/dist/src/components/Sheet.d.mts.map +1 -0
- package/dist/src/components/Sheet.mjs +2 -0
- package/dist/src/components/Sheet.mjs.map +1 -0
- package/dist/src/components/Skeleton.d.mts +1 -1
- package/dist/src/components/Skeleton.d.mts.map +1 -1
- package/dist/src/components/Spinner.cjs +1 -1
- package/dist/src/components/Spinner.cjs.map +1 -1
- package/dist/src/components/Spinner.d.mts +1 -1
- package/dist/src/components/Spinner.d.mts.map +1 -1
- package/dist/src/components/Spinner.mjs +1 -1
- package/dist/src/components/Spinner.mjs.map +1 -1
- package/dist/src/components/StatusBadge.d.mts +1 -1
- package/dist/src/components/StatusBadge.d.mts.map +1 -1
- package/dist/src/components/StreamCursor.d.mts +1 -1
- package/dist/src/components/StreamCursor.d.mts.map +1 -1
- package/dist/src/components/Switch.d.mts +1 -1
- package/dist/src/components/Switch.d.mts.map +1 -1
- package/dist/src/components/Tabs.d.mts +6 -6
- package/dist/src/components/Tabs.d.mts.map +1 -1
- package/dist/src/components/Textarea.d.mts +1 -1
- package/dist/src/components/Textarea.d.mts.map +1 -1
- package/dist/src/components/Toast.d.mts +7 -7
- package/dist/src/components/Toast.d.mts.map +1 -1
- package/dist/src/components/Tooltip.d.mts +4 -4
- package/dist/src/components/Tooltip.d.mts.map +1 -1
- package/dist/src/lib/hashlineView.cjs +6 -0
- package/dist/src/lib/hashlineView.cjs.map +1 -0
- package/dist/src/lib/hashlineView.d.mts +61 -0
- package/dist/src/lib/hashlineView.d.mts.map +1 -0
- package/dist/src/lib/hashlineView.mjs +6 -0
- package/dist/src/lib/hashlineView.mjs.map +1 -0
- package/package.json +6 -6
- package/styles/tokens.css +22 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sheet.cjs","names":["SheetPrimitive","cn","Button","CloseIcon"],"sources":["../../../src/components/Sheet.tsx"],"sourcesContent":["import { Dialog as SheetPrimitive } from 'radix-ui';\nimport type { ComponentProps } from 'react';\nimport { CloseIcon } from '../icons/icons.ts';\nimport { cn } from '../lib/cn.ts';\nimport { Button } from './Button.tsx';\n\n/**\n * A side panel on Radix's Dialog: an overlay that slides in from an edge,\n * with the focus trap, Escape, outside click and scroll lock a dialog has.\n *\n * It is the Dialog for content that reads as a column rather than a form: a\n * detail view beside what the reader was looking at. An inline aside cannot\n * do this, because it takes width from the surface underneath it.\n */\nexport function Sheet(props: ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\nexport function SheetTrigger(props: ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\nexport function SheetClose(props: ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\nexport function SheetOverlay({ className, ...props }: ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn('fixed inset-0 z-40 bg-doom-deep/70 data-[state=open]:animate-doom-fade', className)}\n {...props}\n />\n );\n}\n\nconst SIDE_POSITION = {\n right: 'inset-y-0 right-0 border-l data-[state=open]:animate-doom-slide-right',\n left: 'inset-y-0 left-0 border-r data-[state=open]:animate-doom-slide-left',\n} as const;\n\nexport interface SheetContentProps extends ComponentProps<typeof SheetPrimitive.Content> {\n /** Which edge it comes from. */\n side?: 'right' | 'left';\n /** Width preset; `className` may still override. */\n width?: 'sm' | 'md' | 'lg';\n}\n\nconst CONTENT_WIDTH = { sm: 'w-[360px]', md: 'w-[440px]', lg: 'w-[560px]' } as const;\n\nexport function SheetContent({ className, children, side = 'right', width = 'md', ...props }: SheetContentProps) {\n return (\n <SheetPrimitive.Portal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n data-side={side}\n className={cn(\n 'fixed z-50 flex max-w-[calc(100vw-24px)] flex-col overflow-hidden border-doom-border bg-doom-rail font-mono shadow-2xl outline-none',\n SIDE_POSITION[side],\n CONTENT_WIDTH[width],\n className,\n )}\n {...props}\n >\n {children}\n </SheetPrimitive.Content>\n </SheetPrimitive.Portal>\n );\n}\n\nexport interface SheetHeaderProps extends ComponentProps<'div'> {\n /** Show the close control at the right of the strip. On by default: a sheet is dismissed, not answered. */\n dismissible?: boolean;\n /** What the close control announces. */\n closeLabel?: string;\n}\n\nexport function SheetHeader({\n className,\n dismissible = true,\n closeLabel = 'close',\n children,\n ...props\n}: SheetHeaderProps) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn('flex h-11 min-w-0 shrink-0 items-center gap-2.5 border-b border-doom-border px-4', className)}\n {...props}\n >\n {children}\n {dismissible ? (\n <SheetPrimitive.Close asChild>\n <Button variant=\"ghost\" size=\"icon\" aria-label={closeLabel} className=\"text-doom-faint hover:text-doom-hi\">\n <CloseIcon className=\"h-3 w-3\" />\n </Button>\n </SheetPrimitive.Close>\n ) : null}\n </div>\n );\n}\n\nexport function SheetTitle({ className, ...props }: ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn('truncate text-[13px] font-bold text-doom-hi', className)}\n {...props}\n />\n );\n}\n\nexport function SheetDescription({ className, ...props }: ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn('text-[11px] leading-relaxed text-doom-dim', className)}\n {...props}\n />\n );\n}\n\nexport function SheetBody({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-body\"\n className={cn('flex min-h-0 flex-1 flex-col gap-3 overflow-y-auto px-4 py-3', className)}\n {...props}\n />\n );\n}\n\nexport function SheetFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\n 'flex min-h-[34px] shrink-0 flex-wrap items-center justify-between gap-2 border-t border-doom-border-soft bg-doom-deep px-4 py-1.5',\n className,\n )}\n {...props}\n />\n );\n}\n"],"mappings":"4KAcA,SAAgB,EAAM,EAAmD,CACvE,OAAO,EAAA,EAAA,IAAA,CAACA,EAAAA,OAAe,KAAhB,CAAqB,YAAU,QAAQ,GAAI,CAAQ,CAAA,CAC5D,CAEA,SAAgB,EAAa,EAAsD,CACjF,OAAO,EAAA,EAAA,IAAA,CAACA,EAAAA,OAAe,QAAhB,CAAwB,YAAU,gBAAgB,GAAI,CAAQ,CAAA,CACvE,CAEA,SAAgB,EAAW,EAAoD,CAC7E,OAAO,EAAA,EAAA,IAAA,CAACA,EAAAA,OAAe,MAAhB,CAAsB,YAAU,cAAc,GAAI,CAAQ,CAAA,CACnE,CAEA,SAAgB,EAAa,CAAE,YAAW,GAAG,GAAwD,CACnG,OACE,EAAA,EAAA,IAAA,CAACA,EAAAA,OAAe,QAAhB,CACE,YAAU,gBACV,UAAWC,EAAAA,GAAG,yEAA0E,CAAS,EACjG,GAAI,CACL,CAAA,CAEL,CAEA,MAAM,EAAgB,CACpB,MAAO,wEACP,KAAM,qEACR,EASM,EAAgB,CAAE,GAAI,YAAa,GAAI,YAAa,GAAI,WAAY,EAE1E,SAAgB,EAAa,CAAE,YAAW,WAAU,OAAO,QAAS,QAAQ,KAAM,GAAG,GAA4B,CAC/G,OACE,EAAA,EAAA,KAAA,CAACD,EAAAA,OAAe,OAAhB,CAAA,SAAA,EACE,EAAA,EAAA,IAAA,CAAC,EAAD,CAAe,CAAA,GACf,EAAA,EAAA,IAAA,CAACA,EAAAA,OAAe,QAAhB,CACE,YAAU,gBACV,YAAW,EACX,UAAWC,EAAAA,GACT,sIACA,EAAc,GACd,EAAc,GACd,CACF,EACA,GAAI,EAEH,UACqB,CAAA,CACH,CAAA,CAAA,CAE3B,CASA,SAAgB,EAAY,CAC1B,YACA,cAAc,GACd,aAAa,QACb,WACA,GAAG,GACgB,CACnB,OACE,EAAA,EAAA,KAAA,CAAC,MAAD,CACE,YAAU,eACV,UAAWA,EAAAA,GAAG,mFAAoF,CAAS,EAC3G,GAAI,EAHN,SAAA,CAKG,EACA,GACC,EAAA,EAAA,IAAA,CAACD,EAAAA,OAAe,MAAhB,CAAsB,QAAA,GACpB,UAAA,EAAA,EAAA,IAAA,CAACE,EAAAA,OAAD,CAAQ,QAAQ,QAAQ,KAAK,OAAO,aAAY,EAAY,UAAU,qCACpE,UAAA,EAAA,EAAA,IAAA,CAACC,EAAAA,EAAD,CAAW,UAAU,SAAW,CAAA,CAC1B,CAAA,CACY,CAAA,EACpB,IACD,GAET,CAEA,SAAgB,EAAW,CAAE,YAAW,GAAG,GAAsD,CAC/F,OACE,EAAA,EAAA,IAAA,CAACH,EAAAA,OAAe,MAAhB,CACE,YAAU,cACV,UAAWC,EAAAA,GAAG,8CAA+C,CAAS,EACtE,GAAI,CACL,CAAA,CAEL,CAEA,SAAgB,EAAiB,CAAE,YAAW,GAAG,GAA4D,CAC3G,OACE,EAAA,EAAA,IAAA,CAACD,EAAAA,OAAe,YAAhB,CACE,YAAU,oBACV,UAAWC,EAAAA,GAAG,4CAA6C,CAAS,EACpE,GAAI,CACL,CAAA,CAEL,CAEA,SAAgB,EAAU,CAAE,YAAW,GAAG,GAAgC,CACxE,OACE,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,YAAU,aACV,UAAWA,EAAAA,GAAG,+DAAgE,CAAS,EACvF,GAAI,CACL,CAAA,CAEL,CAEA,SAAgB,EAAY,CAAE,YAAW,GAAG,GAAgC,CAC1E,OACE,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,YAAU,eACV,UAAWA,EAAAA,GACT,oIACA,CACF,EACA,GAAI,CACL,CAAA,CAEL"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Dialog } from "radix-ui";
|
|
2
|
+
import { ComponentProps } from "react";
|
|
3
|
+
//#region src/components/Sheet.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* A side panel on Radix's Dialog: an overlay that slides in from an edge,
|
|
6
|
+
* with the focus trap, Escape, outside click and scroll lock a dialog has.
|
|
7
|
+
*
|
|
8
|
+
* It is the Dialog for content that reads as a column rather than a form: a
|
|
9
|
+
* detail view beside what the reader was looking at. An inline aside cannot
|
|
10
|
+
* do this, because it takes width from the surface underneath it.
|
|
11
|
+
*/
|
|
12
|
+
declare function Sheet(props: ComponentProps<typeof Dialog.Root>): import("react").JSX.Element;
|
|
13
|
+
declare function SheetTrigger(props: ComponentProps<typeof Dialog.Trigger>): import("react").JSX.Element;
|
|
14
|
+
declare function SheetClose(props: ComponentProps<typeof Dialog.Close>): import("react").JSX.Element;
|
|
15
|
+
declare function SheetOverlay({ className, ...props }: ComponentProps<typeof Dialog.Overlay>): import("react").JSX.Element;
|
|
16
|
+
interface SheetContentProps extends ComponentProps<typeof Dialog.Content> {
|
|
17
|
+
/** Which edge it comes from. */
|
|
18
|
+
side?: 'right' | 'left';
|
|
19
|
+
/** Width preset; `className` may still override. */
|
|
20
|
+
width?: 'sm' | 'md' | 'lg';
|
|
21
|
+
}
|
|
22
|
+
declare function SheetContent({ className, children, side, width, ...props }: SheetContentProps): import("react").JSX.Element;
|
|
23
|
+
interface SheetHeaderProps extends ComponentProps<'div'> {
|
|
24
|
+
/** Show the close control at the right of the strip. On by default: a sheet is dismissed, not answered. */
|
|
25
|
+
dismissible?: boolean;
|
|
26
|
+
/** What the close control announces. */
|
|
27
|
+
closeLabel?: string;
|
|
28
|
+
}
|
|
29
|
+
declare function SheetHeader({ className, dismissible, closeLabel, children, ...props }: SheetHeaderProps): import("react").JSX.Element;
|
|
30
|
+
declare function SheetTitle({ className, ...props }: ComponentProps<typeof Dialog.Title>): import("react").JSX.Element;
|
|
31
|
+
declare function SheetDescription({ className, ...props }: ComponentProps<typeof Dialog.Description>): import("react").JSX.Element;
|
|
32
|
+
declare function SheetBody({ className, ...props }: ComponentProps<'div'>): import("react").JSX.Element;
|
|
33
|
+
declare function SheetFooter({ className, ...props }: ComponentProps<'div'>): import("react").JSX.Element;
|
|
34
|
+
//#endregion
|
|
35
|
+
export { Sheet, SheetBody, SheetClose, SheetContent, SheetContentProps, SheetDescription, SheetFooter, SheetHeader, SheetHeaderProps, SheetOverlay, SheetTitle, SheetTrigger };
|
|
36
|
+
//# sourceMappingURL=Sheet.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sheet.d.mts","names":[],"sources":["../../../src/components/Sheet.tsx"],"mappings":";;;;;;;;;;;iBAcgB,MAAM,OAAO,sBAAsB,OAAe,wBAAK,IAAA;iBAIvD,aAAa,OAAO,sBAAsB,OAAe,2BAAQ,IAAA;iBAIjE,WAAW,OAAO,sBAAsB,OAAe,yBAAM,IAAA;iBAI7D,eAAe,cAAc,SAAS,sBAAsB,OAAe,2BAAQ,IAAA;UAelF,0BAA0B,sBAAsB,OAAe;;EAE9E;;EAEA;;iBAKc,eAAe,WAAW,UAAU,MAAgB,UAAiB,SAAS,oCAAiB,IAAA;UAqB9F,yBAAyB;;EAExC;;EAEA;;iBAGc,cACd,WACA,aACA,YACA,aACG,SACF,mCAAgB,IAAA;iBAmBH,aAAa,cAAc,SAAS,sBAAsB,OAAe,yBAAM,IAAA;iBAU/E,mBAAmB,cAAc,SAAS,sBAAsB,OAAe,+BAAY,IAAA;iBAU3F,YAAY,cAAc,SAAS,wCAAqB,IAAA;iBAUxD,cAAc,cAAc,SAAS,wCAAqB,IAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{CloseIcon as e}from"../icons/icons.mjs";import{cn as t}from"../lib/cn.mjs";import{Button as n}from"./Button.mjs";import{Dialog as r}from"radix-ui";import{jsx as i,jsxs as a}from"react/jsx-runtime";function o(e){return i(r.Root,{"data-slot":`sheet`,...e})}function s(e){return i(r.Trigger,{"data-slot":`sheet-trigger`,...e})}function c(e){return i(r.Close,{"data-slot":`sheet-close`,...e})}function l({className:e,...n}){return i(r.Overlay,{"data-slot":`sheet-overlay`,className:t(`fixed inset-0 z-40 bg-doom-deep/70 data-[state=open]:animate-doom-fade`,e),...n})}const u={right:`inset-y-0 right-0 border-l data-[state=open]:animate-doom-slide-right`,left:`inset-y-0 left-0 border-r data-[state=open]:animate-doom-slide-left`},d={sm:`w-[360px]`,md:`w-[440px]`,lg:`w-[560px]`};function f({className:e,children:n,side:o=`right`,width:s=`md`,...c}){return a(r.Portal,{children:[i(l,{}),i(r.Content,{"data-slot":`sheet-content`,"data-side":o,className:t(`fixed z-50 flex max-w-[calc(100vw-24px)] flex-col overflow-hidden border-doom-border bg-doom-rail font-mono shadow-2xl outline-none`,u[o],d[s],e),...c,children:n})]})}function p({className:o,dismissible:s=!0,closeLabel:c=`close`,children:l,...u}){return a(`div`,{"data-slot":`sheet-header`,className:t(`flex h-11 min-w-0 shrink-0 items-center gap-2.5 border-b border-doom-border px-4`,o),...u,children:[l,s?i(r.Close,{asChild:!0,children:i(n,{variant:`ghost`,size:`icon`,"aria-label":c,className:`text-doom-faint hover:text-doom-hi`,children:i(e,{className:`h-3 w-3`})})}):null]})}function m({className:e,...n}){return i(r.Title,{"data-slot":`sheet-title`,className:t(`truncate text-[13px] font-bold text-doom-hi`,e),...n})}function h({className:e,...n}){return i(r.Description,{"data-slot":`sheet-description`,className:t(`text-[11px] leading-relaxed text-doom-dim`,e),...n})}function g({className:e,...n}){return i(`div`,{"data-slot":`sheet-body`,className:t(`flex min-h-0 flex-1 flex-col gap-3 overflow-y-auto px-4 py-3`,e),...n})}function _({className:e,...n}){return i(`div`,{"data-slot":`sheet-footer`,className:t(`flex min-h-[34px] shrink-0 flex-wrap items-center justify-between gap-2 border-t border-doom-border-soft bg-doom-deep px-4 py-1.5`,e),...n})}export{o as Sheet,g as SheetBody,c as SheetClose,f as SheetContent,h as SheetDescription,_ as SheetFooter,p as SheetHeader,l as SheetOverlay,m as SheetTitle,s as SheetTrigger};
|
|
2
|
+
//# sourceMappingURL=Sheet.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Sheet.mjs","names":["SheetPrimitive"],"sources":["../../../src/components/Sheet.tsx"],"sourcesContent":["import { Dialog as SheetPrimitive } from 'radix-ui';\nimport type { ComponentProps } from 'react';\nimport { CloseIcon } from '../icons/icons.ts';\nimport { cn } from '../lib/cn.ts';\nimport { Button } from './Button.tsx';\n\n/**\n * A side panel on Radix's Dialog: an overlay that slides in from an edge,\n * with the focus trap, Escape, outside click and scroll lock a dialog has.\n *\n * It is the Dialog for content that reads as a column rather than a form: a\n * detail view beside what the reader was looking at. An inline aside cannot\n * do this, because it takes width from the surface underneath it.\n */\nexport function Sheet(props: ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\nexport function SheetTrigger(props: ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\nexport function SheetClose(props: ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\nexport function SheetOverlay({ className, ...props }: ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn('fixed inset-0 z-40 bg-doom-deep/70 data-[state=open]:animate-doom-fade', className)}\n {...props}\n />\n );\n}\n\nconst SIDE_POSITION = {\n right: 'inset-y-0 right-0 border-l data-[state=open]:animate-doom-slide-right',\n left: 'inset-y-0 left-0 border-r data-[state=open]:animate-doom-slide-left',\n} as const;\n\nexport interface SheetContentProps extends ComponentProps<typeof SheetPrimitive.Content> {\n /** Which edge it comes from. */\n side?: 'right' | 'left';\n /** Width preset; `className` may still override. */\n width?: 'sm' | 'md' | 'lg';\n}\n\nconst CONTENT_WIDTH = { sm: 'w-[360px]', md: 'w-[440px]', lg: 'w-[560px]' } as const;\n\nexport function SheetContent({ className, children, side = 'right', width = 'md', ...props }: SheetContentProps) {\n return (\n <SheetPrimitive.Portal>\n <SheetOverlay />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n data-side={side}\n className={cn(\n 'fixed z-50 flex max-w-[calc(100vw-24px)] flex-col overflow-hidden border-doom-border bg-doom-rail font-mono shadow-2xl outline-none',\n SIDE_POSITION[side],\n CONTENT_WIDTH[width],\n className,\n )}\n {...props}\n >\n {children}\n </SheetPrimitive.Content>\n </SheetPrimitive.Portal>\n );\n}\n\nexport interface SheetHeaderProps extends ComponentProps<'div'> {\n /** Show the close control at the right of the strip. On by default: a sheet is dismissed, not answered. */\n dismissible?: boolean;\n /** What the close control announces. */\n closeLabel?: string;\n}\n\nexport function SheetHeader({\n className,\n dismissible = true,\n closeLabel = 'close',\n children,\n ...props\n}: SheetHeaderProps) {\n return (\n <div\n data-slot=\"sheet-header\"\n className={cn('flex h-11 min-w-0 shrink-0 items-center gap-2.5 border-b border-doom-border px-4', className)}\n {...props}\n >\n {children}\n {dismissible ? (\n <SheetPrimitive.Close asChild>\n <Button variant=\"ghost\" size=\"icon\" aria-label={closeLabel} className=\"text-doom-faint hover:text-doom-hi\">\n <CloseIcon className=\"h-3 w-3\" />\n </Button>\n </SheetPrimitive.Close>\n ) : null}\n </div>\n );\n}\n\nexport function SheetTitle({ className, ...props }: ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n className={cn('truncate text-[13px] font-bold text-doom-hi', className)}\n {...props}\n />\n );\n}\n\nexport function SheetDescription({ className, ...props }: ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn('text-[11px] leading-relaxed text-doom-dim', className)}\n {...props}\n />\n );\n}\n\nexport function SheetBody({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-body\"\n className={cn('flex min-h-0 flex-1 flex-col gap-3 overflow-y-auto px-4 py-3', className)}\n {...props}\n />\n );\n}\n\nexport function SheetFooter({ className, ...props }: ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\n 'flex min-h-[34px] shrink-0 flex-wrap items-center justify-between gap-2 border-t border-doom-border-soft bg-doom-deep px-4 py-1.5',\n className,\n )}\n {...props}\n />\n );\n}\n"],"mappings":"4MAcA,SAAgB,EAAM,EAAmD,CACvE,OAAO,EAACA,EAAe,KAAhB,CAAqB,YAAU,QAAQ,GAAI,CAAQ,CAAA,CAC5D,CAEA,SAAgB,EAAa,EAAsD,CACjF,OAAO,EAACA,EAAe,QAAhB,CAAwB,YAAU,gBAAgB,GAAI,CAAQ,CAAA,CACvE,CAEA,SAAgB,EAAW,EAAoD,CAC7E,OAAO,EAACA,EAAe,MAAhB,CAAsB,YAAU,cAAc,GAAI,CAAQ,CAAA,CACnE,CAEA,SAAgB,EAAa,CAAE,YAAW,GAAG,GAAwD,CACnG,OACE,EAACA,EAAe,QAAhB,CACE,YAAU,gBACV,UAAW,EAAG,yEAA0E,CAAS,EACjG,GAAI,CACL,CAAA,CAEL,CAEA,MAAM,EAAgB,CACpB,MAAO,wEACP,KAAM,qEACR,EASM,EAAgB,CAAE,GAAI,YAAa,GAAI,YAAa,GAAI,WAAY,EAE1E,SAAgB,EAAa,CAAE,YAAW,WAAU,OAAO,QAAS,QAAQ,KAAM,GAAG,GAA4B,CAC/G,OACE,EAACA,EAAe,OAAhB,CAAA,SAAA,CACE,EAAC,EAAD,CAAe,CAAA,EACf,EAACA,EAAe,QAAhB,CACE,YAAU,gBACV,YAAW,EACX,UAAW,EACT,sIACA,EAAc,GACd,EAAc,GACd,CACF,EACA,GAAI,EAEH,UACqB,CAAA,CACH,CAAA,CAAA,CAE3B,CASA,SAAgB,EAAY,CAC1B,YACA,cAAc,GACd,aAAa,QACb,WACA,GAAG,GACgB,CACnB,OACE,EAAC,MAAD,CACE,YAAU,eACV,UAAW,EAAG,mFAAoF,CAAS,EAC3G,GAAI,EAHN,SAAA,CAKG,EACA,EACC,EAACA,EAAe,MAAhB,CAAsB,QAAA,GACpB,SAAA,EAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,OAAO,aAAY,EAAY,UAAU,qCACpE,SAAA,EAAC,EAAD,CAAW,UAAU,SAAW,CAAA,CAC1B,CAAA,CACY,CAAA,EACpB,IACD,GAET,CAEA,SAAgB,EAAW,CAAE,YAAW,GAAG,GAAsD,CAC/F,OACE,EAACA,EAAe,MAAhB,CACE,YAAU,cACV,UAAW,EAAG,8CAA+C,CAAS,EACtE,GAAI,CACL,CAAA,CAEL,CAEA,SAAgB,EAAiB,CAAE,YAAW,GAAG,GAA4D,CAC3G,OACE,EAACA,EAAe,YAAhB,CACE,YAAU,oBACV,UAAW,EAAG,4CAA6C,CAAS,EACpE,GAAI,CACL,CAAA,CAEL,CAEA,SAAgB,EAAU,CAAE,YAAW,GAAG,GAAgC,CACxE,OACE,EAAC,MAAD,CACE,YAAU,aACV,UAAW,EAAG,+DAAgE,CAAS,EACvF,GAAI,CACL,CAAA,CAEL,CAEA,SAAgB,EAAY,CAAE,YAAW,GAAG,GAAgC,CAC1E,OACE,EAAC,MAAD,CACE,YAAU,eACV,UAAW,EACT,oIACA,CACF,EACA,GAAI,CACL,CAAA,CAEL"}
|
|
@@ -5,7 +5,7 @@ import { ComponentProps } from "react";
|
|
|
5
5
|
* is a pulsing block, and it is aria-hidden because the live region that
|
|
6
6
|
* announces the wait belongs to the surface, not to each placeholder.
|
|
7
7
|
*/
|
|
8
|
-
declare function Skeleton({ className, ...props }: ComponentProps<'div'>): import("react
|
|
8
|
+
declare function Skeleton({ className, ...props }: ComponentProps<'div'>): import("react").JSX.Element;
|
|
9
9
|
//#endregion
|
|
10
10
|
export { Skeleton };
|
|
11
11
|
//# sourceMappingURL=Skeleton.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Skeleton.d.mts","names":[],"sources":["../../../src/components/Skeleton.tsx"],"mappings":";;;;;;;iBAQgB,WAAW,cAAc,SAAS,
|
|
1
|
+
{"version":3,"file":"Skeleton.d.mts","names":[],"sources":["../../../src/components/Skeleton.tsx"],"mappings":";;;;;;;iBAQgB,WAAW,cAAc,SAAS,wCAAqB,IAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../icons/icons.cjs");const e=require("../lib/cn.cjs");let t=require("react/jsx-runtime"),n=require("lucide-react");function r({className:r,label:i,...a}){let o=(0,t.jsx)(n.Loader2,{"data-slot":`spinner`,"aria-hidden":!0,className:e.cn(`h-3 w-3 animate-spin`,r),...a});return i===void 0?o:(0,t.jsxs)(`
|
|
1
|
+
require("../icons/icons.cjs");const e=require("../lib/cn.cjs");let t=require("react/jsx-runtime"),n=require("lucide-react");function r({className:r,label:i,...a}){let o=(0,t.jsx)(n.Loader2,{"data-slot":`spinner`,"aria-hidden":!0,className:e.cn(`h-3 w-3 animate-spin`,r),...a});return i===void 0?o:(0,t.jsxs)(`output`,{"data-slot":`spinner-status`,className:`inline-flex items-center`,children:[o,(0,t.jsx)(`span`,{className:`sr-only`,children:i})]})}exports.Spinner=r;
|
|
2
2
|
//# sourceMappingURL=Spinner.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Spinner.cjs","names":["LoaderIcon","cn"],"sources":["../../../src/components/Spinner.tsx"],"sourcesContent":["import type { ComponentProps } from 'react';\nimport { LoaderIcon } from '../icons/icons.ts';\nimport { cn } from '../lib/cn.ts';\n\nexport interface SpinnerProps extends ComponentProps<'svg'> {\n /**\n * What the wait is for. Given one, the spinner announces itself as a live\n * status instead of staying silent, which is the difference between a\n * screen reader saying \"loading providers\" and saying nothing at all.\n */\n label?: string;\n}\n\n/** A turning loader in the current text colour; decorative unless it is given a label. */\nexport function Spinner({ className, label, ...props }: SpinnerProps) {\n const icon = (\n <LoaderIcon data-slot=\"spinner\" aria-hidden className={cn('h-3 w-3 animate-spin', className)} {...props} />\n );\n if (label === undefined) return icon;\n return (\n <
|
|
1
|
+
{"version":3,"file":"Spinner.cjs","names":["LoaderIcon","cn"],"sources":["../../../src/components/Spinner.tsx"],"sourcesContent":["import type { ComponentProps } from 'react';\nimport { LoaderIcon } from '../icons/icons.ts';\nimport { cn } from '../lib/cn.ts';\n\nexport interface SpinnerProps extends ComponentProps<'svg'> {\n /**\n * What the wait is for. Given one, the spinner announces itself as a live\n * status instead of staying silent, which is the difference between a\n * screen reader saying \"loading providers\" and saying nothing at all.\n */\n label?: string;\n}\n\n/** A turning loader in the current text colour; decorative unless it is given a label. */\nexport function Spinner({ className, label, ...props }: SpinnerProps) {\n const icon = (\n <LoaderIcon data-slot=\"spinner\" aria-hidden className={cn('h-3 w-3 animate-spin', className)} {...props} />\n );\n if (label === undefined) return icon;\n return (\n <output data-slot=\"spinner-status\" className=\"inline-flex items-center\">\n {icon}\n <span className=\"sr-only\">{label}</span>\n </output>\n );\n}\n"],"mappings":"4HAcA,SAAgB,EAAQ,CAAE,YAAW,QAAO,GAAG,GAAuB,CACpE,IAAM,GACJ,EAAA,EAAA,IAAA,CAACA,EAAAA,QAAD,CAAY,YAAU,UAAU,cAAA,GAAY,UAAWC,EAAAA,GAAG,uBAAwB,CAAS,EAAG,GAAI,CAAQ,CAAA,EAG5G,OADI,IAAU,IAAA,GAAkB,GAE9B,EAAA,EAAA,KAAA,CAAC,SAAD,CAAQ,YAAU,iBAAiB,UAAU,2BAA7C,SAAA,CACG,GACD,EAAA,EAAA,IAAA,CAAC,OAAD,CAAM,UAAU,UAAW,SAAA,CAAY,CAAA,CACjC,GAEZ"}
|
|
@@ -9,7 +9,7 @@ interface SpinnerProps extends ComponentProps<'svg'> {
|
|
|
9
9
|
label?: string;
|
|
10
10
|
}
|
|
11
11
|
/** A turning loader in the current text colour; decorative unless it is given a label. */
|
|
12
|
-
declare function Spinner({ className, label, ...props }: SpinnerProps): import("react
|
|
12
|
+
declare function Spinner({ className, label, ...props }: SpinnerProps): import("react").JSX.Element;
|
|
13
13
|
//#endregion
|
|
14
14
|
export { Spinner, SpinnerProps };
|
|
15
15
|
//# sourceMappingURL=Spinner.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Spinner.d.mts","names":[],"sources":["../../../src/components/Spinner.tsx"],"mappings":";;UAIiB,qBAAqB;;;;;;EAMpC;;;iBAIc,UAAU,WAAW,UAAU,SAAS,
|
|
1
|
+
{"version":3,"file":"Spinner.d.mts","names":[],"sources":["../../../src/components/Spinner.tsx"],"mappings":";;UAIiB,qBAAqB;;;;;;EAMpC;;;iBAIc,UAAU,WAAW,UAAU,SAAS,+BAAY,IAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{LoaderIcon as e}from"../icons/icons.mjs";import{cn as t}from"../lib/cn.mjs";import{jsx as n,jsxs as r}from"react/jsx-runtime";function i({className:i,label:a,...o}){let s=n(e,{"data-slot":`spinner`,"aria-hidden":!0,className:t(`h-3 w-3 animate-spin`,i),...o});return a===void 0?s:r(`
|
|
1
|
+
import{LoaderIcon as e}from"../icons/icons.mjs";import{cn as t}from"../lib/cn.mjs";import{jsx as n,jsxs as r}from"react/jsx-runtime";function i({className:i,label:a,...o}){let s=n(e,{"data-slot":`spinner`,"aria-hidden":!0,className:t(`h-3 w-3 animate-spin`,i),...o});return a===void 0?s:r(`output`,{"data-slot":`spinner-status`,className:`inline-flex items-center`,children:[s,n(`span`,{className:`sr-only`,children:a})]})}export{i as Spinner};
|
|
2
2
|
//# sourceMappingURL=Spinner.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Spinner.mjs","names":[],"sources":["../../../src/components/Spinner.tsx"],"sourcesContent":["import type { ComponentProps } from 'react';\nimport { LoaderIcon } from '../icons/icons.ts';\nimport { cn } from '../lib/cn.ts';\n\nexport interface SpinnerProps extends ComponentProps<'svg'> {\n /**\n * What the wait is for. Given one, the spinner announces itself as a live\n * status instead of staying silent, which is the difference between a\n * screen reader saying \"loading providers\" and saying nothing at all.\n */\n label?: string;\n}\n\n/** A turning loader in the current text colour; decorative unless it is given a label. */\nexport function Spinner({ className, label, ...props }: SpinnerProps) {\n const icon = (\n <LoaderIcon data-slot=\"spinner\" aria-hidden className={cn('h-3 w-3 animate-spin', className)} {...props} />\n );\n if (label === undefined) return icon;\n return (\n <
|
|
1
|
+
{"version":3,"file":"Spinner.mjs","names":[],"sources":["../../../src/components/Spinner.tsx"],"sourcesContent":["import type { ComponentProps } from 'react';\nimport { LoaderIcon } from '../icons/icons.ts';\nimport { cn } from '../lib/cn.ts';\n\nexport interface SpinnerProps extends ComponentProps<'svg'> {\n /**\n * What the wait is for. Given one, the spinner announces itself as a live\n * status instead of staying silent, which is the difference between a\n * screen reader saying \"loading providers\" and saying nothing at all.\n */\n label?: string;\n}\n\n/** A turning loader in the current text colour; decorative unless it is given a label. */\nexport function Spinner({ className, label, ...props }: SpinnerProps) {\n const icon = (\n <LoaderIcon data-slot=\"spinner\" aria-hidden className={cn('h-3 w-3 animate-spin', className)} {...props} />\n );\n if (label === undefined) return icon;\n return (\n <output data-slot=\"spinner-status\" className=\"inline-flex items-center\">\n {icon}\n <span className=\"sr-only\">{label}</span>\n </output>\n );\n}\n"],"mappings":"qIAcA,SAAgB,EAAQ,CAAE,YAAW,QAAO,GAAG,GAAuB,CACpE,IAAM,EACJ,EAAC,EAAD,CAAY,YAAU,UAAU,cAAA,GAAY,UAAW,EAAG,uBAAwB,CAAS,EAAG,GAAI,CAAQ,CAAA,EAG5G,OADI,IAAU,IAAA,GAAkB,EAE9B,EAAC,SAAD,CAAQ,YAAU,iBAAiB,UAAU,2BAA7C,SAAA,CACG,EACD,EAAC,OAAD,CAAM,UAAU,UAAW,SAAA,CAAY,CAAA,CACjC,GAEZ"}
|
|
@@ -18,7 +18,7 @@ interface StatusBadgeProps extends ComponentProps<'span'>, VariantProps<typeof s
|
|
|
18
18
|
asChild?: boolean;
|
|
19
19
|
}
|
|
20
20
|
/** The tinted outcome pill: RUNNING, OK, ERROR and their kin, as every run card draws it. */
|
|
21
|
-
declare function StatusBadge({ className, tone, size, asChild, ...props }: StatusBadgeProps): import("react
|
|
21
|
+
declare function StatusBadge({ className, tone, size, asChild, ...props }: StatusBadgeProps): import("react").JSX.Element;
|
|
22
22
|
//#endregion
|
|
23
23
|
export { STATUS_EDGE, StatusBadge, StatusBadgeProps, StatusTone, statusBadgeVariants };
|
|
24
24
|
//# sourceMappingURL=StatusBadge.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatusBadge.d.mts","names":[],"sources":["../../../src/components/StatusBadge.tsx"],"mappings":";;;;cAMa,sBAAmB;;;6CAqB/B;KAEW,aAAa;;;;;;cAOZ,aAAa,SAAS,OAAO;UASzB,yBAAyB,wBAAwB,oBAAoB;;EAEpF;;;iBAIc,cAAc,WAAW,MAAM,MAAM,YAAoB,SAAS
|
|
1
|
+
{"version":3,"file":"StatusBadge.d.mts","names":[],"sources":["../../../src/components/StatusBadge.tsx"],"mappings":";;;;cAMa,sBAAmB;;;6CAqB/B;KAEW,aAAa;;;;;;cAOZ,aAAa,SAAS,OAAO;UASzB,yBAAyB,wBAAwB,oBAAoB;;EAEpF;;;iBAIc,cAAc,WAAW,MAAM,MAAM,YAAoB,SAAS,mCAAgB,IAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ComponentProps } from "react";
|
|
2
2
|
//#region src/components/StreamCursor.d.ts
|
|
3
3
|
/** The blinking block that marks text still arriving. */
|
|
4
|
-
declare function StreamCursor({ className, ...props }: ComponentProps<'span'>): import("react
|
|
4
|
+
declare function StreamCursor({ className, ...props }: ComponentProps<'span'>): import("react").JSX.Element;
|
|
5
5
|
//#endregion
|
|
6
6
|
export { StreamCursor };
|
|
7
7
|
//# sourceMappingURL=StreamCursor.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StreamCursor.d.mts","names":[],"sources":["../../../src/components/StreamCursor.tsx"],"mappings":";;;iBAIgB,eAAe,cAAc,SAAS,
|
|
1
|
+
{"version":3,"file":"StreamCursor.d.mts","names":[],"sources":["../../../src/components/StreamCursor.tsx"],"mappings":";;;iBAIgB,eAAe,cAAc,SAAS,yCAAsB,IAAA"}
|
|
@@ -2,7 +2,7 @@ import { Switch } from "radix-ui";
|
|
|
2
2
|
import { ComponentProps } from "react";
|
|
3
3
|
//#region src/components/Switch.d.ts
|
|
4
4
|
/** An on/off track; use it where the change takes effect immediately, a checkbox where it needs a save. */
|
|
5
|
-
declare function Switch$1({ className, ...props }: ComponentProps<typeof Switch.Root>): import("react
|
|
5
|
+
declare function Switch$1({ className, ...props }: ComponentProps<typeof Switch.Root>): import("react").JSX.Element;
|
|
6
6
|
//#endregion
|
|
7
7
|
export { Switch$1 as Switch };
|
|
8
8
|
//# sourceMappingURL=Switch.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Switch.d.mts","names":[],"sources":["../../../src/components/Switch.tsx"],"mappings":";;;;iBAKgB,WAAS,cAAc,SAAS,sBAAsB,OAAgB,
|
|
1
|
+
{"version":3,"file":"Switch.d.mts","names":[],"sources":["../../../src/components/Switch.tsx"],"mappings":";;;;iBAKgB,WAAS,cAAc,SAAS,sBAAsB,OAAgB,wBAAK,IAAA"}
|
|
@@ -23,14 +23,14 @@ interface NavTabProps extends ComponentProps<'a'>, VariantProps<typeof tabVarian
|
|
|
23
23
|
* it renders; a route-driven tab strip has neither, so it gets the styling and
|
|
24
24
|
* leaves the semantics to the router.
|
|
25
25
|
*/
|
|
26
|
-
declare function NavTab({ className, active, asChild, ...props }: NavTabProps): import("react
|
|
26
|
+
declare function NavTab({ className, active, asChild, ...props }: NavTabProps): import("react").JSX.Element;
|
|
27
27
|
/** The count beside a tab's label. */
|
|
28
|
-
declare function NavTabBadge({ className, active, ...props }: ComponentProps<'span'> & VariantProps<typeof tabBadgeVariants>): import("react
|
|
28
|
+
declare function NavTabBadge({ className, active, ...props }: ComponentProps<'span'> & VariantProps<typeof tabBadgeVariants>): import("react").JSX.Element;
|
|
29
29
|
/** Radix Tabs, for a surface that swaps panels in place rather than navigating. */
|
|
30
|
-
declare function Tabs$1(props: ComponentProps<typeof Tabs.Root>): import("react
|
|
31
|
-
declare function TabsList({ className, ...props }: ComponentProps<typeof Tabs.List>): import("react
|
|
32
|
-
declare function TabsTrigger({ className, ...props }: ComponentProps<typeof Tabs.Trigger>): import("react
|
|
33
|
-
declare function TabsContent({ className, ...props }: ComponentProps<typeof Tabs.Content>): import("react
|
|
30
|
+
declare function Tabs$1(props: ComponentProps<typeof Tabs.Root>): import("react").JSX.Element;
|
|
31
|
+
declare function TabsList({ className, ...props }: ComponentProps<typeof Tabs.List>): import("react").JSX.Element;
|
|
32
|
+
declare function TabsTrigger({ className, ...props }: ComponentProps<typeof Tabs.Trigger>): import("react").JSX.Element;
|
|
33
|
+
declare function TabsContent({ className, ...props }: ComponentProps<typeof Tabs.Content>): import("react").JSX.Element;
|
|
34
34
|
//#endregion
|
|
35
35
|
export { NavTab, NavTabBadge, NavTabProps, Tabs$1 as Tabs, TabsContent, TabsList, TabsTrigger, tabBadgeVariants, tabVariants };
|
|
36
36
|
//# sourceMappingURL=Tabs.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.d.mts","names":[],"sources":["../../../src/components/Tabs.tsx"],"mappings":";;;;;;;;;cAWa,cAAW;;6CAWvB;;cAGY,mBAAgB;;6CAQ5B;UAEgB,oBAAoB,qBAAqB,oBAAoB;;EAE5E;;;;;;;iBAQc,SAAS,WAAW,QAAQ,YAAoB,SAAS,
|
|
1
|
+
{"version":3,"file":"Tabs.d.mts","names":[],"sources":["../../../src/components/Tabs.tsx"],"mappings":";;;;;;;;;cAWa,cAAW;;6CAWvB;;cAGY,mBAAgB;;6CAQ5B;UAEgB,oBAAoB,qBAAqB,oBAAoB;;EAE5E;;;;;;;iBAQc,SAAS,WAAW,QAAQ,YAAoB,SAAS,8BAAW,IAAA;;iBAapE,cACd,WACA,WACG,SACF,yBAAyB,oBAAoB,oCAAiB,IAAA;;iBAKjD,OAAK,OAAO,sBAAsB,KAAc,wBAAK,IAAA;iBAIrD,WAAW,cAAc,SAAS,sBAAsB,KAAc,wBAAK,IAAA;iBAI3E,cAAc,cAAc,SAAS,sBAAsB,KAAc,2BAAQ,IAAA;iBAcjF,cAAc,cAAc,SAAS,sBAAsB,KAAc,2BAAQ,IAAA"}
|
|
@@ -4,7 +4,7 @@ import { ComponentProps } from "react";
|
|
|
4
4
|
//#region src/components/Textarea.d.ts
|
|
5
5
|
interface TextareaProps extends Omit<ComponentProps<'textarea'>, 'size'>, VariantProps<typeof fieldVariants> {}
|
|
6
6
|
/** The multi-line field, styled as the Input; `bare` drops the well for a composer that draws its own. */
|
|
7
|
-
declare function Textarea({ className, variant, size, ...props }: TextareaProps): import("react
|
|
7
|
+
declare function Textarea({ className, variant, size, ...props }: TextareaProps): import("react").JSX.Element;
|
|
8
8
|
//#endregion
|
|
9
9
|
export { Textarea, TextareaProps };
|
|
10
10
|
//# sourceMappingURL=Textarea.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Textarea.d.mts","names":[],"sources":["../../../src/components/Textarea.tsx"],"mappings":";;;;UAKiB,sBAAsB,KAAK,qCAAqC,oBAAoB;;iBAGrF,WAAW,WAAW,SAAS,SAAS,SAAS,
|
|
1
|
+
{"version":3,"file":"Textarea.d.mts","names":[],"sources":["../../../src/components/Textarea.tsx"],"mappings":";;;;UAKiB,sBAAsB,KAAK,qCAAqC,oBAAoB;;iBAGrF,WAAW,WAAW,SAAS,SAAS,SAAS,gCAAa,IAAA"}
|
|
@@ -8,17 +8,17 @@ import { ComponentProps } from "react";
|
|
|
8
8
|
* blur, and restores focus when it leaves. Mount one ToastProvider and one
|
|
9
9
|
* ToastViewport per page.
|
|
10
10
|
*/
|
|
11
|
-
declare function ToastProvider(props: ComponentProps<typeof Toast.Provider>): import("react
|
|
12
|
-
declare function ToastViewport({ className, ...props }: ComponentProps<typeof Toast.Viewport>): import("react
|
|
11
|
+
declare function ToastProvider(props: ComponentProps<typeof Toast.Provider>): import("react").JSX.Element;
|
|
12
|
+
declare function ToastViewport({ className, ...props }: ComponentProps<typeof Toast.Viewport>): import("react").JSX.Element;
|
|
13
13
|
declare const toastVariants: (props?: ({
|
|
14
14
|
tone?: "accent" | "error" | "info" | "neutral" | "ok" | "running" | null | undefined;
|
|
15
15
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
16
16
|
interface ToastProps extends ComponentProps<typeof Toast.Root>, VariantProps<typeof toastVariants> {}
|
|
17
|
-
declare function Toast$1({ className, tone, ...props }: ToastProps): import("react
|
|
18
|
-
declare function ToastTitle({ className, ...props }: ComponentProps<typeof Toast.Title>): import("react
|
|
19
|
-
declare function ToastDescription({ className, ...props }: ComponentProps<typeof Toast.Description>): import("react
|
|
20
|
-
declare function ToastAction(props: ComponentProps<typeof Toast.Action>): import("react
|
|
21
|
-
declare function ToastClose({ className, ...props }: ComponentProps<typeof Toast.Close>): import("react
|
|
17
|
+
declare function Toast$1({ className, tone, ...props }: ToastProps): import("react").JSX.Element;
|
|
18
|
+
declare function ToastTitle({ className, ...props }: ComponentProps<typeof Toast.Title>): import("react").JSX.Element;
|
|
19
|
+
declare function ToastDescription({ className, ...props }: ComponentProps<typeof Toast.Description>): import("react").JSX.Element;
|
|
20
|
+
declare function ToastAction(props: ComponentProps<typeof Toast.Action>): import("react").JSX.Element;
|
|
21
|
+
declare function ToastClose({ className, ...props }: ComponentProps<typeof Toast.Close>): import("react").JSX.Element;
|
|
22
22
|
//#endregion
|
|
23
23
|
export { Toast$1 as Toast, ToastAction, ToastClose, ToastDescription, ToastProps, ToastProvider, ToastTitle, ToastViewport, toastVariants };
|
|
24
24
|
//# sourceMappingURL=Toast.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Toast.d.mts","names":[],"sources":["../../../src/components/Toast.tsx"],"mappings":";;;;;;;;;;iBAagB,cAAc,OAAO,sBAAsB,MAAe,
|
|
1
|
+
{"version":3,"file":"Toast.d.mts","names":[],"sources":["../../../src/components/Toast.tsx"],"mappings":";;;;;;;;;;iBAagB,cAAc,OAAO,sBAAsB,MAAe,4BAAS,IAAA;iBAInE,gBAAgB,cAAc,SAAS,sBAAsB,MAAe,4BAAS,IAAA;cAUxF,gBAAa;;6CAezB;UAEgB,mBAAmB,sBAAsB,MAAe,OAAO,oBAAoB;iBAEpF,UAAQ,WAAW,SAAS,SAAS,6BAAU,IAAA;iBAI/C,aAAa,cAAc,SAAS,sBAAsB,MAAe,yBAAM,IAAA;iBAU/E,mBAAmB,cAAc,SAAS,sBAAsB,MAAe,+BAAY,IAAA;iBAU3F,YAAY,OAAO,sBAAsB,MAAe,0BAAO,IAAA;iBAI/D,aAAa,cAAc,SAAS,sBAAsB,MAAe,yBAAM,IAAA"}
|
|
@@ -2,10 +2,10 @@ import { Tooltip } from "radix-ui";
|
|
|
2
2
|
import { ComponentProps } from "react";
|
|
3
3
|
//#region src/components/Tooltip.d.ts
|
|
4
4
|
/** Mount once near the root; every Tooltip below shares its delay. */
|
|
5
|
-
declare function TooltipProvider({ delayDuration, ...props }: ComponentProps<typeof Tooltip.Provider>): import("react
|
|
6
|
-
declare function Tooltip$1(props: ComponentProps<typeof Tooltip.Root>): import("react
|
|
7
|
-
declare function TooltipTrigger(props: ComponentProps<typeof Tooltip.Trigger>): import("react
|
|
8
|
-
declare function TooltipContent({ className, sideOffset, children, ...props }: ComponentProps<typeof Tooltip.Content>): import("react
|
|
5
|
+
declare function TooltipProvider({ delayDuration, ...props }: ComponentProps<typeof Tooltip.Provider>): import("react").JSX.Element;
|
|
6
|
+
declare function Tooltip$1(props: ComponentProps<typeof Tooltip.Root>): import("react").JSX.Element;
|
|
7
|
+
declare function TooltipTrigger(props: ComponentProps<typeof Tooltip.Trigger>): import("react").JSX.Element;
|
|
8
|
+
declare function TooltipContent({ className, sideOffset, children, ...props }: ComponentProps<typeof Tooltip.Content>): import("react").JSX.Element;
|
|
9
9
|
//#endregion
|
|
10
10
|
export { Tooltip$1 as Tooltip, TooltipContent, TooltipProvider, TooltipTrigger };
|
|
11
11
|
//# sourceMappingURL=Tooltip.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.d.mts","names":[],"sources":["../../../src/components/Tooltip.tsx"],"mappings":";;;;iBAKgB,kBAAkB,kBAAwB,SAAS,sBAAsB,QAAiB,
|
|
1
|
+
{"version":3,"file":"Tooltip.d.mts","names":[],"sources":["../../../src/components/Tooltip.tsx"],"mappings":";;;;iBAKgB,kBAAkB,kBAAwB,SAAS,sBAAsB,QAAiB,4BAAS,IAAA;iBAInG,UAAQ,OAAO,sBAAsB,QAAiB,wBAAK,IAAA;iBAI3D,eAAe,OAAO,sBAAsB,QAAiB,2BAAQ,IAAA;iBAIrE,iBACd,WACA,YACA,aACG,SACF,sBAAsB,QAAiB,2BAAQ,IAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
const e=require("./collapse.cjs"),t=/^@file (.+)#([A-Za-z0-9_-]{8})$/u,n=/^(>> | {3})?(\d+)#[a-z]{3}\|(.*)$/u;function r(e){return typeof e==`object`&&!!e&&typeof e.type==`string`}function i(e,t){let n=e?.content.filter(r)??[],i=e===null?t:n.flatMap(e=>e.type===`text`?[e.text??``]:[]).join(`
|
|
2
|
+
`);if(i.length===0)return n.some(e=>e.type===`image`)?[`[Image attached]`]:[];let a=i.replaceAll(` `,` `).replaceAll(`\r
|
|
3
|
+
`,`
|
|
4
|
+
`).split(`
|
|
5
|
+
`);for(;a.at(-1)===``;)a.pop();return a}function a(e){let t=e.at(-1);if(!(t===void 0||!t.startsWith(`[`)||!t.endsWith(`]`))){for(e.pop();e.at(-1)===``;)e.pop();return t}}function o(e){let t=n.exec(e),r=t?.[2],i=t?.[3];if(r===void 0||i===void 0)return;let a=Number.parseInt(r,10);if(!Number.isSafeInteger(a)||a<1)return;let o=t?.[1];return{line:a,content:i,marker:o===`>> `?`match`:o===` `?`context`:void 0}}function s(e){return t.exec(e)?.[1]}function c(e,t){let n=[];for(let r of e){let e=s(r);if(e!==void 0){t!==`read`&&n.push({type:`file`,path:e});continue}let i=o(r);if(i!==void 0){n.push({type:`tagged`,value:i});continue}n.push({type:`plain`,text:r})}return n}function l(t,n,r,o){let s=i(t,n),l=a(s),u=c(s,r),{shown:d,hidden:f}=e.collapseLines(u,r===`read`?10:15,o);return{shown:d,hidden:f,notice:l,gutter:d.reduce((e,t)=>t.type===`tagged`?Math.max(e,String(t.value.line).length):e,1)}}function u(e){return e.filter(e=>e!==void 0&&e.length>0)}exports.GREP_COLLAPSED_LINES=15,exports.READ_COLLAPSED_LINES=10,exports.compactDetails=u,exports.hashlineBody=l,exports.parseFileHeader=s,exports.parseTaggedLine=o,exports.presentHashlineLines=c,exports.resultTextLines=i,exports.takeTrailingNotice=a;
|
|
6
|
+
//# sourceMappingURL=hashlineView.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashlineView.cjs","names":["collapseLines"],"sources":["../../../src/lib/hashlineView.ts"],"sourcesContent":["import { collapseLines } from './collapse.ts';\n\n/**\n * The hashline wire format, parsed the way the TUI's hashlineRendering does:\n * `@file path#tag` opens a file, `N#abc|content` is an anchored line, and a\n * `>> ` or three-space prefix marks grep matches and their context.\n *\n * It lives here rather than in each tool package because the read and grep\n * cards render the same bytes and had drifted into byte-identical copies of\n * this module. The patterns are still a transcription of doompi-hashline: a\n * cockpit plugin may import this library and the web contract, but not a\n * runtime package, so the format is stated twice on purpose and only once per\n * side of that line.\n */\nconst FILE_HEADER_PATTERN = /^@file (.+)#([A-Za-z0-9_-]{8})$/u;\nconst TAGGED_LINE_PATTERN = /^(>> | {3})?(\\d+)#[a-z]{3}\\|(.*)$/u;\nconst MATCH_PREFIX = '>> ';\nconst CONTEXT_PREFIX = ' ';\nconst IMAGE_PLACEHOLDER = '[Image attached]';\n\nexport const READ_COLLAPSED_LINES = 10;\nexport const GREP_COLLAPSED_LINES = 15;\n\nexport type HashlineResultKind = 'read' | 'grep';\nexport type TaggedLineMarker = 'match' | 'context';\n\n/**\n * The part of a tool result this parser reads.\n *\n * Named structurally rather than imported: the component library sits below\n * the web contract and must not depend on it, so it states the shape it needs\n * and any `ToolResultView` satisfies it.\n */\nexport interface HashlineResult {\n readonly content: readonly unknown[];\n}\n\nexport interface TaggedLine {\n readonly line: number;\n readonly content: string;\n readonly marker: TaggedLineMarker | undefined;\n}\n\nexport type PresentedLine =\n | { readonly type: 'file'; readonly path: string }\n | { readonly type: 'tagged'; readonly value: TaggedLine }\n | { readonly type: 'plain'; readonly text: string };\n\nexport interface HashlineBody {\n readonly shown: readonly PresentedLine[];\n /** Lines the collapsed view holds back; zero once expanded. */\n readonly hidden: number;\n /** The bracketed pagination or compaction note the tool appends after its lines. */\n readonly notice: string | undefined;\n /** Widest line number among the shown anchored lines, in characters. */\n readonly gutter: number;\n}\n\ninterface TextBlock {\n readonly type: string;\n readonly text?: string;\n}\n\nfunction isTextBlock(block: unknown): block is TextBlock {\n return typeof block === 'object' && block !== null && typeof (block as TextBlock).type === 'string';\n}\n\n/**\n * The result's text as lines: tabs widened, CRLF folded, trailing blanks\n * dropped. A result with no text but an image block reads as the TUI's\n * placeholder. The joined `output` stands in when no result view exists.\n */\nexport function resultTextLines(result: HashlineResult | null, output: string): string[] {\n const blocks = result?.content.filter(isTextBlock) ?? [];\n const text =\n result === null ? output : blocks.flatMap((block) => (block.type === 'text' ? [block.text ?? ''] : [])).join('\\n');\n if (text.length === 0) {\n return blocks.some((block) => block.type === 'image') ? [IMAGE_PLACEHOLDER] : [];\n }\n const lines = text.replaceAll('\\t', ' ').replaceAll('\\r\\n', '\\n').split('\\n');\n while (lines.at(-1) === '') lines.pop();\n return lines;\n}\n\n/** Detaches the tool's trailing `[...]` note so the body numbers file content only. */\nexport function takeTrailingNotice(lines: string[]): string | undefined {\n const last = lines.at(-1);\n if (last === undefined || !last.startsWith('[') || !last.endsWith(']')) return undefined;\n lines.pop();\n while (lines.at(-1) === '') lines.pop();\n return last;\n}\n\nexport function parseTaggedLine(value: string): TaggedLine | undefined {\n const match = TAGGED_LINE_PATTERN.exec(value);\n const lineText = match?.[2];\n const content = match?.[3];\n if (lineText === undefined || content === undefined) return undefined;\n const line = Number.parseInt(lineText, 10);\n if (!Number.isSafeInteger(line) || line < 1) return undefined;\n const prefix = match?.[1];\n const marker = prefix === MATCH_PREFIX ? 'match' : prefix === CONTEXT_PREFIX ? 'context' : undefined;\n return { line, content, marker };\n}\n\nexport function parseFileHeader(value: string): string | undefined {\n return FILE_HEADER_PATTERN.exec(value)?.[1];\n}\n\n/**\n * Lines as the card presents them. A read shows one file, so its header is\n * dropped; a grep groups anchored matches under each file's path.\n */\nexport function presentHashlineLines(lines: readonly string[], kind: HashlineResultKind): PresentedLine[] {\n const presented: PresentedLine[] = [];\n for (const line of lines) {\n const path = parseFileHeader(line);\n if (path !== undefined) {\n if (kind !== 'read') presented.push({ type: 'file', path });\n continue;\n }\n const tagged = parseTaggedLine(line);\n if (tagged !== undefined) {\n presented.push({ type: 'tagged', value: tagged });\n continue;\n }\n presented.push({ type: 'plain', text: line });\n }\n return presented;\n}\n\n/** The body a card shows for one result, collapsed to the kind's line budget unless expanded. */\nexport function hashlineBody(\n result: HashlineResult | null,\n output: string,\n kind: HashlineResultKind,\n expanded: boolean,\n): HashlineBody {\n const lines = resultTextLines(result, output);\n const notice = takeTrailingNotice(lines);\n const presented = presentHashlineLines(lines, kind);\n const budget = kind === 'read' ? READ_COLLAPSED_LINES : GREP_COLLAPSED_LINES;\n const { shown, hidden } = collapseLines(presented, budget, expanded);\n const gutter = shown.reduce(\n (widest, line) => (line.type === 'tagged' ? Math.max(widest, String(line.value.line).length) : widest),\n 1,\n );\n return { shown, hidden, notice, gutter };\n}\n\n/** The `key · key` detail list beside a call's primary argument, with absent values dropped. */\nexport function compactDetails(values: ReadonlyArray<string | undefined>): string[] {\n return values.filter((value): value is string => value !== undefined && value.length > 0);\n}\n"],"mappings":"kCAcM,EAAsB,mCACtB,EAAsB,qCAgD5B,SAAS,EAAY,EAAoC,CACvD,OAAO,OAAO,GAAU,YAAY,GAAkB,OAAQ,EAAoB,MAAS,QAC7F,CAOA,SAAgB,EAAgB,EAA+B,EAA0B,CACvF,IAAM,EAAS,GAAQ,QAAQ,OAAO,CAAW,GAAK,CAAC,EACjD,EACJ,IAAW,KAAO,EAAS,EAAO,QAAS,GAAW,EAAM,OAAS,OAAS,CAAC,EAAM,MAAQ,EAAE,EAAI,CAAC,CAAE,CAAC,CAAC,KAAK;CAAI,EACnH,GAAI,EAAK,SAAW,EAClB,OAAO,EAAO,KAAM,GAAU,EAAM,OAAS,OAAO,EAAI,CAAC,kBAAiB,EAAI,CAAC,EAEjF,IAAM,EAAQ,EAAK,WAAW,IAAM,IAAI,CAAC,CAAC,WAAW;EAAQ;CAAI,CAAC,CAAC,MAAM;CAAI,EAC7E,KAAO,EAAM,GAAG,EAAE,IAAM,IAAI,EAAM,IAAI,EACtC,OAAO,CACT,CAGA,SAAgB,EAAmB,EAAqC,CACtE,IAAM,EAAO,EAAM,GAAG,EAAE,EACpB,SAAS,IAAA,IAAa,CAAC,EAAK,WAAW,GAAG,GAAK,CAAC,EAAK,SAAS,GAAG,GAErE,KADA,EAAM,IAAI,EACH,EAAM,GAAG,EAAE,IAAM,IAAI,EAAM,IAAI,EACtC,OAAO,CAD+B,CAExC,CAEA,SAAgB,EAAgB,EAAuC,CACrE,IAAM,EAAQ,EAAoB,KAAK,CAAK,EACtC,EAAW,IAAQ,GACnB,EAAU,IAAQ,GACxB,GAAI,IAAa,IAAA,IAAa,IAAY,IAAA,GAAW,OACrD,IAAM,EAAO,OAAO,SAAS,EAAU,EAAE,EACzC,GAAI,CAAC,OAAO,cAAc,CAAI,GAAK,EAAO,EAAG,OAC7C,IAAM,EAAS,IAAQ,GAEvB,MAAO,CAAE,OAAM,UAAS,OADT,IAAW,MAAe,QAAU,IAAW,MAAiB,UAAY,IAAA,EAC5D,CACjC,CAEA,SAAgB,EAAgB,EAAmC,CACjE,OAAO,EAAoB,KAAK,CAAK,CAAC,GAAG,EAC3C,CAMA,SAAgB,EAAqB,EAA0B,EAA2C,CACxG,IAAM,EAA6B,CAAC,EACpC,IAAK,IAAM,KAAQ,EAAO,CACxB,IAAM,EAAO,EAAgB,CAAI,EACjC,GAAI,IAAS,IAAA,GAAW,CAClB,IAAS,QAAQ,EAAU,KAAK,CAAE,KAAM,OAAQ,MAAK,CAAC,EAC1D,QACF,CACA,IAAM,EAAS,EAAgB,CAAI,EACnC,GAAI,IAAW,IAAA,GAAW,CACxB,EAAU,KAAK,CAAE,KAAM,SAAU,MAAO,CAAO,CAAC,EAChD,QACF,CACA,EAAU,KAAK,CAAE,KAAM,QAAS,KAAM,CAAK,CAAC,CAC9C,CACA,OAAO,CACT,CAGA,SAAgB,EACd,EACA,EACA,EACA,EACc,CACd,IAAM,EAAQ,EAAgB,EAAQ,CAAM,EACtC,EAAS,EAAmB,CAAK,EACjC,EAAY,EAAqB,EAAO,CAAI,EAE5C,CAAE,QAAO,UAAWA,EAAAA,cAAc,EADzB,IAAS,OAAA,GAAA,GACmC,CAAQ,EAKnE,MAAO,CAAE,QAAO,SAAQ,SAAQ,OAJjB,EAAM,QAClB,EAAQ,IAAU,EAAK,OAAS,SAAW,KAAK,IAAI,EAAQ,OAAO,EAAK,MAAM,IAAI,CAAC,CAAC,MAAM,EAAI,EAC/F,CAEmC,CAAE,CACzC,CAGA,SAAgB,EAAe,EAAqD,CAClF,OAAO,EAAO,OAAQ,GAA2B,IAAU,IAAA,IAAa,EAAM,OAAS,CAAC,CAC1F"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
//#region src/lib/hashlineView.d.ts
|
|
2
|
+
declare const READ_COLLAPSED_LINES = 10;
|
|
3
|
+
declare const GREP_COLLAPSED_LINES = 15;
|
|
4
|
+
type HashlineResultKind = 'read' | 'grep';
|
|
5
|
+
type TaggedLineMarker = 'match' | 'context';
|
|
6
|
+
/**
|
|
7
|
+
* The part of a tool result this parser reads.
|
|
8
|
+
*
|
|
9
|
+
* Named structurally rather than imported: the component library sits below
|
|
10
|
+
* the web contract and must not depend on it, so it states the shape it needs
|
|
11
|
+
* and any `ToolResultView` satisfies it.
|
|
12
|
+
*/
|
|
13
|
+
interface HashlineResult {
|
|
14
|
+
readonly content: readonly unknown[];
|
|
15
|
+
}
|
|
16
|
+
interface TaggedLine {
|
|
17
|
+
readonly line: number;
|
|
18
|
+
readonly content: string;
|
|
19
|
+
readonly marker: TaggedLineMarker | undefined;
|
|
20
|
+
}
|
|
21
|
+
type PresentedLine = {
|
|
22
|
+
readonly type: 'file';
|
|
23
|
+
readonly path: string;
|
|
24
|
+
} | {
|
|
25
|
+
readonly type: 'tagged';
|
|
26
|
+
readonly value: TaggedLine;
|
|
27
|
+
} | {
|
|
28
|
+
readonly type: 'plain';
|
|
29
|
+
readonly text: string;
|
|
30
|
+
};
|
|
31
|
+
interface HashlineBody {
|
|
32
|
+
readonly shown: readonly PresentedLine[];
|
|
33
|
+
/** Lines the collapsed view holds back; zero once expanded. */
|
|
34
|
+
readonly hidden: number;
|
|
35
|
+
/** The bracketed pagination or compaction note the tool appends after its lines. */
|
|
36
|
+
readonly notice: string | undefined;
|
|
37
|
+
/** Widest line number among the shown anchored lines, in characters. */
|
|
38
|
+
readonly gutter: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* The result's text as lines: tabs widened, CRLF folded, trailing blanks
|
|
42
|
+
* dropped. A result with no text but an image block reads as the TUI's
|
|
43
|
+
* placeholder. The joined `output` stands in when no result view exists.
|
|
44
|
+
*/
|
|
45
|
+
declare function resultTextLines(result: HashlineResult | null, output: string): string[];
|
|
46
|
+
/** Detaches the tool's trailing `[...]` note so the body numbers file content only. */
|
|
47
|
+
declare function takeTrailingNotice(lines: string[]): string | undefined;
|
|
48
|
+
declare function parseTaggedLine(value: string): TaggedLine | undefined;
|
|
49
|
+
declare function parseFileHeader(value: string): string | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* Lines as the card presents them. A read shows one file, so its header is
|
|
52
|
+
* dropped; a grep groups anchored matches under each file's path.
|
|
53
|
+
*/
|
|
54
|
+
declare function presentHashlineLines(lines: readonly string[], kind: HashlineResultKind): PresentedLine[];
|
|
55
|
+
/** The body a card shows for one result, collapsed to the kind's line budget unless expanded. */
|
|
56
|
+
declare function hashlineBody(result: HashlineResult | null, output: string, kind: HashlineResultKind, expanded: boolean): HashlineBody;
|
|
57
|
+
/** The `key · key` detail list beside a call's primary argument, with absent values dropped. */
|
|
58
|
+
declare function compactDetails(values: ReadonlyArray<string | undefined>): string[];
|
|
59
|
+
//#endregion
|
|
60
|
+
export { GREP_COLLAPSED_LINES, HashlineBody, HashlineResult, HashlineResultKind, PresentedLine, READ_COLLAPSED_LINES, TaggedLine, TaggedLineMarker, compactDetails, hashlineBody, parseFileHeader, parseTaggedLine, presentHashlineLines, resultTextLines, takeTrailingNotice };
|
|
61
|
+
//# sourceMappingURL=hashlineView.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashlineView.d.mts","names":[],"sources":["../../../src/lib/hashlineView.ts"],"mappings":";cAoBa;cACA;KAED;KACA;;;;;;;;UASK;WACN;;UAGM;WACN;WACA;WACA,QAAQ;;KAGP;WACG;WAAuB;;WACvB;WAAyB,OAAO;;WAChC;WAAwB;;UAEtB;WACN,gBAAgB;;WAEhB;;WAEA;;WAEA;;;;;;;iBAiBK,gBAAgB,QAAQ,uBAAuB;;iBAa/C,mBAAmB;iBAQnB,gBAAgB,gBAAgB;iBAYhC,gBAAgB;;;;;iBAQhB,qBAAqB,0BAA0B,MAAM,qBAAqB;;iBAmB1E,aACd,QAAQ,uBACR,gBACA,MAAM,oBACN,oBACC;;iBAca,eAAe,QAAQ"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{collapseLines as e}from"./collapse.mjs";const t=/^@file (.+)#([A-Za-z0-9_-]{8})$/u,n=/^(>> | {3})?(\d+)#[a-z]{3}\|(.*)$/u,r=10,i=15;function a(e){return typeof e==`object`&&!!e&&typeof e.type==`string`}function o(e,t){let n=e?.content.filter(a)??[],r=e===null?t:n.flatMap(e=>e.type===`text`?[e.text??``]:[]).join(`
|
|
2
|
+
`);if(r.length===0)return n.some(e=>e.type===`image`)?[`[Image attached]`]:[];let i=r.replaceAll(` `,` `).replaceAll(`\r
|
|
3
|
+
`,`
|
|
4
|
+
`).split(`
|
|
5
|
+
`);for(;i.at(-1)===``;)i.pop();return i}function s(e){let t=e.at(-1);if(!(t===void 0||!t.startsWith(`[`)||!t.endsWith(`]`))){for(e.pop();e.at(-1)===``;)e.pop();return t}}function c(e){let t=n.exec(e),r=t?.[2],i=t?.[3];if(r===void 0||i===void 0)return;let a=Number.parseInt(r,10);if(!Number.isSafeInteger(a)||a<1)return;let o=t?.[1];return{line:a,content:i,marker:o===`>> `?`match`:o===` `?`context`:void 0}}function l(e){return t.exec(e)?.[1]}function u(e,t){let n=[];for(let r of e){let e=l(r);if(e!==void 0){t!==`read`&&n.push({type:`file`,path:e});continue}let i=c(r);if(i!==void 0){n.push({type:`tagged`,value:i});continue}n.push({type:`plain`,text:r})}return n}function d(t,n,r,i){let a=o(t,n),c=s(a),l=u(a,r),{shown:d,hidden:f}=e(l,r===`read`?10:15,i);return{shown:d,hidden:f,notice:c,gutter:d.reduce((e,t)=>t.type===`tagged`?Math.max(e,String(t.value.line).length):e,1)}}function f(e){return e.filter(e=>e!==void 0&&e.length>0)}export{i as GREP_COLLAPSED_LINES,r as READ_COLLAPSED_LINES,f as compactDetails,d as hashlineBody,l as parseFileHeader,c as parseTaggedLine,u as presentHashlineLines,o as resultTextLines,s as takeTrailingNotice};
|
|
6
|
+
//# sourceMappingURL=hashlineView.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hashlineView.mjs","names":[],"sources":["../../../src/lib/hashlineView.ts"],"sourcesContent":["import { collapseLines } from './collapse.ts';\n\n/**\n * The hashline wire format, parsed the way the TUI's hashlineRendering does:\n * `@file path#tag` opens a file, `N#abc|content` is an anchored line, and a\n * `>> ` or three-space prefix marks grep matches and their context.\n *\n * It lives here rather than in each tool package because the read and grep\n * cards render the same bytes and had drifted into byte-identical copies of\n * this module. The patterns are still a transcription of doompi-hashline: a\n * cockpit plugin may import this library and the web contract, but not a\n * runtime package, so the format is stated twice on purpose and only once per\n * side of that line.\n */\nconst FILE_HEADER_PATTERN = /^@file (.+)#([A-Za-z0-9_-]{8})$/u;\nconst TAGGED_LINE_PATTERN = /^(>> | {3})?(\\d+)#[a-z]{3}\\|(.*)$/u;\nconst MATCH_PREFIX = '>> ';\nconst CONTEXT_PREFIX = ' ';\nconst IMAGE_PLACEHOLDER = '[Image attached]';\n\nexport const READ_COLLAPSED_LINES = 10;\nexport const GREP_COLLAPSED_LINES = 15;\n\nexport type HashlineResultKind = 'read' | 'grep';\nexport type TaggedLineMarker = 'match' | 'context';\n\n/**\n * The part of a tool result this parser reads.\n *\n * Named structurally rather than imported: the component library sits below\n * the web contract and must not depend on it, so it states the shape it needs\n * and any `ToolResultView` satisfies it.\n */\nexport interface HashlineResult {\n readonly content: readonly unknown[];\n}\n\nexport interface TaggedLine {\n readonly line: number;\n readonly content: string;\n readonly marker: TaggedLineMarker | undefined;\n}\n\nexport type PresentedLine =\n | { readonly type: 'file'; readonly path: string }\n | { readonly type: 'tagged'; readonly value: TaggedLine }\n | { readonly type: 'plain'; readonly text: string };\n\nexport interface HashlineBody {\n readonly shown: readonly PresentedLine[];\n /** Lines the collapsed view holds back; zero once expanded. */\n readonly hidden: number;\n /** The bracketed pagination or compaction note the tool appends after its lines. */\n readonly notice: string | undefined;\n /** Widest line number among the shown anchored lines, in characters. */\n readonly gutter: number;\n}\n\ninterface TextBlock {\n readonly type: string;\n readonly text?: string;\n}\n\nfunction isTextBlock(block: unknown): block is TextBlock {\n return typeof block === 'object' && block !== null && typeof (block as TextBlock).type === 'string';\n}\n\n/**\n * The result's text as lines: tabs widened, CRLF folded, trailing blanks\n * dropped. A result with no text but an image block reads as the TUI's\n * placeholder. The joined `output` stands in when no result view exists.\n */\nexport function resultTextLines(result: HashlineResult | null, output: string): string[] {\n const blocks = result?.content.filter(isTextBlock) ?? [];\n const text =\n result === null ? output : blocks.flatMap((block) => (block.type === 'text' ? [block.text ?? ''] : [])).join('\\n');\n if (text.length === 0) {\n return blocks.some((block) => block.type === 'image') ? [IMAGE_PLACEHOLDER] : [];\n }\n const lines = text.replaceAll('\\t', ' ').replaceAll('\\r\\n', '\\n').split('\\n');\n while (lines.at(-1) === '') lines.pop();\n return lines;\n}\n\n/** Detaches the tool's trailing `[...]` note so the body numbers file content only. */\nexport function takeTrailingNotice(lines: string[]): string | undefined {\n const last = lines.at(-1);\n if (last === undefined || !last.startsWith('[') || !last.endsWith(']')) return undefined;\n lines.pop();\n while (lines.at(-1) === '') lines.pop();\n return last;\n}\n\nexport function parseTaggedLine(value: string): TaggedLine | undefined {\n const match = TAGGED_LINE_PATTERN.exec(value);\n const lineText = match?.[2];\n const content = match?.[3];\n if (lineText === undefined || content === undefined) return undefined;\n const line = Number.parseInt(lineText, 10);\n if (!Number.isSafeInteger(line) || line < 1) return undefined;\n const prefix = match?.[1];\n const marker = prefix === MATCH_PREFIX ? 'match' : prefix === CONTEXT_PREFIX ? 'context' : undefined;\n return { line, content, marker };\n}\n\nexport function parseFileHeader(value: string): string | undefined {\n return FILE_HEADER_PATTERN.exec(value)?.[1];\n}\n\n/**\n * Lines as the card presents them. A read shows one file, so its header is\n * dropped; a grep groups anchored matches under each file's path.\n */\nexport function presentHashlineLines(lines: readonly string[], kind: HashlineResultKind): PresentedLine[] {\n const presented: PresentedLine[] = [];\n for (const line of lines) {\n const path = parseFileHeader(line);\n if (path !== undefined) {\n if (kind !== 'read') presented.push({ type: 'file', path });\n continue;\n }\n const tagged = parseTaggedLine(line);\n if (tagged !== undefined) {\n presented.push({ type: 'tagged', value: tagged });\n continue;\n }\n presented.push({ type: 'plain', text: line });\n }\n return presented;\n}\n\n/** The body a card shows for one result, collapsed to the kind's line budget unless expanded. */\nexport function hashlineBody(\n result: HashlineResult | null,\n output: string,\n kind: HashlineResultKind,\n expanded: boolean,\n): HashlineBody {\n const lines = resultTextLines(result, output);\n const notice = takeTrailingNotice(lines);\n const presented = presentHashlineLines(lines, kind);\n const budget = kind === 'read' ? READ_COLLAPSED_LINES : GREP_COLLAPSED_LINES;\n const { shown, hidden } = collapseLines(presented, budget, expanded);\n const gutter = shown.reduce(\n (widest, line) => (line.type === 'tagged' ? Math.max(widest, String(line.value.line).length) : widest),\n 1,\n );\n return { shown, hidden, notice, gutter };\n}\n\n/** The `key · key` detail list beside a call's primary argument, with absent values dropped. */\nexport function compactDetails(values: ReadonlyArray<string | undefined>): string[] {\n return values.filter((value): value is string => value !== undefined && value.length > 0);\n}\n"],"mappings":"+CAcA,MAAM,EAAsB,mCACtB,EAAsB,qCAKf,EAAuB,GACvB,EAAuB,GA0CpC,SAAS,EAAY,EAAoC,CACvD,OAAO,OAAO,GAAU,YAAY,GAAkB,OAAQ,EAAoB,MAAS,QAC7F,CAOA,SAAgB,EAAgB,EAA+B,EAA0B,CACvF,IAAM,EAAS,GAAQ,QAAQ,OAAO,CAAW,GAAK,CAAC,EACjD,EACJ,IAAW,KAAO,EAAS,EAAO,QAAS,GAAW,EAAM,OAAS,OAAS,CAAC,EAAM,MAAQ,EAAE,EAAI,CAAC,CAAE,CAAC,CAAC,KAAK;CAAI,EACnH,GAAI,EAAK,SAAW,EAClB,OAAO,EAAO,KAAM,GAAU,EAAM,OAAS,OAAO,EAAI,CAAC,kBAAiB,EAAI,CAAC,EAEjF,IAAM,EAAQ,EAAK,WAAW,IAAM,IAAI,CAAC,CAAC,WAAW;EAAQ;CAAI,CAAC,CAAC,MAAM;CAAI,EAC7E,KAAO,EAAM,GAAG,EAAE,IAAM,IAAI,EAAM,IAAI,EACtC,OAAO,CACT,CAGA,SAAgB,EAAmB,EAAqC,CACtE,IAAM,EAAO,EAAM,GAAG,EAAE,EACpB,SAAS,IAAA,IAAa,CAAC,EAAK,WAAW,GAAG,GAAK,CAAC,EAAK,SAAS,GAAG,GAErE,KADA,EAAM,IAAI,EACH,EAAM,GAAG,EAAE,IAAM,IAAI,EAAM,IAAI,EACtC,OAAO,CAD+B,CAExC,CAEA,SAAgB,EAAgB,EAAuC,CACrE,IAAM,EAAQ,EAAoB,KAAK,CAAK,EACtC,EAAW,IAAQ,GACnB,EAAU,IAAQ,GACxB,GAAI,IAAa,IAAA,IAAa,IAAY,IAAA,GAAW,OACrD,IAAM,EAAO,OAAO,SAAS,EAAU,EAAE,EACzC,GAAI,CAAC,OAAO,cAAc,CAAI,GAAK,EAAO,EAAG,OAC7C,IAAM,EAAS,IAAQ,GAEvB,MAAO,CAAE,OAAM,UAAS,OADT,IAAW,MAAe,QAAU,IAAW,MAAiB,UAAY,IAAA,EAC5D,CACjC,CAEA,SAAgB,EAAgB,EAAmC,CACjE,OAAO,EAAoB,KAAK,CAAK,CAAC,GAAG,EAC3C,CAMA,SAAgB,EAAqB,EAA0B,EAA2C,CACxG,IAAM,EAA6B,CAAC,EACpC,IAAK,IAAM,KAAQ,EAAO,CACxB,IAAM,EAAO,EAAgB,CAAI,EACjC,GAAI,IAAS,IAAA,GAAW,CAClB,IAAS,QAAQ,EAAU,KAAK,CAAE,KAAM,OAAQ,MAAK,CAAC,EAC1D,QACF,CACA,IAAM,EAAS,EAAgB,CAAI,EACnC,GAAI,IAAW,IAAA,GAAW,CACxB,EAAU,KAAK,CAAE,KAAM,SAAU,MAAO,CAAO,CAAC,EAChD,QACF,CACA,EAAU,KAAK,CAAE,KAAM,QAAS,KAAM,CAAK,CAAC,CAC9C,CACA,OAAO,CACT,CAGA,SAAgB,EACd,EACA,EACA,EACA,EACc,CACd,IAAM,EAAQ,EAAgB,EAAQ,CAAM,EACtC,EAAS,EAAmB,CAAK,EACjC,EAAY,EAAqB,EAAO,CAAI,EAE5C,CAAE,QAAO,UAAW,EAAc,EADzB,IAAS,OAAA,GAAA,GACmC,CAAQ,EAKnE,MAAO,CAAE,QAAO,SAAQ,SAAQ,OAJjB,EAAM,QAClB,EAAQ,IAAU,EAAK,OAAS,SAAW,KAAK,IAAI,EAAQ,OAAO,EAAK,MAAM,IAAI,CAAC,CAAC,MAAM,EAAI,EAC/F,CAEmC,CAAE,CACzC,CAGA,SAAgB,EAAe,EAAqD,CAClF,OAAO,EAAO,OAAQ,GAA2B,IAAU,IAAA,IAAa,EAAM,OAAS,CAAC,CAC1F"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agimon-ai/doompi-web-components",
|
|
3
|
-
"version": "0.0.1-alpha.
|
|
3
|
+
"version": "0.0.1-alpha.6",
|
|
4
4
|
"description": "Shared web components and theme tokens for the DoomPi cockpit and its web plugins: shadcn-style primitives on Radix, tuned to the Doom palette, with runtime theme configs.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai",
|
|
@@ -74,23 +74,23 @@
|
|
|
74
74
|
"@lezer/highlight": "1.2.3",
|
|
75
75
|
"class-variance-authority": "0.7.1",
|
|
76
76
|
"clsx": "2.1.1",
|
|
77
|
-
"lucide-react": "1.
|
|
77
|
+
"lucide-react": "1.34.0",
|
|
78
78
|
"radix-ui": "1.6.7",
|
|
79
79
|
"react-markdown": "10.1.0",
|
|
80
80
|
"remark-gfm": "4.0.1",
|
|
81
81
|
"tailwind-merge": "3.6.0"
|
|
82
82
|
},
|
|
83
83
|
"devDependencies": {
|
|
84
|
-
"@types/node": "26.
|
|
85
|
-
"@types/react": "19.2.
|
|
86
|
-
"@types/react-dom": "19.2.
|
|
84
|
+
"@types/node": "26.4.0",
|
|
85
|
+
"@types/react": "19.2.18",
|
|
86
|
+
"@types/react-dom": "19.2.5",
|
|
87
87
|
"@vitest/coverage-v8": "4.1.11",
|
|
88
88
|
"react": "19.2.8",
|
|
89
89
|
"react-dom": "19.2.8",
|
|
90
90
|
"tsdown": "0.22.14",
|
|
91
91
|
"typescript": "7.0.2",
|
|
92
92
|
"vitest": "4.1.11",
|
|
93
|
-
"@agimon-ai/vibe-lint-plugin-doom-web": "0.0.1-alpha.
|
|
93
|
+
"@agimon-ai/vibe-lint-plugin-doom-web": "0.0.1-alpha.42"
|
|
94
94
|
},
|
|
95
95
|
"peerDependencies": {
|
|
96
96
|
"react": "^19.0.0",
|
package/styles/tokens.css
CHANGED
|
@@ -126,6 +126,8 @@
|
|
|
126
126
|
--animate-doom-pop: doom-pop 160ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
127
127
|
--animate-doom-rise: doom-rise 160ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
128
128
|
--animate-doom-blink: doom-blink 1s steps(2, start) infinite;
|
|
129
|
+
--animate-doom-slide-right: doom-slide-right 180ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
130
|
+
--animate-doom-slide-left: doom-slide-left 180ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
129
131
|
|
|
130
132
|
@keyframes doom-fade {
|
|
131
133
|
from {
|
|
@@ -155,6 +157,26 @@
|
|
|
155
157
|
transform: translateY(0);
|
|
156
158
|
}
|
|
157
159
|
}
|
|
160
|
+
@keyframes doom-slide-right {
|
|
161
|
+
from {
|
|
162
|
+
opacity: 0;
|
|
163
|
+
transform: translateX(16px);
|
|
164
|
+
}
|
|
165
|
+
to {
|
|
166
|
+
opacity: 1;
|
|
167
|
+
transform: translateX(0);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
@keyframes doom-slide-left {
|
|
171
|
+
from {
|
|
172
|
+
opacity: 0;
|
|
173
|
+
transform: translateX(-16px);
|
|
174
|
+
}
|
|
175
|
+
to {
|
|
176
|
+
opacity: 1;
|
|
177
|
+
transform: translateX(0);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
158
180
|
@keyframes doom-blink {
|
|
159
181
|
50% {
|
|
160
182
|
opacity: 0;
|