@epicbagel/saas-kit 1.32.0 → 1.34.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/README.md +67 -0
- package/THIRD_PARTY_NOTICES.md +6 -5
- package/dist/chunk-2BNEE3U6.cjs +36 -0
- package/dist/chunk-2DCJ2SFU.js +20 -0
- package/dist/chunk-5GFMSK27.js +489 -0
- package/dist/chunk-5PHOKJCT.cjs +42 -0
- package/dist/chunk-B54ZEKBG.cjs +63 -0
- package/dist/chunk-BB7PO2BW.js +67 -0
- package/dist/chunk-BOMVE7QO.cjs +47 -0
- package/dist/{chunk-FPOJ2NGG.js → chunk-C3VZMTVB.js} +1 -1
- package/dist/chunk-CXAFTEEP.cjs +20 -0
- package/dist/chunk-EXHF3QUY.js +36 -0
- package/dist/chunk-FYNHRHVY.cjs +47 -0
- package/dist/chunk-HTTRUJQU.cjs +60 -0
- package/dist/chunk-I3GBXIFL.cjs +67 -0
- package/dist/chunk-O3G3TVPU.js +27 -0
- package/dist/{chunk-JS6BLIWL.js → chunk-ROUWBWEQ.js} +7 -7
- package/dist/chunk-TDCVZKMX.cjs +27 -0
- package/dist/{chunk-E2UVQXBO.cjs → chunk-TP74SBRH.cjs} +6 -6
- package/dist/chunk-TUQVHPSI.js +60 -0
- package/dist/chunk-UKYUWSF2.cjs +489 -0
- package/dist/{chunk-MOJHETNO.cjs → chunk-VUMLLKWY.cjs} +5 -5
- package/dist/chunk-VWOWPNKT.js +73 -0
- package/dist/chunk-W5L6LQI3.js +42 -0
- package/dist/chunk-WMTCL463.js +47 -0
- package/dist/chunk-WTVL2FK7.js +47 -0
- package/dist/chunk-XH2I3YJ6.js +63 -0
- package/dist/chunk-Y6X6XDHE.cjs +73 -0
- package/dist/primitives/accent-theme.cjs +7 -0
- package/dist/primitives/accent-theme.d.cts +32 -0
- package/dist/primitives/accent-theme.d.ts +32 -0
- package/dist/primitives/accent-theme.js +7 -0
- package/dist/primitives/activity-feed.cjs +3 -3
- package/dist/primitives/activity-feed.js +4 -4
- package/dist/primitives/anchor.cjs +3 -30
- package/dist/primitives/anchor.js +3 -30
- package/dist/primitives/app-layout.cjs +114 -0
- package/dist/primitives/app-layout.d.cts +47 -0
- package/dist/primitives/app-layout.d.ts +47 -0
- package/dist/primitives/app-layout.js +114 -0
- package/dist/primitives/app-sidebar.cjs +52 -0
- package/dist/primitives/app-sidebar.d.cts +105 -0
- package/dist/primitives/app-sidebar.d.ts +105 -0
- package/dist/primitives/app-sidebar.js +52 -0
- package/dist/primitives/back-bar.cjs +37 -0
- package/dist/primitives/back-bar.d.cts +31 -0
- package/dist/primitives/back-bar.d.ts +31 -0
- package/dist/primitives/back-bar.js +37 -0
- package/dist/primitives/batch-action-bar.cjs +134 -0
- package/dist/primitives/batch-action-bar.d.cts +27 -0
- package/dist/primitives/batch-action-bar.d.ts +27 -0
- package/dist/primitives/batch-action-bar.js +134 -0
- package/dist/primitives/board-view.cjs +7 -7
- package/dist/primitives/board-view.js +6 -6
- package/dist/primitives/brand-mark.cjs +8 -0
- package/dist/primitives/brand-mark.d.cts +10 -0
- package/dist/primitives/brand-mark.d.ts +10 -0
- package/dist/primitives/brand-mark.js +8 -0
- package/dist/primitives/branded-page.cjs +201 -0
- package/dist/primitives/branded-page.d.cts +118 -0
- package/dist/primitives/branded-page.d.ts +118 -0
- package/dist/primitives/branded-page.js +201 -0
- package/dist/primitives/call-card.cjs +2 -2
- package/dist/primitives/call-card.js +3 -3
- package/dist/primitives/chat.cjs +21 -21
- package/dist/primitives/chat.js +17 -17
- package/dist/primitives/command.cjs +129 -0
- package/dist/primitives/command.d.cts +60 -0
- package/dist/primitives/command.d.ts +60 -0
- package/dist/primitives/command.js +129 -0
- package/dist/primitives/compact-list.cjs +24 -0
- package/dist/primitives/compact-list.d.cts +18 -0
- package/dist/primitives/compact-list.d.ts +18 -0
- package/dist/primitives/compact-list.js +24 -0
- package/dist/primitives/connection.cjs +2 -2
- package/dist/primitives/connection.js +2 -2
- package/dist/primitives/context-bar.cjs +57 -0
- package/dist/primitives/context-bar.d.cts +50 -0
- package/dist/primitives/context-bar.d.ts +50 -0
- package/dist/primitives/context-bar.js +57 -0
- package/dist/primitives/cycling-prompt.cjs +102 -0
- package/dist/primitives/cycling-prompt.d.cts +24 -0
- package/dist/primitives/cycling-prompt.d.ts +24 -0
- package/dist/primitives/cycling-prompt.js +102 -0
- package/dist/primitives/dialog.d.cts +9 -9
- package/dist/primitives/dialog.d.ts +9 -9
- package/dist/primitives/document-preview.cjs +5 -5
- package/dist/primitives/document-preview.js +3 -3
- package/dist/primitives/dotted-list.cjs +41 -0
- package/dist/primitives/dotted-list.d.cts +28 -0
- package/dist/primitives/dotted-list.d.ts +28 -0
- package/dist/primitives/dotted-list.js +41 -0
- package/dist/primitives/drawer.d.cts +6 -6
- package/dist/primitives/drawer.d.ts +6 -6
- package/dist/primitives/field.cjs +3 -3
- package/dist/primitives/field.js +2 -2
- package/dist/primitives/file-dropzone.cjs +3 -3
- package/dist/primitives/file-dropzone.js +2 -2
- package/dist/primitives/file-preview-internals.cjs +4 -4
- package/dist/primitives/file-preview-internals.js +3 -3
- package/dist/primitives/file-preview.cjs +12 -12
- package/dist/primitives/file-preview.js +3 -3
- package/dist/primitives/filter-bar.cjs +4 -4
- package/dist/primitives/filter-bar.js +3 -3
- package/dist/primitives/fixed-action-bar.cjs +9 -0
- package/dist/primitives/fixed-action-bar.d.cts +15 -0
- package/dist/primitives/fixed-action-bar.d.ts +15 -0
- package/dist/primitives/fixed-action-bar.js +9 -0
- package/dist/primitives/floating-action-button.cjs +65 -0
- package/dist/primitives/floating-action-button.d.cts +52 -0
- package/dist/primitives/floating-action-button.d.ts +52 -0
- package/dist/primitives/floating-action-button.js +65 -0
- package/dist/primitives/form-section.cjs +38 -0
- package/dist/primitives/form-section.d.cts +43 -0
- package/dist/primitives/form-section.d.ts +43 -0
- package/dist/primitives/form-section.js +38 -0
- package/dist/primitives/key-value-grid.cjs +52 -0
- package/dist/primitives/key-value-grid.d.cts +20 -0
- package/dist/primitives/key-value-grid.d.ts +20 -0
- package/dist/primitives/key-value-grid.js +52 -0
- package/dist/primitives/marketing-footer.cjs +34 -0
- package/dist/primitives/marketing-footer.d.cts +29 -0
- package/dist/primitives/marketing-footer.d.ts +29 -0
- package/dist/primitives/marketing-footer.js +34 -0
- package/dist/primitives/marketing-header.cjs +8 -0
- package/dist/primitives/marketing-header.d.cts +31 -0
- package/dist/primitives/marketing-header.d.ts +31 -0
- package/dist/primitives/marketing-header.js +8 -0
- package/dist/primitives/marketing-section.cjs +8 -0
- package/dist/primitives/marketing-section.d.cts +35 -0
- package/dist/primitives/marketing-section.d.ts +35 -0
- package/dist/primitives/marketing-section.js +8 -0
- package/dist/primitives/marketing-shell.cjs +28 -0
- package/dist/primitives/marketing-shell.d.cts +14 -0
- package/dist/primitives/marketing-shell.d.ts +14 -0
- package/dist/primitives/marketing-shell.js +28 -0
- package/dist/primitives/notes.cjs +3 -3
- package/dist/primitives/notes.js +3 -3
- package/dist/primitives/page-header.cjs +3 -67
- package/dist/primitives/page-header.js +3 -67
- package/dist/primitives/page-shell.cjs +3 -41
- package/dist/primitives/page-shell.js +3 -41
- package/dist/primitives/page-tabs.cjs +4 -57
- package/dist/primitives/page-tabs.js +4 -57
- package/dist/primitives/pager.cjs +85 -0
- package/dist/primitives/pager.d.cts +39 -0
- package/dist/primitives/pager.d.ts +39 -0
- package/dist/primitives/pager.js +85 -0
- package/dist/primitives/pagination.cjs +119 -0
- package/dist/primitives/pagination.d.cts +41 -0
- package/dist/primitives/pagination.d.ts +41 -0
- package/dist/primitives/pagination.js +119 -0
- package/dist/primitives/poster.cjs +11 -1
- package/dist/primitives/poster.d.cts +12 -1
- package/dist/primitives/poster.d.ts +12 -1
- package/dist/primitives/poster.js +10 -0
- package/dist/primitives/resource-list.cjs +7 -7
- package/dist/primitives/resource-list.js +6 -6
- package/dist/primitives/responsive-dialog.cjs +3 -3
- package/dist/primitives/responsive-dialog.js +2 -2
- package/dist/primitives/responsive-embed.cjs +29 -0
- package/dist/primitives/responsive-embed.d.cts +14 -0
- package/dist/primitives/responsive-embed.d.ts +14 -0
- package/dist/primitives/responsive-embed.js +29 -0
- package/dist/primitives/save-bar.cjs +91 -0
- package/dist/primitives/save-bar.d.cts +55 -0
- package/dist/primitives/save-bar.d.ts +55 -0
- package/dist/primitives/save-bar.js +91 -0
- package/dist/primitives/section.cjs +2 -2
- package/dist/primitives/section.js +3 -3
- package/dist/primitives/settings-list.cjs +10 -0
- package/dist/primitives/settings-list.d.cts +31 -0
- package/dist/primitives/settings-list.d.ts +31 -0
- package/dist/primitives/settings-list.js +10 -0
- package/dist/primitives/settings-section.cjs +34 -0
- package/dist/primitives/settings-section.d.cts +44 -0
- package/dist/primitives/settings-section.d.ts +44 -0
- package/dist/primitives/settings-section.js +34 -0
- package/dist/primitives/sheet.d.cts +9 -9
- package/dist/primitives/sheet.d.ts +9 -9
- package/dist/primitives/short-video.cjs +110 -0
- package/dist/primitives/short-video.d.cts +30 -0
- package/dist/primitives/short-video.d.ts +30 -0
- package/dist/primitives/short-video.js +110 -0
- package/dist/primitives/stats-card.cjs +46 -0
- package/dist/primitives/stats-card.d.cts +19 -0
- package/dist/primitives/stats-card.d.ts +19 -0
- package/dist/primitives/stats-card.js +46 -0
- package/dist/primitives/stats-strip.cjs +38 -0
- package/dist/primitives/stats-strip.d.cts +24 -0
- package/dist/primitives/stats-strip.d.ts +24 -0
- package/dist/primitives/stats-strip.js +38 -0
- package/dist/primitives/step-list.cjs +32 -0
- package/dist/primitives/step-list.d.cts +19 -0
- package/dist/primitives/step-list.d.ts +19 -0
- package/dist/primitives/step-list.js +32 -0
- package/dist/primitives/steps.cjs +77 -0
- package/dist/primitives/steps.d.cts +35 -0
- package/dist/primitives/steps.d.ts +35 -0
- package/dist/primitives/steps.js +77 -0
- package/dist/primitives/switch-field.cjs +3 -3
- package/dist/primitives/switch-field.js +3 -3
- package/dist/primitives/tabbed-page-header.cjs +53 -0
- package/dist/primitives/tabbed-page-header.d.cts +26 -0
- package/dist/primitives/tabbed-page-header.d.ts +26 -0
- package/dist/primitives/tabbed-page-header.js +53 -0
- package/dist/primitives/theme-selector.cjs +15 -15
- package/dist/primitives/theme-selector.js +2 -2
- package/dist/primitives/voice-dictation-button.cjs +3 -3
- package/dist/primitives/voice-dictation-button.js +2 -2
- package/dist/primitives/voice-session-controls.cjs +3 -3
- package/dist/primitives/voice-session-controls.js +2 -2
- package/dist/primitives/workflow-assistant.cjs +4 -4
- package/dist/primitives/workflow-assistant.js +2 -2
- package/package.json +322 -1
- package/src/styles/components/poster.css +42 -1
- package/dist/{chunk-PH2TV7XI.cjs → chunk-2YW5VA2V.cjs} +2 -2
- package/dist/{chunk-UFFHGKI7.js → chunk-6LB37JWO.js} +8 -8
- package/dist/{chunk-AO56ET4F.cjs → chunk-BTHYGHOH.cjs} +2 -2
- package/dist/{chunk-WHDHUYS6.js → chunk-HBRVOGLA.js} +3 -3
- package/dist/{chunk-6O3DUMF7.js → chunk-HTUYUMAH.js} +3 -3
- package/dist/{chunk-PNI354BY.cjs → chunk-JMNDFISN.cjs} +2 -2
- package/dist/{chunk-CRZ4INEJ.js → chunk-JTI4244T.js} +10 -10
- package/dist/{chunk-ZGTPNSR7.js → chunk-NNEV5RHQ.js} +3 -3
- package/dist/{chunk-TWCJMFST.js → chunk-O42YC6ZQ.js} +3 -3
- package/dist/{chunk-MW67PHAQ.cjs → chunk-S2IMM37Q.cjs} +6 -6
- package/dist/{chunk-ZJFYOXSM.cjs → chunk-SRVRNHCX.cjs} +2 -2
- package/dist/{chunk-ZLEM2SAU.cjs → chunk-Z3JJSNR5.cjs} +2 -2
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
|
+
"use client";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
var _chunkKWLSBTB2cjs = require('../chunk-KWLSBTB2.cjs');
|
|
6
|
+
|
|
7
|
+
// src/primitives/context-bar.tsx
|
|
8
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
9
|
+
var TONES = {
|
|
10
|
+
/** Inverted/solid — the strongest "you are in a special mode" signal (preview, impersonation). */
|
|
11
|
+
dark: "bg-foreground text-background",
|
|
12
|
+
/** Quiet, in-flow notice. */
|
|
13
|
+
muted: "bg-muted text-muted-foreground",
|
|
14
|
+
/** Caution — staging, destructive context, "this is live data". */
|
|
15
|
+
warning: "bg-amber-500 text-black",
|
|
16
|
+
/** Branded/informational. */
|
|
17
|
+
info: "bg-primary text-primary-foreground"
|
|
18
|
+
};
|
|
19
|
+
function ContextBar({
|
|
20
|
+
label,
|
|
21
|
+
icon,
|
|
22
|
+
children,
|
|
23
|
+
actions,
|
|
24
|
+
tone = "dark",
|
|
25
|
+
sticky = false,
|
|
26
|
+
frosted = false,
|
|
27
|
+
className,
|
|
28
|
+
maxWidth
|
|
29
|
+
}) {
|
|
30
|
+
const frostedMuted = frosted && tone === "muted";
|
|
31
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
32
|
+
"div",
|
|
33
|
+
{
|
|
34
|
+
"data-slot": "context-bar",
|
|
35
|
+
"data-frosted-surface": frostedMuted ? "muted" : void 0,
|
|
36
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0, "w-full", frostedMuted ? "text-foreground" : TONES[tone], sticky && "sticky top-0 z-40", className),
|
|
37
|
+
children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
38
|
+
"div",
|
|
39
|
+
{
|
|
40
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
41
|
+
"mx-auto flex w-full items-center gap-x-3 gap-y-2 px-4 py-3 sm:px-6",
|
|
42
|
+
maxWidth
|
|
43
|
+
),
|
|
44
|
+
children: [
|
|
45
|
+
icon && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex shrink-0 items-center opacity-80 [&_svg]:size-4", children: icon }),
|
|
46
|
+
label && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "shrink-0 font-mono text-xs font-medium uppercase tracking-[0.2em]", children: label }),
|
|
47
|
+
children ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: _chunkKWLSBTB2cjs.cn.call(void 0, "min-w-0 flex-1 truncate text-sm", !frostedMuted && "opacity-90"), children }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex-1" }),
|
|
48
|
+
actions && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "flex shrink-0 items-center gap-2", children: actions })
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
exports.ContextBar = ContextBar;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
declare const TONES: {
|
|
5
|
+
/** Inverted/solid — the strongest "you are in a special mode" signal (preview, impersonation). */
|
|
6
|
+
readonly dark: "bg-foreground text-background";
|
|
7
|
+
/** Quiet, in-flow notice. */
|
|
8
|
+
readonly muted: "bg-muted text-muted-foreground";
|
|
9
|
+
/** Caution — staging, destructive context, "this is live data". */
|
|
10
|
+
readonly warning: "bg-amber-500 text-black";
|
|
11
|
+
/** Branded/informational. */
|
|
12
|
+
readonly info: "bg-primary text-primary-foreground";
|
|
13
|
+
};
|
|
14
|
+
interface ContextBarProps {
|
|
15
|
+
/**
|
|
16
|
+
* Short tag rendered in mono uppercase, e.g. `"Preview"`, `"Staging"`, `"Viewing as"`. The "what
|
|
17
|
+
* mode is this" label.
|
|
18
|
+
*/
|
|
19
|
+
label?: ReactNode;
|
|
20
|
+
/** Leading icon (sized to 1rem). */
|
|
21
|
+
icon?: ReactNode;
|
|
22
|
+
/** The message — a sentence explaining the context. */
|
|
23
|
+
children?: ReactNode;
|
|
24
|
+
/** Right-aligned controls — a toggle, a button, a dismiss. */
|
|
25
|
+
actions?: ReactNode;
|
|
26
|
+
/** Visual tone. Default `"dark"` (inverted). */
|
|
27
|
+
tone?: keyof typeof TONES;
|
|
28
|
+
/** Pin to the top of the scroll container. Default `false`. */
|
|
29
|
+
sticky?: boolean;
|
|
30
|
+
/** Blurred translucent muted tone; warning, info and dark tones stay solid for contrast. */
|
|
31
|
+
frosted?: boolean;
|
|
32
|
+
className?: string;
|
|
33
|
+
/** Constrain the inner row to a max width (else full-bleed). e.g. `"max-w-5xl"`. */
|
|
34
|
+
maxWidth?: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* A full-width bar that announces the **current mode/context** of a view — a preview, an
|
|
38
|
+
* impersonation session, a staging environment, a draft — with an optional label, message, and
|
|
39
|
+
* right-aligned actions. App-agnostic: the booking preview is one use; "Viewing as {user}",
|
|
40
|
+
* "Staging — not real data", and "Draft — unpublished" are others.
|
|
41
|
+
*
|
|
42
|
+
* ```tsx
|
|
43
|
+
* <ContextBar tone="dark" icon={<Eye />} label="Preview" actions={<CopyButton … />}>
|
|
44
|
+
* This is exactly what your recipient sees — nothing is booked here.
|
|
45
|
+
* </ContextBar>
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
declare function ContextBar({ label, icon, children, actions, tone, sticky, frosted, className, maxWidth, }: ContextBarProps): react_jsx_runtime.JSX.Element;
|
|
49
|
+
|
|
50
|
+
export { ContextBar, type ContextBarProps };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
|
|
4
|
+
declare const TONES: {
|
|
5
|
+
/** Inverted/solid — the strongest "you are in a special mode" signal (preview, impersonation). */
|
|
6
|
+
readonly dark: "bg-foreground text-background";
|
|
7
|
+
/** Quiet, in-flow notice. */
|
|
8
|
+
readonly muted: "bg-muted text-muted-foreground";
|
|
9
|
+
/** Caution — staging, destructive context, "this is live data". */
|
|
10
|
+
readonly warning: "bg-amber-500 text-black";
|
|
11
|
+
/** Branded/informational. */
|
|
12
|
+
readonly info: "bg-primary text-primary-foreground";
|
|
13
|
+
};
|
|
14
|
+
interface ContextBarProps {
|
|
15
|
+
/**
|
|
16
|
+
* Short tag rendered in mono uppercase, e.g. `"Preview"`, `"Staging"`, `"Viewing as"`. The "what
|
|
17
|
+
* mode is this" label.
|
|
18
|
+
*/
|
|
19
|
+
label?: ReactNode;
|
|
20
|
+
/** Leading icon (sized to 1rem). */
|
|
21
|
+
icon?: ReactNode;
|
|
22
|
+
/** The message — a sentence explaining the context. */
|
|
23
|
+
children?: ReactNode;
|
|
24
|
+
/** Right-aligned controls — a toggle, a button, a dismiss. */
|
|
25
|
+
actions?: ReactNode;
|
|
26
|
+
/** Visual tone. Default `"dark"` (inverted). */
|
|
27
|
+
tone?: keyof typeof TONES;
|
|
28
|
+
/** Pin to the top of the scroll container. Default `false`. */
|
|
29
|
+
sticky?: boolean;
|
|
30
|
+
/** Blurred translucent muted tone; warning, info and dark tones stay solid for contrast. */
|
|
31
|
+
frosted?: boolean;
|
|
32
|
+
className?: string;
|
|
33
|
+
/** Constrain the inner row to a max width (else full-bleed). e.g. `"max-w-5xl"`. */
|
|
34
|
+
maxWidth?: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* A full-width bar that announces the **current mode/context** of a view — a preview, an
|
|
38
|
+
* impersonation session, a staging environment, a draft — with an optional label, message, and
|
|
39
|
+
* right-aligned actions. App-agnostic: the booking preview is one use; "Viewing as {user}",
|
|
40
|
+
* "Staging — not real data", and "Draft — unpublished" are others.
|
|
41
|
+
*
|
|
42
|
+
* ```tsx
|
|
43
|
+
* <ContextBar tone="dark" icon={<Eye />} label="Preview" actions={<CopyButton … />}>
|
|
44
|
+
* This is exactly what your recipient sees — nothing is booked here.
|
|
45
|
+
* </ContextBar>
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
declare function ContextBar({ label, icon, children, actions, tone, sticky, frosted, className, maxWidth, }: ContextBarProps): react_jsx_runtime.JSX.Element;
|
|
49
|
+
|
|
50
|
+
export { ContextBar, type ContextBarProps };
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use client";
|
|
3
|
+
import {
|
|
4
|
+
cn
|
|
5
|
+
} from "../chunk-G6SRSWXB.js";
|
|
6
|
+
|
|
7
|
+
// src/primitives/context-bar.tsx
|
|
8
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
var TONES = {
|
|
10
|
+
/** Inverted/solid — the strongest "you are in a special mode" signal (preview, impersonation). */
|
|
11
|
+
dark: "bg-foreground text-background",
|
|
12
|
+
/** Quiet, in-flow notice. */
|
|
13
|
+
muted: "bg-muted text-muted-foreground",
|
|
14
|
+
/** Caution — staging, destructive context, "this is live data". */
|
|
15
|
+
warning: "bg-amber-500 text-black",
|
|
16
|
+
/** Branded/informational. */
|
|
17
|
+
info: "bg-primary text-primary-foreground"
|
|
18
|
+
};
|
|
19
|
+
function ContextBar({
|
|
20
|
+
label,
|
|
21
|
+
icon,
|
|
22
|
+
children,
|
|
23
|
+
actions,
|
|
24
|
+
tone = "dark",
|
|
25
|
+
sticky = false,
|
|
26
|
+
frosted = false,
|
|
27
|
+
className,
|
|
28
|
+
maxWidth
|
|
29
|
+
}) {
|
|
30
|
+
const frostedMuted = frosted && tone === "muted";
|
|
31
|
+
return /* @__PURE__ */ jsx(
|
|
32
|
+
"div",
|
|
33
|
+
{
|
|
34
|
+
"data-slot": "context-bar",
|
|
35
|
+
"data-frosted-surface": frostedMuted ? "muted" : void 0,
|
|
36
|
+
className: cn("w-full", frostedMuted ? "text-foreground" : TONES[tone], sticky && "sticky top-0 z-40", className),
|
|
37
|
+
children: /* @__PURE__ */ jsxs(
|
|
38
|
+
"div",
|
|
39
|
+
{
|
|
40
|
+
className: cn(
|
|
41
|
+
"mx-auto flex w-full items-center gap-x-3 gap-y-2 px-4 py-3 sm:px-6",
|
|
42
|
+
maxWidth
|
|
43
|
+
),
|
|
44
|
+
children: [
|
|
45
|
+
icon && /* @__PURE__ */ jsx("span", { className: "flex shrink-0 items-center opacity-80 [&_svg]:size-4", children: icon }),
|
|
46
|
+
label && /* @__PURE__ */ jsx("span", { className: "shrink-0 font-mono text-xs font-medium uppercase tracking-[0.2em]", children: label }),
|
|
47
|
+
children ? /* @__PURE__ */ jsx("span", { className: cn("min-w-0 flex-1 truncate text-sm", !frostedMuted && "opacity-90"), children }) : /* @__PURE__ */ jsx("span", { className: "flex-1" }),
|
|
48
|
+
actions && /* @__PURE__ */ jsx("span", { className: "flex shrink-0 items-center gap-2", children: actions })
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
export {
|
|
56
|
+
ContextBar
|
|
57
|
+
};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
|
|
2
|
+
"use client";
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
var _chunkKWLSBTB2cjs = require('../chunk-KWLSBTB2.cjs');
|
|
6
|
+
|
|
7
|
+
// src/primitives/cycling-prompt.tsx
|
|
8
|
+
var _react = require('react');
|
|
9
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
10
|
+
var TYPE_MS = 45;
|
|
11
|
+
var DELETE_MS = 22;
|
|
12
|
+
var HOLD_MS = 1800;
|
|
13
|
+
function CyclingPrompt({
|
|
14
|
+
prompts,
|
|
15
|
+
className
|
|
16
|
+
}) {
|
|
17
|
+
const [idx, setIdx] = _react.useState.call(void 0, 0);
|
|
18
|
+
const [text, setText] = _react.useState.call(void 0, "");
|
|
19
|
+
const [phase, setPhase] = _react.useState.call(void 0,
|
|
20
|
+
"typing"
|
|
21
|
+
);
|
|
22
|
+
const [reducedMotion, setReducedMotion] = _react.useState.call(void 0, false);
|
|
23
|
+
_react.useEffect.call(void 0, () => {
|
|
24
|
+
if (typeof window === "undefined") return;
|
|
25
|
+
const mq = window.matchMedia("(prefers-reduced-motion: reduce)");
|
|
26
|
+
setReducedMotion(mq.matches);
|
|
27
|
+
const onChange = () => setReducedMotion(mq.matches);
|
|
28
|
+
mq.addEventListener("change", onChange);
|
|
29
|
+
return () => mq.removeEventListener("change", onChange);
|
|
30
|
+
}, []);
|
|
31
|
+
_react.useEffect.call(void 0, () => {
|
|
32
|
+
if (reducedMotion || prompts.length === 0) return;
|
|
33
|
+
const current = _nullishCoalesce(prompts[idx], () => ( ""));
|
|
34
|
+
if (phase === "typing") {
|
|
35
|
+
if (text.length < current.length) {
|
|
36
|
+
const t2 = setTimeout(
|
|
37
|
+
() => setText(current.slice(0, text.length + 1)),
|
|
38
|
+
TYPE_MS
|
|
39
|
+
);
|
|
40
|
+
return () => clearTimeout(t2);
|
|
41
|
+
}
|
|
42
|
+
const t = setTimeout(() => setPhase("deleting"), HOLD_MS);
|
|
43
|
+
return () => clearTimeout(t);
|
|
44
|
+
}
|
|
45
|
+
if (phase === "deleting") {
|
|
46
|
+
if (text.length > 0) {
|
|
47
|
+
const t = setTimeout(() => setText(text.slice(0, -1)), DELETE_MS);
|
|
48
|
+
return () => clearTimeout(t);
|
|
49
|
+
}
|
|
50
|
+
setIdx((i) => (i + 1) % prompts.length);
|
|
51
|
+
setPhase("typing");
|
|
52
|
+
}
|
|
53
|
+
}, [text, phase, idx, reducedMotion, prompts]);
|
|
54
|
+
const display = reducedMotion ? _nullishCoalesce(prompts[0], () => ( "")) : text;
|
|
55
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: _chunkKWLSBTB2cjs.cn.call(void 0, "inline-flex items-baseline", className), children: [
|
|
56
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { children: display }),
|
|
57
|
+
!reducedMotion && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
58
|
+
"span",
|
|
59
|
+
{
|
|
60
|
+
"aria-hidden": true,
|
|
61
|
+
className: "ml-0.5 inline-block h-[1em] w-[2px] translate-y-[0.15em] animate-pulse bg-current"
|
|
62
|
+
}
|
|
63
|
+
)
|
|
64
|
+
] });
|
|
65
|
+
}
|
|
66
|
+
function TypewriterText({
|
|
67
|
+
text,
|
|
68
|
+
active = true,
|
|
69
|
+
speedMs = 24,
|
|
70
|
+
onComplete,
|
|
71
|
+
className
|
|
72
|
+
}) {
|
|
73
|
+
const [length, setLength] = _react.useState.call(void 0, active ? 0 : text.length);
|
|
74
|
+
const completed = _react.useRef.call(void 0, false);
|
|
75
|
+
const onCompleteRef = _react.useRef.call(void 0, onComplete);
|
|
76
|
+
_react.useEffect.call(void 0, () => {
|
|
77
|
+
onCompleteRef.current = onComplete;
|
|
78
|
+
}, [onComplete]);
|
|
79
|
+
_react.useEffect.call(void 0, () => {
|
|
80
|
+
setLength(active ? 0 : text.length);
|
|
81
|
+
completed.current = false;
|
|
82
|
+
}, [active, text]);
|
|
83
|
+
_react.useEffect.call(void 0, () => {
|
|
84
|
+
if (!active || length >= text.length) {
|
|
85
|
+
if (length >= text.length && !completed.current) {
|
|
86
|
+
completed.current = true;
|
|
87
|
+
_optionalChain([onCompleteRef, 'access', _ => _.current, 'optionalCall', _2 => _2()]);
|
|
88
|
+
}
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const timer = window.setTimeout(() => setLength((value) => value + 1), speedMs);
|
|
92
|
+
return () => window.clearTimeout(timer);
|
|
93
|
+
}, [active, length, speedMs, text.length]);
|
|
94
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: _chunkKWLSBTB2cjs.cn.call(void 0, "whitespace-pre-wrap", className), "aria-label": text, children: [
|
|
95
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { "aria-hidden": true, children: text.slice(0, length) }),
|
|
96
|
+
active && length < text.length && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { "aria-hidden": true, className: "ml-0.5 inline-block h-[1em] w-px animate-pulse bg-current motion-reduce:hidden" })
|
|
97
|
+
] });
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
exports.CyclingPrompt = CyclingPrompt; exports.TypewriterText = TypewriterText;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* CyclingPrompt — typewriter caption that types, holds, deletes, and
|
|
5
|
+
* advances through a list of phrases. Pure useEffect state machine.
|
|
6
|
+
* Honors prefers-reduced-motion by showing the first phrase statically.
|
|
7
|
+
*
|
|
8
|
+
* Phrases are caller-supplied so each app shows its own examples.
|
|
9
|
+
*/
|
|
10
|
+
declare function CyclingPrompt({ prompts, className, }: {
|
|
11
|
+
prompts: string[];
|
|
12
|
+
className?: string;
|
|
13
|
+
}): react_jsx_runtime.JSX.Element;
|
|
14
|
+
interface TypewriterTextProps {
|
|
15
|
+
text: string;
|
|
16
|
+
active?: boolean;
|
|
17
|
+
speedMs?: number;
|
|
18
|
+
onComplete?: () => void;
|
|
19
|
+
className?: string;
|
|
20
|
+
}
|
|
21
|
+
/** One-shot, accessible typewriter text for guided product demonstrations. */
|
|
22
|
+
declare function TypewriterText({ text, active, speedMs, onComplete, className, }: TypewriterTextProps): react_jsx_runtime.JSX.Element;
|
|
23
|
+
|
|
24
|
+
export { CyclingPrompt, TypewriterText, type TypewriterTextProps };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* CyclingPrompt — typewriter caption that types, holds, deletes, and
|
|
5
|
+
* advances through a list of phrases. Pure useEffect state machine.
|
|
6
|
+
* Honors prefers-reduced-motion by showing the first phrase statically.
|
|
7
|
+
*
|
|
8
|
+
* Phrases are caller-supplied so each app shows its own examples.
|
|
9
|
+
*/
|
|
10
|
+
declare function CyclingPrompt({ prompts, className, }: {
|
|
11
|
+
prompts: string[];
|
|
12
|
+
className?: string;
|
|
13
|
+
}): react_jsx_runtime.JSX.Element;
|
|
14
|
+
interface TypewriterTextProps {
|
|
15
|
+
text: string;
|
|
16
|
+
active?: boolean;
|
|
17
|
+
speedMs?: number;
|
|
18
|
+
onComplete?: () => void;
|
|
19
|
+
className?: string;
|
|
20
|
+
}
|
|
21
|
+
/** One-shot, accessible typewriter text for guided product demonstrations. */
|
|
22
|
+
declare function TypewriterText({ text, active, speedMs, onComplete, className, }: TypewriterTextProps): react_jsx_runtime.JSX.Element;
|
|
23
|
+
|
|
24
|
+
export { CyclingPrompt, TypewriterText, type TypewriterTextProps };
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use client";
|
|
3
|
+
import {
|
|
4
|
+
cn
|
|
5
|
+
} from "../chunk-G6SRSWXB.js";
|
|
6
|
+
|
|
7
|
+
// src/primitives/cycling-prompt.tsx
|
|
8
|
+
import { useEffect, useRef, useState } from "react";
|
|
9
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
var TYPE_MS = 45;
|
|
11
|
+
var DELETE_MS = 22;
|
|
12
|
+
var HOLD_MS = 1800;
|
|
13
|
+
function CyclingPrompt({
|
|
14
|
+
prompts,
|
|
15
|
+
className
|
|
16
|
+
}) {
|
|
17
|
+
const [idx, setIdx] = useState(0);
|
|
18
|
+
const [text, setText] = useState("");
|
|
19
|
+
const [phase, setPhase] = useState(
|
|
20
|
+
"typing"
|
|
21
|
+
);
|
|
22
|
+
const [reducedMotion, setReducedMotion] = useState(false);
|
|
23
|
+
useEffect(() => {
|
|
24
|
+
if (typeof window === "undefined") return;
|
|
25
|
+
const mq = window.matchMedia("(prefers-reduced-motion: reduce)");
|
|
26
|
+
setReducedMotion(mq.matches);
|
|
27
|
+
const onChange = () => setReducedMotion(mq.matches);
|
|
28
|
+
mq.addEventListener("change", onChange);
|
|
29
|
+
return () => mq.removeEventListener("change", onChange);
|
|
30
|
+
}, []);
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (reducedMotion || prompts.length === 0) return;
|
|
33
|
+
const current = prompts[idx] ?? "";
|
|
34
|
+
if (phase === "typing") {
|
|
35
|
+
if (text.length < current.length) {
|
|
36
|
+
const t2 = setTimeout(
|
|
37
|
+
() => setText(current.slice(0, text.length + 1)),
|
|
38
|
+
TYPE_MS
|
|
39
|
+
);
|
|
40
|
+
return () => clearTimeout(t2);
|
|
41
|
+
}
|
|
42
|
+
const t = setTimeout(() => setPhase("deleting"), HOLD_MS);
|
|
43
|
+
return () => clearTimeout(t);
|
|
44
|
+
}
|
|
45
|
+
if (phase === "deleting") {
|
|
46
|
+
if (text.length > 0) {
|
|
47
|
+
const t = setTimeout(() => setText(text.slice(0, -1)), DELETE_MS);
|
|
48
|
+
return () => clearTimeout(t);
|
|
49
|
+
}
|
|
50
|
+
setIdx((i) => (i + 1) % prompts.length);
|
|
51
|
+
setPhase("typing");
|
|
52
|
+
}
|
|
53
|
+
}, [text, phase, idx, reducedMotion, prompts]);
|
|
54
|
+
const display = reducedMotion ? prompts[0] ?? "" : text;
|
|
55
|
+
return /* @__PURE__ */ jsxs("span", { className: cn("inline-flex items-baseline", className), children: [
|
|
56
|
+
/* @__PURE__ */ jsx("span", { children: display }),
|
|
57
|
+
!reducedMotion && /* @__PURE__ */ jsx(
|
|
58
|
+
"span",
|
|
59
|
+
{
|
|
60
|
+
"aria-hidden": true,
|
|
61
|
+
className: "ml-0.5 inline-block h-[1em] w-[2px] translate-y-[0.15em] animate-pulse bg-current"
|
|
62
|
+
}
|
|
63
|
+
)
|
|
64
|
+
] });
|
|
65
|
+
}
|
|
66
|
+
function TypewriterText({
|
|
67
|
+
text,
|
|
68
|
+
active = true,
|
|
69
|
+
speedMs = 24,
|
|
70
|
+
onComplete,
|
|
71
|
+
className
|
|
72
|
+
}) {
|
|
73
|
+
const [length, setLength] = useState(active ? 0 : text.length);
|
|
74
|
+
const completed = useRef(false);
|
|
75
|
+
const onCompleteRef = useRef(onComplete);
|
|
76
|
+
useEffect(() => {
|
|
77
|
+
onCompleteRef.current = onComplete;
|
|
78
|
+
}, [onComplete]);
|
|
79
|
+
useEffect(() => {
|
|
80
|
+
setLength(active ? 0 : text.length);
|
|
81
|
+
completed.current = false;
|
|
82
|
+
}, [active, text]);
|
|
83
|
+
useEffect(() => {
|
|
84
|
+
if (!active || length >= text.length) {
|
|
85
|
+
if (length >= text.length && !completed.current) {
|
|
86
|
+
completed.current = true;
|
|
87
|
+
onCompleteRef.current?.();
|
|
88
|
+
}
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const timer = window.setTimeout(() => setLength((value) => value + 1), speedMs);
|
|
92
|
+
return () => window.clearTimeout(timer);
|
|
93
|
+
}, [active, length, speedMs, text.length]);
|
|
94
|
+
return /* @__PURE__ */ jsxs("span", { className: cn("whitespace-pre-wrap", className), "aria-label": text, children: [
|
|
95
|
+
/* @__PURE__ */ jsx("span", { "aria-hidden": true, children: text.slice(0, length) }),
|
|
96
|
+
active && length < text.length && /* @__PURE__ */ jsx("span", { "aria-hidden": true, className: "ml-0.5 inline-block h-[1em] w-px animate-pulse bg-current motion-reduce:hidden" })
|
|
97
|
+
] });
|
|
98
|
+
}
|
|
99
|
+
export {
|
|
100
|
+
CyclingPrompt,
|
|
101
|
+
TypewriterText
|
|
102
|
+
};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import * as
|
|
2
|
+
import * as SheetPrimitive from '@radix-ui/react-dialog';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
|
|
5
|
-
declare const Dialog: React.FC<
|
|
6
|
-
declare const DialogTrigger: React.ForwardRefExoticComponent<
|
|
7
|
-
declare const DialogPortal: React.FC<
|
|
8
|
-
declare const DialogClose: React.ForwardRefExoticComponent<
|
|
9
|
-
declare const DialogOverlay: React.ForwardRefExoticComponent<Omit<
|
|
10
|
-
interface DialogContentProps extends React.ComponentPropsWithoutRef<typeof
|
|
5
|
+
declare const Dialog: React.FC<SheetPrimitive.DialogProps>;
|
|
6
|
+
declare const DialogTrigger: React.ForwardRefExoticComponent<SheetPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
7
|
+
declare const DialogPortal: React.FC<SheetPrimitive.DialogPortalProps>;
|
|
8
|
+
declare const DialogClose: React.ForwardRefExoticComponent<SheetPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
|
|
9
|
+
declare const DialogOverlay: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
10
|
+
interface DialogContentProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content> {
|
|
11
11
|
size?: "sm" | "md" | "lg" | "xl" | "2xl" | "wide";
|
|
12
12
|
height?: "auto" | "viewport-md" | "viewport-lg";
|
|
13
13
|
layout?: "grid" | "column";
|
|
@@ -30,13 +30,13 @@ declare const DialogFooter: {
|
|
|
30
30
|
({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
31
31
|
displayName: string;
|
|
32
32
|
};
|
|
33
|
-
interface DialogTitleProps extends React.ComponentPropsWithoutRef<typeof
|
|
33
|
+
interface DialogTitleProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title> {
|
|
34
34
|
visuallyHidden?: boolean;
|
|
35
35
|
size?: "default" | "base";
|
|
36
36
|
display?: "block" | "inline-flex";
|
|
37
37
|
}
|
|
38
38
|
declare const DialogTitle: React.ForwardRefExoticComponent<DialogTitleProps & React.RefAttributes<HTMLHeadingElement>>;
|
|
39
|
-
interface DialogDescriptionProps extends React.ComponentPropsWithoutRef<typeof
|
|
39
|
+
interface DialogDescriptionProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description> {
|
|
40
40
|
visuallyHidden?: boolean;
|
|
41
41
|
}
|
|
42
42
|
declare const DialogDescription: React.ForwardRefExoticComponent<DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>>;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import * as
|
|
2
|
+
import * as SheetPrimitive from '@radix-ui/react-dialog';
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
|
|
5
|
-
declare const Dialog: React.FC<
|
|
6
|
-
declare const DialogTrigger: React.ForwardRefExoticComponent<
|
|
7
|
-
declare const DialogPortal: React.FC<
|
|
8
|
-
declare const DialogClose: React.ForwardRefExoticComponent<
|
|
9
|
-
declare const DialogOverlay: React.ForwardRefExoticComponent<Omit<
|
|
10
|
-
interface DialogContentProps extends React.ComponentPropsWithoutRef<typeof
|
|
5
|
+
declare const Dialog: React.FC<SheetPrimitive.DialogProps>;
|
|
6
|
+
declare const DialogTrigger: React.ForwardRefExoticComponent<SheetPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
7
|
+
declare const DialogPortal: React.FC<SheetPrimitive.DialogPortalProps>;
|
|
8
|
+
declare const DialogClose: React.ForwardRefExoticComponent<SheetPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
|
|
9
|
+
declare const DialogOverlay: React.ForwardRefExoticComponent<Omit<SheetPrimitive.DialogOverlayProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
10
|
+
interface DialogContentProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content> {
|
|
11
11
|
size?: "sm" | "md" | "lg" | "xl" | "2xl" | "wide";
|
|
12
12
|
height?: "auto" | "viewport-md" | "viewport-lg";
|
|
13
13
|
layout?: "grid" | "column";
|
|
@@ -30,13 +30,13 @@ declare const DialogFooter: {
|
|
|
30
30
|
({ className, ...props }: React.HTMLAttributes<HTMLDivElement>): react_jsx_runtime.JSX.Element;
|
|
31
31
|
displayName: string;
|
|
32
32
|
};
|
|
33
|
-
interface DialogTitleProps extends React.ComponentPropsWithoutRef<typeof
|
|
33
|
+
interface DialogTitleProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title> {
|
|
34
34
|
visuallyHidden?: boolean;
|
|
35
35
|
size?: "default" | "base";
|
|
36
36
|
display?: "block" | "inline-flex";
|
|
37
37
|
}
|
|
38
38
|
declare const DialogTitle: React.ForwardRefExoticComponent<DialogTitleProps & React.RefAttributes<HTMLHeadingElement>>;
|
|
39
|
-
interface DialogDescriptionProps extends React.ComponentPropsWithoutRef<typeof
|
|
39
|
+
interface DialogDescriptionProps extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description> {
|
|
40
40
|
visuallyHidden?: boolean;
|
|
41
41
|
}
|
|
42
42
|
declare const DialogDescription: React.ForwardRefExoticComponent<DialogDescriptionProps & React.RefAttributes<HTMLParagraphElement>>;
|
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
var
|
|
9
|
-
require('../chunk-
|
|
10
|
-
require('../chunk-WDXEJDMO.cjs');
|
|
8
|
+
var _chunkTP74SBRHcjs = require('../chunk-TP74SBRH.cjs');
|
|
9
|
+
require('../chunk-BTHYGHOH.cjs');
|
|
11
10
|
require('../chunk-2BHI5ZWJ.cjs');
|
|
11
|
+
require('../chunk-WDXEJDMO.cjs');
|
|
12
12
|
require('../chunk-T2ZFSPE4.cjs');
|
|
13
13
|
require('../chunk-JDEXZGIY.cjs');
|
|
14
14
|
require('../chunk-KWLSBTB2.cjs');
|
|
@@ -29,7 +29,7 @@ function DocumentPreview({
|
|
|
29
29
|
fallback
|
|
30
30
|
}) {
|
|
31
31
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
32
|
-
|
|
32
|
+
_chunkTP74SBRHcjs.PreviewDialog,
|
|
33
33
|
{
|
|
34
34
|
open,
|
|
35
35
|
onOpenChange,
|
|
@@ -37,7 +37,7 @@ function DocumentPreview({
|
|
|
37
37
|
onDownload,
|
|
38
38
|
downloading,
|
|
39
39
|
downloadLabel,
|
|
40
|
-
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
40
|
+
children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTP74SBRHcjs.PreviewStage, { children: loading ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTP74SBRHcjs.PreviewLoading, { label: "Loading preview\u2026" }) : error ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkTP74SBRHcjs.PreviewNotice, { icon: _lucidereact.FileWarning, alert: true, message: error, children: fallback }) : src ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
41
41
|
"iframe",
|
|
42
42
|
{
|
|
43
43
|
src,
|
|
@@ -5,10 +5,10 @@ import {
|
|
|
5
5
|
PreviewLoading,
|
|
6
6
|
PreviewNotice,
|
|
7
7
|
PreviewStage
|
|
8
|
-
} from "../chunk-
|
|
9
|
-
import "../chunk-
|
|
10
|
-
import "../chunk-3QT5VYZ3.js";
|
|
8
|
+
} from "../chunk-C3VZMTVB.js";
|
|
9
|
+
import "../chunk-JTI4244T.js";
|
|
11
10
|
import "../chunk-4HWCNRK4.js";
|
|
11
|
+
import "../chunk-3QT5VYZ3.js";
|
|
12
12
|
import "../chunk-KN4RPX35.js";
|
|
13
13
|
import "../chunk-W326GKML.js";
|
|
14
14
|
import "../chunk-G6SRSWXB.js";
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkW5I4FN7Gcjs = require('../chunk-W5I4FN7G.cjs');
|
|
5
|
+
require('../chunk-EJP2L5QV.cjs');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
var _chunkKWLSBTB2cjs = require('../chunk-KWLSBTB2.cjs');
|
|
9
|
+
|
|
10
|
+
// src/primitives/dotted-list.tsx
|
|
11
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
12
|
+
function DottedList({
|
|
13
|
+
items,
|
|
14
|
+
maxItems,
|
|
15
|
+
moreSuffix = "more",
|
|
16
|
+
className
|
|
17
|
+
}) {
|
|
18
|
+
const visible = maxItems != null ? items.slice(0, maxItems) : items;
|
|
19
|
+
const overflow = maxItems != null && items.length > maxItems ? items.length - maxItems : 0;
|
|
20
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "ul", { className: _chunkKWLSBTB2cjs.cn.call(void 0, "mt-2 space-y-0.5", className), children: [
|
|
21
|
+
visible.map((item, i) => /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "li", { className: "text-xs flex items-start gap-2 text-foreground/80", children: [
|
|
22
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkW5I4FN7Gcjs.SentimentDot, { sentiment: item.sentiment }),
|
|
23
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { children: [
|
|
24
|
+
item.text,
|
|
25
|
+
item.meta && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "text-muted-foreground", children: [
|
|
26
|
+
" \u2014 ",
|
|
27
|
+
item.meta
|
|
28
|
+
] })
|
|
29
|
+
] })
|
|
30
|
+
] }, i)),
|
|
31
|
+
overflow > 0 && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "li", { className: "text-[11px] text-muted-foreground pl-4", children: [
|
|
32
|
+
"+ ",
|
|
33
|
+
overflow,
|
|
34
|
+
" ",
|
|
35
|
+
moreSuffix
|
|
36
|
+
] })
|
|
37
|
+
] });
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
exports.DottedList = DottedList;
|