@epicbagel/saas-kit 1.14.0 → 1.16.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 +5 -0
- package/dist/{chunk-34AS3OCC.cjs → chunk-6AMSRIQ4.cjs} +34 -21
- package/dist/{chunk-UBTLWSKK.js → chunk-EXXJXOUO.js} +1 -1
- package/dist/chunk-GA5SX7FE.js +48 -0
- package/dist/{chunk-PD5UQEKY.cjs → chunk-HSSSNAVX.cjs} +2 -2
- package/dist/{chunk-VT2WDFSU.js → chunk-V3XA7SDK.js} +18 -5
- package/dist/chunk-WE3F6EUM.cjs +81 -0
- package/dist/chunk-YFXZWDA5.js +81 -0
- package/dist/chunk-Z2H4LJVG.cjs +48 -0
- package/dist/primitives/chat.cjs +12 -11
- package/dist/primitives/chat.js +3 -2
- package/dist/primitives/editable-list.cjs +25 -30
- package/dist/primitives/editable-list.js +26 -31
- package/dist/primitives/grid.cjs +4 -43
- package/dist/primitives/grid.js +3 -42
- package/dist/primitives/list.cjs +6 -61
- package/dist/primitives/list.d.cts +9 -2
- package/dist/primitives/list.d.ts +9 -2
- package/dist/primitives/list.js +7 -62
- package/dist/primitives/message-scroller.cjs +4 -3
- package/dist/primitives/message-scroller.js +3 -2
- package/dist/primitives/scroll-navigator.cjs +3 -2
- package/dist/primitives/scroll-navigator.d.cts +2 -0
- package/dist/primitives/scroll-navigator.d.ts +2 -0
- package/dist/primitives/scroll-navigator.js +2 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -448,6 +448,11 @@ with stable `id`, accessible `label`, optional `imageSrc`/`fallback`, and
|
|
|
448
448
|
visible. The item at the top of the scroll viewport is highlighted; the index
|
|
449
449
|
scrolls independently for long lists. With insufficient left gutter, it uses
|
|
450
450
|
a compact horizontal row above the content. Single-item lists have no index.
|
|
451
|
+
Set `columns` for a responsive card grid (one column on mobile). The first card
|
|
452
|
+
in the row at the reading edge is highlighted; changing columns preserves each
|
|
453
|
+
card's local state.
|
|
454
|
+
The available gutter stays within the outer main content landmark, so the
|
|
455
|
+
index never counts an application's sidebar as free space.
|
|
451
456
|
|
|
452
457
|
It detects the nearest scrolling ancestor, supports an explicit `scrollRoot`
|
|
453
458
|
and `topOffset` for sticky headers, and offers `onNavigate` for custom scroll
|
|
@@ -1,6 +1,9 @@
|
|
|
1
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
2
|
|
|
3
3
|
|
|
4
|
+
var _chunkZ2H4LJVGcjs = require('./chunk-Z2H4LJVG.cjs');
|
|
5
|
+
|
|
6
|
+
|
|
4
7
|
|
|
5
8
|
|
|
6
9
|
var _chunkWABCLRBRcjs = require('./chunk-WABCLRBR.cjs');
|
|
@@ -22,7 +25,7 @@ function findScrollRoot(element) {
|
|
|
22
25
|
}
|
|
23
26
|
return null;
|
|
24
27
|
}
|
|
25
|
-
function viewportBounds(root) {
|
|
28
|
+
function viewportBounds(root, element) {
|
|
26
29
|
const viewport = window.visualViewport;
|
|
27
30
|
const top = _nullishCoalesce(_optionalChain([viewport, 'optionalAccess', _ => _.offsetTop]), () => ( 0));
|
|
28
31
|
const left = _nullishCoalesce(_optionalChain([viewport, 'optionalAccess', _2 => _2.offsetLeft]), () => ( 0));
|
|
@@ -36,11 +39,21 @@ function viewportBounds(root) {
|
|
|
36
39
|
bounds.right = Math.min(bounds.right, rect.left + parent.clientLeft + parent.clientWidth);
|
|
37
40
|
bounds.bottom = Math.min(bounds.bottom, rect.top + parent.clientTop + parent.clientHeight);
|
|
38
41
|
}
|
|
42
|
+
let landmark = _optionalChain([element, 'optionalAccess', _5 => _5.closest, 'call', _6 => _6("main, [role='main']")]);
|
|
43
|
+
for (let parent = _optionalChain([landmark, 'optionalAccess', _7 => _7.parentElement, 'optionalAccess', _8 => _8.closest, 'call', _9 => _9("main, [role='main']")]); parent; parent = _optionalChain([parent, 'access', _10 => _10.parentElement, 'optionalAccess', _11 => _11.closest, 'call', _12 => _12("main, [role='main']")])) {
|
|
44
|
+
landmark = parent;
|
|
45
|
+
}
|
|
46
|
+
if (landmark) {
|
|
47
|
+
const rect = landmark.getBoundingClientRect();
|
|
48
|
+
bounds.left = Math.max(bounds.left, rect.left);
|
|
49
|
+
bounds.right = Math.min(bounds.right, rect.right);
|
|
50
|
+
}
|
|
39
51
|
return bounds;
|
|
40
52
|
}
|
|
41
53
|
var ScrollNavigator = _react.forwardRef.call(void 0, function ScrollNavigator2({
|
|
42
54
|
items,
|
|
43
55
|
label = "Browse items",
|
|
56
|
+
columns = 1,
|
|
44
57
|
topOffset = 0,
|
|
45
58
|
scrollRoot,
|
|
46
59
|
onNavigate,
|
|
@@ -70,14 +83,14 @@ var ScrollNavigator = _react.forwardRef.call(void 0, function ScrollNavigator2({
|
|
|
70
83
|
}
|
|
71
84
|
const scrollElement = scrollRoot === void 0 ? findScrollRoot(element) : scrollRoot;
|
|
72
85
|
scroller.current = scrollElement;
|
|
73
|
-
const view = viewportBounds(scrollElement);
|
|
86
|
+
const view = viewportBounds(scrollElement, element);
|
|
74
87
|
const box = element.getBoundingClientRect();
|
|
75
88
|
const mode = box.left - view.left >= RAIL_WIDTH + GAP ? "rail" : "row";
|
|
76
89
|
const top = Math.max(view.top + topOffset + GAP, box.top);
|
|
77
90
|
const bottom = Math.min(view.bottom, box.bottom) - GAP;
|
|
78
91
|
const visible = box.width > 0 && box.right > view.left && box.left < view.right && bottom - top >= ROW_HEIGHT;
|
|
79
92
|
const readingEdge = view.top + topOffset + GAP + (mode === "row" ? ROW_HEIGHT : 0);
|
|
80
|
-
const active = visible ? Math.max(0, items.findIndex((item) => (_nullishCoalesce(_optionalChain([targets, 'access',
|
|
93
|
+
const active = visible ? Math.max(0, items.findIndex((item) => (_nullishCoalesce(_optionalChain([targets, 'access', _13 => _13.current, 'access', _14 => _14.get, 'call', _15 => _15(item.id), 'optionalAccess', _16 => _16.getBoundingClientRect, 'call', _17 => _17(), 'access', _18 => _18.bottom]), () => ( 0))) > readingEdge + 1)) : 0;
|
|
81
94
|
const next = {
|
|
82
95
|
mode,
|
|
83
96
|
top,
|
|
@@ -93,33 +106,33 @@ var ScrollNavigator = _react.forwardRef.call(void 0, function ScrollNavigator2({
|
|
|
93
106
|
if (!frame) frame = requestAnimationFrame(measure);
|
|
94
107
|
};
|
|
95
108
|
const visibility = typeof IntersectionObserver === "undefined" ? null : new IntersectionObserver((entries) => {
|
|
96
|
-
intersects = _nullishCoalesce(_optionalChain([entries, 'access',
|
|
109
|
+
intersects = _nullishCoalesce(_optionalChain([entries, 'access', _19 => _19[entries.length - 1], 'optionalAccess', _20 => _20.isIntersecting]), () => ( intersects));
|
|
97
110
|
schedule();
|
|
98
111
|
});
|
|
99
|
-
_optionalChain([visibility, 'optionalAccess',
|
|
112
|
+
_optionalChain([visibility, 'optionalAccess', _21 => _21.observe, 'call', _22 => _22(element)]);
|
|
100
113
|
const resize = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(schedule);
|
|
101
114
|
for (let parent = element; parent; parent = parent.parentElement) {
|
|
102
|
-
_optionalChain([resize, 'optionalAccess',
|
|
115
|
+
_optionalChain([resize, 'optionalAccess', _23 => _23.observe, 'call', _24 => _24(parent)]);
|
|
103
116
|
}
|
|
104
|
-
targets.current.forEach((target) => _optionalChain([resize, 'optionalAccess',
|
|
117
|
+
targets.current.forEach((target) => _optionalChain([resize, 'optionalAccess', _25 => _25.observe, 'call', _26 => _26(target)]));
|
|
105
118
|
document.addEventListener("scroll", schedule, { passive: true, capture: true });
|
|
106
119
|
window.addEventListener("resize", schedule);
|
|
107
|
-
_optionalChain([window, 'access',
|
|
108
|
-
_optionalChain([window, 'access',
|
|
120
|
+
_optionalChain([window, 'access', _27 => _27.visualViewport, 'optionalAccess', _28 => _28.addEventListener, 'call', _29 => _29("resize", schedule)]);
|
|
121
|
+
_optionalChain([window, 'access', _30 => _30.visualViewport, 'optionalAccess', _31 => _31.addEventListener, 'call', _32 => _32("scroll", schedule)]);
|
|
109
122
|
measure();
|
|
110
123
|
return () => {
|
|
111
124
|
cancelAnimationFrame(frame);
|
|
112
|
-
_optionalChain([resize, 'optionalAccess',
|
|
113
|
-
_optionalChain([visibility, 'optionalAccess',
|
|
125
|
+
_optionalChain([resize, 'optionalAccess', _33 => _33.disconnect, 'call', _34 => _34()]);
|
|
126
|
+
_optionalChain([visibility, 'optionalAccess', _35 => _35.disconnect, 'call', _36 => _36()]);
|
|
114
127
|
document.removeEventListener("scroll", schedule, true);
|
|
115
128
|
window.removeEventListener("resize", schedule);
|
|
116
|
-
_optionalChain([window, 'access',
|
|
117
|
-
_optionalChain([window, 'access',
|
|
129
|
+
_optionalChain([window, 'access', _37 => _37.visualViewport, 'optionalAccess', _38 => _38.removeEventListener, 'call', _39 => _39("resize", schedule)]);
|
|
130
|
+
_optionalChain([window, 'access', _40 => _40.visualViewport, 'optionalAccess', _41 => _41.removeEventListener, 'call', _42 => _42("scroll", schedule)]);
|
|
118
131
|
};
|
|
119
|
-
}, [keys, navigable, topOffset, scrollRoot]);
|
|
132
|
+
}, [keys, navigable, columns, topOffset, scrollRoot]);
|
|
120
133
|
_react.useEffect.call(void 0, () => {
|
|
121
134
|
const index = indexRef.current;
|
|
122
|
-
const button = controls.current.get(_nullishCoalesce(_nullishCoalesce(focusId, () => ( _optionalChain([items, 'access',
|
|
135
|
+
const button = controls.current.get(_nullishCoalesce(_nullishCoalesce(focusId, () => ( _optionalChain([items, 'access', _43 => _43[placement.active], 'optionalAccess', _44 => _44.id]))), () => ( "")));
|
|
123
136
|
if (!index || !button || !placement.visible) return;
|
|
124
137
|
const horizontal = placement.mode === "row";
|
|
125
138
|
const start = horizontal ? button.offsetLeft : button.offsetTop;
|
|
@@ -137,14 +150,14 @@ var ScrollNavigator = _react.forwardRef.call(void 0, function ScrollNavigator2({
|
|
|
137
150
|
offset: topOffset + GAP + (placement.mode === "row" ? ROW_HEIGHT : 0),
|
|
138
151
|
behavior: window.matchMedia("(prefers-reduced-motion: reduce)").matches ? "instant" : "smooth"
|
|
139
152
|
};
|
|
140
|
-
if (_optionalChain([onNavigate, 'optionalCall',
|
|
153
|
+
if (_optionalChain([onNavigate, 'optionalCall', _45 => _45(item.id, target, options)]) === true) return;
|
|
141
154
|
const scrollElement = scroller.current;
|
|
142
|
-
const view = viewportBounds(scrollElement);
|
|
143
|
-
const top = (_nullishCoalesce(_optionalChain([scrollElement, 'optionalAccess',
|
|
155
|
+
const view = viewportBounds(scrollElement, rootRef.current);
|
|
156
|
+
const top = (_nullishCoalesce(_optionalChain([scrollElement, 'optionalAccess', _46 => _46.scrollTop]), () => ( window.scrollY))) + target.getBoundingClientRect().top - view.top - options.offset;
|
|
144
157
|
if (scrollElement) scrollElement.scrollTo({ top, behavior: options.behavior });
|
|
145
158
|
else window.scrollTo({ top, behavior: options.behavior });
|
|
146
159
|
}
|
|
147
|
-
const activeId = _optionalChain([items, 'access',
|
|
160
|
+
const activeId = _optionalChain([items, 'access', _47 => _47[placement.active], 'optionalAccess', _48 => _48.id]);
|
|
148
161
|
const tabId = focusId && items.some((item) => item.id === focusId) ? focusId : activeId;
|
|
149
162
|
const row = placement.mode === "row";
|
|
150
163
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
@@ -160,7 +173,7 @@ var ScrollNavigator = _react.forwardRef.call(void 0, function ScrollNavigator2({
|
|
|
160
173
|
},
|
|
161
174
|
className: _chunkKWLSBTB2cjs.cn.call(void 0, "relative min-w-0", navigable && row && "pt-16", className),
|
|
162
175
|
children: [
|
|
163
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "
|
|
176
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkZ2H4LJVGcjs.Grid, { columns, gap: "md", responsive: true, className: "min-w-0", children: items.map((item, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
164
177
|
"div",
|
|
165
178
|
{
|
|
166
179
|
id: `${id}-${index}`,
|
|
@@ -204,7 +217,7 @@ var ScrollNavigator = _react.forwardRef.call(void 0, function ScrollNavigator2({
|
|
|
204
217
|
else return;
|
|
205
218
|
event.preventDefault();
|
|
206
219
|
const button = controls.current.get(items[next].id);
|
|
207
|
-
_optionalChain([button, 'optionalAccess',
|
|
220
|
+
_optionalChain([button, 'optionalAccess', _49 => _49.focus, 'call', _50 => _50({ preventScroll: true })]);
|
|
208
221
|
const index = indexRef.current;
|
|
209
222
|
if (index && button) {
|
|
210
223
|
if (row) index.scrollLeft = button.offsetLeft - (index.clientWidth - button.offsetWidth) / 2;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
cn
|
|
4
|
+
} from "./chunk-G6SRSWXB.js";
|
|
5
|
+
|
|
6
|
+
// src/primitives/grid.tsx
|
|
7
|
+
import { forwardRef } from "react";
|
|
8
|
+
import { jsx } from "react/jsx-runtime";
|
|
9
|
+
var fixedColumns = {
|
|
10
|
+
1: "grid-cols-1",
|
|
11
|
+
2: "grid-cols-2",
|
|
12
|
+
3: "grid-cols-3",
|
|
13
|
+
4: "grid-cols-4"
|
|
14
|
+
};
|
|
15
|
+
var responsiveColumns = {
|
|
16
|
+
1: "grid-cols-1",
|
|
17
|
+
2: "grid-cols-1 sm:grid-cols-2",
|
|
18
|
+
3: "grid-cols-1 sm:grid-cols-3",
|
|
19
|
+
4: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-4"
|
|
20
|
+
};
|
|
21
|
+
var gaps = { sm: "gap-2", compact: "gap-3", md: "gap-4", lg: "gap-6" };
|
|
22
|
+
var Grid = forwardRef(function Grid2({ columns = 2, gap = "md", responsive = true, layout = "grid", maxWidth = "none", centered = false, template = "equal", as, className, ...props }, ref) {
|
|
23
|
+
const Component = as ?? "div";
|
|
24
|
+
return /* @__PURE__ */ jsx(
|
|
25
|
+
Component,
|
|
26
|
+
{
|
|
27
|
+
ref,
|
|
28
|
+
className: cn(
|
|
29
|
+
layout === "grid" ? "grid" : "grid sm:flex sm:justify-end",
|
|
30
|
+
layout === "grid" && template === "equal" && columns !== null && (responsive ? responsiveColumns[columns] : fixedColumns[columns]),
|
|
31
|
+
layout === "responsive-actions" && columns !== null && fixedColumns[columns],
|
|
32
|
+
template === "compact-leading-three" && "grid-cols-[5rem_1fr_1fr]",
|
|
33
|
+
template === "responsive-form-row-six" && "grid-cols-1 items-center sm:grid-cols-[1fr_1.4fr_1fr_1fr_1fr_auto]",
|
|
34
|
+
template === "master-detail" && "grid-cols-1 lg:grid-cols-[360px_1fr]",
|
|
35
|
+
template === "gallery" && "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
|
|
36
|
+
gaps[gap],
|
|
37
|
+
maxWidth === "xl" && "max-w-2xl",
|
|
38
|
+
centered && "mx-auto",
|
|
39
|
+
className
|
|
40
|
+
),
|
|
41
|
+
...props
|
|
42
|
+
}
|
|
43
|
+
);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
export {
|
|
47
|
+
Grid
|
|
48
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
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
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunk6AMSRIQ4cjs = require('./chunk-6AMSRIQ4.cjs');
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
var _chunkJDEXZGIYcjs = require('./chunk-JDEXZGIY.cjs');
|
|
@@ -23,7 +23,7 @@ function MessageScrollerProvider(props) {
|
|
|
23
23
|
}
|
|
24
24
|
function MessageScrollerNavigator(props) {
|
|
25
25
|
const { scrollToMessage } = _messagescroller.useMessageScroller.call(void 0, );
|
|
26
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
26
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk6AMSRIQ4cjs.ScrollNavigator, { ...props, onNavigate: (id, target, options) => {
|
|
27
27
|
if (_optionalChain([props, 'access', _ => _.onNavigate, 'optionalCall', _2 => _2(id, target, options)]) === true) return true;
|
|
28
28
|
const message = target.closest("[data-message-id]");
|
|
29
29
|
const messageId = _optionalChain([message, 'optionalAccess', _3 => _3.dataset, 'access', _4 => _4.messageId]);
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
|
+
import {
|
|
3
|
+
Grid
|
|
4
|
+
} from "./chunk-GA5SX7FE.js";
|
|
2
5
|
import {
|
|
3
6
|
Avatar,
|
|
4
7
|
AvatarFallback,
|
|
@@ -22,7 +25,7 @@ function findScrollRoot(element) {
|
|
|
22
25
|
}
|
|
23
26
|
return null;
|
|
24
27
|
}
|
|
25
|
-
function viewportBounds(root) {
|
|
28
|
+
function viewportBounds(root, element) {
|
|
26
29
|
const viewport = window.visualViewport;
|
|
27
30
|
const top = viewport?.offsetTop ?? 0;
|
|
28
31
|
const left = viewport?.offsetLeft ?? 0;
|
|
@@ -36,11 +39,21 @@ function viewportBounds(root) {
|
|
|
36
39
|
bounds.right = Math.min(bounds.right, rect.left + parent.clientLeft + parent.clientWidth);
|
|
37
40
|
bounds.bottom = Math.min(bounds.bottom, rect.top + parent.clientTop + parent.clientHeight);
|
|
38
41
|
}
|
|
42
|
+
let landmark = element?.closest("main, [role='main']");
|
|
43
|
+
for (let parent = landmark?.parentElement?.closest("main, [role='main']"); parent; parent = parent.parentElement?.closest("main, [role='main']")) {
|
|
44
|
+
landmark = parent;
|
|
45
|
+
}
|
|
46
|
+
if (landmark) {
|
|
47
|
+
const rect = landmark.getBoundingClientRect();
|
|
48
|
+
bounds.left = Math.max(bounds.left, rect.left);
|
|
49
|
+
bounds.right = Math.min(bounds.right, rect.right);
|
|
50
|
+
}
|
|
39
51
|
return bounds;
|
|
40
52
|
}
|
|
41
53
|
var ScrollNavigator = forwardRef(function ScrollNavigator2({
|
|
42
54
|
items,
|
|
43
55
|
label = "Browse items",
|
|
56
|
+
columns = 1,
|
|
44
57
|
topOffset = 0,
|
|
45
58
|
scrollRoot,
|
|
46
59
|
onNavigate,
|
|
@@ -70,7 +83,7 @@ var ScrollNavigator = forwardRef(function ScrollNavigator2({
|
|
|
70
83
|
}
|
|
71
84
|
const scrollElement = scrollRoot === void 0 ? findScrollRoot(element) : scrollRoot;
|
|
72
85
|
scroller.current = scrollElement;
|
|
73
|
-
const view = viewportBounds(scrollElement);
|
|
86
|
+
const view = viewportBounds(scrollElement, element);
|
|
74
87
|
const box = element.getBoundingClientRect();
|
|
75
88
|
const mode = box.left - view.left >= RAIL_WIDTH + GAP ? "rail" : "row";
|
|
76
89
|
const top = Math.max(view.top + topOffset + GAP, box.top);
|
|
@@ -116,7 +129,7 @@ var ScrollNavigator = forwardRef(function ScrollNavigator2({
|
|
|
116
129
|
window.visualViewport?.removeEventListener("resize", schedule);
|
|
117
130
|
window.visualViewport?.removeEventListener("scroll", schedule);
|
|
118
131
|
};
|
|
119
|
-
}, [keys, navigable, topOffset, scrollRoot]);
|
|
132
|
+
}, [keys, navigable, columns, topOffset, scrollRoot]);
|
|
120
133
|
useEffect(() => {
|
|
121
134
|
const index = indexRef.current;
|
|
122
135
|
const button = controls.current.get(focusId ?? items[placement.active]?.id ?? "");
|
|
@@ -139,7 +152,7 @@ var ScrollNavigator = forwardRef(function ScrollNavigator2({
|
|
|
139
152
|
};
|
|
140
153
|
if (onNavigate?.(item.id, target, options) === true) return;
|
|
141
154
|
const scrollElement = scroller.current;
|
|
142
|
-
const view = viewportBounds(scrollElement);
|
|
155
|
+
const view = viewportBounds(scrollElement, rootRef.current);
|
|
143
156
|
const top = (scrollElement?.scrollTop ?? window.scrollY) + target.getBoundingClientRect().top - view.top - options.offset;
|
|
144
157
|
if (scrollElement) scrollElement.scrollTo({ top, behavior: options.behavior });
|
|
145
158
|
else window.scrollTo({ top, behavior: options.behavior });
|
|
@@ -160,7 +173,7 @@ var ScrollNavigator = forwardRef(function ScrollNavigator2({
|
|
|
160
173
|
},
|
|
161
174
|
className: cn("relative min-w-0", navigable && row && "pt-16", className),
|
|
162
175
|
children: [
|
|
163
|
-
/* @__PURE__ */ jsx("
|
|
176
|
+
/* @__PURE__ */ jsx(Grid, { columns, gap: "md", responsive: true, className: "min-w-0", children: items.map((item, index) => /* @__PURE__ */ jsx(
|
|
164
177
|
"div",
|
|
165
178
|
{
|
|
166
179
|
id: `${id}-${index}`,
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkW5I4FN7Gcjs = require('./chunk-W5I4FN7G.cjs');
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var _chunk373W6VADcjs = require('./chunk-373W6VAD.cjs');
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
var _chunkKWLSBTB2cjs = require('./chunk-KWLSBTB2.cjs');
|
|
11
|
+
|
|
12
|
+
// src/primitives/list.tsx
|
|
13
|
+
var _react = require('react');
|
|
14
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
15
|
+
var spacingStyles = { none: "", tight: "space-y-1.5", normal: "space-y-3" };
|
|
16
|
+
var markerStyles = {
|
|
17
|
+
none: "list-none",
|
|
18
|
+
disc: "list-disc pl-5",
|
|
19
|
+
decimal: "list-decimal pl-5"
|
|
20
|
+
};
|
|
21
|
+
var List = _react.forwardRef.call(void 0, function List2({ ordered = false, spacing = "none", marker = "none", divided = false, inset = "none", guide = false, textSize = "inherit", tone = "inherit", marginTop = "none", surface = "none", radius = "none", className, ...props }, ref) {
|
|
22
|
+
const Component = ordered ? "ol" : "ul";
|
|
23
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
24
|
+
Component,
|
|
25
|
+
{
|
|
26
|
+
ref,
|
|
27
|
+
role: marker === "none" ? "list" : void 0,
|
|
28
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
29
|
+
spacingStyles[spacing],
|
|
30
|
+
markerStyles[marker],
|
|
31
|
+
divided && "divide-y divide-border",
|
|
32
|
+
inset === "xs" && "pl-1",
|
|
33
|
+
inset === "md" && "pl-4",
|
|
34
|
+
guide && "border-l border-border",
|
|
35
|
+
textSize === "xs" && "text-xs",
|
|
36
|
+
textSize === "sm" && "text-sm",
|
|
37
|
+
tone === "muted" && "text-muted-foreground",
|
|
38
|
+
tone === "soft" && "text-foreground/80",
|
|
39
|
+
marginTop === "sm" && "mt-2",
|
|
40
|
+
marginTop === "md" && "mt-4",
|
|
41
|
+
surface === "bordered" && "border border-border bg-background",
|
|
42
|
+
radius === "md" && "rounded-md",
|
|
43
|
+
className
|
|
44
|
+
),
|
|
45
|
+
...props
|
|
46
|
+
}
|
|
47
|
+
);
|
|
48
|
+
});
|
|
49
|
+
var ListItem = _react.forwardRef.call(void 0, function ListItem2({ className, layout = "plain", sentiment = "neutral", actions, children, surface = "none", padding = "none", textSize = "inherit", tone = "inherit", position = "static", justify = "start", align = "start", gap = "xs", interactiveGroup = false, radius = "none", accent = "none", ...props }, ref) {
|
|
50
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "li", { ref, className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
51
|
+
layout === "row" && "flex items-start",
|
|
52
|
+
surface === "bordered" && "rounded-md border",
|
|
53
|
+
padding === "sm" && "p-2",
|
|
54
|
+
padding === "md" && "px-3 py-2",
|
|
55
|
+
padding === "compact" && "py-2.5",
|
|
56
|
+
textSize === "xs" && "text-xs",
|
|
57
|
+
textSize === "sm" && "text-sm",
|
|
58
|
+
tone === "soft" && "text-foreground/80",
|
|
59
|
+
position === "relative" && "relative",
|
|
60
|
+
justify === "between" && "justify-between gap-3",
|
|
61
|
+
align === "center" && "items-center",
|
|
62
|
+
align === "baseline" && "items-baseline",
|
|
63
|
+
gap === "xs" && "gap-1.5",
|
|
64
|
+
gap === "sm" && "gap-2",
|
|
65
|
+
interactiveGroup && "group",
|
|
66
|
+
radius === "md" && "rounded-md",
|
|
67
|
+
accent === "success" && "border-l-2 border-emerald-500 bg-emerald-500/5",
|
|
68
|
+
accent === "destructive" && "border-l-2 border-red-500 bg-red-500/5",
|
|
69
|
+
layout === "bullet" && "group flex min-h-8 items-start gap-3 pointer-coarse:min-h-[max(44px,2.75rem)]",
|
|
70
|
+
className
|
|
71
|
+
), ...props, children: layout === "bullet" ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
72
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkW5I4FN7Gcjs.SentimentDot, { sentiment, className: "mt-[5px] shrink-0" }),
|
|
73
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk373W6VADcjs.Text, { as: "div", variant: "small", className: "min-w-0 flex-1 leading-snug [overflow-wrap:anywhere]", children }),
|
|
74
|
+
actions
|
|
75
|
+
] }) : children });
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
exports.List = List; exports.ListItem = ListItem;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import {
|
|
3
|
+
SentimentDot
|
|
4
|
+
} from "./chunk-YWAQRAXP.js";
|
|
5
|
+
import {
|
|
6
|
+
Text
|
|
7
|
+
} from "./chunk-EIY5LLSP.js";
|
|
8
|
+
import {
|
|
9
|
+
cn
|
|
10
|
+
} from "./chunk-G6SRSWXB.js";
|
|
11
|
+
|
|
12
|
+
// src/primitives/list.tsx
|
|
13
|
+
import { forwardRef } from "react";
|
|
14
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
15
|
+
var spacingStyles = { none: "", tight: "space-y-1.5", normal: "space-y-3" };
|
|
16
|
+
var markerStyles = {
|
|
17
|
+
none: "list-none",
|
|
18
|
+
disc: "list-disc pl-5",
|
|
19
|
+
decimal: "list-decimal pl-5"
|
|
20
|
+
};
|
|
21
|
+
var List = forwardRef(function List2({ ordered = false, spacing = "none", marker = "none", divided = false, inset = "none", guide = false, textSize = "inherit", tone = "inherit", marginTop = "none", surface = "none", radius = "none", className, ...props }, ref) {
|
|
22
|
+
const Component = ordered ? "ol" : "ul";
|
|
23
|
+
return /* @__PURE__ */ jsx(
|
|
24
|
+
Component,
|
|
25
|
+
{
|
|
26
|
+
ref,
|
|
27
|
+
role: marker === "none" ? "list" : void 0,
|
|
28
|
+
className: cn(
|
|
29
|
+
spacingStyles[spacing],
|
|
30
|
+
markerStyles[marker],
|
|
31
|
+
divided && "divide-y divide-border",
|
|
32
|
+
inset === "xs" && "pl-1",
|
|
33
|
+
inset === "md" && "pl-4",
|
|
34
|
+
guide && "border-l border-border",
|
|
35
|
+
textSize === "xs" && "text-xs",
|
|
36
|
+
textSize === "sm" && "text-sm",
|
|
37
|
+
tone === "muted" && "text-muted-foreground",
|
|
38
|
+
tone === "soft" && "text-foreground/80",
|
|
39
|
+
marginTop === "sm" && "mt-2",
|
|
40
|
+
marginTop === "md" && "mt-4",
|
|
41
|
+
surface === "bordered" && "border border-border bg-background",
|
|
42
|
+
radius === "md" && "rounded-md",
|
|
43
|
+
className
|
|
44
|
+
),
|
|
45
|
+
...props
|
|
46
|
+
}
|
|
47
|
+
);
|
|
48
|
+
});
|
|
49
|
+
var ListItem = forwardRef(function ListItem2({ className, layout = "plain", sentiment = "neutral", actions, children, surface = "none", padding = "none", textSize = "inherit", tone = "inherit", position = "static", justify = "start", align = "start", gap = "xs", interactiveGroup = false, radius = "none", accent = "none", ...props }, ref) {
|
|
50
|
+
return /* @__PURE__ */ jsx("li", { ref, className: cn(
|
|
51
|
+
layout === "row" && "flex items-start",
|
|
52
|
+
surface === "bordered" && "rounded-md border",
|
|
53
|
+
padding === "sm" && "p-2",
|
|
54
|
+
padding === "md" && "px-3 py-2",
|
|
55
|
+
padding === "compact" && "py-2.5",
|
|
56
|
+
textSize === "xs" && "text-xs",
|
|
57
|
+
textSize === "sm" && "text-sm",
|
|
58
|
+
tone === "soft" && "text-foreground/80",
|
|
59
|
+
position === "relative" && "relative",
|
|
60
|
+
justify === "between" && "justify-between gap-3",
|
|
61
|
+
align === "center" && "items-center",
|
|
62
|
+
align === "baseline" && "items-baseline",
|
|
63
|
+
gap === "xs" && "gap-1.5",
|
|
64
|
+
gap === "sm" && "gap-2",
|
|
65
|
+
interactiveGroup && "group",
|
|
66
|
+
radius === "md" && "rounded-md",
|
|
67
|
+
accent === "success" && "border-l-2 border-emerald-500 bg-emerald-500/5",
|
|
68
|
+
accent === "destructive" && "border-l-2 border-red-500 bg-red-500/5",
|
|
69
|
+
layout === "bullet" && "group flex min-h-8 items-start gap-3 pointer-coarse:min-h-[max(44px,2.75rem)]",
|
|
70
|
+
className
|
|
71
|
+
), ...props, children: layout === "bullet" ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
72
|
+
/* @__PURE__ */ jsx(SentimentDot, { sentiment, className: "mt-[5px] shrink-0" }),
|
|
73
|
+
/* @__PURE__ */ jsx(Text, { as: "div", variant: "small", className: "min-w-0 flex-1 leading-snug [overflow-wrap:anywhere]", children }),
|
|
74
|
+
actions
|
|
75
|
+
] }) : children });
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
export {
|
|
79
|
+
List,
|
|
80
|
+
ListItem
|
|
81
|
+
};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }"use client";
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunkKWLSBTB2cjs = require('./chunk-KWLSBTB2.cjs');
|
|
5
|
+
|
|
6
|
+
// src/primitives/grid.tsx
|
|
7
|
+
var _react = require('react');
|
|
8
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
9
|
+
var fixedColumns = {
|
|
10
|
+
1: "grid-cols-1",
|
|
11
|
+
2: "grid-cols-2",
|
|
12
|
+
3: "grid-cols-3",
|
|
13
|
+
4: "grid-cols-4"
|
|
14
|
+
};
|
|
15
|
+
var responsiveColumns = {
|
|
16
|
+
1: "grid-cols-1",
|
|
17
|
+
2: "grid-cols-1 sm:grid-cols-2",
|
|
18
|
+
3: "grid-cols-1 sm:grid-cols-3",
|
|
19
|
+
4: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-4"
|
|
20
|
+
};
|
|
21
|
+
var gaps = { sm: "gap-2", compact: "gap-3", md: "gap-4", lg: "gap-6" };
|
|
22
|
+
var Grid = _react.forwardRef.call(void 0, function Grid2({ columns = 2, gap = "md", responsive = true, layout = "grid", maxWidth = "none", centered = false, template = "equal", as, className, ...props }, ref) {
|
|
23
|
+
const Component = _nullishCoalesce(as, () => ( "div"));
|
|
24
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
25
|
+
Component,
|
|
26
|
+
{
|
|
27
|
+
ref,
|
|
28
|
+
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
29
|
+
layout === "grid" ? "grid" : "grid sm:flex sm:justify-end",
|
|
30
|
+
layout === "grid" && template === "equal" && columns !== null && (responsive ? responsiveColumns[columns] : fixedColumns[columns]),
|
|
31
|
+
layout === "responsive-actions" && columns !== null && fixedColumns[columns],
|
|
32
|
+
template === "compact-leading-three" && "grid-cols-[5rem_1fr_1fr]",
|
|
33
|
+
template === "responsive-form-row-six" && "grid-cols-1 items-center sm:grid-cols-[1fr_1.4fr_1fr_1fr_1fr_auto]",
|
|
34
|
+
template === "master-detail" && "grid-cols-1 lg:grid-cols-[360px_1fr]",
|
|
35
|
+
template === "gallery" && "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
|
|
36
|
+
gaps[gap],
|
|
37
|
+
maxWidth === "xl" && "max-w-2xl",
|
|
38
|
+
centered && "mx-auto",
|
|
39
|
+
className
|
|
40
|
+
),
|
|
41
|
+
...props
|
|
42
|
+
}
|
|
43
|
+
);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
exports.Grid = Grid;
|
package/dist/primitives/chat.cjs
CHANGED
|
@@ -26,14 +26,15 @@ var _chunkB765DSRGcjs = require('../chunk-B765DSRG.cjs');
|
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
var
|
|
30
|
-
require('../chunk-
|
|
29
|
+
var _chunkHSSSNAVXcjs = require('../chunk-HSSSNAVX.cjs');
|
|
30
|
+
require('../chunk-6AMSRIQ4.cjs');
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
var _chunkNWDPH2Z7cjs = require('../chunk-NWDPH2Z7.cjs');
|
|
37
|
+
require('../chunk-Z2H4LJVG.cjs');
|
|
37
38
|
|
|
38
39
|
|
|
39
40
|
|
|
@@ -178,15 +179,15 @@ var ChatThread = _react.forwardRef.call(void 0,
|
|
|
178
179
|
const markers = timelineMarkers(messages, /* @__PURE__ */ new Date());
|
|
179
180
|
const anchorId = useArrivingUserTurnId(messages);
|
|
180
181
|
const workspace = appearance === "workspace";
|
|
181
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
182
|
-
|
|
182
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHSSSNAVXcjs.MessageScrollerProvider, { autoScroll: true, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
183
|
+
_chunkHSSSNAVXcjs.MessageScroller,
|
|
183
184
|
{
|
|
184
185
|
ref,
|
|
185
186
|
style: { maxHeight },
|
|
186
187
|
className: _chunkKWLSBTB2cjs.cn.call(void 0, "min-h-0", className),
|
|
187
188
|
children: [
|
|
188
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
189
|
-
|
|
189
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHSSSNAVXcjs.MessageScrollerViewport, { children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
190
|
+
_chunkHSSSNAVXcjs.MessageScrollerContent,
|
|
190
191
|
{
|
|
191
192
|
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
192
193
|
workspace ? "mx-auto w-full max-w-3xl gap-10 px-4 py-6 md:px-6 md:py-8" : "gap-2.5 px-px py-px"
|
|
@@ -195,7 +196,7 @@ var ChatThread = _react.forwardRef.call(void 0,
|
|
|
195
196
|
messages.map((m, index) => {
|
|
196
197
|
const isUser = m.role === "user";
|
|
197
198
|
if (m.status === "running") {
|
|
198
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
199
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHSSSNAVXcjs.MessageScrollerItem, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
199
200
|
ChatRunningLine,
|
|
200
201
|
{
|
|
201
202
|
label: m.text || pendingLabel,
|
|
@@ -208,7 +209,7 @@ var ChatThread = _react.forwardRef.call(void 0,
|
|
|
208
209
|
const marker = markers[index];
|
|
209
210
|
const actions = messageActions && offersActions(m) ? messageActions(m) : null;
|
|
210
211
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
211
|
-
|
|
212
|
+
_chunkHSSSNAVXcjs.MessageScrollerItem,
|
|
212
213
|
{
|
|
213
214
|
messageId: m.id,
|
|
214
215
|
scrollAnchor: m.id === anchorId,
|
|
@@ -264,15 +265,15 @@ var ChatThread = _react.forwardRef.call(void 0,
|
|
|
264
265
|
m.id
|
|
265
266
|
);
|
|
266
267
|
}),
|
|
267
|
-
pending && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
268
|
+
pending && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHSSSNAVXcjs.MessageScrollerItem, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, ChatRunningLine, { label: pendingLabel, workspace }) }),
|
|
268
269
|
footer && // Always painted: content-visibility:auto would contain the
|
|
269
270
|
// footer's paint and layout, clipping a ring or shadow at its
|
|
270
271
|
// edge and re-parenting anything fixed inside it.
|
|
271
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
272
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkHSSSNAVXcjs.MessageScrollerItem, { className: "[content-visibility:visible]", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNWDPH2Z7cjs.Message, { align: "start", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNWDPH2Z7cjs.MessageContent, { children: footer }) }) })
|
|
272
273
|
]
|
|
273
274
|
}
|
|
274
275
|
) }),
|
|
275
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
276
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkHSSSNAVXcjs.MessageScrollerButton, { variant: "outline", className: "rounded-full shadow-sm", children: [
|
|
276
277
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.ArrowDown, { className: "h-4 w-4" }),
|
|
277
278
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "sr-only", children: scrollButtonLabel })
|
|
278
279
|
] })
|
package/dist/primitives/chat.js
CHANGED
|
@@ -26,14 +26,15 @@ import {
|
|
|
26
26
|
MessageScrollerItem,
|
|
27
27
|
MessageScrollerProvider,
|
|
28
28
|
MessageScrollerViewport
|
|
29
|
-
} from "../chunk-
|
|
30
|
-
import "../chunk-
|
|
29
|
+
} from "../chunk-EXXJXOUO.js";
|
|
30
|
+
import "../chunk-V3XA7SDK.js";
|
|
31
31
|
import {
|
|
32
32
|
Message,
|
|
33
33
|
MessageAction,
|
|
34
34
|
MessageActions,
|
|
35
35
|
MessageContent
|
|
36
36
|
} from "../chunk-H4XH2PPU.js";
|
|
37
|
+
import "../chunk-GA5SX7FE.js";
|
|
37
38
|
import {
|
|
38
39
|
InputGroup,
|
|
39
40
|
InputGroupAddon,
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); 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
2
|
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
|
|
5
|
+
var _chunkWE3F6EUMcjs = require('../chunk-WE3F6EUM.cjs');
|
|
6
|
+
require('../chunk-W5I4FN7G.cjs');
|
|
5
7
|
|
|
6
8
|
|
|
7
9
|
var _chunk373W6VADcjs = require('../chunk-373W6VAD.cjs');
|
|
@@ -49,36 +51,29 @@ function EditableList({
|
|
|
49
51
|
};
|
|
50
52
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "section", { className: _chunkKWLSBTB2cjs.cn.call(void 0, "border-t border-border pt-4", className), children: [
|
|
51
53
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk373W6VADcjs.Text, { as: "span", variant: "caption", className: "text-xs font-medium uppercase tracking-wider", children: label }),
|
|
52
|
-
items.length === 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk373W6VADcjs.Text, { variant: "caption", className: "mt-3 italic", children: emptyText }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "
|
|
53
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
grow: true
|
|
54
|
+
items.length === 0 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunk373W6VADcjs.Text, { variant: "caption", className: "mt-3 italic", children: emptyText }) : /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWE3F6EUMcjs.List, { spacing: "normal", className: "mt-3", children: items.map((item, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkWE3F6EUMcjs.ListItem, { layout: "bullet", sentiment, actions: !readOnly && (_optionalChain([editing, 'optionalAccess', _5 => _5.index]) === index ? /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
55
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJDEXZGIYcjs.Button, { type: "button", variant: "ghost", size: "icon-sm", shrink: true, className: "text-emerald-600", "aria-label": `Save ${itemName}`, onClick: commitEdit, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Check, { className: "h-4 w-4" }) }),
|
|
56
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJDEXZGIYcjs.Button, { type: "button", variant: "quiet", size: "icon-sm", shrink: true, marginEnd: "negative-xs", "aria-label": `Cancel editing ${itemName}`, onClick: () => setEditing(null), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.X, { className: "h-4 w-4" }) })
|
|
57
|
+
] }) : /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
58
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJDEXZGIYcjs.Button, { type: "button", variant: "ghost", size: "icon", className: "h-8 w-8 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100 focus:opacity-100", "aria-label": `Edit ${itemName}`, onClick: () => setEditing({ index, value: item }), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Pencil, { className: "h-4 w-4" }) }),
|
|
59
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJDEXZGIYcjs.Button, { type: "button", variant: "ghost", size: "icon", className: "-mr-1 h-8 w-8 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100 focus:opacity-100", "aria-label": `Remove ${itemName}`, onClick: () => onChange(items.filter((_, itemIndex) => itemIndex !== index)), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.X, { className: "h-4 w-4" }) })
|
|
60
|
+
] })), children: !readOnly && _optionalChain([editing, 'optionalAccess', _6 => _6.index]) === index ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
61
|
+
_chunkPQUSJEXLcjs.Input,
|
|
62
|
+
{
|
|
63
|
+
autoFocus: true,
|
|
64
|
+
value: editing.value,
|
|
65
|
+
"aria-label": `Edit ${itemName}`,
|
|
66
|
+
onChange: (event) => setEditing({ index, value: event.target.value }),
|
|
67
|
+
onKeyDown: (event) => {
|
|
68
|
+
if (event.key === "Enter") {
|
|
69
|
+
event.preventDefault();
|
|
70
|
+
commitEdit();
|
|
70
71
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
!readOnly && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _jsxruntime.Fragment, { children: [
|
|
77
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJDEXZGIYcjs.Button, { type: "button", variant: "ghost", size: "icon", className: "h-8 w-8 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100 focus:opacity-100", "aria-label": `Edit ${itemName}`, onClick: () => setEditing({ index, value: item }), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.Pencil, { className: "h-4 w-4" }) }),
|
|
78
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkJDEXZGIYcjs.Button, { type: "button", variant: "ghost", size: "icon", className: "-mr-1 h-8 w-8 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100 focus:opacity-100", "aria-label": `Remove ${itemName}`, onClick: () => onChange(items.filter((_, itemIndex) => itemIndex !== index)), children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _lucidereact.X, { className: "h-4 w-4" }) })
|
|
79
|
-
] })
|
|
80
|
-
] })
|
|
81
|
-
] }, `${item}-${index}`)) }),
|
|
72
|
+
if (event.key === "Escape") setEditing(null);
|
|
73
|
+
},
|
|
74
|
+
grow: true
|
|
75
|
+
}
|
|
76
|
+
) : item }, `${item}-${index}`)) }),
|
|
82
77
|
!readOnly && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "mt-3 flex items-center gap-2", children: [
|
|
83
78
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
84
79
|
_chunkPQUSJEXLcjs.Input,
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
List,
|
|
4
|
+
ListItem
|
|
5
|
+
} from "../chunk-YFXZWDA5.js";
|
|
6
|
+
import "../chunk-YWAQRAXP.js";
|
|
5
7
|
import {
|
|
6
8
|
Text
|
|
7
9
|
} from "../chunk-EIY5LLSP.js";
|
|
@@ -49,36 +51,29 @@ function EditableList({
|
|
|
49
51
|
};
|
|
50
52
|
return /* @__PURE__ */ jsxs("section", { className: cn("border-t border-border pt-4", className), children: [
|
|
51
53
|
/* @__PURE__ */ jsx(Text, { as: "span", variant: "caption", className: "text-xs font-medium uppercase tracking-wider", children: label }),
|
|
52
|
-
items.length === 0 ? /* @__PURE__ */ jsx(Text, { variant: "caption", className: "mt-3 italic", children: emptyText }) : /* @__PURE__ */ jsx("
|
|
53
|
-
/* @__PURE__ */ jsx(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
grow: true
|
|
54
|
+
items.length === 0 ? /* @__PURE__ */ jsx(Text, { variant: "caption", className: "mt-3 italic", children: emptyText }) : /* @__PURE__ */ jsx(List, { spacing: "normal", className: "mt-3", children: items.map((item, index) => /* @__PURE__ */ jsx(ListItem, { layout: "bullet", sentiment, actions: !readOnly && (editing?.index === index ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
55
|
+
/* @__PURE__ */ jsx(Button, { type: "button", variant: "ghost", size: "icon-sm", shrink: true, className: "text-emerald-600", "aria-label": `Save ${itemName}`, onClick: commitEdit, children: /* @__PURE__ */ jsx(Check, { className: "h-4 w-4" }) }),
|
|
56
|
+
/* @__PURE__ */ jsx(Button, { type: "button", variant: "quiet", size: "icon-sm", shrink: true, marginEnd: "negative-xs", "aria-label": `Cancel editing ${itemName}`, onClick: () => setEditing(null), children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" }) })
|
|
57
|
+
] }) : /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
58
|
+
/* @__PURE__ */ jsx(Button, { type: "button", variant: "ghost", size: "icon", className: "h-8 w-8 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100 focus:opacity-100", "aria-label": `Edit ${itemName}`, onClick: () => setEditing({ index, value: item }), children: /* @__PURE__ */ jsx(Pencil, { className: "h-4 w-4" }) }),
|
|
59
|
+
/* @__PURE__ */ jsx(Button, { type: "button", variant: "ghost", size: "icon", className: "-mr-1 h-8 w-8 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100 focus:opacity-100", "aria-label": `Remove ${itemName}`, onClick: () => onChange(items.filter((_, itemIndex) => itemIndex !== index)), children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" }) })
|
|
60
|
+
] })), children: !readOnly && editing?.index === index ? /* @__PURE__ */ jsx(
|
|
61
|
+
Input,
|
|
62
|
+
{
|
|
63
|
+
autoFocus: true,
|
|
64
|
+
value: editing.value,
|
|
65
|
+
"aria-label": `Edit ${itemName}`,
|
|
66
|
+
onChange: (event) => setEditing({ index, value: event.target.value }),
|
|
67
|
+
onKeyDown: (event) => {
|
|
68
|
+
if (event.key === "Enter") {
|
|
69
|
+
event.preventDefault();
|
|
70
|
+
commitEdit();
|
|
70
71
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
!readOnly && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
77
|
-
/* @__PURE__ */ jsx(Button, { type: "button", variant: "ghost", size: "icon", className: "h-8 w-8 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100 focus:opacity-100", "aria-label": `Edit ${itemName}`, onClick: () => setEditing({ index, value: item }), children: /* @__PURE__ */ jsx(Pencil, { className: "h-4 w-4" }) }),
|
|
78
|
-
/* @__PURE__ */ jsx(Button, { type: "button", variant: "ghost", size: "icon", className: "-mr-1 h-8 w-8 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100 focus:opacity-100", "aria-label": `Remove ${itemName}`, onClick: () => onChange(items.filter((_, itemIndex) => itemIndex !== index)), children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" }) })
|
|
79
|
-
] })
|
|
80
|
-
] })
|
|
81
|
-
] }, `${item}-${index}`)) }),
|
|
72
|
+
if (event.key === "Escape") setEditing(null);
|
|
73
|
+
},
|
|
74
|
+
grow: true
|
|
75
|
+
}
|
|
76
|
+
) : item }, `${item}-${index}`)) }),
|
|
82
77
|
!readOnly && /* @__PURE__ */ jsxs("div", { className: "mt-3 flex items-center gap-2", children: [
|
|
83
78
|
/* @__PURE__ */ jsx(
|
|
84
79
|
Input,
|
package/dist/primitives/grid.cjs
CHANGED
|
@@ -1,47 +1,8 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunkZ2H4LJVGcjs = require('../chunk-Z2H4LJVG.cjs');
|
|
5
|
+
require('../chunk-KWLSBTB2.cjs');
|
|
5
6
|
|
|
6
|
-
// src/primitives/grid.tsx
|
|
7
|
-
var _react = require('react');
|
|
8
|
-
var _jsxruntime = require('react/jsx-runtime');
|
|
9
|
-
var fixedColumns = {
|
|
10
|
-
1: "grid-cols-1",
|
|
11
|
-
2: "grid-cols-2",
|
|
12
|
-
3: "grid-cols-3",
|
|
13
|
-
4: "grid-cols-4"
|
|
14
|
-
};
|
|
15
|
-
var responsiveColumns = {
|
|
16
|
-
1: "grid-cols-1",
|
|
17
|
-
2: "grid-cols-1 sm:grid-cols-2",
|
|
18
|
-
3: "grid-cols-1 sm:grid-cols-3",
|
|
19
|
-
4: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-4"
|
|
20
|
-
};
|
|
21
|
-
var gaps = { sm: "gap-2", compact: "gap-3", md: "gap-4", lg: "gap-6" };
|
|
22
|
-
var Grid = _react.forwardRef.call(void 0, function Grid2({ columns = 2, gap = "md", responsive = true, layout = "grid", maxWidth = "none", centered = false, template = "equal", as, className, ...props }, ref) {
|
|
23
|
-
const Component = _nullishCoalesce(as, () => ( "div"));
|
|
24
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
25
|
-
Component,
|
|
26
|
-
{
|
|
27
|
-
ref,
|
|
28
|
-
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
29
|
-
layout === "grid" ? "grid" : "grid sm:flex sm:justify-end",
|
|
30
|
-
layout === "grid" && template === "equal" && columns !== null && (responsive ? responsiveColumns[columns] : fixedColumns[columns]),
|
|
31
|
-
layout === "responsive-actions" && columns !== null && fixedColumns[columns],
|
|
32
|
-
template === "compact-leading-three" && "grid-cols-[5rem_1fr_1fr]",
|
|
33
|
-
template === "responsive-form-row-six" && "grid-cols-1 items-center sm:grid-cols-[1fr_1.4fr_1fr_1fr_1fr_auto]",
|
|
34
|
-
template === "master-detail" && "grid-cols-1 lg:grid-cols-[360px_1fr]",
|
|
35
|
-
template === "gallery" && "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
|
|
36
|
-
gaps[gap],
|
|
37
|
-
maxWidth === "xl" && "max-w-2xl",
|
|
38
|
-
centered && "mx-auto",
|
|
39
|
-
className
|
|
40
|
-
),
|
|
41
|
-
...props
|
|
42
|
-
}
|
|
43
|
-
);
|
|
44
|
-
});
|
|
45
7
|
|
|
46
|
-
|
|
47
|
-
exports.Grid = Grid;
|
|
8
|
+
exports.Grid = _chunkZ2H4LJVGcjs.Grid;
|
package/dist/primitives/grid.js
CHANGED
|
@@ -1,47 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
|
|
6
|
-
// src/primitives/grid.tsx
|
|
7
|
-
import { forwardRef } from "react";
|
|
8
|
-
import { jsx } from "react/jsx-runtime";
|
|
9
|
-
var fixedColumns = {
|
|
10
|
-
1: "grid-cols-1",
|
|
11
|
-
2: "grid-cols-2",
|
|
12
|
-
3: "grid-cols-3",
|
|
13
|
-
4: "grid-cols-4"
|
|
14
|
-
};
|
|
15
|
-
var responsiveColumns = {
|
|
16
|
-
1: "grid-cols-1",
|
|
17
|
-
2: "grid-cols-1 sm:grid-cols-2",
|
|
18
|
-
3: "grid-cols-1 sm:grid-cols-3",
|
|
19
|
-
4: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-4"
|
|
20
|
-
};
|
|
21
|
-
var gaps = { sm: "gap-2", compact: "gap-3", md: "gap-4", lg: "gap-6" };
|
|
22
|
-
var Grid = forwardRef(function Grid2({ columns = 2, gap = "md", responsive = true, layout = "grid", maxWidth = "none", centered = false, template = "equal", as, className, ...props }, ref) {
|
|
23
|
-
const Component = as ?? "div";
|
|
24
|
-
return /* @__PURE__ */ jsx(
|
|
25
|
-
Component,
|
|
26
|
-
{
|
|
27
|
-
ref,
|
|
28
|
-
className: cn(
|
|
29
|
-
layout === "grid" ? "grid" : "grid sm:flex sm:justify-end",
|
|
30
|
-
layout === "grid" && template === "equal" && columns !== null && (responsive ? responsiveColumns[columns] : fixedColumns[columns]),
|
|
31
|
-
layout === "responsive-actions" && columns !== null && fixedColumns[columns],
|
|
32
|
-
template === "compact-leading-three" && "grid-cols-[5rem_1fr_1fr]",
|
|
33
|
-
template === "responsive-form-row-six" && "grid-cols-1 items-center sm:grid-cols-[1fr_1.4fr_1fr_1fr_1fr_auto]",
|
|
34
|
-
template === "master-detail" && "grid-cols-1 lg:grid-cols-[360px_1fr]",
|
|
35
|
-
template === "gallery" && "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
|
|
36
|
-
gaps[gap],
|
|
37
|
-
maxWidth === "xl" && "max-w-2xl",
|
|
38
|
-
centered && "mx-auto",
|
|
39
|
-
className
|
|
40
|
-
),
|
|
41
|
-
...props
|
|
42
|
-
}
|
|
43
|
-
);
|
|
44
|
-
});
|
|
3
|
+
Grid
|
|
4
|
+
} from "../chunk-GA5SX7FE.js";
|
|
5
|
+
import "../chunk-G6SRSWXB.js";
|
|
45
6
|
export {
|
|
46
7
|
Grid
|
|
47
8
|
};
|
package/dist/primitives/list.cjs
CHANGED
|
@@ -1,68 +1,13 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});"use client";
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var _chunkKWLSBTB2cjs = require('../chunk-KWLSBTB2.cjs');
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
none: "list-none",
|
|
12
|
-
disc: "list-disc pl-5",
|
|
13
|
-
decimal: "list-decimal pl-5"
|
|
14
|
-
};
|
|
15
|
-
var List = _react.forwardRef.call(void 0, function List2({ ordered = false, spacing = "none", marker = "none", divided = false, inset = "none", guide = false, textSize = "inherit", tone = "inherit", marginTop = "none", surface = "none", radius = "none", className, ...props }, ref) {
|
|
16
|
-
const Component = ordered ? "ol" : "ul";
|
|
17
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
18
|
-
Component,
|
|
19
|
-
{
|
|
20
|
-
ref,
|
|
21
|
-
className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
22
|
-
spacingStyles[spacing],
|
|
23
|
-
markerStyles[marker],
|
|
24
|
-
divided && "divide-y divide-border",
|
|
25
|
-
inset === "xs" && "pl-1",
|
|
26
|
-
inset === "md" && "pl-4",
|
|
27
|
-
guide && "border-l border-border",
|
|
28
|
-
textSize === "xs" && "text-xs",
|
|
29
|
-
textSize === "sm" && "text-sm",
|
|
30
|
-
tone === "muted" && "text-muted-foreground",
|
|
31
|
-
tone === "soft" && "text-foreground/80",
|
|
32
|
-
marginTop === "sm" && "mt-2",
|
|
33
|
-
marginTop === "md" && "mt-4",
|
|
34
|
-
surface === "bordered" && "border border-border bg-background",
|
|
35
|
-
radius === "md" && "rounded-md",
|
|
36
|
-
className
|
|
37
|
-
),
|
|
38
|
-
...props
|
|
39
|
-
}
|
|
40
|
-
);
|
|
41
|
-
});
|
|
42
|
-
var ListItem = _react.forwardRef.call(void 0, function ListItem2({ className, layout = "plain", surface = "none", padding = "none", textSize = "inherit", tone = "inherit", position = "static", justify = "start", align = "start", gap = "xs", interactiveGroup = false, radius = "none", accent = "none", ...props }, ref) {
|
|
43
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "li", { ref, className: _chunkKWLSBTB2cjs.cn.call(void 0,
|
|
44
|
-
layout === "row" && "flex items-start",
|
|
45
|
-
surface === "bordered" && "rounded-md border",
|
|
46
|
-
padding === "sm" && "p-2",
|
|
47
|
-
padding === "md" && "px-3 py-2",
|
|
48
|
-
padding === "compact" && "py-2.5",
|
|
49
|
-
textSize === "xs" && "text-xs",
|
|
50
|
-
textSize === "sm" && "text-sm",
|
|
51
|
-
tone === "soft" && "text-foreground/80",
|
|
52
|
-
position === "relative" && "relative",
|
|
53
|
-
justify === "between" && "justify-between gap-3",
|
|
54
|
-
align === "center" && "items-center",
|
|
55
|
-
align === "baseline" && "items-baseline",
|
|
56
|
-
gap === "xs" && "gap-1.5",
|
|
57
|
-
gap === "sm" && "gap-2",
|
|
58
|
-
interactiveGroup && "group",
|
|
59
|
-
radius === "md" && "rounded-md",
|
|
60
|
-
accent === "success" && "border-l-2 border-emerald-500 bg-emerald-500/5",
|
|
61
|
-
accent === "destructive" && "border-l-2 border-red-500 bg-red-500/5",
|
|
62
|
-
className
|
|
63
|
-
), ...props });
|
|
64
|
-
});
|
|
5
|
+
var _chunkWE3F6EUMcjs = require('../chunk-WE3F6EUM.cjs');
|
|
6
|
+
require('../chunk-W5I4FN7G.cjs');
|
|
7
|
+
require('../chunk-373W6VAD.cjs');
|
|
8
|
+
require('../chunk-EJP2L5QV.cjs');
|
|
9
|
+
require('../chunk-KWLSBTB2.cjs');
|
|
65
10
|
|
|
66
11
|
|
|
67
12
|
|
|
68
|
-
exports.List = List; exports.ListItem = ListItem;
|
|
13
|
+
exports.List = _chunkWE3F6EUMcjs.List; exports.ListItem = _chunkWE3F6EUMcjs.ListItem;
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { HTMLAttributes } from 'react';
|
|
2
|
+
import { HTMLAttributes, ReactNode } from 'react';
|
|
3
|
+
import { Sentiment } from './sentiment-dot.cjs';
|
|
4
|
+
import 'react/jsx-runtime';
|
|
5
|
+
import '../lib/status-colors.cjs';
|
|
3
6
|
|
|
4
7
|
interface ListProps extends HTMLAttributes<HTMLUListElement | HTMLOListElement> {
|
|
5
8
|
ordered?: boolean;
|
|
@@ -17,7 +20,11 @@ interface ListProps extends HTMLAttributes<HTMLUListElement | HTMLOListElement>
|
|
|
17
20
|
/** Semantic ordered or unordered list with controlled rhythm and markers. */
|
|
18
21
|
declare const List: React.ForwardRefExoticComponent<ListProps & React.RefAttributes<HTMLOListElement | HTMLUListElement>>;
|
|
19
22
|
interface ListItemProps extends HTMLAttributes<HTMLLIElement> {
|
|
20
|
-
layout?: "plain" | "row";
|
|
23
|
+
layout?: "plain" | "row" | "bullet";
|
|
24
|
+
/** A semantic dot with consistent spacing and wrapping in the bullet layout. */
|
|
25
|
+
sentiment?: Sentiment;
|
|
26
|
+
/** Trailing controls for a bullet row; the content keeps the same alignment without them. */
|
|
27
|
+
actions?: ReactNode;
|
|
21
28
|
surface?: "none" | "bordered";
|
|
22
29
|
padding?: "none" | "sm" | "compact" | "md";
|
|
23
30
|
textSize?: "inherit" | "xs" | "sm";
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { HTMLAttributes } from 'react';
|
|
2
|
+
import { HTMLAttributes, ReactNode } from 'react';
|
|
3
|
+
import { Sentiment } from './sentiment-dot.js';
|
|
4
|
+
import 'react/jsx-runtime';
|
|
5
|
+
import '../lib/status-colors.js';
|
|
3
6
|
|
|
4
7
|
interface ListProps extends HTMLAttributes<HTMLUListElement | HTMLOListElement> {
|
|
5
8
|
ordered?: boolean;
|
|
@@ -17,7 +20,11 @@ interface ListProps extends HTMLAttributes<HTMLUListElement | HTMLOListElement>
|
|
|
17
20
|
/** Semantic ordered or unordered list with controlled rhythm and markers. */
|
|
18
21
|
declare const List: React.ForwardRefExoticComponent<ListProps & React.RefAttributes<HTMLOListElement | HTMLUListElement>>;
|
|
19
22
|
interface ListItemProps extends HTMLAttributes<HTMLLIElement> {
|
|
20
|
-
layout?: "plain" | "row";
|
|
23
|
+
layout?: "plain" | "row" | "bullet";
|
|
24
|
+
/** A semantic dot with consistent spacing and wrapping in the bullet layout. */
|
|
25
|
+
sentiment?: Sentiment;
|
|
26
|
+
/** Trailing controls for a bullet row; the content keeps the same alignment without them. */
|
|
27
|
+
actions?: ReactNode;
|
|
21
28
|
surface?: "none" | "bordered";
|
|
22
29
|
padding?: "none" | "sm" | "compact" | "md";
|
|
23
30
|
textSize?: "inherit" | "xs" | "sm";
|
package/dist/primitives/list.js
CHANGED
|
@@ -1,67 +1,12 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
|
|
10
|
-
var markerStyles = {
|
|
11
|
-
none: "list-none",
|
|
12
|
-
disc: "list-disc pl-5",
|
|
13
|
-
decimal: "list-decimal pl-5"
|
|
14
|
-
};
|
|
15
|
-
var List = forwardRef(function List2({ ordered = false, spacing = "none", marker = "none", divided = false, inset = "none", guide = false, textSize = "inherit", tone = "inherit", marginTop = "none", surface = "none", radius = "none", className, ...props }, ref) {
|
|
16
|
-
const Component = ordered ? "ol" : "ul";
|
|
17
|
-
return /* @__PURE__ */ jsx(
|
|
18
|
-
Component,
|
|
19
|
-
{
|
|
20
|
-
ref,
|
|
21
|
-
className: cn(
|
|
22
|
-
spacingStyles[spacing],
|
|
23
|
-
markerStyles[marker],
|
|
24
|
-
divided && "divide-y divide-border",
|
|
25
|
-
inset === "xs" && "pl-1",
|
|
26
|
-
inset === "md" && "pl-4",
|
|
27
|
-
guide && "border-l border-border",
|
|
28
|
-
textSize === "xs" && "text-xs",
|
|
29
|
-
textSize === "sm" && "text-sm",
|
|
30
|
-
tone === "muted" && "text-muted-foreground",
|
|
31
|
-
tone === "soft" && "text-foreground/80",
|
|
32
|
-
marginTop === "sm" && "mt-2",
|
|
33
|
-
marginTop === "md" && "mt-4",
|
|
34
|
-
surface === "bordered" && "border border-border bg-background",
|
|
35
|
-
radius === "md" && "rounded-md",
|
|
36
|
-
className
|
|
37
|
-
),
|
|
38
|
-
...props
|
|
39
|
-
}
|
|
40
|
-
);
|
|
41
|
-
});
|
|
42
|
-
var ListItem = forwardRef(function ListItem2({ className, layout = "plain", surface = "none", padding = "none", textSize = "inherit", tone = "inherit", position = "static", justify = "start", align = "start", gap = "xs", interactiveGroup = false, radius = "none", accent = "none", ...props }, ref) {
|
|
43
|
-
return /* @__PURE__ */ jsx("li", { ref, className: cn(
|
|
44
|
-
layout === "row" && "flex items-start",
|
|
45
|
-
surface === "bordered" && "rounded-md border",
|
|
46
|
-
padding === "sm" && "p-2",
|
|
47
|
-
padding === "md" && "px-3 py-2",
|
|
48
|
-
padding === "compact" && "py-2.5",
|
|
49
|
-
textSize === "xs" && "text-xs",
|
|
50
|
-
textSize === "sm" && "text-sm",
|
|
51
|
-
tone === "soft" && "text-foreground/80",
|
|
52
|
-
position === "relative" && "relative",
|
|
53
|
-
justify === "between" && "justify-between gap-3",
|
|
54
|
-
align === "center" && "items-center",
|
|
55
|
-
align === "baseline" && "items-baseline",
|
|
56
|
-
gap === "xs" && "gap-1.5",
|
|
57
|
-
gap === "sm" && "gap-2",
|
|
58
|
-
interactiveGroup && "group",
|
|
59
|
-
radius === "md" && "rounded-md",
|
|
60
|
-
accent === "success" && "border-l-2 border-emerald-500 bg-emerald-500/5",
|
|
61
|
-
accent === "destructive" && "border-l-2 border-red-500 bg-red-500/5",
|
|
62
|
-
className
|
|
63
|
-
), ...props });
|
|
64
|
-
});
|
|
3
|
+
List,
|
|
4
|
+
ListItem
|
|
5
|
+
} from "../chunk-YFXZWDA5.js";
|
|
6
|
+
import "../chunk-YWAQRAXP.js";
|
|
7
|
+
import "../chunk-EIY5LLSP.js";
|
|
8
|
+
import "../chunk-F7JHSZNT.js";
|
|
9
|
+
import "../chunk-G6SRSWXB.js";
|
|
65
10
|
export {
|
|
66
11
|
List,
|
|
67
12
|
ListItem
|
|
@@ -11,8 +11,9 @@
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
var
|
|
15
|
-
require('../chunk-
|
|
14
|
+
var _chunkHSSSNAVXcjs = require('../chunk-HSSSNAVX.cjs');
|
|
15
|
+
require('../chunk-6AMSRIQ4.cjs');
|
|
16
|
+
require('../chunk-Z2H4LJVG.cjs');
|
|
16
17
|
require('../chunk-WABCLRBR.cjs');
|
|
17
18
|
require('../chunk-JDEXZGIY.cjs');
|
|
18
19
|
require('../chunk-KWLSBTB2.cjs');
|
|
@@ -27,4 +28,4 @@ require('../chunk-KWLSBTB2.cjs');
|
|
|
27
28
|
|
|
28
29
|
|
|
29
30
|
|
|
30
|
-
exports.MessageScroller =
|
|
31
|
+
exports.MessageScroller = _chunkHSSSNAVXcjs.MessageScroller; exports.MessageScrollerButton = _chunkHSSSNAVXcjs.MessageScrollerButton; exports.MessageScrollerContent = _chunkHSSSNAVXcjs.MessageScrollerContent; exports.MessageScrollerItem = _chunkHSSSNAVXcjs.MessageScrollerItem; exports.MessageScrollerNavigator = _chunkHSSSNAVXcjs.MessageScrollerNavigator; exports.MessageScrollerProvider = _chunkHSSSNAVXcjs.MessageScrollerProvider; exports.MessageScrollerViewport = _chunkHSSSNAVXcjs.MessageScrollerViewport; exports.useMessageScroller = _chunkHSSSNAVXcjs.useMessageScroller; exports.useMessageScrollerScrollable = _chunkHSSSNAVXcjs.useMessageScrollerScrollable; exports.useMessageScrollerVisibility = _chunkHSSSNAVXcjs.useMessageScrollerVisibility;
|
|
@@ -11,8 +11,9 @@ import {
|
|
|
11
11
|
useMessageScroller,
|
|
12
12
|
useMessageScrollerScrollable,
|
|
13
13
|
useMessageScrollerVisibility
|
|
14
|
-
} from "../chunk-
|
|
15
|
-
import "../chunk-
|
|
14
|
+
} from "../chunk-EXXJXOUO.js";
|
|
15
|
+
import "../chunk-V3XA7SDK.js";
|
|
16
|
+
import "../chunk-GA5SX7FE.js";
|
|
16
17
|
import "../chunk-3OWGL4Q2.js";
|
|
17
18
|
import "../chunk-W326GKML.js";
|
|
18
19
|
import "../chunk-G6SRSWXB.js";
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
"use client";
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var _chunk6AMSRIQ4cjs = require('../chunk-6AMSRIQ4.cjs');
|
|
6
|
+
require('../chunk-Z2H4LJVG.cjs');
|
|
6
7
|
require('../chunk-WABCLRBR.cjs');
|
|
7
8
|
require('../chunk-KWLSBTB2.cjs');
|
|
8
9
|
|
|
9
10
|
|
|
10
|
-
exports.ScrollNavigator =
|
|
11
|
+
exports.ScrollNavigator = _chunk6AMSRIQ4cjs.ScrollNavigator;
|
|
@@ -18,6 +18,8 @@ interface ScrollNavigatorScrollOptions {
|
|
|
18
18
|
interface ScrollNavigatorProps extends Omit<HTMLAttributes<HTMLDivElement>, "children"> {
|
|
19
19
|
items: readonly ScrollNavigatorItem[];
|
|
20
20
|
label?: string;
|
|
21
|
+
/** Card columns above the small breakpoint; always one column on mobile. */
|
|
22
|
+
columns?: 1 | 2 | 3 | 4;
|
|
21
23
|
/** Space below a sticky header inside the scroll viewport, in pixels. */
|
|
22
24
|
topOffset?: number;
|
|
23
25
|
/** The nearest vertically scrolling ancestor is detected by default. */
|
|
@@ -18,6 +18,8 @@ interface ScrollNavigatorScrollOptions {
|
|
|
18
18
|
interface ScrollNavigatorProps extends Omit<HTMLAttributes<HTMLDivElement>, "children"> {
|
|
19
19
|
items: readonly ScrollNavigatorItem[];
|
|
20
20
|
label?: string;
|
|
21
|
+
/** Card columns above the small breakpoint; always one column on mobile. */
|
|
22
|
+
columns?: 1 | 2 | 3 | 4;
|
|
21
23
|
/** Space below a sticky header inside the scroll viewport, in pixels. */
|
|
22
24
|
topOffset?: number;
|
|
23
25
|
/** The nearest vertically scrolling ancestor is detected by default. */
|
package/package.json
CHANGED