@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":"traces-data-list-BNmnKyDD.cjs","sources":["../src/ds/components/DataList/data-list-pagination.tsx","../src/ds/components/DataList/data-list-row-static.tsx","../src/ds/components/DataList/data-list-subheader.tsx","../src/ds/components/DataList/data-list-subheading.tsx","../src/ds/components/DataList/data-list-top-cells.tsx","../src/ds/components/DataList/data-list.tsx","../src/ds/components/DataList/ScoresDataList/scores-data-list-cells.tsx","../src/ds/components/DataList/ScoresDataList/scores-data-list.tsx","../src/ds/components/DataList/TracesDataList/traces-data-list-cells.tsx","../src/ds/components/DataList/TracesDataList/traces-data-list.tsx"],"sourcesContent":["import { ArrowLeftIcon, ArrowRightIcon } from 'lucide-react';\nimport { Button } from '@/ds/components/Button';\n\nexport type DataListPaginationProps = {\n currentPage?: number;\n hasMore?: boolean;\n onNextPage?: () => void;\n onPrevPage?: () => void;\n};\n\nexport function DataListPagination({ currentPage, hasMore, onNextPage, onPrevPage }: DataListPaginationProps) {\n const showNavigation = (typeof currentPage === 'number' && currentPage > 0) || hasMore;\n\n return (\n <div className=\"col-span-full flex py-4 items-center justify-center text-neutral3 text-ui-md gap-8\">\n <span>\n Page <b>{currentPage ? currentPage + 1 : '1'}</b>\n </span>\n {showNavigation && (\n <div className=\"flex gap-4\">\n {typeof currentPage === 'number' && currentPage > 0 && (\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onPrevPage}>\n <ArrowLeftIcon />\n Previous\n </Button>\n )}\n {hasMore && (\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onNextPage}>\n Next\n <ArrowRightIcon />\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { useDataListRowWrapperContext } from './data-list-row-wrapper-context';\nimport { dataListRowStaticStyles, dataListRowVariants } from './shared';\nimport type { DataListRowSharedProps } from './shared';\nimport { cn } from '@/lib/utils';\n\nexport type DataListRowStaticProps = ComponentPropsWithoutRef<'div'> & DataListRowSharedProps;\n\n/**\n * Non-interactive row. Use when a row should *display* like a regular row but\n * has no link target or click handler\n */\nexport const DataListRowStatic = forwardRef<HTMLDivElement, DataListRowStaticProps>(\n ({ children, className, flushLeft, flushRight, colStart, colEnd, featured, variant, style, ...rest }, ref) => {\n const isWrapped = useDataListRowWrapperContext();\n const hasColumnOverride = colStart !== undefined || colEnd !== undefined;\n const resolvedStyle = hasColumnOverride ? { ...style, gridColumn: `${colStart ?? 1} / ${colEnd ?? -1}` } : style;\n return (\n <div\n ref={ref}\n className={cn(\n isWrapped\n ? 'grid grid-cols-subgrid gap-8 px-5 transition-colors duration-200 rounded-lg'\n : dataListRowStaticStyles,\n !isWrapped && flushLeft && 'ml-0!',\n !isWrapped && flushRight && 'mr-0!',\n // `!` so the selection fill wins over borderless table root styling\n // (higher-specificity descendant rules); same color in `default`.\n featured && 'bg-surface4!',\n dataListRowVariants({ variant }),\n className,\n )}\n style={resolvedStyle}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nDataListRowStatic.displayName = 'DataListRowStatic';\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type DataListSubheaderProps = ComponentPropsWithoutRef<'div'>;\n\nexport const DataListSubheader = forwardRef<HTMLDivElement, DataListSubheaderProps>(\n ({ children, className, ...rest }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'data-list-subheader relative isolate col-span-full px-4 py-3 border-none text-ui-md text-neutral4 font-medium mx-1',\n 'before:absolute before:inset-x-0 before:inset-y-1 before:bg-surface4 before:rounded-md before:-z-1',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nDataListSubheader.displayName = 'DataListSubheader';\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type DataListSubHeadingProps = {\n children: ReactNode;\n className?: string;\n};\n\nexport function DataListSubHeading({ children, className }: DataListSubHeadingProps) {\n return <span className={cn('text-ui-sm text-neutral2 font-normal', className)}>{children}</span>;\n}\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type DataListTopCellsProps = ComponentPropsWithoutRef<'div'> & {\n /**\n * Drop the group's default left margin. Use when this sits as the second\n * child of a gap-0 `DataList.Top`, beside a `DataList.TopSelectCell` that\n * owns the leading column.\n */\n flushLeft?: boolean;\n /**\n * Place the group starting at this column line, spanning through to the\n * last column. Defaults to the full grid (`col-span-full`). Use when this\n * sits beside a leading cell that owns column 1.\n */\n colStart?: number;\n};\n\n/**\n * Non-interactive header equivalent of `DataList.RowButton`. Groups a set of\n * `DataList.TopCell`s with the same horizontal layout (gap, mx, px) as\n * `RowButton`, so columns inside a wrapped `Top` line up cell-for-cell with the\n * columns inside a wrapped `Row`.\n */\nexport const DataListTopCells = forwardRef<HTMLDivElement, DataListTopCellsProps>(\n ({ children, className, flushLeft, colStart, style, ...rest }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'grid grid-cols-subgrid gap-8 px-5 pointer-events-none [&>*]:pointer-events-auto',\n !colStart && 'col-span-full',\n flushLeft && 'pl-0!',\n className,\n )}\n style={colStart ? { ...style, gridColumn: `${colStart} / -1` } : style}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nDataListTopCells.displayName = 'DataListTopCells';\n","import {\n DataListCell,\n DataListTextCell,\n DataListNameCell,\n DataListDescriptionCell,\n DataListIdCell,\n DataListSelectCell,\n DataListMonoCell,\n DataListDateCell,\n DataListTimeCell,\n} from './data-list-cells';\nimport { DataListNextPageLoading } from './data-list-next-page-loading';\nimport { DataListNoMatch } from './data-list-no-match';\nimport { DataListPagination } from './data-list-pagination';\nimport { DataListRoot } from './data-list-root';\nimport { DataListRowButton } from './data-list-row-button';\nimport { DataListRowLink } from './data-list-row-link';\nimport { DataListRowStatic } from './data-list-row-static';\nimport { DataListRowWrapper } from './data-list-row-wrapper';\nimport { DataListSpacer } from './data-list-spacer';\nimport { DataListSubheader } from './data-list-subheader';\nimport { DataListSubHeading } from './data-list-subheading';\nimport { DataListTop } from './data-list-top';\nimport {\n DataListTopCell,\n DataListTopCellWithTooltip,\n DataListTopCellSmart,\n DataListTopSelectCell,\n} from './data-list-top-cell';\nimport { DataListTopCells } from './data-list-top-cells';\n\nexport const DataList = Object.assign(DataListRoot, {\n Top: DataListTop,\n TopCells: DataListTopCells,\n TopCell: DataListTopCell,\n TopCellWithTooltip: DataListTopCellWithTooltip,\n TopCellSmart: DataListTopCellSmart,\n RowWrapper: DataListRowWrapper,\n RowButton: DataListRowButton,\n RowLink: DataListRowLink,\n RowStatic: DataListRowStatic,\n Cell: DataListCell,\n TextCell: DataListTextCell,\n NameCell: DataListNameCell,\n DescriptionCell: DataListDescriptionCell,\n IdCell: DataListIdCell,\n MonoCell: DataListMonoCell,\n DateCell: DataListDateCell,\n TimeCell: DataListTimeCell,\n SelectCell: DataListSelectCell,\n TopSelectCell: DataListTopSelectCell,\n NoMatch: DataListNoMatch,\n Subheader: DataListSubheader,\n SubHeading: DataListSubHeading,\n Spacer: DataListSpacer,\n NextPageLoading: DataListNextPageLoading,\n Pagination: DataListPagination,\n});\n","import { format, isToday } from 'date-fns';\nimport { DataListCell } from '../data-list-cells';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction toDate(value: Date | string): Date | null {\n const date = value instanceof Date ? value : new Date(value);\n return isNaN(date.getTime()) ? null : date;\n}\n\n// ---------------------------------------------------------------------------\n// DateCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListDateCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListDateCell({ timestamp }: ScoresDataListDateCellProps) {\n const date = toDate(timestamp);\n return (\n <DataListCell height=\"compact\" className=\"text-ui-smd text-neutral2\">\n {date ? (isToday(date) ? 'Today' : format(date, 'MMM dd')) : '-'}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// TimeCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListTimeCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListTimeCell({ timestamp }: ScoresDataListTimeCellProps) {\n const date = toDate(timestamp);\n return (\n <DataListCell height=\"compact\" className=\"text-ui-smd text-neutral3\">\n {date ? format(date, 'h:mm:ss aaa') : '-'}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// InputCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListInputCellProps {\n input?: unknown;\n}\n\nexport function ScoresDataListInputCell({ input }: ScoresDataListInputCellProps) {\n return (\n <DataListCell height=\"compact\" className=\"min-w-0\">\n <span className=\"block text-neutral3 text-ui-smd font-mono truncate\">\n {input != null ? JSON.stringify(input) : '-'}\n </span>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// EntityCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListEntityCellProps {\n entityId?: string | null;\n}\n\nexport function ScoresDataListEntityCell({ entityId }: ScoresDataListEntityCellProps) {\n return (\n <DataListCell height=\"compact\" className=\"min-w-0\">\n <span className=\"block text-ui-smd truncate\">{entityId || '-'}</span>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// ScoreCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListScoreCellProps {\n score?: unknown;\n}\n\nexport function ScoresDataListScoreCell({ score }: ScoresDataListScoreCellProps) {\n const display = score == null ? '-' : typeof score === 'object' ? JSON.stringify(score) : String(score);\n return (\n <DataListCell height=\"compact\" className=\"text-ui-smd font-mono text-neutral3\">\n {display}\n </DataListCell>\n );\n}\n","import type { ComponentProps } from 'react';\nimport { DataListNextPageLoading } from '../data-list-next-page-loading';\nimport { DataListNoMatch } from '../data-list-no-match';\nimport { DataListRoot } from '../data-list-root';\nimport { DataListRowButton } from '../data-list-row-button';\nimport { DataListTop } from '../data-list-top';\nimport { DataListTopCell } from '../data-list-top-cell';\nimport {\n ScoresDataListDateCell,\n ScoresDataListTimeCell,\n ScoresDataListInputCell,\n ScoresDataListEntityCell,\n ScoresDataListScoreCell,\n} from './scores-data-list-cells';\n\nfunction ScoresDataListRoot(props: ComponentProps<typeof DataListRoot>) {\n return <DataListRoot {...props} />;\n}\n\nexport const ScoresDataList = Object.assign(ScoresDataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n RowButton: DataListRowButton,\n NoMatch: DataListNoMatch,\n NextPageLoading: DataListNextPageLoading,\n DateCell: ScoresDataListDateCell,\n TimeCell: ScoresDataListTimeCell,\n InputCell: ScoresDataListInputCell,\n EntityCell: ScoresDataListEntityCell,\n ScoreCell: ScoresDataListScoreCell,\n});\n","import { EntityType } from '@mastra/core/observability';\nimport { CornerDownRightIcon, ListTreeIcon } from 'lucide-react';\nimport { DataListCell, DataListMonoCell } from '../data-list-cells';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { AgentIcon } from '@/ds/icons/AgentIcon';\nimport { WorkflowIcon } from '@/ds/icons/WorkflowIcon';\nimport { Colors } from '@/ds/tokens/colors';\nimport { cn } from '@/lib/utils';\n\n// ---------------------------------------------------------------------------\n// NameCell\n// ---------------------------------------------------------------------------\n\nexport interface TracesDataListNameCellProps {\n name?: string | null;\n /** `null`/missing → root span (Trace). Set → nested span (Subtrace). Drives the leading level icon. */\n parentSpanId?: string | null;\n /** When true, the leading level icon is wrapped in a Trace/Subtrace tooltip. Off by default —\n * only meaningful in branches mode, where rows mix root traces and subtraces. */\n showLevelTooltip?: boolean;\n}\n\nexport function TracesDataListNameCell({ name, parentSpanId, showLevelTooltip }: TracesDataListNameCellProps) {\n const isRoot = parentSpanId == null;\n const Icon = isRoot ? ListTreeIcon : CornerDownRightIcon;\n const label = isRoot ? 'Trace' : 'Subtrace';\n const icon = (\n <span aria-label={label} className=\"inline-flex shrink-0\">\n <Icon className={cn('size-4 shrink-0', isRoot ? 'text-neutral3' : 'text-neutral2')} aria-hidden />\n </span>\n );\n return (\n <DataListCell height=\"compact\" className=\"text-neutral4 text-ui-smd min-w-0 flex items-center gap-2\">\n {showLevelTooltip ? (\n <Tooltip>\n <TooltipTrigger asChild>{icon}</TooltipTrigger>\n <TooltipContent>{label}</TooltipContent>\n </Tooltip>\n ) : (\n icon\n )}\n <span className=\"min-w-0 truncate\">{name || '-'}</span>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// InputCell\n// ---------------------------------------------------------------------------\n\nexport interface TracesDataListInputCellProps {\n input?: string | null;\n}\n\nexport function TracesDataListInputCell({ input }: TracesDataListInputCellProps) {\n return <DataListMonoCell>{input || '-'}</DataListMonoCell>;\n}\n\n// ---------------------------------------------------------------------------\n// EntityCell\n// ---------------------------------------------------------------------------\n\nfunction EntityTypeIcon({ entityType, className }: { entityType: string; className?: string }) {\n const iconClass = cn('size-3.5 shrink-0 text-neutral2', className);\n const normalizedEntityType = entityType.toLowerCase();\n\n switch (normalizedEntityType) {\n case EntityType.AGENT:\n return <AgentIcon className={iconClass} aria-hidden />;\n case 'workflow':\n case EntityType.WORKFLOW_RUN:\n return <WorkflowIcon className={iconClass} aria-hidden />;\n default:\n return null;\n }\n}\n\nexport interface TracesDataListEntityCellProps {\n entityType?: string | null;\n entityName?: string | null;\n}\n\nexport function TracesDataListEntityCell({ entityType, entityName }: TracesDataListEntityCellProps) {\n const type = entityType ?? '';\n\n return (\n <DataListCell height=\"compact\" className=\"flex min-w-0 items-center gap-2\">\n <EntityTypeIcon entityType={type} />\n {entityName ? <span className=\"min-w-0 text-ui-smd truncate\">{entityName}</span> : '-'}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// StatusCell\n// ---------------------------------------------------------------------------\n\nconst STATUS_CONFIG: Record<string, { label: string; color: string }> = {\n completed: { label: 'OK', color: Colors.accent2 },\n ok: { label: 'OK', color: Colors.accent2 },\n error: { label: 'ERR', color: Colors.error },\n unset: { label: '-', color: Colors.neutral4 },\n};\n\nexport interface TracesDataListStatusCellProps {\n status?: string | null;\n}\n\nexport function TracesDataListStatusCell({ status }: TracesDataListStatusCellProps) {\n const key = (status ?? 'unset').toLowerCase();\n const config = STATUS_CONFIG[key] ?? STATUS_CONFIG['unset'];\n\n return (\n <DataListCell height=\"compact\">\n <span className=\"uppercase text-ui-sm font-semibold\" style={{ color: config.color }}>\n {config.label}\n </span>\n </DataListCell>\n );\n}\n","import type { ComponentProps } from 'react';\nimport { DataListDateCell, DataListIdCell, DataListTimeCell } from '../data-list-cells';\nimport { DataListNextPageLoading } from '../data-list-next-page-loading';\nimport { DataListNoMatch } from '../data-list-no-match';\nimport { DataListRoot } from '../data-list-root';\nimport { DataListRowButton } from '../data-list-row-button';\nimport { DataListSpacer } from '../data-list-spacer';\nimport { DataListSubheader } from '../data-list-subheader';\nimport { DataListSubHeading } from '../data-list-subheading';\nimport { DataListTop } from '../data-list-top';\nimport { DataListTopCell, DataListTopCellWithTooltip } from '../data-list-top-cell';\nimport {\n TracesDataListNameCell,\n TracesDataListInputCell,\n TracesDataListEntityCell,\n TracesDataListStatusCell,\n} from './traces-data-list-cells';\n\nfunction TracesDataListRoot(props: ComponentProps<typeof DataListRoot>) {\n return <DataListRoot {...props} />;\n}\n\nexport const TracesDataList = Object.assign(TracesDataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n TopCellWithTooltip: DataListTopCellWithTooltip,\n RowButton: DataListRowButton,\n NoMatch: DataListNoMatch,\n Subheader: DataListSubheader,\n SubHeading: DataListSubHeading,\n Spacer: DataListSpacer,\n IdCell: DataListIdCell,\n DateCell: DataListDateCell,\n TimeCell: DataListTimeCell,\n NameCell: TracesDataListNameCell,\n InputCell: TracesDataListInputCell,\n EntityCell: TracesDataListEntityCell,\n StatusCell: TracesDataListStatusCell,\n NextPageLoading: DataListNextPageLoading,\n});\n"],"names":["jsxs","jsx","Button","ArrowLeftIcon","ArrowRightIcon","forwardRef","useDataListRowWrapperContext","cn","dataListRowStaticStyles","dataListRowVariants","DataListRoot","DataListTop","DataListTopCell","DataListTopCellWithTooltip","DataListTopCellSmart","DataListRowWrapper","DataListRowButton","DataListRowLink","DataListCell","DataListTextCell","DataListNameCell","DataListDescriptionCell","DataListIdCell","DataListMonoCell","DataListDateCell","DataListTimeCell","DataListSelectCell","DataListTopSelectCell","DataListNoMatch","DataListSpacer","DataListNextPageLoading","isToday","format","ListTreeIcon","CornerDownRightIcon","Tooltip","TooltipTrigger","TooltipContent","EntityType","AgentIcon","WorkflowIcon","Colors"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { u as useDataListRowWrapperContext, p as dataListRowVariants, q as dataListRowStaticStyles, c as DataListRoot, d as DataListNextPageLoading, h as DataListSpacer, g as DataListNoMatch, r as DataListTopSelectCell, s as DataListSelectCell, e as DataListTimeCell, f as DataListDateCell, b as DataListMonoCell, t as DataListIdCell, v as DataListDescriptionCell, w as DataListNameCell, x as DataListTextCell, a as DataListCell, i as DataListRowLink, j as DataListRowButton, k as DataListRowWrapper, l as DataListTopCellSmart, m as DataListTopCellWithTooltip, n as DataListTopCell, o as DataListTop, W as WorkflowIcon, A as AgentIcon } from './data-list-skeleton-
|
|
1
|
+
import { u as useDataListRowWrapperContext, p as dataListRowVariants, q as dataListRowStaticStyles, c as DataListRoot, d as DataListNextPageLoading, h as DataListSpacer, g as DataListNoMatch, r as DataListTopSelectCell, s as DataListSelectCell, e as DataListTimeCell, f as DataListDateCell, b as DataListMonoCell, t as DataListIdCell, v as DataListDescriptionCell, w as DataListNameCell, x as DataListTextCell, a as DataListCell, i as DataListRowLink, j as DataListRowButton, k as DataListRowWrapper, l as DataListTopCellSmart, m as DataListTopCellWithTooltip, n as DataListTopCell, o as DataListTop, W as WorkflowIcon, A as AgentIcon } from './data-list-skeleton-DD7ljjgS.js';
|
|
2
2
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
3
|
import { ArrowLeftIcon, ArrowRightIcon, ListTreeIcon, CornerDownRightIcon } from 'lucide-react';
|
|
4
4
|
import { B as Button } from './Button-DoOEJwa_.js';
|
|
@@ -86,7 +86,12 @@ const DataListTopCells = forwardRef(
|
|
|
86
86
|
"div",
|
|
87
87
|
{
|
|
88
88
|
ref,
|
|
89
|
-
className: cn(
|
|
89
|
+
className: cn(
|
|
90
|
+
"grid grid-cols-subgrid gap-8 px-5 pointer-events-none [&>*]:pointer-events-auto",
|
|
91
|
+
!colStart && "col-span-full",
|
|
92
|
+
flushLeft && "pl-0!",
|
|
93
|
+
className
|
|
94
|
+
),
|
|
90
95
|
style: colStart ? { ...style, gridColumn: `${colStart} / -1` } : style,
|
|
91
96
|
...rest,
|
|
92
97
|
children
|
|
@@ -234,4 +239,4 @@ const TracesDataList = Object.assign(TracesDataListRoot, {
|
|
|
234
239
|
});
|
|
235
240
|
|
|
236
241
|
export { DataList as D, ScoresDataList as S, TracesDataList as T };
|
|
237
|
-
//# sourceMappingURL=traces-data-list-
|
|
242
|
+
//# sourceMappingURL=traces-data-list-DRyI45Ke.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traces-data-list-DRyI45Ke.js","sources":["../src/ds/components/DataList/data-list-pagination.tsx","../src/ds/components/DataList/data-list-row-static.tsx","../src/ds/components/DataList/data-list-subheader.tsx","../src/ds/components/DataList/data-list-subheading.tsx","../src/ds/components/DataList/data-list-top-cells.tsx","../src/ds/components/DataList/data-list.tsx","../src/ds/components/DataList/ScoresDataList/scores-data-list-cells.tsx","../src/ds/components/DataList/ScoresDataList/scores-data-list.tsx","../src/ds/components/DataList/TracesDataList/traces-data-list-cells.tsx","../src/ds/components/DataList/TracesDataList/traces-data-list.tsx"],"sourcesContent":["import { ArrowLeftIcon, ArrowRightIcon } from 'lucide-react';\nimport { Button } from '@/ds/components/Button';\n\nexport type DataListPaginationProps = {\n currentPage?: number;\n hasMore?: boolean;\n onNextPage?: () => void;\n onPrevPage?: () => void;\n};\n\nexport function DataListPagination({ currentPage, hasMore, onNextPage, onPrevPage }: DataListPaginationProps) {\n const showNavigation = (typeof currentPage === 'number' && currentPage > 0) || hasMore;\n\n return (\n <div className=\"col-span-full flex py-4 items-center justify-center text-neutral3 text-ui-md gap-8\">\n <span>\n Page <b>{currentPage ? currentPage + 1 : '1'}</b>\n </span>\n {showNavigation && (\n <div className=\"flex gap-4\">\n {typeof currentPage === 'number' && currentPage > 0 && (\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onPrevPage}>\n <ArrowLeftIcon />\n Previous\n </Button>\n )}\n {hasMore && (\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={onNextPage}>\n Next\n <ArrowRightIcon />\n </Button>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { useDataListRowWrapperContext } from './data-list-row-wrapper-context';\nimport { dataListRowStaticStyles, dataListRowVariants } from './shared';\nimport type { DataListRowSharedProps } from './shared';\nimport { cn } from '@/lib/utils';\n\nexport type DataListRowStaticProps = ComponentPropsWithoutRef<'div'> & DataListRowSharedProps;\n\n/**\n * Non-interactive row. Use when a row should *display* like a regular row but\n * has no link target or click handler\n */\nexport const DataListRowStatic = forwardRef<HTMLDivElement, DataListRowStaticProps>(\n ({ children, className, flushLeft, flushRight, colStart, colEnd, featured, variant, style, ...rest }, ref) => {\n const isWrapped = useDataListRowWrapperContext();\n const hasColumnOverride = colStart !== undefined || colEnd !== undefined;\n const resolvedStyle = hasColumnOverride ? { ...style, gridColumn: `${colStart ?? 1} / ${colEnd ?? -1}` } : style;\n return (\n <div\n ref={ref}\n className={cn(\n isWrapped\n ? 'grid grid-cols-subgrid gap-8 px-5 transition-colors duration-200 rounded-lg'\n : dataListRowStaticStyles,\n !isWrapped && flushLeft && 'ml-0!',\n !isWrapped && flushRight && 'mr-0!',\n // `!` so the selection fill wins over borderless table root styling\n // (higher-specificity descendant rules); same color in `default`.\n featured && 'bg-surface4!',\n dataListRowVariants({ variant }),\n className,\n )}\n style={resolvedStyle}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nDataListRowStatic.displayName = 'DataListRowStatic';\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type DataListSubheaderProps = ComponentPropsWithoutRef<'div'>;\n\nexport const DataListSubheader = forwardRef<HTMLDivElement, DataListSubheaderProps>(\n ({ children, className, ...rest }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'data-list-subheader relative isolate col-span-full px-4 py-3 border-none text-ui-md text-neutral4 font-medium mx-1',\n 'before:absolute before:inset-x-0 before:inset-y-1 before:bg-surface4 before:rounded-md before:-z-1',\n className,\n )}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nDataListSubheader.displayName = 'DataListSubheader';\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type DataListSubHeadingProps = {\n children: ReactNode;\n className?: string;\n};\n\nexport function DataListSubHeading({ children, className }: DataListSubHeadingProps) {\n return <span className={cn('text-ui-sm text-neutral2 font-normal', className)}>{children}</span>;\n}\n","import { forwardRef } from 'react';\nimport type { ComponentPropsWithoutRef } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport type DataListTopCellsProps = ComponentPropsWithoutRef<'div'> & {\n /**\n * Drop the group's default left margin. Use when this sits as the second\n * child of a gap-0 `DataList.Top`, beside a `DataList.TopSelectCell` that\n * owns the leading column.\n */\n flushLeft?: boolean;\n /**\n * Place the group starting at this column line, spanning through to the\n * last column. Defaults to the full grid (`col-span-full`). Use when this\n * sits beside a leading cell that owns column 1.\n */\n colStart?: number;\n};\n\n/**\n * Non-interactive header equivalent of `DataList.RowButton`. Groups a set of\n * `DataList.TopCell`s with the same horizontal layout (gap, mx, px) as\n * `RowButton`, so columns inside a wrapped `Top` line up cell-for-cell with the\n * columns inside a wrapped `Row`.\n */\nexport const DataListTopCells = forwardRef<HTMLDivElement, DataListTopCellsProps>(\n ({ children, className, flushLeft, colStart, style, ...rest }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'grid grid-cols-subgrid gap-8 px-5 pointer-events-none [&>*]:pointer-events-auto',\n !colStart && 'col-span-full',\n flushLeft && 'pl-0!',\n className,\n )}\n style={colStart ? { ...style, gridColumn: `${colStart} / -1` } : style}\n {...rest}\n >\n {children}\n </div>\n );\n },\n);\n\nDataListTopCells.displayName = 'DataListTopCells';\n","import {\n DataListCell,\n DataListTextCell,\n DataListNameCell,\n DataListDescriptionCell,\n DataListIdCell,\n DataListSelectCell,\n DataListMonoCell,\n DataListDateCell,\n DataListTimeCell,\n} from './data-list-cells';\nimport { DataListNextPageLoading } from './data-list-next-page-loading';\nimport { DataListNoMatch } from './data-list-no-match';\nimport { DataListPagination } from './data-list-pagination';\nimport { DataListRoot } from './data-list-root';\nimport { DataListRowButton } from './data-list-row-button';\nimport { DataListRowLink } from './data-list-row-link';\nimport { DataListRowStatic } from './data-list-row-static';\nimport { DataListRowWrapper } from './data-list-row-wrapper';\nimport { DataListSpacer } from './data-list-spacer';\nimport { DataListSubheader } from './data-list-subheader';\nimport { DataListSubHeading } from './data-list-subheading';\nimport { DataListTop } from './data-list-top';\nimport {\n DataListTopCell,\n DataListTopCellWithTooltip,\n DataListTopCellSmart,\n DataListTopSelectCell,\n} from './data-list-top-cell';\nimport { DataListTopCells } from './data-list-top-cells';\n\nexport const DataList = Object.assign(DataListRoot, {\n Top: DataListTop,\n TopCells: DataListTopCells,\n TopCell: DataListTopCell,\n TopCellWithTooltip: DataListTopCellWithTooltip,\n TopCellSmart: DataListTopCellSmart,\n RowWrapper: DataListRowWrapper,\n RowButton: DataListRowButton,\n RowLink: DataListRowLink,\n RowStatic: DataListRowStatic,\n Cell: DataListCell,\n TextCell: DataListTextCell,\n NameCell: DataListNameCell,\n DescriptionCell: DataListDescriptionCell,\n IdCell: DataListIdCell,\n MonoCell: DataListMonoCell,\n DateCell: DataListDateCell,\n TimeCell: DataListTimeCell,\n SelectCell: DataListSelectCell,\n TopSelectCell: DataListTopSelectCell,\n NoMatch: DataListNoMatch,\n Subheader: DataListSubheader,\n SubHeading: DataListSubHeading,\n Spacer: DataListSpacer,\n NextPageLoading: DataListNextPageLoading,\n Pagination: DataListPagination,\n});\n","import { format, isToday } from 'date-fns';\nimport { DataListCell } from '../data-list-cells';\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction toDate(value: Date | string): Date | null {\n const date = value instanceof Date ? value : new Date(value);\n return isNaN(date.getTime()) ? null : date;\n}\n\n// ---------------------------------------------------------------------------\n// DateCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListDateCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListDateCell({ timestamp }: ScoresDataListDateCellProps) {\n const date = toDate(timestamp);\n return (\n <DataListCell height=\"compact\" className=\"text-ui-smd text-neutral2\">\n {date ? (isToday(date) ? 'Today' : format(date, 'MMM dd')) : '-'}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// TimeCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListTimeCellProps {\n timestamp: Date | string;\n}\n\nexport function ScoresDataListTimeCell({ timestamp }: ScoresDataListTimeCellProps) {\n const date = toDate(timestamp);\n return (\n <DataListCell height=\"compact\" className=\"text-ui-smd text-neutral3\">\n {date ? format(date, 'h:mm:ss aaa') : '-'}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// InputCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListInputCellProps {\n input?: unknown;\n}\n\nexport function ScoresDataListInputCell({ input }: ScoresDataListInputCellProps) {\n return (\n <DataListCell height=\"compact\" className=\"min-w-0\">\n <span className=\"block text-neutral3 text-ui-smd font-mono truncate\">\n {input != null ? JSON.stringify(input) : '-'}\n </span>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// EntityCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListEntityCellProps {\n entityId?: string | null;\n}\n\nexport function ScoresDataListEntityCell({ entityId }: ScoresDataListEntityCellProps) {\n return (\n <DataListCell height=\"compact\" className=\"min-w-0\">\n <span className=\"block text-ui-smd truncate\">{entityId || '-'}</span>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// ScoreCell\n// ---------------------------------------------------------------------------\n\nexport interface ScoresDataListScoreCellProps {\n score?: unknown;\n}\n\nexport function ScoresDataListScoreCell({ score }: ScoresDataListScoreCellProps) {\n const display = score == null ? '-' : typeof score === 'object' ? JSON.stringify(score) : String(score);\n return (\n <DataListCell height=\"compact\" className=\"text-ui-smd font-mono text-neutral3\">\n {display}\n </DataListCell>\n );\n}\n","import type { ComponentProps } from 'react';\nimport { DataListNextPageLoading } from '../data-list-next-page-loading';\nimport { DataListNoMatch } from '../data-list-no-match';\nimport { DataListRoot } from '../data-list-root';\nimport { DataListRowButton } from '../data-list-row-button';\nimport { DataListTop } from '../data-list-top';\nimport { DataListTopCell } from '../data-list-top-cell';\nimport {\n ScoresDataListDateCell,\n ScoresDataListTimeCell,\n ScoresDataListInputCell,\n ScoresDataListEntityCell,\n ScoresDataListScoreCell,\n} from './scores-data-list-cells';\n\nfunction ScoresDataListRoot(props: ComponentProps<typeof DataListRoot>) {\n return <DataListRoot {...props} />;\n}\n\nexport const ScoresDataList = Object.assign(ScoresDataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n RowButton: DataListRowButton,\n NoMatch: DataListNoMatch,\n NextPageLoading: DataListNextPageLoading,\n DateCell: ScoresDataListDateCell,\n TimeCell: ScoresDataListTimeCell,\n InputCell: ScoresDataListInputCell,\n EntityCell: ScoresDataListEntityCell,\n ScoreCell: ScoresDataListScoreCell,\n});\n","import { EntityType } from '@mastra/core/observability';\nimport { CornerDownRightIcon, ListTreeIcon } from 'lucide-react';\nimport { DataListCell, DataListMonoCell } from '../data-list-cells';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport { AgentIcon } from '@/ds/icons/AgentIcon';\nimport { WorkflowIcon } from '@/ds/icons/WorkflowIcon';\nimport { Colors } from '@/ds/tokens/colors';\nimport { cn } from '@/lib/utils';\n\n// ---------------------------------------------------------------------------\n// NameCell\n// ---------------------------------------------------------------------------\n\nexport interface TracesDataListNameCellProps {\n name?: string | null;\n /** `null`/missing → root span (Trace). Set → nested span (Subtrace). Drives the leading level icon. */\n parentSpanId?: string | null;\n /** When true, the leading level icon is wrapped in a Trace/Subtrace tooltip. Off by default —\n * only meaningful in branches mode, where rows mix root traces and subtraces. */\n showLevelTooltip?: boolean;\n}\n\nexport function TracesDataListNameCell({ name, parentSpanId, showLevelTooltip }: TracesDataListNameCellProps) {\n const isRoot = parentSpanId == null;\n const Icon = isRoot ? ListTreeIcon : CornerDownRightIcon;\n const label = isRoot ? 'Trace' : 'Subtrace';\n const icon = (\n <span aria-label={label} className=\"inline-flex shrink-0\">\n <Icon className={cn('size-4 shrink-0', isRoot ? 'text-neutral3' : 'text-neutral2')} aria-hidden />\n </span>\n );\n return (\n <DataListCell height=\"compact\" className=\"text-neutral4 text-ui-smd min-w-0 flex items-center gap-2\">\n {showLevelTooltip ? (\n <Tooltip>\n <TooltipTrigger asChild>{icon}</TooltipTrigger>\n <TooltipContent>{label}</TooltipContent>\n </Tooltip>\n ) : (\n icon\n )}\n <span className=\"min-w-0 truncate\">{name || '-'}</span>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// InputCell\n// ---------------------------------------------------------------------------\n\nexport interface TracesDataListInputCellProps {\n input?: string | null;\n}\n\nexport function TracesDataListInputCell({ input }: TracesDataListInputCellProps) {\n return <DataListMonoCell>{input || '-'}</DataListMonoCell>;\n}\n\n// ---------------------------------------------------------------------------\n// EntityCell\n// ---------------------------------------------------------------------------\n\nfunction EntityTypeIcon({ entityType, className }: { entityType: string; className?: string }) {\n const iconClass = cn('size-3.5 shrink-0 text-neutral2', className);\n const normalizedEntityType = entityType.toLowerCase();\n\n switch (normalizedEntityType) {\n case EntityType.AGENT:\n return <AgentIcon className={iconClass} aria-hidden />;\n case 'workflow':\n case EntityType.WORKFLOW_RUN:\n return <WorkflowIcon className={iconClass} aria-hidden />;\n default:\n return null;\n }\n}\n\nexport interface TracesDataListEntityCellProps {\n entityType?: string | null;\n entityName?: string | null;\n}\n\nexport function TracesDataListEntityCell({ entityType, entityName }: TracesDataListEntityCellProps) {\n const type = entityType ?? '';\n\n return (\n <DataListCell height=\"compact\" className=\"flex min-w-0 items-center gap-2\">\n <EntityTypeIcon entityType={type} />\n {entityName ? <span className=\"min-w-0 text-ui-smd truncate\">{entityName}</span> : '-'}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// StatusCell\n// ---------------------------------------------------------------------------\n\nconst STATUS_CONFIG: Record<string, { label: string; color: string }> = {\n completed: { label: 'OK', color: Colors.accent2 },\n ok: { label: 'OK', color: Colors.accent2 },\n error: { label: 'ERR', color: Colors.error },\n unset: { label: '-', color: Colors.neutral4 },\n};\n\nexport interface TracesDataListStatusCellProps {\n status?: string | null;\n}\n\nexport function TracesDataListStatusCell({ status }: TracesDataListStatusCellProps) {\n const key = (status ?? 'unset').toLowerCase();\n const config = STATUS_CONFIG[key] ?? STATUS_CONFIG['unset'];\n\n return (\n <DataListCell height=\"compact\">\n <span className=\"uppercase text-ui-sm font-semibold\" style={{ color: config.color }}>\n {config.label}\n </span>\n </DataListCell>\n );\n}\n","import type { ComponentProps } from 'react';\nimport { DataListDateCell, DataListIdCell, DataListTimeCell } from '../data-list-cells';\nimport { DataListNextPageLoading } from '../data-list-next-page-loading';\nimport { DataListNoMatch } from '../data-list-no-match';\nimport { DataListRoot } from '../data-list-root';\nimport { DataListRowButton } from '../data-list-row-button';\nimport { DataListSpacer } from '../data-list-spacer';\nimport { DataListSubheader } from '../data-list-subheader';\nimport { DataListSubHeading } from '../data-list-subheading';\nimport { DataListTop } from '../data-list-top';\nimport { DataListTopCell, DataListTopCellWithTooltip } from '../data-list-top-cell';\nimport {\n TracesDataListNameCell,\n TracesDataListInputCell,\n TracesDataListEntityCell,\n TracesDataListStatusCell,\n} from './traces-data-list-cells';\n\nfunction TracesDataListRoot(props: ComponentProps<typeof DataListRoot>) {\n return <DataListRoot {...props} />;\n}\n\nexport const TracesDataList = Object.assign(TracesDataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n TopCellWithTooltip: DataListTopCellWithTooltip,\n RowButton: DataListRowButton,\n NoMatch: DataListNoMatch,\n Subheader: DataListSubheader,\n SubHeading: DataListSubHeading,\n Spacer: DataListSpacer,\n IdCell: DataListIdCell,\n DateCell: DataListDateCell,\n TimeCell: DataListTimeCell,\n NameCell: TracesDataListNameCell,\n InputCell: TracesDataListInputCell,\n EntityCell: TracesDataListEntityCell,\n StatusCell: TracesDataListStatusCell,\n NextPageLoading: DataListNextPageLoading,\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
-
import { C as CopyButton } from './copy-button-
|
|
2
|
+
import { C as CopyButton } from './copy-button-RffVknBA.js';
|
|
3
3
|
import { T as Tooltip, c as TooltipTrigger, a as TooltipContent } from './tooltip-DehuxlSR.js';
|
|
4
4
|
import { T as Txt } from './Txt-AhytBlTj.js';
|
|
5
5
|
import { c as cn } from './utils-CzYGxqbG.js';
|
|
@@ -44,4 +44,4 @@ function Truncate({
|
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
export { Truncate as T };
|
|
47
|
-
//# sourceMappingURL=truncate-
|
|
47
|
+
//# sourceMappingURL=truncate-B8_8wx-G.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"truncate-
|
|
1
|
+
{"version":3,"file":"truncate-B8_8wx-G.js","sources":["../src/ds/components/Truncate/truncate.tsx"],"sourcesContent":["import { CopyButton } from '@/ds/components/CopyButton';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport type { TxtProps } from '@/ds/components/Txt';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport interface TruncateProps extends Omit<TxtProps, 'children'> {\n children: string;\n untilChar?: string;\n charCount?: number;\n copy?: boolean;\n withTooltip?: boolean;\n}\n\nexport function Truncate({\n children,\n untilChar,\n charCount,\n copy,\n withTooltip = true,\n className,\n as = 'span',\n ...txtProps\n}: TruncateProps) {\n const fullText = children;\n\n let truncatedText = fullText;\n let isTruncated = false;\n\n if (untilChar !== undefined) {\n const index = fullText.indexOf(untilChar);\n if (index !== -1) {\n truncatedText = fullText.slice(0, index);\n isTruncated = true;\n }\n } else if (charCount !== undefined && fullText.length > charCount) {\n truncatedText = fullText.slice(0, charCount);\n isTruncated = true;\n }\n\n if (!isTruncated) {\n return (\n <Txt as={as} className={className} {...txtProps}>\n {fullText}\n </Txt>\n );\n }\n\n const truncatedContent = (\n <Txt as=\"span\" className=\"cursor-default\" variant={txtProps.variant} font={txtProps.font}>\n {truncatedText}...\n </Txt>\n );\n\n return (\n <Txt as={as} className={cn('group inline-flex items-center gap-1', className)} {...txtProps}>\n {withTooltip ? (\n <Tooltip>\n <TooltipTrigger asChild>{truncatedContent}</TooltipTrigger>\n <TooltipContent>{fullText}</TooltipContent>\n </Tooltip>\n ) : (\n truncatedContent\n )}\n {copy && <CopyButton content={fullText} className=\"opacity-0 group-hover:opacity-100 transition-opacity\" />}\n </Txt>\n );\n}\n"],"names":[],"mappings":";;;;;;AAcO,SAAS,QAAA,CAAS;AAAA,EACvB,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA,GAAc,IAAA;AAAA,EACd,SAAA;AAAA,EACA,EAAA,GAAK,MAAA;AAAA,EACL,GAAG;AACL,CAAA,EAAkB;AAChB,EAAA,MAAM,QAAA,GAAW,QAAA;AAEjB,EAAA,IAAI,aAAA,GAAgB,QAAA;AACpB,EAAA,IAAI,WAAA,GAAc,KAAA;AAElB,EAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,OAAA,CAAQ,SAAS,CAAA;AACxC,IAAA,IAAI,UAAU,EAAA,EAAI;AAChB,MAAA,aAAA,GAAgB,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AACvC,MAAA,WAAA,GAAc,IAAA;AAAA,IAChB;AAAA,EACF,CAAA,MAAA,IAAW,SAAA,KAAc,MAAA,IAAa,QAAA,CAAS,SAAS,SAAA,EAAW;AACjE,IAAA,aAAA,GAAgB,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA;AAC3C,IAAA,WAAA,GAAc,IAAA;AAAA,EAChB;AAEA,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,2BACG,GAAA,EAAA,EAAI,EAAA,EAAQ,SAAA,EAAuB,GAAG,UACpC,QAAA,EAAA,QAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,gBAAA,mBACJ,IAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAG,MAAA,EAAO,SAAA,EAAU,gBAAA,EAAiB,OAAA,EAAS,QAAA,CAAS,OAAA,EAAS,IAAA,EAAM,QAAA,CAAS,IAAA,EACjF,QAAA,EAAA;AAAA,IAAA,aAAA;AAAA,IAAc;AAAA,GAAA,EACjB,CAAA;AAGF,EAAA,uBACE,IAAA,CAAC,OAAI,EAAA,EAAQ,SAAA,EAAW,GAAG,sCAAA,EAAwC,SAAS,CAAA,EAAI,GAAG,QAAA,EAChF,QAAA,EAAA;AAAA,IAAA,WAAA,wBACE,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EAAE,QAAA,EAAA,gBAAA,EAAiB,CAAA;AAAA,sBAC1C,GAAA,CAAC,kBAAgB,QAAA,EAAA,QAAA,EAAS;AAAA,KAAA,EAC5B,CAAA,GAEA,gBAAA;AAAA,IAED,wBAAQ,GAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAS,QAAA,EAAU,WAAU,sDAAA,EAAuD;AAAA,GAAA,EAC3G,CAAA;AAEJ;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
const jsxRuntime = require('react/jsx-runtime');
|
|
4
|
-
const copyButton = require('./copy-button-
|
|
4
|
+
const copyButton = require('./copy-button-ler9dH8g.cjs');
|
|
5
5
|
const tooltip = require('./tooltip-j8gUR1Qk.cjs');
|
|
6
6
|
const Txt = require('./Txt-Cmn4ug68.cjs');
|
|
7
7
|
const utils = require('./utils-vA5sWo9W.cjs');
|
|
@@ -46,4 +46,4 @@ function Truncate({
|
|
|
46
46
|
}
|
|
47
47
|
|
|
48
48
|
exports.Truncate = Truncate;
|
|
49
|
-
//# sourceMappingURL=truncate-
|
|
49
|
+
//# sourceMappingURL=truncate-Csk5KmAy.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"truncate-
|
|
1
|
+
{"version":3,"file":"truncate-Csk5KmAy.cjs","sources":["../src/ds/components/Truncate/truncate.tsx"],"sourcesContent":["import { CopyButton } from '@/ds/components/CopyButton';\nimport { Tooltip, TooltipContent, TooltipTrigger } from '@/ds/components/Tooltip';\nimport type { TxtProps } from '@/ds/components/Txt';\nimport { Txt } from '@/ds/components/Txt';\nimport { cn } from '@/lib/utils';\n\nexport interface TruncateProps extends Omit<TxtProps, 'children'> {\n children: string;\n untilChar?: string;\n charCount?: number;\n copy?: boolean;\n withTooltip?: boolean;\n}\n\nexport function Truncate({\n children,\n untilChar,\n charCount,\n copy,\n withTooltip = true,\n className,\n as = 'span',\n ...txtProps\n}: TruncateProps) {\n const fullText = children;\n\n let truncatedText = fullText;\n let isTruncated = false;\n\n if (untilChar !== undefined) {\n const index = fullText.indexOf(untilChar);\n if (index !== -1) {\n truncatedText = fullText.slice(0, index);\n isTruncated = true;\n }\n } else if (charCount !== undefined && fullText.length > charCount) {\n truncatedText = fullText.slice(0, charCount);\n isTruncated = true;\n }\n\n if (!isTruncated) {\n return (\n <Txt as={as} className={className} {...txtProps}>\n {fullText}\n </Txt>\n );\n }\n\n const truncatedContent = (\n <Txt as=\"span\" className=\"cursor-default\" variant={txtProps.variant} font={txtProps.font}>\n {truncatedText}...\n </Txt>\n );\n\n return (\n <Txt as={as} className={cn('group inline-flex items-center gap-1', className)} {...txtProps}>\n {withTooltip ? (\n <Tooltip>\n <TooltipTrigger asChild>{truncatedContent}</TooltipTrigger>\n <TooltipContent>{fullText}</TooltipContent>\n </Tooltip>\n ) : (\n truncatedContent\n )}\n {copy && <CopyButton content={fullText} className=\"opacity-0 group-hover:opacity-100 transition-opacity\" />}\n </Txt>\n );\n}\n"],"names":["Txt","jsxs","cn","Tooltip","jsx","TooltipTrigger","TooltipContent","CopyButton"],"mappings":";;;;;;;;AAcO,SAAS,QAAA,CAAS;AAAA,EACvB,QAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA,GAAc,IAAA;AAAA,EACd,SAAA;AAAA,EACA,EAAA,GAAK,MAAA;AAAA,EACL,GAAG;AACL,CAAA,EAAkB;AAChB,EAAA,MAAM,QAAA,GAAW,QAAA;AAEjB,EAAA,IAAI,aAAA,GAAgB,QAAA;AACpB,EAAA,IAAI,WAAA,GAAc,KAAA;AAElB,EAAA,IAAI,cAAc,MAAA,EAAW;AAC3B,IAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,OAAA,CAAQ,SAAS,CAAA;AACxC,IAAA,IAAI,UAAU,EAAA,EAAI;AAChB,MAAA,aAAA,GAAgB,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AACvC,MAAA,WAAA,GAAc,IAAA;AAAA,IAChB;AAAA,EACF,CAAA,MAAA,IAAW,SAAA,KAAc,MAAA,IAAa,QAAA,CAAS,SAAS,SAAA,EAAW;AACjE,IAAA,aAAA,GAAgB,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,SAAS,CAAA;AAC3C,IAAA,WAAA,GAAc,IAAA;AAAA,EAChB;AAEA,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,sCACGA,OAAA,EAAA,EAAI,EAAA,EAAQ,SAAA,EAAuB,GAAG,UACpC,QAAA,EAAA,QAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,gBAAA,mBACJC,eAAA,CAACD,OAAA,EAAA,EAAI,EAAA,EAAG,MAAA,EAAO,SAAA,EAAU,gBAAA,EAAiB,OAAA,EAAS,QAAA,CAAS,OAAA,EAAS,IAAA,EAAM,QAAA,CAAS,IAAA,EACjF,QAAA,EAAA;AAAA,IAAA,aAAA;AAAA,IAAc;AAAA,GAAA,EACjB,CAAA;AAGF,EAAA,uBACEC,eAAA,CAACD,WAAI,EAAA,EAAQ,SAAA,EAAWE,SAAG,sCAAA,EAAwC,SAAS,CAAA,EAAI,GAAG,QAAA,EAChF,QAAA,EAAA;AAAA,IAAA,WAAA,mCACEC,eAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAACC,sBAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EAAE,QAAA,EAAA,gBAAA,EAAiB,CAAA;AAAA,sBAC1CD,cAAA,CAACE,0BAAgB,QAAA,EAAA,QAAA,EAAS;AAAA,KAAA,EAC5B,CAAA,GAEA,gBAAA;AAAA,IAED,wBAAQF,cAAA,CAACG,qBAAA,EAAA,EAAW,OAAA,EAAS,QAAA,EAAU,WAAU,sDAAA,EAAuD;AAAA,GAAA,EAC3G,CAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import React__default, { useState, useRef, useCallback } from 'react';
|
|
2
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
import { toast as toast$1, Toaster as Toaster$1 } from 'sonner';
|
|
4
|
+
import { c as cn } from './utils-CzYGxqbG.js';
|
|
5
|
+
|
|
6
|
+
import './use-copy-to-clipboard.css';const Toaster = ({ className, toastOptions, ...rest }) => /* @__PURE__ */ jsx(
|
|
7
|
+
Toaster$1,
|
|
8
|
+
{
|
|
9
|
+
...rest,
|
|
10
|
+
closeButton: true,
|
|
11
|
+
richColors: true,
|
|
12
|
+
className: cn("mastra-toaster", className),
|
|
13
|
+
toastOptions: { duration: 5e3, ...toastOptions }
|
|
14
|
+
}
|
|
15
|
+
);
|
|
16
|
+
const forEachOrOnce = (message, emit) => Array.isArray(message) ? message.map(emit) : emit(message);
|
|
17
|
+
const toast = (message, options = {}) => {
|
|
18
|
+
if (Array.isArray(message)) return message.map((m) => toast$1(m, options));
|
|
19
|
+
if (React__default.isValidElement(message) || typeof message === "string") return toast$1(message, options);
|
|
20
|
+
throw new Error("Invalid message type");
|
|
21
|
+
};
|
|
22
|
+
toast.success = (message, options = {}) => forEachOrOnce(message, (m) => toast$1.success(m, options));
|
|
23
|
+
toast.error = (message, options = {}) => forEachOrOnce(message, (m) => toast$1.error(m, options));
|
|
24
|
+
toast.warning = (message, options = {}) => forEachOrOnce(message, (m) => toast$1.warning(m, options));
|
|
25
|
+
toast.info = (message, options = {}) => forEachOrOnce(message, (m) => toast$1.info(m, options));
|
|
26
|
+
toast.custom = (message, options = {}) => toast$1(message, options);
|
|
27
|
+
toast.dismiss = (toastId) => toast$1.dismiss(toastId);
|
|
28
|
+
toast.promise = ({
|
|
29
|
+
myPromise,
|
|
30
|
+
loadingMessage,
|
|
31
|
+
successMessage,
|
|
32
|
+
errorMessage,
|
|
33
|
+
onSuccess,
|
|
34
|
+
onError,
|
|
35
|
+
options = {}
|
|
36
|
+
}) => toast$1.promise(myPromise, {
|
|
37
|
+
loading: loadingMessage ?? "Loading...",
|
|
38
|
+
success: (data) => {
|
|
39
|
+
onSuccess?.(data);
|
|
40
|
+
return successMessage;
|
|
41
|
+
},
|
|
42
|
+
error: (err) => {
|
|
43
|
+
onError?.(err);
|
|
44
|
+
if (errorMessage) return errorMessage;
|
|
45
|
+
if (err instanceof Error) return err.message;
|
|
46
|
+
return "Error...";
|
|
47
|
+
},
|
|
48
|
+
...options
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
const copyViaClipboardApi = async (value) => {
|
|
52
|
+
if (typeof navigator === "undefined" || !navigator.clipboard?.writeText) return false;
|
|
53
|
+
try {
|
|
54
|
+
await navigator.clipboard.writeText(value);
|
|
55
|
+
return true;
|
|
56
|
+
} catch {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const copyViaExecCommand = (value) => {
|
|
61
|
+
if (typeof document === "undefined" || typeof document.execCommand !== "function") return false;
|
|
62
|
+
const textarea = document.createElement("textarea");
|
|
63
|
+
const activeElement = document.activeElement instanceof HTMLElement ? document.activeElement : null;
|
|
64
|
+
textarea.value = value;
|
|
65
|
+
textarea.setAttribute("readonly", "");
|
|
66
|
+
textarea.setAttribute("aria-hidden", "true");
|
|
67
|
+
textarea.style.position = "fixed";
|
|
68
|
+
textarea.style.top = "0";
|
|
69
|
+
textarea.style.left = "0";
|
|
70
|
+
textarea.style.width = "1px";
|
|
71
|
+
textarea.style.height = "1px";
|
|
72
|
+
textarea.style.opacity = "0";
|
|
73
|
+
textarea.style.pointerEvents = "none";
|
|
74
|
+
document.body.appendChild(textarea);
|
|
75
|
+
try {
|
|
76
|
+
textarea.focus();
|
|
77
|
+
textarea.select();
|
|
78
|
+
textarea.setSelectionRange(0, value.length);
|
|
79
|
+
return document.execCommand("copy");
|
|
80
|
+
} catch {
|
|
81
|
+
return false;
|
|
82
|
+
} finally {
|
|
83
|
+
textarea.remove();
|
|
84
|
+
activeElement?.focus({ preventScroll: true });
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
const copyTextToClipboard = async (value) => {
|
|
88
|
+
if (!value) return false;
|
|
89
|
+
if (await copyViaClipboardApi(value)) return true;
|
|
90
|
+
return copyViaExecCommand(value);
|
|
91
|
+
};
|
|
92
|
+
function useCopyToClipboard(props) {
|
|
93
|
+
const { copyMessage = "Copied to clipboard!", copiedDuration = 2e3, showToast = true } = props;
|
|
94
|
+
const hasConfiguredText = "text" in props;
|
|
95
|
+
const text = hasConfiguredText ? props.text : void 0;
|
|
96
|
+
const [isCopied, setIsCopied] = useState(false);
|
|
97
|
+
const timeoutRef = useRef(null);
|
|
98
|
+
const copyToClipboard = useCallback(
|
|
99
|
+
(value) => {
|
|
100
|
+
void copyTextToClipboard(value).then((copied) => {
|
|
101
|
+
if (!copied) {
|
|
102
|
+
if (showToast) toast.error("Failed to copy to clipboard.");
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (showToast) toast.success(copyMessage);
|
|
106
|
+
setIsCopied(true);
|
|
107
|
+
if (timeoutRef.current) {
|
|
108
|
+
clearTimeout(timeoutRef.current);
|
|
109
|
+
timeoutRef.current = null;
|
|
110
|
+
}
|
|
111
|
+
timeoutRef.current = setTimeout(() => {
|
|
112
|
+
setIsCopied(false);
|
|
113
|
+
}, copiedDuration);
|
|
114
|
+
});
|
|
115
|
+
},
|
|
116
|
+
[copiedDuration, copyMessage, showToast]
|
|
117
|
+
);
|
|
118
|
+
const handleCopy = useCallback(() => {
|
|
119
|
+
if (!text) return;
|
|
120
|
+
copyToClipboard(text);
|
|
121
|
+
}, [copyToClipboard, text]);
|
|
122
|
+
if (!hasConfiguredText) return { isCopied, copyToClipboard };
|
|
123
|
+
return { isCopied, handleCopy, copyToClipboard };
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export { Toaster as T, toast as t, useCopyToClipboard as u };
|
|
127
|
+
//# sourceMappingURL=use-copy-to-clipboard-D7L_l6_x.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-copy-to-clipboard-D7L_l6_x.js","sources":["../src/lib/toast.tsx","../src/hooks/use-copy-to-clipboard.ts"],"sourcesContent":["import type { ReactNode } from 'react';\nimport React from 'react';\nimport type { ExternalToast, ToasterProps } from 'sonner';\nimport { toast as sonnerToast, Toaster as SonnerToaster } from 'sonner';\n\nimport { cn } from '@/lib/utils';\n\nimport './toast.css';\n\n// All theming lives in `.mastra-toaster` (see toast.css) — sonner reads --success-bg / --error-bg / etc.\n// from richColors mode. `rest` is spread first so callers can't override the closeButton / richColors\n// contract (sonner's per-type tinted colors only kick in with richColors, and the close button is the\n// only built-in dismiss affordance we expose).\nexport const Toaster = ({ className, toastOptions, ...rest }: ToasterProps) => (\n <SonnerToaster\n {...rest}\n closeButton\n richColors\n className={cn('mastra-toaster', className)}\n toastOptions={{ duration: 5000, ...toastOptions }}\n />\n);\n\n// Forward sonner's return value so callers can update/dismiss by id later.\nconst forEachOrOnce = <M, R>(message: M | M[], emit: (m: M) => R): R | R[] =>\n Array.isArray(message) ? message.map(emit) : emit(message);\n\nexport const toast = (message: string | string[] | ReactNode, options: ExternalToast = {}) => {\n if (Array.isArray(message)) return message.map(m => sonnerToast(m, options));\n if (React.isValidElement(message) || typeof message === 'string') return sonnerToast(message, options);\n throw new Error('Invalid message type');\n};\n\ntoast.success = (message: string | string[], options: ExternalToast = {}) =>\n forEachOrOnce(message, m => sonnerToast.success(m, options));\ntoast.error = (message: string | string[], options: ExternalToast = {}) =>\n forEachOrOnce(message, m => sonnerToast.error(m, options));\ntoast.warning = (message: string | string[], options: ExternalToast = {}) =>\n forEachOrOnce(message, m => sonnerToast.warning(m, options));\ntoast.info = (message: string | string[], options: ExternalToast = {}) =>\n forEachOrOnce(message, m => sonnerToast.info(m, options));\n\ntoast.custom = (message: ReactNode, options: ExternalToast = {}) => sonnerToast(message, options);\n\ntoast.dismiss = (toastId?: string | number) => sonnerToast.dismiss(toastId);\n\ntoast.promise = <T,>({\n myPromise,\n loadingMessage,\n successMessage,\n errorMessage,\n onSuccess,\n onError,\n options = {},\n}: {\n myPromise: Promise<T>;\n successMessage: string;\n loadingMessage?: string;\n errorMessage?: string;\n onSuccess?: (data: T) => void;\n onError?: (err: unknown) => void;\n options?: ExternalToast;\n}) =>\n sonnerToast.promise(myPromise, {\n loading: loadingMessage ?? 'Loading...',\n success: (data: T) => {\n onSuccess?.(data);\n return successMessage;\n },\n error: (err: unknown) => {\n onError?.(err);\n if (errorMessage) return errorMessage;\n if (err instanceof Error) return err.message;\n return 'Error...';\n },\n ...options,\n });\n","import { useCallback, useRef, useState } from 'react';\nimport { toast } from '@/lib/toast';\n\ntype UseCopyToClipboardProps = {\n text: string;\n copyMessage?: string;\n copiedDuration?: number;\n showToast?: boolean;\n};\n\ntype UseCopyToClipboardOptions = Omit<UseCopyToClipboardProps, 'text'>;\n\ntype UseCopyToClipboardDynamicResult = {\n isCopied: boolean;\n copyToClipboard: (value: string) => void;\n};\n\ntype UseCopyToClipboardConfiguredResult = UseCopyToClipboardDynamicResult & {\n handleCopy: () => void;\n};\n\nconst copyViaClipboardApi = async (value: string): Promise<boolean> => {\n if (typeof navigator === 'undefined' || !navigator.clipboard?.writeText) return false;\n\n try {\n await navigator.clipboard.writeText(value);\n return true;\n } catch {\n return false;\n }\n};\n\nconst copyViaExecCommand = (value: string): boolean => {\n if (typeof document === 'undefined' || typeof document.execCommand !== 'function') return false;\n\n const textarea = document.createElement('textarea');\n const activeElement = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n\n textarea.value = value;\n textarea.setAttribute('readonly', '');\n textarea.setAttribute('aria-hidden', 'true');\n textarea.style.position = 'fixed';\n textarea.style.top = '0';\n textarea.style.left = '0';\n textarea.style.width = '1px';\n textarea.style.height = '1px';\n textarea.style.opacity = '0';\n textarea.style.pointerEvents = 'none';\n\n document.body.appendChild(textarea);\n\n try {\n textarea.focus();\n textarea.select();\n textarea.setSelectionRange(0, value.length);\n return document.execCommand('copy');\n } catch {\n return false;\n } finally {\n textarea.remove();\n activeElement?.focus({ preventScroll: true });\n }\n};\n\nconst copyTextToClipboard = async (value: string): Promise<boolean> => {\n if (!value) return false;\n\n if (await copyViaClipboardApi(value)) return true;\n\n return copyViaExecCommand(value);\n};\n\nexport function useCopyToClipboard(props: UseCopyToClipboardProps): UseCopyToClipboardConfiguredResult;\nexport function useCopyToClipboard(props: UseCopyToClipboardOptions): UseCopyToClipboardDynamicResult;\nexport function useCopyToClipboard(props: UseCopyToClipboardProps | UseCopyToClipboardOptions) {\n const { copyMessage = 'Copied to clipboard!', copiedDuration = 2000, showToast = true } = props;\n const hasConfiguredText = 'text' in props;\n const text = hasConfiguredText ? props.text : undefined;\n const [isCopied, setIsCopied] = useState(false);\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n const copyToClipboard = useCallback(\n (value: string) => {\n void copyTextToClipboard(value).then(copied => {\n if (!copied) {\n if (showToast) toast.error('Failed to copy to clipboard.');\n return;\n }\n\n if (showToast) toast.success(copyMessage);\n setIsCopied(true);\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n timeoutRef.current = setTimeout(() => {\n setIsCopied(false);\n }, copiedDuration);\n });\n },\n [copiedDuration, copyMessage, showToast],\n );\n\n const handleCopy = useCallback(() => {\n if (!text) return;\n copyToClipboard(text);\n }, [copyToClipboard, text]);\n\n if (!hasConfiguredText) return { isCopied, copyToClipboard };\n\n return { isCopied, handleCopy, copyToClipboard };\n}\n"],"names":["SonnerToaster","sonnerToast","React"],"mappings":";;;;;AAaO,MAAM,UAAU,CAAC,EAAE,WAAW,YAAA,EAAc,GAAG,MAAK,qBACzD,GAAA;AAAA,EAACA,SAAA;AAAA,EAAA;AAAA,IACE,GAAG,IAAA;AAAA,IACJ,WAAA,EAAW,IAAA;AAAA,IACX,UAAA,EAAU,IAAA;AAAA,IACV,SAAA,EAAW,EAAA,CAAG,gBAAA,EAAkB,SAAS,CAAA;AAAA,IACzC,YAAA,EAAc,EAAE,QAAA,EAAU,GAAA,EAAM,GAAG,YAAA;AAAa;AAClD;AAIF,MAAM,aAAA,GAAgB,CAAO,OAAA,EAAkB,IAAA,KAC7C,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,GAAI,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,GAAI,KAAK,OAAO,CAAA;AAEpD,MAAM,KAAA,GAAQ,CAAC,OAAA,EAAwC,OAAA,GAAyB,EAAC,KAAM;AAC5F,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAA,CAAA,KAAKC,OAAA,CAAY,CAAA,EAAG,OAAO,CAAC,CAAA;AAC3E,EAAA,IAAIC,cAAA,CAAM,cAAA,CAAe,OAAO,CAAA,IAAK,OAAO,YAAY,QAAA,EAAU,OAAOD,OAAA,CAAY,OAAA,EAAS,OAAO,CAAA;AACrG,EAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AACxC;AAEA,KAAA,CAAM,OAAA,GAAU,CAAC,OAAA,EAA4B,OAAA,GAAyB,EAAC,KACrE,aAAA,CAAc,OAAA,EAAS,CAAA,CAAA,KAAKA,OAAA,CAAY,OAAA,CAAQ,CAAA,EAAG,OAAO,CAAC,CAAA;AAC7D,KAAA,CAAM,KAAA,GAAQ,CAAC,OAAA,EAA4B,OAAA,GAAyB,EAAC,KACnE,aAAA,CAAc,OAAA,EAAS,CAAA,CAAA,KAAKA,OAAA,CAAY,KAAA,CAAM,CAAA,EAAG,OAAO,CAAC,CAAA;AAC3D,KAAA,CAAM,OAAA,GAAU,CAAC,OAAA,EAA4B,OAAA,GAAyB,EAAC,KACrE,aAAA,CAAc,OAAA,EAAS,CAAA,CAAA,KAAKA,OAAA,CAAY,OAAA,CAAQ,CAAA,EAAG,OAAO,CAAC,CAAA;AAC7D,KAAA,CAAM,IAAA,GAAO,CAAC,OAAA,EAA4B,OAAA,GAAyB,EAAC,KAClE,aAAA,CAAc,OAAA,EAAS,CAAA,CAAA,KAAKA,OAAA,CAAY,IAAA,CAAK,CAAA,EAAG,OAAO,CAAC,CAAA;AAE1D,KAAA,CAAM,MAAA,GAAS,CAAC,OAAA,EAAoB,OAAA,GAAyB,EAAC,KAAMA,OAAA,CAAY,SAAS,OAAO,CAAA;AAEhG,KAAA,CAAM,OAAA,GAAU,CAAC,OAAA,KAA8BA,OAAA,CAAY,QAAQ,OAAO,CAAA;AAE1E,KAAA,CAAM,UAAU,CAAK;AAAA,EACnB,SAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAU;AACZ,CAAA,KASEA,OAAA,CAAY,QAAQ,SAAA,EAAW;AAAA,EAC7B,SAAS,cAAA,IAAkB,YAAA;AAAA,EAC3B,OAAA,EAAS,CAAC,IAAA,KAAY;AACpB,IAAA,SAAA,GAAY,IAAI,CAAA;AAChB,IAAA,OAAO,cAAA;AAAA,EACT,CAAA;AAAA,EACA,KAAA,EAAO,CAAC,GAAA,KAAiB;AACvB,IAAA,OAAA,GAAU,GAAG,CAAA;AACb,IAAA,IAAI,cAAc,OAAO,YAAA;AACzB,IAAA,IAAI,GAAA,YAAe,KAAA,EAAO,OAAO,GAAA,CAAI,OAAA;AACrC,IAAA,OAAO,UAAA;AAAA,EACT,CAAA;AAAA,EACA,GAAG;AACL,CAAC,CAAA;;ACvDH,MAAM,mBAAA,GAAsB,OAAO,KAAA,KAAoC;AACrE,EAAA,IAAI,OAAO,SAAA,KAAc,WAAA,IAAe,CAAC,SAAA,CAAU,SAAA,EAAW,WAAW,OAAO,KAAA;AAEhF,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,KAAK,CAAA;AACzC,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF,CAAA;AAEA,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAA2B;AACrD,EAAA,IAAI,OAAO,QAAA,KAAa,WAAA,IAAe,OAAO,QAAA,CAAS,WAAA,KAAgB,YAAY,OAAO,KAAA;AAE1F,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,aAAA,CAAc,UAAU,CAAA;AAClD,EAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,aAAA,YAAyB,WAAA,GAAc,SAAS,aAAA,GAAgB,IAAA;AAE/F,EAAA,QAAA,CAAS,KAAA,GAAQ,KAAA;AACjB,EAAA,QAAA,CAAS,YAAA,CAAa,YAAY,EAAE,CAAA;AACpC,EAAA,QAAA,CAAS,YAAA,CAAa,eAAe,MAAM,CAAA;AAC3C,EAAA,QAAA,CAAS,MAAM,QAAA,GAAW,OAAA;AAC1B,EAAA,QAAA,CAAS,MAAM,GAAA,GAAM,GAAA;AACrB,EAAA,QAAA,CAAS,MAAM,IAAA,GAAO,GAAA;AACtB,EAAA,QAAA,CAAS,MAAM,KAAA,GAAQ,KAAA;AACvB,EAAA,QAAA,CAAS,MAAM,MAAA,GAAS,KAAA;AACxB,EAAA,QAAA,CAAS,MAAM,OAAA,GAAU,GAAA;AACzB,EAAA,QAAA,CAAS,MAAM,aAAA,GAAgB,MAAA;AAE/B,EAAA,QAAA,CAAS,IAAA,CAAK,YAAY,QAAQ,CAAA;AAElC,EAAA,IAAI;AACF,IAAA,QAAA,CAAS,KAAA,EAAM;AACf,IAAA,QAAA,CAAS,MAAA,EAAO;AAChB,IAAA,QAAA,CAAS,iBAAA,CAAkB,CAAA,EAAG,KAAA,CAAM,MAAM,CAAA;AAC1C,IAAA,OAAO,QAAA,CAAS,YAAY,MAAM,CAAA;AAAA,EACpC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,SAAE;AACA,IAAA,QAAA,CAAS,MAAA,EAAO;AAChB,IAAA,aAAA,EAAe,KAAA,CAAM,EAAE,aAAA,EAAe,IAAA,EAAM,CAAA;AAAA,EAC9C;AACF,CAAA;AAEA,MAAM,mBAAA,GAAsB,OAAO,KAAA,KAAoC;AACrE,EAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AAEnB,EAAA,IAAI,MAAM,mBAAA,CAAoB,KAAK,CAAA,EAAG,OAAO,IAAA;AAE7C,EAAA,OAAO,mBAAmB,KAAK,CAAA;AACjC,CAAA;AAIO,SAAS,mBAAmB,KAAA,EAA4D;AAC7F,EAAA,MAAM,EAAE,WAAA,GAAc,sBAAA,EAAwB,iBAAiB,GAAA,EAAM,SAAA,GAAY,MAAK,GAAI,KAAA;AAC1F,EAAA,MAAM,oBAAoB,MAAA,IAAU,KAAA;AACpC,EAAA,MAAM,IAAA,GAAO,iBAAA,GAAoB,KAAA,CAAM,IAAA,GAAO,MAAA;AAC9C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,UAAA,GAAa,OAA8B,IAAI,CAAA;AAErD,EAAA,MAAM,eAAA,GAAkB,WAAA;AAAA,IACtB,CAAC,KAAA,KAAkB;AACjB,MAAA,KAAK,mBAAA,CAAoB,KAAK,CAAA,CAAE,IAAA,CAAK,CAAA,MAAA,KAAU;AAC7C,QAAA,IAAI,CAAC,MAAA,EAAQ;AACX,UAAA,IAAI,SAAA,EAAW,KAAA,CAAM,KAAA,CAAM,8BAA8B,CAAA;AACzD,UAAA;AAAA,QACF;AAEA,QAAA,IAAI,SAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA;AACxC,QAAA,WAAA,CAAY,IAAI,CAAA;AAChB,QAAA,IAAI,WAAW,OAAA,EAAS;AACtB,UAAA,YAAA,CAAa,WAAW,OAAO,CAAA;AAC/B,UAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,QACvB;AACA,QAAA,UAAA,CAAW,OAAA,GAAU,WAAW,MAAM;AACpC,UAAA,WAAA,CAAY,KAAK,CAAA;AAAA,QACnB,GAAG,cAAc,CAAA;AAAA,MACnB,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IACA,CAAC,cAAA,EAAgB,WAAA,EAAa,SAAS;AAAA,GACzC;AAEA,EAAA,MAAM,UAAA,GAAa,YAAY,MAAM;AACnC,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,EACtB,CAAA,EAAG,CAAC,eAAA,EAAiB,IAAI,CAAC,CAAA;AAE1B,EAAA,IAAI,CAAC,iBAAA,EAAmB,OAAO,EAAE,UAAU,eAAA,EAAgB;AAE3D,EAAA,OAAO,EAAE,QAAA,EAAU,UAAA,EAAY,eAAA,EAAgB;AACjD;;;;"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
require('./use-copy-to-clipboard.css');const React = require('react');
|
|
4
|
+
const jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
const sonner = require('sonner');
|
|
6
|
+
const utils = require('./utils-vA5sWo9W.cjs');
|
|
7
|
+
|
|
8
|
+
const Toaster = ({ className, toastOptions, ...rest }) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
9
|
+
sonner.Toaster,
|
|
10
|
+
{
|
|
11
|
+
...rest,
|
|
12
|
+
closeButton: true,
|
|
13
|
+
richColors: true,
|
|
14
|
+
className: utils.cn("mastra-toaster", className),
|
|
15
|
+
toastOptions: { duration: 5e3, ...toastOptions }
|
|
16
|
+
}
|
|
17
|
+
);
|
|
18
|
+
const forEachOrOnce = (message, emit) => Array.isArray(message) ? message.map(emit) : emit(message);
|
|
19
|
+
const toast = (message, options = {}) => {
|
|
20
|
+
if (Array.isArray(message)) return message.map((m) => sonner.toast(m, options));
|
|
21
|
+
if (React.isValidElement(message) || typeof message === "string") return sonner.toast(message, options);
|
|
22
|
+
throw new Error("Invalid message type");
|
|
23
|
+
};
|
|
24
|
+
toast.success = (message, options = {}) => forEachOrOnce(message, (m) => sonner.toast.success(m, options));
|
|
25
|
+
toast.error = (message, options = {}) => forEachOrOnce(message, (m) => sonner.toast.error(m, options));
|
|
26
|
+
toast.warning = (message, options = {}) => forEachOrOnce(message, (m) => sonner.toast.warning(m, options));
|
|
27
|
+
toast.info = (message, options = {}) => forEachOrOnce(message, (m) => sonner.toast.info(m, options));
|
|
28
|
+
toast.custom = (message, options = {}) => sonner.toast(message, options);
|
|
29
|
+
toast.dismiss = (toastId) => sonner.toast.dismiss(toastId);
|
|
30
|
+
toast.promise = ({
|
|
31
|
+
myPromise,
|
|
32
|
+
loadingMessage,
|
|
33
|
+
successMessage,
|
|
34
|
+
errorMessage,
|
|
35
|
+
onSuccess,
|
|
36
|
+
onError,
|
|
37
|
+
options = {}
|
|
38
|
+
}) => sonner.toast.promise(myPromise, {
|
|
39
|
+
loading: loadingMessage ?? "Loading...",
|
|
40
|
+
success: (data) => {
|
|
41
|
+
onSuccess?.(data);
|
|
42
|
+
return successMessage;
|
|
43
|
+
},
|
|
44
|
+
error: (err) => {
|
|
45
|
+
onError?.(err);
|
|
46
|
+
if (errorMessage) return errorMessage;
|
|
47
|
+
if (err instanceof Error) return err.message;
|
|
48
|
+
return "Error...";
|
|
49
|
+
},
|
|
50
|
+
...options
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
const copyViaClipboardApi = async (value) => {
|
|
54
|
+
if (typeof navigator === "undefined" || !navigator.clipboard?.writeText) return false;
|
|
55
|
+
try {
|
|
56
|
+
await navigator.clipboard.writeText(value);
|
|
57
|
+
return true;
|
|
58
|
+
} catch {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
const copyViaExecCommand = (value) => {
|
|
63
|
+
if (typeof document === "undefined" || typeof document.execCommand !== "function") return false;
|
|
64
|
+
const textarea = document.createElement("textarea");
|
|
65
|
+
const activeElement = document.activeElement instanceof HTMLElement ? document.activeElement : null;
|
|
66
|
+
textarea.value = value;
|
|
67
|
+
textarea.setAttribute("readonly", "");
|
|
68
|
+
textarea.setAttribute("aria-hidden", "true");
|
|
69
|
+
textarea.style.position = "fixed";
|
|
70
|
+
textarea.style.top = "0";
|
|
71
|
+
textarea.style.left = "0";
|
|
72
|
+
textarea.style.width = "1px";
|
|
73
|
+
textarea.style.height = "1px";
|
|
74
|
+
textarea.style.opacity = "0";
|
|
75
|
+
textarea.style.pointerEvents = "none";
|
|
76
|
+
document.body.appendChild(textarea);
|
|
77
|
+
try {
|
|
78
|
+
textarea.focus();
|
|
79
|
+
textarea.select();
|
|
80
|
+
textarea.setSelectionRange(0, value.length);
|
|
81
|
+
return document.execCommand("copy");
|
|
82
|
+
} catch {
|
|
83
|
+
return false;
|
|
84
|
+
} finally {
|
|
85
|
+
textarea.remove();
|
|
86
|
+
activeElement?.focus({ preventScroll: true });
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
const copyTextToClipboard = async (value) => {
|
|
90
|
+
if (!value) return false;
|
|
91
|
+
if (await copyViaClipboardApi(value)) return true;
|
|
92
|
+
return copyViaExecCommand(value);
|
|
93
|
+
};
|
|
94
|
+
function useCopyToClipboard(props) {
|
|
95
|
+
const { copyMessage = "Copied to clipboard!", copiedDuration = 2e3, showToast = true } = props;
|
|
96
|
+
const hasConfiguredText = "text" in props;
|
|
97
|
+
const text = hasConfiguredText ? props.text : void 0;
|
|
98
|
+
const [isCopied, setIsCopied] = React.useState(false);
|
|
99
|
+
const timeoutRef = React.useRef(null);
|
|
100
|
+
const copyToClipboard = React.useCallback(
|
|
101
|
+
(value) => {
|
|
102
|
+
void copyTextToClipboard(value).then((copied) => {
|
|
103
|
+
if (!copied) {
|
|
104
|
+
if (showToast) toast.error("Failed to copy to clipboard.");
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (showToast) toast.success(copyMessage);
|
|
108
|
+
setIsCopied(true);
|
|
109
|
+
if (timeoutRef.current) {
|
|
110
|
+
clearTimeout(timeoutRef.current);
|
|
111
|
+
timeoutRef.current = null;
|
|
112
|
+
}
|
|
113
|
+
timeoutRef.current = setTimeout(() => {
|
|
114
|
+
setIsCopied(false);
|
|
115
|
+
}, copiedDuration);
|
|
116
|
+
});
|
|
117
|
+
},
|
|
118
|
+
[copiedDuration, copyMessage, showToast]
|
|
119
|
+
);
|
|
120
|
+
const handleCopy = React.useCallback(() => {
|
|
121
|
+
if (!text) return;
|
|
122
|
+
copyToClipboard(text);
|
|
123
|
+
}, [copyToClipboard, text]);
|
|
124
|
+
if (!hasConfiguredText) return { isCopied, copyToClipboard };
|
|
125
|
+
return { isCopied, handleCopy, copyToClipboard };
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
exports.Toaster = Toaster;
|
|
129
|
+
exports.toast = toast;
|
|
130
|
+
exports.useCopyToClipboard = useCopyToClipboard;
|
|
131
|
+
//# sourceMappingURL=use-copy-to-clipboard-DHaJCGet.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-copy-to-clipboard-DHaJCGet.cjs","sources":["../src/lib/toast.tsx","../src/hooks/use-copy-to-clipboard.ts"],"sourcesContent":["import type { ReactNode } from 'react';\nimport React from 'react';\nimport type { ExternalToast, ToasterProps } from 'sonner';\nimport { toast as sonnerToast, Toaster as SonnerToaster } from 'sonner';\n\nimport { cn } from '@/lib/utils';\n\nimport './toast.css';\n\n// All theming lives in `.mastra-toaster` (see toast.css) — sonner reads --success-bg / --error-bg / etc.\n// from richColors mode. `rest` is spread first so callers can't override the closeButton / richColors\n// contract (sonner's per-type tinted colors only kick in with richColors, and the close button is the\n// only built-in dismiss affordance we expose).\nexport const Toaster = ({ className, toastOptions, ...rest }: ToasterProps) => (\n <SonnerToaster\n {...rest}\n closeButton\n richColors\n className={cn('mastra-toaster', className)}\n toastOptions={{ duration: 5000, ...toastOptions }}\n />\n);\n\n// Forward sonner's return value so callers can update/dismiss by id later.\nconst forEachOrOnce = <M, R>(message: M | M[], emit: (m: M) => R): R | R[] =>\n Array.isArray(message) ? message.map(emit) : emit(message);\n\nexport const toast = (message: string | string[] | ReactNode, options: ExternalToast = {}) => {\n if (Array.isArray(message)) return message.map(m => sonnerToast(m, options));\n if (React.isValidElement(message) || typeof message === 'string') return sonnerToast(message, options);\n throw new Error('Invalid message type');\n};\n\ntoast.success = (message: string | string[], options: ExternalToast = {}) =>\n forEachOrOnce(message, m => sonnerToast.success(m, options));\ntoast.error = (message: string | string[], options: ExternalToast = {}) =>\n forEachOrOnce(message, m => sonnerToast.error(m, options));\ntoast.warning = (message: string | string[], options: ExternalToast = {}) =>\n forEachOrOnce(message, m => sonnerToast.warning(m, options));\ntoast.info = (message: string | string[], options: ExternalToast = {}) =>\n forEachOrOnce(message, m => sonnerToast.info(m, options));\n\ntoast.custom = (message: ReactNode, options: ExternalToast = {}) => sonnerToast(message, options);\n\ntoast.dismiss = (toastId?: string | number) => sonnerToast.dismiss(toastId);\n\ntoast.promise = <T,>({\n myPromise,\n loadingMessage,\n successMessage,\n errorMessage,\n onSuccess,\n onError,\n options = {},\n}: {\n myPromise: Promise<T>;\n successMessage: string;\n loadingMessage?: string;\n errorMessage?: string;\n onSuccess?: (data: T) => void;\n onError?: (err: unknown) => void;\n options?: ExternalToast;\n}) =>\n sonnerToast.promise(myPromise, {\n loading: loadingMessage ?? 'Loading...',\n success: (data: T) => {\n onSuccess?.(data);\n return successMessage;\n },\n error: (err: unknown) => {\n onError?.(err);\n if (errorMessage) return errorMessage;\n if (err instanceof Error) return err.message;\n return 'Error...';\n },\n ...options,\n });\n","import { useCallback, useRef, useState } from 'react';\nimport { toast } from '@/lib/toast';\n\ntype UseCopyToClipboardProps = {\n text: string;\n copyMessage?: string;\n copiedDuration?: number;\n showToast?: boolean;\n};\n\ntype UseCopyToClipboardOptions = Omit<UseCopyToClipboardProps, 'text'>;\n\ntype UseCopyToClipboardDynamicResult = {\n isCopied: boolean;\n copyToClipboard: (value: string) => void;\n};\n\ntype UseCopyToClipboardConfiguredResult = UseCopyToClipboardDynamicResult & {\n handleCopy: () => void;\n};\n\nconst copyViaClipboardApi = async (value: string): Promise<boolean> => {\n if (typeof navigator === 'undefined' || !navigator.clipboard?.writeText) return false;\n\n try {\n await navigator.clipboard.writeText(value);\n return true;\n } catch {\n return false;\n }\n};\n\nconst copyViaExecCommand = (value: string): boolean => {\n if (typeof document === 'undefined' || typeof document.execCommand !== 'function') return false;\n\n const textarea = document.createElement('textarea');\n const activeElement = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n\n textarea.value = value;\n textarea.setAttribute('readonly', '');\n textarea.setAttribute('aria-hidden', 'true');\n textarea.style.position = 'fixed';\n textarea.style.top = '0';\n textarea.style.left = '0';\n textarea.style.width = '1px';\n textarea.style.height = '1px';\n textarea.style.opacity = '0';\n textarea.style.pointerEvents = 'none';\n\n document.body.appendChild(textarea);\n\n try {\n textarea.focus();\n textarea.select();\n textarea.setSelectionRange(0, value.length);\n return document.execCommand('copy');\n } catch {\n return false;\n } finally {\n textarea.remove();\n activeElement?.focus({ preventScroll: true });\n }\n};\n\nconst copyTextToClipboard = async (value: string): Promise<boolean> => {\n if (!value) return false;\n\n if (await copyViaClipboardApi(value)) return true;\n\n return copyViaExecCommand(value);\n};\n\nexport function useCopyToClipboard(props: UseCopyToClipboardProps): UseCopyToClipboardConfiguredResult;\nexport function useCopyToClipboard(props: UseCopyToClipboardOptions): UseCopyToClipboardDynamicResult;\nexport function useCopyToClipboard(props: UseCopyToClipboardProps | UseCopyToClipboardOptions) {\n const { copyMessage = 'Copied to clipboard!', copiedDuration = 2000, showToast = true } = props;\n const hasConfiguredText = 'text' in props;\n const text = hasConfiguredText ? props.text : undefined;\n const [isCopied, setIsCopied] = useState(false);\n const timeoutRef = useRef<NodeJS.Timeout | null>(null);\n\n const copyToClipboard = useCallback(\n (value: string) => {\n void copyTextToClipboard(value).then(copied => {\n if (!copied) {\n if (showToast) toast.error('Failed to copy to clipboard.');\n return;\n }\n\n if (showToast) toast.success(copyMessage);\n setIsCopied(true);\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n timeoutRef.current = setTimeout(() => {\n setIsCopied(false);\n }, copiedDuration);\n });\n },\n [copiedDuration, copyMessage, showToast],\n );\n\n const handleCopy = useCallback(() => {\n if (!text) return;\n copyToClipboard(text);\n }, [copyToClipboard, text]);\n\n if (!hasConfiguredText) return { isCopied, copyToClipboard };\n\n return { isCopied, handleCopy, copyToClipboard };\n}\n"],"names":["jsx","SonnerToaster","cn","sonnerToast","useState","useRef","useCallback"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mastra/playground-ui",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "35.0.
|
|
4
|
+
"version": "35.1.0-alpha.1",
|
|
5
5
|
"description": "Mastra Playground components",
|
|
6
6
|
"main": "dist/index.umd.js",
|
|
7
7
|
"module": "dist/index.es.js",
|
|
@@ -43,6 +43,12 @@
|
|
|
43
43
|
"default": "./dist/utils.cjs.js"
|
|
44
44
|
}
|
|
45
45
|
},
|
|
46
|
+
"./hooks/*": {
|
|
47
|
+
"import": {
|
|
48
|
+
"types": "./dist/hooks/*.d.ts",
|
|
49
|
+
"default": "./dist/hooks/*.es.js"
|
|
50
|
+
}
|
|
51
|
+
},
|
|
46
52
|
"./components/*": {
|
|
47
53
|
"import": {
|
|
48
54
|
"types": "./dist/components/*.d.ts",
|
|
@@ -96,8 +102,8 @@
|
|
|
96
102
|
"react": ">=19.0.0",
|
|
97
103
|
"react-dom": ">=19.0.0",
|
|
98
104
|
"tailwindcss": "^4.0.0",
|
|
99
|
-
"@mastra/client-js": "^1.26.
|
|
100
|
-
"@mastra/react": "1.1.
|
|
105
|
+
"@mastra/client-js": "^1.26.1-alpha.1",
|
|
106
|
+
"@mastra/react": "1.1.1-alpha.1"
|
|
101
107
|
},
|
|
102
108
|
"devDependencies": {
|
|
103
109
|
"@storybook/addon-a11y": "^10.4.1",
|
|
@@ -134,10 +140,10 @@
|
|
|
134
140
|
"vite-plugin-dts": "^4.5.4",
|
|
135
141
|
"vite-plugin-lib-inject-css": "^2.2.2",
|
|
136
142
|
"vitest": "4.1.8",
|
|
137
|
-
"@mastra/core": "1.45.0",
|
|
138
143
|
"@internal/lint": "0.0.107",
|
|
139
|
-
"@mastra/
|
|
140
|
-
"@mastra/
|
|
144
|
+
"@mastra/client-js": "^1.26.1-alpha.1",
|
|
145
|
+
"@mastra/core": "1.46.0-alpha.1",
|
|
146
|
+
"@mastra/react": "1.1.1-alpha.1"
|
|
141
147
|
},
|
|
142
148
|
"homepage": "https://mastra.ai",
|
|
143
149
|
"repository": {
|