@upbound/monarch-blocks 0.2.0 → 0.2.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/cel-filter-bar.d.ts +3 -1
- package/dist/cel-filter-bar.js +14 -0
- package/dist/cel-filter-bar.js.map +1 -1
- package/dist/code-block.d.ts +8 -2
- package/dist/code-block.js +85 -21
- package/dist/code-block.js.map +1 -1
- package/dist/data-table.d.ts +17 -10
- package/dist/data-table.js +11 -11
- package/dist/data-table.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +141 -63
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/code-block.d.ts
CHANGED
|
@@ -6,16 +6,22 @@ declare function CodeBlock({ className, variant, size, ...props }: React.Compone
|
|
|
6
6
|
size?: 'default' | 'sm';
|
|
7
7
|
}): react_jsx_runtime.JSX.Element;
|
|
8
8
|
declare function CodeBlockHeader({ className, ...props }: React.ComponentProps<'div'>): react_jsx_runtime.JSX.Element;
|
|
9
|
-
declare function CodeBlockBody({ className, code, html, lineNumbers, maxHeight, copyButton, ...props }: React.ComponentProps<'div'> & {
|
|
9
|
+
declare function CodeBlockBody({ className, code, html, lineNumbers, maxHeight, copyButton, downloadButton, ...props }: React.ComponentProps<'div'> & {
|
|
10
10
|
code: string;
|
|
11
11
|
html?: string;
|
|
12
12
|
lineNumbers?: boolean;
|
|
13
13
|
maxHeight?: string;
|
|
14
14
|
copyButton?: React.ReactNode;
|
|
15
|
+
downloadButton?: React.ReactNode;
|
|
15
16
|
}): react_jsx_runtime.JSX.Element;
|
|
16
17
|
declare function CodeBlockFooter({ className, ...props }: React.ComponentProps<'div'>): react_jsx_runtime.JSX.Element;
|
|
17
18
|
declare function CodeBlockCopyButton({ code, className, ...props }: Omit<React.ComponentProps<'button'>, 'children'> & {
|
|
18
19
|
code: string;
|
|
19
20
|
}): react_jsx_runtime.JSX.Element;
|
|
21
|
+
declare function CodeBlockDownloadButton({ code, fileName, mimeType, className, ...props }: Omit<React.ComponentProps<'button'>, 'children'> & {
|
|
22
|
+
code: string;
|
|
23
|
+
fileName: string;
|
|
24
|
+
mimeType?: string;
|
|
25
|
+
}): react_jsx_runtime.JSX.Element;
|
|
20
26
|
|
|
21
|
-
export { CodeBlock, CodeBlockBody, CodeBlockCopyButton, CodeBlockFooter, CodeBlockHeader };
|
|
27
|
+
export { CodeBlock, CodeBlockBody, CodeBlockCopyButton, CodeBlockDownloadButton, CodeBlockFooter, CodeBlockHeader };
|
package/dist/code-block.js
CHANGED
|
@@ -69,7 +69,15 @@ function cn(...inputs) {
|
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
// src/code-block.tsx
|
|
72
|
-
import {
|
|
72
|
+
import {
|
|
73
|
+
Card,
|
|
74
|
+
CardContent,
|
|
75
|
+
CardFooter,
|
|
76
|
+
CardHeader,
|
|
77
|
+
Tooltip,
|
|
78
|
+
TooltipContent,
|
|
79
|
+
TooltipTrigger
|
|
80
|
+
} from "@upbound/monarch-core";
|
|
73
81
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
74
82
|
function CodeBlock(_a) {
|
|
75
83
|
var _b = _a, {
|
|
@@ -117,17 +125,22 @@ function CodeBlockBody(_a) {
|
|
|
117
125
|
html,
|
|
118
126
|
lineNumbers,
|
|
119
127
|
maxHeight,
|
|
120
|
-
copyButton
|
|
128
|
+
copyButton,
|
|
129
|
+
downloadButton
|
|
121
130
|
} = _b, props = __objRest(_b, [
|
|
122
131
|
"className",
|
|
123
132
|
"code",
|
|
124
133
|
"html",
|
|
125
134
|
"lineNumbers",
|
|
126
135
|
"maxHeight",
|
|
127
|
-
"copyButton"
|
|
136
|
+
"copyButton",
|
|
137
|
+
"downloadButton"
|
|
128
138
|
]);
|
|
129
139
|
return /* @__PURE__ */ jsxs(CardContent, __spreadProps(__spreadValues({ "data-line-numbers": lineNumbers || void 0, className: cn("relative p-0!", className) }, props), { children: [
|
|
130
|
-
copyButton && /* @__PURE__ */
|
|
140
|
+
(copyButton || downloadButton) && /* @__PURE__ */ jsxs("div", { className: "absolute top-2 right-2 z-10 flex items-center gap-1 opacity-0 transition-opacity group-hover/code-block:opacity-100", children: [
|
|
141
|
+
copyButton,
|
|
142
|
+
downloadButton
|
|
143
|
+
] }),
|
|
131
144
|
/* @__PURE__ */ jsx(
|
|
132
145
|
"div",
|
|
133
146
|
{
|
|
@@ -173,28 +186,79 @@ function CodeBlockCopyButton(_a) {
|
|
|
173
186
|
setCopied(true);
|
|
174
187
|
setTimeout(() => setCopied(false), 2e3);
|
|
175
188
|
};
|
|
176
|
-
return /* @__PURE__ */
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
189
|
+
return /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
190
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
191
|
+
"button",
|
|
192
|
+
__spreadProps(__spreadValues({
|
|
193
|
+
"data-slot": "code-block-copy-button",
|
|
194
|
+
onClick: handleCopy,
|
|
195
|
+
className: cn(
|
|
196
|
+
"border-border bg-background inline-flex h-7 w-7 cursor-pointer items-center justify-center rounded-md border motion-safe:transition-colors",
|
|
197
|
+
"text-muted-foreground hover:bg-accent hover:text-foreground",
|
|
198
|
+
"focus-visible:ring-ring/30 focus-visible:ring-2 focus-visible:outline-none",
|
|
199
|
+
"group-data-[variant=terminal]/code-block:border-terminal-border group-data-[variant=terminal]/code-block:bg-terminal-bg group-data-[variant=terminal]/code-block:text-terminal-muted group-data-[variant=terminal]/code-block:hover:bg-terminal-muted-hover-bg group-data-[variant=terminal]/code-block:hover:text-terminal-muted-hover-fg",
|
|
200
|
+
className
|
|
201
|
+
),
|
|
202
|
+
"aria-label": copied ? "Copied" : "Copy code"
|
|
203
|
+
}, props), {
|
|
204
|
+
children: copied ? /* @__PURE__ */ jsx(Icon, { name: "check", size: "sm", className: "text-green-500" }) : /* @__PURE__ */ jsx(Icon, { name: "copy", size: "sm" })
|
|
205
|
+
})
|
|
206
|
+
) }),
|
|
207
|
+
/* @__PURE__ */ jsx(TooltipContent, { children: copied ? "Copied" : "Copy" })
|
|
208
|
+
] });
|
|
209
|
+
}
|
|
210
|
+
function CodeBlockDownloadButton(_a) {
|
|
211
|
+
var _b = _a, {
|
|
212
|
+
code,
|
|
213
|
+
fileName,
|
|
214
|
+
mimeType = "text/plain",
|
|
215
|
+
className
|
|
216
|
+
} = _b, props = __objRest(_b, [
|
|
217
|
+
"code",
|
|
218
|
+
"fileName",
|
|
219
|
+
"mimeType",
|
|
220
|
+
"className"
|
|
221
|
+
]);
|
|
222
|
+
const [downloaded, setDownloaded] = useState(false);
|
|
223
|
+
const handleDownload = () => {
|
|
224
|
+
const blob = new Blob([code], { type: mimeType });
|
|
225
|
+
const url = URL.createObjectURL(blob);
|
|
226
|
+
const link = document.createElement("a");
|
|
227
|
+
link.href = url;
|
|
228
|
+
link.download = fileName;
|
|
229
|
+
document.body.appendChild(link);
|
|
230
|
+
link.click();
|
|
231
|
+
document.body.removeChild(link);
|
|
232
|
+
URL.revokeObjectURL(url);
|
|
233
|
+
setDownloaded(true);
|
|
234
|
+
setTimeout(() => setDownloaded(false), 2e3);
|
|
235
|
+
};
|
|
236
|
+
return /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
237
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
238
|
+
"button",
|
|
239
|
+
__spreadProps(__spreadValues({
|
|
240
|
+
"data-slot": "code-block-download-button",
|
|
241
|
+
onClick: handleDownload,
|
|
242
|
+
className: cn(
|
|
243
|
+
"border-border bg-background inline-flex h-7 w-7 cursor-pointer items-center justify-center rounded-md border motion-safe:transition-colors",
|
|
244
|
+
"text-muted-foreground hover:bg-accent hover:text-foreground",
|
|
245
|
+
"focus-visible:ring-ring/30 focus-visible:ring-2 focus-visible:outline-none",
|
|
246
|
+
"group-data-[variant=terminal]/code-block:border-terminal-border group-data-[variant=terminal]/code-block:bg-terminal-bg group-data-[variant=terminal]/code-block:text-terminal-muted group-data-[variant=terminal]/code-block:hover:bg-terminal-muted-hover-bg group-data-[variant=terminal]/code-block:hover:text-terminal-muted-hover-fg",
|
|
247
|
+
className
|
|
248
|
+
),
|
|
249
|
+
"aria-label": downloaded ? "Downloaded" : "Download code"
|
|
250
|
+
}, props), {
|
|
251
|
+
children: downloaded ? /* @__PURE__ */ jsx(Icon, { name: "check", size: "sm", className: "text-green-500" }) : /* @__PURE__ */ jsx(Icon, { name: "download", size: "sm" })
|
|
252
|
+
})
|
|
253
|
+
) }),
|
|
254
|
+
/* @__PURE__ */ jsx(TooltipContent, { children: downloaded ? "Downloaded" : "Download" })
|
|
255
|
+
] });
|
|
193
256
|
}
|
|
194
257
|
export {
|
|
195
258
|
CodeBlock,
|
|
196
259
|
CodeBlockBody,
|
|
197
260
|
CodeBlockCopyButton,
|
|
261
|
+
CodeBlockDownloadButton,
|
|
198
262
|
CodeBlockFooter,
|
|
199
263
|
CodeBlockHeader
|
|
200
264
|
};
|
package/dist/code-block.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/code-block.tsx","../src/lib/utils.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useState } from 'react';\nimport { Icon } from '@upbound/monarch-core';\n\nimport { cn } from '@/lib/utils';\nimport { Card, CardContent, CardFooter, CardHeader } from '@upbound/monarch-core';\n\nfunction CodeBlock({\n className,\n variant = 'default',\n size = 'default',\n ...props\n}: React.ComponentProps<'div'> & {\n variant?: 'default' | 'terminal';\n size?: 'default' | 'sm';\n}) {\n return (\n <Card\n data-slot=\"code-block\"\n data-variant={variant}\n data-size={size}\n role=\"region\"\n className={cn(\n 'group/code-block gap-0 overflow-hidden py-0',\n size === 'default' && 'text-[13px]',\n size === 'sm' && 'text-body-sm',\n variant === 'terminal' && 'border-terminal-border bg-terminal-bg text-terminal-fg ring-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CodeBlockHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <CardHeader\n className={cn(\n 'group-data-[variant=terminal]/code-block:border-terminal-border group-data-[variant=terminal]/code-block:bg-terminal-bg group-data-[variant=terminal]/code-block:text-terminal-muted flex flex-row items-center gap-2 border-b bg-[color-mix(in_oklch,var(--muted)_50%,var(--card))] py-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CodeBlockBody({\n className,\n code,\n html,\n lineNumbers,\n maxHeight,\n copyButton,\n ...props\n}: React.ComponentProps<'div'> & {\n code: string;\n html?: string;\n lineNumbers?: boolean;\n maxHeight?: string;\n copyButton?: React.ReactNode;\n}) {\n // Layout note: the copy button must stay anchored to the top-right of the\n // visible code area when the content scrolls horizontally. To make that\n // work the relative containing block (CardContent) must NOT be the\n // scrollable element — otherwise `right`-positioning is computed against\n // the scrolled content edge and the button moves with the scroll. So the\n // overflow lives on an inner wrapper and the absolute button is its\n // sibling under CardContent.\n return (\n <CardContent data-line-numbers={lineNumbers || undefined} className={cn('relative p-0!', className)} {...props}>\n {copyButton && (\n <div className=\"absolute top-2 right-2 z-10 opacity-0 transition-opacity group-hover/code-block:opacity-100\">\n {copyButton}\n </div>\n )}\n <div\n className={cn('overflow-x-auto', maxHeight && 'overflow-y-auto')}\n style={maxHeight ? { maxHeight } : undefined}\n >\n {html ? (\n <div\n className=\"[&_code]:font-mono [&_pre]:m-0 [&_pre]:bg-transparent! [&_pre]:p-4 group-data-[size=sm]/code-block:[&_pre]:p-3\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n ) : lineNumbers ? (\n <pre className=\"p-4 group-data-[size=sm]/code-block:p-3\">\n <code className=\"font-mono\">\n {code.split('\\n').map((line, i) => (\n <span key={i} className=\"line\">\n {line}\n {'\\n'}\n </span>\n ))}\n </code>\n </pre>\n ) : (\n <pre className=\"p-4 group-data-[size=sm]/code-block:p-3\">\n <code className=\"font-mono whitespace-pre\">{code}</code>\n </pre>\n )}\n </div>\n </CardContent>\n );\n}\n\nfunction CodeBlockFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <CardFooter\n className={cn(\n 'text-body-sm group-data-[variant=terminal]/code-block:border-terminal-border group-data-[variant=terminal]/code-block:bg-terminal-footer-bg group-data-[variant=terminal]/code-block:text-terminal-muted',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CodeBlockCopyButton({\n code,\n className,\n ...props\n}: Omit<React.ComponentProps<'button'>, 'children'> & {\n code: string;\n}) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n };\n\n return (\n <button\n data-slot=\"code-block-copy-button\"\n onClick={handleCopy}\n className={cn(\n 'border-border bg-background inline-flex h-7 w-7 cursor-pointer items-center justify-center rounded-md border motion-safe:transition-colors',\n 'text-muted-foreground hover:bg-accent hover:text-foreground',\n 'focus-visible:ring-ring/30 focus-visible:ring-2 focus-visible:outline-none',\n 'group-data-[variant=terminal]/code-block:border-terminal-border group-data-[variant=terminal]/code-block:bg-terminal-bg group-data-[variant=terminal]/code-block:text-terminal-muted group-data-[variant=terminal]/code-block:hover:bg-terminal-muted-hover-bg group-data-[variant=terminal]/code-block:hover:text-terminal-muted-hover-fg',\n className,\n )}\n aria-label={copied ? 'Copied' : 'Copy code'}\n {...props}\n >\n {copied ? <Icon name=\"check\" size=\"sm\" className=\"text-green-500\" /> : <Icon name=\"copy\" size=\"sm\" />}\n </button>\n );\n}\n\nexport { CodeBlock, CodeBlockHeader, CodeBlockBody, CodeBlockFooter, CodeBlockCopyButton };\n","import { clsx, type ClassValue } from 'clsx';\nimport { extendTailwindMerge } from 'tailwind-merge';\n\nconst twMerge = extendTailwindMerge({\n extend: {\n classGroups: {\n 'font-size': [\n {\n text: [\n 'display-hero',\n 'display-kpi-sm',\n 'display-kpi',\n 'display-kpi-lg',\n 'display-feature',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'body-lg',\n 'body',\n 'body-sm',\n 'caption',\n 'eyebrow',\n ],\n },\n ],\n },\n },\n});\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/code-block.tsx","../src/lib/utils.ts"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useState } from 'react';\nimport { Icon } from '@upbound/monarch-core';\n\nimport { cn } from '@/lib/utils';\nimport {\n Card,\n CardContent,\n CardFooter,\n CardHeader,\n Tooltip,\n TooltipContent,\n TooltipTrigger,\n} from '@upbound/monarch-core';\n\nfunction CodeBlock({\n className,\n variant = 'default',\n size = 'default',\n ...props\n}: React.ComponentProps<'div'> & {\n variant?: 'default' | 'terminal';\n size?: 'default' | 'sm';\n}) {\n return (\n <Card\n data-slot=\"code-block\"\n data-variant={variant}\n data-size={size}\n role=\"region\"\n className={cn(\n 'group/code-block gap-0 overflow-hidden py-0',\n size === 'default' && 'text-[13px]',\n size === 'sm' && 'text-body-sm',\n variant === 'terminal' && 'border-terminal-border bg-terminal-bg text-terminal-fg ring-0',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CodeBlockHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <CardHeader\n className={cn(\n 'group-data-[variant=terminal]/code-block:border-terminal-border group-data-[variant=terminal]/code-block:bg-terminal-bg group-data-[variant=terminal]/code-block:text-terminal-muted flex flex-row items-center gap-2 border-b bg-[color-mix(in_oklch,var(--muted)_50%,var(--card))] py-4',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CodeBlockBody({\n className,\n code,\n html,\n lineNumbers,\n maxHeight,\n copyButton,\n downloadButton,\n ...props\n}: React.ComponentProps<'div'> & {\n code: string;\n html?: string;\n lineNumbers?: boolean;\n maxHeight?: string;\n copyButton?: React.ReactNode;\n downloadButton?: React.ReactNode;\n}) {\n // Layout note: the copy/download buttons must stay anchored to the\n // top-right of the visible code area when the content scrolls\n // horizontally. To make that work the relative containing block\n // (CardContent) must NOT be the scrollable element — otherwise\n // `right`-positioning is computed against the scrolled content edge and\n // the buttons move with the scroll. So the overflow lives on an inner\n // wrapper and the absolute button group is its sibling under CardContent.\n return (\n <CardContent data-line-numbers={lineNumbers || undefined} className={cn('relative p-0!', className)} {...props}>\n {(copyButton || downloadButton) && (\n <div className=\"absolute top-2 right-2 z-10 flex items-center gap-1 opacity-0 transition-opacity group-hover/code-block:opacity-100\">\n {copyButton}\n {downloadButton}\n </div>\n )}\n <div\n className={cn('overflow-x-auto', maxHeight && 'overflow-y-auto')}\n style={maxHeight ? { maxHeight } : undefined}\n >\n {html ? (\n <div\n className=\"[&_code]:font-mono [&_pre]:m-0 [&_pre]:bg-transparent! [&_pre]:p-4 group-data-[size=sm]/code-block:[&_pre]:p-3\"\n dangerouslySetInnerHTML={{ __html: html }}\n />\n ) : lineNumbers ? (\n <pre className=\"p-4 group-data-[size=sm]/code-block:p-3\">\n <code className=\"font-mono\">\n {code.split('\\n').map((line, i) => (\n <span key={i} className=\"line\">\n {line}\n {'\\n'}\n </span>\n ))}\n </code>\n </pre>\n ) : (\n <pre className=\"p-4 group-data-[size=sm]/code-block:p-3\">\n <code className=\"font-mono whitespace-pre\">{code}</code>\n </pre>\n )}\n </div>\n </CardContent>\n );\n}\n\nfunction CodeBlockFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <CardFooter\n className={cn(\n 'text-body-sm group-data-[variant=terminal]/code-block:border-terminal-border group-data-[variant=terminal]/code-block:bg-terminal-footer-bg group-data-[variant=terminal]/code-block:text-terminal-muted',\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction CodeBlockCopyButton({\n code,\n className,\n ...props\n}: Omit<React.ComponentProps<'button'>, 'children'> & {\n code: string;\n}) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n };\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n data-slot=\"code-block-copy-button\"\n onClick={handleCopy}\n className={cn(\n 'border-border bg-background inline-flex h-7 w-7 cursor-pointer items-center justify-center rounded-md border motion-safe:transition-colors',\n 'text-muted-foreground hover:bg-accent hover:text-foreground',\n 'focus-visible:ring-ring/30 focus-visible:ring-2 focus-visible:outline-none',\n 'group-data-[variant=terminal]/code-block:border-terminal-border group-data-[variant=terminal]/code-block:bg-terminal-bg group-data-[variant=terminal]/code-block:text-terminal-muted group-data-[variant=terminal]/code-block:hover:bg-terminal-muted-hover-bg group-data-[variant=terminal]/code-block:hover:text-terminal-muted-hover-fg',\n className,\n )}\n aria-label={copied ? 'Copied' : 'Copy code'}\n {...props}\n >\n {copied ? <Icon name=\"check\" size=\"sm\" className=\"text-green-500\" /> : <Icon name=\"copy\" size=\"sm\" />}\n </button>\n </TooltipTrigger>\n <TooltipContent>{copied ? 'Copied' : 'Copy'}</TooltipContent>\n </Tooltip>\n );\n}\n\nfunction CodeBlockDownloadButton({\n code,\n fileName,\n mimeType = 'text/plain',\n className,\n ...props\n}: Omit<React.ComponentProps<'button'>, 'children'> & {\n code: string;\n fileName: string;\n mimeType?: string;\n}) {\n const [downloaded, setDownloaded] = useState(false);\n\n const handleDownload = () => {\n const blob = new Blob([code], { type: mimeType });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = fileName;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n setDownloaded(true);\n setTimeout(() => setDownloaded(false), 2000);\n };\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n data-slot=\"code-block-download-button\"\n onClick={handleDownload}\n className={cn(\n 'border-border bg-background inline-flex h-7 w-7 cursor-pointer items-center justify-center rounded-md border motion-safe:transition-colors',\n 'text-muted-foreground hover:bg-accent hover:text-foreground',\n 'focus-visible:ring-ring/30 focus-visible:ring-2 focus-visible:outline-none',\n 'group-data-[variant=terminal]/code-block:border-terminal-border group-data-[variant=terminal]/code-block:bg-terminal-bg group-data-[variant=terminal]/code-block:text-terminal-muted group-data-[variant=terminal]/code-block:hover:bg-terminal-muted-hover-bg group-data-[variant=terminal]/code-block:hover:text-terminal-muted-hover-fg',\n className,\n )}\n aria-label={downloaded ? 'Downloaded' : 'Download code'}\n {...props}\n >\n {downloaded ? <Icon name=\"check\" size=\"sm\" className=\"text-green-500\" /> : <Icon name=\"download\" size=\"sm\" />}\n </button>\n </TooltipTrigger>\n <TooltipContent>{downloaded ? 'Downloaded' : 'Download'}</TooltipContent>\n </Tooltip>\n );\n}\n\nexport { CodeBlock, CodeBlockHeader, CodeBlockBody, CodeBlockFooter, CodeBlockCopyButton, CodeBlockDownloadButton };\n","import { clsx, type ClassValue } from 'clsx';\nimport { extendTailwindMerge } from 'tailwind-merge';\n\nconst twMerge = extendTailwindMerge({\n extend: {\n classGroups: {\n 'font-size': [\n {\n text: [\n 'display-hero',\n 'display-kpi-sm',\n 'display-kpi',\n 'display-kpi-lg',\n 'display-feature',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'body-lg',\n 'body',\n 'body-sm',\n 'caption',\n 'eyebrow',\n ],\n },\n ],\n },\n },\n});\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,SAAS,gBAAgB;AACzB,SAAS,YAAY;;;ACJrB,SAAS,YAA6B;AACtC,SAAS,2BAA2B;AAEpC,IAAM,UAAU,oBAAoB;AAAA,EAClC,QAAQ;AAAA,IACN,aAAa;AAAA,MACX,aAAa;AAAA,QACX;AAAA,UACE,MAAM;AAAA,YACJ;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF,CAAC;AAEM,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;;;ADzBA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAYH,cAwDI,YAxDJ;AAVJ,SAAS,UAAU,IAQhB;AARgB,eACjB;AAAA;AAAA,IACA,UAAU;AAAA,IACV,OAAO;AAAA,EApBT,IAiBmB,IAId,kBAJc,IAId;AAAA,IAHH;AAAA,IACA;AAAA,IACA;AAAA;AAMA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,aAAW;AAAA,MACX,MAAK;AAAA,MACL,WAAW;AAAA,QACT;AAAA,QACA,SAAS,aAAa;AAAA,QACtB,SAAS,QAAQ;AAAA,QACjB,YAAY,cAAc;AAAA,QAC1B;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,gBAAgB,IAAsD;AAAtD,eAAE,YA5C3B,IA4CyB,IAAgB,kBAAhB,IAAgB,CAAd;AACzB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,cAAc,IAgBpB;AAhBoB,eACrB;AAAA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EA/DF,IAwDuB,IAQlB,kBARkB,IAQlB;AAAA,IAPH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAiBA,SACE,qBAAC,4CAAY,qBAAmB,eAAe,QAAW,WAAW,GAAG,iBAAiB,SAAS,KAAO,QAAxG,EACG;AAAA,mBAAc,mBACd,qBAAC,SAAI,WAAU,uHACZ;AAAA;AAAA,MACA;AAAA,OACH;AAAA,IAEF;AAAA,MAAC;AAAA;AAAA,QACC,WAAW,GAAG,mBAAmB,aAAa,iBAAiB;AAAA,QAC/D,OAAO,YAAY,EAAE,UAAU,IAAI;AAAA,QAElC,iBACC;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,yBAAyB,EAAE,QAAQ,KAAK;AAAA;AAAA,QAC1C,IACE,cACF,oBAAC,SAAI,WAAU,2CACb,8BAAC,UAAK,WAAU,aACb,eAAK,MAAM,IAAI,EAAE,IAAI,CAAC,MAAM,MAC3B,qBAAC,UAAa,WAAU,QACrB;AAAA;AAAA,UACA;AAAA,aAFQ,CAGX,CACD,GACH,GACF,IAEA,oBAAC,SAAI,WAAU,2CACb,8BAAC,UAAK,WAAU,4BAA4B,gBAAK,GACnD;AAAA;AAAA,IAEJ;AAAA,MACF;AAEJ;AAEA,SAAS,gBAAgB,IAAsD;AAAtD,eAAE,YAtH3B,IAsHyB,IAAgB,kBAAhB,IAAgB,CAAd;AACzB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,MACF;AAAA,OACI;AAAA,EACN;AAEJ;AAEA,SAAS,oBAAoB,IAM1B;AAN0B,eAC3B;AAAA;AAAA,IACA;AAAA,EApIF,IAkI6B,IAGxB,kBAHwB,IAGxB;AAAA,IAFH;AAAA,IACA;AAAA;AAKA,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAS,KAAK;AAE1C,QAAM,aAAa,YAAY;AAC7B,UAAM,UAAU,UAAU,UAAU,IAAI;AACxC,cAAU,IAAI;AACd,eAAW,MAAM,UAAU,KAAK,GAAG,GAAI;AAAA,EACzC;AAEA,SACE,qBAAC,WACC;AAAA,wBAAC,kBAAe,SAAO,MACrB;AAAA,MAAC;AAAA;AAAA,QACC,aAAU;AAAA,QACV,SAAS;AAAA,QACT,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,cAAY,SAAS,WAAW;AAAA,SAC5B,QAXL;AAAA,QAaE,mBAAS,oBAAC,QAAK,MAAK,SAAQ,MAAK,MAAK,WAAU,kBAAiB,IAAK,oBAAC,QAAK,MAAK,QAAO,MAAK,MAAK;AAAA;AAAA,IACrG,GACF;AAAA,IACA,oBAAC,kBAAgB,mBAAS,WAAW,QAAO;AAAA,KAC9C;AAEJ;AAEA,SAAS,wBAAwB,IAU9B;AAV8B,eAC/B;AAAA;AAAA,IACA;AAAA,IACA,WAAW;AAAA,IACX;AAAA,EA7KF,IAyKiC,IAK5B,kBAL4B,IAK5B;AAAA,IAJH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAOA,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAElD,QAAM,iBAAiB,MAAM;AAC3B,UAAM,OAAO,IAAI,KAAK,CAAC,IAAI,GAAG,EAAE,MAAM,SAAS,CAAC;AAChD,UAAM,MAAM,IAAI,gBAAgB,IAAI;AACpC,UAAM,OAAO,SAAS,cAAc,GAAG;AACvC,SAAK,OAAO;AACZ,SAAK,WAAW;AAChB,aAAS,KAAK,YAAY,IAAI;AAC9B,SAAK,MAAM;AACX,aAAS,KAAK,YAAY,IAAI;AAC9B,QAAI,gBAAgB,GAAG;AACvB,kBAAc,IAAI;AAClB,eAAW,MAAM,cAAc,KAAK,GAAG,GAAI;AAAA,EAC7C;AAEA,SACE,qBAAC,WACC;AAAA,wBAAC,kBAAe,SAAO,MACrB;AAAA,MAAC;AAAA;AAAA,QACC,aAAU;AAAA,QACV,SAAS;AAAA,QACT,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,cAAY,aAAa,eAAe;AAAA,SACpC,QAXL;AAAA,QAaE,uBAAa,oBAAC,QAAK,MAAK,SAAQ,MAAK,MAAK,WAAU,kBAAiB,IAAK,oBAAC,QAAK,MAAK,YAAW,MAAK,MAAK;AAAA;AAAA,IAC7G,GACF;AAAA,IACA,oBAAC,kBAAgB,uBAAa,eAAe,YAAW;AAAA,KAC1D;AAEJ;","names":[]}
|
package/dist/data-table.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
|
2
2
|
import { RowData, ColumnFilter, Cell, Column, ColumnOrderState, Row, ColumnDef, CellContext, HeaderGroup, TableOptions, TableState, InitialTableState, SortingFn, FilterFn, ExpandedState, ColumnFiltersState, PaginationState, SortingState, VisibilityState, ColumnPinningState, GroupingState, OnChangeFn, ColumnSizingState } from '@tanstack/react-table';
|
|
3
3
|
import * as React$1 from 'react';
|
|
4
4
|
import { ReactNode, Dispatch, SetStateAction, ComponentType } from 'react';
|
|
5
|
+
import { DropdownMenuItem, IconName } from '@upbound/monarch-core';
|
|
5
6
|
import { f as CelFilterSchema, g as CelFilterTree, k as CompileResult, i as CelRestrictedOptionSelectPayload } from './types-BULiU2qC.js';
|
|
6
|
-
import { IconName } from '@upbound/monarch-core';
|
|
7
7
|
|
|
8
8
|
/** A single entry (or nested submenu) in a cell's contextual right-click menu, alongside the built-in "Filter by this value" item. */
|
|
9
9
|
type ContextualMenuAction<TData extends RowData = RowData, TValue = unknown> = {
|
|
@@ -56,7 +56,7 @@ declare function RowActionItem({ disabled, className, tooltip, children, onClick
|
|
|
56
56
|
className?: string;
|
|
57
57
|
tooltip?: string;
|
|
58
58
|
children: React$1.ReactNode;
|
|
59
|
-
onClick?:
|
|
59
|
+
onClick?: React$1.ComponentProps<typeof DropdownMenuItem>['onClick'];
|
|
60
60
|
}): react_jsx_runtime.JSX.Element;
|
|
61
61
|
/** A ready-made right-pinned, non-sortable/filterable/hideable "Actions" column. */
|
|
62
62
|
declare function getActionsColumnDefinition<TData extends RowData, TValue = unknown>({ cell, }: Pick<ColumnDef<TData, TValue>, 'cell'>): ColumnDef<TData, TValue>;
|
|
@@ -94,7 +94,7 @@ declare function TimestampCell({ timestamp }: {
|
|
|
94
94
|
* Mirrors TableWrapper's `Filters/types.ts` shapes; `id` is omitted here since
|
|
95
95
|
* it comes from the owning `ColumnDef.id`, not the filter definition itself.
|
|
96
96
|
*/
|
|
97
|
-
type ColumnFilterType = 'checkbox' | 'radio' | 'dateRange' | '
|
|
97
|
+
type ColumnFilterType = 'checkbox' | 'radio' | 'dateRange' | 'text' | 'multiText';
|
|
98
98
|
type ColumnFilterOption = {
|
|
99
99
|
label: string;
|
|
100
100
|
value: string;
|
|
@@ -117,19 +117,25 @@ type ColumnFilterBase = {
|
|
|
117
117
|
order?: number;
|
|
118
118
|
};
|
|
119
119
|
type StaticCheckboxColumnFilter = ColumnFilterBase & {
|
|
120
|
-
type: 'checkbox'
|
|
120
|
+
type: 'checkbox';
|
|
121
121
|
options: string[] | ColumnFilterOption[];
|
|
122
122
|
fetchFilterOptions?: never;
|
|
123
|
+
/** Whether the chip's value popup is a searchable Combobox. Defaults to `true`. */
|
|
124
|
+
searchable?: boolean;
|
|
123
125
|
};
|
|
124
126
|
type AsyncCheckboxColumnFilter = ColumnFilterBase & {
|
|
125
|
-
type: 'checkbox'
|
|
127
|
+
type: 'checkbox';
|
|
126
128
|
fetchFilterOptions: FetchColumnFilterOptions;
|
|
127
129
|
options?: never;
|
|
130
|
+
/** Whether the chip's value popup is a searchable Combobox. Defaults to `true`. */
|
|
131
|
+
searchable?: boolean;
|
|
128
132
|
};
|
|
129
133
|
type CheckboxColumnFilter = StaticCheckboxColumnFilter | AsyncCheckboxColumnFilter;
|
|
130
134
|
type RadioColumnFilter = ColumnFilterBase & {
|
|
131
|
-
type: 'radio'
|
|
135
|
+
type: 'radio';
|
|
132
136
|
options: string[] | ColumnFilterOption[];
|
|
137
|
+
/** Whether the chip's value popup is a searchable Combobox. Defaults to `true`. */
|
|
138
|
+
searchable?: boolean;
|
|
133
139
|
};
|
|
134
140
|
type DateRangeColumnFilter = ColumnFilterBase & {
|
|
135
141
|
type: 'dateRange';
|
|
@@ -495,10 +501,11 @@ type ViewFilterProps<TData extends RowData> = {
|
|
|
495
501
|
* The plain (non-CEL) filter row — a thin state adapter over Monarch's
|
|
496
502
|
* `FilterBar`, mirroring TableWrapper's own `ViewFilter` (itself just a
|
|
497
503
|
* `FilterBar` adapter, not a hand-rolled UI). Every `meta.filter` shape
|
|
498
|
-
* (checkbox
|
|
499
|
-
*
|
|
500
|
-
*
|
|
501
|
-
*
|
|
504
|
+
* (checkbox, radio, dateRange, text, multiText) gets a chip here, mapped onto
|
|
505
|
+
* the matching `FilterBar` chip type — checkbox and radio chips are
|
|
506
|
+
* searchable by default (opt out per column via `meta.filter.searchable:
|
|
507
|
+
* false`). CEL-based filtering (`celFilterConfig`) is the richer,
|
|
508
|
+
* operator-driven tier this is not meant to replace.
|
|
502
509
|
*/
|
|
503
510
|
declare function ViewFilter<TData extends RowData>({ columns, columnFilters, onColumnFiltersChange, className, }: ViewFilterProps<TData>): react_jsx_runtime.JSX.Element;
|
|
504
511
|
|
package/dist/data-table.js
CHANGED
|
@@ -593,7 +593,7 @@ function RowActions({
|
|
|
593
593
|
}) {
|
|
594
594
|
return /* @__PURE__ */ jsxs3(DropdownMenu2, { children: [
|
|
595
595
|
/* @__PURE__ */ jsx4(DropdownMenuTrigger2, { asChild: true, children: /* @__PURE__ */ jsx4(Button2, { variant: "ghost", size: "icon-xs", "aria-label": "Row actions", onClick: (e) => e.stopPropagation(), children: /* @__PURE__ */ jsx4(Icon2, { name: "ellipsis", size: "sm" }) }) }),
|
|
596
|
-
/* @__PURE__ */ jsx4(DropdownMenuContent2, { align, className: contentClassName, children })
|
|
596
|
+
/* @__PURE__ */ jsx4(DropdownMenuContent2, { align, className: contentClassName, onClick: (event) => event.stopPropagation(), children })
|
|
597
597
|
] });
|
|
598
598
|
}
|
|
599
599
|
function RowActionItem({
|
|
@@ -2375,11 +2375,11 @@ function hasContextualFilterValue(value) {
|
|
|
2375
2375
|
}
|
|
2376
2376
|
function getDefaultContextualFilterValue(cell, filter) {
|
|
2377
2377
|
const value = cell.getValue();
|
|
2378
|
-
if (filter.type === "checkbox" || filter.type === "
|
|
2378
|
+
if (filter.type === "checkbox" || filter.type === "multiText") {
|
|
2379
2379
|
const values = stringArrayFromValue(value);
|
|
2380
2380
|
return values.length > 0 ? values : void 0;
|
|
2381
2381
|
}
|
|
2382
|
-
if (filter.type === "radio" || filter.type === "
|
|
2382
|
+
if (filter.type === "radio" || filter.type === "text") {
|
|
2383
2383
|
return valueToString(value);
|
|
2384
2384
|
}
|
|
2385
2385
|
return void 0;
|
|
@@ -2399,7 +2399,7 @@ function getContextualGlobalSearch(cell) {
|
|
|
2399
2399
|
return valueToString(globalSearchValue(cell));
|
|
2400
2400
|
}
|
|
2401
2401
|
function mergeColumnFilter(columnFilters, nextFilter, filterDefinition) {
|
|
2402
|
-
const shouldMergeArrayValue = (filterDefinition == null ? void 0 : filterDefinition.type) === "checkbox" || (filterDefinition == null ? void 0 : filterDefinition.type) === "
|
|
2402
|
+
const shouldMergeArrayValue = (filterDefinition == null ? void 0 : filterDefinition.type) === "checkbox" || (filterDefinition == null ? void 0 : filterDefinition.type) === "multiText";
|
|
2403
2403
|
if (!shouldMergeArrayValue) {
|
|
2404
2404
|
return [...columnFilters.filter((filter) => filter.id !== nextFilter.id), nextFilter];
|
|
2405
2405
|
}
|
|
@@ -2415,10 +2415,10 @@ function getColumnFilterCount(filterValue, filter) {
|
|
|
2415
2415
|
const isCheckboxValue = (value) => value === void 0 || Array.isArray(value) && value.every((item) => typeof item === "string");
|
|
2416
2416
|
const isRadioValue = (value) => value === void 0 || typeof value === "string";
|
|
2417
2417
|
const isDateRangeValue = (value) => value === void 0 || typeof value === "object" && value !== null && "startDate" in value && "endDate" in value;
|
|
2418
|
-
if ((filter == null ? void 0 : filter.type) === "checkbox"
|
|
2418
|
+
if ((filter == null ? void 0 : filter.type) === "checkbox") {
|
|
2419
2419
|
return isCheckboxValue(filterValue) ? (filterValue || []).length : 0;
|
|
2420
2420
|
}
|
|
2421
|
-
if ((filter == null ? void 0 : filter.type) === "radio"
|
|
2421
|
+
if ((filter == null ? void 0 : filter.type) === "radio") {
|
|
2422
2422
|
return isRadioValue(filterValue) && filterValue !== void 0 ? 1 : 0;
|
|
2423
2423
|
}
|
|
2424
2424
|
if ((filter == null ? void 0 : filter.type) === "dateRange") {
|
|
@@ -4187,8 +4187,8 @@ function DateFilterChip({
|
|
|
4187
4187
|
|
|
4188
4188
|
// src/lib/data-table/filter-types.ts
|
|
4189
4189
|
var isDateRangeColumnFilter = (definition) => definition.type === "dateRange";
|
|
4190
|
-
var isRadioColumnFilter = (definition) => definition.type === "radio"
|
|
4191
|
-
var isCheckboxColumnFilter = (definition) => definition.type === "checkbox"
|
|
4190
|
+
var isRadioColumnFilter = (definition) => definition.type === "radio";
|
|
4191
|
+
var isCheckboxColumnFilter = (definition) => definition.type === "checkbox";
|
|
4192
4192
|
var isMultiTextColumnFilter = (definition) => definition.type === "multiText";
|
|
4193
4193
|
|
|
4194
4194
|
// src/data-table/view-filter.tsx
|
|
@@ -4197,21 +4197,21 @@ function toFilterOption(opt) {
|
|
|
4197
4197
|
return typeof opt === "string" ? { value: opt, label: opt } : { value: opt.value, label: opt.label };
|
|
4198
4198
|
}
|
|
4199
4199
|
function toFilterBarDefinition(key, filter) {
|
|
4200
|
-
var _a;
|
|
4200
|
+
var _a, _b, _c;
|
|
4201
4201
|
const base = { key, label: filter.title, order: (_a = filter.order) != null ? _a : 0 };
|
|
4202
4202
|
if (isCheckboxColumnFilter(filter)) {
|
|
4203
4203
|
const options = "options" in filter && filter.options ? filter.options : [];
|
|
4204
4204
|
return __spreadProps(__spreadValues({}, base), {
|
|
4205
4205
|
type: "checkbox",
|
|
4206
4206
|
options: options.map(toFilterOption),
|
|
4207
|
-
searchable: filter.
|
|
4207
|
+
searchable: (_b = filter.searchable) != null ? _b : true
|
|
4208
4208
|
});
|
|
4209
4209
|
}
|
|
4210
4210
|
if (isRadioColumnFilter(filter)) {
|
|
4211
4211
|
return __spreadProps(__spreadValues({}, base), {
|
|
4212
4212
|
type: "radio",
|
|
4213
4213
|
options: filter.options.map(toFilterOption),
|
|
4214
|
-
searchable: filter.
|
|
4214
|
+
searchable: (_c = filter.searchable) != null ? _c : true
|
|
4215
4215
|
});
|
|
4216
4216
|
}
|
|
4217
4217
|
if (isDateRangeColumnFilter(filter)) {
|