@miethe/ui 0.2.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/CHANGELOG.md +77 -0
- package/README.md +1536 -0
- package/dist/bulk-actions/Button.d.ts +28 -0
- package/dist/bulk-actions/Button.d.ts.map +1 -0
- package/dist/bulk-actions/Button.js +45 -0
- package/dist/bulk-actions/Button.js.map +1 -0
- package/dist/bulk-actions/bulk-action-bar.d.ts +91 -0
- package/dist/bulk-actions/bulk-action-bar.d.ts.map +1 -0
- package/dist/bulk-actions/bulk-action-bar.js +94 -0
- package/dist/bulk-actions/bulk-action-bar.js.map +1 -0
- package/dist/bulk-actions/index.d.ts +5 -0
- package/dist/bulk-actions/index.d.ts.map +1 -0
- package/dist/bulk-actions/index.js +7 -0
- package/dist/bulk-actions/index.js.map +1 -0
- package/dist/bulk-actions/utils.d.ts +6 -0
- package/dist/bulk-actions/utils.d.ts.map +1 -0
- package/dist/bulk-actions/utils.js +9 -0
- package/dist/bulk-actions/utils.js.map +1 -0
- package/dist/components/ui/alert.d.ts +9 -0
- package/dist/components/ui/alert.d.ts.map +1 -0
- package/dist/components/ui/alert.js +23 -0
- package/dist/components/ui/alert.js.map +1 -0
- package/dist/components/ui/button.d.ts +12 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/button.js +34 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/collapsible.d.ts +6 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -0
- package/dist/components/ui/collapsible.js +7 -0
- package/dist/components/ui/collapsible.js.map +1 -0
- package/dist/components/ui/skeleton.d.ts +4 -0
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/skeleton.js +7 -0
- package/dist/components/ui/skeleton.js.map +1 -0
- package/dist/content-viewer/ContentPane.d.ts +107 -0
- package/dist/content-viewer/ContentPane.d.ts.map +1 -0
- package/dist/content-viewer/ContentPane.js +247 -0
- package/dist/content-viewer/ContentPane.js.map +1 -0
- package/dist/content-viewer/ContentViewerProvider.d.ts +83 -0
- package/dist/content-viewer/ContentViewerProvider.d.ts.map +1 -0
- package/dist/content-viewer/ContentViewerProvider.js +92 -0
- package/dist/content-viewer/ContentViewerProvider.js.map +1 -0
- package/dist/content-viewer/FileTree.d.ts +71 -0
- package/dist/content-viewer/FileTree.d.ts.map +1 -0
- package/dist/content-viewer/FileTree.js +294 -0
- package/dist/content-viewer/FileTree.js.map +1 -0
- package/dist/content-viewer/adapters.d.ts +101 -0
- package/dist/content-viewer/adapters.d.ts.map +1 -0
- package/dist/content-viewer/adapters.js +32 -0
- package/dist/content-viewer/adapters.js.map +1 -0
- package/dist/content-viewer/index.d.ts +8 -0
- package/dist/content-viewer/index.d.ts.map +1 -0
- package/dist/content-viewer/index.js +5 -0
- package/dist/content-viewer/index.js.map +1 -0
- package/dist/diff/DiffViewer.d.ts +112 -0
- package/dist/diff/DiffViewer.d.ts.map +1 -0
- package/dist/diff/DiffViewer.js +414 -0
- package/dist/diff/DiffViewer.js.map +1 -0
- package/dist/diff/diff.d.ts +32 -0
- package/dist/diff/diff.d.ts.map +1 -0
- package/dist/diff/diff.js +8 -0
- package/dist/diff/diff.js.map +1 -0
- package/dist/diff/index.d.ts +4 -0
- package/dist/diff/index.d.ts.map +1 -0
- package/dist/diff/index.js +3 -0
- package/dist/diff/index.js.map +1 -0
- package/dist/display/FilePreviewPane.d.ts +31 -0
- package/dist/display/FilePreviewPane.d.ts.map +1 -0
- package/dist/display/FilePreviewPane.js +144 -0
- package/dist/display/FilePreviewPane.js.map +1 -0
- package/dist/display/FrontmatterDisplay.d.ts +33 -0
- package/dist/display/FrontmatterDisplay.d.ts.map +1 -0
- package/dist/display/FrontmatterDisplay.js +79 -0
- package/dist/display/FrontmatterDisplay.js.map +1 -0
- package/dist/display/index.d.ts +5 -0
- package/dist/display/index.d.ts.map +1 -0
- package/dist/display/index.js +4 -0
- package/dist/display/index.js.map +1 -0
- package/dist/editor/MarkdownEditor.d.ts +28 -0
- package/dist/editor/MarkdownEditor.d.ts.map +1 -0
- package/dist/editor/MarkdownEditor.js +160 -0
- package/dist/editor/MarkdownEditor.js.map +1 -0
- package/dist/editor/SplitPreview.d.ts +28 -0
- package/dist/editor/SplitPreview.d.ts.map +1 -0
- package/dist/editor/SplitPreview.js +34 -0
- package/dist/editor/SplitPreview.js.map +1 -0
- package/dist/editor/index.d.ts +5 -0
- package/dist/editor/index.d.ts.map +1 -0
- package/dist/editor/index.js +4 -0
- package/dist/editor/index.js.map +1 -0
- package/dist/filters/filters-dropdown.d.ts +24 -0
- package/dist/filters/filters-dropdown.d.ts.map +1 -0
- package/dist/filters/filters-dropdown.js +36 -0
- package/dist/filters/filters-dropdown.js.map +1 -0
- package/dist/filters/index.d.ts +9 -0
- package/dist/filters/index.d.ts.map +1 -0
- package/dist/filters/index.js +5 -0
- package/dist/filters/index.js.map +1 -0
- package/dist/filters/sort-dropdown.d.ts +13 -0
- package/dist/filters/sort-dropdown.d.ts.map +1 -0
- package/dist/filters/sort-dropdown.js +20 -0
- package/dist/filters/sort-dropdown.js.map +1 -0
- package/dist/filters/tag-filter-popover.d.ts +39 -0
- package/dist/filters/tag-filter-popover.d.ts.map +1 -0
- package/dist/filters/tag-filter-popover.js +72 -0
- package/dist/filters/tag-filter-popover.js.map +1 -0
- package/dist/filters/tool-filter-popover.d.ts +42 -0
- package/dist/filters/tool-filter-popover.d.ts.map +1 -0
- package/dist/filters/tool-filter-popover.js +67 -0
- package/dist/filters/tool-filter-popover.js.map +1 -0
- package/dist/hooks/use-debounce.d.ts +9 -0
- package/dist/hooks/use-debounce.d.ts.map +1 -0
- package/dist/hooks/use-debounce.js +21 -0
- package/dist/hooks/use-debounce.js.map +1 -0
- package/dist/hooks/use-intersection-observer.d.ts +11 -0
- package/dist/hooks/use-intersection-observer.d.ts.map +1 -0
- package/dist/hooks/use-intersection-observer.js +25 -0
- package/dist/hooks/use-intersection-observer.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/pickers/EntityPickerDialog.d.ts +233 -0
- package/dist/pickers/EntityPickerDialog.d.ts.map +1 -0
- package/dist/pickers/EntityPickerDialog.js +355 -0
- package/dist/pickers/EntityPickerDialog.js.map +1 -0
- package/dist/pickers/EntityPickerViewToggle.d.ts +8 -0
- package/dist/pickers/EntityPickerViewToggle.d.ts.map +1 -0
- package/dist/pickers/EntityPickerViewToggle.js +17 -0
- package/dist/pickers/EntityPickerViewToggle.js.map +1 -0
- package/dist/pickers/index.d.ts +5 -0
- package/dist/pickers/index.d.ts.map +1 -0
- package/dist/pickers/index.js +3 -0
- package/dist/pickers/index.js.map +1 -0
- package/dist/primitives/Badge.d.ts +16 -0
- package/dist/primitives/Badge.d.ts.map +1 -0
- package/dist/primitives/Badge.js +43 -0
- package/dist/primitives/Badge.js.map +1 -0
- package/dist/primitives/BaseArtifactModal.d.ts +114 -0
- package/dist/primitives/BaseArtifactModal.d.ts.map +1 -0
- package/dist/primitives/BaseArtifactModal.js +76 -0
- package/dist/primitives/BaseArtifactModal.js.map +1 -0
- package/dist/primitives/Dialog.d.ts +20 -0
- package/dist/primitives/Dialog.d.ts.map +1 -0
- package/dist/primitives/Dialog.js +24 -0
- package/dist/primitives/Dialog.js.map +1 -0
- package/dist/primitives/DropdownMenu.d.ts +28 -0
- package/dist/primitives/DropdownMenu.d.ts.map +1 -0
- package/dist/primitives/DropdownMenu.js +34 -0
- package/dist/primitives/DropdownMenu.js.map +1 -0
- package/dist/primitives/EnterpriseOwnerBadge.d.ts +9 -0
- package/dist/primitives/EnterpriseOwnerBadge.d.ts.map +1 -0
- package/dist/primitives/EnterpriseOwnerBadge.js +12 -0
- package/dist/primitives/EnterpriseOwnerBadge.js.map +1 -0
- package/dist/primitives/GroupedSelect.d.ts +30 -0
- package/dist/primitives/GroupedSelect.d.ts.map +1 -0
- package/dist/primitives/GroupedSelect.js +47 -0
- package/dist/primitives/GroupedSelect.js.map +1 -0
- package/dist/primitives/Input.d.ts +6 -0
- package/dist/primitives/Input.d.ts.map +1 -0
- package/dist/primitives/Input.js +9 -0
- package/dist/primitives/Input.js.map +1 -0
- package/dist/primitives/LockIcon.d.ts +11 -0
- package/dist/primitives/LockIcon.d.ts.map +1 -0
- package/dist/primitives/LockIcon.js +15 -0
- package/dist/primitives/LockIcon.js.map +1 -0
- package/dist/primitives/MaskedSecretInput.d.ts +16 -0
- package/dist/primitives/MaskedSecretInput.d.ts.map +1 -0
- package/dist/primitives/MaskedSecretInput.js +42 -0
- package/dist/primitives/MaskedSecretInput.js.map +1 -0
- package/dist/primitives/ModalHeader.d.ts +66 -0
- package/dist/primitives/ModalHeader.d.ts.map +1 -0
- package/dist/primitives/ModalHeader.js +58 -0
- package/dist/primitives/ModalHeader.js.map +1 -0
- package/dist/primitives/Popover.d.ts +9 -0
- package/dist/primitives/Popover.d.ts.map +1 -0
- package/dist/primitives/Popover.js +13 -0
- package/dist/primitives/Popover.js.map +1 -0
- package/dist/primitives/ScrollArea.d.ts +6 -0
- package/dist/primitives/ScrollArea.d.ts.map +1 -0
- package/dist/primitives/ScrollArea.js +11 -0
- package/dist/primitives/ScrollArea.js.map +1 -0
- package/dist/primitives/SearchableCombobox.d.ts +30 -0
- package/dist/primitives/SearchableCombobox.d.ts.map +1 -0
- package/dist/primitives/SearchableCombobox.js +124 -0
- package/dist/primitives/SearchableCombobox.js.map +1 -0
- package/dist/primitives/SearchablePickerDialog.d.ts +20 -0
- package/dist/primitives/SearchablePickerDialog.d.ts.map +1 -0
- package/dist/primitives/SearchablePickerDialog.js +78 -0
- package/dist/primitives/SearchablePickerDialog.js.map +1 -0
- package/dist/primitives/StatusBadge.d.ts +21 -0
- package/dist/primitives/StatusBadge.d.ts.map +1 -0
- package/dist/primitives/StatusBadge.js +25 -0
- package/dist/primitives/StatusBadge.js.map +1 -0
- package/dist/primitives/TabNavigation.d.ts +68 -0
- package/dist/primitives/TabNavigation.d.ts.map +1 -0
- package/dist/primitives/TabNavigation.js +74 -0
- package/dist/primitives/TabNavigation.js.map +1 -0
- package/dist/primitives/Tabs.d.ts +8 -0
- package/dist/primitives/Tabs.d.ts.map +1 -0
- package/dist/primitives/Tabs.js +14 -0
- package/dist/primitives/Tabs.js.map +1 -0
- package/dist/primitives/Tooltip.d.ts +8 -0
- package/dist/primitives/Tooltip.d.ts.map +1 -0
- package/dist/primitives/Tooltip.js +12 -0
- package/dist/primitives/Tooltip.js.map +1 -0
- package/dist/primitives/VerticalTabNavigation.d.ts +75 -0
- package/dist/primitives/VerticalTabNavigation.d.ts.map +1 -0
- package/dist/primitives/VerticalTabNavigation.js +166 -0
- package/dist/primitives/VerticalTabNavigation.js.map +1 -0
- package/dist/primitives/ViewModeToggle.d.ts +12 -0
- package/dist/primitives/ViewModeToggle.d.ts.map +1 -0
- package/dist/primitives/ViewModeToggle.js +56 -0
- package/dist/primitives/ViewModeToggle.js.map +1 -0
- package/dist/primitives/WizardShell.d.ts +81 -0
- package/dist/primitives/WizardShell.d.ts.map +1 -0
- package/dist/primitives/WizardShell.js +73 -0
- package/dist/primitives/WizardShell.js.map +1 -0
- package/dist/primitives/index.d.ts +38 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +24 -0
- package/dist/primitives/index.js.map +1 -0
- package/dist/primitives/utils.d.ts +6 -0
- package/dist/primitives/utils.d.ts.map +1 -0
- package/dist/primitives/utils.js +9 -0
- package/dist/primitives/utils.js.map +1 -0
- package/dist/types/index.d.ts +63 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +9 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +63 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +345 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/perf-marks.d.ts +28 -0
- package/dist/utils/perf-marks.d.ts.map +1 -0
- package/dist/utils/perf-marks.js +45 -0
- package/dist/utils/perf-marks.js.map +1 -0
- package/dist/utils/readme-utils.d.ts +67 -0
- package/dist/utils/readme-utils.d.ts.map +1 -0
- package/dist/utils/readme-utils.js +164 -0
- package/dist/utils/readme-utils.js.map +1 -0
- package/dist/utils/type-colors.d.ts +70 -0
- package/dist/utils/type-colors.d.ts.map +1 -0
- package/dist/utils/type-colors.js +118 -0
- package/dist/utils/type-colors.js.map +1 -0
- package/package.json +131 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupedSelect.js","sourceRoot":"","sources":["../../src/primitives/GroupedSelect.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {
|
|
3
|
+
}
|
|
4
|
+
declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
|
|
5
|
+
export { Input };
|
|
6
|
+
//# sourceMappingURL=Input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Input.d.ts","sourceRoot":"","sources":["../../src/primitives/Input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,UAAW,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC;CAAG;AAElF,QAAA,MAAM,KAAK,qFAcV,CAAC;AAGF,OAAO,EAAE,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { cn } from './utils';
|
|
4
|
+
const Input = React.forwardRef(({ className, type, ...props }, ref) => {
|
|
5
|
+
return (_jsx("input", { type: type, className: cn('flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50', className), ref: ref, ...props }));
|
|
6
|
+
});
|
|
7
|
+
Input.displayName = 'Input';
|
|
8
|
+
export { Input };
|
|
9
|
+
//# sourceMappingURL=Input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Input.js","sourceRoot":"","sources":["../../src/primitives/Input.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAI7B,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAC5B,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE;IACrC,OAAO,CACL,gBACE,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,EAAE,CACX,8VAA8V,EAC9V,SAAS,CACV,EACD,GAAG,EAAE,GAAG,KACJ,KAAK,GACT,CACH,CAAC;AACJ,CAAC,CACF,CAAC;AACF,KAAK,CAAC,WAAW,GAAG,OAAO,CAAC;AAE5B,OAAO,EAAE,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface LockIconProps {
|
|
2
|
+
className?: string;
|
|
3
|
+
tooltip?: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Lock indicator for artifacts with enforce_override=True.
|
|
7
|
+
* Renders a small lock icon with an accessible tooltip explaining the enforced state.
|
|
8
|
+
* Keyboard-accessible via Radix UI Tooltip primitives.
|
|
9
|
+
*/
|
|
10
|
+
export declare function LockIcon({ className, tooltip }: LockIconProps): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=LockIcon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LockIcon.d.ts","sourceRoot":"","sources":["../../src/primitives/LockIcon.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,OAAyB,EAAE,EAAE,aAAa,2CAyB/E"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Lock } from 'lucide-react';
|
|
4
|
+
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './Tooltip';
|
|
5
|
+
import { cn } from './utils';
|
|
6
|
+
const DEFAULT_TOOLTIP = 'This artifact cannot be modified \u2014 enforced by your organization';
|
|
7
|
+
/**
|
|
8
|
+
* Lock indicator for artifacts with enforce_override=True.
|
|
9
|
+
* Renders a small lock icon with an accessible tooltip explaining the enforced state.
|
|
10
|
+
* Keyboard-accessible via Radix UI Tooltip primitives.
|
|
11
|
+
*/
|
|
12
|
+
export function LockIcon({ className, tooltip = DEFAULT_TOOLTIP }) {
|
|
13
|
+
return (_jsx(TooltipProvider, { children: _jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, "aria-label": tooltip, children: _jsx("span", { className: cn('inline-flex items-center justify-center text-muted-foreground', className), role: "img", "aria-label": tooltip, children: _jsx(Lock, { className: "h-3.5 w-3.5 shrink-0", "aria-hidden": "true" }) }) }), _jsx(TooltipContent, { children: _jsx("p", { children: tooltip }) })] }) }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=LockIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LockIcon.js","sourceRoot":"","sources":["../../src/primitives/LockIcon.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACrF,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAE7B,MAAM,eAAe,GAAG,uEAAuE,CAAC;AAOhG;;;;GAIG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAE,SAAS,EAAE,OAAO,GAAG,eAAe,EAAiB;IAC9E,OAAO,CACL,KAAC,eAAe,cACd,MAAC,OAAO,eACN,KAAC,cAAc,IACb,OAAO,sBACK,OAAO,YAEnB,eACE,SAAS,EAAE,EAAE,CACX,+DAA+D,EAC/D,SAAS,CACV,EACD,IAAI,EAAC,KAAK,gBACE,OAAO,YAEnB,KAAC,IAAI,IAAC,SAAS,EAAC,sBAAsB,iBAAa,MAAM,GAAG,GACvD,GACQ,EACjB,KAAC,cAAc,cACb,sBAAI,OAAO,GAAK,GACD,IACT,GACM,CACnB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface MaskedSecretInputProps {
|
|
2
|
+
value: string;
|
|
3
|
+
onChange: (value: string) => void;
|
|
4
|
+
placeholder?: string;
|
|
5
|
+
/** When true, a copy-to-clipboard button is rendered alongside the toggle. */
|
|
6
|
+
showCopyButton?: boolean;
|
|
7
|
+
/** Always required — used as the accessible label for the input. */
|
|
8
|
+
label: string;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
}
|
|
11
|
+
declare function MaskedSecretInput({ value, onChange, placeholder, showCopyButton, label, disabled, }: MaskedSecretInputProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
declare namespace MaskedSecretInput {
|
|
13
|
+
var displayName: string;
|
|
14
|
+
}
|
|
15
|
+
export { MaskedSecretInput };
|
|
16
|
+
//# sourceMappingURL=MaskedSecretInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MaskedSecretInput.d.ts","sourceRoot":"","sources":["../../src/primitives/MaskedSecretInput.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,iBAAS,iBAAiB,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,WAAW,EACX,cAAsB,EACtB,KAAK,EACL,QAAgB,GACjB,EAAE,sBAAsB,2CAyGxB;kBAhHQ,iBAAiB;;;AAoH1B,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Eye, EyeOff, Copy, Check } from 'lucide-react';
|
|
5
|
+
import { Input } from './Input';
|
|
6
|
+
import { cn } from './utils';
|
|
7
|
+
function MaskedSecretInput({ value, onChange, placeholder, showCopyButton = false, label, disabled = false, }) {
|
|
8
|
+
const [revealed, setRevealed] = React.useState(false);
|
|
9
|
+
const [copied, setCopied] = React.useState(false);
|
|
10
|
+
const copyTimeoutRef = React.useRef(null);
|
|
11
|
+
// Stable id for label/input association
|
|
12
|
+
const idRef = React.useRef(`masked-secret-${Math.random().toString(36).slice(2, 9)}`);
|
|
13
|
+
// Clean up timeout on unmount
|
|
14
|
+
React.useEffect(() => {
|
|
15
|
+
return () => {
|
|
16
|
+
if (copyTimeoutRef.current !== null) {
|
|
17
|
+
clearTimeout(copyTimeoutRef.current);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
}, []);
|
|
21
|
+
const toggleRevealed = React.useCallback(() => {
|
|
22
|
+
setRevealed((prev) => !prev);
|
|
23
|
+
}, []);
|
|
24
|
+
const handleCopy = React.useCallback(async () => {
|
|
25
|
+
if (!value)
|
|
26
|
+
return;
|
|
27
|
+
try {
|
|
28
|
+
await navigator.clipboard.writeText(value);
|
|
29
|
+
setCopied(true);
|
|
30
|
+
copyTimeoutRef.current = setTimeout(() => setCopied(false), 2000);
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// Clipboard API unavailable — fail silently
|
|
34
|
+
}
|
|
35
|
+
}, [value]);
|
|
36
|
+
return (_jsxs("div", { className: "flex w-full flex-col gap-1.5", children: [_jsx("label", { htmlFor: idRef.current, className: "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70", children: label }), _jsxs("div", { className: "relative flex items-center", children: [_jsx(Input, { id: idRef.current, type: revealed ? 'text' : 'password', value: value, onChange: (e) => onChange(e.target.value), placeholder: placeholder, disabled: disabled, autoComplete: "off", spellCheck: false,
|
|
37
|
+
// Reserve space on the right for the action buttons
|
|
38
|
+
className: cn('pr-10', showCopyButton && 'pr-[4.5rem]'), "aria-label": label }), _jsxs("div", { className: "absolute right-2 top-1/2 flex -translate-y-1/2 items-center gap-1", children: [showCopyButton && (_jsx("button", { type: "button", onClick: handleCopy, disabled: disabled || !value, "aria-label": copied ? 'Copied' : 'Copy to clipboard', className: cn('flex h-6 w-6 items-center justify-center rounded transition-colors', 'text-muted-foreground hover:text-foreground', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring', 'disabled:pointer-events-none disabled:opacity-40'), children: copied ? (_jsx(Check, { className: "h-3.5 w-3.5 text-green-500", "aria-hidden": "true" })) : (_jsx(Copy, { className: "h-3.5 w-3.5", "aria-hidden": "true" })) })), _jsx("button", { type: "button", onClick: toggleRevealed, disabled: disabled, "aria-label": revealed ? 'Hide value' : 'Show value', "aria-pressed": revealed, className: cn('flex h-6 w-6 items-center justify-center rounded transition-colors', 'text-muted-foreground hover:text-foreground', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring', 'disabled:pointer-events-none disabled:opacity-40'), children: revealed ? (_jsx(EyeOff, { className: "h-3.5 w-3.5", "aria-hidden": "true" })) : (_jsx(Eye, { className: "h-3.5 w-3.5", "aria-hidden": "true" })) })] })] })] }));
|
|
39
|
+
}
|
|
40
|
+
MaskedSecretInput.displayName = 'MaskedSecretInput';
|
|
41
|
+
export { MaskedSecretInput };
|
|
42
|
+
//# sourceMappingURL=MaskedSecretInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MaskedSecretInput.js","sourceRoot":"","sources":["../../src/primitives/MaskedSecretInput.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAa7B,SAAS,iBAAiB,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,WAAW,EACX,cAAc,GAAG,KAAK,EACtB,KAAK,EACL,QAAQ,GAAG,KAAK,GACO;IACvB,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACtD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAuC,IAAI,CAAC,CAAC;IAEhF,wCAAwC;IACxC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,iBAAiB,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAEtF,8BAA8B;IAC9B,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,OAAO,GAAG,EAAE;YACV,IAAI,cAAc,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;gBACpC,YAAY,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YACvC,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QAC5C,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,IAAI,EAAE;QAC9C,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC3C,SAAS,CAAC,IAAI,CAAC,CAAC;YAChB,cAAc,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;QACpE,CAAC;QAAC,MAAM,CAAC;YACP,4CAA4C;QAC9C,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,OAAO,CACL,eAAK,SAAS,EAAC,8BAA8B,aAC3C,gBACE,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,SAAS,EAAC,4FAA4F,YAErG,KAAK,GACA,EAER,eAAK,SAAS,EAAC,4BAA4B,aACzC,KAAC,KAAK,IACJ,EAAE,EAAE,KAAK,CAAC,OAAO,EACjB,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,EACpC,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAC,KAAK,EAClB,UAAU,EAAE,KAAK;wBACjB,oDAAoD;wBACpD,SAAS,EAAE,EAAE,CACX,OAAO,EACP,cAAc,IAAI,aAAa,CAChC,gBACW,KAAK,GACjB,EAGF,eAAK,SAAS,EAAC,mEAAmE,aAC/E,cAAc,IAAI,CACjB,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,UAAU,EACnB,QAAQ,EAAE,QAAQ,IAAI,CAAC,KAAK,gBAChB,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,EACnD,SAAS,EAAE,EAAE,CACX,oEAAoE,EACpE,6CAA6C,EAC7C,yEAAyE,EACzE,kDAAkD,CACnD,YAEA,MAAM,CAAC,CAAC,CAAC,CACR,KAAC,KAAK,IAAC,SAAS,EAAC,4BAA4B,iBAAa,MAAM,GAAG,CACpE,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,SAAS,EAAC,aAAa,iBAAa,MAAM,GAAG,CACpD,GACM,CACV,EAED,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,QAAQ,gBACN,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,kBACpC,QAAQ,EACtB,SAAS,EAAE,EAAE,CACX,oEAAoE,EACpE,6CAA6C,EAC7C,yEAAyE,EACzE,kDAAkD,CACnD,YAEA,QAAQ,CAAC,CAAC,CAAC,CACV,KAAC,MAAM,IAAC,SAAS,EAAC,aAAa,iBAAa,MAAM,GAAG,CACtD,CAAC,CAAC,CAAC,CACF,KAAC,GAAG,IAAC,SAAS,EAAC,aAAa,iBAAa,MAAM,GAAG,CACnD,GACM,IACL,IACF,IACF,CACP,CAAC;AACJ,CAAC;AAED,iBAAiB,CAAC,WAAW,GAAG,mBAAmB,CAAC;AAEpD,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Modal Header Component
|
|
3
|
+
*
|
|
4
|
+
* A reusable modal header wrapper that provides consistent styling for dialogs.
|
|
5
|
+
* Includes optional icon, title, description, and actions slot.
|
|
6
|
+
*
|
|
7
|
+
* @example Basic usage
|
|
8
|
+
* ```tsx
|
|
9
|
+
* <ModalHeader title="Artifact Details" />
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* @example With icon and description
|
|
13
|
+
* ```tsx
|
|
14
|
+
* <ModalHeader
|
|
15
|
+
* icon={Package}
|
|
16
|
+
* title="Artifact Details"
|
|
17
|
+
* description="View and manage artifact configuration"
|
|
18
|
+
* />
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* @example With actions
|
|
22
|
+
* ```tsx
|
|
23
|
+
* <ModalHeader
|
|
24
|
+
* icon={Package}
|
|
25
|
+
* iconClassName="text-primary"
|
|
26
|
+
* title="Artifact Details"
|
|
27
|
+
* actions={<Button variant="ghost" size="sm">Edit</Button>}
|
|
28
|
+
* />
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
import * as React from 'react';
|
|
32
|
+
export interface ModalHeaderProps {
|
|
33
|
+
/** Icon component to display before the title */
|
|
34
|
+
icon?: React.ComponentType<{
|
|
35
|
+
className?: string;
|
|
36
|
+
}>;
|
|
37
|
+
/** Additional CSS classes for the icon */
|
|
38
|
+
iconClassName?: string;
|
|
39
|
+
/** Modal title (required) */
|
|
40
|
+
title: string;
|
|
41
|
+
/** Optional description text below the title */
|
|
42
|
+
description?: string;
|
|
43
|
+
/** Optional actions slot for buttons on the right side */
|
|
44
|
+
actions?: React.ReactNode;
|
|
45
|
+
/** Additional CSS classes for the header container */
|
|
46
|
+
className?: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* ModalHeader - Consistent modal header layout
|
|
50
|
+
*
|
|
51
|
+
* Provides a standardized header structure with:
|
|
52
|
+
* - Optional icon with customizable styling
|
|
53
|
+
* - Title using DialogTitle for accessibility
|
|
54
|
+
* - Optional description using DialogDescription
|
|
55
|
+
* - Actions slot that floats right in the title row
|
|
56
|
+
* - Border bottom styling for visual separation
|
|
57
|
+
*
|
|
58
|
+
* @param icon - Optional icon component
|
|
59
|
+
* @param iconClassName - CSS classes for the icon
|
|
60
|
+
* @param title - Modal title (required)
|
|
61
|
+
* @param description - Optional description text
|
|
62
|
+
* @param actions - Optional React node for action buttons
|
|
63
|
+
* @param className - Additional CSS classes for the header
|
|
64
|
+
*/
|
|
65
|
+
export declare function ModalHeader({ icon: Icon, iconClassName, title, description, actions, className, }: ModalHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
66
|
+
//# sourceMappingURL=ModalHeader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModalHeader.d.ts","sourceRoot":"","sources":["../../src/primitives/ModalHeader.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAIH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,IAAI,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,0CAA0C;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6BAA6B;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,sDAAsD;IACtD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAMD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EAAE,IAAI,EACV,aAAa,EACb,KAAK,EACL,WAAW,EACX,OAAO,EACP,SAAS,GACV,EAAE,gBAAgB,2CAWlB"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Modal Header Component
|
|
3
|
+
*
|
|
4
|
+
* A reusable modal header wrapper that provides consistent styling for dialogs.
|
|
5
|
+
* Includes optional icon, title, description, and actions slot.
|
|
6
|
+
*
|
|
7
|
+
* @example Basic usage
|
|
8
|
+
* ```tsx
|
|
9
|
+
* <ModalHeader title="Artifact Details" />
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* @example With icon and description
|
|
13
|
+
* ```tsx
|
|
14
|
+
* <ModalHeader
|
|
15
|
+
* icon={Package}
|
|
16
|
+
* title="Artifact Details"
|
|
17
|
+
* description="View and manage artifact configuration"
|
|
18
|
+
* />
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* @example With actions
|
|
22
|
+
* ```tsx
|
|
23
|
+
* <ModalHeader
|
|
24
|
+
* icon={Package}
|
|
25
|
+
* iconClassName="text-primary"
|
|
26
|
+
* title="Artifact Details"
|
|
27
|
+
* actions={<Button variant="ghost" size="sm">Edit</Button>}
|
|
28
|
+
* />
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
'use client';
|
|
32
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
33
|
+
import { cn } from './utils';
|
|
34
|
+
import { DialogHeader, DialogTitle, DialogDescription } from './Dialog';
|
|
35
|
+
// ============================================================================
|
|
36
|
+
// Component
|
|
37
|
+
// ============================================================================
|
|
38
|
+
/**
|
|
39
|
+
* ModalHeader - Consistent modal header layout
|
|
40
|
+
*
|
|
41
|
+
* Provides a standardized header structure with:
|
|
42
|
+
* - Optional icon with customizable styling
|
|
43
|
+
* - Title using DialogTitle for accessibility
|
|
44
|
+
* - Optional description using DialogDescription
|
|
45
|
+
* - Actions slot that floats right in the title row
|
|
46
|
+
* - Border bottom styling for visual separation
|
|
47
|
+
*
|
|
48
|
+
* @param icon - Optional icon component
|
|
49
|
+
* @param iconClassName - CSS classes for the icon
|
|
50
|
+
* @param title - Modal title (required)
|
|
51
|
+
* @param description - Optional description text
|
|
52
|
+
* @param actions - Optional React node for action buttons
|
|
53
|
+
* @param className - Additional CSS classes for the header
|
|
54
|
+
*/
|
|
55
|
+
export function ModalHeader({ icon: Icon, iconClassName, title, description, actions, className, }) {
|
|
56
|
+
return (_jsxs(DialogHeader, { className: cn('border-b px-6 pb-4 pt-6', className), children: [_jsxs(DialogTitle, { className: "flex items-center gap-3", children: [Icon && _jsx(Icon, { className: cn('h-5 w-5 flex-shrink-0', iconClassName), "aria-hidden": "true" }), _jsx("span", { className: "flex-1 truncate", children: title }), actions && _jsx("div", { className: "flex flex-shrink-0 items-center gap-2", children: actions })] }), description && _jsx(DialogDescription, { className: "mt-1.5 pl-8", children: description })] }));
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=ModalHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ModalHeader.js","sourceRoot":"","sources":["../../src/primitives/ModalHeader.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,YAAY,CAAC;;AAGb,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAqBxE,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,IAAI,EAAE,IAAI,EACV,aAAa,EACb,KAAK,EACL,WAAW,EACX,OAAO,EACP,SAAS,GACQ;IACjB,OAAO,CACL,MAAC,YAAY,IAAC,SAAS,EAAE,EAAE,CAAC,yBAAyB,EAAE,SAAS,CAAC,aAC/D,MAAC,WAAW,IAAC,SAAS,EAAC,yBAAyB,aAC7C,IAAI,IAAI,KAAC,IAAI,IAAC,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE,aAAa,CAAC,iBAAc,MAAM,GAAG,EAC3F,eAAM,SAAS,EAAC,iBAAiB,YAAE,KAAK,GAAQ,EAC/C,OAAO,IAAI,cAAK,SAAS,EAAC,uCAAuC,YAAE,OAAO,GAAO,IACtE,EACb,WAAW,IAAI,KAAC,iBAAiB,IAAC,SAAS,EAAC,aAAa,YAAE,WAAW,GAAqB,IAC/E,CAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import * as PopoverPrimitive from '@radix-ui/react-popover';
|
|
3
|
+
declare const Popover: React.FC<PopoverPrimitive.PopoverProps>;
|
|
4
|
+
declare const PopoverTrigger: React.ForwardRefExoticComponent<PopoverPrimitive.PopoverTriggerProps & React.RefAttributes<HTMLButtonElement>>;
|
|
5
|
+
declare const PopoverAnchor: React.ForwardRefExoticComponent<PopoverPrimitive.PopoverAnchorProps & React.RefAttributes<HTMLDivElement>>;
|
|
6
|
+
declare const PopoverClose: React.ForwardRefExoticComponent<PopoverPrimitive.PopoverCloseProps & React.RefAttributes<HTMLButtonElement>>;
|
|
7
|
+
declare const PopoverContent: React.ForwardRefExoticComponent<Omit<PopoverPrimitive.PopoverContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
8
|
+
export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor, PopoverClose };
|
|
9
|
+
//# sourceMappingURL=Popover.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popover.d.ts","sourceRoot":"","sources":["../../src/primitives/Popover.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAI5D,QAAA,MAAM,OAAO,yCAAwB,CAAC;AAEtC,QAAA,MAAM,cAAc,gHAA2B,CAAC;AAEhD,QAAA,MAAM,aAAa,4GAA0B,CAAC;AAE9C,QAAA,MAAM,YAAY,8GAAyB,CAAC;AAE5C,QAAA,MAAM,cAAc,gKAgBlB,CAAC;AAGH,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import * as PopoverPrimitive from '@radix-ui/react-popover';
|
|
5
|
+
import { cn } from './utils';
|
|
6
|
+
const Popover = PopoverPrimitive.Root;
|
|
7
|
+
const PopoverTrigger = PopoverPrimitive.Trigger;
|
|
8
|
+
const PopoverAnchor = PopoverPrimitive.Anchor;
|
|
9
|
+
const PopoverClose = PopoverPrimitive.Close;
|
|
10
|
+
const PopoverContent = React.forwardRef(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (_jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { ref: ref, align: align, sideOffset: sideOffset, className: cn('z-50 w-72 origin-[--radix-popover-content-transform-origin] rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2', className), ...props }) })));
|
|
11
|
+
PopoverContent.displayName = PopoverPrimitive.Content.displayName;
|
|
12
|
+
export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor, PopoverClose };
|
|
13
|
+
//# sourceMappingURL=Popover.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Popover.js","sourceRoot":"","sources":["../../src/primitives/Popover.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAE7B,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC;AAEtC,MAAM,cAAc,GAAG,gBAAgB,CAAC,OAAO,CAAC;AAEhD,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC;AAE9C,MAAM,YAAY,GAAG,gBAAgB,CAAC,KAAK,CAAC;AAE5C,MAAM,cAAc,GAAG,KAAK,CAAC,UAAU,CAGrC,CAAC,EAAE,SAAS,EAAE,KAAK,GAAG,QAAQ,EAAE,UAAU,GAAG,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CACpE,KAAC,gBAAgB,CAAC,MAAM,cACtB,KAAC,gBAAgB,CAAC,OAAO,IACvB,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,EAAE,CACX,8dAA8d,EAC9d,SAAS,CACV,KACG,KAAK,GACT,GACsB,CAC3B,CAAC,CAAC;AACH,cAAc,CAAC,WAAW,GAAG,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC;AAElE,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
|
|
3
|
+
declare const ScrollArea: React.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
4
|
+
declare const ScrollBar: React.ForwardRefExoticComponent<Omit<ScrollAreaPrimitive.ScrollAreaScrollbarProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
5
|
+
export { ScrollArea, ScrollBar };
|
|
6
|
+
//# sourceMappingURL=ScrollArea.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScrollArea.d.ts","sourceRoot":"","sources":["../../src/primitives/ScrollArea.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,mBAAmB,MAAM,6BAA6B,CAAC;AAInE,QAAA,MAAM,UAAU,+JAed,CAAC;AAGH,QAAA,MAAM,SAAS,wKAiBb,CAAC;AAGH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
|
|
5
|
+
import { cn } from './utils';
|
|
6
|
+
const ScrollArea = React.forwardRef(({ className, children, ...props }, ref) => (_jsxs(ScrollAreaPrimitive.Root, { ref: ref, className: cn('relative overflow-hidden', className), ...props, children: [_jsx(ScrollAreaPrimitive.Viewport, { className: "h-full w-full rounded-[inherit]", children: children }), _jsx(ScrollBar, {}), _jsx(ScrollAreaPrimitive.Corner, {})] })));
|
|
7
|
+
ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
|
|
8
|
+
const ScrollBar = React.forwardRef(({ className, orientation = 'vertical', ...props }, ref) => (_jsx(ScrollAreaPrimitive.ScrollAreaScrollbar, { ref: ref, orientation: orientation, className: cn('flex touch-none select-none transition-colors', orientation === 'vertical' && 'h-full w-2.5 border-l border-l-transparent p-[1px]', orientation === 'horizontal' && 'h-2.5 flex-col border-t border-t-transparent p-[1px]', className), ...props, children: _jsx(ScrollAreaPrimitive.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border" }) })));
|
|
9
|
+
ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
|
|
10
|
+
export { ScrollArea, ScrollBar };
|
|
11
|
+
//# sourceMappingURL=ScrollArea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ScrollArea.js","sourceRoot":"","sources":["../../src/primitives/ScrollArea.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,mBAAmB,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAE7B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAGjC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAC5C,MAAC,mBAAmB,CAAC,IAAI,IACvB,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,EAAE,CAAC,0BAA0B,EAAE,SAAS,CAAC,KAChD,KAAK,aAET,KAAC,mBAAmB,CAAC,QAAQ,IAAC,SAAS,EAAC,iCAAiC,YACtE,QAAQ,GACoB,EAC/B,KAAC,SAAS,KAAG,EACb,KAAC,mBAAmB,CAAC,MAAM,KAAG,IACL,CAC5B,CAAC,CAAC;AACH,UAAU,CAAC,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC;AAE9D,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAGhC,CAAC,EAAE,SAAS,EAAE,WAAW,GAAG,UAAU,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAC5D,KAAC,mBAAmB,CAAC,mBAAmB,IACtC,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,EAAE,CACX,+CAA+C,EAC/C,WAAW,KAAK,UAAU,IAAI,oDAAoD,EAClF,WAAW,KAAK,YAAY,IAAI,sDAAsD,EACtF,SAAS,CACV,KACG,KAAK,YAET,KAAC,mBAAmB,CAAC,eAAe,IAAC,SAAS,EAAC,wCAAwC,GAAG,GAClD,CAC3C,CAAC,CAAC;AACH,SAAS,CAAC,WAAW,GAAG,mBAAmB,CAAC,mBAAmB,CAAC,WAAW,CAAC;AAE5E,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface SearchableComboboxProps<T> {
|
|
3
|
+
/** Called with search query after debounce (300ms) */
|
|
4
|
+
onSearch: (query: string) => void;
|
|
5
|
+
/** Called when user selects an item */
|
|
6
|
+
onSelect: (item: T) => void;
|
|
7
|
+
/** Render function for each item in the dropdown */
|
|
8
|
+
renderItem: (item: T) => React.ReactNode;
|
|
9
|
+
/** Key extractor for React list rendering */
|
|
10
|
+
getItemKey: (item: T) => string;
|
|
11
|
+
/** Items to display in the dropdown */
|
|
12
|
+
items: T[];
|
|
13
|
+
/** Whether search is in progress */
|
|
14
|
+
loading?: boolean;
|
|
15
|
+
/** Placeholder text for search input */
|
|
16
|
+
placeholder?: string;
|
|
17
|
+
/** Message when no results found */
|
|
18
|
+
emptyMessage?: string;
|
|
19
|
+
/** Label for accessibility */
|
|
20
|
+
'aria-label'?: string;
|
|
21
|
+
/** Additional className for the container */
|
|
22
|
+
className?: string;
|
|
23
|
+
/** Whether the combobox is disabled */
|
|
24
|
+
disabled?: boolean;
|
|
25
|
+
}
|
|
26
|
+
declare const SearchableCombobox: <T>(props: SearchableComboboxProps<T> & {
|
|
27
|
+
ref?: React.ForwardedRef<HTMLDivElement>;
|
|
28
|
+
}) => React.ReactElement | null;
|
|
29
|
+
export { SearchableCombobox };
|
|
30
|
+
//# sourceMappingURL=SearchableCombobox.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchableCombobox.d.ts","sourceRoot":"","sources":["../../src/primitives/SearchableCombobox.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,uBAAuB,CAAC,CAAC;IACxC,sDAAsD;IACtD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,uCAAuC;IACvC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC;IAC5B,oDAAoD;IACpD,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;IACzC,6CAA6C;IAC7C,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAChC,uCAAuC;IACvC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,oCAAoC;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wCAAwC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,8BAA8B;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AA6OD,QAAA,MAAM,kBAAkB,EAAgD,CAAC,CAAC,EACxE,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;CAAE,KAC7E,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAE/B,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { cn } from './utils';
|
|
5
|
+
const DEBOUNCE_MS = 300;
|
|
6
|
+
function SearchableComboboxInner(props, _ref) {
|
|
7
|
+
const { onSearch, onSelect, renderItem, getItemKey, items, loading = false, placeholder = 'Search…', emptyMessage = 'No results found', 'aria-label': ariaLabel, className, disabled = false, } = props;
|
|
8
|
+
const [inputValue, setInputValue] = React.useState('');
|
|
9
|
+
const [isOpen, setIsOpen] = React.useState(false);
|
|
10
|
+
const [highlightedIndex, setHighlightedIndex] = React.useState(-1);
|
|
11
|
+
const containerRef = React.useRef(null);
|
|
12
|
+
const inputRef = React.useRef(null);
|
|
13
|
+
const debounceRef = React.useRef(null);
|
|
14
|
+
// Stable unique IDs for ARIA attributes
|
|
15
|
+
const idRef = React.useRef(`combobox-${Math.random().toString(36).slice(2, 9)}`);
|
|
16
|
+
const listboxId = `${idRef.current}-listbox`;
|
|
17
|
+
const getOptionId = (index) => `${idRef.current}-option-${index}`;
|
|
18
|
+
// Determine whether the dropdown should show
|
|
19
|
+
const showDropdown = isOpen && !disabled && (loading || items.length > 0 || inputValue.length > 0);
|
|
20
|
+
// Reset highlighted index when items change
|
|
21
|
+
React.useEffect(() => {
|
|
22
|
+
setHighlightedIndex(-1);
|
|
23
|
+
}, [items]);
|
|
24
|
+
// Click-outside handler
|
|
25
|
+
React.useEffect(() => {
|
|
26
|
+
function handleClickOutside(event) {
|
|
27
|
+
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
28
|
+
setIsOpen(false);
|
|
29
|
+
setHighlightedIndex(-1);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
document.addEventListener('mousedown', handleClickOutside);
|
|
33
|
+
return () => {
|
|
34
|
+
document.removeEventListener('mousedown', handleClickOutside);
|
|
35
|
+
};
|
|
36
|
+
}, []);
|
|
37
|
+
// Cleanup debounce timer on unmount
|
|
38
|
+
React.useEffect(() => {
|
|
39
|
+
return () => {
|
|
40
|
+
if (debounceRef.current !== null) {
|
|
41
|
+
clearTimeout(debounceRef.current);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
}, []);
|
|
45
|
+
const handleInputChange = React.useCallback((event) => {
|
|
46
|
+
const value = event.target.value;
|
|
47
|
+
setInputValue(value);
|
|
48
|
+
setIsOpen(true);
|
|
49
|
+
setHighlightedIndex(-1);
|
|
50
|
+
if (debounceRef.current !== null) {
|
|
51
|
+
clearTimeout(debounceRef.current);
|
|
52
|
+
}
|
|
53
|
+
debounceRef.current = setTimeout(() => {
|
|
54
|
+
onSearch(value);
|
|
55
|
+
}, DEBOUNCE_MS);
|
|
56
|
+
}, [onSearch]);
|
|
57
|
+
const handleInputFocus = React.useCallback(() => {
|
|
58
|
+
if (!disabled) {
|
|
59
|
+
setIsOpen(true);
|
|
60
|
+
}
|
|
61
|
+
}, [disabled]);
|
|
62
|
+
const handleSelect = React.useCallback((item) => {
|
|
63
|
+
onSelect(item);
|
|
64
|
+
setIsOpen(false);
|
|
65
|
+
setHighlightedIndex(-1);
|
|
66
|
+
inputRef.current?.focus();
|
|
67
|
+
}, [onSelect]);
|
|
68
|
+
const handleKeyDown = React.useCallback((event) => {
|
|
69
|
+
if (!showDropdown) {
|
|
70
|
+
if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {
|
|
71
|
+
setIsOpen(true);
|
|
72
|
+
}
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
switch (event.key) {
|
|
76
|
+
case 'ArrowDown': {
|
|
77
|
+
event.preventDefault();
|
|
78
|
+
setHighlightedIndex((prev) => {
|
|
79
|
+
const next = prev < items.length - 1 ? prev + 1 : 0;
|
|
80
|
+
return next;
|
|
81
|
+
});
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
case 'ArrowUp': {
|
|
85
|
+
event.preventDefault();
|
|
86
|
+
setHighlightedIndex((prev) => {
|
|
87
|
+
const next = prev > 0 ? prev - 1 : items.length - 1;
|
|
88
|
+
return next;
|
|
89
|
+
});
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
case 'Enter': {
|
|
93
|
+
if (highlightedIndex >= 0 && highlightedIndex < items.length) {
|
|
94
|
+
event.preventDefault();
|
|
95
|
+
handleSelect(items[highlightedIndex]);
|
|
96
|
+
}
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
case 'Escape': {
|
|
100
|
+
event.preventDefault();
|
|
101
|
+
setIsOpen(false);
|
|
102
|
+
setHighlightedIndex(-1);
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
default:
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
}, [showDropdown, items, highlightedIndex, handleSelect]);
|
|
109
|
+
const activedescendant = highlightedIndex >= 0 && showDropdown ? getOptionId(highlightedIndex) : undefined;
|
|
110
|
+
return (_jsxs("div", { ref: containerRef, className: cn('relative w-full', className), children: [_jsx("input", { ref: inputRef, type: "text", role: "combobox", "aria-expanded": showDropdown, "aria-controls": listboxId, "aria-activedescendant": activedescendant, "aria-autocomplete": "list", "aria-label": ariaLabel, value: inputValue, onChange: handleInputChange, onFocus: handleInputFocus, onKeyDown: handleKeyDown, placeholder: placeholder, disabled: disabled, autoComplete: "off", className: cn('flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-sm shadow-sm', 'placeholder:text-muted-foreground', 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring', 'disabled:cursor-not-allowed disabled:opacity-50', 'transition-colors') }), showDropdown && (_jsx("ul", { id: listboxId, role: "listbox", "aria-label": ariaLabel ? `${ariaLabel} options` : 'Options', className: cn('absolute z-50 mt-1 max-h-64 w-full overflow-auto', 'rounded-md border border-border bg-popover text-popover-foreground shadow-md', 'py-1'), children: loading ? (_jsxs("li", { className: "flex items-center gap-2 px-3 py-2 text-sm text-muted-foreground", role: "option", "aria-selected": false, children: [_jsx("span", { "aria-hidden": "true", className: "h-3.5 w-3.5 shrink-0 animate-spin rounded-full border-2 border-muted-foreground/30 border-t-muted-foreground" }), "Searching\u2026"] })) : items.length === 0 ? (_jsx("li", { className: "px-3 py-2 text-sm text-muted-foreground", role: "option", "aria-selected": false, "aria-disabled": "true", children: emptyMessage })) : (items.map((item, index) => {
|
|
111
|
+
const isHighlighted = index === highlightedIndex;
|
|
112
|
+
return (_jsx("li", { id: getOptionId(index), role: "option", "aria-selected": isHighlighted, onMouseDown: (e) => {
|
|
113
|
+
// Prevent blur on the input before the click is processed
|
|
114
|
+
e.preventDefault();
|
|
115
|
+
handleSelect(item);
|
|
116
|
+
}, onMouseEnter: () => setHighlightedIndex(index), className: cn('cursor-pointer px-3 py-2 text-sm', 'select-none outline-none', isHighlighted
|
|
117
|
+
? 'bg-accent text-accent-foreground'
|
|
118
|
+
: 'hover:bg-accent/50 hover:text-accent-foreground'), children: renderItem(item) }, getItemKey(item)));
|
|
119
|
+
})) }))] }));
|
|
120
|
+
}
|
|
121
|
+
// Generic forwardRef workaround — TypeScript requires this pattern for generic components
|
|
122
|
+
const SearchableCombobox = React.forwardRef(SearchableComboboxInner);
|
|
123
|
+
export { SearchableCombobox };
|
|
124
|
+
//# sourceMappingURL=SearchableCombobox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchableCombobox.js","sourceRoot":"","sources":["../../src/primitives/SearchableCombobox.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface SearchablePickerDialogProps<T> {
|
|
3
|
+
open: boolean;
|
|
4
|
+
onOpenChange: (open: boolean) => void;
|
|
5
|
+
title: string;
|
|
6
|
+
searchPlaceholder?: string;
|
|
7
|
+
emptyMessage?: string;
|
|
8
|
+
items: T[];
|
|
9
|
+
renderItem: (item: T) => React.ReactNode;
|
|
10
|
+
getItemId: (item: T) => string;
|
|
11
|
+
getItemLabel: (item: T) => string;
|
|
12
|
+
onConfirm: (selectedIds: string[]) => void;
|
|
13
|
+
onCancel: () => void;
|
|
14
|
+
isLoading?: boolean;
|
|
15
|
+
}
|
|
16
|
+
declare const SearchablePickerDialog: <T>(props: SearchablePickerDialogProps<T> & {
|
|
17
|
+
ref?: React.ForwardedRef<HTMLDivElement>;
|
|
18
|
+
}) => React.ReactElement | null;
|
|
19
|
+
export { SearchablePickerDialog };
|
|
20
|
+
//# sourceMappingURL=SearchablePickerDialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SearchablePickerDialog.d.ts","sourceRoot":"","sources":["../../src/primitives/SearchablePickerDialog.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAY/B,MAAM,WAAW,2BAA2B,CAAC,CAAC;IAC5C,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;IACzC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAC/B,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC;IAClC,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC3C,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAqOD,QAAA,MAAM,sBAAsB,EAAoD,CAAC,CAAC,EAChF,KAAK,EAAE,2BAA2B,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;CAAE,KACjF,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAE/B,OAAO,EAAE,sBAAsB,EAAE,CAAC"}
|