@bigbinary/neeto-atoms 1.0.7 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ColorPicker-BPvxDGDM.js +276 -0
- package/dist/ColorPicker-BPvxDGDM.js.map +1 -0
- package/dist/{DataTable-Y4POx0WN.js → DataTable-BKe9K5XP.js} +136 -136
- package/dist/DataTable-BKe9K5XP.js.map +1 -0
- package/dist/cjs/ColorPicker-DN8aynGh.js +282 -0
- package/dist/cjs/ColorPicker-DN8aynGh.js.map +1 -0
- package/dist/cjs/{DataTable-DJw2SZ7b.js → DataTable-BQt_mXDX.js} +136 -136
- package/dist/cjs/DataTable-BQt_mXDX.js.map +1 -0
- package/dist/cjs/components/Accordion.js +49 -0
- package/dist/cjs/components/Accordion.js.map +1 -0
- package/dist/cjs/components/Alert.js +101 -0
- package/dist/cjs/components/Alert.js.map +1 -0
- package/dist/cjs/components/Badge.js +71 -0
- package/dist/cjs/components/Badge.js.map +1 -0
- package/dist/cjs/components/Button.js +121 -0
- package/dist/cjs/components/Button.js.map +1 -0
- package/dist/cjs/components/Checkbox.js +44 -0
- package/dist/cjs/components/Checkbox.js.map +1 -0
- package/dist/cjs/components/ColorPicker.js +34 -0
- package/dist/cjs/components/ColorPicker.js.map +1 -0
- package/dist/cjs/components/DataTable.js +3 -3
- package/dist/cjs/components/Dialog.js +88 -0
- package/dist/cjs/components/Dialog.js.map +1 -0
- package/dist/cjs/components/DropdownMenu.js +180 -0
- package/dist/cjs/components/DropdownMenu.js.map +1 -0
- package/dist/cjs/components/Input.js +167 -0
- package/dist/cjs/components/Input.js.map +1 -0
- package/dist/cjs/components/MultiSelect.js +13 -0
- package/dist/cjs/components/MultiSelect.js.map +1 -0
- package/dist/cjs/components/MultiSelectCombobox.js +3 -0
- package/dist/cjs/components/MultiSelectCombobox.js.map +1 -0
- package/dist/cjs/components/MultiSelectDropdown.js +37 -0
- package/dist/cjs/components/MultiSelectDropdown.js.map +1 -0
- package/dist/cjs/components/OptionItem.js +34 -0
- package/dist/cjs/components/OptionItem.js.map +1 -0
- package/dist/cjs/components/Popover.js +123 -0
- package/dist/cjs/components/Popover.js.map +1 -0
- package/dist/cjs/components/RadioGroup.js +63 -0
- package/dist/cjs/components/RadioGroup.js.map +1 -0
- package/dist/cjs/components/Select.js +3 -0
- package/dist/cjs/components/Select.js.map +1 -0
- package/dist/cjs/components/SelectFieldWrapper.js +33 -0
- package/dist/cjs/components/SelectFieldWrapper.js.map +1 -0
- package/dist/cjs/components/SelectOptions.js +43 -0
- package/dist/cjs/components/SelectOptions.js.map +1 -0
- package/dist/cjs/components/SelectTriggerContent.js +43 -0
- package/dist/cjs/components/SelectTriggerContent.js.map +1 -0
- package/dist/cjs/components/Sheet.js +90 -0
- package/dist/cjs/components/Sheet.js.map +1 -0
- package/dist/cjs/components/Switch.js +35 -0
- package/dist/cjs/components/Switch.js.map +1 -0
- package/dist/cjs/components/Tabs.js +74 -0
- package/dist/cjs/components/Tabs.js.map +1 -0
- package/dist/cjs/components/Textarea.js +89 -0
- package/dist/cjs/components/Textarea.js.map +1 -0
- package/dist/cjs/components/Toastr.js +133 -0
- package/dist/cjs/components/Toastr.js.map +1 -0
- package/dist/cjs/components/Tooltip.js +109 -0
- package/dist/cjs/components/Tooltip.js.map +1 -0
- package/dist/cjs/{primitives → components}/Typography.js +6 -6
- package/dist/cjs/components/Typography.js.map +1 -0
- package/dist/cjs/components/shared.js +8 -0
- package/dist/cjs/components/shared.js.map +1 -0
- package/dist/cjs/{dialog-DzNWLbJ6.js → dialog-CF2GBHOG.js} +2 -2
- package/dist/cjs/{dialog-DzNWLbJ6.js.map → dialog-CF2GBHOG.js.map} +1 -1
- package/dist/cjs/{index-DAds6mf_.js → index-BLGrl3PF.js} +31 -31
- package/dist/cjs/{index-DAds6mf_.js.map → index-BLGrl3PF.js.map} +1 -1
- package/dist/cjs/{index-BqCr1H3u.js → index-BiGm7NEA.js} +11 -11
- package/dist/cjs/{index-BqCr1H3u.js.map → index-BiGm7NEA.js.map} +1 -1
- package/dist/cjs/{index-CGet1HH4.js → index-PdtYHwPi.js} +66 -66
- package/dist/cjs/{index-CGet1HH4.js.map → index-PdtYHwPi.js.map} +1 -1
- package/dist/cjs/index-Vlwnyfvs.js +1145 -0
- package/dist/cjs/index-Vlwnyfvs.js.map +1 -0
- package/dist/cjs/{index-DR7GJU4J.js → index-hQmfI1O7.js} +17 -17
- package/dist/cjs/{index-DR7GJU4J.js.map → index-hQmfI1O7.js.map} +1 -1
- package/dist/cjs/index.js +463 -26
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/primitives/Accordion.js +16 -16
- package/dist/cjs/primitives/Accordion.js.map +1 -1
- package/dist/cjs/primitives/AlertDialog.js +1 -1
- package/dist/cjs/primitives/Badge.js +58 -6
- package/dist/cjs/primitives/Badge.js.map +1 -1
- package/dist/cjs/primitives/Chart.js +137 -137
- package/dist/cjs/primitives/Chart.js.map +1 -1
- package/dist/cjs/primitives/Collapsible.js +1 -1
- package/dist/cjs/primitives/Combobox.js +4 -4
- package/dist/cjs/primitives/Combobox.js.map +1 -1
- package/dist/cjs/primitives/Command.js +2 -2
- package/dist/cjs/primitives/ContextMenu.js +2 -2
- package/dist/cjs/primitives/Dialog.js +10 -6
- package/dist/cjs/primitives/Dialog.js.map +1 -1
- package/dist/cjs/primitives/Drawer.js +1 -1
- package/dist/cjs/primitives/DropdownMenu.js +38 -38
- package/dist/cjs/primitives/DropdownMenu.js.map +1 -1
- package/dist/cjs/primitives/HoverCard.js +16 -16
- package/dist/cjs/primitives/Menubar.js +2 -2
- package/dist/cjs/primitives/Popover.js +13 -13
- package/dist/cjs/primitives/RadioGroup.js +27 -26
- package/dist/cjs/primitives/RadioGroup.js.map +1 -1
- package/dist/cjs/primitives/Select.js +77 -77
- package/dist/cjs/primitives/Sheet.js +10 -6
- package/dist/cjs/primitives/Sheet.js.map +1 -1
- package/dist/cjs/primitives/Sidebar.js +3 -3
- package/dist/cjs/primitives/Sonner.js +12 -1138
- package/dist/cjs/primitives/Sonner.js.map +1 -1
- package/dist/cjs/primitives/Switch.js +4 -8
- package/dist/cjs/primitives/Switch.js.map +1 -1
- package/dist/cjs/primitives/Tabs.js +11 -11
- package/dist/cjs/primitives/ToggleGroup.js +1 -1
- package/dist/cjs/primitives/Tooltip.js +1 -1
- package/dist/cjs/primitives/index.js +9 -11
- package/dist/cjs/primitives/index.js.map +1 -1
- package/dist/cjs/renderIcon-fLF3odqg.js +26 -0
- package/dist/cjs/renderIcon-fLF3odqg.js.map +1 -0
- package/dist/cjs/{sheet-nHSYZxAA.js → sheet-CkCrHmVA.js} +2 -2
- package/dist/cjs/{sheet-nHSYZxAA.js.map → sheet-CkCrHmVA.js.map} +1 -1
- package/dist/cjs/{tooltip-CRkOMh1b.js → tooltip-C-568jEL.js} +17 -17
- package/dist/cjs/{tooltip-CRkOMh1b.js.map → tooltip-C-568jEL.js.map} +1 -1
- package/dist/cjs/useCreatableItems-BTHtd7uo.js +100 -0
- package/dist/cjs/useCreatableItems-BTHtd7uo.js.map +1 -0
- package/dist/cjs/{reselect-CeyIIDM-.js → with-selector-u4xTSzCv.js} +111 -111
- package/dist/cjs/with-selector-u4xTSzCv.js.map +1 -0
- package/dist/components/Accordion.d.ts +18 -0
- package/dist/components/Accordion.js +43 -0
- package/dist/components/Accordion.js.map +1 -0
- package/dist/components/Alert.d.ts +51 -0
- package/dist/components/Alert.js +99 -0
- package/dist/components/Alert.js.map +1 -0
- package/dist/components/Badge.d.ts +29 -0
- package/dist/components/Badge.js +69 -0
- package/dist/components/Badge.js.map +1 -0
- package/dist/components/Button.d.ts +47 -0
- package/dist/components/Button.js +119 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/Checkbox.d.ts +16 -0
- package/dist/components/Checkbox.js +42 -0
- package/dist/components/Checkbox.js.map +1 -0
- package/dist/components/ColorPicker/ColorPicker.d.ts +4 -0
- package/dist/components/ColorPicker/Palette.d.ts +12 -0
- package/dist/components/ColorPicker/Target.d.ts +15 -0
- package/dist/components/ColorPicker/constants.d.ts +10 -0
- package/dist/components/ColorPicker/hooks/useEyeDropper.d.ts +15 -0
- package/dist/components/ColorPicker/hooks/useRecentlyUsedColors.d.ts +11 -0
- package/dist/components/ColorPicker/index.d.ts +2 -0
- package/dist/components/ColorPicker/types.d.ts +42 -0
- package/dist/components/ColorPicker/utils.d.ts +31 -0
- package/dist/components/ColorPicker.js +28 -0
- package/dist/components/ColorPicker.js.map +1 -0
- package/dist/components/DataTable.js +2 -2
- package/dist/components/Dialog.d.ts +56 -0
- package/dist/components/Dialog.js +86 -0
- package/dist/components/Dialog.js.map +1 -0
- package/dist/components/DropdownMenu/Divider.d.ts +3 -0
- package/dist/components/DropdownMenu/DropdownBase.d.ts +3 -0
- package/dist/components/DropdownMenu/Label.d.ts +7 -0
- package/dist/components/DropdownMenu/Menu.d.ts +7 -0
- package/dist/components/DropdownMenu/MenuItem.d.ts +10 -0
- package/dist/components/DropdownMenu/MenuItemButton.d.ts +4 -0
- package/dist/components/DropdownMenu/SplitTrigger.d.ts +13 -0
- package/dist/components/DropdownMenu/SubMenu.d.ts +10 -0
- package/dist/components/DropdownMenu/TriggerButton.d.ts +10 -0
- package/dist/components/DropdownMenu/constants.d.ts +7 -0
- package/dist/components/DropdownMenu/index.d.ts +16 -0
- package/dist/components/DropdownMenu/types.d.ts +88 -0
- package/dist/components/DropdownMenu.js +178 -0
- package/dist/components/DropdownMenu.js.map +1 -0
- package/dist/components/Input.d.ts +39 -0
- package/dist/components/Input.js +165 -0
- package/dist/components/Input.js.map +1 -0
- package/dist/components/MultiSelect.constants.d.ts +5 -0
- package/dist/components/MultiSelect.d.ts +4 -0
- package/dist/components/MultiSelect.js +4 -0
- package/dist/components/MultiSelect.js.map +1 -0
- package/dist/components/MultiSelect.types.d.ts +121 -0
- package/dist/components/MultiSelect.utils.d.ts +18 -0
- package/dist/components/MultiSelectCombobox.d.ts +3 -0
- package/dist/components/MultiSelectCombobox.js +2 -0
- package/dist/components/MultiSelectCombobox.js.map +1 -0
- package/dist/components/MultiSelectCombobox.types.d.ts +52 -0
- package/dist/components/MultiSelectDropdown.d.ts +9 -0
- package/dist/components/MultiSelectDropdown.js +35 -0
- package/dist/components/MultiSelectDropdown.js.map +1 -0
- package/dist/components/OptionItem.d.ts +9 -0
- package/dist/components/OptionItem.js +32 -0
- package/dist/components/OptionItem.js.map +1 -0
- package/dist/components/Popover.d.ts +47 -0
- package/dist/components/Popover.js +117 -0
- package/dist/components/Popover.js.map +1 -0
- package/dist/components/RadioGroup.d.ts +32 -0
- package/dist/components/RadioGroup.js +61 -0
- package/dist/components/RadioGroup.js.map +1 -0
- package/dist/components/Select.constants.d.ts +5 -0
- package/dist/components/Select.d.ts +4 -0
- package/dist/components/Select.js +2 -0
- package/dist/components/Select.js.map +1 -0
- package/dist/components/Select.types.d.ts +58 -0
- package/dist/components/SelectFieldWrapper.d.ts +18 -0
- package/dist/components/SelectFieldWrapper.js +31 -0
- package/dist/components/SelectFieldWrapper.js.map +1 -0
- package/dist/components/SelectOptions.d.ts +2 -0
- package/dist/components/SelectOptions.js +41 -0
- package/dist/components/SelectOptions.js.map +1 -0
- package/dist/components/SelectTriggerContent.d.ts +18 -0
- package/dist/components/SelectTriggerContent.js +41 -0
- package/dist/components/SelectTriggerContent.js.map +1 -0
- package/dist/components/Sheet.d.ts +54 -0
- package/dist/components/Sheet.js +88 -0
- package/dist/components/Sheet.js.map +1 -0
- package/dist/components/Switch.d.ts +18 -0
- package/dist/components/Switch.js +33 -0
- package/dist/components/Switch.js.map +1 -0
- package/dist/components/Tabs.d.ts +20 -0
- package/dist/components/Tabs.js +72 -0
- package/dist/components/Tabs.js.map +1 -0
- package/dist/components/Textarea.d.ts +36 -0
- package/dist/components/Textarea.js +87 -0
- package/dist/components/Textarea.js.map +1 -0
- package/dist/components/Toastr.d.ts +30 -0
- package/dist/components/Toastr.js +131 -0
- package/dist/components/Toastr.js.map +1 -0
- package/dist/components/Tooltip.d.ts +29 -0
- package/dist/components/Tooltip.js +103 -0
- package/dist/components/Tooltip.js.map +1 -0
- package/dist/{primitives → components}/Typography.d.ts +2 -2
- package/dist/{primitives → components}/Typography.js +6 -6
- package/dist/components/Typography.js.map +1 -0
- package/dist/components/shared.js +6 -0
- package/dist/components/shared.js.map +1 -0
- package/dist/components/shared.types.d.ts +16 -0
- package/dist/{dialog-C97DOTvO.js → dialog-Civ9r6wD.js} +3 -3
- package/dist/{dialog-C97DOTvO.js.map → dialog-Civ9r6wD.js.map} +1 -1
- package/dist/hooks/useAsyncOptions.d.ts +13 -0
- package/dist/hooks/useCreatableItems.d.ts +30 -0
- package/dist/hooks/useLazyLoadSentinel.d.ts +6 -0
- package/dist/hooks/useMultiSelectOptions.d.ts +15 -0
- package/dist/hooks/useMultiSelectState.d.ts +37 -0
- package/dist/hooks/useSelectState.d.ts +27 -0
- package/dist/{index-PF0ms7Xn.js → index-9HvIbmnI.js} +3 -3
- package/dist/{index-PF0ms7Xn.js.map → index-9HvIbmnI.js.map} +1 -1
- package/dist/index-D_roZz8G.js +1137 -0
- package/dist/index-D_roZz8G.js.map +1 -0
- package/dist/{index-BwxI_qgh.js → index-KzJfsx-e.js} +3 -3
- package/dist/{index-BwxI_qgh.js.map → index-KzJfsx-e.js.map} +1 -1
- package/dist/index.css +25 -1
- package/dist/index.d.ts +40 -0
- package/dist/index.js +440 -24
- package/dist/index.js.map +1 -1
- package/dist/{input-group-CDBpz6Pb.js → input-group-ytECR3Hw.js} +2 -2
- package/dist/{input-group-CDBpz6Pb.js.map → input-group-ytECR3Hw.js.map} +1 -1
- package/dist/lib/renderIcon.d.ts +5 -0
- package/dist/primitives/Accordion.js +1 -1
- package/dist/primitives/AlertDialog.js +1 -1
- package/dist/primitives/Badge.d.ts +13 -3
- package/dist/primitives/Badge.js +54 -2
- package/dist/primitives/Badge.js.map +1 -1
- package/dist/primitives/Chart.js +1 -1
- package/dist/primitives/Combobox.js +3 -3
- package/dist/primitives/Command.js +3 -3
- package/dist/primitives/ContextMenu.js +1 -1
- package/dist/primitives/Dialog.d.ts +11 -3
- package/dist/primitives/Dialog.js +11 -7
- package/dist/primitives/Dialog.js.map +1 -1
- package/dist/primitives/Drawer.js +1 -1
- package/dist/primitives/DropdownMenu.js +2 -2
- package/dist/primitives/InputGroup.js +1 -1
- package/dist/primitives/Menubar.js +1 -1
- package/dist/primitives/RadioGroup.d.ts +8 -3
- package/dist/primitives/RadioGroup.js +9 -8
- package/dist/primitives/RadioGroup.js.map +1 -1
- package/dist/primitives/Select.js +3 -3
- package/dist/primitives/Sheet.d.ts +12 -3
- package/dist/primitives/Sheet.js +11 -7
- package/dist/primitives/Sheet.js.map +1 -1
- package/dist/primitives/Sidebar.js +3 -3
- package/dist/primitives/Sonner.js +11 -1135
- package/dist/primitives/Sonner.js.map +1 -1
- package/dist/primitives/Switch.d.ts +6 -3
- package/dist/primitives/Switch.js +4 -8
- package/dist/primitives/Switch.js.map +1 -1
- package/dist/primitives/Tooltip.js +1 -1
- package/dist/primitives/index.d.ts +0 -1
- package/dist/primitives/index.js +8 -8
- package/dist/renderIcon-tlvMyboj.js +20 -0
- package/dist/renderIcon-tlvMyboj.js.map +1 -0
- package/dist/shadcn/components/typography.d.ts +4 -4
- package/dist/{sheet-D1ngftfX.js → sheet-COcn22fC.js} +3 -3
- package/dist/{sheet-D1ngftfX.js.map → sheet-COcn22fC.js.map} +1 -1
- package/dist/{tooltip-D5soNrAP.js → tooltip-DzjIJacP.js} +3 -3
- package/dist/{tooltip-D5soNrAP.js.map → tooltip-DzjIJacP.js.map} +1 -1
- package/dist/useCreatableItems-B0seQA1_.js +89 -0
- package/dist/useCreatableItems-B0seQA1_.js.map +1 -0
- package/dist/utils/fieldIds.d.ts +2 -0
- package/dist/utils/hyphenize.d.ts +1 -0
- package/dist/{reselect-CABQm5hA.js → with-selector--fY1NrB9.js} +111 -111
- package/dist/with-selector--fY1NrB9.js.map +1 -0
- package/package.json +2 -1
- package/dist/DataTable-Y4POx0WN.js.map +0 -1
- package/dist/cjs/DataTable-DJw2SZ7b.js.map +0 -1
- package/dist/cjs/primitives/Typography.js.map +0 -1
- package/dist/cjs/reselect-CeyIIDM-.js.map +0 -1
- package/dist/primitives/Typography.js.map +0 -1
- package/dist/reselect-CABQm5hA.js.map +0 -1
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var primitives_Switch = require('../primitives/Switch.js');
|
|
6
|
+
var primitives_Label = require('../primitives/Label.js');
|
|
7
|
+
var utils = require('../utils-CTr7wn5d.js');
|
|
8
|
+
require('../index-COPkC3I5.js');
|
|
9
|
+
require('../index-D-iDn9RI.js');
|
|
10
|
+
require('../index-CGUGhyIp.js');
|
|
11
|
+
require('../index-CyrAgb4H.js');
|
|
12
|
+
require('../index-CCdG4z4E.js');
|
|
13
|
+
require('../index-CF951Pw9.js');
|
|
14
|
+
require('../index-Bf0WsHta.js');
|
|
15
|
+
require('../index-DMbj7vXd.js');
|
|
16
|
+
require('react-dom');
|
|
17
|
+
require('../label-Bdc9ytTI.js');
|
|
18
|
+
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Component
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
const Switch = React.forwardRef(({ label, error, helpText, required = false, className, size = "default", disabled, id: idProp, ...otherProps }, ref) => {
|
|
23
|
+
const generatedId = React.useId();
|
|
24
|
+
const id = idProp ?? generatedId;
|
|
25
|
+
const errorId = `error_${id}`;
|
|
26
|
+
const helpTextId = `helpText_${id}`;
|
|
27
|
+
const ariaDescribedBy = [error ? errorId : null, helpText ? helpTextId : null]
|
|
28
|
+
.filter(Boolean)
|
|
29
|
+
.join(" ") || undefined;
|
|
30
|
+
return (jsxRuntime.jsxs("div", { className: utils.cn("inline-flex flex-col gap-1.5", className), "data-disabled": disabled || undefined, "data-invalid": !!error || undefined, children: [jsxRuntime.jsxs("div", { className: utils.cn("inline-flex gap-2", helpText ? "items-start" : "items-center"), children: [jsxRuntime.jsx(primitives_Switch.Switch, { ref: ref, id: id, size: size, disabled: disabled, "aria-invalid": !!error || undefined, "aria-describedby": ariaDescribedBy, "aria-required": required || undefined, className: helpText ? "mt-0.5" : undefined, ...otherProps }), (label || helpText) && (jsxRuntime.jsxs("div", { className: "flex flex-col gap-0.5", children: [label && (jsxRuntime.jsxs(primitives_Label.Label, { htmlFor: id, className: utils.cn("cursor-pointer", disabled && "cursor-not-allowed opacity-50"), children: [label, required && (jsxRuntime.jsx("span", { "aria-hidden": "true", className: "text-destructive", children: "*" }))] })), helpText && (jsxRuntime.jsx("p", { id: helpTextId, className: "text-sm text-muted-foreground", children: helpText }))] }))] }), error && (jsxRuntime.jsx("p", { id: errorId, role: "alert", className: "text-xs text-destructive", children: error }))] }));
|
|
31
|
+
});
|
|
32
|
+
Switch.displayName = "Switch";
|
|
33
|
+
|
|
34
|
+
exports.Switch = Switch;
|
|
35
|
+
//# sourceMappingURL=Switch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Switch.js","sources":["../../../../src/components/Switch.tsx"],"sourcesContent":["import React, { forwardRef, useId } from \"react\";\n\nimport { Switch as PrimitiveSwitch } from \"src/primitives/Switch\";\nimport { Label } from \"src/primitives/Label\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface SwitchProps extends Omit<\n React.ComponentProps<typeof PrimitiveSwitch>,\n \"children\"\n> {\n /** Text label displayed next to the switch. */\n label?: string;\n /** Error message displayed below the switch. */\n error?: string;\n /** Helper text displayed below the label. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Shows a required indicator next to the label. */\n required?: boolean;\n /** Additional class name for the outermost wrapper. */\n className?: string;\n /** Size of the switch. */\n size?: \"sm\" | \"default\" | \"lg\";\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nconst Switch = forwardRef<\n React.ComponentRef<typeof PrimitiveSwitch>,\n SwitchProps\n>(\n (\n {\n label,\n error,\n helpText,\n required = false,\n className,\n size = \"default\",\n disabled,\n id: idProp,\n ...otherProps\n },\n ref\n ) => {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const errorId = `error_${id}`;\n const helpTextId = `helpText_${id}`;\n\n const ariaDescribedBy =\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n return (\n <div\n className={cn(\"inline-flex flex-col gap-1.5\", className)}\n data-disabled={disabled || undefined}\n data-invalid={!!error || undefined}\n >\n <div\n className={cn(\n \"inline-flex gap-2\",\n helpText ? \"items-start\" : \"items-center\"\n )}\n >\n <PrimitiveSwitch\n ref={ref}\n id={id}\n size={size}\n disabled={disabled}\n aria-invalid={!!error || undefined}\n aria-describedby={ariaDescribedBy}\n aria-required={required || undefined}\n className={helpText ? \"mt-0.5\" : undefined}\n {...otherProps}\n />\n {(label || helpText) && (\n <div className=\"flex flex-col gap-0.5\">\n {label && (\n <Label\n htmlFor={id}\n className={cn(\n \"cursor-pointer\",\n disabled && \"cursor-not-allowed opacity-50\"\n )}\n >\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n </Label>\n )}\n {helpText && (\n <p id={helpTextId} className=\"text-sm text-muted-foreground\">\n {helpText}\n </p>\n )}\n </div>\n )}\n </div>\n {error && (\n <p id={errorId} role=\"alert\" className=\"text-xs text-destructive\">\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nSwitch.displayName = \"Switch\";\n\nexport { Switch };\n"],"names":["forwardRef","useId","_jsxs","cn","_jsx","PrimitiveSwitch","Label"],"mappings":";;;;;;;;;;;;;;;;;;AA4BA;AACA;AACA;AAEA,MAAM,MAAM,GAAGA,gBAAU,CAIvB,CACE,EACE,KAAK,EACL,KAAK,EACL,QAAQ,EACR,QAAQ,GAAG,KAAK,EAChB,SAAS,EACT,IAAI,GAAG,SAAS,EAChB,QAAQ,EACR,EAAE,EAAE,MAAM,EACV,GAAG,UAAU,EACd,EACD,GAAG,KACD;AACF,IAAA,MAAM,WAAW,GAAGC,WAAK,EAAE;AAC3B,IAAA,MAAM,EAAE,GAAG,MAAM,IAAI,WAAW;AAChC,IAAA,MAAM,OAAO,GAAG,CAAA,MAAA,EAAS,EAAE,EAAE;AAC7B,IAAA,MAAM,UAAU,GAAG,CAAA,SAAA,EAAY,EAAE,EAAE;IAEnC,MAAM,eAAe,GACnB,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,IAAI;SAClD,MAAM,CAAC,OAAO;AACd,SAAA,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS;AAE3B,IAAA,QACEC,eAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAEC,QAAE,CAAC,8BAA8B,EAAE,SAAS,CAAC,EAAA,eAAA,EACzC,QAAQ,IAAI,SAAS,kBACtB,CAAC,CAAC,KAAK,IAAI,SAAS,EAAA,QAAA,EAAA,CAElCD,eAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAEC,QAAE,CACX,mBAAmB,EACnB,QAAQ,GAAG,aAAa,GAAG,cAAc,CAC1C,EAAA,QAAA,EAAA,CAEDC,eAACC,wBAAe,EAAA,EACd,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,EAAE,EACN,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAAA,cAAA,EACJ,CAAC,CAAC,KAAK,IAAI,SAAS,EAAA,kBAAA,EAChB,eAAe,EAAA,eAAA,EAClB,QAAQ,IAAI,SAAS,EACpC,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,KACtC,UAAU,EAAA,CACd,EACD,CAAC,KAAK,IAAI,QAAQ,MACjBH,yBAAK,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CACnC,KAAK,KACJA,gBAACI,sBAAK,EAAA,EACJ,OAAO,EAAE,EAAE,EACX,SAAS,EAAEH,QAAE,CACX,gBAAgB,EAChB,QAAQ,IAAI,+BAA+B,CAC5C,aAEA,KAAK,EACL,QAAQ,KACPC,cAAA,CAAA,MAAA,EAAA,EAAA,aAAA,EAAkB,MAAM,EAAC,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAAA,GAAA,EAAA,CAE9C,CACR,CAAA,EAAA,CACK,CACT,EACA,QAAQ,KACPA,cAAA,CAAA,GAAA,EAAA,EAAG,EAAE,EAAE,UAAU,EAAE,SAAS,EAAC,+BAA+B,EAAA,QAAA,EACzD,QAAQ,GACP,CACL,CAAA,EAAA,CACG,CACP,CAAA,EAAA,CACG,EACL,KAAK,KACJA,cAAA,CAAA,GAAA,EAAA,EAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,0BAA0B,EAAA,QAAA,EAC9D,KAAK,GACJ,CACL,CAAA,EAAA,CACG;AAEV,CAAC;AAGH,MAAM,CAAC,WAAW,GAAG,QAAQ;;;;"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var utils = require('../utils-CTr7wn5d.js');
|
|
6
|
+
var renderIcon = require('../renderIcon-fLF3odqg.js');
|
|
7
|
+
var primitives_Tabs = require('../primitives/Tabs.js');
|
|
8
|
+
require('../index-BZhTddX0.js');
|
|
9
|
+
require('../index-COPkC3I5.js');
|
|
10
|
+
require('../index-CGUGhyIp.js');
|
|
11
|
+
require('../index-hQmfI1O7.js');
|
|
12
|
+
require('../index-Ch55j1or.js');
|
|
13
|
+
require('../index-D-iDn9RI.js');
|
|
14
|
+
require('../index-BwAq9ba8.js');
|
|
15
|
+
require('../index-CCdG4z4E.js');
|
|
16
|
+
require('../index-DMbj7vXd.js');
|
|
17
|
+
require('react-dom');
|
|
18
|
+
require('../index-lWVw05cs.js');
|
|
19
|
+
require('../index-CyrAgb4H.js');
|
|
20
|
+
require('../index-9jC1advf.js');
|
|
21
|
+
require('../index-DcCSSgb7.js');
|
|
22
|
+
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
// Size config
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
const SIZE_CLASSES = {
|
|
27
|
+
default: "",
|
|
28
|
+
lg: "text-[15px] px-3 py-1.5",
|
|
29
|
+
};
|
|
30
|
+
const LIST_HEIGHT = {
|
|
31
|
+
default: "",
|
|
32
|
+
lg: "group-data-horizontal/tabs:h-10",
|
|
33
|
+
};
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
// Context
|
|
36
|
+
// ---------------------------------------------------------------------------
|
|
37
|
+
const TabsSizeContext = React.createContext("default");
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
// Tabs (root)
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
const TabsRoot = React.forwardRef(({ size = "default", children, ...props }, ref) => (jsxRuntime.jsx(TabsSizeContext.Provider, { value: size, children: jsxRuntime.jsx(primitives_Tabs.Tabs, { ref: ref, ...props, children: children }) })));
|
|
42
|
+
TabsRoot.displayName = "Tabs";
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// Tabs.List
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
const TabsListComponent = React.forwardRef(({ className, ...props }, ref) => {
|
|
47
|
+
const size = React.useContext(TabsSizeContext);
|
|
48
|
+
return (jsxRuntime.jsx(primitives_Tabs.TabsList, { ref: ref, className: utils.cn(LIST_HEIGHT[size], className), ...props }));
|
|
49
|
+
});
|
|
50
|
+
TabsListComponent.displayName = "Tabs.List";
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
// Tabs.Item
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
const TabsItemComponent = React.forwardRef(({ icon, className, children, ...otherProps }, ref) => {
|
|
55
|
+
const size = React.useContext(TabsSizeContext);
|
|
56
|
+
return (jsxRuntime.jsxs(primitives_Tabs.TabsTrigger, { ref: ref, className: utils.cn(SIZE_CLASSES[size], icon && "gap-1.5", className), ...otherProps, children: [icon && renderIcon.renderIcon(icon, size === "lg" ? "size-5" : "size-4"), children] }));
|
|
57
|
+
});
|
|
58
|
+
TabsItemComponent.displayName = "Tabs.Item";
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
// Tabs.Content
|
|
61
|
+
// ---------------------------------------------------------------------------
|
|
62
|
+
const TabsContentComponent = React.forwardRef((props, ref) => jsxRuntime.jsx(primitives_Tabs.TabsContent, { ref: ref, ...props }));
|
|
63
|
+
TabsContentComponent.displayName = "Tabs.Content";
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
// Compound component
|
|
66
|
+
// ---------------------------------------------------------------------------
|
|
67
|
+
const Tabs = Object.assign(TabsRoot, {
|
|
68
|
+
List: TabsListComponent,
|
|
69
|
+
Item: TabsItemComponent,
|
|
70
|
+
Content: TabsContentComponent,
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
exports.Tabs = Tabs;
|
|
74
|
+
//# sourceMappingURL=Tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tabs.js","sources":["../../../../src/components/Tabs.tsx"],"sourcesContent":["import React, { forwardRef, createContext, useContext } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { renderIcon, type IconProp } from \"src/lib/renderIcon\";\nimport {\n Tabs as PrimitiveTabs,\n TabsList as PrimitiveTabsList,\n TabsTrigger as PrimitiveTabsTrigger,\n TabsContent as PrimitiveTabsContent,\n} from \"src/primitives/Tabs\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ntype TabsSize = \"default\" | \"lg\";\n\nexport interface TabsProps extends React.ComponentProps<typeof PrimitiveTabs> {\n /** Size of tab triggers. Applied to all Tabs.Item children. */\n size?: TabsSize;\n}\n\ntype TabsListProps = React.ComponentProps<typeof PrimitiveTabsList>;\n\ninterface TabsItemProps extends React.ComponentProps<\n typeof PrimitiveTabsTrigger\n> {\n /** Icon component, element, or class-name string rendered before the label. */\n icon?: IconProp;\n}\n\ntype TabsContentProps = React.ComponentProps<typeof PrimitiveTabsContent>;\n\n// ---------------------------------------------------------------------------\n// Size config\n// ---------------------------------------------------------------------------\n\nconst SIZE_CLASSES: Record<TabsSize, string> = {\n default: \"\",\n lg: \"text-[15px] px-3 py-1.5\",\n};\n\nconst LIST_HEIGHT: Record<TabsSize, string> = {\n default: \"\",\n lg: \"group-data-horizontal/tabs:h-10\",\n};\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\nconst TabsSizeContext = createContext<TabsSize>(\"default\");\n\n// ---------------------------------------------------------------------------\n// Tabs (root)\n// ---------------------------------------------------------------------------\n\nconst TabsRoot = forwardRef<HTMLDivElement, TabsProps>(\n ({ size = \"default\", children, ...props }, ref) => (\n <TabsSizeContext.Provider value={size}>\n <PrimitiveTabs ref={ref} {...props}>\n {children}\n </PrimitiveTabs>\n </TabsSizeContext.Provider>\n )\n);\nTabsRoot.displayName = \"Tabs\";\n\n// ---------------------------------------------------------------------------\n// Tabs.List\n// ---------------------------------------------------------------------------\n\nconst TabsListComponent = forwardRef<HTMLDivElement, TabsListProps>(\n ({ className, ...props }, ref) => {\n const size = useContext(TabsSizeContext);\n\n return (\n <PrimitiveTabsList\n ref={ref}\n className={cn(LIST_HEIGHT[size], className)}\n {...props}\n />\n );\n }\n);\nTabsListComponent.displayName = \"Tabs.List\";\n\n// ---------------------------------------------------------------------------\n// Tabs.Item\n// ---------------------------------------------------------------------------\n\nconst TabsItemComponent = forwardRef<HTMLButtonElement, TabsItemProps>(\n ({ icon, className, children, ...otherProps }, ref) => {\n const size = useContext(TabsSizeContext);\n\n return (\n <PrimitiveTabsTrigger\n ref={ref}\n className={cn(SIZE_CLASSES[size], icon && \"gap-1.5\", className)}\n {...otherProps}\n >\n {icon && renderIcon(icon, size === \"lg\" ? \"size-5\" : \"size-4\")}\n {children}\n </PrimitiveTabsTrigger>\n );\n }\n);\nTabsItemComponent.displayName = \"Tabs.Item\";\n\n// ---------------------------------------------------------------------------\n// Tabs.Content\n// ---------------------------------------------------------------------------\n\nconst TabsContentComponent = forwardRef<HTMLDivElement, TabsContentProps>(\n (props, ref) => <PrimitiveTabsContent ref={ref} {...props} />\n);\nTabsContentComponent.displayName = \"Tabs.Content\";\n\n// ---------------------------------------------------------------------------\n// Compound component\n// ---------------------------------------------------------------------------\n\nconst Tabs = Object.assign(TabsRoot, {\n List: TabsListComponent,\n Item: TabsItemComponent,\n Content: TabsContentComponent,\n});\n\nexport { Tabs };\n"],"names":["createContext","forwardRef","_jsx","PrimitiveTabs","useContext","PrimitiveTabsList","cn","_jsxs","PrimitiveTabsTrigger","renderIcon","PrimitiveTabsContent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAiCA;AACA;AACA;AAEA,MAAM,YAAY,GAA6B;AAC7C,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,EAAE,EAAE,yBAAyB;CAC9B;AAED,MAAM,WAAW,GAA6B;AAC5C,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,EAAE,EAAE,iCAAiC;CACtC;AAED;AACA;AACA;AAEA,MAAM,eAAe,GAAGA,mBAAa,CAAW,SAAS,CAAC;AAE1D;AACA;AACA;AAEA,MAAM,QAAQ,GAAGC,gBAAU,CACzB,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAC5CC,cAAA,CAAC,eAAe,CAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,EAAA,QAAA,EACnCA,cAAA,CAACC,oBAAa,EAAA,EAAC,GAAG,EAAE,GAAG,EAAA,GAAM,KAAK,EAAA,QAAA,EAC/B,QAAQ,GACK,EAAA,CACS,CAC5B,CACF;AACD,QAAQ,CAAC,WAAW,GAAG,MAAM;AAE7B;AACA;AACA;AAEA,MAAM,iBAAiB,GAAGF,gBAAU,CAClC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAI;AAC/B,IAAA,MAAM,IAAI,GAAGG,gBAAU,CAAC,eAAe,CAAC;IAExC,QACEF,eAACG,wBAAiB,EAAA,EAChB,GAAG,EAAE,GAAG,EACR,SAAS,EAAEC,QAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,EAAA,GACvC,KAAK,EAAA,CACT;AAEN,CAAC,CACF;AACD,iBAAiB,CAAC,WAAW,GAAG,WAAW;AAE3C;AACA;AACA;AAEA,MAAM,iBAAiB,GAAGL,gBAAU,CAClC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,UAAU,EAAE,EAAE,GAAG,KAAI;AACpD,IAAA,MAAM,IAAI,GAAGG,gBAAU,CAAC,eAAe,CAAC;IAExC,QACEG,gBAACC,2BAAoB,EAAA,EACnB,GAAG,EAAE,GAAG,EACR,SAAS,EAAEF,QAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,SAAS,EAAE,SAAS,CAAC,EAAA,GAC3D,UAAU,EAAA,QAAA,EAAA,CAEb,IAAI,IAAIG,qBAAU,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAC7D,QAAQ,CAAA,EAAA,CACY;AAE3B,CAAC,CACF;AACD,iBAAiB,CAAC,WAAW,GAAG,WAAW;AAE3C;AACA;AACA;AAEA,MAAM,oBAAoB,GAAGR,gBAAU,CACrC,CAAC,KAAK,EAAE,GAAG,KAAKC,cAAA,CAACQ,2BAAoB,IAAC,GAAG,EAAE,GAAG,EAAA,GAAM,KAAK,EAAA,CAAI,CAC9D;AACD,oBAAoB,CAAC,WAAW,GAAG,cAAc;AAEjD;AACA;AACA;AAEA,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;AACnC,IAAA,IAAI,EAAE,iBAAiB;AACvB,IAAA,IAAI,EAAE,iBAAiB;AACvB,IAAA,OAAO,EAAE,oBAAoB;AAC9B,CAAA;;;;"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var utils = require('../utils-CTr7wn5d.js');
|
|
6
|
+
var primitives_Field = require('../primitives/Field.js');
|
|
7
|
+
var primitives_Textarea = require('../primitives/Textarea.js');
|
|
8
|
+
require('../index-BZhTddX0.js');
|
|
9
|
+
require('../label-Bdc9ytTI.js');
|
|
10
|
+
require('../index-DMbj7vXd.js');
|
|
11
|
+
require('react-dom');
|
|
12
|
+
require('../index-D-iDn9RI.js');
|
|
13
|
+
require('../separator-CPy2gyg1.js');
|
|
14
|
+
require('../textarea-CZSSY75H.js');
|
|
15
|
+
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
// Size config
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
const SIZE_ROWS = {
|
|
20
|
+
small: 1,
|
|
21
|
+
medium: 3,
|
|
22
|
+
large: 4,
|
|
23
|
+
};
|
|
24
|
+
const SIZE_MIN_HEIGHT = {
|
|
25
|
+
small: "min-h-8",
|
|
26
|
+
medium: "min-h-20",
|
|
27
|
+
large: "min-h-28",
|
|
28
|
+
};
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// Utilities
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
function getTrimmedValue(value, disableTrimOnBlur) {
|
|
33
|
+
if (disableTrimOnBlur || typeof value !== "string")
|
|
34
|
+
return value;
|
|
35
|
+
return value.trim();
|
|
36
|
+
}
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
// Component
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
const Textarea = React.forwardRef(({ size = "medium", resize = "vertical", label = "", error = "", helpText = "", disabled = false, required = false, maxLength, unlimitedChars = false, disableTrimOnBlur = false, prefix, suffix, nakedTextarea = false, labelProps, className = "", rows: rowsProp, onBlur, onChange, value: controlledValue, ...otherProps }, ref) => {
|
|
41
|
+
const generatedId = React.useId();
|
|
42
|
+
const id = otherProps.id ?? generatedId;
|
|
43
|
+
const errorId = `error_${id}`;
|
|
44
|
+
const helpTextId = `helpText_${id}`;
|
|
45
|
+
// Controlled / uncontrolled value tracking
|
|
46
|
+
const [valueInternal, setValueInternal] = React.useState(controlledValue ?? "");
|
|
47
|
+
const isControlled = controlledValue !== undefined;
|
|
48
|
+
const value = isControlled ? controlledValue : valueInternal;
|
|
49
|
+
const valueLength = value?.toString().length || 0;
|
|
50
|
+
const isMaxLengthPresent = !!maxLength || maxLength === 0;
|
|
51
|
+
const isCharacterLimitVisible = isMaxLengthPresent && valueLength >= maxLength * 0.85;
|
|
52
|
+
const maxLengthError = unlimitedChars && valueLength > maxLength;
|
|
53
|
+
const rows = rowsProp ?? SIZE_ROWS[size];
|
|
54
|
+
// --- Handlers ---
|
|
55
|
+
const handleChange = (e) => {
|
|
56
|
+
if (!isControlled) {
|
|
57
|
+
setValueInternal(e.target.value);
|
|
58
|
+
}
|
|
59
|
+
onChange?.(e);
|
|
60
|
+
};
|
|
61
|
+
const handleBlur = (e) => {
|
|
62
|
+
const trimmedValue = getTrimmedValue(value ?? "", disableTrimOnBlur);
|
|
63
|
+
if (trimmedValue !== value) {
|
|
64
|
+
e.target.value = trimmedValue.toString();
|
|
65
|
+
handleChange(e);
|
|
66
|
+
}
|
|
67
|
+
onBlur?.(e);
|
|
68
|
+
};
|
|
69
|
+
// --- aria-describedby ---
|
|
70
|
+
const ariaDescribedBy = [error ? errorId : null, helpText ? helpTextId : null]
|
|
71
|
+
.filter(Boolean)
|
|
72
|
+
.join(" ") || undefined;
|
|
73
|
+
// --- Textarea element ---
|
|
74
|
+
const hasField = !!(label || error || helpText);
|
|
75
|
+
const textareaElement = (jsxRuntime.jsx(primitives_Textarea.Textarea, { ref: ref, id: id, rows: rows, disabled: disabled, required: required, "aria-invalid": !!error || undefined, "aria-describedby": ariaDescribedBy, className: utils.cn(
|
|
76
|
+
// Override shadcn's field-sizing-content and min-h-16 so rows works
|
|
77
|
+
"!field-sizing-normal", SIZE_MIN_HEIGHT[size], resize === "none" && "resize-none", resize === "vertical" && "resize-y", nakedTextarea &&
|
|
78
|
+
"border-transparent shadow-none px-0 py-0 focus-visible:border-transparent focus-visible:ring-0", !!error && "border-destructive ring-destructive/20 ring-3"), value: value, onBlur: handleBlur, onChange: handleChange, ...(isMaxLengthPresent && !unlimitedChars ? { maxLength } : {}), ...otherProps }));
|
|
79
|
+
const hasPrefixSuffix = !!(prefix || suffix);
|
|
80
|
+
const textareaWithAffixes = hasPrefixSuffix ? (jsxRuntime.jsxs("div", { className: utils.cn("flex items-start gap-2 rounded-lg border border-input px-2.5 py-2 focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50", !!error && "border-destructive ring-destructive/20 ring-3", nakedTextarea && "border-transparent shadow-none"), children: [prefix && (jsxRuntime.jsx("div", { className: "shrink-0 pt-0.5 text-muted-foreground", children: prefix })), jsxRuntime.jsx(primitives_Textarea.Textarea, { ref: ref, id: id, rows: rows, disabled: disabled, required: required, "aria-invalid": !!error || undefined, "aria-describedby": ariaDescribedBy, className: utils.cn("!field-sizing-normal border-0 p-0 shadow-none focus-visible:border-0 focus-visible:ring-0", SIZE_MIN_HEIGHT[size], resize === "none" && "resize-none", resize === "vertical" && "resize-y"), value: value, onBlur: handleBlur, onChange: handleChange, ...(isMaxLengthPresent && !unlimitedChars ? { maxLength } : {}), ...otherProps }), suffix && (jsxRuntime.jsx("div", { className: "shrink-0 pt-0.5 text-muted-foreground", children: suffix }))] })) : (textareaElement);
|
|
81
|
+
if (!hasField) {
|
|
82
|
+
return jsxRuntime.jsx("div", { className: utils.cn(className), children: textareaWithAffixes });
|
|
83
|
+
}
|
|
84
|
+
return (jsxRuntime.jsxs(primitives_Field.Field, { "data-disabled": disabled || undefined, "data-invalid": !!error || undefined, className: className, children: [(label || isCharacterLimitVisible) && (jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [label && (jsxRuntime.jsxs(primitives_Field.FieldLabel, { htmlFor: id, ...labelProps, children: [label, required && (jsxRuntime.jsx("span", { "aria-hidden": "true", className: "text-destructive", children: "*" }))] })), isCharacterLimitVisible && (jsxRuntime.jsxs("span", { className: utils.cn("text-xs tabular-nums", maxLengthError ? "text-destructive" : "text-muted-foreground"), children: [valueLength, "/", maxLength] }))] })), jsxRuntime.jsxs(primitives_Field.FieldContent, { children: [textareaWithAffixes, !!error && jsxRuntime.jsx(primitives_Field.FieldError, { id: errorId, children: error }), helpText && (jsxRuntime.jsx(primitives_Field.FieldDescription, { id: helpTextId, children: helpText }))] })] }));
|
|
85
|
+
});
|
|
86
|
+
Textarea.displayName = "Textarea";
|
|
87
|
+
|
|
88
|
+
exports.Textarea = Textarea;
|
|
89
|
+
//# sourceMappingURL=Textarea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Textarea.js","sources":["../../../../src/components/Textarea.tsx"],"sourcesContent":["import React, { forwardRef, useId, useState } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Field,\n FieldLabel,\n FieldContent,\n FieldDescription,\n FieldError,\n} from \"src/primitives/Field\";\nimport { Textarea as PrimitiveTextarea } from \"src/primitives/Textarea\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ntype TextareaSize = \"small\" | \"medium\" | \"large\";\ntype TextareaResize = \"vertical\" | \"none\";\n\ntype PrimitiveTextareaProps = React.ComponentProps<typeof PrimitiveTextarea>;\n\nexport interface TextareaProps extends Omit<\n PrimitiveTextareaProps,\n \"size\" | \"children\"\n> {\n /** Size of the textarea. Controls default rows: small=1, medium=3, large=4. */\n size?: TextareaSize;\n /** Resize behavior. */\n resize?: TextareaResize;\n /** Label displayed above the textarea. */\n label?: string;\n /** Error message displayed below the textarea. */\n error?: string;\n /** Help text displayed below the textarea. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Maximum character limit. Counter visible at 85% capacity. */\n maxLength?: number;\n /** Allow typing past maxLength, show error styling on count. */\n unlimitedChars?: boolean;\n /** Prevent trimming whitespace on blur. */\n disableTrimOnBlur?: boolean;\n /** Content to display before the textarea. */\n prefix?: React.ReactNode;\n /** Content to display after the textarea. */\n suffix?: React.ReactNode;\n /** Render the textarea without borders. */\n nakedTextarea?: boolean;\n /** Props forwarded to the Label element. */\n labelProps?: React.ComponentProps<typeof FieldLabel>;\n /** Additional class name for the outermost wrapper. */\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Size config\n// ---------------------------------------------------------------------------\n\nconst SIZE_ROWS: Record<TextareaSize, number> = {\n small: 1,\n medium: 3,\n large: 4,\n};\n\nconst SIZE_MIN_HEIGHT: Record<TextareaSize, string> = {\n small: \"min-h-8\",\n medium: \"min-h-20\",\n large: \"min-h-28\",\n};\n\n// ---------------------------------------------------------------------------\n// Utilities\n// ---------------------------------------------------------------------------\n\nfunction getTrimmedValue(\n value: string | number,\n disableTrimOnBlur: boolean\n): string | number {\n if (disableTrimOnBlur || typeof value !== \"string\") return value;\n return value.trim();\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nconst Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n size = \"medium\",\n resize = \"vertical\",\n label = \"\",\n error = \"\",\n helpText = \"\",\n disabled = false,\n required = false,\n maxLength,\n unlimitedChars = false,\n disableTrimOnBlur = false,\n prefix,\n suffix,\n nakedTextarea = false,\n labelProps,\n className = \"\",\n rows: rowsProp,\n onBlur,\n onChange,\n value: controlledValue,\n ...otherProps\n },\n ref\n ) => {\n const generatedId = useId();\n const id = otherProps.id ?? generatedId;\n const errorId = `error_${id}`;\n const helpTextId = `helpText_${id}`;\n\n // Controlled / uncontrolled value tracking\n const [valueInternal, setValueInternal] = useState(controlledValue ?? \"\");\n const isControlled = controlledValue !== undefined;\n\n const value = isControlled ? controlledValue : valueInternal;\n const valueLength = value?.toString().length || 0;\n\n const isMaxLengthPresent = !!maxLength || maxLength === 0;\n const isCharacterLimitVisible =\n isMaxLengthPresent && valueLength >= maxLength! * 0.85;\n const maxLengthError = unlimitedChars && valueLength > maxLength!;\n\n const rows = rowsProp ?? SIZE_ROWS[size];\n\n // --- Handlers ---\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (!isControlled) {\n setValueInternal(e.target.value);\n }\n onChange?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLTextAreaElement>) => {\n const trimmedValue = getTrimmedValue(value ?? \"\", disableTrimOnBlur);\n\n if (trimmedValue !== value) {\n e.target.value = trimmedValue.toString();\n handleChange(e as unknown as React.ChangeEvent<HTMLTextAreaElement>);\n }\n\n onBlur?.(e);\n };\n\n // --- aria-describedby ---\n\n const ariaDescribedBy =\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n // --- Textarea element ---\n\n const hasField = !!(label || error || helpText);\n\n const textareaElement = (\n <PrimitiveTextarea\n ref={ref}\n id={id}\n rows={rows}\n disabled={disabled}\n required={required}\n aria-invalid={!!error || undefined}\n aria-describedby={ariaDescribedBy}\n className={cn(\n // Override shadcn's field-sizing-content and min-h-16 so rows works\n \"!field-sizing-normal\",\n SIZE_MIN_HEIGHT[size],\n resize === \"none\" && \"resize-none\",\n resize === \"vertical\" && \"resize-y\",\n nakedTextarea &&\n \"border-transparent shadow-none px-0 py-0 focus-visible:border-transparent focus-visible:ring-0\",\n !!error && \"border-destructive ring-destructive/20 ring-3\"\n )}\n value={value}\n onBlur={handleBlur}\n onChange={handleChange}\n {...(isMaxLengthPresent && !unlimitedChars ? { maxLength } : {})}\n {...otherProps}\n />\n );\n\n const hasPrefixSuffix = !!(prefix || suffix);\n\n const textareaWithAffixes = hasPrefixSuffix ? (\n <div\n className={cn(\n \"flex items-start gap-2 rounded-lg border border-input px-2.5 py-2 focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50\",\n !!error && \"border-destructive ring-destructive/20 ring-3\",\n nakedTextarea && \"border-transparent shadow-none\"\n )}\n >\n {prefix && (\n <div className=\"shrink-0 pt-0.5 text-muted-foreground\">{prefix}</div>\n )}\n <PrimitiveTextarea\n ref={ref}\n id={id}\n rows={rows}\n disabled={disabled}\n required={required}\n aria-invalid={!!error || undefined}\n aria-describedby={ariaDescribedBy}\n className={cn(\n \"!field-sizing-normal border-0 p-0 shadow-none focus-visible:border-0 focus-visible:ring-0\",\n SIZE_MIN_HEIGHT[size],\n resize === \"none\" && \"resize-none\",\n resize === \"vertical\" && \"resize-y\"\n )}\n value={value}\n onBlur={handleBlur}\n onChange={handleChange}\n {...(isMaxLengthPresent && !unlimitedChars ? { maxLength } : {})}\n {...otherProps}\n />\n {suffix && (\n <div className=\"shrink-0 pt-0.5 text-muted-foreground\">{suffix}</div>\n )}\n </div>\n ) : (\n textareaElement\n );\n\n if (!hasField) {\n return <div className={cn(className)}>{textareaWithAffixes}</div>;\n }\n\n return (\n <Field\n data-disabled={disabled || undefined}\n data-invalid={!!error || undefined}\n className={className}\n >\n {(label || isCharacterLimitVisible) && (\n <div className=\"flex items-center justify-between\">\n {label && (\n <FieldLabel htmlFor={id} {...labelProps}>\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n </FieldLabel>\n )}\n {isCharacterLimitVisible && (\n <span\n className={cn(\n \"text-xs tabular-nums\",\n maxLengthError ? \"text-destructive\" : \"text-muted-foreground\"\n )}\n >\n {valueLength}/{maxLength}\n </span>\n )}\n </div>\n )}\n <FieldContent>\n {textareaWithAffixes}\n {!!error && <FieldError id={errorId}>{error}</FieldError>}\n {helpText && (\n <FieldDescription id={helpTextId}>{helpText}</FieldDescription>\n )}\n </FieldContent>\n </Field>\n );\n }\n);\n\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n"],"names":["forwardRef","useId","useState","_jsx","PrimitiveTextarea","cn","_jsxs","Field","FieldLabel","FieldContent","FieldError","FieldDescription"],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('../index-Vlwnyfvs.js');
|
|
4
|
+
require('react');
|
|
5
|
+
require('react-dom');
|
|
6
|
+
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
// Dedup set — prevents showing the same toast twice simultaneously
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
const activeToasts = new Set();
|
|
11
|
+
function toastKey(type, message, buttonLabel) {
|
|
12
|
+
return `${type}::${message}::${buttonLabel ?? ""}`;
|
|
13
|
+
}
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// RTL detection
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
function getContentDir() {
|
|
18
|
+
if (typeof document === "undefined")
|
|
19
|
+
return "ltr";
|
|
20
|
+
return (document.documentElement.getAttribute("dir") ??
|
|
21
|
+
document.body.getAttribute("dir") ??
|
|
22
|
+
"ltr");
|
|
23
|
+
}
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
// Message parsing
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
function resolveMessage(message) {
|
|
28
|
+
if (typeof message === "string")
|
|
29
|
+
return message;
|
|
30
|
+
if (message && typeof message === "object") {
|
|
31
|
+
if (message.customMessage)
|
|
32
|
+
return message.customMessage;
|
|
33
|
+
if (message.notice)
|
|
34
|
+
return message.notice;
|
|
35
|
+
if (message.noticeCode)
|
|
36
|
+
return message.noticeCode;
|
|
37
|
+
}
|
|
38
|
+
return String(message);
|
|
39
|
+
}
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
// Error parsing (mirrors neeto-ui behavior)
|
|
42
|
+
// ---------------------------------------------------------------------------
|
|
43
|
+
function resolveErrorMessage(errorObject) {
|
|
44
|
+
if (typeof errorObject === "string")
|
|
45
|
+
return errorObject;
|
|
46
|
+
if (errorObject && typeof errorObject === "object") {
|
|
47
|
+
// Axios-style error
|
|
48
|
+
const axiosLike = errorObject;
|
|
49
|
+
if (axiosLike.response?.data) {
|
|
50
|
+
const data = axiosLike.response.data;
|
|
51
|
+
if (data.customMessage)
|
|
52
|
+
return String(data.customMessage);
|
|
53
|
+
if (data.error)
|
|
54
|
+
return String(data.error);
|
|
55
|
+
if (Array.isArray(data.errors))
|
|
56
|
+
return data.errors.join("\n");
|
|
57
|
+
if (data.noticeCode)
|
|
58
|
+
return String(data.noticeCode);
|
|
59
|
+
}
|
|
60
|
+
if (axiosLike.isAxiosError && axiosLike.message)
|
|
61
|
+
return axiosLike.message;
|
|
62
|
+
// Native Error
|
|
63
|
+
if (errorObject instanceof Error)
|
|
64
|
+
return errorObject.message;
|
|
65
|
+
// ToastrMessage object
|
|
66
|
+
return resolveMessage(errorObject);
|
|
67
|
+
}
|
|
68
|
+
return "Something went wrong.";
|
|
69
|
+
}
|
|
70
|
+
function showToast(type, message, config) {
|
|
71
|
+
const { buttonLabel, onClick, showIcon, ...restConfig } = config ?? {};
|
|
72
|
+
const key = toastKey(type, message, buttonLabel);
|
|
73
|
+
if (activeToasts.has(key))
|
|
74
|
+
return undefined;
|
|
75
|
+
activeToasts.add(key);
|
|
76
|
+
const options = {
|
|
77
|
+
onDismiss: () => activeToasts.delete(key),
|
|
78
|
+
onAutoClose: () => activeToasts.delete(key),
|
|
79
|
+
position: getContentDir() === "rtl" ? "bottom-right" : "bottom-left",
|
|
80
|
+
...restConfig,
|
|
81
|
+
};
|
|
82
|
+
if (buttonLabel) {
|
|
83
|
+
options.action = {
|
|
84
|
+
label: buttonLabel,
|
|
85
|
+
onClick: onClick ?? (() => { }),
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
// When showIcon is explicitly false, hide the type icon
|
|
89
|
+
if (showIcon === false) {
|
|
90
|
+
options.icon = null;
|
|
91
|
+
}
|
|
92
|
+
return index.toast[type](message, options);
|
|
93
|
+
}
|
|
94
|
+
// ---------------------------------------------------------------------------
|
|
95
|
+
// Public API (matches neeto-ui Toastr interface)
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
function parseConfig(args) {
|
|
98
|
+
if (args.length === 0)
|
|
99
|
+
return {};
|
|
100
|
+
const first = args[0];
|
|
101
|
+
if (typeof first === "object" && first !== null && !Array.isArray(first)) {
|
|
102
|
+
return first;
|
|
103
|
+
}
|
|
104
|
+
// Legacy positional args: buttonLabel, onClick, customConfig, showIcon
|
|
105
|
+
const [buttonLabel, onClick, customConfig, showIcon] = args;
|
|
106
|
+
return {
|
|
107
|
+
...(buttonLabel ? { buttonLabel } : {}),
|
|
108
|
+
...(onClick ? { onClick } : {}),
|
|
109
|
+
...(showIcon !== undefined ? { showIcon } : {}),
|
|
110
|
+
...(customConfig ?? {}),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
const Toastr = {
|
|
114
|
+
success(message, ...args) {
|
|
115
|
+
return showToast("success", resolveMessage(message), parseConfig(args));
|
|
116
|
+
},
|
|
117
|
+
info(message, ...args) {
|
|
118
|
+
return showToast("info", resolveMessage(message), parseConfig(args));
|
|
119
|
+
},
|
|
120
|
+
show(message, ...args) {
|
|
121
|
+
return showToast("info", resolveMessage(message), parseConfig(args));
|
|
122
|
+
},
|
|
123
|
+
warning(message, ...args) {
|
|
124
|
+
return showToast("warning", resolveMessage(message), parseConfig(args));
|
|
125
|
+
},
|
|
126
|
+
error(errorObject, ...args) {
|
|
127
|
+
const msg = resolveErrorMessage(errorObject);
|
|
128
|
+
return showToast("error", msg, parseConfig(args));
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
exports.Toastr = Toastr;
|
|
133
|
+
//# sourceMappingURL=Toastr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toastr.js","sources":["../../../../src/components/Toastr.tsx"],"sourcesContent":["import { toast } from \"sonner\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ToastrConfig {\n /** Label for an action button inside the toast. */\n buttonLabel?: string;\n /** Callback when the action button is clicked. */\n onClick?: () => void;\n /** Whether to show the type icon in the toast. */\n showIcon?: boolean;\n /** Additional sonner toast options (duration, position, dismissible, etc.). */\n [key: string]: unknown;\n}\n\ntype ToastrMessage =\n | string\n | { noticeCode?: string; customMessage?: string; notice?: string };\n\ntype ToastrErrorInput =\n | string\n | Error\n | {\n response?: { data?: Record<string, unknown> };\n message?: string;\n isAxiosError?: boolean;\n }\n | ToastrMessage;\n\n// ---------------------------------------------------------------------------\n// Dedup set — prevents showing the same toast twice simultaneously\n// ---------------------------------------------------------------------------\n\nconst activeToasts = new Set<string>();\n\nfunction toastKey(type: string, message: string, buttonLabel?: string): string {\n return `${type}::${message}::${buttonLabel ?? \"\"}`;\n}\n\n// ---------------------------------------------------------------------------\n// RTL detection\n// ---------------------------------------------------------------------------\n\nfunction getContentDir(): \"ltr\" | \"rtl\" {\n if (typeof document === \"undefined\") return \"ltr\";\n return (\n (document.documentElement.getAttribute(\"dir\") as \"ltr\" | \"rtl\") ??\n (document.body.getAttribute(\"dir\") as \"ltr\" | \"rtl\") ??\n \"ltr\"\n );\n}\n\n// ---------------------------------------------------------------------------\n// Message parsing\n// ---------------------------------------------------------------------------\n\nfunction resolveMessage(message: ToastrMessage): string {\n if (typeof message === \"string\") return message;\n if (message && typeof message === \"object\") {\n if (message.customMessage) return message.customMessage;\n if (message.notice) return message.notice;\n if (message.noticeCode) return message.noticeCode;\n }\n return String(message);\n}\n\n// ---------------------------------------------------------------------------\n// Error parsing (mirrors neeto-ui behavior)\n// ---------------------------------------------------------------------------\n\nfunction resolveErrorMessage(errorObject: ToastrErrorInput): string {\n if (typeof errorObject === \"string\") return errorObject;\n\n if (errorObject && typeof errorObject === \"object\") {\n // Axios-style error\n const axiosLike = errorObject as {\n response?: { data?: Record<string, unknown> };\n message?: string;\n isAxiosError?: boolean;\n };\n\n if (axiosLike.response?.data) {\n const data = axiosLike.response.data;\n if (data.customMessage) return String(data.customMessage);\n if (data.error) return String(data.error);\n if (Array.isArray(data.errors)) return data.errors.join(\"\\n\");\n if (data.noticeCode) return String(data.noticeCode);\n }\n\n if (axiosLike.isAxiosError && axiosLike.message) return axiosLike.message;\n\n // Native Error\n if (errorObject instanceof Error) return errorObject.message;\n\n // ToastrMessage object\n return resolveMessage(errorObject as ToastrMessage);\n }\n\n return \"Something went wrong.\";\n}\n\n// ---------------------------------------------------------------------------\n// Core toast helper\n// ---------------------------------------------------------------------------\n\ntype SonnerType = \"success\" | \"info\" | \"warning\" | \"error\";\n\nfunction showToast(\n type: SonnerType,\n message: string,\n config?: ToastrConfig\n): string | number | undefined {\n const { buttonLabel, onClick, showIcon, ...restConfig } = config ?? {};\n\n const key = toastKey(type, message, buttonLabel);\n\n if (activeToasts.has(key)) return undefined;\n activeToasts.add(key);\n\n const options: Record<string, unknown> = {\n onDismiss: () => activeToasts.delete(key),\n onAutoClose: () => activeToasts.delete(key),\n position: getContentDir() === \"rtl\" ? \"bottom-right\" : \"bottom-left\",\n ...restConfig,\n };\n\n if (buttonLabel) {\n options.action = {\n label: buttonLabel,\n onClick: onClick ?? (() => {}),\n };\n }\n\n // When showIcon is explicitly false, hide the type icon\n if (showIcon === false) {\n options.icon = null;\n }\n\n return toast[type](message, options);\n}\n\n// ---------------------------------------------------------------------------\n// Public API (matches neeto-ui Toastr interface)\n// ---------------------------------------------------------------------------\n\nfunction parseConfig(args: unknown[]): ToastrConfig {\n if (args.length === 0) return {};\n\n const first = args[0];\n if (typeof first === \"object\" && first !== null && !Array.isArray(first)) {\n return first as ToastrConfig;\n }\n\n // Legacy positional args: buttonLabel, onClick, customConfig, showIcon\n const [buttonLabel, onClick, customConfig, showIcon] = args as [\n string?,\n (() => void)?,\n Record<string, unknown>?,\n boolean?,\n ];\n\n return {\n ...(buttonLabel ? { buttonLabel } : {}),\n ...(onClick ? { onClick } : {}),\n ...(showIcon !== undefined ? { showIcon } : {}),\n ...(customConfig ?? {}),\n };\n}\n\nconst Toastr = {\n success(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"success\", resolveMessage(message), parseConfig(args));\n },\n\n info(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"info\", resolveMessage(message), parseConfig(args));\n },\n\n show(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"info\", resolveMessage(message), parseConfig(args));\n },\n\n warning(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"warning\", resolveMessage(message), parseConfig(args));\n },\n\n error(errorObject: ToastrErrorInput, ...args: unknown[]) {\n const msg = resolveErrorMessage(errorObject);\n return showToast(\"error\", msg, parseConfig(args));\n },\n};\n\nexport { Toastr };\n"],"names":["toast"],"mappings":";;;;;;AA+BA;AACA;AACA;AAEA,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU;AAEtC,SAAS,QAAQ,CAAC,IAAY,EAAE,OAAe,EAAE,WAAoB,EAAA;IACnE,OAAO,CAAA,EAAG,IAAI,CAAA,EAAA,EAAK,OAAO,KAAK,WAAW,IAAI,EAAE,CAAA,CAAE;AACpD;AAEA;AACA;AACA;AAEA,SAAS,aAAa,GAAA;IACpB,IAAI,OAAO,QAAQ,KAAK,WAAW;AAAE,QAAA,OAAO,KAAK;IACjD,QACG,QAAQ,CAAC,eAAe,CAAC,YAAY,CAAC,KAAK,CAAmB;AAC9D,QAAA,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAmB;AACpD,QAAA,KAAK;AAET;AAEA;AACA;AACA;AAEA,SAAS,cAAc,CAAC,OAAsB,EAAA;IAC5C,IAAI,OAAO,OAAO,KAAK,QAAQ;AAAE,QAAA,OAAO,OAAO;AAC/C,IAAA,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC1C,IAAI,OAAO,CAAC,aAAa;YAAE,OAAO,OAAO,CAAC,aAAa;QACvD,IAAI,OAAO,CAAC,MAAM;YAAE,OAAO,OAAO,CAAC,MAAM;QACzC,IAAI,OAAO,CAAC,UAAU;YAAE,OAAO,OAAO,CAAC,UAAU;IACnD;AACA,IAAA,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB;AAEA;AACA;AACA;AAEA,SAAS,mBAAmB,CAAC,WAA6B,EAAA;IACxD,IAAI,OAAO,WAAW,KAAK,QAAQ;AAAE,QAAA,OAAO,WAAW;AAEvD,IAAA,IAAI,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;;QAElD,MAAM,SAAS,GAAG,WAIjB;AAED,QAAA,IAAI,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE;AAC5B,YAAA,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI;YACpC,IAAI,IAAI,CAAC,aAAa;AAAE,gBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC;YACzD,IAAI,IAAI,CAAC,KAAK;AAAE,gBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AACzC,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YAC7D,IAAI,IAAI,CAAC,UAAU;AAAE,gBAAA,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;QACrD;AAEA,QAAA,IAAI,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,OAAO;YAAE,OAAO,SAAS,CAAC,OAAO;;QAGzE,IAAI,WAAW,YAAY,KAAK;YAAE,OAAO,WAAW,CAAC,OAAO;;AAG5D,QAAA,OAAO,cAAc,CAAC,WAA4B,CAAC;IACrD;AAEA,IAAA,OAAO,uBAAuB;AAChC;AAQA,SAAS,SAAS,CAChB,IAAgB,EAChB,OAAe,EACf,MAAqB,EAAA;AAErB,IAAA,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM,IAAI,EAAE;IAEtE,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,CAAC;AAEhD,IAAA,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;AAAE,QAAA,OAAO,SAAS;AAC3C,IAAA,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;AAErB,IAAA,MAAM,OAAO,GAA4B;QACvC,SAAS,EAAE,MAAM,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC;QACzC,WAAW,EAAE,MAAM,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC;AAC3C,QAAA,QAAQ,EAAE,aAAa,EAAE,KAAK,KAAK,GAAG,cAAc,GAAG,aAAa;AACpE,QAAA,GAAG,UAAU;KACd;IAED,IAAI,WAAW,EAAE;QACf,OAAO,CAAC,MAAM,GAAG;AACf,YAAA,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE,OAAO,KAAK,MAAK,EAAE,CAAC,CAAC;SAC/B;IACH;;AAGA,IAAA,IAAI,QAAQ,KAAK,KAAK,EAAE;AACtB,QAAA,OAAO,CAAC,IAAI,GAAG,IAAI;IACrB;IAEA,OAAOA,WAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC;AACtC;AAEA;AACA;AACA;AAEA,SAAS,WAAW,CAAC,IAAe,EAAA;AAClC,IAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,EAAE;AAEhC,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC;AACrB,IAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxE,QAAA,OAAO,KAAqB;IAC9B;;IAGA,MAAM,CAAC,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,GAAG,IAKtD;IAED,OAAO;AACL,QAAA,IAAI,WAAW,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC;AACvC,QAAA,IAAI,OAAO,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;AAC/B,QAAA,IAAI,QAAQ,KAAK,SAAS,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;AAC/C,QAAA,IAAI,YAAY,IAAI,EAAE,CAAC;KACxB;AACH;AAEA,MAAM,MAAM,GAAG;AACb,IAAA,OAAO,CAAC,OAAsB,EAAE,GAAG,IAAe,EAAA;AAChD,QAAA,OAAO,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;AAED,IAAA,IAAI,CAAC,OAAsB,EAAE,GAAG,IAAe,EAAA;AAC7C,QAAA,OAAO,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC;AAED,IAAA,IAAI,CAAC,OAAsB,EAAE,GAAG,IAAe,EAAA;AAC7C,QAAA,OAAO,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC;AAED,IAAA,OAAO,CAAC,OAAsB,EAAE,GAAG,IAAe,EAAA;AAChD,QAAA,OAAO,SAAS,CAAC,SAAS,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;AAED,IAAA,KAAK,CAAC,WAA6B,EAAE,GAAG,IAAe,EAAA;AACrD,QAAA,MAAM,GAAG,GAAG,mBAAmB,CAAC,WAAW,CAAC;QAC5C,OAAO,SAAS,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC;;;;;"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var primitives_Tooltip = require('../primitives/Tooltip.js');
|
|
6
|
+
require('../tooltip-C-568jEL.js');
|
|
7
|
+
require('../utils-CTr7wn5d.js');
|
|
8
|
+
require('../index-COPkC3I5.js');
|
|
9
|
+
require('../index-D-iDn9RI.js');
|
|
10
|
+
require('../index-CGUGhyIp.js');
|
|
11
|
+
require('../index-Bvu9MiFi.js');
|
|
12
|
+
require('../index-DMbj7vXd.js');
|
|
13
|
+
require('react-dom');
|
|
14
|
+
require('../index-lWVw05cs.js');
|
|
15
|
+
require('../index-BwAq9ba8.js');
|
|
16
|
+
require('../index-CCdG4z4E.js');
|
|
17
|
+
require('../index-C9ICrOhM.js');
|
|
18
|
+
require('../floating-ui.react-dom-B4Aw6O7R.js');
|
|
19
|
+
require('../index-Bf0WsHta.js');
|
|
20
|
+
require('../index-Df-Ffa3s.js');
|
|
21
|
+
require('../index-DcCSSgb7.js');
|
|
22
|
+
require('../index-CyrAgb4H.js');
|
|
23
|
+
require('../index-CB9xFokC.js');
|
|
24
|
+
|
|
25
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
26
|
+
|
|
27
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
28
|
+
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// Position mapping
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
const SIDE_MAP = {
|
|
33
|
+
top: "top",
|
|
34
|
+
bottom: "bottom",
|
|
35
|
+
left: "left",
|
|
36
|
+
right: "right",
|
|
37
|
+
"top-start": "top",
|
|
38
|
+
"top-end": "top",
|
|
39
|
+
"bottom-start": "bottom",
|
|
40
|
+
"bottom-end": "bottom",
|
|
41
|
+
"left-start": "left",
|
|
42
|
+
"left-end": "left",
|
|
43
|
+
"right-start": "right",
|
|
44
|
+
"right-end": "right",
|
|
45
|
+
auto: "top",
|
|
46
|
+
};
|
|
47
|
+
const ALIGN_MAP = {
|
|
48
|
+
top: "center",
|
|
49
|
+
bottom: "center",
|
|
50
|
+
left: "center",
|
|
51
|
+
right: "center",
|
|
52
|
+
"top-start": "start",
|
|
53
|
+
"top-end": "end",
|
|
54
|
+
"bottom-start": "start",
|
|
55
|
+
"bottom-end": "end",
|
|
56
|
+
"left-start": "start",
|
|
57
|
+
"left-end": "end",
|
|
58
|
+
"right-start": "start",
|
|
59
|
+
"right-end": "end",
|
|
60
|
+
auto: "center",
|
|
61
|
+
};
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
// Component
|
|
64
|
+
// ---------------------------------------------------------------------------
|
|
65
|
+
const Tooltip = React.forwardRef(({ content, children, disabled = false, position = "auto", interactive = false, hideAfter = -1, hideOnTargetExit = false, className, delayDuration = 0, defaultOpen,
|
|
66
|
+
// Radix TooltipContent props forwarded
|
|
67
|
+
...contentProps }, ref) => {
|
|
68
|
+
const [open, setOpen] = React.useState(false);
|
|
69
|
+
const triggerRef = React.useRef(null);
|
|
70
|
+
// Merge external ref with internal trigger ref
|
|
71
|
+
const setTriggerRef = React.useCallback((node) => {
|
|
72
|
+
triggerRef.current = node;
|
|
73
|
+
if (typeof ref === "function")
|
|
74
|
+
ref(node);
|
|
75
|
+
else if (ref)
|
|
76
|
+
ref.current =
|
|
77
|
+
node;
|
|
78
|
+
}, [ref]);
|
|
79
|
+
// Auto-hide after hideAfter ms
|
|
80
|
+
React.useEffect(() => {
|
|
81
|
+
if (!open || hideAfter <= 0)
|
|
82
|
+
return;
|
|
83
|
+
const timer = setTimeout(() => setOpen(false), hideAfter);
|
|
84
|
+
return () => clearTimeout(timer);
|
|
85
|
+
}, [open, hideAfter]);
|
|
86
|
+
// Hide tooltip when trigger exits viewport
|
|
87
|
+
React.useEffect(() => {
|
|
88
|
+
if (!hideOnTargetExit || !open || !triggerRef.current)
|
|
89
|
+
return;
|
|
90
|
+
const observer = new IntersectionObserver(([entry]) => {
|
|
91
|
+
if (!entry.isIntersecting)
|
|
92
|
+
setOpen(false);
|
|
93
|
+
});
|
|
94
|
+
observer.observe(triggerRef.current);
|
|
95
|
+
return () => observer.disconnect();
|
|
96
|
+
}, [hideOnTargetExit, open]);
|
|
97
|
+
if (disabled || !content) {
|
|
98
|
+
return jsxRuntime.jsx(jsxRuntime.Fragment, { children: children });
|
|
99
|
+
}
|
|
100
|
+
const side = SIDE_MAP[position] ?? "top";
|
|
101
|
+
const align = ALIGN_MAP[position] ?? "center";
|
|
102
|
+
// Wrap non-element children in a span so TooltipTrigger can attach
|
|
103
|
+
const trigger = React__default.default.isValidElement(children) ? (children) : (jsxRuntime.jsx("span", { children: children }));
|
|
104
|
+
return (jsxRuntime.jsx(primitives_Tooltip.TooltipProvider, { delayDuration: delayDuration, children: jsxRuntime.jsxs(primitives_Tooltip.Tooltip, { open: open, onOpenChange: setOpen, defaultOpen: defaultOpen, disableHoverableContent: !interactive, children: [jsxRuntime.jsx(primitives_Tooltip.TooltipTrigger, { ref: setTriggerRef, asChild: true, children: trigger }), jsxRuntime.jsx(primitives_Tooltip.TooltipContent, { side: side, align: align, className: className, onPointerDownOutside: interactive ? e => e.preventDefault() : undefined, ...contentProps, children: content })] }) }));
|
|
105
|
+
});
|
|
106
|
+
Tooltip.displayName = "Tooltip";
|
|
107
|
+
|
|
108
|
+
exports.Tooltip = Tooltip;
|
|
109
|
+
//# sourceMappingURL=Tooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tooltip.js","sources":["../../../../src/components/Tooltip.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\n\nimport {\n Tooltip as PrimitiveTooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"src/primitives/Tooltip\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ntype TooltipPosition =\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"top-start\"\n | \"top-end\"\n | \"bottom-start\"\n | \"bottom-end\"\n | \"left-start\"\n | \"left-end\"\n | \"right-start\"\n | \"right-end\"\n | \"auto\";\n\n/** Radix Tooltip.Content props we forward via ...otherProps. */\ntype TooltipContentProps = React.ComponentProps<typeof TooltipContent>;\n\nexport interface TooltipProps extends Omit<\n TooltipContentProps,\n \"children\" | \"className\" | \"side\" | \"align\" | \"content\"\n> {\n /** Content rendered inside the tooltip popup. */\n content?: ReactNode;\n /** The trigger element. */\n children?: ReactNode;\n /** Disable the tooltip. */\n disabled?: boolean;\n /** Placement of the tooltip relative to the trigger. */\n position?: TooltipPosition;\n /** Whether the tooltip stays open when hovered over. */\n interactive?: boolean;\n /** Auto-hide after N milliseconds. Use -1 to disable. */\n hideAfter?: number;\n /** Auto-hide the tooltip when the trigger scrolls out of the viewport. */\n hideOnTargetExit?: boolean;\n /** Additional CSS class names for the tooltip content. */\n className?: string;\n /** Delay in ms before the tooltip opens (forwarded to TooltipProvider). */\n delayDuration?: number;\n /** Radix Tooltip `defaultOpen` prop. */\n defaultOpen?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Position mapping\n// ---------------------------------------------------------------------------\n\nconst SIDE_MAP: Record<string, \"top\" | \"right\" | \"bottom\" | \"left\"> = {\n top: \"top\",\n bottom: \"bottom\",\n left: \"left\",\n right: \"right\",\n \"top-start\": \"top\",\n \"top-end\": \"top\",\n \"bottom-start\": \"bottom\",\n \"bottom-end\": \"bottom\",\n \"left-start\": \"left\",\n \"left-end\": \"left\",\n \"right-start\": \"right\",\n \"right-end\": \"right\",\n auto: \"top\",\n};\n\nconst ALIGN_MAP: Record<string, \"start\" | \"center\" | \"end\"> = {\n top: \"center\",\n bottom: \"center\",\n left: \"center\",\n right: \"center\",\n \"top-start\": \"start\",\n \"top-end\": \"end\",\n \"bottom-start\": \"start\",\n \"bottom-end\": \"end\",\n \"left-start\": \"start\",\n \"left-end\": \"end\",\n \"right-start\": \"start\",\n \"right-end\": \"end\",\n auto: \"center\",\n};\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nconst Tooltip = forwardRef<HTMLButtonElement, TooltipProps>(\n (\n {\n content,\n children,\n disabled = false,\n position = \"auto\",\n interactive = false,\n hideAfter = -1,\n hideOnTargetExit = false,\n className,\n delayDuration = 0,\n defaultOpen,\n // Radix TooltipContent props forwarded\n ...contentProps\n },\n ref\n ) => {\n const [open, setOpen] = useState(false);\n const triggerRef = useRef<HTMLElement | null>(null);\n\n // Merge external ref with internal trigger ref\n const setTriggerRef = useCallback(\n (node: HTMLButtonElement | null) => {\n triggerRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref)\n (ref as React.MutableRefObject<HTMLButtonElement | null>).current =\n node;\n },\n [ref]\n );\n\n // Auto-hide after hideAfter ms\n useEffect(() => {\n if (!open || hideAfter <= 0) return;\n const timer = setTimeout(() => setOpen(false), hideAfter);\n return () => clearTimeout(timer);\n }, [open, hideAfter]);\n\n // Hide tooltip when trigger exits viewport\n useEffect(() => {\n if (!hideOnTargetExit || !open || !triggerRef.current) return;\n const observer = new IntersectionObserver(([entry]) => {\n if (!entry.isIntersecting) setOpen(false);\n });\n observer.observe(triggerRef.current);\n return () => observer.disconnect();\n }, [hideOnTargetExit, open]);\n\n if (disabled || !content) {\n return <>{children}</>;\n }\n\n const side = SIDE_MAP[position] ?? \"top\";\n const align = ALIGN_MAP[position] ?? \"center\";\n\n // Wrap non-element children in a span so TooltipTrigger can attach\n const trigger = React.isValidElement(children) ? (\n children\n ) : (\n <span>{children}</span>\n );\n\n return (\n <TooltipProvider delayDuration={delayDuration}>\n <PrimitiveTooltip\n open={open}\n onOpenChange={setOpen}\n defaultOpen={defaultOpen}\n disableHoverableContent={!interactive}\n >\n <TooltipTrigger ref={setTriggerRef} asChild>\n {trigger}\n </TooltipTrigger>\n <TooltipContent\n side={side}\n align={align}\n className={className}\n onPointerDownOutside={\n interactive ? e => e.preventDefault() : undefined\n }\n {...contentProps}\n >\n {content}\n </TooltipContent>\n </PrimitiveTooltip>\n </TooltipProvider>\n );\n }\n);\n\nTooltip.displayName = \"Tooltip\";\n\nexport { Tooltip };\n"],"names":["forwardRef","useState","useRef","useCallback","useEffect","_jsx","_Fragment","React","TooltipProvider","_jsxs","PrimitiveTooltip","TooltipTrigger","TooltipContent"],"mappings":"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"}
|
|
@@ -31,12 +31,12 @@ const typographyVariants = index$1.cva("", {
|
|
|
31
31
|
variants: {
|
|
32
32
|
variant: {
|
|
33
33
|
jumbo: "text-5xl font-semibold leading-none tracking-tight",
|
|
34
|
-
h1: "text-[
|
|
35
|
-
h2: "text-
|
|
36
|
-
h3: "text-
|
|
37
|
-
h4: "text-
|
|
38
|
-
h5: "text-
|
|
39
|
-
h6: "text-
|
|
34
|
+
h1: "text-[40px] font-semibold leading-tight tracking-tight",
|
|
35
|
+
h2: "text-[32px] font-semibold leading-tight tracking-tight",
|
|
36
|
+
h3: "text-[28px] font-semibold leading-tight tracking-tight",
|
|
37
|
+
h4: "text-2xl font-semibold leading-tight",
|
|
38
|
+
h5: "text-xl font-semibold leading-tight",
|
|
39
|
+
h6: "text-lg font-semibold leading-tight",
|
|
40
40
|
body1: "text-base leading-normal",
|
|
41
41
|
body2: "text-[15px] leading-normal",
|
|
42
42
|
body3: "text-sm leading-normal",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Typography.js","sources":["../../../../src/shadcn/components/typography.tsx","../../../../src/components/Typography.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"src/shadcn/lib/utils\"\n\nconst typographyVariants = cva(\"\", {\n variants: {\n variant: {\n jumbo:\n \"text-5xl font-semibold leading-none tracking-tight\",\n h1: \"text-[40px] font-semibold leading-tight tracking-tight\",\n h2: \"text-[32px] font-semibold leading-tight tracking-tight\",\n h3: \"text-[28px] font-semibold leading-tight tracking-tight\",\n h4: \"text-2xl font-semibold leading-tight\",\n h5: \"text-xl font-semibold leading-tight\",\n h6: \"text-lg font-semibold leading-tight\",\n body1: \"text-base leading-normal\",\n body2: \"text-[15px] leading-normal\",\n body3: \"text-sm leading-normal\",\n caption: \"text-xs leading-normal\",\n nano: \"text-[10px] leading-normal\",\n code: \"font-mono text-sm\",\n },\n weight: {\n thin: \"font-thin\",\n extralight: \"font-extralight\",\n light: \"font-light\",\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n bold: \"font-bold\",\n extrabold: \"font-extrabold\",\n black: \"font-black\",\n },\n color: {\n default: \"text-foreground\",\n muted: \"text-muted-foreground\",\n primary: \"text-primary\",\n destructive: \"text-destructive\",\n inherit: \"text-inherit\",\n },\n lineClamp: {\n none: \"\",\n 1: \"line-clamp-1\",\n 2: \"line-clamp-2\",\n 3: \"line-clamp-3\",\n },\n },\n defaultVariants: {\n variant: \"body3\",\n color: \"default\",\n },\n})\n\nconst defaultElementMap: Record<\n string,\n keyof React.JSX.IntrinsicElements\n> = {\n jumbo: \"h1\",\n h1: \"h1\",\n h2: \"h2\",\n h3: \"h3\",\n h4: \"h4\",\n h5: \"h5\",\n h6: \"h6\",\n body1: \"p\",\n body2: \"p\",\n body3: \"p\",\n caption: \"span\",\n nano: \"span\",\n code: \"code\",\n}\n\nconst Typography = React.forwardRef<\n HTMLElement,\n React.ComponentProps<\"p\"> &\n VariantProps<typeof typographyVariants> & {\n asChild?: boolean\n }\n>(\n (\n {\n className,\n variant = \"body3\",\n weight,\n color = \"default\",\n lineClamp,\n asChild = false,\n ...props\n },\n ref\n ) => {\n const Comp = asChild\n ? Slot.Root\n : defaultElementMap[variant ?? \"body3\"] ?? \"p\"\n\n return (\n <Comp\n ref={ref}\n data-slot=\"typography\"\n data-variant={variant}\n className={cn(\n typographyVariants({ variant, weight, color, lineClamp, className })\n )}\n {...props}\n />\n )\n }\n)\n\nTypography.displayName = \"Typography\"\n\nexport { Typography, typographyVariants }\n","import { forwardRef, type ComponentProps } from \"react\";\nimport { Typography as ShadcnTypography } from \"src/shadcn/components/typography\";\n\nconst Typography = forwardRef<\n HTMLElement,\n ComponentProps<typeof ShadcnTypography>\n>((props, ref) => <ShadcnTypography ref={ref} {...props} />);\n\nTypography.displayName = \"Typography\";\n\nexport { Typography };\nexport { typographyVariants } from \"src/shadcn/components/typography\";\n"],"names":["cva","Typography","React","Slot.Root","_jsx","cn","forwardRef","ShadcnTypography"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.js","sources":["../../../../src/components/shared.types.ts"],"sourcesContent":["export interface OptionBase {\n /** Display text for the option. */\n label: string;\n /** Unique value for the option. */\n value: string;\n /** Whether the option is disabled. */\n disabled?: boolean;\n}\n\nexport interface OptionGroup {\n /** Group heading text. */\n label: string;\n /** Options within this group. */\n options: OptionBase[];\n}\n\nexport type Option = OptionBase | OptionGroup;\n\nexport function isOptionGroup(opt: Option): opt is OptionGroup {\n return \"options\" in opt && Array.isArray(opt.options);\n}\n"],"names":[],"mappings":";;AAkBM,SAAU,aAAa,CAAC,GAAW,EAAA;AACvC,IAAA,OAAO,SAAS,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AACvD;;;;"}
|