@ctrl-ui/react 0.8.7 → 0.8.8
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/action-bar.d.ts +15 -7
- package/dist/action-bar.js +40 -20
- package/dist/activity.js +8 -16
- package/dist/audio-recorder.d.ts +14 -4
- package/dist/audio-recorder.js +82 -29
- package/dist/audio-visualizer.js +1 -1
- package/dist/blocks/coding-agent.js +39 -39
- package/dist/blocks/design-canvas-inspector.js +2 -2
- package/dist/blocks/design-canvas.d.ts +5 -1
- package/dist/blocks/design-canvas.js +200 -94
- package/dist/blocks/discussion.d.ts +28 -0
- package/dist/blocks/discussion.js +67 -0
- package/dist/blocks/file-explorer-data.d.ts +1 -0
- package/dist/blocks/file-explorer-data.js +4 -1
- package/dist/blocks/file-explorer.d.ts +9 -1
- package/dist/blocks/file-explorer.js +461 -192
- package/dist/blocks/settings.d.ts +2 -1
- package/dist/blocks/settings.js +102 -80
- package/dist/blocks/team-chat.d.ts +12 -0
- package/dist/blocks/team-chat.js +26 -0
- package/dist/blocks/theme-toggle.js +23 -31
- package/dist/chat-composer-attachment.d.ts +4 -1
- package/dist/chat-composer-attachment.js +35 -10
- package/dist/chat-composer-editor/extensions/mention.d.ts +5 -1
- package/dist/chat-composer-editor/extensions/mention.js +58 -27
- package/dist/chat-composer-editor/ghost.js +2 -4
- package/dist/chat-composer-editor/types.d.ts +5 -0
- package/dist/chat-composer-editor.d.ts +1 -1
- package/dist/chat-composer-editor.js +57 -30
- package/dist/chat-composer.d.ts +13 -32
- package/dist/chat-composer.js +53 -13
- package/dist/chat-layout.d.ts +19 -0
- package/dist/chat-layout.js +91 -40
- package/dist/chat-message/social.d.ts +26 -0
- package/dist/chat-message/social.js +122 -0
- package/dist/chat-message.d.ts +28 -29
- package/dist/chat-message.js +106 -25
- package/dist/context.d.ts +2 -2
- package/dist/context.js +39 -24
- package/dist/dynamic-notification-canvas-loop.d.ts +24 -0
- package/dist/dynamic-notification-canvas-loop.js +113 -0
- package/dist/dynamic-notification-glass.js +23 -114
- package/dist/dynamic-notification-liquid.js +14 -118
- package/dist/dynamic-notification.d.ts +16 -8
- package/dist/dynamic-notification.js +86 -23
- package/dist/email/email-brand.d.ts +7 -4
- package/dist/email/email-brand.js +9 -6
- package/dist/email/email-code.d.ts +3 -2
- package/dist/email/email-code.js +11 -9
- package/dist/email/email-footer.d.ts +5 -3
- package/dist/email/email-footer.js +11 -5
- package/dist/email/email.d.ts +31 -9
- package/dist/email/email.js +50 -26
- package/dist/email/templates.d.ts +10 -9
- package/dist/email/templates.js +102 -38
- package/dist/email/theme.js +1 -1
- package/dist/environment-variables.d.ts +4 -2
- package/dist/environment-variables.js +52 -32
- package/dist/filter-bar/editor.js +20 -8
- package/dist/filter-bar/model.d.ts +1 -0
- package/dist/filter-bar/model.js +10 -1
- package/dist/filter-bar/motion.js +4 -4
- package/dist/filter-bar/parts.js +20 -9
- package/dist/filter-bar/types.d.ts +1 -0
- package/dist/filter-bar.js +20 -14
- package/dist/hooks/use-audio-recorder.js +12 -6
- package/dist/hooks/use-chat-composer.d.ts +19 -7
- package/dist/hooks/use-chat-composer.js +32 -5
- package/dist/hooks/use-chat-message.d.ts +28 -2
- package/dist/hooks/use-chat-message.js +41 -10
- package/dist/hooks/use-chat-thread-scroll.js +43 -7
- package/dist/hooks/use-color-area.d.ts +3 -3
- package/dist/hooks/use-color-area.js +13 -12
- package/dist/hooks/use-copy-to-clipboard.d.ts +2 -1
- package/dist/hooks/use-copy-to-clipboard.js +20 -20
- package/dist/hooks/use-dynamic-notification.d.ts +6 -2
- package/dist/hooks/use-dynamic-notification.js +26 -10
- package/dist/hooks/use-mobile.d.ts +3 -2
- package/dist/hooks/use-mobile.js +8 -4
- package/dist/hooks/use-textarea-trigger-menu.js +2 -1
- package/dist/hooks/use-trigger-menu.d.ts +54 -0
- package/dist/hooks/use-trigger-menu.js +102 -47
- package/dist/hooks/use-user-ask.d.ts +2 -0
- package/dist/hooks/use-user-ask.js +35 -41
- package/dist/inline-attachment.d.ts +6 -2
- package/dist/inline-attachment.js +36 -15
- package/dist/inline-citation.d.ts +12 -5
- package/dist/inline-citation.js +26 -17
- package/dist/knob-contracts/audio-recorder-knobs.d.ts +1 -1
- package/dist/knob-contracts/audio-recorder-knobs.js +2 -1
- package/dist/knob-contracts/audio-visualizer-knobs.d.ts +1 -1
- package/dist/knob-contracts/audio-visualizer-knobs.js +2 -1
- package/dist/knob-contracts/avatar-knobs.d.ts +1 -1
- package/dist/knob-contracts/avatar-knobs.js +6 -1
- package/dist/knob-contracts/badge-knobs.d.ts +1 -1
- package/dist/knob-contracts/badge-knobs.js +2 -1
- package/dist/knob-contracts/breadcrumb-knobs.d.ts +4 -0
- package/dist/knob-contracts/breadcrumb-knobs.js +8 -0
- package/dist/knob-contracts/button-knobs.d.ts +1 -1
- package/dist/knob-contracts/button-knobs.js +1 -0
- package/dist/knob-contracts/chat-message-knobs.d.ts +1 -1
- package/dist/knob-contracts/chat-message-knobs.js +8 -1
- package/dist/knob-contracts/code-diff-knobs.d.ts +1 -1
- package/dist/knob-contracts/code-diff-knobs.js +2 -0
- package/dist/knob-contracts/code-knobs.d.ts +1 -1
- package/dist/knob-contracts/code-knobs.js +2 -1
- package/dist/knob-contracts/dynamic-notification-knobs.d.ts +1 -1
- package/dist/knob-contracts/dynamic-notification-knobs.js +2 -0
- package/dist/knob-contracts/emoji-picker-knobs.d.ts +4 -0
- package/dist/knob-contracts/emoji-picker-knobs.js +10 -0
- package/dist/knob-contracts/field-knobs.d.ts +1 -1
- package/dist/knob-contracts/field-knobs.js +5 -1
- package/dist/knob-contracts/filter-bar-knobs.d.ts +1 -1
- package/dist/knob-contracts/filter-bar-knobs.js +1 -2
- package/dist/knob-contracts/markdown-knobs.d.ts +1 -1
- package/dist/knob-contracts/markdown-knobs.js +3 -1
- package/dist/knob-contracts/page-layout-knobs.d.ts +1 -1
- package/dist/knob-contracts/page-layout-knobs.js +2 -1
- package/dist/knob-contracts/popup-knobs.d.ts +1 -1
- package/dist/knob-contracts/popup-knobs.js +27 -0
- package/dist/knob-contracts/range-knobs.d.ts +1 -1
- package/dist/knob-contracts/range-knobs.js +1 -0
- package/dist/knob-contracts/rich-tooltip-knobs.d.ts +1 -1
- package/dist/knob-contracts/rich-tooltip-knobs.js +2 -1
- package/dist/knob-contracts/sidebar-knobs.d.ts +1 -1
- package/dist/knob-contracts/sidebar-knobs.js +27 -2
- package/dist/knob-contracts/spinner-knobs.d.ts +1 -1
- package/dist/knob-contracts/spinner-knobs.js +1 -1
- package/dist/knob-contracts/stepper-knobs.d.ts +1 -1
- package/dist/knob-contracts/stepper-knobs.js +4 -1
- package/dist/knob-contracts/switch-knobs.d.ts +1 -1
- package/dist/knob-contracts/switch-knobs.js +5 -0
- package/dist/knob-contracts/table-of-contents-knobs.d.ts +1 -1
- package/dist/knob-contracts/table-of-contents-knobs.js +2 -1
- package/dist/knob-contracts/tabs-knobs.d.ts +1 -1
- package/dist/knob-contracts/tabs-knobs.js +1 -0
- package/dist/knob-contracts/tree-knobs.d.ts +1 -1
- package/dist/knob-contracts/tree-knobs.js +2 -1
- package/dist/lib/cn.js +0 -4
- package/dist/lib/contrast.d.ts +1 -0
- package/dist/lib/contrast.js +17 -5
- package/dist/lib/dropzone-validation.js +41 -28
- package/dist/lib/env-file.d.ts +1 -1
- package/dist/lib/env-file.js +5 -5
- package/dist/lib/motion.d.ts +4 -0
- package/dist/lib/motion.js +15 -0
- package/dist/lib/phone-input-format.js +1 -1
- package/dist/lib/trigger-detect.js +6 -8
- package/dist/markdown-block.js +2 -1
- package/dist/popup-parts.d.ts +8 -0
- package/dist/popup-parts.js +43 -0
- package/dist/source-badge.js +3 -1
- package/dist/styles/code.css +0 -2
- package/dist/styles/effects.css +6 -32
- package/dist/styles/index.css +10 -5
- package/dist/styles/recipes/accordion.css +9 -6
- package/dist/styles/recipes/action-bar.css +0 -15
- package/dist/styles/recipes/activity.css +5 -11
- package/dist/styles/recipes/alert.css +4 -4
- package/dist/styles/recipes/audio-recorder.css +15 -3
- package/dist/styles/recipes/audio-visualizer.css +13 -2
- package/dist/styles/recipes/avatar.css +78 -1
- package/dist/styles/recipes/badge.css +14 -4
- package/dist/styles/recipes/breadcrumb.css +77 -0
- package/dist/styles/recipes/button-group.css +5 -7
- package/dist/styles/recipes/button-states.css +66 -0
- package/dist/styles/recipes/button.css +24 -83
- package/dist/styles/recipes/calendar.css +17 -23
- package/dist/styles/recipes/card.css +2 -2
- package/dist/styles/recipes/chat-composer-attachment.css +9 -3
- package/dist/styles/recipes/chat-composer.css +7 -10
- package/dist/styles/recipes/chat-layout.css +35 -0
- package/dist/styles/recipes/chat-message-social.css +123 -0
- package/dist/styles/recipes/chat-message.css +157 -37
- package/dist/styles/recipes/choice.css +18 -21
- package/dist/styles/recipes/code-diff.css +46 -33
- package/dist/styles/recipes/code.css +36 -16
- package/dist/styles/recipes/collapsible.css +7 -2
- package/dist/styles/recipes/color-picker-details.css +3 -4
- package/dist/styles/recipes/color-picker-values.css +9 -8
- package/dist/styles/recipes/color-picker.css +11 -2
- package/dist/styles/recipes/context.css +3 -3
- package/dist/styles/recipes/dockable-panel.css +7 -4
- package/dist/styles/recipes/dropzone.css +7 -8
- package/dist/styles/recipes/dynamic-notification-input.css +8 -5
- package/dist/styles/recipes/dynamic-notification-motion.css +12 -21
- package/dist/styles/recipes/dynamic-notification.css +40 -26
- package/dist/styles/recipes/emoji-picker.css +132 -0
- package/dist/styles/recipes/empty.css +5 -4
- package/dist/styles/recipes/environment-variables.css +4 -15
- package/dist/styles/recipes/field-parts.css +30 -24
- package/dist/styles/recipes/field.css +61 -26
- package/dist/styles/recipes/filter-bar.css +18 -31
- package/dist/styles/recipes/gradient-editor.css +18 -7
- package/dist/styles/recipes/infinite-canvas.css +0 -1
- package/dist/styles/recipes/inline-attachment.css +3 -3
- package/dist/styles/recipes/inline-citation.css +10 -4
- package/dist/styles/recipes/item.css +23 -9
- package/dist/styles/recipes/markdown-block.css +5 -4
- package/dist/styles/recipes/markdown.css +68 -26
- package/dist/styles/recipes/morphing-panel.css +8 -8
- package/dist/styles/recipes/page-layout.css +20 -12
- package/dist/styles/recipes/pagination.css +4 -5
- package/dist/styles/recipes/phone-input.css +12 -8
- package/dist/styles/recipes/popup-controls.css +166 -33
- package/dist/styles/recipes/popup-drawer.css +3 -14
- package/dist/styles/recipes/popup-lists.css +128 -27
- package/dist/styles/recipes/popup-motion.css +4 -45
- package/dist/styles/recipes/popup-toast.css +55 -26
- package/dist/styles/recipes/popup.css +139 -141
- package/dist/styles/recipes/range.css +54 -18
- package/dist/styles/recipes/resizable.css +2 -7
- package/dist/styles/recipes/rich-tooltip.css +24 -34
- package/dist/styles/recipes/scroll-area.css +8 -1
- package/dist/styles/recipes/sidebar-menu.css +149 -34
- package/dist/styles/recipes/sidebar-parts.css +154 -0
- package/dist/styles/recipes/sidebar.css +187 -128
- package/dist/styles/recipes/source-badge.css +1 -1
- package/dist/styles/recipes/spinner.css +8 -1
- package/dist/styles/recipes/stepper.css +31 -13
- package/dist/styles/recipes/switch.css +68 -23
- package/dist/styles/recipes/table-of-contents.css +9 -1
- package/dist/styles/recipes/table.css +14 -10
- package/dist/styles/recipes/tabs.css +17 -12
- package/dist/styles/recipes/task-list.css +7 -14
- package/dist/styles/recipes/thread-rail.css +42 -19
- package/dist/styles/recipes/timeline.css +2 -0
- package/dist/styles/recipes/toolbar.css +27 -25
- package/dist/styles/recipes/track-highlight.css +10 -7
- package/dist/styles/recipes/tree.css +31 -4
- package/dist/styles/recipes/user-ask-details.css +0 -1
- package/dist/styles/recipes/user-ask.css +4 -4
- package/dist/styles/theme.css +37 -16
- package/dist/task-list.d.ts +4 -1
- package/dist/task-list.js +24 -8
- package/dist/thread-rail.d.ts +1 -1
- package/dist/thread-rail.js +61 -19
- package/dist/transcript-divider.js +2 -1
- package/dist/ui/alert-dialog.js +1 -1
- package/dist/ui/alert.d.ts +3 -1
- package/dist/ui/alert.js +14 -8
- package/dist/ui/autocomplete.js +4 -2
- package/dist/ui/avatar.d.ts +8 -0
- package/dist/ui/avatar.js +23 -3
- package/dist/ui/badge.js +1 -1
- package/dist/ui/breadcrumb.d.ts +27 -0
- package/dist/ui/breadcrumb.js +88 -0
- package/dist/ui/button.d.ts +2 -1
- package/dist/ui/button.js +3 -3
- package/dist/ui/calendar.js +2 -2
- package/dist/ui/card.d.ts +3 -1
- package/dist/ui/card.js +12 -7
- package/dist/ui/checkbox.d.ts +2 -0
- package/dist/ui/code-diff.d.ts +1 -1
- package/dist/ui/code-diff.js +72 -28
- package/dist/ui/code.d.ts +5 -3
- package/dist/ui/code.js +28 -29
- package/dist/ui/collapsible.js +1 -1
- package/dist/ui/color-picker.d.ts +5 -2
- package/dist/ui/color-picker.js +85 -37
- package/dist/ui/combobox-disabled-selection.d.ts +1 -2
- package/dist/ui/combobox-disabled-selection.js +7 -9
- package/dist/ui/combobox.js +14 -6
- package/dist/ui/command.d.ts +8 -2
- package/dist/ui/command.js +30 -14
- package/dist/ui/context-menu.js +4 -1
- package/dist/ui/dialog.d.ts +2 -1
- package/dist/ui/dialog.js +4 -23
- package/dist/ui/dockable-panel-geometry.d.ts +1 -0
- package/dist/ui/dockable-panel-geometry.js +7 -1
- package/dist/ui/dockable-panel.d.ts +9 -6
- package/dist/ui/dockable-panel.js +63 -23
- package/dist/ui/drawer.js +1 -1
- package/dist/ui/dropdown-menu.js +5 -4
- package/dist/ui/dropzone.d.ts +2 -2
- package/dist/ui/dropzone.js +75 -16
- package/dist/ui/emoji-picker.d.ts +18 -0
- package/dist/ui/emoji-picker.js +136 -0
- package/dist/ui/empty.d.ts +3 -1
- package/dist/ui/empty.js +12 -7
- package/dist/ui/gradient-editor.d.ts +1 -1
- package/dist/ui/gradient-editor.js +37 -21
- package/dist/ui/hover-card.js +1 -1
- package/dist/ui/infinite-canvas.d.ts +3 -2
- package/dist/ui/infinite-canvas.js +63 -19
- package/dist/ui/input-group.d.ts +0 -3
- package/dist/ui/input-group.js +4 -14
- package/dist/ui/input-otp.d.ts +1 -1
- package/dist/ui/input-otp.js +32 -15
- package/dist/ui/input.js +4 -4
- package/dist/ui/item.d.ts +2 -1
- package/dist/ui/item.js +12 -8
- package/dist/ui/live-status.d.ts +7 -0
- package/dist/ui/live-status.js +17 -0
- package/dist/ui/markdown-elements.d.ts +6 -0
- package/dist/ui/markdown-elements.js +31 -1
- package/dist/ui/menubar.js +3 -3
- package/dist/ui/morphing-panel.js +3 -2
- package/dist/ui/native-select.d.ts +1 -1
- package/dist/ui/native-select.js +24 -11
- package/dist/ui/navigation-menu.js +1 -1
- package/dist/ui/page-layout.d.ts +2 -2
- package/dist/ui/page-layout.js +2 -4
- package/dist/ui/pagination.d.ts +7 -5
- package/dist/ui/pagination.js +19 -13
- package/dist/ui/phone-input.d.ts +1 -0
- package/dist/ui/phone-input.js +58 -60
- package/dist/ui/popover.js +1 -1
- package/dist/ui/radio-group.d.ts +2 -0
- package/dist/ui/resizable.d.ts +3 -2
- package/dist/ui/resizable.js +5 -3
- package/dist/ui/responsive-dialog.d.ts +1 -1
- package/dist/ui/responsive-dialog.js +4 -21
- package/dist/ui/rich-tooltip.d.ts +10 -4
- package/dist/ui/rich-tooltip.js +82 -34
- package/dist/ui/scroll-area.d.ts +1 -1
- package/dist/ui/scroll-area.js +43 -28
- package/dist/ui/select.js +1 -1
- package/dist/ui/sheet.js +1 -1
- package/dist/ui/sidebar-menu.d.ts +5 -1
- package/dist/ui/sidebar-menu.js +32 -34
- package/dist/ui/sidebar-provider.d.ts +10 -1
- package/dist/ui/sidebar-provider.js +39 -14
- package/dist/ui/sidebar-resize-rail.js +8 -4
- package/dist/ui/sidebar.d.ts +11 -6
- package/dist/ui/sidebar.js +47 -24
- package/dist/ui/slider.js +31 -22
- package/dist/ui/spinner.d.ts +3 -2
- package/dist/ui/spinner.js +3 -2
- package/dist/ui/stepper.d.ts +8 -1
- package/dist/ui/stepper.js +74 -25
- package/dist/ui/switch.d.ts +1 -0
- package/dist/ui/table-of-contents.d.ts +2 -2
- package/dist/ui/table-of-contents.js +20 -8
- package/dist/ui/table.js +4 -2
- package/dist/ui/textarea.d.ts +1 -1
- package/dist/ui/textarea.js +20 -9
- package/dist/ui/timeline.d.ts +3 -1
- package/dist/ui/timeline.js +17 -9
- package/dist/ui/toast.d.ts +11 -5
- package/dist/ui/toast.js +101 -55
- package/dist/ui/toolbar.d.ts +3 -2
- package/dist/ui/toolbar.js +4 -2
- package/dist/ui/tooltip.js +4 -21
- package/dist/ui/tree.js +121 -81
- package/dist/ui/trigger-menu.js +2 -1
- package/dist/user-ask.d.ts +10 -5
- package/dist/user-ask.js +32 -12
- package/package.json +5 -1
- package/dist/hooks/use-keyboard-navigation.d.ts +0 -3
- package/dist/hooks/use-keyboard-navigation.js +0 -22
package/dist/ui/stepper.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
-
import { createContext, useContext, useId, useState } from "react";
|
|
3
|
+
import { createContext, useContext, useEffect, useId, useState } from "react";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
import { CheckIcon, CircleAlertIcon } from "lucide-react";
|
|
6
6
|
//#region src/ui/stepper.tsx
|
|
@@ -16,25 +16,48 @@ function useStepperItem() {
|
|
|
16
16
|
if (!context) throw new Error("Stepper item parts must be used within <StepperItem>.");
|
|
17
17
|
return context;
|
|
18
18
|
}
|
|
19
|
+
function stepPartId(baseId, step, part) {
|
|
20
|
+
return `${baseId}-step-${step}-${part}`;
|
|
21
|
+
}
|
|
22
|
+
function useRegisteredId(id, rendered = true) {
|
|
23
|
+
const { registerId } = useStepper();
|
|
24
|
+
useEffect(() => rendered ? registerId(id) : void 0, [
|
|
25
|
+
id,
|
|
26
|
+
rendered,
|
|
27
|
+
registerId
|
|
28
|
+
]);
|
|
29
|
+
}
|
|
30
|
+
function renderedIdRefs(renderedIds, ids) {
|
|
31
|
+
const refs = ids.filter((id) => renderedIds.has(id));
|
|
32
|
+
return refs.length > 0 ? refs.join(" ") : void 0;
|
|
33
|
+
}
|
|
19
34
|
function stateForStep(value, step) {
|
|
20
35
|
if (value === null) return "neutral";
|
|
21
36
|
if (step < value) return "complete";
|
|
22
37
|
if (step === value) return "current";
|
|
23
38
|
return "upcoming";
|
|
24
39
|
}
|
|
25
|
-
function
|
|
40
|
+
function statusStateLabel(state, invalid) {
|
|
26
41
|
if (invalid) return "invalid";
|
|
27
42
|
if (state === "neutral") return null;
|
|
28
43
|
return state;
|
|
29
44
|
}
|
|
45
|
+
function defaultStatusLabel({ step, state, invalid, disabled }) {
|
|
46
|
+
const stateLabel = statusStateLabel(state, invalid);
|
|
47
|
+
return [
|
|
48
|
+
`Step ${step + 1}`,
|
|
49
|
+
stateLabel,
|
|
50
|
+
disabled ? "disabled" : null
|
|
51
|
+
].filter(Boolean).join(", ");
|
|
52
|
+
}
|
|
30
53
|
function defaultIndicatorContent(step, state, invalid) {
|
|
31
54
|
if (invalid) return /* @__PURE__ */ jsx(CircleAlertIcon, { className: "size-4" });
|
|
32
55
|
if (state === "complete") return /* @__PURE__ */ jsx(CheckIcon, { className: "size-4" });
|
|
33
56
|
return step + 1;
|
|
34
57
|
}
|
|
35
58
|
function itemLayout(orientation, responsive) {
|
|
36
|
-
if (orientation === "vertical") return "grid min-w-0 grid-cols-[
|
|
37
|
-
return cn("relative grid min-w-0 flex-1 grid-cols-1 justify-items-center", responsive && "@max-md/stepper:w-full @max-md/stepper:flex-none @max-md/stepper:grid-cols-[
|
|
59
|
+
if (orientation === "vertical") return "grid min-w-0 grid-cols-[var(--cui-stepper-indicator-size)_minmax(0,1fr)]";
|
|
60
|
+
return cn("relative grid min-w-0 flex-1 grid-cols-1 justify-items-center", responsive && "@max-md/stepper:w-full @max-md/stepper:flex-none @max-md/stepper:grid-cols-[var(--cui-stepper-indicator-size)_minmax(0,1fr)] @max-md/stepper:justify-items-stretch");
|
|
38
61
|
}
|
|
39
62
|
function partLayout(orientation, responsive, part) {
|
|
40
63
|
const vertical = {
|
|
@@ -56,9 +79,19 @@ function partLayout(orientation, responsive, part) {
|
|
|
56
79
|
}[part];
|
|
57
80
|
return cn(horizontal, narrow);
|
|
58
81
|
}
|
|
59
|
-
function Stepper({ value, defaultValue = null, onValueChange, orientation = "horizontal", contentMode = "current", responsive = true, id, className, children, ...props }) {
|
|
82
|
+
function Stepper({ value, defaultValue = null, onValueChange, orientation = "horizontal", contentMode = "current", responsive = true, getStatusLabel = defaultStatusLabel, id, className, children, ...props }) {
|
|
60
83
|
const generatedId = useId();
|
|
61
84
|
const [internalValue, setInternalValue] = useState(defaultValue);
|
|
85
|
+
const [renderedIds, setRenderedIds] = useState(() => /* @__PURE__ */ new Set());
|
|
86
|
+
const [registerId] = useState(() => (renderedId) => {
|
|
87
|
+
setRenderedIds((current) => current.has(renderedId) ? current : new Set(current).add(renderedId));
|
|
88
|
+
return () => setRenderedIds((current) => {
|
|
89
|
+
if (!current.has(renderedId)) return current;
|
|
90
|
+
const next = new Set(current);
|
|
91
|
+
next.delete(renderedId);
|
|
92
|
+
return next;
|
|
93
|
+
});
|
|
94
|
+
});
|
|
62
95
|
const controlled = value !== void 0;
|
|
63
96
|
const currentValue = value !== void 0 ? value : internalValue;
|
|
64
97
|
const selectStep = (step) => {
|
|
@@ -72,7 +105,10 @@ function Stepper({ value, defaultValue = null, onValueChange, orientation = "hor
|
|
|
72
105
|
contentMode,
|
|
73
106
|
responsive,
|
|
74
107
|
baseId: id ?? generatedId,
|
|
75
|
-
selectStep
|
|
108
|
+
selectStep,
|
|
109
|
+
getStatusLabel,
|
|
110
|
+
renderedIds,
|
|
111
|
+
registerId
|
|
76
112
|
},
|
|
77
113
|
children: /* @__PURE__ */ jsx("div", {
|
|
78
114
|
...props,
|
|
@@ -107,8 +143,10 @@ function StepperItem({ step, disabled = false, invalid = false, className, child
|
|
|
107
143
|
state,
|
|
108
144
|
disabled,
|
|
109
145
|
invalid,
|
|
110
|
-
titleId:
|
|
111
|
-
|
|
146
|
+
titleId: stepPartId(baseId, step, "title"),
|
|
147
|
+
descriptionId: stepPartId(baseId, step, "description"),
|
|
148
|
+
statusId: stepPartId(baseId, step, "status"),
|
|
149
|
+
contentId: stepPartId(baseId, step, "content")
|
|
112
150
|
};
|
|
113
151
|
return /* @__PURE__ */ jsx(StepperItemContext.Provider, {
|
|
114
152
|
value: contextValue,
|
|
@@ -128,8 +166,8 @@ function StepperItem({ step, disabled = false, invalid = false, className, child
|
|
|
128
166
|
});
|
|
129
167
|
}
|
|
130
168
|
function StepperTrigger({ disabled: disabledProp, className, onClick, type = "button", ...props }) {
|
|
131
|
-
const { orientation, responsive, selectStep } = useStepper();
|
|
132
|
-
const { step, state, disabled, invalid, contentId } = useStepperItem();
|
|
169
|
+
const { orientation, responsive, selectStep, renderedIds } = useStepper();
|
|
170
|
+
const { step, state, disabled, invalid, titleId, descriptionId, statusId, contentId } = useStepperItem();
|
|
133
171
|
const isDisabled = disabled || Boolean(disabledProp);
|
|
134
172
|
return /* @__PURE__ */ jsx("button", {
|
|
135
173
|
...props,
|
|
@@ -140,8 +178,11 @@ function StepperTrigger({ disabled: disabledProp, className, onClick, type = "bu
|
|
|
140
178
|
"data-invalid": invalid ? "true" : void 0,
|
|
141
179
|
type,
|
|
142
180
|
disabled: isDisabled,
|
|
143
|
-
"aria-
|
|
144
|
-
|
|
181
|
+
"aria-current": state === "current" ? "step" : void 0,
|
|
182
|
+
"aria-labelledby": renderedIdRefs(renderedIds, [titleId]),
|
|
183
|
+
"aria-describedby": renderedIdRefs(renderedIds, [statusId, descriptionId]),
|
|
184
|
+
"aria-controls": renderedIdRefs(renderedIds, [contentId]),
|
|
185
|
+
className: cn("group/stepper-trigger col-span-full row-span-3 row-start-1 grid w-full min-w-0 grid-cols-1 justify-items-center disabled:pointer-events-none disabled:cursor-not-allowed", orientation === "vertical" && "row-span-2 grid-cols-[var(--cui-stepper-indicator-size)_minmax(0,1fr)] justify-items-stretch", orientation === "horizontal" && responsive && "@max-md/stepper:row-span-2 @max-md/stepper:grid-cols-[var(--cui-stepper-indicator-size)_minmax(0,1fr)] @max-md/stepper:justify-items-stretch", className),
|
|
145
186
|
onClick: (event) => {
|
|
146
187
|
onClick?.(event);
|
|
147
188
|
if (!event.defaultPrevented && !isDisabled) selectStep(step);
|
|
@@ -149,14 +190,9 @@ function StepperTrigger({ disabled: disabledProp, className, onClick, type = "bu
|
|
|
149
190
|
});
|
|
150
191
|
}
|
|
151
192
|
function StepperIndicator({ className, children, ...props }) {
|
|
152
|
-
const { orientation, responsive } = useStepper();
|
|
153
|
-
const { step, state, disabled, invalid } = useStepperItem();
|
|
154
|
-
|
|
155
|
-
const status = [
|
|
156
|
-
`Step ${step + 1}`,
|
|
157
|
-
stateLabel,
|
|
158
|
-
disabled ? "disabled" : null
|
|
159
|
-
].filter(Boolean).join(", ");
|
|
193
|
+
const { orientation, responsive, getStatusLabel } = useStepper();
|
|
194
|
+
const { step, state, disabled, invalid, statusId } = useStepperItem();
|
|
195
|
+
useRegisteredId(statusId);
|
|
160
196
|
const indicatorContent = children ?? defaultIndicatorContent(step, state, invalid);
|
|
161
197
|
return /* @__PURE__ */ jsxs("span", {
|
|
162
198
|
...props,
|
|
@@ -170,8 +206,14 @@ function StepperIndicator({ className, children, ...props }) {
|
|
|
170
206
|
"aria-hidden": "true",
|
|
171
207
|
children: indicatorContent
|
|
172
208
|
}), /* @__PURE__ */ jsx("span", {
|
|
209
|
+
id: statusId,
|
|
173
210
|
className: "sr-only",
|
|
174
|
-
children:
|
|
211
|
+
children: getStatusLabel({
|
|
212
|
+
step,
|
|
213
|
+
state,
|
|
214
|
+
invalid,
|
|
215
|
+
disabled
|
|
216
|
+
})
|
|
175
217
|
})]
|
|
176
218
|
});
|
|
177
219
|
}
|
|
@@ -186,12 +228,13 @@ function StepperSeparator({ className, ...props }) {
|
|
|
186
228
|
"data-state": state,
|
|
187
229
|
"data-invalid": invalid ? "true" : void 0,
|
|
188
230
|
"aria-hidden": "true",
|
|
189
|
-
className: cn("absolute", orientation === "horizontal" && "top-
|
|
231
|
+
className: cn("absolute", orientation === "horizontal" && "top-[calc(var(--cui-stepper-indicator-size)/2)] start-[calc(50%_+_var(--cui-stepper-indicator-size)/2)] end-[calc(var(--cui-stepper-indicator-size)/2_-_50%)]", orientation === "vertical" && "top-(--cui-stepper-indicator-size) bottom-0 start-[calc(var(--cui-stepper-indicator-size)/2)]", orientation === "horizontal" && responsive && "@max-md/stepper:top-(--cui-stepper-indicator-size) @max-md/stepper:end-auto @max-md/stepper:bottom-0 @max-md/stepper:start-[calc(var(--cui-stepper-indicator-size)/2)]", className)
|
|
190
232
|
});
|
|
191
233
|
}
|
|
192
234
|
function StepperTitle({ className, ...props }) {
|
|
193
235
|
const { orientation, responsive } = useStepper();
|
|
194
236
|
const { titleId } = useStepperItem();
|
|
237
|
+
useRegisteredId(titleId);
|
|
195
238
|
return /* @__PURE__ */ jsx("span", {
|
|
196
239
|
...props,
|
|
197
240
|
id: titleId,
|
|
@@ -203,8 +246,11 @@ function StepperTitle({ className, ...props }) {
|
|
|
203
246
|
}
|
|
204
247
|
function StepperDescription({ className, ...props }) {
|
|
205
248
|
const { orientation, responsive } = useStepper();
|
|
249
|
+
const { descriptionId } = useStepperItem();
|
|
250
|
+
useRegisteredId(descriptionId);
|
|
206
251
|
return /* @__PURE__ */ jsx("span", {
|
|
207
252
|
...props,
|
|
253
|
+
id: descriptionId,
|
|
208
254
|
"data-control-ui": "stepper",
|
|
209
255
|
"data-control-family": "stepper",
|
|
210
256
|
"data-slot": "description",
|
|
@@ -215,16 +261,19 @@ function StepperContent({ step, keepMounted = true, className, ...props }) {
|
|
|
215
261
|
const { value, contentMode, baseId } = useStepper();
|
|
216
262
|
const active = value === step;
|
|
217
263
|
const hidden = contentMode === "current" && !active;
|
|
218
|
-
|
|
264
|
+
const rendered = !hidden || keepMounted;
|
|
265
|
+
const contentId = stepPartId(baseId, step, "content");
|
|
266
|
+
useRegisteredId(contentId, rendered);
|
|
267
|
+
if (!rendered) return null;
|
|
219
268
|
return /* @__PURE__ */ jsx("section", {
|
|
220
269
|
...props,
|
|
221
|
-
id:
|
|
270
|
+
id: contentId,
|
|
222
271
|
"data-control-ui": "stepper",
|
|
223
272
|
"data-control-family": "stepper",
|
|
224
273
|
"data-slot": "content",
|
|
225
274
|
"data-state": active ? "active" : "inactive",
|
|
226
275
|
hidden,
|
|
227
|
-
"aria-labelledby":
|
|
276
|
+
"aria-labelledby": stepPartId(baseId, step, "title"),
|
|
228
277
|
className
|
|
229
278
|
});
|
|
230
279
|
}
|
package/dist/ui/switch.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TableOfContentsKnobStyle } from "../knob-contracts/table-of-contents-knobs.js";
|
|
2
|
-
import { CSSProperties, ComponentProps, ReactNode } from "react";
|
|
2
|
+
import { CSSProperties, ComponentProps, ReactNode, RefObject } from "react";
|
|
3
3
|
//#region src/ui/table-of-contents.d.ts
|
|
4
4
|
export type TocItem = {
|
|
5
5
|
href: string;
|
|
@@ -17,6 +17,6 @@ export type TableOfContentsProps = Omit<Omit<ComponentProps<"nav">, "children">,
|
|
|
17
17
|
variant?: TableOfContentsVariant;
|
|
18
18
|
indicator?: ReactNode;
|
|
19
19
|
};
|
|
20
|
-
export declare function useVisibleSections(ids: string[]): string[];
|
|
20
|
+
export declare function useVisibleSections(ids: string[], knobSourceRef: RefObject<HTMLElement | null>): string[];
|
|
21
21
|
export declare function TableOfContents({ items, label, variant, indicator, className, style, ...props }: TableOfContentsProps): import("react").JSX.Element | null;
|
|
22
22
|
//#endregion
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
-
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import { useEffect, useRef, useState, useSyncExternalStore } from "react";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
5
5
|
//#region src/ui/table-of-contents.tsx
|
|
6
6
|
const tableOfContentsVariants = ["range", "progress"];
|
|
7
|
-
const DETECTION_MARGIN = "-80px 0px -20% 0px";
|
|
8
7
|
function getScrollContainer(el) {
|
|
9
8
|
let node = el.parentElement;
|
|
10
9
|
while (node) {
|
|
@@ -13,7 +12,7 @@ function getScrollContainer(el) {
|
|
|
13
12
|
}
|
|
14
13
|
return null;
|
|
15
14
|
}
|
|
16
|
-
function useVisibleSections(ids) {
|
|
15
|
+
function useVisibleSections(ids, knobSourceRef) {
|
|
17
16
|
const [visibleState, setVisibleState] = useState({
|
|
18
17
|
idsKey: "",
|
|
19
18
|
visibleIds: []
|
|
@@ -23,6 +22,8 @@ function useVisibleSections(ids) {
|
|
|
23
22
|
const elements = (idsKey ? idsKey.split("|") : []).map((id) => document.getElementById(id)).filter((el) => el !== null);
|
|
24
23
|
const firstElement = elements[0];
|
|
25
24
|
if (!firstElement) return;
|
|
25
|
+
const knobSource = knobSourceRef.current;
|
|
26
|
+
const scrollInset = knobSource ? readLengthKnob(getComputedStyle(knobSource), "--cui-table-of-contents-scroll-inset") : 0;
|
|
26
27
|
const order = new Map(elements.map((el, index) => [el.id, index]));
|
|
27
28
|
const visible = /* @__PURE__ */ new Set();
|
|
28
29
|
const observer = new IntersectionObserver((entries) => {
|
|
@@ -34,14 +35,21 @@ function useVisibleSections(ids) {
|
|
|
34
35
|
});
|
|
35
36
|
}, {
|
|
36
37
|
root: getScrollContainer(firstElement),
|
|
37
|
-
rootMargin:
|
|
38
|
+
rootMargin: `-${scrollInset}px 0px -20% 0px`,
|
|
38
39
|
threshold: 0
|
|
39
40
|
});
|
|
40
41
|
for (const el of elements) observer.observe(el);
|
|
41
42
|
return () => observer.disconnect();
|
|
42
|
-
}, [idsKey]);
|
|
43
|
+
}, [idsKey, knobSourceRef]);
|
|
43
44
|
return visibleState.idsKey === idsKey ? visibleState.visibleIds : [];
|
|
44
45
|
}
|
|
46
|
+
function subscribeToHash(onChange) {
|
|
47
|
+
window.addEventListener("hashchange", onChange);
|
|
48
|
+
return () => window.removeEventListener("hashchange", onChange);
|
|
49
|
+
}
|
|
50
|
+
function useLocationHash() {
|
|
51
|
+
return useSyncExternalStore(subscribeToHash, () => window.location.hash, () => "");
|
|
52
|
+
}
|
|
45
53
|
function collectLevels(items, fallbackLevel = 2) {
|
|
46
54
|
return items.flatMap((item) => {
|
|
47
55
|
const level = item.level ?? fallbackLevel;
|
|
@@ -151,8 +159,10 @@ function TableOfContents({ items, label = "On this page", variant = "range", ind
|
|
|
151
159
|
const normalizedItems = normalizeItems(items, Math.min(...collectLevels(items), 2));
|
|
152
160
|
const flatItems = flattenItems(normalizedItems);
|
|
153
161
|
const targetIds = flatItems.map((item) => item.href.replace(/^#/, ""));
|
|
154
|
-
const activeItems = findActiveItems(useVisibleSections(targetIds), flatItems, targetIds);
|
|
162
|
+
const activeItems = findActiveItems(useVisibleSections(targetIds, trackRef), flatItems, targetIds);
|
|
155
163
|
const activeHrefs = new Set(activeItems.map((item) => item.href));
|
|
164
|
+
const locationHash = useLocationHash();
|
|
165
|
+
const currentHref = activeHrefs.has(locationHash) ? locationHash : activeItems[0]?.href;
|
|
156
166
|
const rail = useRailGeometry(trackRef, itemElements);
|
|
157
167
|
const hasActiveSection = activeItems.length > 0;
|
|
158
168
|
if (items.length === 0) return null;
|
|
@@ -197,6 +207,7 @@ function TableOfContents({ items, label = "On this page", variant = "range", ind
|
|
|
197
207
|
/* @__PURE__ */ jsx(TocList, {
|
|
198
208
|
items: normalizedItems,
|
|
199
209
|
activeHrefs,
|
|
210
|
+
currentHref,
|
|
200
211
|
itemElements,
|
|
201
212
|
root: true
|
|
202
213
|
}),
|
|
@@ -214,7 +225,7 @@ function TableOfContents({ items, label = "On this page", variant = "range", ind
|
|
|
214
225
|
})]
|
|
215
226
|
});
|
|
216
227
|
}
|
|
217
|
-
function TocList({ items, activeHrefs, itemElements, root = false }) {
|
|
228
|
+
function TocList({ items, activeHrefs, currentHref, itemElements, root = false }) {
|
|
218
229
|
return /* @__PURE__ */ jsx("ul", {
|
|
219
230
|
"data-control-ui": "table-of-contents",
|
|
220
231
|
"data-control-family": "table-of-contents",
|
|
@@ -237,7 +248,7 @@ function TocList({ items, activeHrefs, itemElements, root = false }) {
|
|
|
237
248
|
"data-active": isActive || void 0,
|
|
238
249
|
"data-level": item.level,
|
|
239
250
|
"data-depth": item.depth,
|
|
240
|
-
"aria-current":
|
|
251
|
+
"aria-current": item.href === currentHref ? "location" : void 0,
|
|
241
252
|
href: item.href,
|
|
242
253
|
className: "block",
|
|
243
254
|
style: itemStyle,
|
|
@@ -245,6 +256,7 @@ function TocList({ items, activeHrefs, itemElements, root = false }) {
|
|
|
245
256
|
}), item.children && /* @__PURE__ */ jsx(TocList, {
|
|
246
257
|
items: item.children,
|
|
247
258
|
activeHrefs,
|
|
259
|
+
currentHref,
|
|
248
260
|
itemElements
|
|
249
261
|
})] }, item.href);
|
|
250
262
|
})
|
package/dist/ui/table.js
CHANGED
|
@@ -10,6 +10,8 @@ function Table({ className, ...props }) {
|
|
|
10
10
|
className: "relative w-full",
|
|
11
11
|
children: /* @__PURE__ */ jsx(ScrollArea, {
|
|
12
12
|
lockAxis: "y",
|
|
13
|
+
"aria-label": props["aria-label"],
|
|
14
|
+
"aria-labelledby": props["aria-labelledby"],
|
|
13
15
|
children: /* @__PURE__ */ jsx("table", {
|
|
14
16
|
"data-control-ui": "table",
|
|
15
17
|
"data-control-family": "table",
|
|
@@ -61,7 +63,7 @@ function TableHead({ className, ...props }) {
|
|
|
61
63
|
"data-control-ui": "table",
|
|
62
64
|
"data-control-family": "table",
|
|
63
65
|
"data-slot": "head",
|
|
64
|
-
className: cn("whitespace-nowrap align-middle [&:has([role=checkbox])]:
|
|
66
|
+
className: cn("whitespace-nowrap align-middle [&:has([role=checkbox])]:pe-0", className),
|
|
65
67
|
...props
|
|
66
68
|
});
|
|
67
69
|
}
|
|
@@ -70,7 +72,7 @@ function TableCell({ className, ...props }) {
|
|
|
70
72
|
"data-control-ui": "table",
|
|
71
73
|
"data-control-family": "table",
|
|
72
74
|
"data-slot": "cell",
|
|
73
|
-
className: cn("whitespace-nowrap align-middle [&:has([role=checkbox])]:
|
|
75
|
+
className: cn("whitespace-nowrap align-middle [&:has([role=checkbox])]:pe-0", className),
|
|
74
76
|
...props
|
|
75
77
|
});
|
|
76
78
|
}
|
package/dist/ui/textarea.d.ts
CHANGED
|
@@ -4,5 +4,5 @@ import { CSSProperties, ComponentProps } from "react";
|
|
|
4
4
|
export type TextareaProps = Omit<ComponentProps<"textarea">, "style"> & {
|
|
5
5
|
style?: CSSProperties & FieldKnobStyle;
|
|
6
6
|
};
|
|
7
|
-
export declare function Textarea({ className, ...props }: TextareaProps): import("react").JSX.Element;
|
|
7
|
+
export declare function Textarea({ ref, id, name, value, defaultValue, disabled, autoFocus, className, ...props }: TextareaProps): import("react").JSX.Element;
|
|
8
8
|
//#endregion
|
package/dist/ui/textarea.js
CHANGED
|
@@ -1,15 +1,26 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import { cn } from "../lib/cn.js";
|
|
2
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
import { Input } from "@base-ui/react/input";
|
|
3
5
|
//#region src/ui/textarea.tsx
|
|
4
|
-
function Textarea({ className, ...props }) {
|
|
5
|
-
return /* @__PURE__ */ jsx(
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
function Textarea({ ref, id, name, value, defaultValue, disabled, autoFocus, className, ...props }) {
|
|
7
|
+
return /* @__PURE__ */ jsx(Input, {
|
|
8
|
+
ref,
|
|
9
|
+
id,
|
|
10
|
+
name,
|
|
11
|
+
value,
|
|
12
|
+
defaultValue,
|
|
13
|
+
disabled,
|
|
14
|
+
autoFocus,
|
|
15
|
+
render: /* @__PURE__ */ jsx("textarea", {
|
|
16
|
+
...props,
|
|
17
|
+
"data-control-ui": "textarea",
|
|
18
|
+
"data-field-kind": "textarea",
|
|
19
|
+
"data-slot": "root",
|
|
20
|
+
"data-control-family": "field",
|
|
21
|
+
"data-control": "true",
|
|
22
|
+
className: cn("field-sizing-content w-full min-w-0 resize-none", className)
|
|
23
|
+
})
|
|
13
24
|
});
|
|
14
25
|
}
|
|
15
26
|
//#endregion
|
package/dist/ui/timeline.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { RenderProp } from "../control-props.js";
|
|
1
2
|
import { TimelineKnobStyle } from "../knob-contracts/timeline-knobs.js";
|
|
2
3
|
import { CSSProperties, ComponentProps } from "react";
|
|
3
4
|
//#region src/ui/timeline.d.ts
|
|
@@ -20,6 +21,7 @@ export type TimelineContentProps = ComponentProps<"div"> & {
|
|
|
20
21
|
style?: CSSProperties & TimelineKnobStyle;
|
|
21
22
|
};
|
|
22
23
|
export type TimelineTitleProps = Omit<ComponentProps<"div">, "style"> & {
|
|
24
|
+
render?: RenderProp<ComponentProps<"div">>;
|
|
23
25
|
style?: CSSProperties & TimelineKnobStyle;
|
|
24
26
|
};
|
|
25
27
|
export type TimelineDescriptionProps = Omit<ComponentProps<"div">, "style"> & {
|
|
@@ -33,7 +35,7 @@ export declare function TimelineItem({ state, className, ...props }: TimelineIte
|
|
|
33
35
|
export declare function TimelineIndicator({ className, ...props }: TimelineIndicatorProps): import("react").JSX.Element;
|
|
34
36
|
export declare function TimelineSeparator({ className, ...props }: TimelineSeparatorProps): import("react").JSX.Element;
|
|
35
37
|
export declare function TimelineContent({ className, ...props }: TimelineContentProps): import("react").JSX.Element;
|
|
36
|
-
export declare function TimelineTitle({ className, ...props }: TimelineTitleProps): import("react").
|
|
38
|
+
export declare function TimelineTitle({ render, className, ...props }: TimelineTitleProps): import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
37
39
|
export declare function TimelineDescription({ className, ...props }: TimelineDescriptionProps): import("react").JSX.Element;
|
|
38
40
|
export declare function TimelineMeta({ className, ...props }: TimelineMetaProps): import("react").JSX.Element;
|
|
39
41
|
//#endregion
|
package/dist/ui/timeline.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
"use client";
|
|
1
2
|
import { cn } from "../lib/cn.js";
|
|
3
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
2
4
|
import { jsx } from "react/jsx-runtime";
|
|
3
5
|
//#region src/ui/timeline.tsx
|
|
4
6
|
function Timeline({ className, ...props }) {
|
|
@@ -16,13 +18,15 @@ function TimelineItem({ state = "neutral", className, ...props }) {
|
|
|
16
18
|
"data-control-family": "timeline",
|
|
17
19
|
"data-slot": "item",
|
|
18
20
|
"data-state": state,
|
|
21
|
+
"aria-current": state === "running" ? "step" : void 0,
|
|
19
22
|
...props,
|
|
20
23
|
className: cn("group/timeline-item relative grid min-w-0 grid-cols-[1rem_minmax(0,1fr)]", className)
|
|
21
24
|
});
|
|
22
25
|
}
|
|
23
26
|
function TimelineIndicator({ className, ...props }) {
|
|
24
27
|
return /* @__PURE__ */ jsx("span", {
|
|
25
|
-
"aria-
|
|
28
|
+
role: props["aria-label"] ? "img" : void 0,
|
|
29
|
+
"aria-hidden": props["aria-label"] ? void 0 : true,
|
|
26
30
|
"data-control-ui": "timeline",
|
|
27
31
|
"data-control-family": "timeline",
|
|
28
32
|
"data-slot": "indicator",
|
|
@@ -37,7 +41,7 @@ function TimelineSeparator({ className, ...props }) {
|
|
|
37
41
|
"data-control-family": "timeline",
|
|
38
42
|
"data-slot": "separator",
|
|
39
43
|
...props,
|
|
40
|
-
className: cn("absolute top-5 bottom-0
|
|
44
|
+
className: cn("absolute top-5 bottom-0 start-[calc(0.5rem-0.5px)] col-start-1 w-px group-last/timeline-item:hidden", className)
|
|
41
45
|
});
|
|
42
46
|
}
|
|
43
47
|
function TimelineContent({ className, ...props }) {
|
|
@@ -49,13 +53,17 @@ function TimelineContent({ className, ...props }) {
|
|
|
49
53
|
className: cn("col-start-2 row-start-1 grid min-w-0", className)
|
|
50
54
|
});
|
|
51
55
|
}
|
|
52
|
-
function TimelineTitle({ className, ...props }) {
|
|
53
|
-
return
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
function TimelineTitle({ render, className, ...props }) {
|
|
57
|
+
return useRender({
|
|
58
|
+
defaultTagName: "div",
|
|
59
|
+
render,
|
|
60
|
+
props: {
|
|
61
|
+
...props,
|
|
62
|
+
"data-control-ui": "timeline",
|
|
63
|
+
"data-control-family": "timeline",
|
|
64
|
+
"data-slot": "title",
|
|
65
|
+
className: cn("min-w-0", className)
|
|
66
|
+
}
|
|
59
67
|
});
|
|
60
68
|
}
|
|
61
69
|
function TimelineDescription({ className, ...props }) {
|
package/dist/ui/toast.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ButtonProps } from "./button.js";
|
|
2
2
|
import { PopupKnobStyle } from "../knob-contracts/popup-knobs.js";
|
|
3
3
|
import { CSSProperties, ReactNode } from "react";
|
|
4
|
-
import { Toast } from "@base-ui/react/toast";
|
|
4
|
+
import { Toast, ToastManagerAddOptions, ToastManagerPromiseOptions } from "@base-ui/react/toast";
|
|
5
5
|
//#region src/ui/toast.d.ts
|
|
6
6
|
export type ToasterProps = {
|
|
7
7
|
className?: string;
|
|
@@ -11,18 +11,24 @@ export type ToasterProps = {
|
|
|
11
11
|
indicatorStyle?: CSSProperties & PopupKnobStyle;
|
|
12
12
|
actionStyle?: ButtonProps["style"];
|
|
13
13
|
closeStyle?: ButtonProps["style"];
|
|
14
|
+
closeLabel?: string;
|
|
15
|
+
successLabel?: string;
|
|
16
|
+
errorLabel?: string;
|
|
17
|
+
warningLabel?: string;
|
|
18
|
+
infoLabel?: string;
|
|
14
19
|
};
|
|
15
20
|
export declare const toastManager: import("@base-ui/react").ToastManager<any>;
|
|
16
|
-
type ToastOptions = Omit<
|
|
17
|
-
|
|
21
|
+
type ToastOptions = Omit<ToastManagerAddOptions<object>, "title">;
|
|
22
|
+
declare function show(title: ReactNode, options?: ToastOptions): string;
|
|
23
|
+
export declare const toast: typeof show & {
|
|
18
24
|
success: (title: ReactNode, options?: ToastOptions) => string;
|
|
19
25
|
error: (title: ReactNode, options?: ToastOptions) => string;
|
|
20
26
|
warning: (title: ReactNode, options?: ToastOptions) => string;
|
|
21
27
|
info: (title: ReactNode, options?: ToastOptions) => string;
|
|
22
28
|
message: (title: ReactNode, options?: ToastOptions) => string;
|
|
23
|
-
promise: (
|
|
29
|
+
promise: <Value>(promise: Promise<Value>, options: ToastManagerPromiseOptions<Value, object>) => Promise<Value>;
|
|
24
30
|
dismiss: (id?: string) => void;
|
|
25
31
|
};
|
|
26
32
|
export declare const useToast: typeof Toast.useToastManager;
|
|
27
|
-
export declare function Toaster({ className, timeout, limit, rootStyle, indicatorStyle, actionStyle, closeStyle }: ToasterProps): import("react").JSX.Element;
|
|
33
|
+
export declare function Toaster({ className, timeout, limit, rootStyle, indicatorStyle, actionStyle, closeStyle, closeLabel, successLabel, errorLabel, warningLabel, infoLabel }: ToasterProps): import("react").JSX.Element;
|
|
28
34
|
//#endregion
|