@shapesos/clay 0.18.0 → 0.19.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/dist/artifacts.cjs +207 -139
- package/dist/artifacts.cjs.map +1 -1
- package/dist/artifacts.js +5 -2
- package/dist/badge.cjs +70 -0
- package/dist/badge.cjs.map +1 -0
- package/dist/badge.d.cts +28 -0
- package/dist/badge.d.ts +28 -0
- package/dist/badge.js +9 -0
- package/dist/badge.js.map +1 -0
- package/dist/blocks.cjs +452 -185
- package/dist/blocks.cjs.map +1 -1
- package/dist/blocks.css +1 -1
- package/dist/blocks.d.cts +14 -3
- package/dist/blocks.d.ts +14 -3
- package/dist/blocks.js +17 -5
- package/dist/chat.cjs +457 -240
- package/dist/chat.cjs.map +1 -1
- package/dist/chat.d.cts +1 -1
- package/dist/chat.d.ts +1 -1
- package/dist/chat.js +10 -5
- package/dist/{chunk-JGMN6W72.js → chunk-2X4KUXYP.js} +1 -1
- package/dist/{chunk-QR4VBGK4.js → chunk-63AGNGKG.js} +81 -200
- package/dist/chunk-63AGNGKG.js.map +1 -0
- package/dist/chunk-CSTCTO3B.js +161 -0
- package/dist/chunk-CSTCTO3B.js.map +1 -0
- package/dist/chunk-EIAWZXE4.js +69 -0
- package/dist/chunk-EIAWZXE4.js.map +1 -0
- package/dist/chunk-EXRNGIQ2.js +41 -0
- package/dist/chunk-EXRNGIQ2.js.map +1 -0
- package/dist/{chunk-4MZZH3WX.js → chunk-HU5W7CGE.js} +37 -2
- package/dist/chunk-HU5W7CGE.js.map +1 -0
- package/dist/chunk-PISZYS2H.js +406 -0
- package/dist/chunk-PISZYS2H.js.map +1 -0
- package/dist/{chunk-CATIRDZP.js → chunk-PWSEEUVL.js} +10 -44
- package/dist/chunk-PWSEEUVL.js.map +1 -0
- package/dist/copy-button.cjs +439 -0
- package/dist/copy-button.cjs.map +1 -0
- package/dist/copy-button.d.cts +20 -0
- package/dist/copy-button.d.ts +20 -0
- package/dist/copy-button.js +12 -0
- package/dist/copy-button.js.map +1 -0
- package/dist/index.cjs +533 -298
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -2
- package/dist/index.d.ts +4 -2
- package/dist/index.js +26 -9
- package/dist/table.cjs +40 -0
- package/dist/table.cjs.map +1 -1
- package/dist/table.d.cts +37 -2
- package/dist/table.d.ts +37 -2
- package/dist/table.js +11 -1
- package/dist/{types-BDYPVP2N.d.cts → types-Bhg0_ES8.d.cts} +74 -2
- package/dist/{types-BMwa4bPW.d.ts → types-orOQcI2z.d.ts} +74 -2
- package/package.json +11 -1
- package/dist/chunk-4MZZH3WX.js.map +0 -1
- package/dist/chunk-7MY4X4YL.js +0 -250
- package/dist/chunk-7MY4X4YL.js.map +0 -1
- package/dist/chunk-CATIRDZP.js.map +0 -1
- package/dist/chunk-QR4VBGK4.js.map +0 -1
- /package/dist/{chunk-JGMN6W72.js.map → chunk-2X4KUXYP.js.map} +0 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
// node_modules/@tabler/icons-react/dist/esm/createReactComponent.mjs
|
|
2
|
+
import { forwardRef, createElement } from "react";
|
|
3
|
+
|
|
4
|
+
// node_modules/@tabler/icons-react/dist/esm/defaultAttributes.mjs
|
|
5
|
+
var defaultAttributes = {
|
|
6
|
+
outline: {
|
|
7
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
8
|
+
width: 24,
|
|
9
|
+
height: 24,
|
|
10
|
+
viewBox: "0 0 24 24",
|
|
11
|
+
fill: "none",
|
|
12
|
+
stroke: "currentColor",
|
|
13
|
+
strokeWidth: 2,
|
|
14
|
+
strokeLinecap: "round",
|
|
15
|
+
strokeLinejoin: "round"
|
|
16
|
+
},
|
|
17
|
+
filled: {
|
|
18
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
19
|
+
width: 24,
|
|
20
|
+
height: 24,
|
|
21
|
+
viewBox: "0 0 24 24",
|
|
22
|
+
fill: "currentColor",
|
|
23
|
+
stroke: "none"
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
// node_modules/@tabler/icons-react/dist/esm/createReactComponent.mjs
|
|
28
|
+
var createReactComponent = (type, iconName, iconNamePascal, iconNode) => {
|
|
29
|
+
const Component = forwardRef(
|
|
30
|
+
({ color = "currentColor", size = 24, stroke = 2, title, className, children, ...rest }, ref) => createElement(
|
|
31
|
+
"svg",
|
|
32
|
+
{
|
|
33
|
+
ref,
|
|
34
|
+
...defaultAttributes[type],
|
|
35
|
+
width: size,
|
|
36
|
+
height: size,
|
|
37
|
+
className: [`tabler-icon`, `tabler-icon-${iconName}`, className].join(" "),
|
|
38
|
+
...type === "filled" ? {
|
|
39
|
+
fill: color
|
|
40
|
+
} : {
|
|
41
|
+
strokeWidth: stroke,
|
|
42
|
+
stroke: color
|
|
43
|
+
},
|
|
44
|
+
...rest
|
|
45
|
+
},
|
|
46
|
+
[
|
|
47
|
+
title && createElement("title", { key: "svg-title" }, title),
|
|
48
|
+
...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),
|
|
49
|
+
...Array.isArray(children) ? children : [children]
|
|
50
|
+
]
|
|
51
|
+
)
|
|
52
|
+
);
|
|
53
|
+
Component.displayName = `${iconNamePascal}`;
|
|
54
|
+
return Component;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
// node_modules/@tabler/icons-react/dist/esm/icons/IconAlertCircle.mjs
|
|
58
|
+
var __iconNode = [["path", { "d": "M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0", "key": "svg-0" }], ["path", { "d": "M12 8v4", "key": "svg-1" }], ["path", { "d": "M12 16h.01", "key": "svg-2" }]];
|
|
59
|
+
var IconAlertCircle = createReactComponent("outline", "alert-circle", "AlertCircle", __iconNode);
|
|
60
|
+
|
|
61
|
+
// node_modules/@tabler/icons-react/dist/esm/icons/IconArrowsMaximize.mjs
|
|
62
|
+
var __iconNode2 = [["path", { "d": "M16 4l4 0l0 4", "key": "svg-0" }], ["path", { "d": "M14 10l6 -6", "key": "svg-1" }], ["path", { "d": "M8 20l-4 0l0 -4", "key": "svg-2" }], ["path", { "d": "M4 20l6 -6", "key": "svg-3" }], ["path", { "d": "M16 20l4 0l0 -4", "key": "svg-4" }], ["path", { "d": "M14 14l6 6", "key": "svg-5" }], ["path", { "d": "M8 4l-4 0l0 4", "key": "svg-6" }], ["path", { "d": "M4 4l6 6", "key": "svg-7" }]];
|
|
63
|
+
var IconArrowsMaximize = createReactComponent("outline", "arrows-maximize", "ArrowsMaximize", __iconNode2);
|
|
64
|
+
|
|
65
|
+
// node_modules/@tabler/icons-react/dist/esm/icons/IconArrowsMinimize.mjs
|
|
66
|
+
var __iconNode3 = [["path", { "d": "M5 9l4 0l0 -4", "key": "svg-0" }], ["path", { "d": "M3 3l6 6", "key": "svg-1" }], ["path", { "d": "M5 15l4 0l0 4", "key": "svg-2" }], ["path", { "d": "M3 21l6 -6", "key": "svg-3" }], ["path", { "d": "M19 9l-4 0l0 -4", "key": "svg-4" }], ["path", { "d": "M15 9l6 -6", "key": "svg-5" }], ["path", { "d": "M19 15l-4 0l0 4", "key": "svg-6" }], ["path", { "d": "M15 15l6 6", "key": "svg-7" }]];
|
|
67
|
+
var IconArrowsMinimize = createReactComponent("outline", "arrows-minimize", "ArrowsMinimize", __iconNode3);
|
|
68
|
+
|
|
69
|
+
// node_modules/@tabler/icons-react/dist/esm/icons/IconCheck.mjs
|
|
70
|
+
var __iconNode4 = [["path", { "d": "M5 12l5 5l10 -10", "key": "svg-0" }]];
|
|
71
|
+
var IconCheck = createReactComponent("outline", "check", "Check", __iconNode4);
|
|
72
|
+
|
|
73
|
+
// node_modules/@tabler/icons-react/dist/esm/icons/IconChevronDown.mjs
|
|
74
|
+
var __iconNode5 = [["path", { "d": "M6 9l6 6l6 -6", "key": "svg-0" }]];
|
|
75
|
+
var IconChevronDown = createReactComponent("outline", "chevron-down", "ChevronDown", __iconNode5);
|
|
76
|
+
|
|
77
|
+
// node_modules/@tabler/icons-react/dist/esm/icons/IconCopy.mjs
|
|
78
|
+
var __iconNode6 = [["path", { "d": "M7 9.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667l0 -8.666", "key": "svg-0" }], ["path", { "d": "M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1", "key": "svg-1" }]];
|
|
79
|
+
var IconCopy = createReactComponent("outline", "copy", "Copy", __iconNode6);
|
|
80
|
+
|
|
81
|
+
// node_modules/@tabler/icons-react/dist/esm/icons/IconDownload.mjs
|
|
82
|
+
var __iconNode7 = [["path", { "d": "M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2", "key": "svg-0" }], ["path", { "d": "M7 11l5 5l5 -5", "key": "svg-1" }], ["path", { "d": "M12 4l0 12", "key": "svg-2" }]];
|
|
83
|
+
var IconDownload = createReactComponent("outline", "download", "Download", __iconNode7);
|
|
84
|
+
|
|
85
|
+
// node_modules/@tabler/icons-react/dist/esm/icons/IconFileSpreadsheet.mjs
|
|
86
|
+
var __iconNode8 = [["path", { "d": "M14 3v4a1 1 0 0 0 1 1h4", "key": "svg-0" }], ["path", { "d": "M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2", "key": "svg-1" }], ["path", { "d": "M8 11h8v7h-8l0 -7", "key": "svg-2" }], ["path", { "d": "M8 15h8", "key": "svg-3" }], ["path", { "d": "M11 11v7", "key": "svg-4" }]];
|
|
87
|
+
var IconFileSpreadsheet = createReactComponent("outline", "file-spreadsheet", "FileSpreadsheet", __iconNode8);
|
|
88
|
+
|
|
89
|
+
// node_modules/@tabler/icons-react/dist/esm/icons/IconLoader2.mjs
|
|
90
|
+
var __iconNode9 = [["path", { "d": "M12 3a9 9 0 1 0 9 9", "key": "svg-0" }]];
|
|
91
|
+
var IconLoader2 = createReactComponent("outline", "loader-2", "Loader2", __iconNode9);
|
|
92
|
+
|
|
93
|
+
// node_modules/@tabler/icons-react/dist/esm/icons/IconPhoto.mjs
|
|
94
|
+
var __iconNode10 = [["path", { "d": "M15 8h.01", "key": "svg-0" }], ["path", { "d": "M3 6a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-12", "key": "svg-1" }], ["path", { "d": "M3 16l5 -5c.928 -.893 2.072 -.893 3 0l5 5", "key": "svg-2" }], ["path", { "d": "M14 14l1 -1c.928 -.893 2.072 -.893 3 0l3 3", "key": "svg-3" }]];
|
|
95
|
+
var IconPhoto = createReactComponent("outline", "photo", "Photo", __iconNode10);
|
|
96
|
+
|
|
97
|
+
// node_modules/@tabler/icons-react/dist/esm/icons/IconFlask2Filled.mjs
|
|
98
|
+
var __iconNode11 = [["path", { "d": "M15 2a1 1 0 0 1 0 2v5.674l.062 .03a7 7 0 0 1 3.85 5.174l.037 .262a7 7 0 0 1 -3.078 6.693a1 1 0 0 1 -.553 .167h-6.635a1 1 0 0 1 -.552 -.166a7 7 0 0 1 .807 -12.134l.062 -.028v-5.672a1 1 0 1 1 0 -2h6zm-2 2h-2v6.34a1 1 0 0 1 -.551 .894l-.116 .049a5 5 0 0 0 -2.92 2.717h9.172a5 5 0 0 0 -2.918 -2.715a1 1 0 0 1 -.667 -.943v-6.342z", "key": "svg-0" }]];
|
|
99
|
+
var IconFlask2Filled = createReactComponent("filled", "flask-2-filled", "Flask2Filled", __iconNode11);
|
|
100
|
+
|
|
101
|
+
// node_modules/@tabler/icons-react/dist/esm/icons/IconChevronLeft.mjs
|
|
102
|
+
var __iconNode12 = [["path", { "d": "M15 6l-6 6l6 6", "key": "svg-0" }]];
|
|
103
|
+
var IconChevronLeft = createReactComponent("outline", "chevron-left", "ChevronLeft", __iconNode12);
|
|
104
|
+
|
|
105
|
+
// node_modules/@tabler/icons-react/dist/esm/icons/IconChevronRight.mjs
|
|
106
|
+
var __iconNode13 = [["path", { "d": "M9 6l6 6l-6 6", "key": "svg-0" }]];
|
|
107
|
+
var IconChevronRight = createReactComponent("outline", "chevron-right", "ChevronRight", __iconNode13);
|
|
108
|
+
|
|
109
|
+
// node_modules/@tabler/icons-react/dist/esm/icons/IconThumbDown.mjs
|
|
110
|
+
var __iconNode14 = [["path", { "d": "M7 13v-8a1 1 0 0 0 -1 -1h-2a1 1 0 0 0 -1 1v7a1 1 0 0 0 1 1h3a4 4 0 0 1 4 4v1a2 2 0 0 0 4 0v-5h3a2 2 0 0 0 2 -2l-1 -5a2 3 0 0 0 -2 -2h-7a3 3 0 0 0 -3 3", "key": "svg-0" }]];
|
|
111
|
+
var IconThumbDown = createReactComponent("outline", "thumb-down", "ThumbDown", __iconNode14);
|
|
112
|
+
|
|
113
|
+
// node_modules/@tabler/icons-react/dist/esm/icons/IconThumbUp.mjs
|
|
114
|
+
var __iconNode15 = [["path", { "d": "M7 11v8a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-7a1 1 0 0 1 1 -1h3a4 4 0 0 0 4 -4v-1a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1 -2 2h-7a3 3 0 0 1 -3 -3", "key": "svg-0" }]];
|
|
115
|
+
var IconThumbUp = createReactComponent("outline", "thumb-up", "ThumbUp", __iconNode15);
|
|
116
|
+
|
|
117
|
+
export {
|
|
118
|
+
IconAlertCircle,
|
|
119
|
+
IconArrowsMaximize,
|
|
120
|
+
IconArrowsMinimize,
|
|
121
|
+
IconCheck,
|
|
122
|
+
IconChevronDown,
|
|
123
|
+
IconChevronLeft,
|
|
124
|
+
IconChevronRight,
|
|
125
|
+
IconCopy,
|
|
126
|
+
IconDownload,
|
|
127
|
+
IconFileSpreadsheet,
|
|
128
|
+
IconLoader2,
|
|
129
|
+
IconPhoto,
|
|
130
|
+
IconThumbDown,
|
|
131
|
+
IconThumbUp,
|
|
132
|
+
IconFlask2Filled
|
|
133
|
+
};
|
|
134
|
+
/*! Bundled license information:
|
|
135
|
+
|
|
136
|
+
@tabler/icons-react/dist/esm/defaultAttributes.mjs:
|
|
137
|
+
@tabler/icons-react/dist/esm/createReactComponent.mjs:
|
|
138
|
+
@tabler/icons-react/dist/esm/icons/IconAlertCircle.mjs:
|
|
139
|
+
@tabler/icons-react/dist/esm/icons/IconArrowsMaximize.mjs:
|
|
140
|
+
@tabler/icons-react/dist/esm/icons/IconArrowsMinimize.mjs:
|
|
141
|
+
@tabler/icons-react/dist/esm/icons/IconCheck.mjs:
|
|
142
|
+
@tabler/icons-react/dist/esm/icons/IconChevronDown.mjs:
|
|
143
|
+
@tabler/icons-react/dist/esm/icons/IconCopy.mjs:
|
|
144
|
+
@tabler/icons-react/dist/esm/icons/IconDownload.mjs:
|
|
145
|
+
@tabler/icons-react/dist/esm/icons/IconFileSpreadsheet.mjs:
|
|
146
|
+
@tabler/icons-react/dist/esm/icons/IconLoader2.mjs:
|
|
147
|
+
@tabler/icons-react/dist/esm/icons/IconPhoto.mjs:
|
|
148
|
+
@tabler/icons-react/dist/esm/icons/IconFlask2Filled.mjs:
|
|
149
|
+
@tabler/icons-react/dist/esm/icons/IconChevronLeft.mjs:
|
|
150
|
+
@tabler/icons-react/dist/esm/icons/IconChevronRight.mjs:
|
|
151
|
+
@tabler/icons-react/dist/esm/icons/IconThumbDown.mjs:
|
|
152
|
+
@tabler/icons-react/dist/esm/icons/IconThumbUp.mjs:
|
|
153
|
+
@tabler/icons-react/dist/esm/tabler-icons-react.mjs:
|
|
154
|
+
(**
|
|
155
|
+
* @license @tabler/icons-react v3.37.1 - MIT
|
|
156
|
+
*
|
|
157
|
+
* This source code is licensed under the MIT license.
|
|
158
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
159
|
+
*)
|
|
160
|
+
*/
|
|
161
|
+
//# sourceMappingURL=chunk-CSTCTO3B.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../node_modules/@tabler/icons-react/src/defaultAttributes.ts","../node_modules/@tabler/icons-react/src/createReactComponent.ts","../node_modules/@tabler/icons-react/src/icons/IconAlertCircle.ts","../node_modules/@tabler/icons-react/src/icons/IconArrowsMaximize.ts","../node_modules/@tabler/icons-react/src/icons/IconArrowsMinimize.ts","../node_modules/@tabler/icons-react/src/icons/IconCheck.ts","../node_modules/@tabler/icons-react/src/icons/IconChevronDown.ts","../node_modules/@tabler/icons-react/src/icons/IconCopy.ts","../node_modules/@tabler/icons-react/src/icons/IconDownload.ts","../node_modules/@tabler/icons-react/src/icons/IconFileSpreadsheet.ts","../node_modules/@tabler/icons-react/src/icons/IconLoader2.ts","../node_modules/@tabler/icons-react/src/icons/IconPhoto.ts","../node_modules/@tabler/icons-react/src/icons/IconFlask2Filled.ts","../node_modules/@tabler/icons-react/src/icons/IconChevronLeft.ts","../node_modules/@tabler/icons-react/src/icons/IconChevronRight.ts","../node_modules/@tabler/icons-react/src/icons/IconThumbDown.ts","../node_modules/@tabler/icons-react/src/icons/IconThumbUp.ts"],"sourcesContent":["export default {\n outline: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n },\n filled: {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'currentColor',\n stroke: 'none',\n },\n};\n","import { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes';\nimport type { IconNode, IconProps, Icon } from './types';\n\nconst createReactComponent = (\n type: 'outline' | 'filled',\n iconName: string,\n iconNamePascal: string,\n iconNode: IconNode,\n) => {\n const Component = forwardRef<SVGSVGElement, IconProps>(\n (\n { color = 'currentColor', size = 24, stroke = 2, title, className, children, ...rest }: IconProps,\n ref,\n ) =>\n createElement(\n 'svg',\n {\n ref,\n ...defaultAttributes[type],\n width: size,\n height: size,\n className: [`tabler-icon`, `tabler-icon-${iconName}`, className].join(' '),\n ...(type === 'filled'\n ? {\n fill: color,\n }\n : {\n strokeWidth: stroke,\n stroke: color,\n }),\n ...rest,\n },\n [\n title && createElement('title', { key: 'svg-title' }, title),\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]),\n ],\n ),\n );\n\n Component.displayName = `${iconNamePascal}`;\n\n return Component;\n};\n\nexport default createReactComponent;\n","import createReactComponent from '../createReactComponent';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [[\"path\",{\"d\":\"M3 12a9 9 0 1 0 18 0a9 9 0 0 0 -18 0\",\"key\":\"svg-0\"}],[\"path\",{\"d\":\"M12 8v4\",\"key\":\"svg-1\"}],[\"path\",{\"d\":\"M12 16h.01\",\"key\":\"svg-2\"}]]\n\nconst IconAlertCircle = createReactComponent('outline', 'alert-circle', 'AlertCircle', __iconNode);\n\nexport default IconAlertCircle;","import createReactComponent from '../createReactComponent';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [[\"path\",{\"d\":\"M16 4l4 0l0 4\",\"key\":\"svg-0\"}],[\"path\",{\"d\":\"M14 10l6 -6\",\"key\":\"svg-1\"}],[\"path\",{\"d\":\"M8 20l-4 0l0 -4\",\"key\":\"svg-2\"}],[\"path\",{\"d\":\"M4 20l6 -6\",\"key\":\"svg-3\"}],[\"path\",{\"d\":\"M16 20l4 0l0 -4\",\"key\":\"svg-4\"}],[\"path\",{\"d\":\"M14 14l6 6\",\"key\":\"svg-5\"}],[\"path\",{\"d\":\"M8 4l-4 0l0 4\",\"key\":\"svg-6\"}],[\"path\",{\"d\":\"M4 4l6 6\",\"key\":\"svg-7\"}]]\n\nconst IconArrowsMaximize = createReactComponent('outline', 'arrows-maximize', 'ArrowsMaximize', __iconNode);\n\nexport default IconArrowsMaximize;","import createReactComponent from '../createReactComponent';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [[\"path\",{\"d\":\"M5 9l4 0l0 -4\",\"key\":\"svg-0\"}],[\"path\",{\"d\":\"M3 3l6 6\",\"key\":\"svg-1\"}],[\"path\",{\"d\":\"M5 15l4 0l0 4\",\"key\":\"svg-2\"}],[\"path\",{\"d\":\"M3 21l6 -6\",\"key\":\"svg-3\"}],[\"path\",{\"d\":\"M19 9l-4 0l0 -4\",\"key\":\"svg-4\"}],[\"path\",{\"d\":\"M15 9l6 -6\",\"key\":\"svg-5\"}],[\"path\",{\"d\":\"M19 15l-4 0l0 4\",\"key\":\"svg-6\"}],[\"path\",{\"d\":\"M15 15l6 6\",\"key\":\"svg-7\"}]]\n\nconst IconArrowsMinimize = createReactComponent('outline', 'arrows-minimize', 'ArrowsMinimize', __iconNode);\n\nexport default IconArrowsMinimize;","import createReactComponent from '../createReactComponent';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [[\"path\",{\"d\":\"M5 12l5 5l10 -10\",\"key\":\"svg-0\"}]]\n\nconst IconCheck = createReactComponent('outline', 'check', 'Check', __iconNode);\n\nexport default IconCheck;","import createReactComponent from '../createReactComponent';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [[\"path\",{\"d\":\"M6 9l6 6l6 -6\",\"key\":\"svg-0\"}]]\n\nconst IconChevronDown = createReactComponent('outline', 'chevron-down', 'ChevronDown', __iconNode);\n\nexport default IconChevronDown;","import createReactComponent from '../createReactComponent';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [[\"path\",{\"d\":\"M7 9.667a2.667 2.667 0 0 1 2.667 -2.667h8.666a2.667 2.667 0 0 1 2.667 2.667v8.666a2.667 2.667 0 0 1 -2.667 2.667h-8.666a2.667 2.667 0 0 1 -2.667 -2.667l0 -8.666\",\"key\":\"svg-0\"}],[\"path\",{\"d\":\"M4.012 16.737a2.005 2.005 0 0 1 -1.012 -1.737v-10c0 -1.1 .9 -2 2 -2h10c.75 0 1.158 .385 1.5 1\",\"key\":\"svg-1\"}]]\n\nconst IconCopy = createReactComponent('outline', 'copy', 'Copy', __iconNode);\n\nexport default IconCopy;","import createReactComponent from '../createReactComponent';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [[\"path\",{\"d\":\"M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2 -2v-2\",\"key\":\"svg-0\"}],[\"path\",{\"d\":\"M7 11l5 5l5 -5\",\"key\":\"svg-1\"}],[\"path\",{\"d\":\"M12 4l0 12\",\"key\":\"svg-2\"}]]\n\nconst IconDownload = createReactComponent('outline', 'download', 'Download', __iconNode);\n\nexport default IconDownload;","import createReactComponent from '../createReactComponent';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [[\"path\",{\"d\":\"M14 3v4a1 1 0 0 0 1 1h4\",\"key\":\"svg-0\"}],[\"path\",{\"d\":\"M17 21h-10a2 2 0 0 1 -2 -2v-14a2 2 0 0 1 2 -2h7l5 5v11a2 2 0 0 1 -2 2\",\"key\":\"svg-1\"}],[\"path\",{\"d\":\"M8 11h8v7h-8l0 -7\",\"key\":\"svg-2\"}],[\"path\",{\"d\":\"M8 15h8\",\"key\":\"svg-3\"}],[\"path\",{\"d\":\"M11 11v7\",\"key\":\"svg-4\"}]]\n\nconst IconFileSpreadsheet = createReactComponent('outline', 'file-spreadsheet', 'FileSpreadsheet', __iconNode);\n\nexport default IconFileSpreadsheet;","import createReactComponent from '../createReactComponent';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [[\"path\",{\"d\":\"M12 3a9 9 0 1 0 9 9\",\"key\":\"svg-0\"}]]\n\nconst IconLoader2 = createReactComponent('outline', 'loader-2', 'Loader2', __iconNode);\n\nexport default IconLoader2;","import createReactComponent from '../createReactComponent';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [[\"path\",{\"d\":\"M15 8h.01\",\"key\":\"svg-0\"}],[\"path\",{\"d\":\"M3 6a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v12a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-12\",\"key\":\"svg-1\"}],[\"path\",{\"d\":\"M3 16l5 -5c.928 -.893 2.072 -.893 3 0l5 5\",\"key\":\"svg-2\"}],[\"path\",{\"d\":\"M14 14l1 -1c.928 -.893 2.072 -.893 3 0l3 3\",\"key\":\"svg-3\"}]]\n\nconst IconPhoto = createReactComponent('outline', 'photo', 'Photo', __iconNode);\n\nexport default IconPhoto;","import createReactComponent from '../createReactComponent';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [[\"path\",{\"d\":\"M15 2a1 1 0 0 1 0 2v5.674l.062 .03a7 7 0 0 1 3.85 5.174l.037 .262a7 7 0 0 1 -3.078 6.693a1 1 0 0 1 -.553 .167h-6.635a1 1 0 0 1 -.552 -.166a7 7 0 0 1 .807 -12.134l.062 -.028v-5.672a1 1 0 1 1 0 -2h6zm-2 2h-2v6.34a1 1 0 0 1 -.551 .894l-.116 .049a5 5 0 0 0 -2.92 2.717h9.172a5 5 0 0 0 -2.918 -2.715a1 1 0 0 1 -.667 -.943v-6.342z\",\"key\":\"svg-0\"}]]\n\nconst IconFlask2Filled = createReactComponent('filled', 'flask-2-filled', 'Flask2Filled', __iconNode);\n\nexport default IconFlask2Filled;","import createReactComponent from '../createReactComponent';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [[\"path\",{\"d\":\"M15 6l-6 6l6 6\",\"key\":\"svg-0\"}]]\n\nconst IconChevronLeft = createReactComponent('outline', 'chevron-left', 'ChevronLeft', __iconNode);\n\nexport default IconChevronLeft;","import createReactComponent from '../createReactComponent';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [[\"path\",{\"d\":\"M9 6l6 6l-6 6\",\"key\":\"svg-0\"}]]\n\nconst IconChevronRight = createReactComponent('outline', 'chevron-right', 'ChevronRight', __iconNode);\n\nexport default IconChevronRight;","import createReactComponent from '../createReactComponent';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [[\"path\",{\"d\":\"M7 13v-8a1 1 0 0 0 -1 -1h-2a1 1 0 0 0 -1 1v7a1 1 0 0 0 1 1h3a4 4 0 0 1 4 4v1a2 2 0 0 0 4 0v-5h3a2 2 0 0 0 2 -2l-1 -5a2 3 0 0 0 -2 -2h-7a3 3 0 0 0 -3 3\",\"key\":\"svg-0\"}]]\n\nconst IconThumbDown = createReactComponent('outline', 'thumb-down', 'ThumbDown', __iconNode);\n\nexport default IconThumbDown;","import createReactComponent from '../createReactComponent';\nimport { IconNode } from '../types';\n\nexport const __iconNode: IconNode = [[\"path\",{\"d\":\"M7 11v8a1 1 0 0 1 -1 1h-2a1 1 0 0 1 -1 -1v-7a1 1 0 0 1 1 -1h3a4 4 0 0 0 4 -4v-1a2 2 0 0 1 4 0v5h3a2 2 0 0 1 2 2l-1 5a2 3 0 0 1 -2 2h-7a3 3 0 0 1 -3 -3\",\"key\":\"svg-0\"}]]\n\nconst IconThumbUp = createReactComponent('outline', 'thumb-up', 'ThumbUp', __iconNode);\n\nexport default IconThumbUp;"],"mappings":"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","names":["__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode","__iconNode"]}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IconCheck,
|
|
3
|
+
IconCopy
|
|
4
|
+
} from "./chunk-CSTCTO3B.js";
|
|
5
|
+
import {
|
|
6
|
+
IconButton
|
|
7
|
+
} from "./chunk-E36VI2HA.js";
|
|
8
|
+
|
|
9
|
+
// src/components/chat/hooks/use-copy-to-clipboard.ts
|
|
10
|
+
import { useState, useCallback, useRef, useEffect } from "react";
|
|
11
|
+
|
|
12
|
+
// src/utils/clipboard.ts
|
|
13
|
+
function copyToClipboard(text, options) {
|
|
14
|
+
navigator.clipboard.writeText(text).then(
|
|
15
|
+
() => options?.onSuccess?.(),
|
|
16
|
+
(error) => options?.onFailure?.(error)
|
|
17
|
+
);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// src/components/chat/hooks/use-copy-to-clipboard.ts
|
|
21
|
+
var RESET_DELAY_MS = 2e3;
|
|
22
|
+
function useCopyToClipboard() {
|
|
23
|
+
const [isCopied, setIsCopied] = useState(false);
|
|
24
|
+
const timeoutRef = useRef(null);
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
return () => {
|
|
27
|
+
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
28
|
+
};
|
|
29
|
+
}, []);
|
|
30
|
+
const copy = useCallback((text) => {
|
|
31
|
+
copyToClipboard(text, {
|
|
32
|
+
onSuccess: () => {
|
|
33
|
+
setIsCopied(true);
|
|
34
|
+
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
35
|
+
timeoutRef.current = setTimeout(() => {
|
|
36
|
+
setIsCopied(false);
|
|
37
|
+
timeoutRef.current = null;
|
|
38
|
+
}, RESET_DELAY_MS);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}, []);
|
|
42
|
+
return { isCopied, copy };
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// src/components/copy-button/copy-button.tsx
|
|
46
|
+
import { jsx } from "react/jsx-runtime";
|
|
47
|
+
function CopyButton({
|
|
48
|
+
text,
|
|
49
|
+
copyLabel = "Copy",
|
|
50
|
+
copiedLabel = "Copied",
|
|
51
|
+
className
|
|
52
|
+
}) {
|
|
53
|
+
const { isCopied, copy } = useCopyToClipboard();
|
|
54
|
+
return /* @__PURE__ */ jsx(
|
|
55
|
+
IconButton,
|
|
56
|
+
{
|
|
57
|
+
icon: isCopied ? IconCheck : IconCopy,
|
|
58
|
+
onClick: () => copy(text),
|
|
59
|
+
"aria-label": isCopied ? copiedLabel : copyLabel,
|
|
60
|
+
className
|
|
61
|
+
}
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export {
|
|
66
|
+
useCopyToClipboard,
|
|
67
|
+
CopyButton
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=chunk-EIAWZXE4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/chat/hooks/use-copy-to-clipboard.ts","../src/utils/clipboard.ts","../src/components/copy-button/copy-button.tsx"],"sourcesContent":["import { useState, useCallback, useRef, useEffect } from \"react\";\n\nimport { copyToClipboard } from \"@/utils/clipboard\";\n\nconst RESET_DELAY_MS = 2000;\n\ninterface UseCopyToClipboardResult {\n isCopied: boolean;\n copy: (text: string) => void;\n}\n\nexport function useCopyToClipboard(): UseCopyToClipboardResult {\n const [isCopied, setIsCopied] = useState(false);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n // Write text verbatim — callers (copyMessageText + each BlockService.toClipboardText) are\n // responsible for converting their own format to clipboard-ready plain text.\n const copy = useCallback((text: string) => {\n copyToClipboard(text, {\n onSuccess: () => {\n setIsCopied(true);\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => {\n setIsCopied(false);\n timeoutRef.current = null;\n }, RESET_DELAY_MS);\n },\n });\n }, []);\n\n return { isCopied, copy };\n}\n","/** Options for the {@link copyToClipboard} function. */\ninterface CopyToClipboardOptions {\n /** Called after the text has been successfully written to the clipboard. */\n onSuccess?: () => void;\n /** Called if the clipboard write fails (e.g., permission denied). */\n onFailure?: (error: unknown) => void;\n}\n\n/**\n * Copies text to the system clipboard using the Clipboard API.\n * @param text - The string to copy.\n * @param options - Optional success/failure callbacks.\n */\nexport function copyToClipboard(text: string, options?: CopyToClipboardOptions): void {\n navigator.clipboard.writeText(text).then(\n () => options?.onSuccess?.(),\n (error) => options?.onFailure?.(error)\n );\n}\n","import type { ReactNode } from \"react\";\nimport { IconCheck, IconCopy } from \"@tabler/icons-react\";\n\nimport { useCopyToClipboard } from \"../chat/hooks/use-copy-to-clipboard\";\nimport { IconButton } from \"../icon-button/icon-button\";\n\nexport interface CopyButtonProps {\n /** Text written to the clipboard on click. */\n text: string;\n /** Accessible label + tooltip in the idle state. Default \"Copy\". */\n copyLabel?: string;\n /** Accessible label while the success flash is showing. Default \"Copied\". */\n copiedLabel?: string;\n /** Extra classes forwarded to the underlying `IconButton`. */\n className?: string;\n}\n\n/**\n * Icon button that copies `text` to the clipboard and flashes a check for ~2s (`IconCopy` →\n * `IconCheck`). Wraps `IconButton` + `useCopyToClipboard`; for copying plain text (not images —\n * for image capture use `ArtifactCopyAsImageButton`).\n */\nexport function CopyButton({\n text,\n copyLabel = \"Copy\",\n copiedLabel = \"Copied\",\n className,\n}: CopyButtonProps): ReactNode {\n const { isCopied, copy } = useCopyToClipboard();\n return (\n <IconButton\n icon={isCopied ? IconCheck : IconCopy}\n onClick={() => copy(text)}\n aria-label={isCopied ? copiedLabel : copyLabel}\n className={className}\n />\n );\n}\n"],"mappings":";;;;;;;;;AAAA,SAAS,UAAU,aAAa,QAAQ,iBAAiB;;;ACalD,SAAS,gBAAgB,MAAc,SAAwC;AACpF,YAAU,UAAU,UAAU,IAAI,EAAE;AAAA,IAClC,MAAM,SAAS,YAAY;AAAA,IAC3B,CAAC,UAAU,SAAS,YAAY,KAAK;AAAA,EACvC;AACF;;;ADdA,IAAM,iBAAiB;AAOhB,SAAS,qBAA+C;AAC7D,QAAM,CAAC,UAAU,WAAW,IAAI,SAAS,KAAK;AAC9C,QAAM,aAAa,OAA6C,IAAI;AAEpE,YAAU,MAAM;AACd,WAAO,MAAM;AACX,UAAI,WAAW,QAAS,cAAa,WAAW,OAAO;AAAA,IACzD;AAAA,EACF,GAAG,CAAC,CAAC;AAIL,QAAM,OAAO,YAAY,CAAC,SAAiB;AACzC,oBAAgB,MAAM;AAAA,MACpB,WAAW,MAAM;AACf,oBAAY,IAAI;AAChB,YAAI,WAAW,QAAS,cAAa,WAAW,OAAO;AACvD,mBAAW,UAAU,WAAW,MAAM;AACpC,sBAAY,KAAK;AACjB,qBAAW,UAAU;AAAA,QACvB,GAAG,cAAc;AAAA,MACnB;AAAA,IACF,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,SAAO,EAAE,UAAU,KAAK;AAC1B;;;AEPI;AARG,SAAS,WAAW;AAAA,EACzB;AAAA,EACA,YAAY;AAAA,EACZ,cAAc;AAAA,EACd;AACF,GAA+B;AAC7B,QAAM,EAAE,UAAU,KAAK,IAAI,mBAAmB;AAC9C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAM,WAAW,YAAY;AAAA,MAC7B,SAAS,MAAM,KAAK,IAAI;AAAA,MACxB,cAAY,WAAW,cAAc;AAAA,MACrC;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cn
|
|
3
|
+
} from "./chunk-P6GUNIAE.js";
|
|
4
|
+
|
|
5
|
+
// src/components/badge/badge.tsx
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
var BASE = "inline-flex items-center whitespace-nowrap rounded-full";
|
|
8
|
+
var SIZES = {
|
|
9
|
+
// `sm` is a uniform scale-down of `md` (text 10/12 of caption): padding and line-height keep
|
|
10
|
+
// md's proportions (caption is 12px text on a 16px line = 1.333 ratio) so the pill shape matches.
|
|
11
|
+
md: "px-2.5 py-0.5 text-geist-label-caption-medium",
|
|
12
|
+
sm: "px-2 py-0.5 text-[11px]/[1.333] font-medium"
|
|
13
|
+
};
|
|
14
|
+
var SUBTLE = {
|
|
15
|
+
neutral: "bg-brown-20 text-brown-70",
|
|
16
|
+
warning: "bg-orange-50 text-orange-600",
|
|
17
|
+
violet: "bg-violet-50 text-violet-600"
|
|
18
|
+
};
|
|
19
|
+
var OUTLINE = {
|
|
20
|
+
neutral: "border border-brown-30 bg-white text-brown-100",
|
|
21
|
+
warning: "border border-orange-200 bg-white text-orange-600",
|
|
22
|
+
violet: "border border-violet-400 bg-white text-violet-600"
|
|
23
|
+
};
|
|
24
|
+
var VARIANTS = {
|
|
25
|
+
subtle: SUBTLE,
|
|
26
|
+
outline: OUTLINE
|
|
27
|
+
};
|
|
28
|
+
function Badge({
|
|
29
|
+
variant = "subtle",
|
|
30
|
+
tone = "neutral",
|
|
31
|
+
size = "md",
|
|
32
|
+
className,
|
|
33
|
+
children
|
|
34
|
+
}) {
|
|
35
|
+
return /* @__PURE__ */ jsx("span", { className: cn(BASE, SIZES[size], VARIANTS[variant][tone], className), children });
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export {
|
|
39
|
+
Badge
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=chunk-EXRNGIQ2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/badge/badge.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\n/** Fill treatment of the badge. */\nexport type BadgeVariant = \"subtle\" | \"outline\";\n\n/** Semantic color of the badge. */\nexport type BadgeTone = \"neutral\" | \"warning\" | \"violet\";\n\n/** Overall size — `md` (default) or a more compact `sm` for eyebrow-style tags. */\nexport type BadgeSize = \"sm\" | \"md\";\n\nexport interface BadgeProps {\n /** Fill treatment. `subtle` = tinted background, `outline` = bordered on white. Default `subtle`. */\n variant?: BadgeVariant;\n /** Semantic color. `neutral` = brown, `warning` = orange, `violet` = violet. Default `neutral`. */\n tone?: BadgeTone;\n /** Size. `md` (12px text) or `sm` (10px text, tighter padding). Default `md`. */\n size?: BadgeSize;\n /** Extra classes merged after the variant/tone classes (last-wins via tailwind-merge). */\n className?: string;\n /** Badge label content. */\n children: ReactNode;\n}\n\nconst BASE = \"inline-flex items-center whitespace-nowrap rounded-full\";\n\n/** Padding + text size per size. Kept as one class each so there is a single font-size utility (deterministic override). */\nconst SIZES: Record<BadgeSize, string> = {\n // `sm` is a uniform scale-down of `md` (text 10/12 of caption): padding and line-height keep\n // md's proportions (caption is 12px text on a 16px line = 1.333 ratio) so the pill shape matches.\n md: \"px-2.5 py-0.5 text-geist-label-caption-medium\",\n sm: \"px-2 py-0.5 text-[11px]/[1.333] font-medium\",\n};\n\n/** Tinted background — low-emphasis tag. */\nconst SUBTLE: Record<BadgeTone, string> = {\n neutral: \"bg-brown-20 text-brown-70\",\n warning: \"bg-orange-50 text-orange-600\",\n violet: \"bg-violet-50 text-violet-600\",\n};\n\n/** Bordered on white — reads as a discrete chip. */\nconst OUTLINE: Record<BadgeTone, string> = {\n neutral: \"border border-brown-30 bg-white text-brown-100\",\n warning: \"border border-orange-200 bg-white text-orange-600\",\n violet: \"border border-violet-400 bg-white text-violet-600\",\n};\n\nconst VARIANTS: Record<BadgeVariant, Record<BadgeTone, string>> = {\n subtle: SUBTLE,\n outline: OUTLINE,\n};\n\n/**\n * Small pill for labels, counts, and status tags — recipient chips, \"+N\" overflow, \"Email\n * (fallback)\" tags, \"Labs\". Presentational only; on clay tokens. Compose the label at the call\n * site.\n */\nexport function Badge({\n variant = \"subtle\",\n tone = \"neutral\",\n size = \"md\",\n className,\n children,\n}: BadgeProps): ReactNode {\n return <span className={cn(BASE, SIZES[size], VARIANTS[variant][tone], className)}>{children}</span>;\n}\n"],"mappings":";;;;;AAmES;AAzCT,IAAM,OAAO;AAGb,IAAM,QAAmC;AAAA;AAAA;AAAA,EAGvC,IAAI;AAAA,EACJ,IAAI;AACN;AAGA,IAAM,SAAoC;AAAA,EACxC,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AACV;AAGA,IAAM,UAAqC;AAAA,EACzC,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AACV;AAEA,IAAM,WAA4D;AAAA,EAChE,QAAQ;AAAA,EACR,SAAS;AACX;AAOO,SAAS,MAAM;AAAA,EACpB,UAAU;AAAA,EACV,OAAO;AAAA,EACP,OAAO;AAAA,EACP;AAAA,EACA;AACF,GAA0B;AACxB,SAAO,oBAAC,UAAK,WAAW,GAAG,MAAM,MAAM,IAAI,GAAG,SAAS,OAAO,EAAE,IAAI,GAAG,SAAS,GAAI,UAAS;AAC/F;","names":[]}
|
|
@@ -79,6 +79,36 @@ function useScrollShadow() {
|
|
|
79
79
|
return { targetRef, isScrolled };
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
+
// src/components/table/data-table.tsx
|
|
83
|
+
import { jsx as jsx2, jsxs } from "react/jsx-runtime";
|
|
84
|
+
var DATA_TABLE_HEAD_CLASS = "h-auto py-2 px-4 text-xs font-medium text-foreground whitespace-nowrap text-left";
|
|
85
|
+
var DATA_TABLE_CELL_CLASS = "p-4 text-sm font-normal text-foreground align-top min-w-[150px] text-left";
|
|
86
|
+
var DATA_TABLE_ROW_CLASS = "border-b-brown-30 bg-background/70 hover:bg-secondary";
|
|
87
|
+
var DATA_TABLE_SCROLL_SHADOW = "0 1px 2px rgb(0 0 0 / 0.01), 0 6px 12px -2px rgb(0 0 0 / 0.03)";
|
|
88
|
+
function DataTable({ header, children, maxBodyHeight, className }) {
|
|
89
|
+
const { targetRef, isScrolled } = useScrollShadow();
|
|
90
|
+
return /* @__PURE__ */ jsx2(
|
|
91
|
+
"div",
|
|
92
|
+
{
|
|
93
|
+
ref: targetRef,
|
|
94
|
+
className: cn("overscroll-none", className),
|
|
95
|
+
style: maxBodyHeight !== void 0 ? { maxHeight: maxBodyHeight, overflowY: "auto" } : void 0,
|
|
96
|
+
children: /* @__PURE__ */ jsxs(Table, { containerClassName: "overflow-visible", children: [
|
|
97
|
+
/* @__PURE__ */ jsx2(
|
|
98
|
+
TableHeader,
|
|
99
|
+
{
|
|
100
|
+
"data-scrolled": isScrolled ? "true" : void 0,
|
|
101
|
+
className: "sticky top-0 z-10 bg-background/70 backdrop-blur-lg transition-shadow",
|
|
102
|
+
style: isScrolled ? { boxShadow: DATA_TABLE_SCROLL_SHADOW } : void 0,
|
|
103
|
+
children: header
|
|
104
|
+
}
|
|
105
|
+
),
|
|
106
|
+
/* @__PURE__ */ jsx2(TableBody, { children })
|
|
107
|
+
] })
|
|
108
|
+
}
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
82
112
|
export {
|
|
83
113
|
Table,
|
|
84
114
|
TableHeader,
|
|
@@ -88,6 +118,11 @@ export {
|
|
|
88
118
|
TableHead,
|
|
89
119
|
TableCell,
|
|
90
120
|
TableCaption,
|
|
91
|
-
useScrollShadow
|
|
121
|
+
useScrollShadow,
|
|
122
|
+
DATA_TABLE_HEAD_CLASS,
|
|
123
|
+
DATA_TABLE_CELL_CLASS,
|
|
124
|
+
DATA_TABLE_ROW_CLASS,
|
|
125
|
+
DATA_TABLE_SCROLL_SHADOW,
|
|
126
|
+
DataTable
|
|
92
127
|
};
|
|
93
|
-
//# sourceMappingURL=chunk-
|
|
128
|
+
//# sourceMappingURL=chunk-HU5W7CGE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/ui/table.tsx","../src/components/table/use-scroll-shadow.ts","../src/components/table/data-table.tsx"],"sourcesContent":["import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\n/** Extension of shadcn's `Table` registry component: exposes `containerClassName` so callers can\n * override the wrapping `<div>`'s default `overflow-auto`. We need this for sticky-header support\n * (sticky uses the nearest overflow ancestor as its containing block — when the actual scroll\n * container is one level out, the inner overflow-auto needs to be neutralised with\n * `overflow-visible` so sticky aligns with the real scrolling parent). */\nconst Table = React.forwardRef<\n HTMLTableElement,\n React.HTMLAttributes<HTMLTableElement> & { containerClassName?: string }\n>(({ className, containerClassName, ...props }, ref) => (\n <div className={cn(\"relative w-full overflow-auto\", containerClassName)}>\n <table ref={ref} className={cn(\"w-full caption-bottom text-sm\", className)} {...props} />\n </div>\n));\nTable.displayName = \"Table\";\n\nconst TableHeader = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => <thead ref={ref} className={cn(\"[&_tr]:border-b\", className)} {...props} />\n);\nTableHeader.displayName = \"TableHeader\";\n\nconst TableBody = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn(\"[&_tr:last-child]:border-0\", className)} {...props} />\n )\n);\nTableBody.displayName = \"TableBody\";\n\nconst TableFooter = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n ({ className, ...props }, ref) => (\n <tfoot ref={ref} className={cn(\"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0\", className)} {...props} />\n )\n);\nTableFooter.displayName = \"TableFooter\";\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(\n ({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted\", className)}\n {...props}\n />\n )\n);\nTableRow.displayName = \"TableRow\";\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, React.ThHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n \"h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0\",\n className\n )}\n {...props}\n />\n )\n);\nTableHead.displayName = \"TableHead\";\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, React.TdHTMLAttributes<HTMLTableCellElement>>(\n ({ className, ...props }, ref) => (\n <td ref={ref} className={cn(\"p-4 align-middle [&:has([role=checkbox])]:pr-0\", className)} {...props} />\n )\n);\nTableCell.displayName = \"TableCell\";\n\nconst TableCaption = React.forwardRef<HTMLTableCaptionElement, React.HTMLAttributes<HTMLTableCaptionElement>>(\n ({ className, ...props }, ref) => (\n <caption ref={ref} className={cn(\"mt-4 text-sm text-muted-foreground\", className)} {...props} />\n )\n);\nTableCaption.displayName = \"TableCaption\";\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption };\n","import { useEffect, useRef, useState, type RefObject } from \"react\";\n\n/**\n * Tracks whether a scroll container has scrolled past its top edge, for sticky-header shadow effects.\n *\n * Returns `targetRef` (attach to the scroll container itself or any element inside it) and\n * `isScrolled` (true once the container's `scrollTop > 0`). On mount the hook walks up the DOM\n * from the target to find the nearest overflow ancestor (or uses the target itself if it already\n * has `overflowY: auto | scroll`), then listens to its `scroll` event.\n *\n * Used to surface a subtle \"scroll lift\" shadow under sticky headers so users know there is\n * content hidden above.\n *\n * **Why a scroll listener and not a sentinel + IntersectionObserver:** an earlier version used a\n * 1px sentinel as the first child of the scroll container. The sentinel's height pushed the thead\n * down by one pixel in normal flow, and as soon as the user scrolled the thead snapped up to its\n * sticky position — a visible 1px jitter. A scroll listener has no layout footprint.\n *\n * `passive: true` so the listener doesn't block native scroll smoothness; we never call\n * `preventDefault`.\n */\nexport function useScrollShadow(): {\n targetRef: RefObject<HTMLDivElement | null>;\n isScrolled: boolean;\n} {\n const targetRef = useRef<HTMLDivElement>(null);\n const [isScrolled, setIsScrolled] = useState(false);\n\n useEffect(() => {\n const target = targetRef.current;\n if (!target) return;\n\n let scrollContainer: HTMLElement | null = target;\n while (scrollContainer) {\n const overflowY = getComputedStyle(scrollContainer).overflowY;\n if (overflowY === \"auto\" || overflowY === \"scroll\") break;\n scrollContainer = scrollContainer.parentElement;\n }\n if (!scrollContainer) return;\n\n setIsScrolled(scrollContainer.scrollTop > 0);\n\n const handleScroll = () => {\n if (!scrollContainer) return;\n setIsScrolled(scrollContainer.scrollTop > 0);\n };\n scrollContainer.addEventListener(\"scroll\", handleScroll, { passive: true });\n return () => scrollContainer.removeEventListener(\"scroll\", handleScroll);\n }, []);\n\n return { targetRef, isScrolled };\n}\n","import type { ReactNode } from \"react\";\n\nimport { cn } from \"@/lib/utils\";\nimport { Table, TableBody, TableHeader } from \"@/components/ui/table\";\nimport { useScrollShadow } from \"./use-scroll-shadow\";\n\n/**\n * Header cell class — compact, left-aligned, non-wrapping. Apply to each `<TableHead>` composed at\n * the call site so every clay data table shares one header treatment.\n */\nexport const DATA_TABLE_HEAD_CLASS = \"h-auto py-2 px-4 text-xs font-medium text-foreground whitespace-nowrap text-left\";\n\n/** Body cell class — roomy padding, top-aligned, left-aligned, min width so columns don't collapse. */\nexport const DATA_TABLE_CELL_CLASS = \"p-4 text-sm font-normal text-foreground align-top min-w-[150px] text-left\";\n\n/**\n * Data-row class matching the frosted-glass card scheme: `border-b-brown-30` overrides shadcn's\n * default `--color-border` (brown-40) with the lighter brown-30; hover lifts to opaque `bg-secondary`.\n */\nexport const DATA_TABLE_ROW_CLASS = \"border-b-brown-30 bg-background/70 hover:bg-secondary\";\n\n/** Layered drop-shadow for the scroll-lift effect on the sticky header. */\nexport const DATA_TABLE_SCROLL_SHADOW = \"0 1px 2px rgb(0 0 0 / 0.01), 0 6px 12px -2px rgb(0 0 0 / 0.03)\";\n\nexport interface DataTableProps {\n /**\n * Header row content — typically a single `<TableRow>` of `<TableHead>` cells (use\n * `DATA_TABLE_HEAD_CLASS`). Rendered inside the sticky, frosted `<TableHeader>` shell.\n */\n header: ReactNode;\n /** Body rows composed at the call site (`<TableRow>`/`<TableCell>`). */\n children: ReactNode;\n /** Max body height (px) before vertical scroll engages. Omit for no cap (grows to content). */\n maxBodyHeight?: number;\n /** Extra classes for the scroll container. */\n className?: string;\n}\n\n/**\n * Shared styled-table shell — the scroll container, sticky frosted (`bg-background/70\n * backdrop-blur-lg`) header, and scroll-lift shadow (via {@link useScrollShadow}) that give clay\n * data tables (table artifact, notification-draft recipients) one consistent look. Callers compose\n * the header cells and body rows at the call site; this is only the shell.\n */\nexport function DataTable({ header, children, maxBodyHeight, className }: DataTableProps): ReactNode {\n const { targetRef, isScrolled } = useScrollShadow();\n return (\n <div\n ref={targetRef}\n className={cn(\"overscroll-none\", className)}\n style={maxBodyHeight !== undefined ? { maxHeight: maxBodyHeight, overflowY: \"auto\" } : undefined}\n >\n <Table containerClassName=\"overflow-visible\">\n <TableHeader\n data-scrolled={isScrolled ? \"true\" : undefined}\n className=\"sticky top-0 z-10 bg-background/70 backdrop-blur-lg transition-shadow\"\n style={isScrolled ? { boxShadow: DATA_TABLE_SCROLL_SHADOW } : undefined}\n >\n {header}\n </TableHeader>\n <TableBody>{children}</TableBody>\n </Table>\n </div>\n );\n}\n"],"mappings":"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","names":["jsx"]}
|