@refraction-ui/react 0.19.1 → 0.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-533MCMSU.js +2355 -0
- package/dist/chunk-533MCMSU.js.map +7 -0
- package/dist/chunk-AMK4VCBG.js +250 -0
- package/dist/chunk-AMK4VCBG.js.map +7 -0
- package/dist/chunk-BOLFYVI6.js +90 -0
- package/dist/chunk-BOLFYVI6.js.map +7 -0
- package/dist/chunk-F7B64KT3.js +187 -0
- package/dist/chunk-F7B64KT3.js.map +7 -0
- package/dist/chunk-FD37DFCC.js +77 -0
- package/dist/chunk-FD37DFCC.js.map +7 -0
- package/dist/chunk-H54FLNAF.js +132 -0
- package/dist/chunk-H54FLNAF.js.map +7 -0
- package/dist/chunk-INP46354.js +664 -0
- package/dist/chunk-INP46354.js.map +7 -0
- package/dist/chunk-ONACRMG4.js +116 -0
- package/dist/chunk-ONACRMG4.js.map +7 -0
- package/dist/chunk-SDZ3LROZ.js +7 -0
- package/dist/chunk-SDZ3LROZ.js.map +7 -0
- package/dist/chunk-TOZBR4GL.js +154 -0
- package/dist/chunk-TOZBR4GL.js.map +7 -0
- package/dist/chunk-UNEM2TRI.js +225 -0
- package/dist/chunk-UNEM2TRI.js.map +7 -0
- package/dist/chunk-VK3EQ34F.js +92 -0
- package/dist/chunk-VK3EQ34F.js.map +7 -0
- package/dist/chunk-WK2IIUFO.js +316 -0
- package/dist/chunk-WK2IIUFO.js.map +7 -0
- package/dist/chunk-WSPJTQAV.js +59 -0
- package/dist/chunk-WSPJTQAV.js.map +7 -0
- package/dist/chunk-XWP763SH.js +3 -2
- package/dist/chunk-XWP763SH.js.map +7 -1
- package/dist/chunk-Y2FNNAIL.js +80 -0
- package/dist/chunk-Y2FNNAIL.js.map +1 -0
- package/dist/{chunk-4A4BW3GR.js → chunk-ZF3OHCGV.js} +28 -5
- package/dist/chunk-ZF3OHCGV.js.map +7 -0
- package/dist/form.cjs +5 -11
- package/dist/form.cjs.map +1 -1
- package/dist/form.js +6 -12
- package/dist/form.js.map +1 -1
- package/dist/index.cjs +2879 -33936
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +126 -28780
- package/dist/internal/react-app-shell/index.d.cts +2 -22
- package/dist/internal/react-app-shell/index.d.ts +2 -22
- package/dist/internal/react-badge/index.d.cts +5 -0
- package/dist/internal/react-badge/index.d.ts +5 -0
- package/dist/internal/react-callout/index.d.cts +4 -0
- package/dist/internal/react-callout/index.d.ts +4 -0
- package/dist/internal/react-card/index.d.cts +8 -1
- package/dist/internal/react-card/index.d.ts +8 -1
- package/dist/internal/react-collapsible/index.d.cts +0 -3
- package/dist/internal/react-collapsible/index.d.ts +0 -3
- package/dist/internal/react-combobox/index.d.cts +0 -3
- package/dist/internal/react-combobox/index.d.ts +0 -3
- package/dist/internal/react-command/index.d.cts +0 -3
- package/dist/internal/react-command/index.d.ts +0 -3
- package/dist/internal/react-data-table/index.d.cts +0 -3
- package/dist/internal/react-data-table/index.d.ts +0 -3
- package/dist/internal/react-dialog/index.d.cts +0 -3
- package/dist/internal/react-dialog/index.d.ts +0 -3
- package/dist/internal/react-dropdown-menu/index.d.cts +0 -3
- package/dist/internal/react-dropdown-menu/index.d.ts +0 -3
- package/dist/internal/react-feedback-dialog/index.d.cts +0 -3
- package/dist/internal/react-feedback-dialog/index.d.ts +0 -3
- package/dist/internal/react-form/index.d.cts +2 -21
- package/dist/internal/react-form/index.d.ts +2 -21
- package/dist/internal/react-keyboard-shortcut/index.d.cts +0 -6
- package/dist/internal/react-keyboard-shortcut/index.d.ts +0 -6
- package/dist/internal/react-link-card/index.d.cts +8 -2
- package/dist/internal/react-link-card/index.d.ts +8 -2
- package/dist/internal/react-popover/index.d.cts +0 -3
- package/dist/internal/react-popover/index.d.ts +0 -3
- package/dist/internal/react-sheet/index.d.cts +0 -3
- package/dist/internal/react-sheet/index.d.ts +0 -3
- package/dist/internal/react-slot/index.d.cts +23 -0
- package/dist/internal/react-slot/index.d.ts +23 -0
- package/dist/internal/react-toast/index.d.cts +0 -3
- package/dist/internal/react-toast/index.d.ts +0 -3
- package/dist/internal/react-tooltip/index.d.cts +0 -3
- package/dist/internal/react-tooltip/index.d.ts +0 -3
- package/dist/react-accordion.js +125 -0
- package/dist/react-accordion.js.map +7 -0
- package/dist/react-ai.js +257 -0
- package/dist/react-ai.js.map +7 -0
- package/dist/react-analytics.js +1698 -0
- package/dist/react-analytics.js.map +7 -0
- package/dist/react-animated-text.js +164 -0
- package/dist/react-animated-text.js.map +7 -0
- package/dist/react-app-shell.js +631 -0
- package/dist/react-app-shell.js.map +7 -0
- package/dist/react-audience-feature-card.js +53 -0
- package/dist/react-audience-feature-card.js.map +7 -0
- package/dist/react-audio-room.js +166 -0
- package/dist/react-audio-room.js.map +7 -0
- package/dist/react-auth.js +211 -0
- package/dist/react-auth.js.map +7 -0
- package/dist/react-avatar-group.js +154 -0
- package/dist/react-avatar-group.js.map +7 -0
- package/dist/react-avatar.js +168 -0
- package/dist/react-avatar.js.map +7 -0
- package/dist/react-badge.js +86 -0
- package/dist/react-badge.js.map +7 -0
- package/dist/react-bottom-nav.js +67 -0
- package/dist/react-bottom-nav.js.map +7 -0
- package/dist/react-brand-network-cell.js +92 -0
- package/dist/react-brand-network-cell.js.map +7 -0
- package/dist/react-breadcrumbs.js +104 -0
- package/dist/react-breadcrumbs.js.map +7 -0
- package/dist/react-browser-chrome-mock.js +89 -0
- package/dist/react-browser-chrome-mock.js.map +7 -0
- package/dist/react-button.js +13 -0
- package/dist/react-button.js.map +7 -0
- package/dist/react-calendar.js +301 -0
- package/dist/react-calendar.js.map +7 -0
- package/dist/react-call-controls.js +113 -0
- package/dist/react-call-controls.js.map +7 -0
- package/dist/react-callout.js +152 -0
- package/dist/react-callout.js.map +7 -0
- package/dist/react-card-grid.js +34 -0
- package/dist/react-card-grid.js.map +7 -0
- package/dist/react-card.js +200 -0
- package/dist/react-card.js.map +7 -0
- package/dist/react-carousel.js +132 -0
- package/dist/react-carousel.js.map +7 -0
- package/dist/react-charts.js +509 -0
- package/dist/react-charts.js.map +7 -0
- package/dist/react-checkbox.js +156 -0
- package/dist/react-checkbox.js.map +7 -0
- package/dist/react-checklist.js +168 -0
- package/dist/react-checklist.js.map +7 -0
- package/dist/react-code-block.js +78 -0
- package/dist/react-code-block.js.map +7 -0
- package/dist/react-code-editor.js +184 -0
- package/dist/react-code-editor.js.map +7 -0
- package/dist/react-collapsible.js +192 -0
- package/dist/react-collapsible.js.map +7 -0
- package/dist/react-combobox.js +609 -0
- package/dist/react-combobox.js.map +7 -0
- package/dist/react-command-input.js +202 -0
- package/dist/react-command-input.js.map +7 -0
- package/dist/react-command.js +364 -0
- package/dist/react-command.js.map +7 -0
- package/dist/react-composer.js +2036 -0
- package/dist/react-composer.js.map +7 -0
- package/dist/react-content-protection.js +133 -0
- package/dist/react-content-protection.js.map +7 -0
- package/dist/react-conversation.js +1226 -0
- package/dist/react-conversation.js.map +7 -0
- package/dist/react-cookie-consent.js +291 -0
- package/dist/react-cookie-consent.js.map +7 -0
- package/dist/react-data-table.js +310 -0
- package/dist/react-data-table.js.map +7 -0
- package/dist/react-date-picker.js +95 -0
- package/dist/react-date-picker.js.map +7 -0
- package/dist/react-device-frame.js +137 -0
- package/dist/react-device-frame.js.map +7 -0
- package/dist/react-dialog.js +218 -0
- package/dist/react-dialog.js.map +7 -0
- package/dist/react-diff-viewer.js +460 -0
- package/dist/react-diff-viewer.js.map +7 -0
- package/dist/react-dropdown-menu.js +292 -0
- package/dist/react-dropdown-menu.js.map +7 -0
- package/dist/react-editor-status-bar.js +148 -0
- package/dist/react-editor-status-bar.js.map +7 -0
- package/dist/react-editor-tabs.js +159 -0
- package/dist/react-editor-tabs.js.map +7 -0
- package/dist/react-emoji-picker.js +238 -0
- package/dist/react-emoji-picker.js.map +7 -0
- package/dist/react-empty-state.js +90 -0
- package/dist/react-empty-state.js.map +7 -0
- package/dist/react-feedback-dialog.js +275 -0
- package/dist/react-feedback-dialog.js.map +7 -0
- package/dist/react-file-tree.js +376 -0
- package/dist/react-file-tree.js.map +7 -0
- package/dist/react-file-upload.js +360 -0
- package/dist/react-file-upload.js.map +7 -0
- package/dist/react-floating-reactions.js +124 -0
- package/dist/react-floating-reactions.js.map +7 -0
- package/dist/react-flow-editor.js +198 -0
- package/dist/react-flow-editor.js.map +7 -0
- package/dist/react-footer.js +67 -0
- package/dist/react-footer.js.map +7 -0
- package/dist/react-graph-view.js +197 -0
- package/dist/react-graph-view.js.map +7 -0
- package/dist/react-icon-system.js +9 -0
- package/dist/react-icon-system.js.map +7 -0
- package/dist/react-infinite-canvas.js +8 -0
- package/dist/react-infinite-canvas.js.map +7 -0
- package/dist/react-inline-editor.js +216 -0
- package/dist/react-inline-editor.js.map +7 -0
- package/dist/react-input-group.js +150 -0
- package/dist/react-input-group.js.map +7 -0
- package/dist/react-input.js +10 -0
- package/dist/react-input.js.map +7 -0
- package/dist/react-install-prompt.js +132 -0
- package/dist/react-install-prompt.js.map +7 -0
- package/dist/react-kanban-board.js +198 -0
- package/dist/react-kanban-board.js.map +7 -0
- package/dist/react-keyboard-shortcut.js +36 -0
- package/dist/react-keyboard-shortcut.js.map +7 -0
- package/dist/react-language-selector.js +311 -0
- package/dist/react-language-selector.js.map +7 -0
- package/dist/react-link-card.js +48 -0
- package/dist/react-link-card.js.map +7 -0
- package/dist/react-live-captions.js +92 -0
- package/dist/react-live-captions.js.map +7 -0
- package/dist/react-live-cursors.js +145 -0
- package/dist/react-live-cursors.js.map +7 -0
- package/dist/react-live-transcript.js +117 -0
- package/dist/react-live-transcript.js.map +7 -0
- package/dist/react-location-selector.js +252 -0
- package/dist/react-location-selector.js.map +7 -0
- package/dist/react-logger.js +415 -0
- package/dist/react-logger.js.map +7 -0
- package/dist/react-markdown-renderer.js +12 -0
- package/dist/react-markdown-renderer.js.map +7 -0
- package/dist/react-marquee-strip.js +62 -0
- package/dist/react-marquee-strip.js.map +7 -0
- package/dist/react-mascot.js +367 -0
- package/dist/react-mascot.js.map +7 -0
- package/dist/react-mastery-bar.js +97 -0
- package/dist/react-mastery-bar.js.map +7 -0
- package/dist/react-mini-map.js +207 -0
- package/dist/react-mini-map.js.map +7 -0
- package/dist/react-mobile-nav.js +216 -0
- package/dist/react-mobile-nav.js.map +7 -0
- package/dist/react-navbar.js +96 -0
- package/dist/react-navbar.js.map +7 -0
- package/dist/react-numbered-steps.js +67 -0
- package/dist/react-numbered-steps.js.map +7 -0
- package/dist/react-otp-input.js +318 -0
- package/dist/react-otp-input.js.map +7 -0
- package/dist/react-pagination.js +199 -0
- package/dist/react-pagination.js.map +7 -0
- package/dist/react-password-input.js +104 -0
- package/dist/react-password-input.js.map +7 -0
- package/dist/react-payment.js +81 -0
- package/dist/react-payment.js.map +7 -0
- package/dist/react-popover.js +176 -0
- package/dist/react-popover.js.map +7 -0
- package/dist/react-pre-call-lobby.js +309 -0
- package/dist/react-pre-call-lobby.js.map +7 -0
- package/dist/react-presence-indicator.js +86 -0
- package/dist/react-presence-indicator.js.map +7 -0
- package/dist/react-pricing-card.js +142 -0
- package/dist/react-pricing-card.js.map +7 -0
- package/dist/react-progress-display.js +188 -0
- package/dist/react-progress-display.js.map +7 -0
- package/dist/react-radial-gauge.js +193 -0
- package/dist/react-radial-gauge.js.map +7 -0
- package/dist/react-radio.js +169 -0
- package/dist/react-radio.js.map +7 -0
- package/dist/react-rating-scale.js +171 -0
- package/dist/react-rating-scale.js.map +7 -0
- package/dist/react-reaction-bar.js +111 -0
- package/dist/react-reaction-bar.js.map +7 -0
- package/dist/react-resizable-layout.js +298 -0
- package/dist/react-resizable-layout.js.map +7 -0
- package/dist/react-rich-editor.js +1 -0
- package/dist/react-rich-editor.js.map +7 -0
- package/dist/react-search-bar.js +285 -0
- package/dist/react-search-bar.js.map +7 -0
- package/dist/react-section-head.js +65 -0
- package/dist/react-section-head.js.map +7 -0
- package/dist/react-segmented-control.js +215 -0
- package/dist/react-segmented-control.js.map +7 -0
- package/dist/react-select.js +389 -0
- package/dist/react-select.js.map +7 -0
- package/dist/react-separator.js +86 -0
- package/dist/react-separator.js.map +7 -0
- package/dist/react-sheet.js +310 -0
- package/dist/react-sheet.js.map +7 -0
- package/dist/react-sidebar.js +100 -0
- package/dist/react-sidebar.js.map +7 -0
- package/dist/react-skeleton.js +91 -0
- package/dist/react-skeleton.js.map +7 -0
- package/dist/react-skip-to-content.js +38 -0
- package/dist/react-skip-to-content.js.map +7 -0
- package/dist/react-slide-viewer.js +264 -0
- package/dist/react-slide-viewer.js.map +7 -0
- package/dist/react-slider.js +105 -0
- package/dist/react-slider.js.map +7 -0
- package/dist/react-slot-picker.js +184 -0
- package/dist/react-slot-picker.js.map +7 -0
- package/dist/react-slot.js +7 -0
- package/dist/react-slot.js.map +7 -0
- package/dist/react-social-auth-button.js +169 -0
- package/dist/react-social-auth-button.js.map +7 -0
- package/dist/react-sortable-list.js +204 -0
- package/dist/react-sortable-list.js.map +7 -0
- package/dist/react-stat-grid.js +69 -0
- package/dist/react-stat-grid.js.map +7 -0
- package/dist/react-status-indicator.js +117 -0
- package/dist/react-status-indicator.js.map +7 -0
- package/dist/react-steps.js +167 -0
- package/dist/react-steps.js.map +7 -0
- package/dist/react-sticky-note.js +131 -0
- package/dist/react-sticky-note.js.map +7 -0
- package/dist/react-switch.js +139 -0
- package/dist/react-switch.js.map +7 -0
- package/dist/react-table-of-contents.js +80 -0
- package/dist/react-table-of-contents.js.map +7 -0
- package/dist/react-tabs.js +230 -0
- package/dist/react-tabs.js.map +7 -0
- package/dist/react-terminal.js +101 -0
- package/dist/react-terminal.js.map +7 -0
- package/dist/react-test-results.js +158 -0
- package/dist/react-test-results.js.map +7 -0
- package/dist/react-textarea.js +89 -0
- package/dist/react-textarea.js.map +7 -0
- package/dist/react-thread-view.js +139 -0
- package/dist/react-thread-view.js.map +7 -0
- package/dist/react-timeline.js +153 -0
- package/dist/react-timeline.js.map +7 -0
- package/dist/react-toast.js +253 -0
- package/dist/react-toast.js.map +7 -0
- package/dist/react-tooltip.js +221 -0
- package/dist/react-tooltip.js.map +7 -0
- package/dist/react-version-selector.js +270 -0
- package/dist/react-version-selector.js.map +7 -0
- package/dist/react-video-grid.js +129 -0
- package/dist/react-video-grid.js.map +7 -0
- package/dist/react-video-player.js +206 -0
- package/dist/react-video-player.js.map +7 -0
- package/dist/react-video-tile.js +8 -0
- package/dist/react-video-tile.js.map +7 -0
- package/dist/react-voice-pill.js +314 -0
- package/dist/react-voice-pill.js.map +7 -0
- package/dist/react-waveform.js +558 -0
- package/dist/react-waveform.js.map +7 -0
- package/dist/react-wizard.js +337 -0
- package/dist/react-wizard.js.map +7 -0
- package/dist/styles.css +7 -0
- package/dist/theme.js +1 -1
- package/package.json +3 -2
- package/dist/applicationinsights-web-H7OBLIVJ.js +0 -23393
- package/dist/applicationinsights-web-H7OBLIVJ.js.map +0 -1
- package/dist/chunk-4A4BW3GR.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/module-X3HTTRQK.js +0 -6438
- package/dist/module-X3HTTRQK.js.map +0 -1
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Input
|
|
3
|
+
} from "./chunk-TOZBR4GL.js";
|
|
4
|
+
import {
|
|
5
|
+
cn,
|
|
6
|
+
cva
|
|
7
|
+
} from "./chunk-ZF3OHCGV.js";
|
|
8
|
+
|
|
9
|
+
// ../react-password-input/dist/index.js
|
|
10
|
+
import * as React from "react";
|
|
11
|
+
|
|
12
|
+
// ../password-input/dist/index.js
|
|
13
|
+
var DEFAULT_REVEAL_LABEL = "Show password";
|
|
14
|
+
var DEFAULT_HIDE_LABEL = "Hide password";
|
|
15
|
+
function createPasswordInput(props = {}) {
|
|
16
|
+
const {
|
|
17
|
+
revealed = false,
|
|
18
|
+
revealLabel = DEFAULT_REVEAL_LABEL,
|
|
19
|
+
hideLabel = DEFAULT_HIDE_LABEL
|
|
20
|
+
} = props;
|
|
21
|
+
return {
|
|
22
|
+
inputType: revealed ? "text" : "password",
|
|
23
|
+
toggleLabel: revealed ? hideLabel : revealLabel,
|
|
24
|
+
togglePressed: revealed
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
var passwordToggleVariants = cva({
|
|
28
|
+
base: "absolute right-2 top-1/2 flex size-7 -translate-y-1/2 items-center justify-center rounded-md text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// ../react-password-input/dist/index.js
|
|
32
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
33
|
+
var EyeIcon = /* @__PURE__ */ jsxs(
|
|
34
|
+
"svg",
|
|
35
|
+
{
|
|
36
|
+
"aria-hidden": "true",
|
|
37
|
+
viewBox: "0 0 24 24",
|
|
38
|
+
fill: "none",
|
|
39
|
+
stroke: "currentColor",
|
|
40
|
+
strokeWidth: "2",
|
|
41
|
+
strokeLinecap: "round",
|
|
42
|
+
strokeLinejoin: "round",
|
|
43
|
+
className: "size-4",
|
|
44
|
+
children: [
|
|
45
|
+
/* @__PURE__ */ jsx("path", { d: "M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z" }),
|
|
46
|
+
/* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "3" })
|
|
47
|
+
]
|
|
48
|
+
}
|
|
49
|
+
);
|
|
50
|
+
var EyeOffIcon = /* @__PURE__ */ jsxs(
|
|
51
|
+
"svg",
|
|
52
|
+
{
|
|
53
|
+
"aria-hidden": "true",
|
|
54
|
+
viewBox: "0 0 24 24",
|
|
55
|
+
fill: "none",
|
|
56
|
+
stroke: "currentColor",
|
|
57
|
+
strokeWidth: "2",
|
|
58
|
+
strokeLinecap: "round",
|
|
59
|
+
strokeLinejoin: "round",
|
|
60
|
+
className: "size-4",
|
|
61
|
+
children: [
|
|
62
|
+
/* @__PURE__ */ jsx("path", { d: "M9.88 9.88a3 3 0 1 0 4.24 4.24" }),
|
|
63
|
+
/* @__PURE__ */ jsx("path", { d: "M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68" }),
|
|
64
|
+
/* @__PURE__ */ jsx("path", { d: "M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61" }),
|
|
65
|
+
/* @__PURE__ */ jsx("line", { x1: "2", x2: "22", y1: "2", y2: "22" })
|
|
66
|
+
]
|
|
67
|
+
}
|
|
68
|
+
);
|
|
69
|
+
var PasswordInput = React.forwardRef(
|
|
70
|
+
function PasswordInput2({ revealLabel = "Show password", hideLabel = "Hide password", className, ...props }, ref) {
|
|
71
|
+
const [revealed, setRevealed] = React.useState(false);
|
|
72
|
+
const { inputType, toggleLabel, togglePressed } = createPasswordInput({
|
|
73
|
+
revealed,
|
|
74
|
+
revealLabel,
|
|
75
|
+
hideLabel
|
|
76
|
+
});
|
|
77
|
+
return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
78
|
+
/* @__PURE__ */ jsx(
|
|
79
|
+
Input,
|
|
80
|
+
{
|
|
81
|
+
ref,
|
|
82
|
+
type: inputType,
|
|
83
|
+
className: cn("pr-10", className),
|
|
84
|
+
...props
|
|
85
|
+
}
|
|
86
|
+
),
|
|
87
|
+
/* @__PURE__ */ jsx(
|
|
88
|
+
"button",
|
|
89
|
+
{
|
|
90
|
+
type: "button",
|
|
91
|
+
"aria-label": toggleLabel,
|
|
92
|
+
"aria-pressed": togglePressed,
|
|
93
|
+
onClick: () => setRevealed((v) => !v),
|
|
94
|
+
className: passwordToggleVariants(),
|
|
95
|
+
children: revealed ? EyeOffIcon : EyeIcon
|
|
96
|
+
}
|
|
97
|
+
)
|
|
98
|
+
] });
|
|
99
|
+
}
|
|
100
|
+
);
|
|
101
|
+
export {
|
|
102
|
+
PasswordInput
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=react-password-input.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../password-input/src/password-input.ts", "../../password-input/src/password-input.styles.ts", "../../react-password-input/src/password-input.tsx"],
|
|
4
|
+
"sourcesContent": ["export interface PasswordInputProps {\n /** Whether the password is currently revealed (shown as plain text). */\n revealed?: boolean\n /**\n * Accessible label for the reveal (show password) action.\n * @default 'Show password'\n */\n revealLabel?: string\n /**\n * Accessible label for the hide action.\n * @default 'Hide password'\n */\n hideLabel?: string\n}\n\nexport interface PasswordInputAPI {\n /** The `type` attribute for the underlying input given the revealed state. */\n inputType: 'text' | 'password'\n /** The accessible label for the toggle button given the revealed state. */\n toggleLabel: string\n /** The `aria-pressed` value for the toggle button. */\n togglePressed: boolean\n}\n\nexport const DEFAULT_REVEAL_LABEL = 'Show password'\nexport const DEFAULT_HIDE_LABEL = 'Hide password'\n\n/**\n * State-free password-input helper. Given a `revealed` flag (owned by the\n * framework adapter), it returns the input `type`, the toggle button's\n * accessible label, and its `aria-pressed` value. It does not hold state.\n */\nexport function createPasswordInput(props: PasswordInputProps = {}): PasswordInputAPI {\n const {\n revealed = false,\n revealLabel = DEFAULT_REVEAL_LABEL,\n hideLabel = DEFAULT_HIDE_LABEL,\n } = props\n\n return {\n inputType: revealed ? 'text' : 'password',\n toggleLabel: revealed ? hideLabel : revealLabel,\n togglePressed: revealed,\n }\n}\n", "import { cva } from '@refraction-ui/shared'\n\n/**\n * Positioning classes for the reveal/hide toggle button rendered inside a\n * password input's trailing padding. The wrapper must be `relative` and the\n * input must reserve trailing space (e.g. `pr-10`).\n */\nexport const passwordToggleVariants = cva({\n base: 'absolute right-2 top-1/2 flex size-7 -translate-y-1/2 items-center justify-center rounded-md text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n})\n", "import * as React from 'react'\nimport { Input, type InputProps } from '@refraction-ui/react-input'\nimport { createPasswordInput, passwordToggleVariants } from '@refraction-ui/password-input'\nimport { cn } from '@refraction-ui/shared'\n\nexport interface PasswordInputProps extends Omit<InputProps, 'type' | 'leadingIcon'> {\n /**\n * Accessible label for the reveal (show password) action.\n * @default 'Show password'\n */\n revealLabel?: string\n /**\n * Accessible label for the hide action.\n * @default 'Hide password'\n */\n hideLabel?: string\n}\n\nconst EyeIcon = (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"size-4\"\n >\n <path d=\"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n)\n\nconst EyeOffIcon = (\n <svg\n aria-hidden=\"true\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"size-4\"\n >\n <path d=\"M9.88 9.88a3 3 0 1 0 4.24 4.24\" />\n <path d=\"M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68\" />\n <path d=\"M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61\" />\n <line x1=\"2\" x2=\"22\" y1=\"2\" y2=\"22\" />\n </svg>\n)\n\n/**\n * PasswordInput — a password field with a built-in reveal/hide toggle.\n *\n * Wraps the styled {@link Input} from `@refraction-ui/react-input`, toggling\n * the underlying input `type` between `'password'` and `'text'`. Forwards all\n * Input props (`value`, `onChange`, `validationState`, `minLength`, …) through\n * to the underlying element, including the `ref`.\n */\nexport const PasswordInput = React.forwardRef<HTMLInputElement, PasswordInputProps>(\n function PasswordInput({ revealLabel = 'Show password', hideLabel = 'Hide password', className, ...props }, ref) {\n const [revealed, setRevealed] = React.useState(false)\n\n // The core owns the type/label/pressed derivation; React owns the toggle state.\n const { inputType, toggleLabel, togglePressed } = createPasswordInput({\n revealed,\n revealLabel,\n hideLabel,\n })\n\n return (\n <div className=\"relative\">\n <Input\n ref={ref}\n type={inputType}\n className={cn('pr-10', className)}\n {...props}\n />\n <button\n type=\"button\"\n aria-label={toggleLabel}\n aria-pressed={togglePressed}\n onClick={() => setRevealed((v) => !v)}\n className={passwordToggleVariants()}\n >\n {revealed ? EyeOffIcon : EyeIcon}\n </button>\n </div>\n )\n },\n)\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;AAwBO,IAAM,uBAAuB;AAC7B,IAAM,qBAAqB;AAO3B,SAAS,oBAAoB,QAA4B,CAAA,GAAsB;AACpF,QAAM;IACJ,WAAW;IACX,cAAc;IACd,YAAY;EAAA,IACV;AAEJ,SAAO;IACL,WAAW,WAAW,SAAS;IAC/B,aAAa,WAAW,YAAY;IACpC,eAAe;EAAA;AAEnB;ACrCO,IAAM,yBAAyB,IAAI;EACxC,MAAM;AACR,CAAC;;;;ACSD,IAAM,UACJ;EAAC;EAAA;IACC,eAAY;IACZ,SAAQ;IACR,MAAK;IACL,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf,WAAU;IAEV,UAAA;MAAA,oBAAC,QAAA,EAAK,GAAE,+CAAA,CAA+C;MAAA,oBACtD,UAAA,EAAO,IAAG,MAAK,IAAG,MAAK,GAAE,IAAA,CAAI;IAAA;EAAA;AAChC;AAGF,IAAM,aACJ;EAAC;EAAA;IACC,eAAY;IACZ,SAAQ;IACR,MAAK;IACL,QAAO;IACP,aAAY;IACZ,eAAc;IACd,gBAAe;IACf,WAAU;IAEV,UAAA;MAAA,oBAAC,QAAA,EAAK,GAAE,iCAAA,CAAiC;MACzC,oBAAC,QAAA,EAAK,GAAE,+EAAA,CAA+E;MACvF,oBAAC,QAAA,EAAK,GAAE,yEAAA,CAAyE;MACjF,oBAAC,QAAA,EAAK,IAAG,KAAI,IAAG,MAAK,IAAG,KAAI,IAAG,KAAA,CAAK;IAAA;EAAA;AACtC;AAWK,IAAM,gBAAsB;EACjC,SAASA,eAAc,EAAE,cAAc,iBAAiB,YAAY,iBAAiB,WAAW,GAAG,MAAA,GAAS,KAAK;AAC/G,UAAM,CAAC,UAAU,WAAW,IAAU,eAAS,KAAK;AAGpD,UAAM,EAAE,WAAW,aAAa,cAAA,IAAkB,oBAAoB;MACpE;MACA;MACA;IAAA,CACD;AAED,WACE,qBAAC,OAAA,EAAI,WAAU,YACb,UAAA;MAAA;QAAC;QAAA;UACC;UACA,MAAM;UACN,WAAW,GAAG,SAAS,SAAS;UAC/B,GAAG;QAAA;MAAA;MAEN;QAAC;QAAA;UACC,MAAK;UACL,cAAY;UACZ,gBAAc;UACd,SAAS,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;UACpC,WAAW,uBAAA;UAEV,UAAA,WAAW,aAAa;QAAA;MAAA;IAC3B,EAAA,CACF;EAEJ;AACF;",
|
|
6
|
+
"names": ["PasswordInput"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cn
|
|
3
|
+
} from "./chunk-ZF3OHCGV.js";
|
|
4
|
+
|
|
5
|
+
// ../react-payment/dist/index.js
|
|
6
|
+
import * as React from "react";
|
|
7
|
+
|
|
8
|
+
// ../payment/dist/index.js
|
|
9
|
+
function createPayment(props = {}) {
|
|
10
|
+
return {
|
|
11
|
+
props: {
|
|
12
|
+
...props,
|
|
13
|
+
"data-slot": "payment"
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
// ../react-payment/dist/index.js
|
|
19
|
+
import { jsx } from "react/jsx-runtime";
|
|
20
|
+
var Payment = React.forwardRef(
|
|
21
|
+
function Payment2({ className, disabled, ...props }, ref) {
|
|
22
|
+
const api = createPayment({ disabled });
|
|
23
|
+
return /* @__PURE__ */ jsx(
|
|
24
|
+
"div",
|
|
25
|
+
{
|
|
26
|
+
ref,
|
|
27
|
+
className: cn(
|
|
28
|
+
"w-full max-w-md mx-auto p-6 border border-border rounded-xl bg-card text-card-foreground shadow-sm",
|
|
29
|
+
disabled && "opacity-50 pointer-events-none",
|
|
30
|
+
className
|
|
31
|
+
),
|
|
32
|
+
...api.props,
|
|
33
|
+
...props
|
|
34
|
+
}
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
);
|
|
38
|
+
React.forwardRef(
|
|
39
|
+
function PaymentHeader2({ className, ...props }, ref) {
|
|
40
|
+
return /* @__PURE__ */ jsx("div", { ref, className: cn("mb-6 flex flex-col gap-1.5", className), ...props });
|
|
41
|
+
}
|
|
42
|
+
);
|
|
43
|
+
React.forwardRef(
|
|
44
|
+
function PaymentTitle2({ className, ...props }, ref) {
|
|
45
|
+
return /* @__PURE__ */ jsx("h3", { ref, className: cn("text-xl font-semibold leading-none tracking-tight", className), ...props });
|
|
46
|
+
}
|
|
47
|
+
);
|
|
48
|
+
React.forwardRef(
|
|
49
|
+
function PaymentDescription2({ className, ...props }, ref) {
|
|
50
|
+
return /* @__PURE__ */ jsx("p", { ref, className: cn("text-sm text-muted-foreground", className), ...props });
|
|
51
|
+
}
|
|
52
|
+
);
|
|
53
|
+
React.forwardRef(
|
|
54
|
+
function PaymentContent2({ className, ...props }, ref) {
|
|
55
|
+
return /* @__PURE__ */ jsx("div", { ref, className: cn("flex flex-col gap-4", className), ...props });
|
|
56
|
+
}
|
|
57
|
+
);
|
|
58
|
+
React.forwardRef(
|
|
59
|
+
function PaymentFooter2({ className, ...props }, ref) {
|
|
60
|
+
return /* @__PURE__ */ jsx("div", { ref, className: cn("mt-6 flex flex-col gap-3", className), ...props });
|
|
61
|
+
}
|
|
62
|
+
);
|
|
63
|
+
React.forwardRef(
|
|
64
|
+
function PaymentButton2({ className, ...props }, ref) {
|
|
65
|
+
return /* @__PURE__ */ jsx(
|
|
66
|
+
"button",
|
|
67
|
+
{
|
|
68
|
+
ref,
|
|
69
|
+
className: cn(
|
|
70
|
+
"inline-flex w-full items-center justify-center whitespace-nowrap rounded-md bg-primary px-4 py-2.5 text-sm font-medium text-primary-foreground shadow transition-colors hover:bg-primary/90 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50",
|
|
71
|
+
className
|
|
72
|
+
),
|
|
73
|
+
...props
|
|
74
|
+
}
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
);
|
|
78
|
+
export {
|
|
79
|
+
Payment
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=react-payment.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../payment/src/payment.ts", "../../react-payment/src/payment.tsx"],
|
|
4
|
+
"sourcesContent": ["export interface PaymentProps {\n disabled?: boolean;\n}\n\nexport interface PaymentAPI {\n props: PaymentProps;\n}\n\nexport function createPayment(props: PaymentProps = {}): PaymentAPI {\n return {\n props: {\n ...props,\n 'data-slot': 'payment',\n } as PaymentProps & Record<string, unknown>,\n };\n}\n", "import * as React from 'react';\nimport { createPayment, type PaymentProps as CorePaymentProps } from '@refraction-ui/payment';\nimport { cn } from '@refraction-ui/shared';\n\nexport interface PaymentProps extends React.HTMLAttributes<HTMLDivElement>, CorePaymentProps {\n disabled?: boolean;\n}\n\nexport const Payment = React.forwardRef<HTMLDivElement, PaymentProps>(\n function Payment({ className, disabled, ...props }, ref) {\n const api = createPayment({ disabled });\n\n return (\n <div\n ref={ref}\n className={cn(\n \"w-full max-w-md mx-auto p-6 border border-border rounded-xl bg-card text-card-foreground shadow-sm\",\n disabled && \"opacity-50 pointer-events-none\",\n className\n )}\n {...api.props}\n {...props}\n />\n );\n }\n);\n\nexport interface PaymentHeaderProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const PaymentHeader = React.forwardRef<HTMLDivElement, PaymentHeaderProps>(\n function PaymentHeader({ className, ...props }, ref) {\n return (\n <div ref={ref} className={cn(\"mb-6 flex flex-col gap-1.5\", className)} {...props} />\n )\n }\n);\n\nexport interface PaymentTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {}\n\nexport const PaymentTitle = React.forwardRef<HTMLHeadingElement, PaymentTitleProps>(\n function PaymentTitle({ className, ...props }, ref) {\n return (\n <h3 ref={ref} className={cn(\"text-xl font-semibold leading-none tracking-tight\", className)} {...props} />\n )\n }\n);\n\nexport interface PaymentDescriptionProps extends React.HTMLAttributes<HTMLParagraphElement> {}\n\nexport const PaymentDescription = React.forwardRef<HTMLParagraphElement, PaymentDescriptionProps>(\n function PaymentDescription({ className, ...props }, ref) {\n return (\n <p ref={ref} className={cn(\"text-sm text-muted-foreground\", className)} {...props} />\n )\n }\n);\n\nexport interface PaymentContentProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const PaymentContent = React.forwardRef<HTMLDivElement, PaymentContentProps>(\n function PaymentContent({ className, ...props }, ref) {\n return (\n <div ref={ref} className={cn(\"flex flex-col gap-4\", className)} {...props} />\n )\n }\n);\n\nexport interface PaymentFooterProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const PaymentFooter = React.forwardRef<HTMLDivElement, PaymentFooterProps>(\n function PaymentFooter({ className, ...props }, ref) {\n return (\n <div ref={ref} className={cn(\"mt-6 flex flex-col gap-3\", className)} {...props} />\n )\n }\n);\n\nexport interface PaymentButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\nexport const PaymentButton = React.forwardRef<HTMLButtonElement, PaymentButtonProps>(\n function PaymentButton({ className, ...props }, ref) {\n return (\n <button\n ref={ref}\n className={cn(\n \"inline-flex w-full items-center justify-center whitespace-nowrap rounded-md bg-primary px-4 py-2.5 text-sm font-medium text-primary-foreground shadow transition-colors hover:bg-primary/90 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50\",\n className\n )}\n {...props}\n />\n )\n }\n);\n"],
|
|
5
|
+
"mappings": ";;;;;;;;AAQO,SAAS,cAAc,QAAsB,CAAA,GAAgB;AAClE,SAAO;IACL,OAAO;MACL,GAAG;MACH,aAAa;IAAA;EACf;AAEJ;;;;ACPO,IAAM,UAAgB;EAC3B,SAASA,SAAQ,EAAE,WAAW,UAAU,GAAG,MAAA,GAAS,KAAK;AACvD,UAAM,MAAM,cAAc,EAAE,SAAA,CAAU;AAEtC,WACE;MAAC;MAAA;QACC;QACA,WAAW;UACT;UACA,YAAY;UACZ;QAAA;QAED,GAAG,IAAI;QACP,GAAG;MAAA;IAAA;EAGV;AACF;AAImC;EACjC,SAASC,eAAc,EAAE,WAAW,GAAG,MAAA,GAAS,KAAK;AACnD,WACE,oBAAC,OAAA,EAAI,KAAU,WAAW,GAAG,8BAA8B,SAAS,GAAI,GAAG,MAAA,CAAO;EAEtF;AACF;AAIkC;EAChC,SAASC,cAAa,EAAE,WAAW,GAAG,MAAA,GAAS,KAAK;AAClD,WACE,oBAAC,MAAA,EAAG,KAAU,WAAW,GAAG,qDAAqD,SAAS,GAAI,GAAG,MAAA,CAAO;EAE5G;AACF;AAIwC;EACtC,SAASC,oBAAmB,EAAE,WAAW,GAAG,MAAA,GAAS,KAAK;AACxD,WACE,oBAAC,KAAA,EAAE,KAAU,WAAW,GAAG,iCAAiC,SAAS,GAAI,GAAG,MAAA,CAAO;EAEvF;AACF;AAIoC;EAClC,SAASC,gBAAe,EAAE,WAAW,GAAG,MAAA,GAAS,KAAK;AACpD,WACE,oBAAC,OAAA,EAAI,KAAU,WAAW,GAAG,uBAAuB,SAAS,GAAI,GAAG,MAAA,CAAO;EAE/E;AACF;AAImC;EACjC,SAASC,eAAc,EAAE,WAAW,GAAG,MAAA,GAAS,KAAK;AACnD,WACE,oBAAC,OAAA,EAAI,KAAU,WAAW,GAAG,4BAA4B,SAAS,GAAI,GAAG,MAAA,CAAO;EAEpF;AACF;AAImC;EACjC,SAASC,eAAc,EAAE,WAAW,GAAG,MAAA,GAAS,KAAK;AACnD,WACE;MAAC;MAAA;QACC;QACA,WAAW;UACT;UACA;QAAA;QAED,GAAG;MAAA;IAAA;EAGV;AACF;",
|
|
6
|
+
"names": ["Payment", "PaymentHeader", "PaymentTitle", "PaymentDescription", "PaymentContent", "PaymentFooter", "PaymentButton"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Keys,
|
|
3
|
+
cn,
|
|
4
|
+
createKeyboardHandler,
|
|
5
|
+
cva,
|
|
6
|
+
devWarn,
|
|
7
|
+
generateId
|
|
8
|
+
} from "./chunk-ZF3OHCGV.js";
|
|
9
|
+
|
|
10
|
+
// ../react-popover/dist/index.js
|
|
11
|
+
import * as React from "react";
|
|
12
|
+
import { createPortal } from "react-dom";
|
|
13
|
+
|
|
14
|
+
// ../popover/dist/index.js
|
|
15
|
+
function createPopover(props = {}) {
|
|
16
|
+
const {
|
|
17
|
+
open: controlledOpen,
|
|
18
|
+
defaultOpen = false,
|
|
19
|
+
onOpenChange,
|
|
20
|
+
placement = "bottom"
|
|
21
|
+
} = props;
|
|
22
|
+
const contentId = generateId("rfr-popover");
|
|
23
|
+
let isOpen = controlledOpen ?? defaultOpen;
|
|
24
|
+
const state = { open: isOpen };
|
|
25
|
+
function setOpen(value) {
|
|
26
|
+
isOpen = value;
|
|
27
|
+
state.open = value;
|
|
28
|
+
onOpenChange?.(value);
|
|
29
|
+
}
|
|
30
|
+
const triggerProps = {
|
|
31
|
+
"aria-expanded": isOpen,
|
|
32
|
+
"aria-controls": contentId,
|
|
33
|
+
"aria-haspopup": "dialog"
|
|
34
|
+
};
|
|
35
|
+
const contentProps = {
|
|
36
|
+
role: "dialog",
|
|
37
|
+
id: contentId
|
|
38
|
+
};
|
|
39
|
+
const keyboardHandlers = {
|
|
40
|
+
[Keys.Escape]: () => {
|
|
41
|
+
setOpen(false);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
const handleKeyDown = createKeyboardHandler(keyboardHandlers);
|
|
45
|
+
return {
|
|
46
|
+
state,
|
|
47
|
+
triggerProps,
|
|
48
|
+
contentProps,
|
|
49
|
+
placement,
|
|
50
|
+
open: () => setOpen(true),
|
|
51
|
+
close: () => setOpen(false),
|
|
52
|
+
toggle: () => setOpen(!isOpen),
|
|
53
|
+
keyboardHandlers,
|
|
54
|
+
handleKeyDown
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
var popoverContentVariants = cva({
|
|
58
|
+
base: "z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none",
|
|
59
|
+
variants: {
|
|
60
|
+
side: {
|
|
61
|
+
top: "animate-slide-down-fade",
|
|
62
|
+
right: "animate-slide-left-fade",
|
|
63
|
+
bottom: "animate-slide-up-fade",
|
|
64
|
+
left: "animate-slide-right-fade"
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
defaultVariants: {
|
|
68
|
+
side: "bottom"
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
// ../react-popover/dist/index.js
|
|
73
|
+
import { jsx } from "react/jsx-runtime";
|
|
74
|
+
var PopoverContext = React.createContext(null);
|
|
75
|
+
function usePopoverContext() {
|
|
76
|
+
const ctx = React.useContext(PopoverContext);
|
|
77
|
+
if (!ctx) {
|
|
78
|
+
devWarn(
|
|
79
|
+
"react-popover/context-outside-provider",
|
|
80
|
+
"Popover compound components (PopoverTrigger/PopoverContent/etc.) must be rendered inside a <Popover>. The missing PopoverContext makes this throw."
|
|
81
|
+
);
|
|
82
|
+
throw new Error("Popover compound components must be used within <Popover>");
|
|
83
|
+
}
|
|
84
|
+
return ctx;
|
|
85
|
+
}
|
|
86
|
+
function Popover({ open: controlledOpen, defaultOpen = false, onOpenChange, placement, children }) {
|
|
87
|
+
const [internalOpen, setInternalOpen] = React.useState(controlledOpen ?? defaultOpen);
|
|
88
|
+
const isControlled = controlledOpen !== void 0;
|
|
89
|
+
const isOpen = isControlled ? controlledOpen : internalOpen;
|
|
90
|
+
const handleOpenChange = React.useCallback(
|
|
91
|
+
(value) => {
|
|
92
|
+
if (!isControlled) {
|
|
93
|
+
setInternalOpen(value);
|
|
94
|
+
}
|
|
95
|
+
onOpenChange?.(value);
|
|
96
|
+
},
|
|
97
|
+
[isControlled, onOpenChange]
|
|
98
|
+
);
|
|
99
|
+
const api = React.useMemo(
|
|
100
|
+
() => createPopover({ open: isOpen, onOpenChange: handleOpenChange, placement }),
|
|
101
|
+
[isOpen, handleOpenChange, placement]
|
|
102
|
+
);
|
|
103
|
+
const ctx = React.useMemo(
|
|
104
|
+
() => ({ api, open: isOpen, setOpen: handleOpenChange }),
|
|
105
|
+
[api, isOpen, handleOpenChange]
|
|
106
|
+
);
|
|
107
|
+
return React.createElement(PopoverContext.Provider, { value: ctx }, children);
|
|
108
|
+
}
|
|
109
|
+
var PopoverTrigger = React.forwardRef(
|
|
110
|
+
function PopoverTrigger2({ onClick, children, ...props }, ref) {
|
|
111
|
+
const { api, setOpen, open } = usePopoverContext();
|
|
112
|
+
const handleClick = (e) => {
|
|
113
|
+
setOpen(!open);
|
|
114
|
+
onClick?.(e);
|
|
115
|
+
};
|
|
116
|
+
return /* @__PURE__ */ jsx(
|
|
117
|
+
"button",
|
|
118
|
+
{
|
|
119
|
+
ref,
|
|
120
|
+
type: "button",
|
|
121
|
+
"aria-expanded": api.triggerProps["aria-expanded"],
|
|
122
|
+
"aria-controls": api.triggerProps["aria-controls"],
|
|
123
|
+
"aria-haspopup": api.triggerProps["aria-haspopup"],
|
|
124
|
+
onClick: handleClick,
|
|
125
|
+
...props,
|
|
126
|
+
children
|
|
127
|
+
}
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
);
|
|
131
|
+
var PopoverContent = React.forwardRef(
|
|
132
|
+
function PopoverContent2({ side, className, children, onKeyDown, ...props }, ref) {
|
|
133
|
+
const { api, open, setOpen } = usePopoverContext();
|
|
134
|
+
const handleKeyDown = (e) => {
|
|
135
|
+
if (e.key === "Escape") {
|
|
136
|
+
setOpen(false);
|
|
137
|
+
}
|
|
138
|
+
onKeyDown?.(e);
|
|
139
|
+
};
|
|
140
|
+
if (!open) return null;
|
|
141
|
+
const content = /* @__PURE__ */ jsx(
|
|
142
|
+
"div",
|
|
143
|
+
{
|
|
144
|
+
ref,
|
|
145
|
+
role: api.contentProps.role,
|
|
146
|
+
id: api.contentProps.id,
|
|
147
|
+
className: cn(popoverContentVariants({ side: side ?? api.placement }), className),
|
|
148
|
+
onKeyDown: handleKeyDown,
|
|
149
|
+
...props,
|
|
150
|
+
children
|
|
151
|
+
}
|
|
152
|
+
);
|
|
153
|
+
if (typeof document !== "undefined") {
|
|
154
|
+
return createPortal(content, document.body);
|
|
155
|
+
}
|
|
156
|
+
return content;
|
|
157
|
+
}
|
|
158
|
+
);
|
|
159
|
+
var PopoverClose = React.forwardRef(
|
|
160
|
+
function PopoverClose2({ onClick, children, ...props }, ref) {
|
|
161
|
+
const { setOpen } = usePopoverContext();
|
|
162
|
+
const handleClick = (e) => {
|
|
163
|
+
setOpen(false);
|
|
164
|
+
onClick?.(e);
|
|
165
|
+
};
|
|
166
|
+
return /* @__PURE__ */ jsx("button", { ref, type: "button", onClick: handleClick, ...props, children });
|
|
167
|
+
}
|
|
168
|
+
);
|
|
169
|
+
export {
|
|
170
|
+
Popover,
|
|
171
|
+
PopoverClose,
|
|
172
|
+
PopoverContent,
|
|
173
|
+
PopoverTrigger,
|
|
174
|
+
popoverContentVariants
|
|
175
|
+
};
|
|
176
|
+
//# sourceMappingURL=react-popover.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../popover/src/popover.ts", "../../popover/src/popover.styles.ts", "../../react-popover/src/popover.tsx"],
|
|
4
|
+
"sourcesContent": ["import type { AccessibilityProps, Side, KeyboardHandlerMap } from '@refraction-ui/shared'\nimport { generateId, Keys, createKeyboardHandler } from '@refraction-ui/shared'\n\nexport interface PopoverProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n placement?: Side\n}\n\nexport interface PopoverAPI {\n /** Current open state */\n state: { open: boolean }\n /** Props to spread on the trigger element */\n triggerProps: Partial<AccessibilityProps> & {\n 'aria-expanded': boolean\n 'aria-controls': string\n 'aria-haspopup': 'dialog'\n }\n /** Props to spread on the content element */\n contentProps: {\n role: 'dialog'\n id: string\n }\n /** Resolved placement */\n placement: Side\n /** Open the popover */\n open: () => void\n /** Close the popover */\n close: () => void\n /** Toggle the popover */\n toggle: () => void\n /** Keyboard handler map (Escape to close) */\n keyboardHandlers: KeyboardHandlerMap\n /** Pre-built keyboard event handler */\n handleKeyDown: (event: KeyboardEvent) => void\n}\n\nexport function createPopover(props: PopoverProps = {}): PopoverAPI {\n const {\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n placement = 'bottom',\n } = props\n\n const contentId = generateId('rfr-popover')\n\n let isOpen = controlledOpen ?? defaultOpen\n\n const state = { open: isOpen }\n\n function setOpen(value: boolean) {\n isOpen = value\n state.open = value\n onOpenChange?.(value)\n }\n\n const triggerProps = {\n 'aria-expanded': isOpen,\n 'aria-controls': contentId,\n 'aria-haspopup': 'dialog' as const,\n }\n\n const contentProps = {\n role: 'dialog' as const,\n id: contentId,\n }\n\n const keyboardHandlers: KeyboardHandlerMap = {\n [Keys.Escape]: () => {\n setOpen(false)\n },\n }\n\n const handleKeyDown = createKeyboardHandler(keyboardHandlers)\n\n return {\n state,\n triggerProps,\n contentProps,\n placement,\n open: () => setOpen(true),\n close: () => setOpen(false),\n toggle: () => setOpen(!isOpen),\n keyboardHandlers,\n handleKeyDown,\n }\n}\n", "import { cva } from '@refraction-ui/shared'\n\nexport const popoverContentVariants = cva({\n base: 'z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none',\n variants: {\n side: {\n top: 'animate-slide-down-fade',\n right: 'animate-slide-left-fade',\n bottom: 'animate-slide-up-fade',\n left: 'animate-slide-right-fade',\n },\n },\n defaultVariants: {\n side: 'bottom',\n },\n})\n", "import * as React from 'react'\nimport { createPortal } from 'react-dom'\nimport {\n createPopover,\n popoverContentVariants,\n type PopoverAPI,\n} from '@refraction-ui/popover'\nimport type { Side } from '@refraction-ui/shared'\nimport { cn, devWarn } from '@refraction-ui/shared'\n\n/* ------------------------------------------------------------------ */\n/* Context */\n/* ------------------------------------------------------------------ */\n\ninterface PopoverContextValue {\n api: PopoverAPI\n open: boolean\n setOpen: (value: boolean) => void\n}\n\nconst PopoverContext = React.createContext<PopoverContextValue | null>(null)\n\nfunction usePopoverContext(): PopoverContextValue {\n const ctx = React.useContext(PopoverContext)\n if (!ctx) {\n devWarn(\n 'react-popover/context-outside-provider',\n 'Popover compound components (PopoverTrigger/PopoverContent/etc.) must be rendered inside a <Popover>. The missing PopoverContext makes this throw.',\n )\n throw new Error('Popover compound components must be used within <Popover>')\n }\n return ctx\n}\n\n/* ------------------------------------------------------------------ */\n/* Popover (root provider) */\n/* ------------------------------------------------------------------ */\n\nexport interface PopoverProps {\n open?: boolean\n defaultOpen?: boolean\n onOpenChange?: (open: boolean) => void\n placement?: Side\n children: React.ReactNode\n}\n\nexport function Popover({ open: controlledOpen, defaultOpen = false, onOpenChange, placement, children }: PopoverProps) {\n const [internalOpen, setInternalOpen] = React.useState(controlledOpen ?? defaultOpen)\n const isControlled = controlledOpen !== undefined\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n const handleOpenChange = React.useCallback(\n (value: boolean) => {\n if (!isControlled) {\n setInternalOpen(value)\n }\n onOpenChange?.(value)\n },\n [isControlled, onOpenChange],\n )\n\n const api = React.useMemo(\n () => createPopover({ open: isOpen, onOpenChange: handleOpenChange, placement }),\n [isOpen, handleOpenChange, placement],\n )\n\n const ctx = React.useMemo<PopoverContextValue>(\n () => ({ api, open: isOpen, setOpen: handleOpenChange }),\n [api, isOpen, handleOpenChange],\n )\n\n return React.createElement(PopoverContext.Provider, { value: ctx }, children)\n}\n\n/* ------------------------------------------------------------------ */\n/* PopoverTrigger */\n/* ------------------------------------------------------------------ */\n\nexport interface PopoverTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\nexport const PopoverTrigger = React.forwardRef<HTMLButtonElement, PopoverTriggerProps>(\n function PopoverTrigger({ onClick, children, ...props }, ref) {\n const { api, setOpen, open } = usePopoverContext()\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n setOpen(!open)\n onClick?.(e)\n }\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-expanded={api.triggerProps['aria-expanded']}\n aria-controls={api.triggerProps['aria-controls']}\n aria-haspopup={api.triggerProps['aria-haspopup']}\n onClick={handleClick}\n {...props}\n >\n {children}\n </button>\n )\n },\n)\n\n/* ------------------------------------------------------------------ */\n/* PopoverContent */\n/* ------------------------------------------------------------------ */\n\nexport interface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement> {\n side?: Side\n}\n\nexport const PopoverContent = React.forwardRef<HTMLDivElement, PopoverContentProps>(\n function PopoverContent({ side, className, children, onKeyDown, ...props }, ref) {\n const { api, open, setOpen } = usePopoverContext()\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === 'Escape') {\n setOpen(false)\n }\n onKeyDown?.(e)\n }\n\n if (!open) return null\n\n const content = (\n <div\n ref={ref}\n role={api.contentProps.role}\n id={api.contentProps.id}\n className={cn(popoverContentVariants({ side: side ?? api.placement }), className)}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {children}\n </div>\n )\n\n if (typeof document !== 'undefined') {\n return createPortal(content, document.body)\n }\n\n return content\n },\n)\n\n/* ------------------------------------------------------------------ */\n/* PopoverClose */\n/* ------------------------------------------------------------------ */\n\nexport interface PopoverCloseProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\nexport const PopoverClose = React.forwardRef<HTMLButtonElement, PopoverCloseProps>(\n function PopoverClose({ onClick, children, ...props }, ref) {\n const { setOpen } = usePopoverContext()\n\n const handleClick = (e: React.MouseEvent<HTMLButtonElement>) => {\n setOpen(false)\n onClick?.(e)\n }\n\n return (\n <button ref={ref} type=\"button\" onClick={handleClick} {...props}>\n {children}\n </button>\n )\n },\n)\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["PopoverTrigger", "PopoverContent", "PopoverClose"]
|
|
7
|
+
}
|