@refraction-ui/react 0.22.0 → 0.23.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-V24GDHUX.js → chunk-4ACSHPCM.js} +2 -2
- package/dist/{chunk-SDAJVXD4.js → chunk-5P56PN3J.js} +2 -2
- package/dist/chunk-75BKRTPO.js +417 -0
- package/dist/{chunk-2Q6HHFAN.js.map → chunk-75BKRTPO.js.map} +1 -1
- package/dist/chunk-7P7EJ56S.js +7 -0
- package/dist/{chunk-QPCKJ2YR.js → chunk-GG6MZDGV.js} +2 -2
- package/dist/{chunk-QDMLIDYN.js → chunk-GU5MI7FX.js} +2 -2
- package/dist/{chunk-3Y2T26QD.js → chunk-JZQ5ZL46.js} +6 -4
- package/dist/{chunk-3Y2T26QD.js.map → chunk-JZQ5ZL46.js.map} +2 -2
- package/dist/{chunk-RSWOLRIC.js → chunk-KIZD73DK.js} +2 -2
- package/dist/{chunk-XMFNBOPO.js → chunk-PY2TIFCT.js} +2 -2
- package/dist/{chunk-XWP763SH.js → chunk-V727VZOE.js} +4 -2
- package/dist/{chunk-XWP763SH.js.map → chunk-V727VZOE.js.map} +2 -2
- package/dist/{chunk-3I3DYDHR.js → chunk-WNLYPQOS.js} +2 -2
- package/dist/{chunk-63N4PZUJ.js → chunk-X6HEKRWE.js} +2 -2
- package/dist/{chunk-WYKPPK3W.js → chunk-XAJDSVZR.js} +2 -2
- package/dist/faro-engine-VIUXJAPH-FSARIABU.js +3 -0
- package/dist/{faro-engine-47HGRAQH-JKINJPMH.js.map → faro-engine-VIUXJAPH-FSARIABU.js.map} +1 -1
- package/dist/index.cjs +736 -274
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/internal/avatar/index.d.cts +4 -1
- package/dist/internal/avatar/index.d.ts +4 -1
- package/dist/internal/data-table/index.d.cts +48 -3
- package/dist/internal/data-table/index.d.ts +48 -3
- package/dist/internal/line-chart/index.d.ts +17 -3
- package/dist/internal/native-select/index.d.ts +21 -0
- package/dist/internal/react-avatar/index.d.cts +4 -2
- package/dist/internal/react-avatar/index.d.ts +4 -2
- package/dist/internal/react-command/index.d.cts +13 -2
- package/dist/internal/react-command/index.d.ts +13 -2
- package/dist/internal/react-data-table/index.d.cts +27 -9
- package/dist/internal/react-data-table/index.d.ts +27 -9
- package/dist/internal/react-dialog/index.d.cts +5 -0
- package/dist/internal/react-dialog/index.d.ts +5 -0
- package/dist/internal/react-dropdown-menu/index.d.cts +19 -1
- package/dist/internal/react-dropdown-menu/index.d.ts +19 -1
- package/dist/internal/react-line-chart/index.d.ts +7 -2
- package/dist/internal/react-native-select/index.d.ts +19 -0
- package/dist/internal/react-stat-grid/index.d.ts +22 -11
- package/dist/internal/react-table/index.d.ts +39 -0
- package/dist/internal/stat-grid/index.d.ts +49 -7
- package/dist/internal/table/index.d.ts +46 -0
- package/dist/react-accordion.js +1 -1
- package/dist/react-action-list.js +1 -1
- package/dist/react-ai.js +1 -1
- package/dist/react-analytics.js +16 -4
- package/dist/react-analytics.js.map +2 -2
- package/dist/react-animated-text.js +1 -1
- package/dist/react-app-shell.js +1 -1
- package/dist/react-audience-feature-card.js +1 -1
- package/dist/react-audio-room.js +1 -1
- package/dist/react-auth.js +1 -1
- package/dist/react-avatar-group.js +1 -1
- package/dist/react-avatar.js +13 -9
- package/dist/react-avatar.js.map +2 -2
- package/dist/react-badge.js +1 -1
- package/dist/react-bottom-nav.js +1 -1
- package/dist/react-brand-network-cell.js +1 -1
- package/dist/react-breadcrumbs.js +1 -1
- package/dist/react-browser-chrome-mock.js +1 -1
- package/dist/react-button.js +3 -3
- package/dist/react-calendar.js +1 -1
- package/dist/react-call-controls.js +1 -1
- package/dist/react-callout.js +1 -1
- package/dist/react-card-grid.js +1 -1
- package/dist/react-card.js +1 -1
- package/dist/react-carousel.js +1 -1
- package/dist/react-charts.js +1 -1
- package/dist/react-checkbox.js +1 -1
- package/dist/react-checklist.js +1 -1
- package/dist/react-code-block.js +1 -1
- package/dist/react-code-editor.js +1 -1
- package/dist/react-collapsible.js +1 -1
- package/dist/react-combobox.js +1 -1
- package/dist/react-command-input.js +1 -1
- package/dist/react-command.js +115 -70
- package/dist/react-command.js.map +3 -3
- package/dist/react-composer.js +3 -3
- package/dist/react-content-protection.js +1 -1
- package/dist/react-conversation.js +5 -5
- package/dist/react-cookie-consent.js +1 -1
- package/dist/react-data-table.js +125 -114
- package/dist/react-data-table.js.map +2 -2
- package/dist/react-date-picker.js +1 -1
- package/dist/react-device-frame.js +1 -1
- package/dist/react-dialog.js +33 -9
- package/dist/react-dialog.js.map +2 -2
- package/dist/react-diff-viewer.js +1 -1
- package/dist/react-dropdown-menu.js +61 -8
- package/dist/react-dropdown-menu.js.map +3 -3
- package/dist/react-editor-status-bar.js +1 -1
- package/dist/react-editor-tabs.js +1 -1
- package/dist/react-emoji-picker.js +2 -2
- package/dist/react-empty-state.js +1 -1
- package/dist/react-feedback-dialog.js +2 -2
- package/dist/react-file-tree.js +1 -1
- package/dist/react-file-upload.js +1 -1
- package/dist/react-floating-reactions.js +1 -1
- package/dist/react-flow-editor.js +2 -2
- package/dist/react-footer.js +1 -1
- package/dist/react-funnel-chart.js +1 -1
- package/dist/react-graph-view.js +2 -2
- package/dist/react-infinite-canvas.js +2 -2
- package/dist/react-inline-editor.js +1 -1
- package/dist/react-input-group.js +1 -1
- package/dist/react-input.js +2 -2
- package/dist/react-install-prompt.js +1 -1
- package/dist/react-kanban-board.js +1 -1
- package/dist/react-keyboard-shortcut.js +2 -2
- package/dist/react-language-selector.js +1 -1
- package/dist/react-line-chart.js +49 -11
- package/dist/react-line-chart.js.map +2 -2
- package/dist/react-link-card.js +1 -1
- package/dist/react-live-captions.js +1 -1
- package/dist/react-live-cursors.js +1 -1
- package/dist/react-live-transcript.js +1 -1
- package/dist/react-location-selector.js +1 -1
- package/dist/react-logger.js +3 -3
- package/dist/react-markdown-renderer.js +2 -2
- package/dist/react-marquee-strip.js +1 -1
- package/dist/react-mascot.js +1 -1
- package/dist/react-mastery-bar.js +1 -1
- package/dist/react-mini-map.js +1 -1
- package/dist/react-mobile-nav.js +1 -1
- package/dist/react-native-select.js +52 -0
- package/dist/react-native-select.js.map +7 -0
- package/dist/react-navbar.js +1 -1
- package/dist/react-numbered-steps.js +1 -1
- package/dist/react-otp-input.js +1 -1
- package/dist/react-page-header.js +1 -1
- package/dist/react-pagination.js +1 -1
- package/dist/react-password-input.js +2 -2
- package/dist/react-payment.js +1 -1
- package/dist/react-popover.js +1 -1
- package/dist/react-pre-call-lobby.js +1 -1
- package/dist/react-presence-indicator.js +1 -1
- package/dist/react-pricing-card.js +1 -1
- package/dist/react-progress-display.js +1 -1
- package/dist/react-radial-gauge.js +1 -1
- package/dist/react-radio.js +1 -1
- package/dist/react-rating-scale.js +1 -1
- package/dist/react-reaction-bar.js +1 -1
- package/dist/react-resizable-layout.js +1 -1
- package/dist/react-search-bar.js +1 -1
- package/dist/react-section-head.js +1 -1
- package/dist/react-segmented-control.js +1 -1
- package/dist/react-select.js +1 -1
- package/dist/react-separator.js +1 -1
- package/dist/react-sheet.js +1 -1
- package/dist/react-sidebar.js +1 -1
- package/dist/react-skeleton.js +1 -1
- package/dist/react-skip-to-content.js +1 -1
- package/dist/react-slide-viewer.js +1 -1
- package/dist/react-slider.js +1 -1
- package/dist/react-slot-picker.js +1 -1
- package/dist/react-social-auth-button.js +3 -3
- package/dist/react-sortable-list.js +1 -1
- package/dist/react-stat-grid.js +91 -22
- package/dist/react-stat-grid.js.map +2 -2
- package/dist/react-status-indicator.js +1 -1
- package/dist/react-steps.js +1 -1
- package/dist/react-sticky-note.js +1 -1
- package/dist/react-switch.js +1 -1
- package/dist/react-table-of-contents.js +1 -1
- package/dist/react-table.js +148 -0
- package/dist/react-table.js.map +7 -0
- package/dist/react-tabs.js +35 -6
- package/dist/react-tabs.js.map +2 -2
- package/dist/react-terminal.js +1 -1
- package/dist/react-test-results.js +1 -1
- package/dist/react-textarea.js +1 -1
- package/dist/react-thread-view.js +2 -2
- package/dist/react-timeline.js +1 -1
- package/dist/react-toast.js +1 -1
- package/dist/react-tooltip.js +1 -1
- package/dist/react-version-selector.js +1 -1
- package/dist/react-video-grid.js +2 -2
- package/dist/react-video-player.js +1 -1
- package/dist/react-video-tile.js +2 -2
- package/dist/react-voice-pill.js +1 -1
- package/dist/react-waveform.js +1 -1
- package/dist/react-wizard.js +1 -1
- package/dist/shared.js +53 -0
- package/dist/shared.js.map +7 -0
- package/package.json +3 -1
- package/dist/chunk-2Q6HHFAN.js +0 -164
- package/dist/chunk-SDZ3LROZ.js +0 -7
- package/dist/faro-engine-47HGRAQH-JKINJPMH.js +0 -3
- /package/dist/{chunk-V24GDHUX.js.map → chunk-4ACSHPCM.js.map} +0 -0
- /package/dist/{chunk-SDAJVXD4.js.map → chunk-5P56PN3J.js.map} +0 -0
- /package/dist/{chunk-SDZ3LROZ.js.map → chunk-7P7EJ56S.js.map} +0 -0
- /package/dist/{chunk-QPCKJ2YR.js.map → chunk-GG6MZDGV.js.map} +0 -0
- /package/dist/{chunk-QDMLIDYN.js.map → chunk-GU5MI7FX.js.map} +0 -0
- /package/dist/{chunk-RSWOLRIC.js.map → chunk-KIZD73DK.js.map} +0 -0
- /package/dist/{chunk-XMFNBOPO.js.map → chunk-PY2TIFCT.js.map} +0 -0
- /package/dist/{chunk-3I3DYDHR.js.map → chunk-WNLYPQOS.js.map} +0 -0
- /package/dist/{chunk-63N4PZUJ.js.map → chunk-X6HEKRWE.js.map} +0 -0
- /package/dist/{chunk-WYKPPK3W.js.map → chunk-XAJDSVZR.js.map} +0 -0
package/dist/react-select.js
CHANGED
package/dist/react-separator.js
CHANGED
package/dist/react-sheet.js
CHANGED
package/dist/react-sidebar.js
CHANGED
package/dist/react-skeleton.js
CHANGED
package/dist/react-slider.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Button
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-JZQ5ZL46.js";
|
|
4
|
+
import "./chunk-GU5MI7FX.js";
|
|
5
5
|
import {
|
|
6
6
|
cn,
|
|
7
7
|
cva
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-75BKRTPO.js";
|
|
9
9
|
|
|
10
10
|
// ../react-social-auth-button/dist/index.js
|
|
11
11
|
import * as React from "react";
|
package/dist/react-stat-grid.js
CHANGED
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import {
|
|
2
2
|
cn,
|
|
3
3
|
cva
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-75BKRTPO.js";
|
|
5
5
|
|
|
6
6
|
// ../react-stat-grid/dist/index.js
|
|
7
7
|
import * as React from "react";
|
|
8
8
|
|
|
9
9
|
// ../stat-grid/dist/index.js
|
|
10
10
|
function statColumns(count, max = 3) {
|
|
11
|
-
if (count <=
|
|
12
|
-
if (count === 1) return 1;
|
|
11
|
+
if (count <= 1) return 1;
|
|
13
12
|
if (count === 2) return 2;
|
|
14
|
-
return Math.min(count, max);
|
|
13
|
+
return Math.min(count, max, 4);
|
|
14
|
+
}
|
|
15
|
+
function statColumnsKey(columns) {
|
|
16
|
+
if (columns === "auto") return "auto";
|
|
17
|
+
return String(Math.min(Math.max(Math.round(columns), 1), 4));
|
|
15
18
|
}
|
|
16
19
|
function createStatGrid() {
|
|
17
20
|
return {
|
|
@@ -20,44 +23,110 @@ function createStatGrid() {
|
|
|
20
23
|
};
|
|
21
24
|
}
|
|
22
25
|
var statGridVariants = cva({
|
|
23
|
-
base: "grid
|
|
26
|
+
base: "grid",
|
|
24
27
|
variants: {
|
|
25
28
|
columns: {
|
|
26
29
|
"1": "grid-cols-1",
|
|
27
|
-
"2": "grid-cols-2",
|
|
28
|
-
"3": "grid-cols-3"
|
|
30
|
+
"2": "grid-cols-1 sm:grid-cols-2",
|
|
31
|
+
"3": "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3",
|
|
32
|
+
"4": "grid-cols-1 sm:grid-cols-2 lg:grid-cols-4",
|
|
33
|
+
auto: "grid-cols-[repeat(auto-fill,minmax(12rem,1fr))]"
|
|
34
|
+
},
|
|
35
|
+
variant: {
|
|
36
|
+
plain: "gap-8",
|
|
37
|
+
card: "gap-3"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
defaultVariants: {
|
|
41
|
+
columns: "3",
|
|
42
|
+
variant: "plain"
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
var statItemVariants = cva({
|
|
46
|
+
base: "flex min-w-0 flex-col",
|
|
47
|
+
variants: {
|
|
48
|
+
variant: {
|
|
49
|
+
plain: "",
|
|
50
|
+
card: "gap-1 rounded-lg border border-border bg-card p-4 text-card-foreground"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
defaultVariants: {
|
|
54
|
+
variant: "plain"
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
var statValueVariants = cva({
|
|
58
|
+
base: "font-bold tabular-nums",
|
|
59
|
+
variants: {
|
|
60
|
+
variant: {
|
|
61
|
+
plain: "text-xl sm:text-2xl",
|
|
62
|
+
card: "text-2xl leading-tight"
|
|
63
|
+
},
|
|
64
|
+
tone: {
|
|
65
|
+
default: "",
|
|
66
|
+
positive: "text-success",
|
|
67
|
+
negative: "text-destructive",
|
|
68
|
+
caution: "text-warning"
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
compoundVariants: [
|
|
72
|
+
{ variant: "plain", tone: "default", class: "text-primary" },
|
|
73
|
+
{ variant: "card", tone: "default", class: "text-foreground" }
|
|
74
|
+
],
|
|
75
|
+
defaultVariants: {
|
|
76
|
+
variant: "plain",
|
|
77
|
+
tone: "default"
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
var statLabelVariants = cva({
|
|
81
|
+
base: "text-muted-foreground",
|
|
82
|
+
variants: {
|
|
83
|
+
layout: {
|
|
84
|
+
"value-first": "mt-1 text-sm leading-snug",
|
|
85
|
+
"label-first": "text-xs uppercase tracking-wide"
|
|
29
86
|
}
|
|
30
87
|
},
|
|
31
88
|
defaultVariants: {
|
|
32
|
-
|
|
89
|
+
layout: "value-first"
|
|
33
90
|
}
|
|
34
91
|
});
|
|
35
|
-
var
|
|
36
|
-
var statValueClass = "text-xl sm:text-2xl font-bold text-primary";
|
|
37
|
-
var statLabelClass = "mt-1 text-sm text-muted-foreground leading-snug";
|
|
92
|
+
var statDescriptionClass = "text-xs leading-snug text-muted-foreground";
|
|
38
93
|
|
|
39
94
|
// ../react-stat-grid/dist/index.js
|
|
40
95
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
41
96
|
var StatGrid = React.forwardRef(
|
|
42
|
-
function StatGrid2({ items, columns, className, ...props }, ref) {
|
|
43
|
-
const cols = columns ?? statColumns(items.length);
|
|
97
|
+
function StatGrid2({ items, columns, variant = "plain", layout = "value-first", className, ...props }, ref) {
|
|
98
|
+
const cols = statColumnsKey(columns ?? statColumns(items.length));
|
|
44
99
|
const { ariaProps, dataAttributes } = createStatGrid();
|
|
45
100
|
return /* @__PURE__ */ jsx(
|
|
46
101
|
"div",
|
|
47
102
|
{
|
|
48
103
|
ref,
|
|
49
|
-
className: cn(
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
),
|
|
53
|
-
style: { gridTemplateColumns: `repeat(${cols}, 1fr)` },
|
|
104
|
+
className: cn(statGridVariants({ columns: cols, variant }), className),
|
|
105
|
+
"data-variant": variant,
|
|
106
|
+
"data-layout": layout,
|
|
54
107
|
...ariaProps,
|
|
55
108
|
...dataAttributes,
|
|
56
109
|
...props,
|
|
57
|
-
children: items.map((item, index) =>
|
|
58
|
-
|
|
59
|
-
/* @__PURE__ */ jsx("span", { className:
|
|
60
|
-
|
|
110
|
+
children: items.map((item, index) => {
|
|
111
|
+
const { className: itemClassName, ...itemProps } = item.props ?? {};
|
|
112
|
+
const label = /* @__PURE__ */ jsx("span", { className: statLabelVariants({ layout }), children: item.label });
|
|
113
|
+
return /* @__PURE__ */ jsxs(
|
|
114
|
+
"div",
|
|
115
|
+
{
|
|
116
|
+
role: "listitem",
|
|
117
|
+
className: cn(statItemVariants({ variant }), itemClassName),
|
|
118
|
+
"data-tone": item.tone ?? "default",
|
|
119
|
+
...itemProps,
|
|
120
|
+
children: [
|
|
121
|
+
layout === "label-first" && label,
|
|
122
|
+
/* @__PURE__ */ jsx("span", { className: statValueVariants({ variant, tone: item.tone ?? "default" }), children: item.value }),
|
|
123
|
+
layout === "value-first" && label,
|
|
124
|
+
item.description != null && /* @__PURE__ */ jsx("span", { className: statDescriptionClass, children: item.description })
|
|
125
|
+
]
|
|
126
|
+
},
|
|
127
|
+
item.id ?? index
|
|
128
|
+
);
|
|
129
|
+
})
|
|
61
130
|
}
|
|
62
131
|
);
|
|
63
132
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../stat-grid/src/stat-grid.ts", "../../stat-grid/src/stat-grid.styles.ts", "../../react-stat-grid/src/stat-grid.tsx"],
|
|
4
|
-
"sourcesContent": ["/** A single stat callout displayed in the grid. */\nexport type StatItem = {\n /** The primary value displayed prominently (e.g. \"10k+\", \"$4.2M\"). */\n value: string\n /** The descriptive label
|
|
5
|
-
"mappings": ";;;;;;;;;
|
|
4
|
+
"sourcesContent": ["/** Semantic colour of a stat's value. */\nexport type StatTone = 'default' | 'positive' | 'negative' | 'caution'\n/** `plain` = marketing callouts; `card` = bordered dashboard KPI cards. */\nexport type StatGridVariant = 'plain' | 'card'\n/** Whether the label sits under the value (callout) or above it (KPI). */\nexport type StatGridLayout = 'value-first' | 'label-first'\n/** Column count: a fixed maximum that reflows down on narrow screens, or `auto`. */\nexport type StatGridColumns = 1 | 2 | 3 | 4 | 'auto'\n\n/** A single stat callout displayed in the grid. */\nexport type StatItem = {\n /** The primary value displayed prominently (e.g. \"10k+\", \"$4.2M\"). */\n value: string\n /** The descriptive label. */\n label: string\n /** Stable key; defaults to the index. */\n id?: string\n /** Optional line explaining the figure (how it was computed, a delta). */\n description?: string\n /** Colour of the value. Defaults to `default`. */\n tone?: StatTone\n}\n\nexport interface StatGridAPI {\n /** ARIA attributes to spread on the grid container element (`role=\"list\"`). */\n ariaProps: { role: 'list' }\n /** Data attributes for styling hooks. */\n dataAttributes: Record<string, string>\n}\n\n/**\n * Compute the number of grid columns for a stat grid.\n *\n * - 1 item → 1 column\n * - 2 items → 2 columns\n * - 3 or more items → capped at `max` (default 3)\n */\nexport function statColumns(count: number, max = 3): 1 | 2 | 3 | 4 {\n if (count <= 1) return 1\n if (count === 2) return 2\n return Math.min(count, max, 4) as 3 | 4\n}\n\n/** The cva key for a column setting (clamped to the supported 1–4). */\nexport function statColumnsKey(columns: StatGridColumns): '1' | '2' | '3' | '4' | 'auto' {\n if (columns === 'auto') return 'auto'\n return String(Math.min(Math.max(Math.round(columns), 1), 4)) as '1' | '2' | '3' | '4'\n}\n\n/**\n * Build the framework-agnostic container props for a stat grid.\n *\n * Returns `role=\"list\"` and data attributes; adapters spread these onto their\n * container element and render the items themselves.\n */\nexport function createStatGrid(): StatGridAPI {\n return {\n ariaProps: { role: 'list' },\n dataAttributes: {},\n }\n}\n", "import { cva } from '@refraction-ui/shared'\n\n/**\n * Grid container. Column counts are responsive (one column on a phone, more\n * as the width allows) — never a fixed inline template that cannot reflow.\n * `auto` fits as many ~12rem items per row as the width allows.\n */\nexport const statGridVariants = cva({\n base: 'grid',\n variants: {\n columns: {\n '1': 'grid-cols-1',\n '2': 'grid-cols-1 sm:grid-cols-2',\n '3': 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-3',\n '4': 'grid-cols-1 sm:grid-cols-2 lg:grid-cols-4',\n auto: 'grid-cols-[repeat(auto-fill,minmax(12rem,1fr))]',\n },\n variant: {\n plain: 'gap-8',\n card: 'gap-3',\n },\n },\n defaultVariants: {\n columns: '3',\n variant: 'plain',\n },\n})\n\n/** Individual stat item container (role=\"listitem\"). */\nexport const statItemVariants = cva({\n base: 'flex min-w-0 flex-col',\n variants: {\n variant: {\n plain: '',\n card: 'gap-1 rounded-lg border border-border bg-card p-4 text-card-foreground',\n },\n },\n defaultVariants: {\n variant: 'plain',\n },\n})\n\n/** @deprecated Use `statItemVariants()`; kept for existing imports. */\nexport const statItemClass = 'flex flex-col'\n\n/** The value of a stat, by variant and tone. */\nexport const statValueVariants = cva({\n base: 'font-bold tabular-nums',\n variants: {\n variant: {\n plain: 'text-xl sm:text-2xl',\n card: 'text-2xl leading-tight',\n },\n tone: {\n default: '',\n positive: 'text-success',\n negative: 'text-destructive',\n caution: 'text-warning',\n },\n },\n compoundVariants: [\n { variant: 'plain', tone: 'default', class: 'text-primary' },\n { variant: 'card', tone: 'default', class: 'text-foreground' },\n ],\n defaultVariants: {\n variant: 'plain',\n tone: 'default',\n },\n})\n\n/** @deprecated Use `statValueVariants()`; kept for existing imports. */\nexport const statValueClass = 'text-xl sm:text-2xl font-bold text-primary'\n\n/** The descriptive label. Above the value it reads as a small caption. */\nexport const statLabelVariants = cva({\n base: 'text-muted-foreground',\n variants: {\n layout: {\n 'value-first': 'mt-1 text-sm leading-snug',\n 'label-first': 'text-xs uppercase tracking-wide',\n },\n },\n defaultVariants: {\n layout: 'value-first',\n },\n})\n\n/** @deprecated Use `statLabelVariants()`; kept for existing imports. */\nexport const statLabelClass = 'mt-1 text-sm text-muted-foreground leading-snug'\n\n/** Optional line under a stat explaining how it was computed. */\nexport const statDescriptionClass = 'text-xs leading-snug text-muted-foreground'\n", "import * as React from 'react'\nimport {\n createStatGrid,\n statColumns,\n statColumnsKey,\n statGridVariants,\n statItemVariants,\n statValueVariants,\n statLabelVariants,\n statDescriptionClass,\n type StatTone,\n type StatGridVariant,\n type StatGridLayout,\n type StatGridColumns,\n} from '@refraction-ui/stat-grid'\nimport { cn } from '@refraction-ui/shared'\n\nexport type { StatItem, StatTone, StatGridVariant, StatGridLayout, StatGridColumns } from '@refraction-ui/stat-grid'\n\nexport interface StatGridItem {\n /** The primary value displayed prominently. Allows rich content in React. */\n value: React.ReactNode\n /** The descriptive label. */\n label: React.ReactNode\n /** Stable key; defaults to the index. */\n id?: string\n /** Optional line explaining the figure (how it was computed, a delta). */\n description?: React.ReactNode\n /** Colour of the value. Defaults to `default`. */\n tone?: StatTone\n /** Extra attributes for this item's element (`data-*`, `aria-*`, `title`, className). */\n props?: React.HTMLAttributes<HTMLDivElement>\n}\n\nexport interface StatGridProps\n extends Omit<React.HTMLAttributes<HTMLDivElement>, 'content'> {\n /** The stat items to display in the grid. */\n items: StatGridItem[]\n /**\n * Maximum columns (reflows to fewer on narrow screens), or `auto` to fit as\n * many ~12rem items as the width allows. Defaults to\n * `statColumns(items.length)`: 1 → 1, 2 → 2, 3+ → 3.\n */\n columns?: StatGridColumns\n /** `plain` marketing callouts (default) or bordered `card` KPIs. */\n variant?: StatGridVariant\n /** `value-first` (default) or `label-first` (dashboard KPI order). */\n layout?: StatGridLayout\n}\n\n/**\n * StatGrid — a responsive grid of stats: marketing callouts (`plain`) or\n * dashboard KPI cards (`card`), value- or label-first, with an optional\n * description and a tone per item. Uses `role=\"list\"` / `role=\"listitem\"`.\n */\nexport const StatGrid = React.forwardRef<HTMLDivElement, StatGridProps>(\n function StatGrid(\n { items, columns, variant = 'plain', layout = 'value-first', className, ...props },\n ref,\n ) {\n const cols = statColumnsKey(columns ?? statColumns(items.length))\n const { ariaProps, dataAttributes } = createStatGrid()\n\n return (\n <div\n ref={ref}\n className={cn(statGridVariants({ columns: cols, variant }), className)}\n data-variant={variant}\n data-layout={layout}\n {...ariaProps}\n {...dataAttributes}\n {...props}\n >\n {items.map((item, index) => {\n const { className: itemClassName, ...itemProps } = item.props ?? {}\n const label = <span className={statLabelVariants({ layout })}>{item.label}</span>\n return (\n <div\n key={item.id ?? index}\n role=\"listitem\"\n className={cn(statItemVariants({ variant }), itemClassName)}\n data-tone={item.tone ?? 'default'}\n {...itemProps}\n >\n {layout === 'label-first' && label}\n <span className={statValueVariants({ variant, tone: item.tone ?? 'default' })}>{item.value}</span>\n {layout === 'value-first' && label}\n {item.description != null && <span className={statDescriptionClass}>{item.description}</span>}\n </div>\n )\n })}\n </div>\n )\n },\n)\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;AAqCO,SAAS,YAAY,OAAe,MAAM,GAAkB;AACjE,MAAI,SAAS,EAAG,QAAO;AACvB,MAAI,UAAU,EAAG,QAAO;AACxB,SAAO,KAAK,IAAI,OAAO,KAAK,CAAC;AAC/B;AAGO,SAAS,eAAe,SAA0D;AACvF,MAAI,YAAY,OAAQ,QAAO;AAC/B,SAAO,OAAO,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7D;AAQO,SAAS,iBAA8B;AAC5C,SAAO;IACL,WAAW,EAAE,MAAM,OAAA;IACnB,gBAAgB,CAAA;EAAC;AAErB;ACrDO,IAAM,mBAAmB,IAAI;EAClC,MAAM;EACN,UAAU;IACR,SAAS;MACP,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,MAAM;IAAA;IAER,SAAS;MACP,OAAO;MACP,MAAM;IAAA;EACR;EAEF,iBAAiB;IACf,SAAS;IACT,SAAS;EAAA;AAEb,CAAC;AAGM,IAAM,mBAAmB,IAAI;EAClC,MAAM;EACN,UAAU;IACR,SAAS;MACP,OAAO;MACP,MAAM;IAAA;EACR;EAEF,iBAAiB;IACf,SAAS;EAAA;AAEb,CAAC;AAMM,IAAM,oBAAoB,IAAI;EACnC,MAAM;EACN,UAAU;IACR,SAAS;MACP,OAAO;MACP,MAAM;IAAA;IAER,MAAM;MACJ,SAAS;MACT,UAAU;MACV,UAAU;MACV,SAAS;IAAA;EACX;EAEF,kBAAkB;IAChB,EAAE,SAAS,SAAS,MAAM,WAAW,OAAO,eAAA;IAC5C,EAAE,SAAS,QAAQ,MAAM,WAAW,OAAO,kBAAA;EAAkB;EAE/D,iBAAiB;IACf,SAAS;IACT,MAAM;EAAA;AAEV,CAAC;AAMM,IAAM,oBAAoB,IAAI;EACnC,MAAM;EACN,UAAU;IACR,QAAQ;MACN,eAAe;MACf,eAAe;IAAA;EACjB;EAEF,iBAAiB;IACf,QAAQ;EAAA;AAEZ,CAAC;AAMM,IAAM,uBAAuB;;;;ACpC7B,IAAM,WAAiB;EAC5B,SAASA,UACP,EAAE,OAAO,SAAS,UAAU,SAAS,SAAS,eAAe,WAAW,GAAG,MAAA,GAC3E,KACA;AACA,UAAM,OAAO,eAAe,WAAW,YAAY,MAAM,MAAM,CAAC;AAChE,UAAM,EAAE,WAAW,eAAA,IAAmB,eAAA;AAEtC,WACE;MAAC;MAAA;QACC;QACA,WAAW,GAAG,iBAAiB,EAAE,SAAS,MAAM,QAAA,CAAS,GAAG,SAAS;QACrE,gBAAc;QACd,eAAa;QACZ,GAAG;QACH,GAAG;QACH,GAAG;QAEH,UAAA,MAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,gBAAM,EAAE,WAAW,eAAe,GAAG,UAAA,IAAc,KAAK,SAAS,CAAA;AACjE,gBAAM,QAAQ,oBAAC,QAAA,EAAK,WAAW,kBAAkB,EAAE,OAAA,CAAQ,GAAI,UAAA,KAAK,MAAA,CAAM;AAC1E,iBACE;YAAC;YAAA;cAEC,MAAK;cACL,WAAW,GAAG,iBAAiB,EAAE,QAAA,CAAS,GAAG,aAAa;cAC1D,aAAW,KAAK,QAAQ;cACvB,GAAG;cAEH,UAAA;gBAAA,WAAW,iBAAiB;gBAC7B,oBAAC,QAAA,EAAK,WAAW,kBAAkB,EAAE,SAAS,MAAM,KAAK,QAAQ,UAAA,CAAW,GAAI,UAAA,KAAK,MAAA,CAAM;gBAC1F,WAAW,iBAAiB;gBAC5B,KAAK,eAAe,QAAQ,oBAAC,QAAA,EAAK,WAAW,sBAAuB,UAAA,KAAK,YAAA,CAAY;cAAA;YAAA;YATjF,KAAK,MAAM;UAAA;QAYtB,CAAC;MAAA;IAAA;EAGP;AACF;",
|
|
6
6
|
"names": ["StatGrid"]
|
|
7
7
|
}
|
package/dist/react-steps.js
CHANGED
package/dist/react-switch.js
CHANGED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cn,
|
|
3
|
+
cva
|
|
4
|
+
} from "./chunk-75BKRTPO.js";
|
|
5
|
+
|
|
6
|
+
// ../react-table/dist/index.js
|
|
7
|
+
import * as React from "react";
|
|
8
|
+
|
|
9
|
+
// ../table/dist/index.js
|
|
10
|
+
function createTable(props = {}) {
|
|
11
|
+
return {
|
|
12
|
+
dataAttributes: {
|
|
13
|
+
"data-slot": "table",
|
|
14
|
+
"data-density": props.density ?? "default",
|
|
15
|
+
"data-head-tone": props.headTone ?? "default"
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
var tableContainerClass = "relative w-full overflow-x-auto";
|
|
20
|
+
var tableRootVariants = cva({
|
|
21
|
+
base: "w-full caption-bottom border-collapse text-sm",
|
|
22
|
+
variants: {
|
|
23
|
+
fixed: {
|
|
24
|
+
true: "table-fixed",
|
|
25
|
+
false: ""
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
defaultVariants: {
|
|
29
|
+
fixed: "false"
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
var tableCaptionClass = "mt-2 text-xs text-muted-foreground";
|
|
33
|
+
var tableRowClass = "border-b border-border-subtle last:border-b-0";
|
|
34
|
+
var align = {
|
|
35
|
+
start: "text-start",
|
|
36
|
+
center: "text-center",
|
|
37
|
+
end: "text-end"
|
|
38
|
+
};
|
|
39
|
+
var tableHeadVariants = cva({
|
|
40
|
+
base: "border-b border-border-subtle bg-surface-subtle align-middle",
|
|
41
|
+
variants: {
|
|
42
|
+
align,
|
|
43
|
+
tone: {
|
|
44
|
+
default: "text-xs font-medium text-muted-foreground",
|
|
45
|
+
eyebrow: "text-[11px] font-semibold uppercase tracking-wider text-muted-foreground"
|
|
46
|
+
},
|
|
47
|
+
density: {
|
|
48
|
+
compact: "h-8 px-2",
|
|
49
|
+
default: "h-9 px-3"
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
defaultVariants: {
|
|
53
|
+
align: "start",
|
|
54
|
+
tone: "default",
|
|
55
|
+
density: "default"
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
var tableCellVariants = cva({
|
|
59
|
+
base: "align-middle",
|
|
60
|
+
variants: {
|
|
61
|
+
align,
|
|
62
|
+
density: {
|
|
63
|
+
compact: "px-2 py-1.5",
|
|
64
|
+
default: "px-3 py-2.5"
|
|
65
|
+
},
|
|
66
|
+
numeric: {
|
|
67
|
+
true: "tabular-nums whitespace-nowrap",
|
|
68
|
+
false: ""
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
defaultVariants: {
|
|
72
|
+
align: "start",
|
|
73
|
+
density: "default",
|
|
74
|
+
numeric: "false"
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
// ../react-table/dist/index.js
|
|
79
|
+
import { jsx } from "react/jsx-runtime";
|
|
80
|
+
var TableContext = React.createContext({ density: "default", headTone: "default" });
|
|
81
|
+
var Table = React.forwardRef(function Table2({ density = "default", headTone = "default", fixed = false, containerClassName, className, ...props }, ref) {
|
|
82
|
+
const ctx = React.useMemo(() => ({ density, headTone }), [density, headTone]);
|
|
83
|
+
const { dataAttributes } = createTable({ density, headTone });
|
|
84
|
+
return /* @__PURE__ */ jsx(TableContext.Provider, { value: ctx, children: /* @__PURE__ */ jsx("div", { className: cn(tableContainerClass, containerClassName), "data-slot": "table-container", children: /* @__PURE__ */ jsx(
|
|
85
|
+
"table",
|
|
86
|
+
{
|
|
87
|
+
ref,
|
|
88
|
+
className: cn(tableRootVariants({ fixed: fixed ? "true" : "false" }), className),
|
|
89
|
+
...dataAttributes,
|
|
90
|
+
...props
|
|
91
|
+
}
|
|
92
|
+
) }) });
|
|
93
|
+
});
|
|
94
|
+
var TableHeader = React.forwardRef(
|
|
95
|
+
function TableHeader2(props, ref) {
|
|
96
|
+
return /* @__PURE__ */ jsx("thead", { ref, "data-slot": "table-header", ...props });
|
|
97
|
+
}
|
|
98
|
+
);
|
|
99
|
+
var TableBody = React.forwardRef(
|
|
100
|
+
function TableBody2(props, ref) {
|
|
101
|
+
return /* @__PURE__ */ jsx("tbody", { ref, "data-slot": "table-body", ...props });
|
|
102
|
+
}
|
|
103
|
+
);
|
|
104
|
+
var TableRow = React.forwardRef(
|
|
105
|
+
function TableRow2({ className, ...props }, ref) {
|
|
106
|
+
return /* @__PURE__ */ jsx("tr", { ref, className: cn(tableRowClass, className), "data-slot": "table-row", ...props });
|
|
107
|
+
}
|
|
108
|
+
);
|
|
109
|
+
var TableHead = React.forwardRef(function TableHead2({ align: align2, scope = "col", className, ...props }, ref) {
|
|
110
|
+
const { density, headTone } = React.useContext(TableContext);
|
|
111
|
+
return /* @__PURE__ */ jsx(
|
|
112
|
+
"th",
|
|
113
|
+
{
|
|
114
|
+
ref,
|
|
115
|
+
scope,
|
|
116
|
+
className: cn(tableHeadVariants({ align: align2, density, tone: headTone }), className),
|
|
117
|
+
"data-slot": "table-head",
|
|
118
|
+
...props
|
|
119
|
+
}
|
|
120
|
+
);
|
|
121
|
+
});
|
|
122
|
+
var TableCell = React.forwardRef(function TableCell2({ align: align2, numeric = false, className, ...props }, ref) {
|
|
123
|
+
const { density } = React.useContext(TableContext);
|
|
124
|
+
return /* @__PURE__ */ jsx(
|
|
125
|
+
"td",
|
|
126
|
+
{
|
|
127
|
+
ref,
|
|
128
|
+
className: cn(tableCellVariants({ align: align2, density, numeric: numeric ? "true" : "false" }), className),
|
|
129
|
+
"data-slot": "table-cell",
|
|
130
|
+
...props
|
|
131
|
+
}
|
|
132
|
+
);
|
|
133
|
+
});
|
|
134
|
+
var TableCaption = React.forwardRef(
|
|
135
|
+
function TableCaption2({ className, ...props }, ref) {
|
|
136
|
+
return /* @__PURE__ */ jsx("caption", { ref, className: cn(tableCaptionClass, className), "data-slot": "table-caption", ...props });
|
|
137
|
+
}
|
|
138
|
+
);
|
|
139
|
+
export {
|
|
140
|
+
Table,
|
|
141
|
+
TableBody,
|
|
142
|
+
TableCaption,
|
|
143
|
+
TableCell,
|
|
144
|
+
TableHead,
|
|
145
|
+
TableHeader,
|
|
146
|
+
TableRow
|
|
147
|
+
};
|
|
148
|
+
//# sourceMappingURL=react-table.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../table/src/table.ts", "../../table/src/table.styles.ts", "../../react-table/src/table.tsx"],
|
|
4
|
+
"sourcesContent": ["/** Cell padding for every cell of a table. */\nexport type TableDensity = 'compact' | 'default'\n/** Horizontal alignment of a header or data cell (logical, RTL-safe). */\nexport type TableAlign = 'start' | 'center' | 'end'\n/** Look of header cells: `eyebrow` is small uppercase tracked text. */\nexport type TableHeadTone = 'default' | 'eyebrow'\n\nexport interface TableAPI {\n /** Data attributes for styling hooks. */\n dataAttributes: Record<string, string>\n}\n\n/** Framework-agnostic data attributes for the table root. */\nexport function createTable(\n props: { density?: TableDensity; headTone?: TableHeadTone } = {},\n): TableAPI {\n return {\n dataAttributes: {\n 'data-slot': 'table',\n 'data-density': props.density ?? 'default',\n 'data-head-tone': props.headTone ?? 'default',\n },\n }\n}\n", "import { cva } from '@refraction-ui/shared'\n\n/** Scroll container: a wide table scrolls inside it instead of the page. */\nexport const tableContainerClass = 'relative w-full overflow-x-auto'\n\n/** The `<table>`. `fixed` pins column widths to the header row. */\nexport const tableRootVariants = cva({\n base: 'w-full caption-bottom border-collapse text-sm',\n variants: {\n fixed: {\n true: 'table-fixed',\n false: '',\n },\n },\n defaultVariants: {\n fixed: 'false',\n },\n})\n\n/** Caption under the table. */\nexport const tableCaptionClass = 'mt-2 text-xs text-muted-foreground'\n\n/** Body rows: a hairline between rows, none after the last. */\nexport const tableRowClass = 'border-b border-border-subtle last:border-b-0'\n\nconst align = {\n start: 'text-start',\n center: 'text-center',\n end: 'text-end',\n}\n\n/** Header cell: subtle surface, rule under it. */\nexport const tableHeadVariants = cva({\n base: 'border-b border-border-subtle bg-surface-subtle align-middle',\n variants: {\n align,\n tone: {\n default: 'text-xs font-medium text-muted-foreground',\n eyebrow: 'text-[11px] font-semibold uppercase tracking-wider text-muted-foreground',\n },\n density: {\n compact: 'h-8 px-2',\n default: 'h-9 px-3',\n },\n },\n defaultVariants: {\n align: 'start',\n tone: 'default',\n density: 'default',\n },\n})\n\n/** Data cell. */\nexport const tableCellVariants = cva({\n base: 'align-middle',\n variants: {\n align,\n density: {\n compact: 'px-2 py-1.5',\n default: 'px-3 py-2.5',\n },\n numeric: {\n true: 'tabular-nums whitespace-nowrap',\n false: '',\n },\n },\n defaultVariants: {\n align: 'start',\n density: 'default',\n numeric: 'false',\n },\n})\n", "import * as React from 'react'\nimport {\n createTable,\n tableContainerClass,\n tableRootVariants,\n tableCaptionClass,\n tableRowClass,\n tableHeadVariants,\n tableCellVariants,\n type TableAlign,\n type TableDensity,\n type TableHeadTone,\n} from '@refraction-ui/table'\nimport { cn } from '@refraction-ui/shared'\n\nexport type { TableAlign, TableDensity, TableHeadTone }\n\ninterface TableContextValue {\n density: TableDensity\n headTone: TableHeadTone\n}\n\nconst TableContext = React.createContext<TableContextValue>({ density: 'default', headTone: 'default' })\n\nexport interface TableProps extends React.TableHTMLAttributes<HTMLTableElement> {\n /** Cell padding for every cell. Defaults to `default`. */\n density?: TableDensity\n /** Look of every header cell. Defaults to `default`. */\n headTone?: TableHeadTone\n /** Fixed layout: column widths come from the header row. */\n fixed?: boolean\n /** Class for the horizontal scroll container around the table. */\n containerClassName?: string\n}\n\n/**\n * Table — composable, semantic table primitives for cells that hold\n * components (badges, buttons, links). The parts map one-to-one to the HTML\n * table elements. For a data-driven table with sorting/filtering use DataTable.\n */\nexport const Table = React.forwardRef<HTMLTableElement, TableProps>(function Table(\n { density = 'default', headTone = 'default', fixed = false, containerClassName, className, ...props },\n ref,\n) {\n const ctx = React.useMemo(() => ({ density, headTone }), [density, headTone])\n const { dataAttributes } = createTable({ density, headTone })\n return (\n <TableContext.Provider value={ctx}>\n <div className={cn(tableContainerClass, containerClassName)} data-slot=\"table-container\">\n <table\n ref={ref}\n className={cn(tableRootVariants({ fixed: fixed ? 'true' : 'false' }), className)}\n {...dataAttributes}\n {...props}\n />\n </div>\n </TableContext.Provider>\n )\n})\n\nexport const TableHeader = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n function TableHeader(props, ref) {\n return <thead ref={ref} data-slot=\"table-header\" {...props} />\n },\n)\n\nexport const TableBody = React.forwardRef<HTMLTableSectionElement, React.HTMLAttributes<HTMLTableSectionElement>>(\n function TableBody(props, ref) {\n return <tbody ref={ref} data-slot=\"table-body\" {...props} />\n },\n)\n\nexport const TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(\n function TableRow({ className, ...props }, ref) {\n return <tr ref={ref} className={cn(tableRowClass, className)} data-slot=\"table-row\" {...props} />\n },\n)\n\nexport interface TableHeadProps extends Omit<React.ThHTMLAttributes<HTMLTableCellElement>, 'align'> {\n /** Horizontal alignment. Defaults to `start`. */\n align?: TableAlign\n}\n\n/** Header cell. `scope` defaults to `col`. */\nexport const TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(function TableHead(\n { align, scope = 'col', className, ...props },\n ref,\n) {\n const { density, headTone } = React.useContext(TableContext)\n return (\n <th\n ref={ref}\n scope={scope}\n className={cn(tableHeadVariants({ align, density, tone: headTone }), className)}\n data-slot=\"table-head\"\n {...props}\n />\n )\n})\n\nexport interface TableCellProps extends Omit<React.TdHTMLAttributes<HTMLTableCellElement>, 'align'> {\n /** Horizontal alignment. Defaults to `start`. */\n align?: TableAlign\n /** Tabular figures, no wrapping — for numbers. */\n numeric?: boolean\n}\n\nexport const TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(function TableCell(\n { align, numeric = false, className, ...props },\n ref,\n) {\n const { density } = React.useContext(TableContext)\n return (\n <td\n ref={ref}\n className={cn(tableCellVariants({ align, density, numeric: numeric ? 'true' : 'false' }), className)}\n data-slot=\"table-cell\"\n {...props}\n />\n )\n})\n\nexport const TableCaption = React.forwardRef<HTMLTableCaptionElement, React.HTMLAttributes<HTMLTableCaptionElement>>(\n function TableCaption({ className, ...props }, ref) {\n return <caption ref={ref} className={cn(tableCaptionClass, className)} data-slot=\"table-caption\" {...props} />\n },\n)\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Table", "TableHeader", "TableBody", "TableRow", "TableHead", "align", "TableCell", "TableCaption"]
|
|
7
|
+
}
|
package/dist/react-tabs.js
CHANGED
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
cva,
|
|
5
5
|
devWarn,
|
|
6
6
|
generateId
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-75BKRTPO.js";
|
|
8
8
|
|
|
9
9
|
// ../react-tabs/dist/index.js
|
|
10
10
|
import * as React from "react";
|
|
@@ -152,14 +152,31 @@ var Tabs = React.forwardRef(
|
|
|
152
152
|
apiRef.current = createTabs({ value, orientation });
|
|
153
153
|
}
|
|
154
154
|
const api = apiRef.current;
|
|
155
|
+
const [panels, setPanels] = React.useState(() => /* @__PURE__ */ new Set());
|
|
156
|
+
const registerPanel = React.useCallback((panelValue) => {
|
|
157
|
+
setPanels((prev) => prev.has(panelValue) ? prev : new Set(prev).add(panelValue));
|
|
158
|
+
return () => setPanels((prev) => {
|
|
159
|
+
if (!prev.has(panelValue)) return prev;
|
|
160
|
+
const next = new Set(prev);
|
|
161
|
+
next.delete(panelValue);
|
|
162
|
+
return next;
|
|
163
|
+
});
|
|
164
|
+
}, []);
|
|
165
|
+
const allPanels = React.useMemo(() => {
|
|
166
|
+
const found = new Set(panels);
|
|
167
|
+
collectPanelValues(children, found);
|
|
168
|
+
return found;
|
|
169
|
+
}, [children, panels]);
|
|
155
170
|
const ctx = React.useMemo(
|
|
156
171
|
() => ({
|
|
157
172
|
value,
|
|
158
173
|
onValueChange: handleValueChange,
|
|
159
174
|
orientation,
|
|
160
|
-
idPrefix: api.idPrefix
|
|
175
|
+
idPrefix: api.idPrefix,
|
|
176
|
+
panels: allPanels,
|
|
177
|
+
registerPanel
|
|
161
178
|
}),
|
|
162
|
-
[value, handleValueChange, orientation, api.idPrefix]
|
|
179
|
+
[value, handleValueChange, orientation, api.idPrefix, allPanels, registerPanel]
|
|
163
180
|
);
|
|
164
181
|
return React.createElement(
|
|
165
182
|
"div",
|
|
@@ -168,6 +185,16 @@ var Tabs = React.forwardRef(
|
|
|
168
185
|
);
|
|
169
186
|
}
|
|
170
187
|
);
|
|
188
|
+
function collectPanelValues(node, into) {
|
|
189
|
+
React.Children.forEach(node, (child) => {
|
|
190
|
+
if (!React.isValidElement(child)) return;
|
|
191
|
+
if (child.type === TabsContent && typeof child.props.value === "string") {
|
|
192
|
+
into.add(child.props.value);
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
collectPanelValues(child.props.children, into);
|
|
196
|
+
});
|
|
197
|
+
}
|
|
171
198
|
var TabsList = React.forwardRef(
|
|
172
199
|
function TabsList2({ className, onKeyDown, ...props }, forwardedRef) {
|
|
173
200
|
const { orientation } = useTabsContext();
|
|
@@ -213,7 +240,7 @@ function enabledTabs(list) {
|
|
|
213
240
|
}
|
|
214
241
|
var TabsTrigger = React.forwardRef(
|
|
215
242
|
function TabsTrigger2({ value, className, onClick, onKeyDown, children, ...props }, ref) {
|
|
216
|
-
const { value: activeValue, onValueChange,
|
|
243
|
+
const { value: activeValue, onValueChange, idPrefix, panels } = useTabsContext();
|
|
217
244
|
const isSelected = activeValue === value;
|
|
218
245
|
const tabId = `${idPrefix}-tab-${value}`;
|
|
219
246
|
const panelId = `${idPrefix}-panel-${value}`;
|
|
@@ -231,7 +258,8 @@ var TabsTrigger = React.forwardRef(
|
|
|
231
258
|
type: "button",
|
|
232
259
|
role: "tab",
|
|
233
260
|
"aria-selected": isSelected,
|
|
234
|
-
|
|
261
|
+
// Only the selected panel is rendered; never reference a missing element.
|
|
262
|
+
"aria-controls": isSelected && panels.has(value) ? panelId : void 0,
|
|
235
263
|
tabIndex: isSelected ? 0 : -1,
|
|
236
264
|
id: tabId,
|
|
237
265
|
"data-state": isSelected ? "active" : "inactive",
|
|
@@ -246,7 +274,8 @@ var TabsTrigger = React.forwardRef(
|
|
|
246
274
|
);
|
|
247
275
|
var TabsContent = React.forwardRef(
|
|
248
276
|
function TabsContent2({ value, className, children, ...props }, ref) {
|
|
249
|
-
const { value: activeValue, idPrefix } = useTabsContext();
|
|
277
|
+
const { value: activeValue, idPrefix, registerPanel } = useTabsContext();
|
|
278
|
+
React.useEffect(() => registerPanel(value), [registerPanel, value]);
|
|
250
279
|
const isSelected = activeValue === value;
|
|
251
280
|
const tabId = `${idPrefix}-tab-${value}`;
|
|
252
281
|
const panelId = `${idPrefix}-panel-${value}`;
|