@mastra/playground-ui 35.0.0 → 35.1.0-alpha.1
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/CHANGELOG.md +86 -0
- package/dist/{code-block-C4Zp_ewI.cjs → code-block-BPI6hA9o.cjs} +2 -2
- package/dist/{code-block-C4Zp_ewI.cjs.map → code-block-BPI6hA9o.cjs.map} +1 -1
- package/dist/{code-block-CnRVTecy.js → code-block-BdjHwqE4.js} +2 -2
- package/dist/{code-block-CnRVTecy.js.map → code-block-BdjHwqE4.js.map} +1 -1
- package/dist/{code-editor-DuX_CPRv.js → code-editor-CxHGOvdY.js} +3 -3
- package/dist/{code-editor-DuX_CPRv.js.map → code-editor-CxHGOvdY.js.map} +1 -1
- package/dist/{code-editor-LhRB_wMh.cjs → code-editor-DVWPuq12.cjs} +3 -3
- package/dist/{code-editor-LhRB_wMh.cjs.map → code-editor-DVWPuq12.cjs.map} +1 -1
- package/dist/combobox-DQdRtI_v.cjs +245 -0
- package/dist/combobox-DQdRtI_v.cjs.map +1 -0
- package/dist/combobox-DvRTz5eL.js +223 -0
- package/dist/combobox-DvRTz5eL.js.map +1 -0
- package/dist/{command-DPEUOKZw.js → command-CkFCH229.js} +86 -43
- package/dist/command-CkFCH229.js.map +1 -0
- package/dist/{command-D0tQ1Lpz.cjs → command-EI7t_0WS.cjs} +86 -43
- package/dist/command-EI7t_0WS.cjs.map +1 -0
- package/dist/components/CodeBlock.cjs.js +1 -1
- package/dist/components/CodeBlock.es.js +1 -1
- package/dist/components/CodeEditor.cjs.js +1 -1
- package/dist/components/CodeEditor.es.js +1 -1
- package/dist/components/Columns.cjs.js +1 -1
- package/dist/components/Columns.es.js +1 -1
- package/dist/components/Combobox.cjs.js +2 -4
- package/dist/components/Combobox.cjs.js.map +1 -1
- package/dist/components/Combobox.es.js +1 -2
- package/dist/components/Combobox.es.js.map +1 -1
- package/dist/components/Command.cjs.js +1 -1
- package/dist/components/Command.es.js +1 -1
- package/dist/components/CopyButton.cjs.js +1 -1
- package/dist/components/CopyButton.es.js +1 -1
- package/dist/components/DataCodeSection.cjs.js +1 -1
- package/dist/components/DataCodeSection.es.js +1 -1
- package/dist/components/DataDetailsPanel.cjs.js +1 -1
- package/dist/components/DataDetailsPanel.es.js +1 -1
- package/dist/components/DataKeysAndValues.cjs.js +1 -1
- package/dist/components/DataKeysAndValues.es.js +1 -1
- package/dist/components/DataList.cjs.js +2 -2
- package/dist/components/DataList.es.js +2 -2
- package/dist/components/DataPanel.cjs.js +1 -1
- package/dist/components/DataPanel.es.js +1 -1
- package/dist/components/Dialog.cjs.js +1 -1
- package/dist/components/Dialog.es.js +1 -1
- package/dist/components/HorizontalBars.cjs.js +1 -1
- package/dist/components/HorizontalBars.es.js +1 -1
- package/dist/components/LogsDataList.cjs.js +2 -2
- package/dist/components/LogsDataList.es.js +2 -2
- package/dist/components/MainSidebar.cjs.js +1 -1
- package/dist/components/MainSidebar.es.js +1 -1
- package/dist/components/MarkdownRenderer.cjs.js +1 -1
- package/dist/components/MarkdownRenderer.es.js +1 -1
- package/dist/components/MetricsDataTable.cjs.js +1 -1
- package/dist/components/MetricsDataTable.es.js +1 -1
- package/dist/components/PropertyFilter.cjs.js +1 -1
- package/dist/components/PropertyFilter.es.js +1 -1
- package/dist/components/ScrollArea.cjs.js +1 -1
- package/dist/components/ScrollArea.es.js +1 -1
- package/dist/components/SideDialog.cjs.js +1 -1
- package/dist/components/SideDialog.es.js +1 -1
- package/dist/components/Truncate.cjs.js +1 -1
- package/dist/components/Truncate.es.js +1 -1
- package/dist/{copy-button-BfiqaCtC.js → copy-button-RffVknBA.js} +2 -2
- package/dist/{copy-button-BfiqaCtC.js.map → copy-button-RffVknBA.js.map} +1 -1
- package/dist/{copy-button-BaAuAgdC.cjs → copy-button-ler9dH8g.cjs} +3 -3
- package/dist/{copy-button-BaAuAgdC.cjs.map → copy-button-ler9dH8g.cjs.map} +1 -1
- package/dist/{data-code-section-MygZlpwo.js → data-code-section-BBBffVVs.js} +3 -3
- package/dist/{data-code-section-MygZlpwo.js.map → data-code-section-BBBffVVs.js.map} +1 -1
- package/dist/{data-code-section-BtFzBCox.cjs → data-code-section-ChVXPz-i.cjs} +3 -3
- package/dist/{data-code-section-BtFzBCox.cjs.map → data-code-section-ChVXPz-i.cjs.map} +1 -1
- package/dist/{data-keys-and-values-BSeQG7jb.js → data-keys-and-values-C3pzr_d1.js} +2 -2
- package/dist/{data-keys-and-values-BSeQG7jb.js.map → data-keys-and-values-C3pzr_d1.js.map} +1 -1
- package/dist/{data-keys-and-values-Spy2O_IE.cjs → data-keys-and-values-KIwfkmc7.cjs} +3 -3
- package/dist/{data-keys-and-values-Spy2O_IE.cjs.map → data-keys-and-values-KIwfkmc7.cjs.map} +1 -1
- package/dist/{data-list-skeleton-COjCBzBF.cjs → data-list-skeleton-BlOwAki1.cjs} +5 -15
- package/dist/data-list-skeleton-BlOwAki1.cjs.map +1 -0
- package/dist/{data-list-skeleton-DmAqHgws.js → data-list-skeleton-DD7ljjgS.js} +5 -15
- package/dist/data-list-skeleton-DD7ljjgS.js.map +1 -0
- package/dist/{data-panel-DToYF7cH.cjs → data-panel-DBxE_3ux.cjs} +2 -2
- package/dist/{data-panel-DToYF7cH.cjs.map → data-panel-DBxE_3ux.cjs.map} +1 -1
- package/dist/{data-panel-DumaHQiP.js → data-panel-DPVF9Yok.js} +2 -2
- package/dist/{data-panel-DumaHQiP.js.map → data-panel-DPVF9Yok.js.map} +1 -1
- package/dist/{dialog-46zkb32X.cjs → dialog-C0gOGKEK.cjs} +31 -29
- package/dist/dialog-C0gOGKEK.cjs.map +1 -0
- package/dist/{dialog-CSSfcjSX.js → dialog-DTLHod4X.js} +31 -29
- package/dist/dialog-DTLHod4X.js.map +1 -0
- package/dist/dialog.css +2 -2
- package/dist/hooks/use-autoscroll.cjs.js +110 -0
- package/dist/hooks/use-autoscroll.cjs.js.map +1 -0
- package/dist/hooks/use-autoscroll.d.ts +2 -0
- package/dist/hooks/use-autoscroll.es.js +106 -0
- package/dist/hooks/use-autoscroll.es.js.map +1 -0
- package/dist/hooks/use-copy-to-clipboard.cjs.js +11 -0
- package/dist/hooks/use-copy-to-clipboard.cjs.js.map +1 -0
- package/dist/hooks/use-copy-to-clipboard.d.ts +2 -0
- package/dist/hooks/use-copy-to-clipboard.es.js +3 -0
- package/dist/hooks/use-copy-to-clipboard.es.js.map +1 -0
- package/dist/hooks/use-in-view.cjs.js +22 -0
- package/dist/hooks/use-in-view.cjs.js.map +1 -0
- package/dist/hooks/use-in-view.d.ts +2 -0
- package/dist/hooks/use-in-view.es.js +18 -0
- package/dist/hooks/use-in-view.es.js.map +1 -0
- package/dist/hooks/use-is-mobile.cjs.js +21 -0
- package/dist/hooks/use-is-mobile.cjs.js.map +1 -0
- package/dist/hooks/use-is-mobile.d.ts +2 -0
- package/dist/hooks/use-is-mobile.es.js +17 -0
- package/dist/hooks/use-is-mobile.es.js.map +1 -0
- package/dist/hooks/use-keyboard-shortcut-label.cjs.js +29 -0
- package/dist/hooks/use-keyboard-shortcut-label.cjs.js.map +1 -0
- package/dist/hooks/use-keyboard-shortcut-label.d.ts +2 -0
- package/dist/hooks/use-keyboard-shortcut-label.es.js +24 -0
- package/dist/hooks/use-keyboard-shortcut-label.es.js.map +1 -0
- package/dist/{horizontal-bars-DjLETHvH.js → horizontal-bars-r1aEIHUc.js} +2 -2
- package/dist/{horizontal-bars-DjLETHvH.js.map → horizontal-bars-r1aEIHUc.js.map} +1 -1
- package/dist/{horizontal-bars-C9qp4r47.cjs → horizontal-bars-uPFpgihX.cjs} +2 -2
- package/dist/{horizontal-bars-C9qp4r47.cjs.map → horizontal-bars-uPFpgihX.cjs.map} +1 -1
- package/dist/index.cjs.js +88 -79
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.css +55 -30
- package/dist/index.es.js +72 -69
- package/dist/index.es.js.map +1 -1
- package/dist/{logs-data-list-kzBMv1MW.cjs → logs-data-list-3qmFjBz8.cjs} +2 -2
- package/dist/{logs-data-list-kzBMv1MW.cjs.map → logs-data-list-3qmFjBz8.cjs.map} +1 -1
- package/dist/{logs-data-list-Bkf7oWlx.js → logs-data-list-Dh6c7URj.js} +2 -2
- package/dist/{logs-data-list-Bkf7oWlx.js.map → logs-data-list-Dh6c7URj.js.map} +1 -1
- package/dist/{main-sidebar-Djs_3tGw.cjs → main-sidebar-ByHmwU4R.cjs} +6 -5
- package/dist/main-sidebar-ByHmwU4R.cjs.map +1 -0
- package/dist/{main-sidebar-1GVDTtcD.js → main-sidebar-DJSorgYQ.js} +6 -5
- package/dist/main-sidebar-DJSorgYQ.js.map +1 -0
- package/dist/{markdown-renderer-DyUlVfRt.cjs → markdown-renderer-Dyg_1QXx.cjs} +2 -2
- package/dist/{markdown-renderer-DyUlVfRt.cjs.map → markdown-renderer-Dyg_1QXx.cjs.map} +1 -1
- package/dist/{markdown-renderer-BYSrmn0E.js → markdown-renderer-QftQuP4g.js} +2 -2
- package/dist/{markdown-renderer-BYSrmn0E.js.map → markdown-renderer-QftQuP4g.js.map} +1 -1
- package/dist/{metrics-data-table-D7vx2WEJ.cjs → metrics-data-table-AjAA-dqH.cjs} +2 -2
- package/dist/{metrics-data-table-D7vx2WEJ.cjs.map → metrics-data-table-AjAA-dqH.cjs.map} +1 -1
- package/dist/{metrics-data-table-DryqJWoI.js → metrics-data-table-hSmtDNck.js} +2 -2
- package/dist/{metrics-data-table-DryqJWoI.js.map → metrics-data-table-hSmtDNck.js.map} +1 -1
- package/dist/{multi-column-BzL86JPK.cjs → multi-column-BLRjYB5N.cjs} +3 -2
- package/dist/{multi-column-BzL86JPK.cjs.map → multi-column-BLRjYB5N.cjs.map} +1 -1
- package/dist/{multi-column-C1sXoVG3.js → multi-column-e_-j_rrO.js} +3 -2
- package/dist/{multi-column-C1sXoVG3.js.map → multi-column-e_-j_rrO.js.map} +1 -1
- package/dist/{property-filter-creator-DU8pl6-6.cjs → property-filter-creator-CaG_zPdy.cjs} +4 -3
- package/dist/property-filter-creator-CaG_zPdy.cjs.map +1 -0
- package/dist/{property-filter-creator-B9tK0VY3.js → property-filter-creator-Cl9E6wxf.js} +4 -3
- package/dist/property-filter-creator-Cl9E6wxf.js.map +1 -0
- package/dist/scroll-area-BtcyzOxO.cjs +243 -0
- package/dist/scroll-area-BtcyzOxO.cjs.map +1 -0
- package/dist/scroll-area-DjZ6nTm5.js +221 -0
- package/dist/scroll-area-DjZ6nTm5.js.map +1 -0
- package/dist/src/ds/components/Combobox/combobox-styles.d.ts +5 -12
- package/dist/src/ds/components/Combobox/combobox.d.ts +13 -4
- package/dist/src/ds/components/Combobox/combobox.stories.d.ts +1 -0
- package/dist/src/ds/components/Combobox/index.d.ts +0 -1
- package/dist/src/ds/components/Command/command.d.ts +5 -1
- package/dist/src/ds/components/Command/command.stories.d.ts +1 -0
- package/dist/src/ds/components/DataList/data-list-root.d.ts +3 -4
- package/dist/src/ds/components/Dialog/dialog.d.ts +2 -0
- package/dist/src/ds/components/MainSidebar/main-sidebar-nav-item-classes.d.ts +12 -0
- package/dist/src/ds/components/MainSidebar/main-sidebar-nav-link.d.ts +0 -13
- package/dist/src/ds/components/MainSidebar/main-sidebar.d.ts +2 -1
- package/dist/src/ds/components/ScrollArea/scroll-area.d.ts +12 -0
- package/dist/src/ds/components/ScrollArea/scroll-area.stories.d.ts +2 -0
- package/dist/src/hooks/use-copy-to-clipboard.d.ts +9 -1
- package/dist/src/hooks/use-keyboard-shortcut-label.d.ts +2 -0
- package/dist/src/index.d.ts +1 -1
- package/dist/src/lib/file/index.d.ts +1 -0
- package/dist/src/lib/file/schemes.d.ts +26 -0
- package/dist/{traces-data-list-BPTKzaN6.cjs → traces-data-list-BNmnKyDD.cjs} +8 -3
- package/dist/traces-data-list-BNmnKyDD.cjs.map +1 -0
- package/dist/{traces-data-list-CB7frfpp.js → traces-data-list-DRyI45Ke.js} +8 -3
- package/dist/traces-data-list-DRyI45Ke.js.map +1 -0
- package/dist/{truncate-C9bKR_02.js → truncate-B8_8wx-G.js} +2 -2
- package/dist/{truncate-C9bKR_02.js.map → truncate-B8_8wx-G.js.map} +1 -1
- package/dist/{truncate-RL2aHd1a.cjs → truncate-Csk5KmAy.cjs} +2 -2
- package/dist/{truncate-RL2aHd1a.cjs.map → truncate-Csk5KmAy.cjs.map} +1 -1
- package/dist/use-copy-to-clipboard-D7L_l6_x.js +127 -0
- package/dist/use-copy-to-clipboard-D7L_l6_x.js.map +1 -0
- package/dist/use-copy-to-clipboard-DHaJCGet.cjs +131 -0
- package/dist/use-copy-to-clipboard-DHaJCGet.cjs.map +1 -0
- package/package.json +12 -6
- package/dist/combobox-B2TriE9Z.cjs +0 -77
- package/dist/combobox-B2TriE9Z.cjs.map +0 -1
- package/dist/combobox-q2xPfCZc.js +0 -75
- package/dist/combobox-q2xPfCZc.js.map +0 -1
- package/dist/command-D0tQ1Lpz.cjs.map +0 -1
- package/dist/command-DPEUOKZw.js.map +0 -1
- package/dist/components/ScrollableContainer.cjs.js +0 -10
- package/dist/components/ScrollableContainer.cjs.js.map +0 -1
- package/dist/components/ScrollableContainer.d.ts +0 -2
- package/dist/components/ScrollableContainer.es.js +0 -2
- package/dist/components/ScrollableContainer.es.js.map +0 -1
- package/dist/data-list-skeleton-COjCBzBF.cjs.map +0 -1
- package/dist/data-list-skeleton-DmAqHgws.js.map +0 -1
- package/dist/dialog-46zkb32X.cjs.map +0 -1
- package/dist/dialog-CSSfcjSX.js.map +0 -1
- package/dist/main-sidebar-1GVDTtcD.js.map +0 -1
- package/dist/main-sidebar-Djs_3tGw.cjs.map +0 -1
- package/dist/multi-combobox-DkFLK64B.cjs +0 -193
- package/dist/multi-combobox-DkFLK64B.cjs.map +0 -1
- package/dist/multi-combobox-Y3gT0MqV.js +0 -189
- package/dist/multi-combobox-Y3gT0MqV.js.map +0 -1
- package/dist/property-filter-creator-B9tK0VY3.js.map +0 -1
- package/dist/property-filter-creator-DU8pl6-6.cjs.map +0 -1
- package/dist/scroll-area-BqJfcT94.cjs +0 -230
- package/dist/scroll-area-BqJfcT94.cjs.map +0 -1
- package/dist/scroll-area-BtDqmqBK.js +0 -208
- package/dist/scroll-area-BtDqmqBK.js.map +0 -1
- package/dist/scrollable-container-BqOFHwdb.js +0 -151
- package/dist/scrollable-container-BqOFHwdb.js.map +0 -1
- package/dist/scrollable-container-Btq-TfCL.cjs +0 -153
- package/dist/scrollable-container-Btq-TfCL.cjs.map +0 -1
- package/dist/src/ds/components/Combobox/multi-combobox.d.ts +0 -22
- package/dist/src/ds/components/ScrollableContainer/index.d.ts +0 -1
- package/dist/src/ds/components/ScrollableContainer/scrollable-container.d.ts +0 -8
- package/dist/src/ds/components/ScrollableContainer/scrollable-container.stories.d.ts +0 -10
- package/dist/traces-data-list-BPTKzaN6.cjs.map +0 -1
- package/dist/traces-data-list-CB7frfpp.js.map +0 -1
- package/dist/use-copy-to-clipboard-CGqfkXnN.js +0 -73
- package/dist/use-copy-to-clipboard-CGqfkXnN.js.map +0 -1
- package/dist/use-copy-to-clipboard-CQgIuR1c.cjs +0 -77
- package/dist/use-copy-to-clipboard-CQgIuR1c.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dialog-DTLHod4X.js","sources":["../src/ds/components/Dialog/dialog.tsx"],"sourcesContent":["import { Dialog as DialogPrimitive } from '@base-ui/react/dialog';\nimport { X } from 'lucide-react';\nimport * as React from 'react';\n\nimport { Button } from '@/ds/components/Button';\nimport { asChildRenderProps } from '@/lib/as-child';\nimport { cn } from '@/lib/utils';\n\nimport './dialog.css';\n\nconst Dialog = DialogPrimitive.Root;\n\ntype DialogTriggerProps = DialogPrimitive.Trigger.Props & {\n /** @deprecated Use Base UI's `render` prop instead, e.g. `render={<Button />}`. */\n asChild?: boolean;\n};\n\nconst DialogTrigger = React.forwardRef<HTMLButtonElement, DialogTriggerProps>(\n ({ asChild, children, ...props }, ref) => {\n return (\n <DialogPrimitive.Trigger ref={ref} {...asChildRenderProps(asChild, children)} {...props}>\n {asChild ? undefined : children}\n </DialogPrimitive.Trigger>\n );\n },\n);\nDialogTrigger.displayName = 'DialogTrigger';\n\nconst DialogPortal = DialogPrimitive.Portal;\n\ntype DialogCloseProps = DialogPrimitive.Close.Props & {\n /** @deprecated Use Base UI's `render` prop instead, e.g. `render={<Button />}`. */\n asChild?: boolean;\n};\n\nconst DialogClose = React.forwardRef<HTMLButtonElement, DialogCloseProps>(({ asChild, children, ...props }, ref) => {\n return (\n <DialogPrimitive.Close ref={ref} {...asChildRenderProps(asChild, children)} {...props}>\n {asChild ? undefined : children}\n </DialogPrimitive.Close>\n );\n});\nDialogClose.displayName = 'DialogClose';\n\ntype DialogOverlayProps = Omit<DialogPrimitive.Backdrop.Props, 'className'> & {\n className?: string;\n};\n\nconst DialogOverlay = React.forwardRef<HTMLDivElement, DialogOverlayProps>(({ className, ...props }, ref) => (\n <DialogPrimitive.Backdrop\n ref={ref}\n className={cn('dialog-overlay-anim fixed inset-0 z-50 bg-overlay backdrop-blur-xs', className)}\n {...props}\n />\n));\nDialogOverlay.displayName = 'DialogOverlay';\n\ntype DialogContentProps = Omit<DialogPrimitive.Popup.Props, 'className'> & {\n className?: string;\n showOverlay?: boolean;\n overlayClassName?: string;\n};\n\nconst DialogContent = React.forwardRef<HTMLDivElement, DialogContentProps>(\n ({ className, children, showOverlay = true, overlayClassName, ...props }, ref) => (\n <DialogPortal>\n {showOverlay && <DialogOverlay className={overlayClassName} />}\n <DialogPrimitive.Popup\n ref={ref}\n data-slot=\"dialog-content\"\n className={cn(\n 'dialog-content-anim',\n 'fixed left-[50%] top-[50%] z-50 grid translate-x-[-50%] translate-y-[-50%]',\n 'w-full max-w-[calc(100%-2rem)] sm:max-w-lg',\n 'rounded-xl border border-border1/40 bg-surface2/96 backdrop-blur-md shadow-dialog',\n 'focus-visible:outline-hidden',\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n render={\n <Button variant=\"ghost\" size=\"sm\" className=\"absolute top-3 right-3\" aria-label=\"Close\">\n <X />\n </Button>\n }\n />\n </DialogPrimitive.Popup>\n </DialogPortal>\n ),\n);\nDialogContent.displayName = 'DialogContent';\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col gap-0.5 px-4 py-3 text-left', className)} {...props} />\n);\nDialogHeader.displayName = 'DialogHeader';\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col-reverse gap-1.5 px-4 py-2.5 sm:flex-row sm:justify-end', className)} {...props} />\n);\nDialogFooter.displayName = 'DialogFooter';\n\nconst DialogBody = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('overflow-y-auto px-4 py-3.5 max-h-[50vh]', className)} {...props} />\n);\nDialogBody.displayName = 'DialogBody';\n\ntype DialogTitleProps = Omit<DialogPrimitive.Title.Props, 'className'> & {\n className?: string;\n};\n\nconst DialogTitle = React.forwardRef<HTMLHeadingElement, DialogTitleProps>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title ref={ref} className={cn('text-ui-md font-medium', className)} {...props} />\n));\nDialogTitle.displayName = 'DialogTitle';\n\ntype DialogDescriptionProps = Omit<DialogPrimitive.Description.Props, 'className'> & {\n className?: string;\n};\n\nconst DialogDescription = React.forwardRef<HTMLParagraphElement, DialogDescriptionProps>(\n ({ className, ...props }, ref) => (\n <DialogPrimitive.Description ref={ref} className={cn('sr-only', className)} {...props} />\n ),\n);\nDialogDescription.displayName = 'DialogDescription';\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogBody,\n DialogTitle,\n DialogDescription,\n};\n"],"names":["DialogPrimitive"],"mappings":"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"}
|
package/dist/dialog.css
CHANGED
|
@@ -51,12 +51,12 @@
|
|
|
51
51
|
|
|
52
52
|
.dialog-overlay-anim[data-state='open'],
|
|
53
53
|
.dialog-overlay-anim[data-open] {
|
|
54
|
-
animation: dialog-overlay-in 320ms cubic-bezier(0.22, 1, 0.36, 1);
|
|
54
|
+
animation: dialog-overlay-in 320ms cubic-bezier(0.22, 1, 0.36, 1) both;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
.dialog-overlay-anim[data-state='closed'],
|
|
58
58
|
.dialog-overlay-anim[data-closed] {
|
|
59
|
-
animation: dialog-overlay-out 240ms cubic-bezier(0.32, 0, 0.67, 0);
|
|
59
|
+
animation: dialog-overlay-out 240ms cubic-bezier(0.32, 0, 0.67, 0) both;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
.dialog-content-anim[data-state='open'],
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const React = require('react');
|
|
6
|
+
|
|
7
|
+
const SCROLL_END_THRESHOLD = 8;
|
|
8
|
+
const useAutoscroll = (ref, { enabled = true }) => {
|
|
9
|
+
const shouldScrollRef = React.useRef(enabled);
|
|
10
|
+
const scrollFrameRef = React.useRef(null);
|
|
11
|
+
const userScrollIntentRef = React.useRef(false);
|
|
12
|
+
const userScrollIntentTimeoutRef = React.useRef(null);
|
|
13
|
+
React.useEffect(() => {
|
|
14
|
+
if (!enabled) return;
|
|
15
|
+
if (!ref?.current) return;
|
|
16
|
+
const area = ref.current;
|
|
17
|
+
const scrollToEnd = () => {
|
|
18
|
+
if (!shouldScrollRef.current) return;
|
|
19
|
+
if (scrollFrameRef.current !== null) {
|
|
20
|
+
cancelAnimationFrame(scrollFrameRef.current);
|
|
21
|
+
}
|
|
22
|
+
scrollFrameRef.current = requestAnimationFrame(() => {
|
|
23
|
+
if (shouldScrollRef.current) {
|
|
24
|
+
area.scrollTop = area.scrollHeight;
|
|
25
|
+
}
|
|
26
|
+
scrollFrameRef.current = null;
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
const mutationObserver = new MutationObserver(scrollToEnd);
|
|
30
|
+
mutationObserver.observe(area, {
|
|
31
|
+
childList: true,
|
|
32
|
+
// observe direct children changes
|
|
33
|
+
subtree: true,
|
|
34
|
+
// observe all descendants
|
|
35
|
+
characterData: true
|
|
36
|
+
// observe text content changes
|
|
37
|
+
});
|
|
38
|
+
const resizeObserver = new ResizeObserver(scrollToEnd);
|
|
39
|
+
resizeObserver.observe(area);
|
|
40
|
+
const cancelPendingScroll = () => {
|
|
41
|
+
if (scrollFrameRef.current !== null) {
|
|
42
|
+
cancelAnimationFrame(scrollFrameRef.current);
|
|
43
|
+
scrollFrameRef.current = null;
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const stopFollowing = () => {
|
|
47
|
+
shouldScrollRef.current = false;
|
|
48
|
+
cancelPendingScroll();
|
|
49
|
+
};
|
|
50
|
+
const registerUserScrollIntent = () => {
|
|
51
|
+
userScrollIntentRef.current = true;
|
|
52
|
+
if (userScrollIntentTimeoutRef.current !== null) {
|
|
53
|
+
window.clearTimeout(userScrollIntentTimeoutRef.current);
|
|
54
|
+
}
|
|
55
|
+
userScrollIntentTimeoutRef.current = window.setTimeout(() => {
|
|
56
|
+
userScrollIntentRef.current = false;
|
|
57
|
+
userScrollIntentTimeoutRef.current = null;
|
|
58
|
+
}, 250);
|
|
59
|
+
};
|
|
60
|
+
const handleWheel = (event) => {
|
|
61
|
+
registerUserScrollIntent();
|
|
62
|
+
if (event.deltaY < 0) {
|
|
63
|
+
stopFollowing();
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
const handleKeyDown = (event) => {
|
|
67
|
+
registerUserScrollIntent();
|
|
68
|
+
if (["ArrowUp", "PageUp", "Home"].includes(event.key)) {
|
|
69
|
+
stopFollowing();
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
const handleScroll = (e) => {
|
|
73
|
+
const scrollElement = e.target;
|
|
74
|
+
const currentPosition = scrollElement.scrollTop + scrollElement.clientHeight;
|
|
75
|
+
const totalHeight = scrollElement.scrollHeight;
|
|
76
|
+
const isAtEnd = currentPosition >= totalHeight - SCROLL_END_THRESHOLD;
|
|
77
|
+
if (isAtEnd) {
|
|
78
|
+
shouldScrollRef.current = true;
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (userScrollIntentRef.current) {
|
|
82
|
+
shouldScrollRef.current = false;
|
|
83
|
+
cancelPendingScroll();
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
area.addEventListener("wheel", handleWheel, { passive: true });
|
|
87
|
+
area.addEventListener("touchmove", registerUserScrollIntent, { passive: true });
|
|
88
|
+
area.addEventListener("pointerdown", registerUserScrollIntent);
|
|
89
|
+
area.addEventListener("keydown", handleKeyDown);
|
|
90
|
+
area.addEventListener("scroll", handleScroll);
|
|
91
|
+
scrollToEnd();
|
|
92
|
+
return () => {
|
|
93
|
+
area.removeEventListener("wheel", handleWheel);
|
|
94
|
+
area.removeEventListener("touchmove", registerUserScrollIntent);
|
|
95
|
+
area.removeEventListener("pointerdown", registerUserScrollIntent);
|
|
96
|
+
area.removeEventListener("keydown", handleKeyDown);
|
|
97
|
+
area.removeEventListener("scroll", handleScroll);
|
|
98
|
+
mutationObserver.disconnect();
|
|
99
|
+
resizeObserver.disconnect();
|
|
100
|
+
cancelPendingScroll();
|
|
101
|
+
if (userScrollIntentTimeoutRef.current !== null) {
|
|
102
|
+
window.clearTimeout(userScrollIntentTimeoutRef.current);
|
|
103
|
+
userScrollIntentTimeoutRef.current = null;
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
}, [enabled, ref]);
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
exports.useAutoscroll = useAutoscroll;
|
|
110
|
+
//# sourceMappingURL=use-autoscroll.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-autoscroll.cjs.js","sources":["../../src/hooks/use-autoscroll.tsx"],"sourcesContent":["import React, { useRef } from 'react';\n\nexport interface UseAutoscrollOptions {\n enabled?: boolean;\n}\n\nconst SCROLL_END_THRESHOLD = 8;\n\nexport const useAutoscroll = (ref: React.RefObject<HTMLElement | null>, { enabled = true }: UseAutoscrollOptions) => {\n const shouldScrollRef = useRef(enabled);\n const scrollFrameRef = useRef<number | null>(null);\n const userScrollIntentRef = useRef(false);\n const userScrollIntentTimeoutRef = useRef<number | null>(null);\n\n React.useEffect(() => {\n if (!enabled) return;\n if (!ref?.current) return;\n\n const area = ref.current;\n\n const scrollToEnd = () => {\n if (!shouldScrollRef.current) return;\n\n if (scrollFrameRef.current !== null) {\n cancelAnimationFrame(scrollFrameRef.current);\n }\n\n scrollFrameRef.current = requestAnimationFrame(() => {\n if (shouldScrollRef.current) {\n area.scrollTop = area.scrollHeight;\n }\n scrollFrameRef.current = null;\n });\n };\n\n const mutationObserver = new MutationObserver(scrollToEnd);\n\n mutationObserver.observe(area, {\n childList: true, // observe direct children changes\n subtree: true, // observe all descendants\n characterData: true, // observe text content changes\n });\n\n const resizeObserver = new ResizeObserver(scrollToEnd);\n resizeObserver.observe(area);\n\n const cancelPendingScroll = () => {\n if (scrollFrameRef.current !== null) {\n cancelAnimationFrame(scrollFrameRef.current);\n scrollFrameRef.current = null;\n }\n };\n\n const stopFollowing = () => {\n shouldScrollRef.current = false;\n cancelPendingScroll();\n };\n\n const registerUserScrollIntent = () => {\n userScrollIntentRef.current = true;\n\n if (userScrollIntentTimeoutRef.current !== null) {\n window.clearTimeout(userScrollIntentTimeoutRef.current);\n }\n\n userScrollIntentTimeoutRef.current = window.setTimeout(() => {\n userScrollIntentRef.current = false;\n userScrollIntentTimeoutRef.current = null;\n }, 250);\n };\n\n const handleWheel = (event: WheelEvent) => {\n registerUserScrollIntent();\n\n if (event.deltaY < 0) {\n stopFollowing();\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n registerUserScrollIntent();\n\n if (['ArrowUp', 'PageUp', 'Home'].includes(event.key)) {\n stopFollowing();\n }\n };\n\n const handleScroll = (e: Event) => {\n const scrollElement = e.target as HTMLElement;\n const currentPosition = scrollElement.scrollTop + scrollElement.clientHeight;\n const totalHeight = scrollElement.scrollHeight;\n const isAtEnd = currentPosition >= totalHeight - SCROLL_END_THRESHOLD;\n\n if (isAtEnd) {\n shouldScrollRef.current = true;\n return;\n }\n\n if (userScrollIntentRef.current) {\n shouldScrollRef.current = false;\n cancelPendingScroll();\n }\n };\n\n area.addEventListener('wheel', handleWheel, { passive: true });\n area.addEventListener('touchmove', registerUserScrollIntent, { passive: true });\n area.addEventListener('pointerdown', registerUserScrollIntent);\n area.addEventListener('keydown', handleKeyDown);\n area.addEventListener('scroll', handleScroll);\n scrollToEnd();\n\n return () => {\n area.removeEventListener('wheel', handleWheel);\n area.removeEventListener('touchmove', registerUserScrollIntent);\n area.removeEventListener('pointerdown', registerUserScrollIntent);\n area.removeEventListener('keydown', handleKeyDown);\n area.removeEventListener('scroll', handleScroll);\n mutationObserver.disconnect();\n resizeObserver.disconnect();\n cancelPendingScroll();\n\n if (userScrollIntentTimeoutRef.current !== null) {\n window.clearTimeout(userScrollIntentTimeoutRef.current);\n userScrollIntentTimeoutRef.current = null;\n }\n };\n }, [enabled, ref]);\n};\n"],"names":["useRef"],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import React__default, { useRef } from 'react';
|
|
2
|
+
|
|
3
|
+
const SCROLL_END_THRESHOLD = 8;
|
|
4
|
+
const useAutoscroll = (ref, { enabled = true }) => {
|
|
5
|
+
const shouldScrollRef = useRef(enabled);
|
|
6
|
+
const scrollFrameRef = useRef(null);
|
|
7
|
+
const userScrollIntentRef = useRef(false);
|
|
8
|
+
const userScrollIntentTimeoutRef = useRef(null);
|
|
9
|
+
React__default.useEffect(() => {
|
|
10
|
+
if (!enabled) return;
|
|
11
|
+
if (!ref?.current) return;
|
|
12
|
+
const area = ref.current;
|
|
13
|
+
const scrollToEnd = () => {
|
|
14
|
+
if (!shouldScrollRef.current) return;
|
|
15
|
+
if (scrollFrameRef.current !== null) {
|
|
16
|
+
cancelAnimationFrame(scrollFrameRef.current);
|
|
17
|
+
}
|
|
18
|
+
scrollFrameRef.current = requestAnimationFrame(() => {
|
|
19
|
+
if (shouldScrollRef.current) {
|
|
20
|
+
area.scrollTop = area.scrollHeight;
|
|
21
|
+
}
|
|
22
|
+
scrollFrameRef.current = null;
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
const mutationObserver = new MutationObserver(scrollToEnd);
|
|
26
|
+
mutationObserver.observe(area, {
|
|
27
|
+
childList: true,
|
|
28
|
+
// observe direct children changes
|
|
29
|
+
subtree: true,
|
|
30
|
+
// observe all descendants
|
|
31
|
+
characterData: true
|
|
32
|
+
// observe text content changes
|
|
33
|
+
});
|
|
34
|
+
const resizeObserver = new ResizeObserver(scrollToEnd);
|
|
35
|
+
resizeObserver.observe(area);
|
|
36
|
+
const cancelPendingScroll = () => {
|
|
37
|
+
if (scrollFrameRef.current !== null) {
|
|
38
|
+
cancelAnimationFrame(scrollFrameRef.current);
|
|
39
|
+
scrollFrameRef.current = null;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
const stopFollowing = () => {
|
|
43
|
+
shouldScrollRef.current = false;
|
|
44
|
+
cancelPendingScroll();
|
|
45
|
+
};
|
|
46
|
+
const registerUserScrollIntent = () => {
|
|
47
|
+
userScrollIntentRef.current = true;
|
|
48
|
+
if (userScrollIntentTimeoutRef.current !== null) {
|
|
49
|
+
window.clearTimeout(userScrollIntentTimeoutRef.current);
|
|
50
|
+
}
|
|
51
|
+
userScrollIntentTimeoutRef.current = window.setTimeout(() => {
|
|
52
|
+
userScrollIntentRef.current = false;
|
|
53
|
+
userScrollIntentTimeoutRef.current = null;
|
|
54
|
+
}, 250);
|
|
55
|
+
};
|
|
56
|
+
const handleWheel = (event) => {
|
|
57
|
+
registerUserScrollIntent();
|
|
58
|
+
if (event.deltaY < 0) {
|
|
59
|
+
stopFollowing();
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
const handleKeyDown = (event) => {
|
|
63
|
+
registerUserScrollIntent();
|
|
64
|
+
if (["ArrowUp", "PageUp", "Home"].includes(event.key)) {
|
|
65
|
+
stopFollowing();
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
const handleScroll = (e) => {
|
|
69
|
+
const scrollElement = e.target;
|
|
70
|
+
const currentPosition = scrollElement.scrollTop + scrollElement.clientHeight;
|
|
71
|
+
const totalHeight = scrollElement.scrollHeight;
|
|
72
|
+
const isAtEnd = currentPosition >= totalHeight - SCROLL_END_THRESHOLD;
|
|
73
|
+
if (isAtEnd) {
|
|
74
|
+
shouldScrollRef.current = true;
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (userScrollIntentRef.current) {
|
|
78
|
+
shouldScrollRef.current = false;
|
|
79
|
+
cancelPendingScroll();
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
area.addEventListener("wheel", handleWheel, { passive: true });
|
|
83
|
+
area.addEventListener("touchmove", registerUserScrollIntent, { passive: true });
|
|
84
|
+
area.addEventListener("pointerdown", registerUserScrollIntent);
|
|
85
|
+
area.addEventListener("keydown", handleKeyDown);
|
|
86
|
+
area.addEventListener("scroll", handleScroll);
|
|
87
|
+
scrollToEnd();
|
|
88
|
+
return () => {
|
|
89
|
+
area.removeEventListener("wheel", handleWheel);
|
|
90
|
+
area.removeEventListener("touchmove", registerUserScrollIntent);
|
|
91
|
+
area.removeEventListener("pointerdown", registerUserScrollIntent);
|
|
92
|
+
area.removeEventListener("keydown", handleKeyDown);
|
|
93
|
+
area.removeEventListener("scroll", handleScroll);
|
|
94
|
+
mutationObserver.disconnect();
|
|
95
|
+
resizeObserver.disconnect();
|
|
96
|
+
cancelPendingScroll();
|
|
97
|
+
if (userScrollIntentTimeoutRef.current !== null) {
|
|
98
|
+
window.clearTimeout(userScrollIntentTimeoutRef.current);
|
|
99
|
+
userScrollIntentTimeoutRef.current = null;
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
}, [enabled, ref]);
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
export { useAutoscroll };
|
|
106
|
+
//# sourceMappingURL=use-autoscroll.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-autoscroll.es.js","sources":["../../src/hooks/use-autoscroll.tsx"],"sourcesContent":["import React, { useRef } from 'react';\n\nexport interface UseAutoscrollOptions {\n enabled?: boolean;\n}\n\nconst SCROLL_END_THRESHOLD = 8;\n\nexport const useAutoscroll = (ref: React.RefObject<HTMLElement | null>, { enabled = true }: UseAutoscrollOptions) => {\n const shouldScrollRef = useRef(enabled);\n const scrollFrameRef = useRef<number | null>(null);\n const userScrollIntentRef = useRef(false);\n const userScrollIntentTimeoutRef = useRef<number | null>(null);\n\n React.useEffect(() => {\n if (!enabled) return;\n if (!ref?.current) return;\n\n const area = ref.current;\n\n const scrollToEnd = () => {\n if (!shouldScrollRef.current) return;\n\n if (scrollFrameRef.current !== null) {\n cancelAnimationFrame(scrollFrameRef.current);\n }\n\n scrollFrameRef.current = requestAnimationFrame(() => {\n if (shouldScrollRef.current) {\n area.scrollTop = area.scrollHeight;\n }\n scrollFrameRef.current = null;\n });\n };\n\n const mutationObserver = new MutationObserver(scrollToEnd);\n\n mutationObserver.observe(area, {\n childList: true, // observe direct children changes\n subtree: true, // observe all descendants\n characterData: true, // observe text content changes\n });\n\n const resizeObserver = new ResizeObserver(scrollToEnd);\n resizeObserver.observe(area);\n\n const cancelPendingScroll = () => {\n if (scrollFrameRef.current !== null) {\n cancelAnimationFrame(scrollFrameRef.current);\n scrollFrameRef.current = null;\n }\n };\n\n const stopFollowing = () => {\n shouldScrollRef.current = false;\n cancelPendingScroll();\n };\n\n const registerUserScrollIntent = () => {\n userScrollIntentRef.current = true;\n\n if (userScrollIntentTimeoutRef.current !== null) {\n window.clearTimeout(userScrollIntentTimeoutRef.current);\n }\n\n userScrollIntentTimeoutRef.current = window.setTimeout(() => {\n userScrollIntentRef.current = false;\n userScrollIntentTimeoutRef.current = null;\n }, 250);\n };\n\n const handleWheel = (event: WheelEvent) => {\n registerUserScrollIntent();\n\n if (event.deltaY < 0) {\n stopFollowing();\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n registerUserScrollIntent();\n\n if (['ArrowUp', 'PageUp', 'Home'].includes(event.key)) {\n stopFollowing();\n }\n };\n\n const handleScroll = (e: Event) => {\n const scrollElement = e.target as HTMLElement;\n const currentPosition = scrollElement.scrollTop + scrollElement.clientHeight;\n const totalHeight = scrollElement.scrollHeight;\n const isAtEnd = currentPosition >= totalHeight - SCROLL_END_THRESHOLD;\n\n if (isAtEnd) {\n shouldScrollRef.current = true;\n return;\n }\n\n if (userScrollIntentRef.current) {\n shouldScrollRef.current = false;\n cancelPendingScroll();\n }\n };\n\n area.addEventListener('wheel', handleWheel, { passive: true });\n area.addEventListener('touchmove', registerUserScrollIntent, { passive: true });\n area.addEventListener('pointerdown', registerUserScrollIntent);\n area.addEventListener('keydown', handleKeyDown);\n area.addEventListener('scroll', handleScroll);\n scrollToEnd();\n\n return () => {\n area.removeEventListener('wheel', handleWheel);\n area.removeEventListener('touchmove', registerUserScrollIntent);\n area.removeEventListener('pointerdown', registerUserScrollIntent);\n area.removeEventListener('keydown', handleKeyDown);\n area.removeEventListener('scroll', handleScroll);\n mutationObserver.disconnect();\n resizeObserver.disconnect();\n cancelPendingScroll();\n\n if (userScrollIntentTimeoutRef.current !== null) {\n window.clearTimeout(userScrollIntentTimeoutRef.current);\n userScrollIntentTimeoutRef.current = null;\n }\n };\n }, [enabled, ref]);\n};\n"],"names":["React"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
require('react');
|
|
6
|
+
const hooks_useCopyToClipboard = require('../use-copy-to-clipboard-DHaJCGet.cjs');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
exports.useCopyToClipboard = hooks_useCopyToClipboard.useCopyToClipboard;
|
|
11
|
+
//# sourceMappingURL=use-copy-to-clipboard.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-copy-to-clipboard.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-copy-to-clipboard.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const React = require('react');
|
|
6
|
+
|
|
7
|
+
const useInView = () => {
|
|
8
|
+
const [inView, setInView] = React.useState(false);
|
|
9
|
+
const setRef = React.useCallback((node) => {
|
|
10
|
+
if (node) {
|
|
11
|
+
const observer = new IntersectionObserver(([entry]) => {
|
|
12
|
+
setInView(entry.isIntersecting);
|
|
13
|
+
});
|
|
14
|
+
observer.observe(node);
|
|
15
|
+
return () => observer.disconnect();
|
|
16
|
+
}
|
|
17
|
+
}, []);
|
|
18
|
+
return { inView, setRef };
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
exports.useInView = useInView;
|
|
22
|
+
//# sourceMappingURL=use-in-view.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-in-view.cjs.js","sources":["../../src/hooks/use-in-view.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\n\n/**\n * Tracks whether or not the given element is currently in view.\n * This is to replace framer-motion's `useInView` which has issues\n * tracking a ref that is set at a time other than mount.\n */\nexport const useInView = () => {\n const [inView, setInView] = useState(false);\n\n const setRef = useCallback((node: HTMLDivElement | null) => {\n if (node) {\n const observer = new IntersectionObserver(([entry]) => {\n setInView(entry.isIntersecting);\n });\n observer.observe(node);\n return () => observer.disconnect();\n }\n }, []);\n\n return { inView, setRef };\n};\n"],"names":["useState","useCallback"],"mappings":";;;;;;AAOO,MAAM,YAAY,MAAM;AAC7B,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,eAAS,KAAK,CAAA;AAE1C,EAAA,MAAM,MAAA,GAASC,iBAAA,CAAY,CAAC,IAAA,KAAgC;AAC1D,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAM,WAAW,IAAI,oBAAA,CAAqB,CAAC,CAAC,KAAK,CAAA,KAAM;AACrD,QAAA,SAAA,CAAU,MAAM,cAAc,CAAA;AAAA,MAChC,CAAC,CAAA;AACD,MAAA,QAAA,CAAS,QAAQ,IAAI,CAAA;AACrB,MAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,IACnC;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,QAAQ,MAAA,EAAO;AAC1B;;;;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { useState, useCallback } from 'react';
|
|
2
|
+
|
|
3
|
+
const useInView = () => {
|
|
4
|
+
const [inView, setInView] = useState(false);
|
|
5
|
+
const setRef = useCallback((node) => {
|
|
6
|
+
if (node) {
|
|
7
|
+
const observer = new IntersectionObserver(([entry]) => {
|
|
8
|
+
setInView(entry.isIntersecting);
|
|
9
|
+
});
|
|
10
|
+
observer.observe(node);
|
|
11
|
+
return () => observer.disconnect();
|
|
12
|
+
}
|
|
13
|
+
}, []);
|
|
14
|
+
return { inView, setRef };
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export { useInView };
|
|
18
|
+
//# sourceMappingURL=use-in-view.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-in-view.es.js","sources":["../../src/hooks/use-in-view.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\n\n/**\n * Tracks whether or not the given element is currently in view.\n * This is to replace framer-motion's `useInView` which has issues\n * tracking a ref that is set at a time other than mount.\n */\nexport const useInView = () => {\n const [inView, setInView] = useState(false);\n\n const setRef = useCallback((node: HTMLDivElement | null) => {\n if (node) {\n const observer = new IntersectionObserver(([entry]) => {\n setInView(entry.isIntersecting);\n });\n observer.observe(node);\n return () => observer.disconnect();\n }\n }, []);\n\n return { inView, setRef };\n};\n"],"names":[],"mappings":";;AAOO,MAAM,YAAY,MAAM;AAC7B,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,KAAK,CAAA;AAE1C,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,CAAC,IAAA,KAAgC;AAC1D,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAM,WAAW,IAAI,oBAAA,CAAqB,CAAC,CAAC,KAAK,CAAA,KAAM;AACrD,QAAA,SAAA,CAAU,MAAM,cAAc,CAAA;AAAA,MAChC,CAAC,CAAA;AACD,MAAA,QAAA,CAAS,QAAQ,IAAI,CAAA;AACrB,MAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,IACnC;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,QAAQ,MAAA,EAAO;AAC1B;;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const React = require('react');
|
|
6
|
+
|
|
7
|
+
const useIsMobile = (breakpoint = 1024) => {
|
|
8
|
+
const query = React.useMemo(() => `(max-width: ${breakpoint - 1}px)`, [breakpoint]);
|
|
9
|
+
const [isMobile, setIsMobile] = React.useState(false);
|
|
10
|
+
React.useLayoutEffect(() => {
|
|
11
|
+
const mq = window.matchMedia(query);
|
|
12
|
+
const update = () => setIsMobile(mq.matches);
|
|
13
|
+
update();
|
|
14
|
+
mq.addEventListener("change", update);
|
|
15
|
+
return () => mq.removeEventListener("change", update);
|
|
16
|
+
}, [query]);
|
|
17
|
+
return isMobile;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
exports.useIsMobile = useIsMobile;
|
|
21
|
+
//# sourceMappingURL=use-is-mobile.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-is-mobile.cjs.js","sources":["../../src/hooks/use-is-mobile.ts"],"sourcesContent":["import { useLayoutEffect, useMemo, useState } from 'react';\n\n// Default breakpoint 1024 matches MainSidebar's mobile breakpoint.\nexport const useIsMobile = (breakpoint: number = 1024) => {\n const query = useMemo(() => `(max-width: ${breakpoint - 1}px)`, [breakpoint]);\n const [isMobile, setIsMobile] = useState(false);\n\n useLayoutEffect(() => {\n const mq = window.matchMedia(query);\n const update = () => setIsMobile(mq.matches);\n\n update();\n mq.addEventListener('change', update);\n return () => mq.removeEventListener('change', update);\n }, [query]);\n\n return isMobile;\n};\n"],"names":["useMemo","useState","useLayoutEffect"],"mappings":";;;;;;AAGO,MAAM,WAAA,GAAc,CAAC,UAAA,GAAqB,IAAA,KAAS;AACxD,EAAA,MAAM,KAAA,GAAQA,cAAQ,MAAM,CAAA,YAAA,EAAe,aAAa,CAAC,CAAA,GAAA,CAAA,EAAO,CAAC,UAAU,CAAC,CAAA;AAC5E,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,eAAS,KAAK,CAAA;AAE9C,EAAAC,qBAAA,CAAgB,MAAM;AACpB,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA;AAClC,IAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,EAAA,CAAG,OAAO,CAAA;AAE3C,IAAA,MAAA,EAAO;AACP,IAAA,EAAA,CAAG,gBAAA,CAAiB,UAAU,MAAM,CAAA;AACpC,IAAA,OAAO,MAAM,EAAA,CAAG,mBAAA,CAAoB,QAAA,EAAU,MAAM,CAAA;AAAA,EACtD,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,OAAO,QAAA;AACT;;;;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { useMemo, useState, useLayoutEffect } from 'react';
|
|
2
|
+
|
|
3
|
+
const useIsMobile = (breakpoint = 1024) => {
|
|
4
|
+
const query = useMemo(() => `(max-width: ${breakpoint - 1}px)`, [breakpoint]);
|
|
5
|
+
const [isMobile, setIsMobile] = useState(false);
|
|
6
|
+
useLayoutEffect(() => {
|
|
7
|
+
const mq = window.matchMedia(query);
|
|
8
|
+
const update = () => setIsMobile(mq.matches);
|
|
9
|
+
update();
|
|
10
|
+
mq.addEventListener("change", update);
|
|
11
|
+
return () => mq.removeEventListener("change", update);
|
|
12
|
+
}, [query]);
|
|
13
|
+
return isMobile;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export { useIsMobile };
|
|
17
|
+
//# sourceMappingURL=use-is-mobile.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-is-mobile.es.js","sources":["../../src/hooks/use-is-mobile.ts"],"sourcesContent":["import { useLayoutEffect, useMemo, useState } from 'react';\n\n// Default breakpoint 1024 matches MainSidebar's mobile breakpoint.\nexport const useIsMobile = (breakpoint: number = 1024) => {\n const query = useMemo(() => `(max-width: ${breakpoint - 1}px)`, [breakpoint]);\n const [isMobile, setIsMobile] = useState(false);\n\n useLayoutEffect(() => {\n const mq = window.matchMedia(query);\n const update = () => setIsMobile(mq.matches);\n\n update();\n mq.addEventListener('change', update);\n return () => mq.removeEventListener('change', update);\n }, [query]);\n\n return isMobile;\n};\n"],"names":[],"mappings":";;AAGO,MAAM,WAAA,GAAc,CAAC,UAAA,GAAqB,IAAA,KAAS;AACxD,EAAA,MAAM,KAAA,GAAQ,QAAQ,MAAM,CAAA,YAAA,EAAe,aAAa,CAAC,CAAA,GAAA,CAAA,EAAO,CAAC,UAAU,CAAC,CAAA;AAC5E,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAE9C,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA;AAClC,IAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,EAAA,CAAG,OAAO,CAAA;AAE3C,IAAA,MAAA,EAAO;AACP,IAAA,EAAA,CAAG,gBAAA,CAAiB,UAAU,MAAM,CAAA;AACpC,IAAA,OAAO,MAAM,EAAA,CAAG,mBAAA,CAAoB,QAAA,EAAU,MAAM,CAAA;AAAA,EACtD,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,OAAO,QAAA;AACT;;;;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const React = require('react');
|
|
6
|
+
|
|
7
|
+
const APPLE_PLATFORM_PATTERN = /mac|iphone|ipad|ipod/i;
|
|
8
|
+
function getIsApplePlatform() {
|
|
9
|
+
if (typeof navigator === "undefined") return false;
|
|
10
|
+
const nav = navigator;
|
|
11
|
+
const platform = nav.userAgentData?.platform || nav.platform || "";
|
|
12
|
+
const userAgent = nav.userAgent || "";
|
|
13
|
+
return APPLE_PLATFORM_PATTERN.test(platform) || APPLE_PLATFORM_PATTERN.test(userAgent);
|
|
14
|
+
}
|
|
15
|
+
function useIsApplePlatform() {
|
|
16
|
+
const [isApplePlatform] = React.useState(getIsApplePlatform);
|
|
17
|
+
return isApplePlatform;
|
|
18
|
+
}
|
|
19
|
+
function useKeyboardShortcutLabel(key) {
|
|
20
|
+
const isApplePlatform = useIsApplePlatform();
|
|
21
|
+
return React.useMemo(() => {
|
|
22
|
+
const normalizedKey = key.trim().toUpperCase();
|
|
23
|
+
return `${isApplePlatform ? "⌘" : "Ctrl"} ${normalizedKey}`;
|
|
24
|
+
}, [isApplePlatform, key]);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
exports.useIsApplePlatform = useIsApplePlatform;
|
|
28
|
+
exports.useKeyboardShortcutLabel = useKeyboardShortcutLabel;
|
|
29
|
+
//# sourceMappingURL=use-keyboard-shortcut-label.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-keyboard-shortcut-label.cjs.js","sources":["../../src/hooks/use-keyboard-shortcut-label.ts"],"sourcesContent":["import { useMemo, useState } from 'react';\n\ntype NavigatorWithUserAgentData = Navigator & {\n userAgentData?: {\n platform?: string;\n };\n};\n\nconst APPLE_PLATFORM_PATTERN = /mac|iphone|ipad|ipod/i;\n\nfunction getIsApplePlatform() {\n if (typeof navigator === 'undefined') return false;\n\n const nav = navigator as NavigatorWithUserAgentData;\n const platform = nav.userAgentData?.platform || nav.platform || '';\n const userAgent = nav.userAgent || '';\n\n return APPLE_PLATFORM_PATTERN.test(platform) || APPLE_PLATFORM_PATTERN.test(userAgent);\n}\n\nexport function useIsApplePlatform() {\n const [isApplePlatform] = useState(getIsApplePlatform);\n\n return isApplePlatform;\n}\n\nexport function useKeyboardShortcutLabel(key: string) {\n const isApplePlatform = useIsApplePlatform();\n\n return useMemo(() => {\n const normalizedKey = key.trim().toUpperCase();\n return `${isApplePlatform ? '⌘' : 'Ctrl'} ${normalizedKey}`;\n }, [isApplePlatform, key]);\n}\n"],"names":["useState","useMemo"],"mappings":";;;;;;AAQA,MAAM,sBAAA,GAAyB,uBAAA;AAE/B,SAAS,kBAAA,GAAqB;AAC5B,EAAA,IAAI,OAAO,SAAA,KAAc,WAAA,EAAa,OAAO,KAAA;AAE7C,EAAA,MAAM,GAAA,GAAM,SAAA;AACZ,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,aAAA,EAAe,QAAA,IAAY,IAAI,QAAA,IAAY,EAAA;AAChE,EAAA,MAAM,SAAA,GAAY,IAAI,SAAA,IAAa,EAAA;AAEnC,EAAA,OAAO,uBAAuB,IAAA,CAAK,QAAQ,CAAA,IAAK,sBAAA,CAAuB,KAAK,SAAS,CAAA;AACvF;AAEO,SAAS,kBAAA,GAAqB;AACnC,EAAA,MAAM,CAAC,eAAe,CAAA,GAAIA,cAAA,CAAS,kBAAkB,CAAA;AAErD,EAAA,OAAO,eAAA;AACT;AAEO,SAAS,yBAAyB,GAAA,EAAa;AACpD,EAAA,MAAM,kBAAkB,kBAAA,EAAmB;AAE3C,EAAA,OAAOC,cAAQ,MAAM;AACnB,IAAA,MAAM,aAAA,GAAgB,GAAA,CAAI,IAAA,EAAK,CAAE,WAAA,EAAY;AAC7C,IAAA,OAAO,CAAA,EAAG,eAAA,GAAkB,GAAA,GAAM,MAAM,IAAI,aAAa,CAAA,CAAA;AAAA,EAC3D,CAAA,EAAG,CAAC,eAAA,EAAiB,GAAG,CAAC,CAAA;AAC3B;;;;;"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { useState, useMemo } from 'react';
|
|
2
|
+
|
|
3
|
+
const APPLE_PLATFORM_PATTERN = /mac|iphone|ipad|ipod/i;
|
|
4
|
+
function getIsApplePlatform() {
|
|
5
|
+
if (typeof navigator === "undefined") return false;
|
|
6
|
+
const nav = navigator;
|
|
7
|
+
const platform = nav.userAgentData?.platform || nav.platform || "";
|
|
8
|
+
const userAgent = nav.userAgent || "";
|
|
9
|
+
return APPLE_PLATFORM_PATTERN.test(platform) || APPLE_PLATFORM_PATTERN.test(userAgent);
|
|
10
|
+
}
|
|
11
|
+
function useIsApplePlatform() {
|
|
12
|
+
const [isApplePlatform] = useState(getIsApplePlatform);
|
|
13
|
+
return isApplePlatform;
|
|
14
|
+
}
|
|
15
|
+
function useKeyboardShortcutLabel(key) {
|
|
16
|
+
const isApplePlatform = useIsApplePlatform();
|
|
17
|
+
return useMemo(() => {
|
|
18
|
+
const normalizedKey = key.trim().toUpperCase();
|
|
19
|
+
return `${isApplePlatform ? "⌘" : "Ctrl"} ${normalizedKey}`;
|
|
20
|
+
}, [isApplePlatform, key]);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { useIsApplePlatform, useKeyboardShortcutLabel };
|
|
24
|
+
//# sourceMappingURL=use-keyboard-shortcut-label.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-keyboard-shortcut-label.es.js","sources":["../../src/hooks/use-keyboard-shortcut-label.ts"],"sourcesContent":["import { useMemo, useState } from 'react';\n\ntype NavigatorWithUserAgentData = Navigator & {\n userAgentData?: {\n platform?: string;\n };\n};\n\nconst APPLE_PLATFORM_PATTERN = /mac|iphone|ipad|ipod/i;\n\nfunction getIsApplePlatform() {\n if (typeof navigator === 'undefined') return false;\n\n const nav = navigator as NavigatorWithUserAgentData;\n const platform = nav.userAgentData?.platform || nav.platform || '';\n const userAgent = nav.userAgent || '';\n\n return APPLE_PLATFORM_PATTERN.test(platform) || APPLE_PLATFORM_PATTERN.test(userAgent);\n}\n\nexport function useIsApplePlatform() {\n const [isApplePlatform] = useState(getIsApplePlatform);\n\n return isApplePlatform;\n}\n\nexport function useKeyboardShortcutLabel(key: string) {\n const isApplePlatform = useIsApplePlatform();\n\n return useMemo(() => {\n const normalizedKey = key.trim().toUpperCase();\n return `${isApplePlatform ? '⌘' : 'Ctrl'} ${normalizedKey}`;\n }, [isApplePlatform, key]);\n}\n"],"names":[],"mappings":";;AAQA,MAAM,sBAAA,GAAyB,uBAAA;AAE/B,SAAS,kBAAA,GAAqB;AAC5B,EAAA,IAAI,OAAO,SAAA,KAAc,WAAA,EAAa,OAAO,KAAA;AAE7C,EAAA,MAAM,GAAA,GAAM,SAAA;AACZ,EAAA,MAAM,QAAA,GAAW,GAAA,CAAI,aAAA,EAAe,QAAA,IAAY,IAAI,QAAA,IAAY,EAAA;AAChE,EAAA,MAAM,SAAA,GAAY,IAAI,SAAA,IAAa,EAAA;AAEnC,EAAA,OAAO,uBAAuB,IAAA,CAAK,QAAQ,CAAA,IAAK,sBAAA,CAAuB,KAAK,SAAS,CAAA;AACvF;AAEO,SAAS,kBAAA,GAAqB;AACnC,EAAA,MAAM,CAAC,eAAe,CAAA,GAAI,QAAA,CAAS,kBAAkB,CAAA;AAErD,EAAA,OAAO,eAAA;AACT;AAEO,SAAS,yBAAyB,GAAA,EAAa;AACpD,EAAA,MAAM,kBAAkB,kBAAA,EAAmB;AAE3C,EAAA,OAAO,QAAQ,MAAM;AACnB,IAAA,MAAM,aAAA,GAAgB,GAAA,CAAI,IAAA,EAAK,CAAE,WAAA,EAAY;AAC7C,IAAA,OAAO,CAAA,EAAG,eAAA,GAAkB,GAAA,GAAM,MAAM,IAAI,aAAa,CAAA,CAAA;AAAA,EAC3D,CAAA,EAAG,CAAC,eAAA,EAAiB,GAAG,CAAC,CAAA;AAC3B;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
-
import { S as ScrollArea } from './scroll-area-
|
|
2
|
+
import { S as ScrollArea } from './scroll-area-DjZ6nTm5.js';
|
|
3
3
|
import { T as Tooltip, c as TooltipTrigger, a as TooltipContent } from './tooltip-DehuxlSR.js';
|
|
4
4
|
import { c as cn } from './utils-CzYGxqbG.js';
|
|
5
5
|
|
|
@@ -103,4 +103,4 @@ function Wrapper({ children }) {
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
export { HorizontalBars as H };
|
|
106
|
-
//# sourceMappingURL=horizontal-bars-
|
|
106
|
+
//# sourceMappingURL=horizontal-bars-r1aEIHUc.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"horizontal-bars-DjLETHvH.js","sources":["../src/ds/components/HorizontalBars/horizontal-bars.tsx"],"sourcesContent":["import type { ElementType, ReactNode } from 'react';\nimport { ScrollArea } from '@/ds/components/ScrollArea/scroll-area';\nimport { Tooltip, TooltipTrigger, TooltipContent } from '@/ds/components/Tooltip';\nimport { cn } from '@/lib/utils';\n\ntype Segment = { label: string; color: string };\n\ntype HorizontalBarRow = {\n name: string;\n values: number[];\n /** If present, the whole row is rendered as a link to this URL. */\n href?: string;\n /** If present, an individual segment becomes its own link. Indices align with `segments`. */\n hrefs?: Array<string | undefined>;\n};\n\nexport function HorizontalBars({\n data,\n segments,\n maxVal,\n fmt,\n className,\n LinkComponent = 'a',\n}: {\n data: Array<HorizontalBarRow>;\n segments: Segment[];\n maxVal: number;\n fmt: (v: number) => string;\n className?: string;\n /** Override how links produced by `href` / `hrefs` are rendered. Receives `href`,\n * `className`, `aria-label`, and `children`. Defaults to a plain `<a>` element;\n * consumers using a router should pass an adapter that maps `href` to their\n * navigation primitive (e.g. react-router `<Link to={href} />`). */\n LinkComponent?: ElementType;\n}) {\n const sorted = [...data].sort((a, b) => {\n const totalB = b.values.reduce((s, v) => s + v, 0);\n const totalA = a.values.reduce((s, v) => s + v, 0);\n return totalB - totalA;\n });\n\n const isStacked = segments.length > 1;\n\n return (\n <ScrollArea className={cn('w-full h-full', className)}>\n <div className=\"flex items-center gap-3 mb-4 mt-2\">\n <div className=\"flex-1 flex items-center gap-4\">\n {segments.map(seg => (\n <div key={seg.label} className=\"flex items-center gap-2\">\n <div className=\"size-2 rounded-full\" style={{ backgroundColor: seg.color }} />\n <span className=\"text-ui-sm text-neutral3\">{seg.label}</span>\n </div>\n ))}\n </div>\n <span className=\"shrink-0 text-ui-sm text-neutral2 pr-2\">Total</span>\n </div>\n <div className=\"grid gap-3.5\">\n {sorted.map(d => {\n const total = d.values.reduce((s, v) => s + v, 0);\n const rowBody = (\n <>\n <div className=\"relative h-full flex-1 min-w-0\">\n <Tooltip>\n <TooltipTrigger asChild>\n <div\n className={cn('absolute inset-y-0 left-0', d.href ? 'cursor-pointer' : 'cursor-default')}\n style={{ width: `${maxVal > 0 ? (total / maxVal) * 100 : 0}%` }}\n >\n {segments.map((seg, si) => {\n const val = d.values[si] ?? 0;\n const pct = total > 0 ? (val / total) * 100 : 0;\n const left = d.values.slice(0, si).reduce((s, v) => s + (total > 0 ? (v / total) * 100 : 0), 0);\n const isLastWithValue = d.values.slice(si + 1).every(v => !v);\n // Only honor segment-level links when the row itself is not an anchor.\n // Otherwise we'd render <a> nested inside <a>, which is invalid HTML.\n const segHref = d.href ? undefined : d.hrefs?.[si];\n\n const segmentNode = (\n <div\n className={cn(\n 'absolute inset-y-0 opacity-40 dark:opacity-100',\n isStacked && si === 0 && 'rounded-l',\n isStacked && isLastWithValue && 'rounded-r',\n !isStacked && 'rounded',\n segHref && 'cursor-pointer hover:opacity-70 transition-opacity',\n )}\n style={{\n left: isStacked ? `${left}%` : 0,\n width: isStacked ? `${pct}%` : `${pct}%`,\n backgroundColor: seg.color,\n }}\n />\n );\n\n if (segHref) {\n return (\n <LinkComponent\n key={seg.label}\n href={segHref}\n aria-label={`${d.name} — ${seg.label}`}\n className=\"contents\"\n >\n {segmentNode}\n </LinkComponent>\n );\n }\n return <Wrapper key={seg.label}>{segmentNode}</Wrapper>;\n })}\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"top\" className=\"font-mono\">\n <div className=\"grid gap-1\">\n {segments.map((seg, si) => (\n <div key={seg.label} className=\"flex items-center gap-2\">\n <span>{seg.label}</span>\n <span className=\"ml-auto pl-3\">{fmt(d.values[si] ?? 0)}</span>\n </div>\n ))}\n </div>\n </TooltipContent>\n </Tooltip>\n <span className=\"absolute inset-y-0 left-2.5 flex items-center text-ui-sm text-neutral4 truncate z-10 pointer-events-none\">\n {d.name}\n </span>\n </div>\n <span className=\"text-ui-md text-neutral4 tabular-nums shrink-0 pr-3\">{fmt(total)}</span>\n </>\n );\n\n if (d.href) {\n return (\n <LinkComponent\n key={d.name}\n href={d.href}\n className=\"flex items-center gap-14 h-6 rounded outline-none cursor-pointer hover:bg-surface3 focus-visible:bg-surface3 transition-colors\"\n >\n {rowBody}\n </LinkComponent>\n );\n }\n return (\n <div key={d.name} className=\"flex items-center gap-14 h-6 \">\n {rowBody}\n </div>\n );\n })}\n </div>\n </ScrollArea>\n );\n}\n\nfunction Wrapper({ children }: { children: ReactNode }) {\n return <>{children}</>;\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"horizontal-bars-r1aEIHUc.js","sources":["../src/ds/components/HorizontalBars/horizontal-bars.tsx"],"sourcesContent":["import type { ElementType, ReactNode } from 'react';\nimport { ScrollArea } from '@/ds/components/ScrollArea/scroll-area';\nimport { Tooltip, TooltipTrigger, TooltipContent } from '@/ds/components/Tooltip';\nimport { cn } from '@/lib/utils';\n\ntype Segment = { label: string; color: string };\n\ntype HorizontalBarRow = {\n name: string;\n values: number[];\n /** If present, the whole row is rendered as a link to this URL. */\n href?: string;\n /** If present, an individual segment becomes its own link. Indices align with `segments`. */\n hrefs?: Array<string | undefined>;\n};\n\nexport function HorizontalBars({\n data,\n segments,\n maxVal,\n fmt,\n className,\n LinkComponent = 'a',\n}: {\n data: Array<HorizontalBarRow>;\n segments: Segment[];\n maxVal: number;\n fmt: (v: number) => string;\n className?: string;\n /** Override how links produced by `href` / `hrefs` are rendered. Receives `href`,\n * `className`, `aria-label`, and `children`. Defaults to a plain `<a>` element;\n * consumers using a router should pass an adapter that maps `href` to their\n * navigation primitive (e.g. react-router `<Link to={href} />`). */\n LinkComponent?: ElementType;\n}) {\n const sorted = [...data].sort((a, b) => {\n const totalB = b.values.reduce((s, v) => s + v, 0);\n const totalA = a.values.reduce((s, v) => s + v, 0);\n return totalB - totalA;\n });\n\n const isStacked = segments.length > 1;\n\n return (\n <ScrollArea className={cn('w-full h-full', className)}>\n <div className=\"flex items-center gap-3 mb-4 mt-2\">\n <div className=\"flex-1 flex items-center gap-4\">\n {segments.map(seg => (\n <div key={seg.label} className=\"flex items-center gap-2\">\n <div className=\"size-2 rounded-full\" style={{ backgroundColor: seg.color }} />\n <span className=\"text-ui-sm text-neutral3\">{seg.label}</span>\n </div>\n ))}\n </div>\n <span className=\"shrink-0 text-ui-sm text-neutral2 pr-2\">Total</span>\n </div>\n <div className=\"grid gap-3.5\">\n {sorted.map(d => {\n const total = d.values.reduce((s, v) => s + v, 0);\n const rowBody = (\n <>\n <div className=\"relative h-full flex-1 min-w-0\">\n <Tooltip>\n <TooltipTrigger asChild>\n <div\n className={cn('absolute inset-y-0 left-0', d.href ? 'cursor-pointer' : 'cursor-default')}\n style={{ width: `${maxVal > 0 ? (total / maxVal) * 100 : 0}%` }}\n >\n {segments.map((seg, si) => {\n const val = d.values[si] ?? 0;\n const pct = total > 0 ? (val / total) * 100 : 0;\n const left = d.values.slice(0, si).reduce((s, v) => s + (total > 0 ? (v / total) * 100 : 0), 0);\n const isLastWithValue = d.values.slice(si + 1).every(v => !v);\n // Only honor segment-level links when the row itself is not an anchor.\n // Otherwise we'd render <a> nested inside <a>, which is invalid HTML.\n const segHref = d.href ? undefined : d.hrefs?.[si];\n\n const segmentNode = (\n <div\n className={cn(\n 'absolute inset-y-0 opacity-40 dark:opacity-100',\n isStacked && si === 0 && 'rounded-l',\n isStacked && isLastWithValue && 'rounded-r',\n !isStacked && 'rounded',\n segHref && 'cursor-pointer hover:opacity-70 transition-opacity',\n )}\n style={{\n left: isStacked ? `${left}%` : 0,\n width: isStacked ? `${pct}%` : `${pct}%`,\n backgroundColor: seg.color,\n }}\n />\n );\n\n if (segHref) {\n return (\n <LinkComponent\n key={seg.label}\n href={segHref}\n aria-label={`${d.name} — ${seg.label}`}\n className=\"contents\"\n >\n {segmentNode}\n </LinkComponent>\n );\n }\n return <Wrapper key={seg.label}>{segmentNode}</Wrapper>;\n })}\n </div>\n </TooltipTrigger>\n <TooltipContent side=\"top\" className=\"font-mono\">\n <div className=\"grid gap-1\">\n {segments.map((seg, si) => (\n <div key={seg.label} className=\"flex items-center gap-2\">\n <span>{seg.label}</span>\n <span className=\"ml-auto pl-3\">{fmt(d.values[si] ?? 0)}</span>\n </div>\n ))}\n </div>\n </TooltipContent>\n </Tooltip>\n <span className=\"absolute inset-y-0 left-2.5 flex items-center text-ui-sm text-neutral4 truncate z-10 pointer-events-none\">\n {d.name}\n </span>\n </div>\n <span className=\"text-ui-md text-neutral4 tabular-nums shrink-0 pr-3\">{fmt(total)}</span>\n </>\n );\n\n if (d.href) {\n return (\n <LinkComponent\n key={d.name}\n href={d.href}\n className=\"flex items-center gap-14 h-6 rounded outline-none cursor-pointer hover:bg-surface3 focus-visible:bg-surface3 transition-colors\"\n >\n {rowBody}\n </LinkComponent>\n );\n }\n return (\n <div key={d.name} className=\"flex items-center gap-14 h-6 \">\n {rowBody}\n </div>\n );\n })}\n </div>\n </ScrollArea>\n );\n}\n\nfunction Wrapper({ children }: { children: ReactNode }) {\n return <>{children}</>;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
const scrollArea = require('./scroll-area-
|
|
4
|
+
const scrollArea = require('./scroll-area-BtcyzOxO.cjs');
|
|
5
5
|
const tooltip = require('./tooltip-j8gUR1Qk.cjs');
|
|
6
6
|
const utils = require('./utils-vA5sWo9W.cjs');
|
|
7
7
|
|
|
@@ -105,4 +105,4 @@ function Wrapper({ children }) {
|
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
exports.HorizontalBars = HorizontalBars;
|
|
108
|
-
//# sourceMappingURL=horizontal-bars-
|
|
108
|
+
//# sourceMappingURL=horizontal-bars-uPFpgihX.cjs.map
|