@vllnt/ui 0.2.1 → 0.3.0-canary.a42d8f4
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/CHANGELOG.md +37 -0
- package/README.md +59 -30
- package/dist/components/accordion/accordion.js +2 -2
- package/dist/components/activity-heatmap/activity-heatmap.js +17 -14
- package/dist/components/activity-log/activity-log.js +7 -6
- package/dist/components/agent-activity/agent-activity.js +311 -0
- package/dist/components/agent-activity/index.js +18 -0
- package/dist/components/ai-artifact/ai-artifact.js +422 -0
- package/dist/components/ai-artifact/index.js +24 -0
- package/dist/components/ai-chat-input/ai-chat-input.js +3 -3
- package/dist/components/ai-message-bubble/ai-message-bubble.js +2 -2
- package/dist/components/ai-sidebar/ai-sidebar.js +254 -0
- package/dist/components/ai-sidebar/index.js +22 -0
- package/dist/components/ai-source-citation/ai-source-citation.js +2 -2
- package/dist/components/ai-tool-call-display/ai-tool-call-display.js +5 -5
- package/dist/components/alert-pulse/alert-pulse.js +93 -0
- package/dist/components/alert-pulse/index.js +6 -0
- package/dist/components/anchor-port/anchor-port.js +51 -0
- package/dist/components/anchor-port/index.js +4 -0
- package/dist/components/animated-text/animated-text.js +8 -7
- package/dist/components/annotation/annotation.js +1 -1
- package/dist/components/auto-reload/auto-reload.js +377 -0
- package/dist/components/auto-reload/index.js +6 -0
- package/dist/components/avatar/avatar.js +1 -1
- package/dist/components/avatar-group/avatar-group.js +5 -5
- package/dist/components/banner/banner.js +155 -0
- package/dist/components/banner/index.js +10 -0
- package/dist/components/blog-card/blog-card.js +4 -2
- package/dist/components/border-beam/border-beam.js +2 -2
- package/dist/components/bottom-activity-strip/bottom-activity-strip.js +91 -0
- package/dist/components/bottom-activity-strip/index.js +6 -0
- package/dist/components/bottom-bar/bottom-bar.js +25 -0
- package/dist/components/bottom-bar/index.js +4 -0
- package/dist/components/breadcrumb/breadcrumb.js +33 -26
- package/dist/components/button/button.js +1 -1
- package/dist/components/calendar/calendar.js +6 -6
- package/dist/components/callout/callout.js +1 -1
- package/dist/components/candlestick-chart/candlestick-chart.js +6 -5
- package/dist/components/canvas-shell/canvas-foundation-demo.js +183 -0
- package/dist/components/canvas-shell/canvas-shell-route-config.js +0 -0
- package/dist/components/canvas-shell/canvas-shell.js +261 -0
- package/dist/components/canvas-shell/index.js +4 -0
- package/dist/components/canvas-view/canvas-view.js +461 -0
- package/dist/components/canvas-view/index.js +6 -0
- package/dist/components/carousel/carousel.js +18 -10
- package/dist/components/category-filter/category-filter.js +1 -1
- package/dist/components/chart/area-chart.js +1 -0
- package/dist/components/chart/line-chart.js +1 -0
- package/dist/components/chat-dock-section/chat-dock-section.js +56 -0
- package/dist/components/chat-dock-section/index.js +6 -0
- package/dist/components/checkbox/checkbox.js +2 -2
- package/dist/components/checklist/checklist.js +45 -10
- package/dist/components/checklist/index.js +10 -2
- package/dist/components/choropleth-map/choropleth-map.js +373 -0
- package/dist/components/choropleth-map/index.js +10 -0
- package/dist/components/chronological-timeline/chronological-timeline.js +343 -0
- package/dist/components/chronological-timeline/index.js +8 -0
- package/dist/components/civilization-card/civilization-card.js +258 -0
- package/dist/components/civilization-card/index.js +8 -0
- package/dist/components/code-block/code-block.js +33 -12
- package/dist/components/code-playground/code-playground.js +12 -9
- package/dist/components/combobox/combobox.js +47 -28
- package/dist/components/command/command.js +1 -1
- package/dist/components/comment-pin/comment-pin.js +104 -0
- package/dist/components/comment-pin/index.js +6 -0
- package/dist/components/comparison/comparison.js +11 -10
- package/dist/components/completion-dialog/completion-dialog.js +20 -12
- package/dist/components/connector-edge/connector-edge.js +66 -0
- package/dist/components/connector-edge/index.js +6 -0
- package/dist/components/content-intro/content-intro.js +25 -21
- package/dist/components/context-lens/context-lens.js +98 -0
- package/dist/components/context-lens/index.js +6 -0
- package/dist/components/context-menu/context-menu.js +4 -4
- package/dist/components/conversation-thread/conversation-thread.js +348 -0
- package/dist/components/conversation-thread/index.js +20 -0
- package/dist/components/cookie-consent/cookie-consent.js +1 -1
- package/dist/components/copy-button/copy-button.js +189 -0
- package/dist/components/copy-button/index.js +8 -0
- package/dist/components/countdown-timer/countdown-timer.js +9 -8
- package/dist/components/credit-badge/credit-badge.js +1 -7
- package/dist/components/curriculum/curriculum.js +349 -0
- package/dist/components/curriculum/index.js +10 -0
- package/dist/components/data-list/data-list.js +2 -1
- package/dist/components/data-table/data-table.js +6 -5
- package/dist/components/date-picker/date-picker.js +2 -7
- package/dist/components/dialog/dialog.js +1 -1
- package/dist/components/document-sibling-nav/document-sibling-nav.js +111 -0
- package/dist/components/document-sibling-nav/index.js +8 -0
- package/dist/components/dropdown-menu/dropdown-menu.js +3 -3
- package/dist/components/edge-label/edge-label.js +26 -0
- package/dist/components/edge-label/index.js +4 -0
- package/dist/components/empty-state/empty-state.js +93 -0
- package/dist/components/empty-state/index.js +8 -0
- package/dist/components/era-comparison/era-comparison.js +198 -0
- package/dist/components/era-comparison/index.js +16 -0
- package/dist/components/exercise/exercise.js +15 -7
- package/dist/components/faq/faq.js +8 -4
- package/dist/components/file-upload/file-upload.js +4 -9
- package/dist/components/filter-bar/filter-bar.js +9 -8
- package/dist/components/flashcard/flashcard.js +2 -2
- package/dist/components/floating-action-button/floating-action-button.js +1 -1
- package/dist/components/floating-toolbar/floating-toolbar.js +66 -0
- package/dist/components/floating-toolbar/index.js +6 -0
- package/dist/components/flow-diagram/flow-controls.js +9 -9
- package/dist/components/flow-diagram/flow-error-boundary.js +2 -2
- package/dist/components/flow-diagram/flow-fullscreen.js +2 -2
- package/dist/components/follow-mode/follow-mode.js +89 -0
- package/dist/components/follow-mode/index.js +6 -0
- package/dist/components/form/form.js +432 -0
- package/dist/components/form/index.js +20 -0
- package/dist/components/gantt-chart/gantt-chart.js +334 -0
- package/dist/components/gantt-chart/index.js +6 -0
- package/dist/components/geography-quiz-map/geography-quiz-map.js +343 -0
- package/dist/components/geography-quiz-map/index.js +12 -0
- package/dist/components/glass-panel/glass-panel.js +21 -0
- package/dist/components/glass-panel/index.js +4 -0
- package/dist/components/globe-3d/globe-3d.js +429 -0
- package/dist/components/globe-3d/index.js +10 -0
- package/dist/components/group-hull/group-hull.js +29 -0
- package/dist/components/group-hull/index.js +4 -0
- package/dist/components/handoff-beacon/handoff-beacon.js +78 -0
- package/dist/components/handoff-beacon/index.js +6 -0
- package/dist/components/heat-map-overlay/heat-map-overlay.js +215 -0
- package/dist/components/heat-map-overlay/index.js +6 -0
- package/dist/components/heat-overlay/heat-overlay.js +92 -0
- package/dist/components/heat-overlay/index.js +6 -0
- package/dist/components/historic-timeline/historic-timeline.js +342 -0
- package/dist/components/historic-timeline/index.js +6 -0
- package/dist/components/historical-figure-card/historical-figure-card.js +270 -0
- package/dist/components/historical-figure-card/index.js +6 -0
- package/dist/components/horizontal-scroll-row/horizontal-scroll-row.js +6 -5
- package/dist/components/index.js +570 -1
- package/dist/components/infinite-plane/index.js +6 -0
- package/dist/components/infinite-plane/infinite-plane.js +75 -0
- package/dist/components/inline-input/inline-input.js +1 -1
- package/dist/components/input-otp/input-otp.js +1 -1
- package/dist/components/interactive-timeline/index.js +16 -0
- package/dist/components/interactive-timeline/interactive-timeline.js +711 -0
- package/dist/components/jarvis-dock/index.js +6 -0
- package/dist/components/jarvis-dock/jarvis-dock.js +98 -0
- package/dist/components/kbd/index.js +5 -0
- package/dist/components/kbd/kbd.js +117 -0
- package/dist/components/key-concept/key-concept.js +6 -5
- package/dist/components/keyboard-shortcuts-help/keyboard-shortcuts-help.js +4 -3
- package/dist/components/knowledge-check/index.js +6 -0
- package/dist/components/knowledge-check/knowledge-check.js +448 -0
- package/dist/components/lang-provider/lang-provider.js +3 -3
- package/dist/components/learning-objectives/learning-objectives.js +14 -13
- package/dist/components/left-rail/index.js +4 -0
- package/dist/components/left-rail/left-rail.js +25 -0
- package/dist/components/live-cursor/index.js +6 -0
- package/dist/components/live-cursor/live-cursor.js +62 -0
- package/dist/components/live-feed/live-feed.js +17 -15
- package/dist/components/map-2d/index.js +20 -0
- package/dist/components/map-2d/map-2d.js +455 -0
- package/dist/components/map-timeline/index.js +16 -0
- package/dist/components/map-timeline/map-timeline.js +506 -0
- package/dist/components/market-treemap/market-treemap.js +3 -3
- package/dist/components/mdx-content/mdx-content.js +21 -10
- package/dist/components/menubar/menubar.js +4 -4
- package/dist/components/metric-cluster/index.js +6 -0
- package/dist/components/metric-cluster/metric-cluster.js +96 -0
- package/dist/components/metric-gauge/metric-gauge.js +2 -2
- package/dist/components/mini-map-panel/index.js +6 -0
- package/dist/components/mini-map-panel/mini-map-panel.js +74 -0
- package/dist/components/model-comparison/index.js +12 -0
- package/dist/components/model-comparison/model-comparison.js +211 -0
- package/dist/components/model-selector/model-selector.js +3 -3
- package/dist/components/multi-select/index.js +6 -0
- package/dist/components/multi-select/multi-select.js +258 -0
- package/dist/components/multi-select-lasso/index.js +6 -0
- package/dist/components/multi-select-lasso/multi-select-lasso.js +76 -0
- package/dist/components/navbar-saas/navbar-saas.js +9 -8
- package/dist/components/navigation-menu/navigation-menu.js +2 -2
- package/dist/components/newsletter-signup/index.js +8 -0
- package/dist/components/newsletter-signup/newsletter-signup.js +269 -0
- package/dist/components/number-input/number-input.js +2 -2
- package/dist/components/number-ticker/number-ticker.js +11 -4
- package/dist/components/object-card/index.js +6 -0
- package/dist/components/object-card/object-card.js +126 -0
- package/dist/components/object-handle/index.js +4 -0
- package/dist/components/object-handle/object-handle.js +38 -0
- package/dist/components/object-inspector/index.js +6 -0
- package/dist/components/object-inspector/object-inspector.js +136 -0
- package/dist/components/order-book/order-book.js +2 -2
- package/dist/components/overview-board/index.js +8 -0
- package/dist/components/overview-board/overview-board.js +127 -0
- package/dist/components/parallel-timeline/index.js +6 -0
- package/dist/components/parallel-timeline/parallel-timeline.js +251 -0
- package/dist/components/password-input/password-input.js +1 -1
- package/dist/components/plan-badge/plan-badge.js +1 -7
- package/dist/components/playback-ghost/index.js +6 -0
- package/dist/components/playback-ghost/playback-ghost.js +83 -0
- package/dist/components/policy-delivery-panel/index.js +6 -0
- package/dist/components/policy-delivery-panel/policy-delivery-panel.js +99 -0
- package/dist/components/presence-stack/index.js +6 -0
- package/dist/components/presence-stack/presence-stack.js +108 -0
- package/dist/components/presence-sync-indicator/index.js +6 -0
- package/dist/components/presence-sync-indicator/presence-sync-indicator.js +73 -0
- package/dist/components/pricing-table/index.js +8 -0
- package/dist/components/pricing-table/pricing-table.js +247 -0
- package/dist/components/primary-source-viewer/index.js +26 -0
- package/dist/components/primary-source-viewer/primary-source-viewer.js +439 -0
- package/dist/components/pro-tip/pro-tip.js +6 -6
- package/dist/components/profile-section/profile-section.js +3 -2
- package/dist/components/progress-card/progress-card.js +5 -4
- package/dist/components/progress-tracker/index.js +20 -0
- package/dist/components/progress-tracker/progress-tracker.js +537 -0
- package/dist/components/prompt-templates/index.js +6 -0
- package/dist/components/prompt-templates/prompt-templates.js +403 -0
- package/dist/components/property-section/index.js +6 -0
- package/dist/components/property-section/property-section.js +101 -0
- package/dist/components/quiz/quiz.js +7 -6
- package/dist/components/radio-group/radio-group.js +2 -2
- package/dist/components/rating/rating.js +3 -3
- package/dist/components/relationship-inspector/index.js +6 -0
- package/dist/components/relationship-inspector/relationship-inspector.js +102 -0
- package/dist/components/resizable/resizable.js +1 -1
- package/dist/components/right-dock/index.js +4 -0
- package/dist/components/right-dock/right-dock.js +28 -0
- package/dist/components/route-map/index.js +6 -0
- package/dist/components/route-map/route-map.js +339 -0
- package/dist/components/routing-assignment-panel/index.js +6 -0
- package/dist/components/routing-assignment-panel/routing-assignment-panel.js +122 -0
- package/dist/components/run-timeline/index.js +6 -0
- package/dist/components/run-timeline/run-timeline.js +221 -0
- package/dist/components/runtime-overview-panel/index.js +6 -0
- package/dist/components/runtime-overview-panel/runtime-overview-panel.js +89 -0
- package/dist/components/scope-selector/scope-selector.js +8 -8
- package/dist/components/search-bar/search-bar.js +24 -2
- package/dist/components/search-dialog/search-dialog.js +484 -51
- package/dist/components/segmented-control/index.js +12 -0
- package/dist/components/segmented-control/segmented-control.js +61 -0
- package/dist/components/select/select.js +5 -5
- package/dist/components/selection-halo/index.js +6 -0
- package/dist/components/selection-halo/selection-halo.js +72 -0
- package/dist/components/selection-presence/index.js +6 -0
- package/dist/components/selection-presence/selection-presence.js +50 -0
- package/dist/components/severity-badge/severity-badge.js +2 -2
- package/dist/components/share-dialog/share-dialog.js +2 -2
- package/dist/components/share-section/share-section.js +2 -1
- package/dist/components/sheet/sheet.js +1 -1
- package/dist/components/sidebar/sidebar.js +31 -26
- package/dist/components/sidebar-toggle/sidebar-toggle.js +5 -3
- package/dist/components/slider/slider.js +1 -1
- package/dist/components/slideshow/slideshow.js +15 -13
- package/dist/components/snap-guides/index.js +6 -0
- package/dist/components/snap-guides/snap-guides.js +45 -0
- package/dist/components/social-fab/social-fab.js +12 -11
- package/dist/components/sparkline-grid/sparkline-grid.js +1 -1
- package/dist/components/spinner/spinner.js +4 -4
- package/dist/components/spinner/unicode-spinner.js +5 -2
- package/dist/components/stat-card/stat-card.js +5 -5
- package/dist/components/state-badge-overlay/index.js +6 -0
- package/dist/components/state-badge-overlay/state-badge-overlay.js +90 -0
- package/dist/components/static-code/index.js +4 -0
- package/dist/components/static-code/static-code-copy.js +29 -0
- package/dist/components/static-code/static-code.js +41 -0
- package/dist/components/status-board/status-board.js +14 -7
- package/dist/components/status-indicator/status-indicator.js +3 -3
- package/dist/components/step-by-step/step-by-step.js +10 -8
- package/dist/components/step-navigation/step-navigation.js +2 -2
- package/dist/components/stepper/stepper.js +3 -3
- package/dist/components/sticky-metric/index.js +6 -0
- package/dist/components/sticky-metric/sticky-metric.js +83 -0
- package/dist/components/story-map/index.js +8 -0
- package/dist/components/story-map/story-map.js +414 -0
- package/dist/components/subscription-card/subscription-card.js +1 -1
- package/dist/components/switch/switch.js +1 -1
- package/dist/components/table-of-contents/table-of-contents.js +5 -2
- package/dist/components/table-of-contents-panel/table-of-contents-panel.js +8 -6
- package/dist/components/tabs/tabs.js +26 -8
- package/dist/components/tags-input/index.js +4 -0
- package/dist/components/tags-input/tags-input.js +186 -0
- package/dist/components/terminal/terminal.js +61 -37
- package/dist/components/theme-preset-provider/index.js +4 -0
- package/dist/components/theme-preset-provider/theme-preset-provider.js +55 -0
- package/dist/components/theme-switcher/index.js +4 -0
- package/dist/components/theme-switcher/theme-switcher.js +43 -0
- package/dist/components/theme-toggle/theme-toggle.js +2 -2
- package/dist/components/thinking-block/thinking-block.js +3 -3
- package/dist/components/thread-bubble/index.js +6 -0
- package/dist/components/thread-bubble/thread-bubble.js +85 -0
- package/dist/components/threshold-ring/index.js +6 -0
- package/dist/components/threshold-ring/threshold-ring.js +160 -0
- package/dist/components/ticker-tape/ticker-tape.js +4 -4
- package/dist/components/timeline/index.js +12 -0
- package/dist/components/timeline/timeline.js +239 -0
- package/dist/components/timeline-scrubber/index.js +6 -0
- package/dist/components/timeline-scrubber/timeline-scrubber.js +179 -0
- package/dist/components/tldr-section/tldr-section.js +11 -9
- package/dist/components/top-bar/index.js +4 -0
- package/dist/components/top-bar/top-bar.js +31 -0
- package/dist/components/tour/tour.js +2 -2
- package/dist/components/transaction-list/index.js +14 -0
- package/dist/components/transaction-list/transaction-list.js +247 -0
- package/dist/components/tree-view/index.js +6 -0
- package/dist/components/tree-view/tree-view.js +298 -0
- package/dist/components/tutorial-card/tutorial-card.js +1 -1
- package/dist/components/tutorial-complete/tutorial-complete.js +16 -14
- package/dist/components/tutorial-filters/tutorial-filters.js +2 -2
- package/dist/components/tutorial-intro-content/tutorial-intro-content.js +5 -5
- package/dist/components/tutorial-mdx/tutorial-mdx.js +6 -6
- package/dist/components/usage-breakdown/usage-breakdown.js +11 -6
- package/dist/components/video-embed/video-embed.js +2 -2
- package/dist/components/viewport-bookmarks/index.js +6 -0
- package/dist/components/viewport-bookmarks/viewport-bookmarks.js +118 -0
- package/dist/components/wallet-card/wallet-card.js +1 -1
- package/dist/components/watchlist/watchlist.js +7 -6
- package/dist/components/workspace-switcher/index.js +6 -0
- package/dist/components/workspace-switcher/workspace-switcher.js +61 -0
- package/dist/components/world-breadcrumbs/index.js +6 -0
- package/dist/components/world-breadcrumbs/world-breadcrumbs.js +114 -0
- package/dist/components/world-clock-bar/world-clock-bar.js +35 -14
- package/dist/components/zoom-hud/index.js +4 -0
- package/dist/components/zoom-hud/zoom-hud.js +61 -0
- package/dist/index.d.ts +8066 -246
- package/dist/index.js +21 -1
- package/dist/lib/theme-presets.js +32 -0
- package/dist/lib/use-theme-preset.js +94 -0
- package/dist/tailwind-preset.js +19 -19
- package/package.json +13 -8
- package/styles.css +38 -38
- package/themes/default.css +39 -39
- package/themes/presets.css +547 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import {
|
|
4
|
+
forwardRef
|
|
5
|
+
} from "react";
|
|
6
|
+
import { cn } from "../../lib/utils";
|
|
7
|
+
const DEFAULT_LABELS = {
|
|
8
|
+
region: "Selection"
|
|
9
|
+
};
|
|
10
|
+
const SelectionHalo = forwardRef(
|
|
11
|
+
(props, ref) => {
|
|
12
|
+
const {
|
|
13
|
+
bounds,
|
|
14
|
+
className,
|
|
15
|
+
label,
|
|
16
|
+
labels,
|
|
17
|
+
pulsing = false,
|
|
18
|
+
...rest
|
|
19
|
+
} = props;
|
|
20
|
+
const resolvedLabels = { ...DEFAULT_LABELS, ...labels };
|
|
21
|
+
return /* @__PURE__ */ jsxs(
|
|
22
|
+
"div",
|
|
23
|
+
{
|
|
24
|
+
"aria-label": resolvedLabels.region,
|
|
25
|
+
className: cn(
|
|
26
|
+
"pointer-events-none absolute z-20 rounded-md ring-2 ring-primary",
|
|
27
|
+
pulsing ? "animate-pulse" : "",
|
|
28
|
+
className
|
|
29
|
+
),
|
|
30
|
+
"data-pulsing": pulsing ? "true" : void 0,
|
|
31
|
+
"data-selection-halo": true,
|
|
32
|
+
ref,
|
|
33
|
+
style: {
|
|
34
|
+
height: `${bounds.height.toString()}px`,
|
|
35
|
+
left: `${bounds.x.toString()}px`,
|
|
36
|
+
top: `${bounds.y.toString()}px`,
|
|
37
|
+
width: `${bounds.width.toString()}px`
|
|
38
|
+
},
|
|
39
|
+
...rest,
|
|
40
|
+
children: [
|
|
41
|
+
["nw", "ne", "se", "sw"].map((corner) => /* @__PURE__ */ jsx(
|
|
42
|
+
"span",
|
|
43
|
+
{
|
|
44
|
+
"aria-hidden": "true",
|
|
45
|
+
className: cn(
|
|
46
|
+
"absolute size-2 rounded-sm border-2 border-primary bg-background",
|
|
47
|
+
corner === "nw" && "-left-1 -top-1",
|
|
48
|
+
corner === "ne" && "-right-1 -top-1",
|
|
49
|
+
corner === "se" && "-bottom-1 -right-1",
|
|
50
|
+
corner === "sw" && "-bottom-1 -left-1"
|
|
51
|
+
),
|
|
52
|
+
"data-handle-corner": corner
|
|
53
|
+
},
|
|
54
|
+
corner
|
|
55
|
+
)),
|
|
56
|
+
label ? /* @__PURE__ */ jsx(
|
|
57
|
+
"span",
|
|
58
|
+
{
|
|
59
|
+
className: "absolute -top-6 left-0 inline-flex items-center rounded-md bg-primary px-1.5 py-0.5 text-[10px] font-semibold text-primary-foreground shadow-sm",
|
|
60
|
+
"data-selection-label": true,
|
|
61
|
+
children: label
|
|
62
|
+
}
|
|
63
|
+
) : null
|
|
64
|
+
]
|
|
65
|
+
}
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
);
|
|
69
|
+
SelectionHalo.displayName = "SelectionHalo";
|
|
70
|
+
export {
|
|
71
|
+
SelectionHalo
|
|
72
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import {
|
|
4
|
+
forwardRef
|
|
5
|
+
} from "react";
|
|
6
|
+
import { cn } from "../../lib/utils";
|
|
7
|
+
const DEFAULT_LABELS = {
|
|
8
|
+
region: "Selection presence"
|
|
9
|
+
};
|
|
10
|
+
const SelectionPresence = forwardRef((props, ref) => {
|
|
11
|
+
const { className, color, height, labels, name, width, x, y, ...rest } = props;
|
|
12
|
+
const resolvedLabels = { ...DEFAULT_LABELS, ...labels };
|
|
13
|
+
const accent = color ?? "var(--foreground)";
|
|
14
|
+
const ariaLabel = typeof name === "string" ? `${resolvedLabels.region}: ${name}` : resolvedLabels.region;
|
|
15
|
+
return /* @__PURE__ */ jsx(
|
|
16
|
+
"div",
|
|
17
|
+
{
|
|
18
|
+
"aria-label": ariaLabel,
|
|
19
|
+
className: cn(
|
|
20
|
+
"pointer-events-none absolute z-20 rounded-md border-2 border-dashed",
|
|
21
|
+
className
|
|
22
|
+
),
|
|
23
|
+
"data-selection-presence": true,
|
|
24
|
+
ref,
|
|
25
|
+
role: "img",
|
|
26
|
+
style: {
|
|
27
|
+
backgroundColor: `color-mix(in srgb, ${accent} 10%, transparent)`,
|
|
28
|
+
borderColor: accent,
|
|
29
|
+
height,
|
|
30
|
+
left: x,
|
|
31
|
+
top: y,
|
|
32
|
+
width
|
|
33
|
+
},
|
|
34
|
+
...rest,
|
|
35
|
+
children: name === null || name === void 0 ? null : /* @__PURE__ */ jsx(
|
|
36
|
+
"span",
|
|
37
|
+
{
|
|
38
|
+
className: "absolute -top-5 left-0 inline-flex items-center rounded-md px-1.5 py-0.5 text-[10px] font-medium text-white shadow-sm",
|
|
39
|
+
"data-selection-presence-chip": true,
|
|
40
|
+
style: { backgroundColor: accent },
|
|
41
|
+
children: name
|
|
42
|
+
}
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
);
|
|
46
|
+
});
|
|
47
|
+
SelectionPresence.displayName = "SelectionPresence";
|
|
48
|
+
export {
|
|
49
|
+
SelectionPresence
|
|
50
|
+
};
|
|
@@ -132,7 +132,7 @@ function SeverityBadge({
|
|
|
132
132
|
"data-level": level,
|
|
133
133
|
...props,
|
|
134
134
|
children: [
|
|
135
|
-
showDot ? /* @__PURE__ */ jsxs("span", { "aria-hidden": "true", className: "relative flex
|
|
135
|
+
showDot ? /* @__PURE__ */ jsxs("span", { "aria-hidden": "true", className: "relative flex size-2", children: [
|
|
136
136
|
pulse ? /* @__PURE__ */ jsx(
|
|
137
137
|
"span",
|
|
138
138
|
{
|
|
@@ -146,7 +146,7 @@ function SeverityBadge({
|
|
|
146
146
|
"span",
|
|
147
147
|
{
|
|
148
148
|
className: cn(
|
|
149
|
-
"relative inline-flex
|
|
149
|
+
"relative inline-flex size-2 rounded-full",
|
|
150
150
|
DOT_COLOR[level]
|
|
151
151
|
)
|
|
152
152
|
}
|
|
@@ -13,7 +13,7 @@ function PlatformButton({
|
|
|
13
13
|
onClick,
|
|
14
14
|
platform
|
|
15
15
|
}) {
|
|
16
|
-
const
|
|
16
|
+
const handleSelectPlatform = () => {
|
|
17
17
|
onClick(platform.key);
|
|
18
18
|
};
|
|
19
19
|
return /* @__PURE__ */ jsx(
|
|
@@ -26,7 +26,7 @@ function PlatformButton({
|
|
|
26
26
|
"hover:bg-accent hover:text-accent-foreground",
|
|
27
27
|
"focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2"
|
|
28
28
|
),
|
|
29
|
-
onClick:
|
|
29
|
+
onClick: handleSelectPlatform,
|
|
30
30
|
type: "button",
|
|
31
31
|
children: platform.label
|
|
32
32
|
}
|
|
@@ -26,6 +26,7 @@ function buildShareUrl(platform, url, title) {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
function ShareSection({
|
|
29
|
+
as: Heading = "h3",
|
|
29
30
|
buildUrl: buildUrlFunction = buildShareUrl,
|
|
30
31
|
platforms = defaultPlatforms,
|
|
31
32
|
shareOn,
|
|
@@ -34,7 +35,7 @@ function ShareSection({
|
|
|
34
35
|
url
|
|
35
36
|
}) {
|
|
36
37
|
return /* @__PURE__ */ jsxs("div", { className: "border-t border-border pt-6 mt-8", children: [
|
|
37
|
-
/* @__PURE__ */ jsx(
|
|
38
|
+
/* @__PURE__ */ jsx(Heading, { className: "text-lg font-semibold mb-4", children: shareTitle }),
|
|
38
39
|
/* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-3", children: platforms.map((platform) => /* @__PURE__ */ jsxs(
|
|
39
40
|
"a",
|
|
40
41
|
{
|
|
@@ -47,7 +47,7 @@ const SheetContent = forwardRef(({ children, className, side = "right", ...props
|
|
|
47
47
|
...props,
|
|
48
48
|
children: [
|
|
49
49
|
/* @__PURE__ */ jsxs(SheetPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary", children: [
|
|
50
|
-
/* @__PURE__ */ jsx(X, { className: "
|
|
50
|
+
/* @__PURE__ */ jsx(X, { className: "size-4" }),
|
|
51
51
|
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
|
|
52
52
|
] }),
|
|
53
53
|
children
|
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import { useEffect, useRef, useState, useSyncExternalStore } from "react";
|
|
4
4
|
import { ChevronDown } from "lucide-react";
|
|
5
5
|
import Link from "next/link";
|
|
6
6
|
import { usePathname } from "next/navigation";
|
|
7
|
+
import { useMounted } from "../../lib/use-mounted";
|
|
7
8
|
import { cn } from "../../lib/utils";
|
|
8
|
-
import { useSidebar } from "../sidebar-provider";
|
|
9
|
+
import { useSidebar } from "../sidebar-provider/sidebar-provider";
|
|
10
|
+
const getMobileSnapshot = () => typeof window === "undefined" ? false : window.innerWidth < 1024;
|
|
11
|
+
const getServerMobileSnapshot = () => false;
|
|
12
|
+
const subscribeToViewportResize = (onStoreChange) => {
|
|
13
|
+
window.addEventListener("resize", onStoreChange);
|
|
14
|
+
return () => {
|
|
15
|
+
window.removeEventListener("resize", onStoreChange);
|
|
16
|
+
};
|
|
17
|
+
};
|
|
9
18
|
function useMobile(setOpen) {
|
|
10
|
-
const
|
|
19
|
+
const isMobile = useSyncExternalStore(
|
|
20
|
+
subscribeToViewportResize,
|
|
21
|
+
getMobileSnapshot,
|
|
22
|
+
getServerMobileSnapshot
|
|
23
|
+
);
|
|
11
24
|
useEffect(() => {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
setIsMobile(mobile);
|
|
15
|
-
if (mobile) {
|
|
16
|
-
setOpen(false);
|
|
17
|
-
} else {
|
|
18
|
-
setOpen(true);
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
checkMobile();
|
|
22
|
-
window.addEventListener("resize", checkMobile);
|
|
23
|
-
return () => {
|
|
24
|
-
window.removeEventListener("resize", checkMobile);
|
|
25
|
-
};
|
|
26
|
-
}, [setOpen]);
|
|
25
|
+
setOpen(!isMobile);
|
|
26
|
+
}, [isMobile, setOpen]);
|
|
27
27
|
return isMobile;
|
|
28
28
|
}
|
|
29
29
|
function useScrollFade(containerReference) {
|
|
@@ -38,7 +38,7 @@ function useScrollFade(containerReference) {
|
|
|
38
38
|
setShowBottomFade(scrollTop < scrollHeight - clientHeight - 1);
|
|
39
39
|
};
|
|
40
40
|
checkScroll();
|
|
41
|
-
container.addEventListener("scroll", checkScroll);
|
|
41
|
+
container.addEventListener("scroll", checkScroll, { passive: true });
|
|
42
42
|
return () => {
|
|
43
43
|
container.removeEventListener("scroll", checkScroll);
|
|
44
44
|
};
|
|
@@ -73,7 +73,7 @@ function CollapsibleSection({
|
|
|
73
73
|
ChevronDown,
|
|
74
74
|
{
|
|
75
75
|
className: cn(
|
|
76
|
-
"
|
|
76
|
+
"size-3 transition-transform duration-200",
|
|
77
77
|
isOpen && "rotate-180"
|
|
78
78
|
)
|
|
79
79
|
}
|
|
@@ -88,6 +88,7 @@ function CollapsibleSection({
|
|
|
88
88
|
"grid transition-all duration-200 ease-in-out",
|
|
89
89
|
isOpen ? "grid-rows-[1fr] opacity-100" : "grid-rows-[0fr] opacity-0"
|
|
90
90
|
),
|
|
91
|
+
hidden: !isOpen,
|
|
91
92
|
children: /* @__PURE__ */ jsx("div", { className: "overflow-hidden", children })
|
|
92
93
|
}
|
|
93
94
|
)
|
|
@@ -97,15 +98,18 @@ function Sidebar({ sections }) {
|
|
|
97
98
|
const pathname = usePathname();
|
|
98
99
|
const { open, setOpen } = useSidebar();
|
|
99
100
|
const isMobile = useMobile(setOpen);
|
|
101
|
+
const mounted = useMounted();
|
|
100
102
|
const scrollContainerReference = useRef(null);
|
|
101
103
|
const { showBottomFade, showTopFade } = useScrollFade(
|
|
102
104
|
scrollContainerReference
|
|
103
105
|
);
|
|
106
|
+
const collapsed = mounted && !isMobile && !open;
|
|
104
107
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
105
108
|
isMobile && open ? /* @__PURE__ */ jsx(
|
|
106
109
|
"div",
|
|
107
110
|
{
|
|
108
111
|
className: "fixed inset-0 bg-black/50 z-40 lg:hidden",
|
|
112
|
+
"data-testid": "sidebar-overlay",
|
|
109
113
|
onClick: () => {
|
|
110
114
|
setOpen(false);
|
|
111
115
|
},
|
|
@@ -122,15 +126,16 @@ function Sidebar({ sections }) {
|
|
|
122
126
|
"aside",
|
|
123
127
|
{
|
|
124
128
|
className: cn(
|
|
125
|
-
"fixed lg:relative top-16 lg:top-0 bottom-0 lg:bottom-auto left-0 z-40 lg:h-full
|
|
129
|
+
"fixed lg:relative top-16 lg:top-0 bottom-0 lg:bottom-auto left-0 z-40 lg:h-full bg-background transition-[transform,width] duration-300 ease-in-out",
|
|
126
130
|
"flex flex-col",
|
|
127
131
|
"overflow-hidden",
|
|
128
132
|
"shrink-0",
|
|
129
|
-
|
|
130
|
-
|
|
133
|
+
collapsed ? "border-r-0" : "border-r",
|
|
134
|
+
collapsed ? "w-0" : isMobile ? "w-full" : "w-64",
|
|
131
135
|
isMobile && open && "translate-x-0",
|
|
132
|
-
|
|
133
|
-
!isMobile && "lg:translate-x-0"
|
|
136
|
+
isMobile && !open && "-translate-x-full",
|
|
137
|
+
!isMobile && !collapsed && "-translate-x-full lg:translate-x-0",
|
|
138
|
+
!isMobile && collapsed && "-translate-x-full"
|
|
134
139
|
),
|
|
135
140
|
children: /* @__PURE__ */ jsxs("div", { className: "relative flex-1 overflow-hidden", children: [
|
|
136
141
|
showTopFade ? /* @__PURE__ */ jsx("div", { className: "absolute top-0 left-0 right-0 h-8 bg-gradient-to-b from-background to-transparent pointer-events-none z-20" }) : null,
|
|
@@ -138,7 +143,7 @@ function Sidebar({ sections }) {
|
|
|
138
143
|
/* @__PURE__ */ jsx(
|
|
139
144
|
"nav",
|
|
140
145
|
{
|
|
141
|
-
className: "flex-1 p-4 overflow-y-auto h-full",
|
|
146
|
+
className: "flex-1 p-4 overflow-y-auto overscroll-contain h-full [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
|
|
142
147
|
ref: scrollContainerReference,
|
|
143
148
|
children: /* @__PURE__ */ jsx("div", { className: "space-y-4", children: sections.map((section, sectionIndex) => {
|
|
144
149
|
const sectionItems = /* @__PURE__ */ jsx("div", { className: section.title ? "space-y-0.5" : "space-y-1", children: section.items.map((item) => /* @__PURE__ */ jsx(
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { Menu, X } from "lucide-react";
|
|
4
4
|
import { cn } from "../../lib/utils";
|
|
5
|
-
import { Button } from "../button";
|
|
5
|
+
import { Button } from "../button/button";
|
|
6
6
|
function SidebarToggle({
|
|
7
7
|
className,
|
|
8
8
|
onToggle,
|
|
@@ -12,21 +12,23 @@ function SidebarToggle({
|
|
|
12
12
|
/* @__PURE__ */ jsx(
|
|
13
13
|
Button,
|
|
14
14
|
{
|
|
15
|
+
"aria-label": open ? "Close menu" : "Open menu",
|
|
15
16
|
className: cn("lg:hidden", className),
|
|
16
17
|
onClick: onToggle,
|
|
17
18
|
size: "icon",
|
|
18
19
|
variant: "ghost",
|
|
19
|
-
children: open ? /* @__PURE__ */ jsx(X, { className: "
|
|
20
|
+
children: open ? /* @__PURE__ */ jsx(X, { className: "size-5" }) : /* @__PURE__ */ jsx(Menu, { className: "size-5" })
|
|
20
21
|
}
|
|
21
22
|
),
|
|
22
23
|
/* @__PURE__ */ jsx(
|
|
23
24
|
Button,
|
|
24
25
|
{
|
|
26
|
+
"aria-label": "Toggle sidebar",
|
|
25
27
|
className: cn("hidden lg:flex", className),
|
|
26
28
|
onClick: onToggle,
|
|
27
29
|
size: "icon",
|
|
28
30
|
variant: "ghost",
|
|
29
|
-
children: /* @__PURE__ */ jsx(Menu, { className: "
|
|
31
|
+
children: /* @__PURE__ */ jsx(Menu, { className: "size-5" })
|
|
30
32
|
}
|
|
31
33
|
)
|
|
32
34
|
] });
|
|
@@ -14,7 +14,7 @@ const Slider = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsxs
|
|
|
14
14
|
...props,
|
|
15
15
|
children: [
|
|
16
16
|
/* @__PURE__ */ jsx(SliderPrimitive.Track, { className: "relative h-2 w-full grow overflow-hidden rounded-full bg-secondary", children: /* @__PURE__ */ jsx(SliderPrimitive.Range, { className: "absolute h-full bg-primary" }) }),
|
|
17
|
-
/* @__PURE__ */ jsx(SliderPrimitive.Thumb, { className: "block
|
|
17
|
+
/* @__PURE__ */ jsx(SliderPrimitive.Thumb, { className: "block size-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50" })
|
|
18
18
|
]
|
|
19
19
|
}
|
|
20
20
|
));
|
|
@@ -4,7 +4,7 @@ import { memo, useCallback, useEffect, useState } from "react";
|
|
|
4
4
|
import { createPortal } from "react-dom";
|
|
5
5
|
import { useMounted } from "../../lib/use-mounted";
|
|
6
6
|
import { cn } from "../../lib/utils";
|
|
7
|
-
import { CompletionDialog } from "../completion-dialog";
|
|
7
|
+
import { CompletionDialog } from "../completion-dialog/completion-dialog";
|
|
8
8
|
const DEFAULT_LABELS = {
|
|
9
9
|
closeLabel: "Close",
|
|
10
10
|
closeTocLabel: "Close table of contents",
|
|
@@ -15,11 +15,13 @@ const DEFAULT_LABELS = {
|
|
|
15
15
|
prevLabel: "Prev",
|
|
16
16
|
sectionsLabel: "Sections"
|
|
17
17
|
};
|
|
18
|
+
const EMPTY_SLIDESHOW_LABELS = {};
|
|
18
19
|
function SlideshowImpl({
|
|
20
|
+
as: SectionsHeading = "h3",
|
|
19
21
|
completedSections,
|
|
20
22
|
completionDialogTitle = "Mark section as complete?",
|
|
21
23
|
currentIndex,
|
|
22
|
-
labels =
|
|
24
|
+
labels = EMPTY_SLIDESHOW_LABELS,
|
|
23
25
|
onComplete,
|
|
24
26
|
onExit,
|
|
25
27
|
onNavigate,
|
|
@@ -145,7 +147,7 @@ function SlideshowImpl({
|
|
|
145
147
|
children: isTocOpen ? /* @__PURE__ */ jsx(
|
|
146
148
|
"svg",
|
|
147
149
|
{
|
|
148
|
-
className: "
|
|
150
|
+
className: "size-5",
|
|
149
151
|
fill: "none",
|
|
150
152
|
stroke: "currentColor",
|
|
151
153
|
viewBox: "0 0 24 24",
|
|
@@ -162,7 +164,7 @@ function SlideshowImpl({
|
|
|
162
164
|
) : /* @__PURE__ */ jsx(
|
|
163
165
|
"svg",
|
|
164
166
|
{
|
|
165
|
-
className: "
|
|
167
|
+
className: "size-5",
|
|
166
168
|
fill: "none",
|
|
167
169
|
stroke: "currentColor",
|
|
168
170
|
viewBox: "0 0 24 24",
|
|
@@ -200,7 +202,7 @@ function SlideshowImpl({
|
|
|
200
202
|
children: /* @__PURE__ */ jsx(
|
|
201
203
|
"svg",
|
|
202
204
|
{
|
|
203
|
-
className: "
|
|
205
|
+
className: "size-5",
|
|
204
206
|
fill: "none",
|
|
205
207
|
stroke: "currentColor",
|
|
206
208
|
viewBox: "0 0 24 24",
|
|
@@ -248,7 +250,7 @@ function SlideshowImpl({
|
|
|
248
250
|
role: "dialog",
|
|
249
251
|
children: [
|
|
250
252
|
/* @__PURE__ */ jsxs("div", { className: "sticky top-0 flex items-center justify-between px-4 py-3 border-b border-border bg-background", children: [
|
|
251
|
-
/* @__PURE__ */ jsx(
|
|
253
|
+
/* @__PURE__ */ jsx(SectionsHeading, { className: "font-semibold", children: mergedLabels.sectionsLabel }),
|
|
252
254
|
/* @__PURE__ */ jsx(
|
|
253
255
|
"button",
|
|
254
256
|
{
|
|
@@ -261,7 +263,7 @@ function SlideshowImpl({
|
|
|
261
263
|
children: /* @__PURE__ */ jsx(
|
|
262
264
|
"svg",
|
|
263
265
|
{
|
|
264
|
-
className: "
|
|
266
|
+
className: "size-4",
|
|
265
267
|
fill: "none",
|
|
266
268
|
stroke: "currentColor",
|
|
267
269
|
viewBox: "0 0 24 24",
|
|
@@ -298,13 +300,13 @@ function SlideshowImpl({
|
|
|
298
300
|
"div",
|
|
299
301
|
{
|
|
300
302
|
className: cn(
|
|
301
|
-
"flex-shrink-0
|
|
303
|
+
"flex-shrink-0 size-5 rounded-full border-2 flex items-center justify-center",
|
|
302
304
|
isCompleted ? "bg-foreground border-foreground" : "border-muted-foreground"
|
|
303
305
|
),
|
|
304
306
|
children: isCompleted ? /* @__PURE__ */ jsx(
|
|
305
307
|
"svg",
|
|
306
308
|
{
|
|
307
|
-
className: "
|
|
309
|
+
className: "size-3 text-background",
|
|
308
310
|
fill: "none",
|
|
309
311
|
stroke: "currentColor",
|
|
310
312
|
viewBox: "0 0 24 24",
|
|
@@ -333,7 +335,7 @@ function SlideshowImpl({
|
|
|
333
335
|
)
|
|
334
336
|
]
|
|
335
337
|
},
|
|
336
|
-
|
|
338
|
+
section.id
|
|
337
339
|
);
|
|
338
340
|
}) })
|
|
339
341
|
]
|
|
@@ -355,7 +357,7 @@ function SlideshowImpl({
|
|
|
355
357
|
}
|
|
356
358
|
) }) })
|
|
357
359
|
] }),
|
|
358
|
-
/* @__PURE__ */ jsxs("div", { className: "relative z-20 flex items-center justify-between
|
|
360
|
+
/* @__PURE__ */ jsxs("div", { className: "relative z-20 flex items-center justify-between p-4 border-t border-border bg-background", children: [
|
|
359
361
|
/* @__PURE__ */ jsxs(
|
|
360
362
|
"button",
|
|
361
363
|
{
|
|
@@ -367,7 +369,7 @@ function SlideshowImpl({
|
|
|
367
369
|
/* @__PURE__ */ jsx(
|
|
368
370
|
"svg",
|
|
369
371
|
{
|
|
370
|
-
className: "
|
|
372
|
+
className: "size-4",
|
|
371
373
|
fill: "none",
|
|
372
374
|
stroke: "currentColor",
|
|
373
375
|
viewBox: "0 0 24 24",
|
|
@@ -397,7 +399,7 @@ function SlideshowImpl({
|
|
|
397
399
|
!isLastSection && /* @__PURE__ */ jsx(
|
|
398
400
|
"svg",
|
|
399
401
|
{
|
|
400
|
-
className: "
|
|
402
|
+
className: "size-4",
|
|
401
403
|
fill: "none",
|
|
402
404
|
stroke: "currentColor",
|
|
403
405
|
viewBox: "0 0 24 24",
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef } from "react";
|
|
4
|
+
import { cn } from "../../lib/utils";
|
|
5
|
+
const DEFAULT_LABELS = {
|
|
6
|
+
region: "Snap guides"
|
|
7
|
+
};
|
|
8
|
+
const SnapGuides = forwardRef(
|
|
9
|
+
(props, ref) => {
|
|
10
|
+
const { className, guides, labels, ...rest } = props;
|
|
11
|
+
const resolvedLabels = { ...DEFAULT_LABELS, ...labels };
|
|
12
|
+
return /* @__PURE__ */ jsx(
|
|
13
|
+
"div",
|
|
14
|
+
{
|
|
15
|
+
"aria-label": resolvedLabels.region,
|
|
16
|
+
className: cn("pointer-events-none absolute inset-0 z-30", className),
|
|
17
|
+
"data-snap-guide-count": guides.length,
|
|
18
|
+
ref,
|
|
19
|
+
...rest,
|
|
20
|
+
children: guides.map((guide) => {
|
|
21
|
+
const isVertical = guide.orientation === "vertical";
|
|
22
|
+
const offset = isVertical ? guide.x : guide.y;
|
|
23
|
+
return /* @__PURE__ */ jsx(
|
|
24
|
+
"span",
|
|
25
|
+
{
|
|
26
|
+
"aria-hidden": "true",
|
|
27
|
+
className: cn(
|
|
28
|
+
"absolute border-primary/70",
|
|
29
|
+
isVertical ? "inset-y-0 w-px border-l border-dashed" : "inset-x-0 h-px border-t border-dashed"
|
|
30
|
+
),
|
|
31
|
+
"data-snap-guide-id": guide.id,
|
|
32
|
+
"data-snap-orientation": guide.orientation,
|
|
33
|
+
style: isVertical ? { left: `${offset.toString()}px` } : { top: `${offset.toString()}px` }
|
|
34
|
+
},
|
|
35
|
+
guide.id
|
|
36
|
+
);
|
|
37
|
+
})
|
|
38
|
+
}
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
);
|
|
42
|
+
SnapGuides.displayName = "SnapGuides";
|
|
43
|
+
export {
|
|
44
|
+
SnapGuides
|
|
45
|
+
};
|
|
@@ -7,15 +7,15 @@ function ShareMenu({
|
|
|
7
7
|
onPlatformSelect,
|
|
8
8
|
platforms
|
|
9
9
|
}) {
|
|
10
|
-
return /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-0.5 rounded-md border border-
|
|
11
|
-
const
|
|
10
|
+
return /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-0.5 rounded-md border border-zinc-300 bg-background p-1.5 shadow-md dark:border-zinc-600", children: platforms.map((p) => {
|
|
11
|
+
const handleSelectSharePlatform = () => {
|
|
12
12
|
onPlatformSelect(p.key);
|
|
13
13
|
};
|
|
14
14
|
return /* @__PURE__ */ jsx(
|
|
15
15
|
"button",
|
|
16
16
|
{
|
|
17
17
|
className: "rounded px-3 py-1.5 text-left text-sm text-muted-foreground transition-colors hover:bg-accent hover:text-foreground",
|
|
18
|
-
onClick:
|
|
18
|
+
onClick: handleSelectSharePlatform,
|
|
19
19
|
type: "button",
|
|
20
20
|
children: p.label
|
|
21
21
|
},
|
|
@@ -24,12 +24,12 @@ function ShareMenu({
|
|
|
24
24
|
}) });
|
|
25
25
|
}
|
|
26
26
|
function ActionButton({ action }) {
|
|
27
|
-
const
|
|
27
|
+
const handleRunAction = action.onClick;
|
|
28
28
|
return /* @__PURE__ */ jsx(
|
|
29
29
|
"button",
|
|
30
30
|
{
|
|
31
31
|
className: "rounded px-3 py-1.5 text-left text-sm transition-colors hover:bg-accent",
|
|
32
|
-
onClick:
|
|
32
|
+
onClick: handleRunAction,
|
|
33
33
|
type: "button",
|
|
34
34
|
children: action.label
|
|
35
35
|
}
|
|
@@ -47,7 +47,7 @@ function ActionPanel({
|
|
|
47
47
|
const handleShareClick = shareAction?.onClick;
|
|
48
48
|
const handleShareMouseEnter = isMobile ? void 0 : onShareHover;
|
|
49
49
|
const handleShareMouseLeave = isMobile ? void 0 : onShareLeave;
|
|
50
|
-
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5 rounded-md border border-
|
|
50
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-0.5 rounded-md border border-zinc-300 bg-background p-1.5 shadow-md dark:border-zinc-600", children: [
|
|
51
51
|
shareAction ? /* @__PURE__ */ jsx(
|
|
52
52
|
"button",
|
|
53
53
|
{
|
|
@@ -69,7 +69,7 @@ function MainFabButton({
|
|
|
69
69
|
mainText,
|
|
70
70
|
onToggle
|
|
71
71
|
}) {
|
|
72
|
-
const
|
|
72
|
+
const handleToggleSharePanel = onToggle;
|
|
73
73
|
return /* @__PURE__ */ jsx(
|
|
74
74
|
"button",
|
|
75
75
|
{
|
|
@@ -77,11 +77,11 @@ function MainFabButton({
|
|
|
77
77
|
"aria-label": isExpanded ? labels.close : labels.share,
|
|
78
78
|
className: cn(
|
|
79
79
|
"flex size-10 items-center justify-center rounded-md",
|
|
80
|
-
"border border-
|
|
80
|
+
"border border-zinc-300 bg-background dark:border-zinc-600",
|
|
81
81
|
"transition-all duration-200 ease-out",
|
|
82
|
-
"hover:-translate-y-0.5 hover:border-
|
|
82
|
+
"hover:-translate-y-0.5 hover:border-zinc-400 hover:shadow-md dark:hover:border-zinc-500"
|
|
83
83
|
),
|
|
84
|
-
onClick:
|
|
84
|
+
onClick: handleToggleSharePanel,
|
|
85
85
|
type: "button",
|
|
86
86
|
children: /* @__PURE__ */ jsx("span", { className: "text-sm font-mono", children: isMobile && isExpanded ? "\u2715" : mainText })
|
|
87
87
|
}
|
|
@@ -140,6 +140,7 @@ function ExpandedPanel({
|
|
|
140
140
|
}
|
|
141
141
|
);
|
|
142
142
|
}
|
|
143
|
+
const EMPTY_SHARE_PLATFORMS = [];
|
|
143
144
|
function SocialFAB({
|
|
144
145
|
actions,
|
|
145
146
|
bottomOffset = 24,
|
|
@@ -150,7 +151,7 @@ function SocialFAB({
|
|
|
150
151
|
onClose,
|
|
151
152
|
onOpen,
|
|
152
153
|
rightOffset = 24,
|
|
153
|
-
sharePlatforms =
|
|
154
|
+
sharePlatforms = EMPTY_SHARE_PLATFORMS
|
|
154
155
|
}) {
|
|
155
156
|
const options = { onAction, onClose, onOpen };
|
|
156
157
|
const fab = useSocialFab(options);
|
|
@@ -49,7 +49,7 @@ const SparklineGrid = React.forwardRef(({ className, columns = 2, items, ...prop
|
|
|
49
49
|
isPositive ? "border-emerald-500/30 bg-emerald-500/10 text-emerald-600 dark:text-emerald-400" : "border-rose-500/30 bg-rose-500/10 text-rose-600 dark:text-rose-400"
|
|
50
50
|
),
|
|
51
51
|
children: [
|
|
52
|
-
/* @__PURE__ */ jsx(TrendIcon, { className: "
|
|
52
|
+
/* @__PURE__ */ jsx(TrendIcon, { className: "size-3.5" }),
|
|
53
53
|
item.change > 0 ? "+" : "",
|
|
54
54
|
item.change.toFixed(2),
|
|
55
55
|
"%"
|
|
@@ -7,14 +7,14 @@ function Spinner({ className, size = "md", ...props }) {
|
|
|
7
7
|
className: cn(
|
|
8
8
|
"animate-spin rounded-full border-2 border-current border-t-transparent",
|
|
9
9
|
{
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
10
|
+
"size-4": size === "sm",
|
|
11
|
+
"size-6": size === "md",
|
|
12
|
+
"size-8": size === "lg"
|
|
13
13
|
},
|
|
14
14
|
className
|
|
15
15
|
),
|
|
16
16
|
...props,
|
|
17
|
-
children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Loading
|
|
17
|
+
children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: "Loading\u2026" })
|
|
18
18
|
}
|
|
19
19
|
);
|
|
20
20
|
}
|