@toolpath/ui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +44 -0
- package/dist/index.d.ts +1174 -0
- package/dist/index.js +5934 -0
- package/package.json +68 -0
- package/src/attribution/action.tsx +13 -0
- package/src/attribution/at.tsx +28 -0
- package/src/attribution/attribution.tsx +16 -0
- package/src/attribution/by.tsx +21 -0
- package/src/attribution/format-time.ts +48 -0
- package/src/attribution/index.ts +20 -0
- package/src/badge/badge.tsx +38 -0
- package/src/badge/index.ts +1 -0
- package/src/breadcrumbs/breadcrumbs-context.tsx +26 -0
- package/src/breadcrumbs/breadcrumbs.tsx +24 -0
- package/src/breadcrumbs/index.ts +12 -0
- package/src/breadcrumbs/item.tsx +85 -0
- package/src/button/animated-ellipsis.tsx +44 -0
- package/src/button/button.tsx +168 -0
- package/src/button/index.ts +1 -0
- package/src/callout/callout.tsx +202 -0
- package/src/callout/index.ts +2 -0
- package/src/callout/use-dismissed-callouts.ts +78 -0
- package/src/card/card.tsx +19 -0
- package/src/card/index.ts +2 -0
- package/src/checkbox/checkbox.tsx +76 -0
- package/src/checkbox/index.ts +1 -0
- package/src/combobox/button.tsx +99 -0
- package/src/combobox/combobox-context.tsx +42 -0
- package/src/combobox/combobox.tsx +60 -0
- package/src/combobox/empty.tsx +21 -0
- package/src/combobox/group-label.tsx +20 -0
- package/src/combobox/group.tsx +11 -0
- package/src/combobox/icon.tsx +11 -0
- package/src/combobox/index.tsx +64 -0
- package/src/combobox/input.tsx +77 -0
- package/src/combobox/item-indicator.tsx +16 -0
- package/src/combobox/item.tsx +58 -0
- package/src/combobox/list.tsx +19 -0
- package/src/combobox/popover.tsx +62 -0
- package/src/combobox/trigger.tsx +33 -0
- package/src/combobox/value.tsx +12 -0
- package/src/common/index.ts +1 -0
- package/src/common/svg.tsx +17 -0
- package/src/dialog/actions.tsx +17 -0
- package/src/dialog/confirm-button.tsx +25 -0
- package/src/dialog/dialog-context.tsx +21 -0
- package/src/dialog/dialog.tsx +37 -0
- package/src/dialog/dismiss-button.tsx +29 -0
- package/src/dialog/index.ts +37 -0
- package/src/dialog/message.tsx +20 -0
- package/src/dialog/provider.tsx +102 -0
- package/src/dialog/title.tsx +20 -0
- package/src/editable-cell/editable-cell.tsx +307 -0
- package/src/editable-cell/index.ts +7 -0
- package/src/editable-cell/use-editable-grid.tsx +296 -0
- package/src/field/field.tsx +22 -0
- package/src/field/index.ts +2 -0
- package/src/helpers/cn.ts +6 -0
- package/src/helpers/index.ts +1 -0
- package/src/icon-button/icon-button.tsx +126 -0
- package/src/icon-button/index.ts +2 -0
- package/src/index.ts +32 -0
- package/src/input/index.ts +1 -0
- package/src/input/input.tsx +276 -0
- package/src/link/index.ts +4 -0
- package/src/link/link-context.tsx +33 -0
- package/src/link/link.tsx +24 -0
- package/src/menu/divider.tsx +17 -0
- package/src/menu/index.ts +40 -0
- package/src/menu/item.tsx +149 -0
- package/src/menu/menu-context.tsx +24 -0
- package/src/menu/menu.tsx +14 -0
- package/src/menu/popover.tsx +69 -0
- package/src/menu/submenu-trigger.tsx +48 -0
- package/src/menu/submenu.tsx +20 -0
- package/src/menu/trigger.tsx +43 -0
- package/src/notification/index.ts +16 -0
- package/src/notification/list.tsx +123 -0
- package/src/notification/provider.tsx +75 -0
- package/src/page-header/index.ts +2 -0
- package/src/page-header/page-header.tsx +14 -0
- package/src/pagination/index.ts +1 -0
- package/src/pagination/pagination.tsx +136 -0
- package/src/panels/collapsed.tsx +32 -0
- package/src/panels/group.tsx +27 -0
- package/src/panels/index.ts +57 -0
- package/src/panels/layout-context.ts +5 -0
- package/src/panels/orientation-context.tsx +5 -0
- package/src/panels/panel.tsx +95 -0
- package/src/panels/separator.tsx +44 -0
- package/src/pin/index.ts +1 -0
- package/src/pin/pin.tsx +99 -0
- package/src/progress-bar/index.ts +1 -0
- package/src/progress-bar/progress-bar.tsx +48 -0
- package/src/quantity-input/index.ts +1 -0
- package/src/quantity-input/quantity-input.tsx +158 -0
- package/src/scroll-area/index.ts +1 -0
- package/src/scroll-area/scroll-area.tsx +82 -0
- package/src/slider/index.ts +1 -0
- package/src/slider/slider.tsx +75 -0
- package/src/star/index.ts +1 -0
- package/src/star/star.tsx +99 -0
- package/src/switch/index.ts +1 -0
- package/src/switch/switch.tsx +33 -0
- package/src/table/body.tsx +15 -0
- package/src/table/cell-context.tsx +48 -0
- package/src/table/cell.tsx +83 -0
- package/src/table/group-empty-state.tsx +28 -0
- package/src/table/group-header.tsx +62 -0
- package/src/table/header-cell.tsx +158 -0
- package/src/table/header-row.tsx +28 -0
- package/src/table/index.ts +56 -0
- package/src/table/is-group-empty-state.ts +17 -0
- package/src/table/is-group-header.ts +5 -0
- package/src/table/row-context.tsx +61 -0
- package/src/table/row-disabled-context.tsx +7 -0
- package/src/table/row.tsx +98 -0
- package/src/table/table-context.tsx +127 -0
- package/src/table/table-empty.tsx +57 -0
- package/src/table/table.tsx +547 -0
- package/src/table/tree-icon.tsx +147 -0
- package/src/table/use-checkbox.ts +200 -0
- package/src/table/use-column-layout.ts +117 -0
- package/src/table/use-groups.ts +134 -0
- package/src/table/use-keyboard-navigation.ts +274 -0
- package/src/table/use-sort-functions.ts +90 -0
- package/src/tabs/index.ts +20 -0
- package/src/tabs/list.tsx +29 -0
- package/src/tabs/tab.tsx +141 -0
- package/src/tabs/tabs-context.tsx +38 -0
- package/src/tabs/tabs.tsx +27 -0
- package/src/textarea/index.ts +1 -0
- package/src/textarea/textarea.tsx +88 -0
- package/src/toast/index.ts +19 -0
- package/src/toast/list.tsx +133 -0
- package/src/toast/provider.tsx +36 -0
- package/src/toggle/index.ts +17 -0
- package/src/toggle/indicator.tsx +27 -0
- package/src/toggle/item.tsx +54 -0
- package/src/toggle/toggle-context.tsx +68 -0
- package/src/toggle/toggle.tsx +124 -0
- package/src/toggle/use-indicator.tsx +69 -0
- package/src/tooltip/index.ts +1 -0
- package/src/tooltip/tooltip.tsx +122 -0
- package/theme.css +70 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import React, { ReactElement, memo, useCallback, useMemo, useState } from 'react'
|
|
2
|
+
import {
|
|
3
|
+
Tooltip as BaseTooltip,
|
|
4
|
+
TooltipPositionerProps,
|
|
5
|
+
TooltipProviderProps,
|
|
6
|
+
TooltipRootChangeEventDetails,
|
|
7
|
+
TooltipRootProps,
|
|
8
|
+
} from '@base-ui/react'
|
|
9
|
+
import { cn } from '../helpers'
|
|
10
|
+
|
|
11
|
+
export type TooltipProps = TooltipProviderProps &
|
|
12
|
+
TooltipRootProps &
|
|
13
|
+
Omit<TooltipPositionerProps, 'className'> & {
|
|
14
|
+
children: ReactElement
|
|
15
|
+
tip: ReactElement | string | null
|
|
16
|
+
disableFocusTrigger?: boolean
|
|
17
|
+
hoverable?: boolean
|
|
18
|
+
className?: string
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Memoized trigger span to avoid recreating on every render
|
|
22
|
+
const TriggerSpan = <span />
|
|
23
|
+
|
|
24
|
+
export const Tooltip = memo(
|
|
25
|
+
({
|
|
26
|
+
children,
|
|
27
|
+
tip,
|
|
28
|
+
delay = 0,
|
|
29
|
+
closeDelay,
|
|
30
|
+
timeout,
|
|
31
|
+
defaultOpen,
|
|
32
|
+
open: controlledOpen,
|
|
33
|
+
onOpenChange,
|
|
34
|
+
onOpenChangeComplete,
|
|
35
|
+
trackCursorAxis,
|
|
36
|
+
disableFocusTrigger = false,
|
|
37
|
+
hoverable = false,
|
|
38
|
+
disabled,
|
|
39
|
+
sideOffset = 8,
|
|
40
|
+
className,
|
|
41
|
+
...positionerProps
|
|
42
|
+
}: TooltipProps) => {
|
|
43
|
+
const [internalOpen, setInternalOpen] = useState(defaultOpen ?? false)
|
|
44
|
+
const open = controlledOpen ?? internalOpen
|
|
45
|
+
|
|
46
|
+
const providerProps = useMemo<TooltipProviderProps>(
|
|
47
|
+
() => ({ delay, closeDelay, timeout }),
|
|
48
|
+
[delay, closeDelay, timeout],
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
const rootProps = useMemo<
|
|
52
|
+
Pick<
|
|
53
|
+
TooltipRootProps,
|
|
54
|
+
'defaultOpen' | 'trackCursorAxis' | 'onOpenChangeComplete' | 'disabled'
|
|
55
|
+
>
|
|
56
|
+
>(
|
|
57
|
+
() => ({
|
|
58
|
+
defaultOpen,
|
|
59
|
+
trackCursorAxis,
|
|
60
|
+
onOpenChangeComplete,
|
|
61
|
+
disabled,
|
|
62
|
+
}),
|
|
63
|
+
[defaultOpen, trackCursorAxis, onOpenChangeComplete, disabled],
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
const handleOpenChange = useCallback(
|
|
67
|
+
(nextOpen: boolean, eventDetails: TooltipRootChangeEventDetails) => {
|
|
68
|
+
if (disableFocusTrigger && eventDetails.reason === 'trigger-focus') {
|
|
69
|
+
return
|
|
70
|
+
}
|
|
71
|
+
setInternalOpen(nextOpen)
|
|
72
|
+
onOpenChange?.(nextOpen, eventDetails)
|
|
73
|
+
},
|
|
74
|
+
[disableFocusTrigger, onOpenChange],
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
const positionerClassName = useMemo(
|
|
78
|
+
() => cn('z-50', { 'pointer-events-none': !hoverable }, className),
|
|
79
|
+
[hoverable, className],
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
if (!tip) {
|
|
83
|
+
return <span>{children}</span>
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
return (
|
|
87
|
+
<BaseTooltip.Provider {...providerProps}>
|
|
88
|
+
<BaseTooltip.Root open={open} onOpenChange={handleOpenChange} {...rootProps}>
|
|
89
|
+
<BaseTooltip.Trigger
|
|
90
|
+
data-trigger
|
|
91
|
+
delay={delay}
|
|
92
|
+
closeDelay={closeDelay}
|
|
93
|
+
render={TriggerSpan}
|
|
94
|
+
>
|
|
95
|
+
{children}
|
|
96
|
+
</BaseTooltip.Trigger>
|
|
97
|
+
<BaseTooltip.Portal>
|
|
98
|
+
<BaseTooltip.Positioner
|
|
99
|
+
className={positionerClassName}
|
|
100
|
+
sideOffset={sideOffset}
|
|
101
|
+
{...(positionerProps as TooltipPositionerProps)}
|
|
102
|
+
>
|
|
103
|
+
<BaseTooltip.Popup
|
|
104
|
+
className={cn(
|
|
105
|
+
'bg-gray-800/90 text-white dark:bg-black/50 dark:backdrop-blur-sm dark:text-zinc-100 text-xs rounded-md break-words font-body font-medium',
|
|
106
|
+
'dark:border dark:border-zinc-900',
|
|
107
|
+
'px-3 py-1 transition duration-300 ease-in-out max-w-72',
|
|
108
|
+
'data-[side=top]:origin-bottom data-[side=top]:-mb-1',
|
|
109
|
+
'data-[side=bottom]:origin-top data-[side=bottom]:-mt-1',
|
|
110
|
+
'data-[side=left]:origin-right',
|
|
111
|
+
'data-[side=right]:origin-left',
|
|
112
|
+
)}
|
|
113
|
+
>
|
|
114
|
+
{tip}
|
|
115
|
+
</BaseTooltip.Popup>
|
|
116
|
+
</BaseTooltip.Positioner>
|
|
117
|
+
</BaseTooltip.Portal>
|
|
118
|
+
</BaseTooltip.Root>
|
|
119
|
+
</BaseTooltip.Provider>
|
|
120
|
+
)
|
|
121
|
+
},
|
|
122
|
+
)
|
package/theme.css
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Toolpath's public Tailwind v4 theme.
|
|
3
|
+
*
|
|
4
|
+
* This is the canonical styling contract for every Toolpath application.
|
|
5
|
+
*/
|
|
6
|
+
/* Importing the theme also makes every primitive's utility classes visible to
|
|
7
|
+
Tailwind's scanner. Consumers should not have to maintain a second source
|
|
8
|
+
list for this package. */
|
|
9
|
+
@source './src';
|
|
10
|
+
|
|
11
|
+
/* Every Toolpath app selects dark mode with the document's `.dark` class. */
|
|
12
|
+
@custom-variant dark (&:where(.dark, .dark *));
|
|
13
|
+
|
|
14
|
+
@theme {
|
|
15
|
+
--font-body: 'Open Sans', ui-sans-serif, system-ui, sans-serif;
|
|
16
|
+
--font-display: Nunito, ui-sans-serif, system-ui, sans-serif;
|
|
17
|
+
--font-mono: 'Roboto Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
18
|
+
|
|
19
|
+
--text-3xs: 8px;
|
|
20
|
+
--text-3xs--line-height: 12px;
|
|
21
|
+
--text-2xs: 10px;
|
|
22
|
+
--text-2xs--line-height: 14px;
|
|
23
|
+
|
|
24
|
+
--color-primary: #e07a48;
|
|
25
|
+
--color-primary-darken: #d6632a;
|
|
26
|
+
--color-danger: #ba5b4b;
|
|
27
|
+
--color-danger-darken: #843e32;
|
|
28
|
+
--color-warning: #ffe066;
|
|
29
|
+
--color-warning-darken: #cd8e04;
|
|
30
|
+
--color-info: #6bb0b3;
|
|
31
|
+
--color-info-lighten: #e5f6f7;
|
|
32
|
+
--color-success: #68b688;
|
|
33
|
+
--color-success-darken: #5da37a;
|
|
34
|
+
--color-yellow: #ffcc03;
|
|
35
|
+
|
|
36
|
+
--color-gray: #4d5168;
|
|
37
|
+
--color-gray-50: #f3f4f6;
|
|
38
|
+
--color-gray-100: #dcdee5;
|
|
39
|
+
--color-gray-200: #c4c7d4;
|
|
40
|
+
--color-gray-300: #959bb1;
|
|
41
|
+
--color-gray-400: #71768d;
|
|
42
|
+
--color-gray-500: #4d5168;
|
|
43
|
+
--color-gray-600: #3c4051;
|
|
44
|
+
--color-gray-700: #2b2e3a;
|
|
45
|
+
--color-gray-800: #23252f;
|
|
46
|
+
--color-gray-900: #1a1c23;
|
|
47
|
+
|
|
48
|
+
--color-zinc-50: #eeeeee;
|
|
49
|
+
--color-zinc-100: #e1e1e1;
|
|
50
|
+
--color-zinc-200: #c6c6c6;
|
|
51
|
+
--color-zinc-300: #aeaeae;
|
|
52
|
+
--color-zinc-400: #939393;
|
|
53
|
+
--color-zinc-500: #7b7b7b;
|
|
54
|
+
--color-zinc-600: #626262;
|
|
55
|
+
--color-zinc-700: #4b4b4b;
|
|
56
|
+
--color-zinc-800: #3d3d3d;
|
|
57
|
+
--color-zinc-900: #2f2f2f;
|
|
58
|
+
--color-zinc-950: #282828;
|
|
59
|
+
|
|
60
|
+
--color-tag: #c4c7d4;
|
|
61
|
+
--color-tag-blue: #80afff;
|
|
62
|
+
--color-tag-light-blue: #80d6ff;
|
|
63
|
+
--color-tag-sea-foam: #91ede4;
|
|
64
|
+
--color-tag-green: #75e67e;
|
|
65
|
+
--color-tag-yellow: #fddb81;
|
|
66
|
+
--color-tag-orange: #ffb080;
|
|
67
|
+
--color-tag-red: #f2627f;
|
|
68
|
+
--color-tag-pink: #f695fb;
|
|
69
|
+
--color-tag-lavender: #ae9efa;
|
|
70
|
+
}
|