pixelize-design-library 2.2.199 → 2.3.1-beta.10
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/.claude/settings.local.json +44 -0
- package/coverage/clover.xml +638 -0
- package/coverage/coverage-final.json +20 -0
- package/coverage/lcov-report/Table/CompactSelect.tsx.html +379 -0
- package/coverage/lcov-report/Table/Components/ActiveFilters.tsx.html +514 -0
- package/coverage/lcov-report/Table/Components/HeaderActions.tsx.html +373 -0
- package/coverage/lcov-report/Table/Components/Pagination.tsx.html +574 -0
- package/coverage/lcov-report/Table/Components/TableActions.tsx.html +574 -0
- package/coverage/lcov-report/Table/Components/TableBody.tsx.html +1027 -0
- package/coverage/lcov-report/Table/Components/TableFilters.tsx.html +397 -0
- package/coverage/lcov-report/Table/Components/TableHeader.tsx.html +1060 -0
- package/coverage/lcov-report/Table/Components/TableLoading.tsx.html +361 -0
- package/coverage/lcov-report/Table/Components/TableSearch.tsx.html +337 -0
- package/coverage/lcov-report/Table/Components/index.html +266 -0
- package/coverage/lcov-report/Table/Components/useDebounce.ts.html +178 -0
- package/coverage/lcov-report/Table/Components/useTable.ts.html +778 -0
- package/coverage/lcov-report/Table/LeftFilterPane.tsx.html +1810 -0
- package/coverage/lcov-report/Table/SelectOperationControls.tsx.html +178 -0
- package/coverage/lcov-report/Table/Table.tsx.html +1567 -0
- package/coverage/lcov-report/Table/TableProps.tsx.html +658 -0
- package/coverage/lcov-report/Table/TableSettings/ManageColumns.tsx.html +619 -0
- package/coverage/lcov-report/Table/TableSettings/TableFilters.tsx.html +229 -0
- package/coverage/lcov-report/Table/TableSettings/TableSettings.tsx.html +532 -0
- package/coverage/lcov-report/Table/TableSettings/index.html +146 -0
- package/coverage/lcov-report/Table/TableToDo.tsx.html +973 -0
- package/coverage/lcov-report/Table/TextOperationControls.tsx.html +271 -0
- package/coverage/lcov-report/Table/filterTypes.ts.html +97 -0
- package/coverage/lcov-report/Table/index.html +176 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +87 -0
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +146 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +210 -0
- package/coverage/lcov.info +1836 -0
- package/dist/Assets/defaultLogo.tsx +31 -0
- package/dist/Components/Accordion/Accordion.js +26 -5
- package/dist/Components/Button/Button.styles.js +44 -3
- package/dist/Components/Button/ButtonProps.d.ts +1 -1
- package/dist/Components/ButtonGroupIcon/ButtonGoupIconProps.d.ts +2 -2
- package/dist/Components/ButtonGroupIcon/ButtonGroupIcon.js +50 -38
- package/dist/Components/Card/PaymentCard/PaymentCard.d.ts +1 -1
- package/dist/Components/Card/PaymentCard/PaymentCard.js +3 -3
- package/dist/Components/Card/PaymentCard/PaymentCardProps.d.ts +0 -1
- package/dist/Components/Checkbox/Checkbox.js +2 -2
- package/dist/Components/Checkbox/Checkbox.styles.js +2 -0
- package/dist/Components/Common/FormLabel.d.ts +2 -1
- package/dist/Components/Common/FormLabel.js +8 -9
- package/dist/Components/Common/fieldStyles.d.ts +22 -0
- package/dist/Components/Common/fieldStyles.js +42 -0
- package/dist/Components/DatePicker/CalendarPanel.d.ts +2 -0
- package/dist/Components/DatePicker/CalendarPanel.js +104 -65
- package/dist/Components/DatePicker/RangeDatePicker.js +37 -16
- package/dist/Components/DatePicker/SingleDatePicker.js +16 -16
- package/dist/Components/DatePicker/TimePicker.js +4 -4
- package/dist/Components/Input/Input/Input.d.ts +1 -1
- package/dist/Components/Input/Input/Input.js +5 -4
- package/dist/Components/Input/Input/InputProps.d.ts +2 -0
- package/dist/Components/Input/TextInput.styles.js +2 -1
- package/dist/Components/InputTextArea/InputTextArea.style.js +2 -1
- package/dist/Components/KanbanBoard/AccountCard.js +17 -14
- package/dist/Components/KanbanBoard/KanbanBoard.js +93 -78
- package/dist/Components/MultiSelect/MultiSelect.js +11 -12
- package/dist/Components/NavigationBar/NavigationBar.d.ts +1 -1
- package/dist/Components/NavigationBar/NavigationBar.js +57 -30
- package/dist/Components/NavigationBar/NavigationBarProps.d.ts +1 -0
- package/dist/Components/NoteTextArea/NoteTextArea.js +44 -40
- package/dist/Components/NumberInput/NumberInput.styles.js +2 -1
- package/dist/Components/PinInput/PinInput.d.ts +1 -1
- package/dist/Components/PinInput/PinInput.js +3 -2
- package/dist/Components/PinInput/PinInputProps.d.ts +4 -0
- package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.d.ts +1 -1
- package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +42 -24
- package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewerProps.d.ts +2 -0
- package/dist/Components/RadioButton/RadioButton.js +1 -1
- package/dist/Components/SearchSelect/SearchSelect.d.ts +1 -1
- package/dist/Components/SearchSelect/SearchSelect.js +56 -24
- package/dist/Components/SearchSelect/SearchSelectProps.d.ts +2 -0
- package/dist/Components/Select/Select.styles.js +2 -1
- package/dist/Components/SelectSearch/SelectSearch.js +7 -4
- package/dist/Components/SideBar/SecondaryBar.js +20 -18
- package/dist/Components/SideBar/SideBar.d.ts +1 -1
- package/dist/Components/SideBar/SideBar.js +58 -43
- package/dist/Components/SideBar/SideBarProps.d.ts +14 -3
- package/dist/Components/SideBar/components/MenuItemBox.js +28 -24
- package/dist/Components/SideBar/components/MenuItems.js +16 -2
- package/dist/Components/SideBar/components/MenuPopoverContent.js +16 -16
- package/dist/Components/SideBar/components/OtherApps.js +16 -14
- package/dist/Components/Table/Table.d.ts +1 -1
- package/dist/Components/Table/Table.js +234 -38
- package/dist/Components/Table/TableProps.d.ts +42 -2
- package/dist/Components/Table/{Components → components}/TableActions.d.ts +2 -2
- package/dist/Components/Table/{Components → components}/TableActions.js +5 -4
- package/dist/Components/Table/{Components → components}/TableBody.d.ts +5 -1
- package/dist/Components/Table/components/TableBody.js +369 -0
- package/dist/Components/Table/components/TableGroupRow.d.ts +15 -0
- package/dist/Components/Table/components/TableGroupRow.js +27 -0
- package/dist/Components/Table/{Components → components}/TableHeader.js +18 -8
- package/dist/Components/Table/{LeftFilterPane.js → filters/LeftFilterPane.js} +3 -3
- package/dist/Components/Table/{Components → hooks}/useTable.d.ts +1 -1
- package/dist/Components/Table/{Components → hooks}/useTable.js +8 -7
- package/dist/Components/Table/settings/TableSettings.d.ts +11 -0
- package/dist/Components/Table/settings/TableSettings.js +165 -0
- package/dist/Components/Timeline/Timeline.d.ts +1 -1
- package/dist/Components/Timeline/Timeline.js +145 -78
- package/dist/Components/Toaster/Toaster.js +40 -20
- package/dist/Theme/Default/palette.d.ts +4 -0
- package/dist/Theme/Default/palette.js +3 -0
- package/dist/Theme/Emerald/palette.d.ts +4 -0
- package/dist/Theme/Emerald/palette.js +2 -1
- package/dist/Theme/Meadow/palette.d.ts +4 -0
- package/dist/Theme/Meadow/palette.js +2 -1
- package/dist/Theme/Radiant/palette.d.ts +4 -0
- package/dist/Theme/Radiant/palette.js +2 -1
- package/dist/Theme/Rosewood/palette.d.ts +4 -0
- package/dist/Theme/Rosewood/palette.js +2 -1
- package/dist/Theme/Skyline/palette.d.ts +4 -0
- package/dist/Theme/Skyline/palette.js +2 -1
- package/dist/Theme/Slate/palette.d.ts +4 -0
- package/dist/Theme/Slate/palette.js +2 -1
- package/dist/Theme/themeProps.d.ts +4 -0
- package/dist/Utils/table.d.ts +26 -0
- package/dist/Utils/table.js +142 -38
- package/package.json +2 -2
- package/dist/Components/Table/Components/TableBody.js +0 -201
- package/dist/Components/Table/TableSettings/TableFilters.d.ts +0 -10
- package/dist/Components/Table/TableSettings/TableFilters.js +0 -69
- package/dist/Components/Table/TableSettings/TableFilters.test.d.ts +0 -1
- package/dist/Components/Table/TableSettings/TableFilters.test.js +0 -109
- package/dist/Components/Table/TableSettings/TableSettings.d.ts +0 -8
- package/dist/Components/Table/TableSettings/TableSettings.js +0 -141
- package/dist/Components/Table/TableToDo.d.ts +0 -2
- package/dist/Components/Table/TableToDo.js +0 -291
- /package/dist/Components/Table/{Components → components}/HeaderActions.d.ts +0 -0
- /package/dist/Components/Table/{Components → components}/HeaderActions.js +0 -0
- /package/dist/Components/Table/{Components → components}/Pagination.d.ts +0 -0
- /package/dist/Components/Table/{Components → components}/Pagination.js +0 -0
- /package/dist/Components/Table/{Components → components}/TableBody.virtualize.test.d.ts +0 -0
- /package/dist/Components/Table/{Components → components}/TableBody.virtualize.test.js +0 -0
- /package/dist/Components/Table/{Components → components}/TableHeader.d.ts +0 -0
- /package/dist/Components/Table/{Components → components}/TableLoading.d.ts +0 -0
- /package/dist/Components/Table/{Components → components}/TableLoading.js +0 -0
- /package/dist/Components/Table/{Components → components}/TableSearch.d.ts +0 -0
- /package/dist/Components/Table/{Components → components}/TableSearch.js +0 -0
- /package/dist/Components/Table/{Components → filters}/ActiveFilters.d.ts +0 -0
- /package/dist/Components/Table/{Components → filters}/ActiveFilters.js +0 -0
- /package/dist/Components/Table/{CompactSelect.d.ts → filters/CompactSelect.d.ts} +0 -0
- /package/dist/Components/Table/{CompactSelect.js → filters/CompactSelect.js} +0 -0
- /package/dist/Components/Table/{LeftFilterPane.d.ts → filters/LeftFilterPane.d.ts} +0 -0
- /package/dist/Components/Table/{SelectOperationControls.d.ts → filters/SelectOperationControls.d.ts} +0 -0
- /package/dist/Components/Table/{SelectOperationControls.js → filters/SelectOperationControls.js} +0 -0
- /package/dist/Components/Table/{Components → filters}/TableFilters.d.ts +0 -0
- /package/dist/Components/Table/{Components → filters}/TableFilters.js +0 -0
- /package/dist/Components/Table/{TextOperationControls.d.ts → filters/TextOperationControls.d.ts} +0 -0
- /package/dist/Components/Table/{TextOperationControls.js → filters/TextOperationControls.js} +0 -0
- /package/dist/Components/Table/{Components → hooks}/useDebounce.d.ts +0 -0
- /package/dist/Components/Table/{Components → hooks}/useDebounce.js +0 -0
- /package/dist/Components/Table/{TableSettings → settings}/ManageColumns.d.ts +0 -0
- /package/dist/Components/Table/{TableSettings → settings}/ManageColumns.js +0 -0
- /package/dist/Components/Table/{TableSettings → settings}/ManageColumns.test.d.ts +0 -0
- /package/dist/Components/Table/{TableSettings → settings}/ManageColumns.test.js +0 -0
|
@@ -47,6 +47,7 @@ var react_1 = __importStar(require("react"));
|
|
|
47
47
|
var react_2 = require("@chakra-ui/react");
|
|
48
48
|
var lucide_react_1 = require("lucide-react");
|
|
49
49
|
var useCustomTheme_1 = require("../../Theme/useCustomTheme");
|
|
50
|
+
var fieldStyles_1 = require("../Common/fieldStyles");
|
|
50
51
|
var countWords = function (text) {
|
|
51
52
|
if (text === void 0) { text = ""; }
|
|
52
53
|
var t = text.trim();
|
|
@@ -160,43 +161,45 @@ function NoteTextArea(_a) {
|
|
|
160
161
|
var start = nameWithoutExtension.substring(0, maxLength - extension.length - 3);
|
|
161
162
|
return "".concat(start, "...").concat(extension);
|
|
162
163
|
};
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
164
|
+
var noteWordCount = countWords(noteValue);
|
|
165
|
+
var isOverLimit = noteWordCount > maxNoteWordCount;
|
|
166
|
+
return (react_1.default.createElement(react_2.Box, { w: width, borderRadius: fieldStyles_1.FIELD_RADIUS, overflow: "hidden", border: "1px solid", borderColor: isActive ? theme.colors.primary[500] : (_b = theme.colors.boxborder) === null || _b === void 0 ? void 0 : _b[500], bg: isActive ? theme.colors.gray[50] : theme.colors.white, transition: "border-color 0.2s" },
|
|
167
|
+
!isActive && (react_1.default.createElement(react_2.Flex, { px: 3, gap: 2, align: "center", cursor: "text", onClick: handleTextArea, bg: theme.colors.white, borderRadius: fieldStyles_1.FIELD_RADIUS, minH: "2.5rem", transition: "background 0.15s", _hover: { bg: theme.colors.gray[50] } },
|
|
168
|
+
react_1.default.createElement(lucide_react_1.SquarePen, { size: 16, color: theme.colors.gray[500] }),
|
|
169
|
+
react_1.default.createElement(react_2.Text, { color: theme.colors.gray[500], fontSize: "sm" }, customPlaceholder))),
|
|
166
170
|
isActive && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
167
171
|
react_1.default.createElement(react_2.Box, { bg: theme.colors.white },
|
|
168
|
-
titleShow && (react_1.default.createElement(
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
react_1.default.createElement(react_2.
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
react_1.default.createElement(react_2.
|
|
172
|
+
titleShow && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
173
|
+
react_1.default.createElement(react_2.Input, { ref: inputRef, value: titleValue, onChange: function (e) {
|
|
174
|
+
if (e.target.value.length === 0)
|
|
175
|
+
setTitleShow(false);
|
|
176
|
+
setTitleValue(e.target.value);
|
|
177
|
+
}, placeholder: "Add a title...", variant: "unstyled", px: 3, pt: 2.5, pb: 1.5, fontWeight: 600, fontSize: "0.875rem", color: theme.colors.text[700], _placeholder: {
|
|
178
|
+
fontStyle: "italic",
|
|
179
|
+
color: theme.colors.gray[300],
|
|
180
|
+
} }),
|
|
181
|
+
react_1.default.createElement(react_2.Divider, { borderColor: theme.colors.gray[200] }))),
|
|
182
|
+
react_1.default.createElement(react_2.Box, { bg: theme.colors.white, minH: "76px", px: 3, pt: 2.5, position: "relative" },
|
|
183
|
+
react_1.default.createElement(react_2.Textarea, { ref: noteAreaRef, value: noteValue, onChange: handleNoteChange, placeholder: customPlaceholder, variant: "unstyled", resize: "none", minH: "76px", fontSize: "0.75rem", color: theme.colors.text[700], _placeholder: { fontStyle: "italic", color: theme.colors.gray[300] }, style: { overflow: "hidden" }, p: 0 }))),
|
|
184
|
+
react_1.default.createElement(react_2.Divider, { borderColor: theme.colors.gray[200] }),
|
|
185
|
+
react_1.default.createElement(react_2.Box, { px: 3, py: 2.5 },
|
|
186
|
+
react_1.default.createElement(react_2.Flex, { align: "center", justify: "space-between", w: "100%", gap: 3 },
|
|
187
|
+
react_1.default.createElement(react_2.Flex, { align: "center", gap: 2, minW: 0 },
|
|
188
|
+
react_1.default.createElement(react_2.Tooltip, { label: "Attach files", hasArrow: true, placement: "top" },
|
|
189
|
+
react_1.default.createElement(react_2.Box, { as: "label", htmlFor: "file-upload", cursor: "pointer", display: "flex", alignItems: "center", justifyContent: "center", w: "1.75rem", h: "1.75rem", borderRadius: "md", color: theme.colors.gray[600], transition: "background 0.15s", _hover: { bg: theme.colors.gray[100] } },
|
|
190
|
+
react_1.default.createElement(lucide_react_1.Paperclip, { size: 16 }))),
|
|
191
|
+
react_1.default.createElement(react_2.Box, { h: "1rem", w: "1px", bg: theme.colors.gray[200] }),
|
|
192
|
+
!titleShow ? (react_1.default.createElement(react_2.Box, { as: "button", type: "button", onClick: function () { return setTitleShow(true); }, px: 2, py: 1, borderRadius: "md", color: theme.colors.gray[600], fontWeight: 500, fontSize: "sm", transition: "background 0.15s", _hover: { bg: theme.colors.gray[100] } }, "+ Add a title")) : (react_1.default.createElement(react_2.Tooltip, { label: titleValue, hasArrow: true, isDisabled: !titleValue },
|
|
193
|
+
react_1.default.createElement(react_2.Text, { color: theme.colors.gray[600], fontSize: "sm", fontWeight: 500, isTruncated: true, maxW: "180px" }, titleValue || "Title")))),
|
|
194
|
+
react_1.default.createElement(react_2.Flex, { gap: 2.5, align: "center", ml: "auto", flexShrink: 0 },
|
|
195
|
+
react_1.default.createElement(react_2.Text, { fontSize: "xs", fontWeight: 500, color: isOverLimit ? theme.colors.semantic.error[500] : theme.colors.gray[500], whiteSpace: "nowrap" },
|
|
196
|
+
noteWordCount,
|
|
197
|
+
"/",
|
|
198
|
+
maxNoteWordCount),
|
|
199
|
+
cancelButtonHide ? null : (react_1.default.createElement(react_2.Button, { size: "sm", variant: "ghost", colorScheme: "gray", onClick: handleCloseTextArea }, "Cancel")),
|
|
200
|
+
react_1.default.createElement(react_2.Button, { size: "sm", variant: "solid", isLoading: !!saveButtonLoading, isDisabled: !noteValue || isSaveDisabled, onClick: function () { return handleSubmit(noteValue, titleValue, files); } },
|
|
192
201
|
saveButtonLoading ? (react_1.default.createElement(react_2.Spinner, { size: "xs", thickness: "2px", mr: 2 })) : null,
|
|
193
202
|
"Save"))),
|
|
194
|
-
react_1.default.createElement(react_2.Flex, { mt: 3, gap: 2, align: "center", color: theme.colors.gray[600], fontSize: "sm" },
|
|
195
|
-
react_1.default.createElement(react_2.Text, { fontWeight: 600 }, "Note:"),
|
|
196
|
-
react_1.default.createElement(react_2.Text, null,
|
|
197
|
-
"You can add up to ",
|
|
198
|
-
maxNoteWordCount,
|
|
199
|
-
" words only")),
|
|
200
203
|
react_1.default.createElement("input", { id: "file-upload", type: "file", style: { display: "none" }, onChange: function (e) {
|
|
201
204
|
var newFiles = Array.from(e.target.files || []);
|
|
202
205
|
var validFiles = newFiles.filter(function (f) { return f.size <= maxFileSize; });
|
|
@@ -211,12 +214,13 @@ function NoteTextArea(_a) {
|
|
|
211
214
|
setFiles(function (prev) { return __spreadArray(__spreadArray([], prev, true), validFiles, true); });
|
|
212
215
|
}
|
|
213
216
|
}, multiple: true }),
|
|
214
|
-
fileError && (react_1.default.createElement(react_2.Text, { color: theme.colors.
|
|
215
|
-
files.length > 0 && (react_1.default.createElement(react_2.
|
|
216
|
-
react_1.default.createElement(
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
react_1.default.createElement(
|
|
217
|
+
fileError && (react_1.default.createElement(react_2.Text, { color: theme.colors.semantic.error[500], mt: 2, fontSize: "xs" }, fileError)),
|
|
218
|
+
files.length > 0 && (react_1.default.createElement(react_2.Flex, { mt: 3, gap: 2, wrap: "wrap" }, files.map(function (f, idx) { return (react_1.default.createElement(react_2.Flex, { key: idx, align: "center", gap: 2, pl: 2.5, pr: 1.5, py: 1, borderRadius: "full", bg: theme.colors.gray[100], maxW: "100%" },
|
|
219
|
+
react_1.default.createElement(lucide_react_1.File, { size: 13, color: theme.colors.gray[500] }),
|
|
220
|
+
react_1.default.createElement(react_2.Text, { fontSize: "xs", color: theme.colors.text[700], isTruncated: true, maxW: "160px" }, shortenFileName(f.name)),
|
|
221
|
+
react_1.default.createElement(react_2.Text, { fontSize: "xs", color: theme.colors.gray[500], whiteSpace: "nowrap" }, formatBytes(f.size)),
|
|
222
|
+
react_1.default.createElement(react_2.Box, { as: "button", type: "button", display: "flex", alignItems: "center", justifyContent: "center", borderRadius: "full", p: 0.5, color: theme.colors.gray[500], transition: "all 0.15s", _hover: { bg: theme.colors.gray[200], color: theme.colors.semantic.error[500] }, onClick: function () {
|
|
220
223
|
return setFiles(function (prev) { return prev.filter(function (fileItem) { return fileItem !== f; }); });
|
|
221
|
-
} }
|
|
224
|
+
} },
|
|
225
|
+
react_1.default.createElement(lucide_react_1.X, { size: 13 })))); }))))))));
|
|
222
226
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { ChakraPinInputProps } from "./PinInputProps";
|
|
3
|
-
export default function PinInputs({ otp, mask, defaultValue, placeholder, manageFocus, errorBorderColor, focusBorderColor, onChange, onComplete, type, color, variant, pins, label, }: ChakraPinInputProps): React.JSX.Element;
|
|
3
|
+
export default function PinInputs({ otp, mask, defaultValue, placeholder, manageFocus, errorBorderColor, focusBorderColor, onChange, onComplete, type, color, variant, pins, label, id, isRequired, isInformation, informationMessage, }: ChakraPinInputProps): React.JSX.Element;
|
|
@@ -7,11 +7,12 @@ exports.default = PinInputs;
|
|
|
7
7
|
var react_1 = __importDefault(require("react"));
|
|
8
8
|
var react_2 = require("@chakra-ui/react");
|
|
9
9
|
var useCustomTheme_1 = require("../../Theme/useCustomTheme");
|
|
10
|
+
var FormLabel_1 = require("../Common/FormLabel");
|
|
10
11
|
function PinInputs(_a) {
|
|
11
|
-
var otp = _a.otp, mask = _a.mask, defaultValue = _a.defaultValue, placeholder = _a.placeholder, manageFocus = _a.manageFocus, errorBorderColor = _a.errorBorderColor, focusBorderColor = _a.focusBorderColor, onChange = _a.onChange, onComplete = _a.onComplete, type = _a.type, _b = _a.color, color = _b === void 0 ? "primary" : _b, variant = _a.variant, _c = _a.pins, pins = _c === void 0 ? 3 : _c, label = _a.label;
|
|
12
|
+
var otp = _a.otp, mask = _a.mask, defaultValue = _a.defaultValue, placeholder = _a.placeholder, manageFocus = _a.manageFocus, errorBorderColor = _a.errorBorderColor, focusBorderColor = _a.focusBorderColor, onChange = _a.onChange, onComplete = _a.onComplete, type = _a.type, _b = _a.color, color = _b === void 0 ? "primary" : _b, variant = _a.variant, _c = _a.pins, pins = _c === void 0 ? 3 : _c, label = _a.label, id = _a.id, isRequired = _a.isRequired, isInformation = _a.isInformation, informationMessage = _a.informationMessage;
|
|
12
13
|
var theme = (0, useCustomTheme_1.useCustomTheme)();
|
|
13
14
|
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
14
|
-
label && (react_1.default.createElement(
|
|
15
|
+
label && (react_1.default.createElement(FormLabel_1.TextLabel, { label: label, id: id, isRequired: isRequired, isInformation: isInformation, informationMessage: informationMessage })),
|
|
15
16
|
react_1.default.createElement(react_2.HStack, null,
|
|
16
17
|
react_1.default.createElement(react_2.PinInput, { otp: otp, mask: mask, defaultValue: defaultValue, placeholder: placeholder, manageFocus: manageFocus, errorBorderColor: errorBorderColor, focusBorderColor: focusBorderColor, onChange: onChange, onComplete: onComplete, type: type, colorScheme: color, variant: variant }, Array.from({ length: pins }).map(function (_, index) { return (react_1.default.createElement(react_2.PinInputField, { key: index, backgroundColor: theme.colors.background[100], borderColor: theme.colors.boxborder[300], _focus: {
|
|
17
18
|
borderColor: theme.colors.primary[500],
|
|
@@ -6,4 +6,8 @@ export type ChakraPinInputProps = Pick<PinInputProps, "otp" | "mask" | "defaultV
|
|
|
6
6
|
color?: "gray" | "red" | "orange" | "yellow" | "green" | "teal" | "blue" | "cyan" | "purple" | "pink" | "whiteAlpha" | "blackAlpha" | "primary";
|
|
7
7
|
pins: number;
|
|
8
8
|
label?: string;
|
|
9
|
+
id?: string;
|
|
10
|
+
isRequired?: boolean;
|
|
11
|
+
isInformation?: boolean;
|
|
12
|
+
informationMessage?: string;
|
|
9
13
|
};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { ProfilePhotoViewerProps } from "./ProfilePhotoViewerProps";
|
|
3
|
-
export default function ProfilePhotoViewer({ photoUrl, onPhotoChange, imageWidth, imageAlt, imageObjectFit, imageBorderRadius, editIconSize, editIconPositionRight, editIconPositionBottom, isRound, boxStyle, isEditable, isView, style, handleIsView, fallbackText, }: ProfilePhotoViewerProps): React.JSX.Element;
|
|
3
|
+
export default function ProfilePhotoViewer({ photoUrl, onPhotoChange, imageWidth, imageAlt, imageObjectFit, imageBorderRadius, editIconSize, editIconPositionRight, editIconPositionBottom, isRound, boxStyle, isEditable, isView, style, handleIsView, fallbackText, revealOnHover, }: ProfilePhotoViewerProps): React.JSX.Element;
|
|
@@ -50,10 +50,12 @@ var react_2 = require("@chakra-ui/react");
|
|
|
50
50
|
var lucide_react_1 = require("lucide-react");
|
|
51
51
|
var useCustomTheme_1 = require("../../Theme/useCustomTheme");
|
|
52
52
|
function ProfilePhotoViewer(_a) {
|
|
53
|
-
var
|
|
54
|
-
var
|
|
53
|
+
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y;
|
|
54
|
+
var photoUrl = _a.photoUrl, onPhotoChange = _a.onPhotoChange, _z = _a.imageWidth, imageWidth = _z === void 0 ? "100px" : _z, _0 = _a.imageAlt, imageAlt = _0 === void 0 ? "Profile Photo" : _0, _1 = _a.imageObjectFit, imageObjectFit = _1 === void 0 ? "cover" : _1, _2 = _a.imageBorderRadius, imageBorderRadius = _2 === void 0 ? "full" : _2, _3 = _a.editIconSize, editIconSize = _3 === void 0 ? "sm" : _3, _4 = _a.editIconPositionRight, editIconPositionRight = _4 === void 0 ? "0px" : _4, _5 = _a.editIconPositionBottom, editIconPositionBottom = _5 === void 0 ? "0px" : _5, _6 = _a.isRound, isRound = _6 === void 0 ? true : _6, boxStyle = _a.boxStyle, _7 = _a.isEditable, isEditable = _7 === void 0 ? false : _7, _8 = _a.isView, isView = _8 === void 0 ? false : _8, style = _a.style, handleIsView = _a.handleIsView, fallbackText = _a.fallbackText, _9 = _a.revealOnHover, revealOnHover = _9 === void 0 ? true : _9;
|
|
55
|
+
var _10 = (0, react_1.useState)(photoUrl), photo = _10[0], setPhoto = _10[1];
|
|
55
56
|
var fileInputRef = (0, react_1.useRef)(null);
|
|
56
57
|
var theme = (0, useCustomTheme_1.useCustomTheme)();
|
|
58
|
+
var c = (_b = theme.colors) !== null && _b !== void 0 ? _b : {};
|
|
57
59
|
var handlePhotoChange = function (event) {
|
|
58
60
|
var _a;
|
|
59
61
|
if (!isEditable)
|
|
@@ -76,31 +78,47 @@ function ProfilePhotoViewer(_a) {
|
|
|
76
78
|
(_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click();
|
|
77
79
|
};
|
|
78
80
|
var isPdf = photo === null || photo === void 0 ? void 0 : photo.endsWith(".pdf");
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
81
|
+
var border = (_d = (_c = c.boxborder) === null || _c === void 0 ? void 0 : _c[300]) !== null && _d !== void 0 ? _d : (_e = c.gray) === null || _e === void 0 ? void 0 : _e[200];
|
|
82
|
+
// Shared modern frame for whichever media we render (photo / pdf / fallback).
|
|
83
|
+
var mediaFrame = {
|
|
84
|
+
boxSize: imageWidth,
|
|
85
|
+
borderRadius: imageBorderRadius,
|
|
86
|
+
border: "0.063rem solid ".concat(border),
|
|
87
|
+
boxShadow: (_f = theme.shadows) === null || _f === void 0 ? void 0 : _f.sm,
|
|
88
|
+
};
|
|
89
|
+
var renderMedia = function () {
|
|
90
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
91
|
+
if (photo) {
|
|
92
|
+
return isPdf ? (react_1.default.createElement(react_2.Box, __assign({}, mediaFrame, { bg: (_b = (_a = c.gray) === null || _a === void 0 ? void 0 : _a[100]) !== null && _b !== void 0 ? _b : "gray.100", color: (_c = c.gray) === null || _c === void 0 ? void 0 : _c[500], display: "flex", alignItems: "center", justifyContent: "center", overflow: "hidden" }),
|
|
93
|
+
react_1.default.createElement(lucide_react_1.FileText, { size: "45%" }))) : (react_1.default.createElement(react_2.Image, __assign({ src: photo, alt: imageAlt, objectFit: imageObjectFit }, mediaFrame)));
|
|
94
|
+
}
|
|
95
|
+
// Fallback: branded tinted avatar (initials or user glyph).
|
|
96
|
+
return (react_1.default.createElement(react_2.Box, __assign({}, mediaFrame, { display: "flex", alignItems: "center", justifyContent: "center", bg: (_f = (_e = (_d = c.primary) === null || _d === void 0 ? void 0 : _d.opacity) === null || _e === void 0 ? void 0 : _e[16]) !== null && _f !== void 0 ? _f : (_g = c.gray) === null || _g === void 0 ? void 0 : _g[100], color: (_j = (_h = c.primary) === null || _h === void 0 ? void 0 : _h[600]) !== null && _j !== void 0 ? _j : (_k = c.gray) === null || _k === void 0 ? void 0 : _k[500] }), fallbackText ? (react_1.default.createElement(react_2.Text, { fontSize: "1.75rem", fontWeight: 700, lineHeight: "1" }, fallbackText)) : (react_1.default.createElement(lucide_react_1.User, { size: "48%" }))));
|
|
97
|
+
};
|
|
98
|
+
var hasActions = isEditable || isView;
|
|
99
|
+
return (react_1.default.createElement(react_2.Box, { position: "relative", display: "inline-block", style: boxStyle, borderRadius: imageBorderRadius, transition: "box-shadow 0.2s ease", sx: {
|
|
100
|
+
"&:hover .ppv-overlay": { opacity: 1 },
|
|
101
|
+
"&:hover .ppv-actions": { opacity: 1 },
|
|
102
|
+
"&:hover .ppv-media": {
|
|
103
|
+
boxShadow: "0 0 0 0.1875rem ".concat((_j = (_h = (_g = c.primary) === null || _g === void 0 ? void 0 : _g.opacity) === null || _h === void 0 ? void 0 : _h[24]) !== null && _j !== void 0 ? _j : "transparent"),
|
|
82
104
|
},
|
|
83
105
|
} },
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
react_1.default.createElement(react_2.
|
|
87
|
-
react_1.default.createElement(
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
transition: "opacity 0.3s",
|
|
92
|
-
} },
|
|
93
|
-
isEditable && (react_1.default.createElement(react_2.Tooltip, { label: "Edit", "aria-label": "Edit" },
|
|
94
|
-
react_1.default.createElement(react_2.IconButton, { icon: react_1.default.createElement(lucide_react_1.SquarePen, { size: 14 }), isRound: isRound, size: editIconSize, onClick: handleClick, "aria-label": "Edit photo", color: theme.colors.gray[200], style: __assign(__assign({}, style), { transition: "transform 0.3s, box-shadow 0.3s", boxShadow: theme.shadows.md, marginRight: "3px" }), _hover: {
|
|
106
|
+
react_1.default.createElement(react_2.Box, { className: "ppv-media", borderRadius: imageBorderRadius, transition: "box-shadow 0.2s ease" }, renderMedia()),
|
|
107
|
+
hasActions && (react_1.default.createElement(react_1.default.Fragment, null,
|
|
108
|
+
react_1.default.createElement(react_2.Box, { className: "ppv-overlay", position: "absolute", inset: 0, borderRadius: imageBorderRadius, bg: "blackAlpha.300", opacity: 0, transition: "opacity 0.2s ease", pointerEvents: "none" }),
|
|
109
|
+
react_1.default.createElement(react_2.HStack, { className: "ppv-actions", position: "absolute", right: editIconPositionRight, bottom: editIconPositionBottom, transform: "translate(-15%, -15%)", spacing: 1.5, opacity: revealOnHover ? 0 : 1, transition: "opacity 0.2s ease" },
|
|
110
|
+
isEditable && (react_1.default.createElement(react_2.Tooltip, { label: "Edit", "aria-label": "Edit", hasArrow: true },
|
|
111
|
+
react_1.default.createElement(react_2.IconButton, { icon: react_1.default.createElement(lucide_react_1.SquarePen, { size: 14 }), isRound: isRound, size: editIconSize, onClick: handleClick, "aria-label": "Edit photo", bg: (_k = c.primary) === null || _k === void 0 ? void 0 : _k[500], color: (_l = c.white) !== null && _l !== void 0 ? _l : "#fff", border: "0.125rem solid ".concat((_m = c.white) !== null && _m !== void 0 ? _m : "#fff"), boxShadow: (_o = theme.shadows) === null || _o === void 0 ? void 0 : _o.md, style: style, transition: "transform 0.2s ease, background 0.2s ease, box-shadow 0.2s ease", _hover: {
|
|
112
|
+
bg: (_p = c.primary) === null || _p === void 0 ? void 0 : _p[600],
|
|
95
113
|
transform: "scale(1.1)",
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
114
|
+
boxShadow: (_q = theme.shadows) === null || _q === void 0 ? void 0 : _q.lg,
|
|
115
|
+
}, _active: { bg: (_r = c.primary) === null || _r === void 0 ? void 0 : _r[700] } }))),
|
|
116
|
+
isView && (react_1.default.createElement(react_2.Tooltip, { label: "View", "aria-label": "View", hasArrow: true },
|
|
117
|
+
react_1.default.createElement(react_2.IconButton, { icon: react_1.default.createElement(lucide_react_1.Eye, { size: 14 }), isRound: isRound, size: editIconSize, onClick: handleIsView, "aria-label": "View photo", bg: (_s = c.white) !== null && _s !== void 0 ? _s : "#fff", color: (_t = c.gray) === null || _t === void 0 ? void 0 : _t[700], border: "0.063rem solid ".concat(border), boxShadow: (_u = theme.shadows) === null || _u === void 0 ? void 0 : _u.md, style: style, transition: "transform 0.2s ease, background 0.2s ease, box-shadow 0.2s ease", _hover: {
|
|
118
|
+
bg: (_v = c.gray) === null || _v === void 0 ? void 0 : _v[50],
|
|
119
|
+
color: (_w = c.primary) === null || _w === void 0 ? void 0 : _w[600],
|
|
101
120
|
transform: "scale(1.1)",
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
} })))),
|
|
121
|
+
boxShadow: (_x = theme.shadows) === null || _x === void 0 ? void 0 : _x.lg,
|
|
122
|
+
}, _active: { bg: (_y = c.gray) === null || _y === void 0 ? void 0 : _y[100] } })))),
|
|
105
123
|
isEditable && (react_1.default.createElement(react_2.Input, { type: "file", accept: "image/*", onChange: handlePhotoChange, hidden: true, ref: fileInputRef }))))));
|
|
106
124
|
}
|
|
@@ -15,4 +15,6 @@ export type ProfilePhotoViewerProps = {
|
|
|
15
15
|
style?: React.CSSProperties;
|
|
16
16
|
handleIsView?: () => void;
|
|
17
17
|
fallbackText?: string;
|
|
18
|
+
/** When true, the edit/view icons are hidden and revealed on hover. Defaults to false (always visible). */
|
|
19
|
+
revealOnHover?: boolean;
|
|
18
20
|
};
|
|
@@ -25,7 +25,7 @@ var RadioButton = function (_a) {
|
|
|
25
25
|
boxShadow: "0 0 0 2px ".concat(theme.colors.primary[200]),
|
|
26
26
|
},
|
|
27
27
|
} },
|
|
28
|
-
react_1.default.createElement(FormLabel_1.TextLabel, { label: label, fontSize: labelFontSize, showTooltip: showLabelTooltip, tooltipLabel: labelTooltip, clampLines: labelClampLines })));
|
|
28
|
+
react_1.default.createElement(FormLabel_1.TextLabel, { label: label, fontSize: labelFontSize, showTooltip: showLabelTooltip, tooltipLabel: labelTooltip, clampLines: labelClampLines, inline: true })));
|
|
29
29
|
};
|
|
30
30
|
exports.RadioButton = RadioButton;
|
|
31
31
|
var RadioButtonGroup = function (_a) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
import { SearchSelectProps } from "./SearchSelectProps";
|
|
3
|
-
declare const SearchSelect: ({ id, label, options, onSelect, onSearch, isOptionLoading, isLoading, loadingText, placeholder, value, searchQuery, isMultiple, isRequired, error, errorMessage, helperText, width, height, size, chip, information, rightIcon, addNew, isSelectAll, pagination, insideSelect, isRemoveAllIcon, }: SearchSelectProps) => React.JSX.Element;
|
|
3
|
+
declare const SearchSelect: ({ id, label, options, onSelect, onSearch, isOptionLoading, isLoading, loadingText, placeholder, value, searchQuery, isMultiple, isRequired, error, errorMessage, helperText, width, height, size, chip, information, isInformation, informationMessage, rightIcon, addNew, isSelectAll, pagination, insideSelect, isRemoveAllIcon, }: SearchSelectProps) => React.JSX.Element;
|
|
4
4
|
export default SearchSelect;
|
|
@@ -82,7 +82,7 @@ var normalizeMultiValue = function (val) {
|
|
|
82
82
|
};
|
|
83
83
|
var SearchSelect = function (_a) {
|
|
84
84
|
var _b, _c, _d, _e, _f, _g, _h, _j;
|
|
85
|
-
var id = _a.id, label = _a.label, options = _a.options, onSelect = _a.onSelect, onSearch = _a.onSearch, _k = _a.isOptionLoading, isOptionLoading = _k === void 0 ? false : _k, _l = _a.isLoading, isLoading = _l === void 0 ? false : _l, _m = _a.loadingText, loadingText = _m === void 0 ? "Loading..." : _m, _o = _a.placeholder, placeholder = _o === void 0 ? "Select" : _o, value = _a.value, _p = _a.searchQuery, searchQuery = _p === void 0 ? "" : _p, _q = _a.isMultiple, isMultiple = _q === void 0 ? false : _q, _r = _a.isRequired, isRequired = _r === void 0 ? false : _r, _s = _a.error, error = _s === void 0 ? false : _s, errorMessage = _a.errorMessage, helperText = _a.helperText, _t = _a.width, width = _t === void 0 ? "100%" : _t, height = _a.height, _u = _a.size, size = _u === void 0 ? "md" : _u, chip = _a.chip, information = _a.information, rightIcon = _a.rightIcon, addNew = _a.addNew, _v = _a.isSelectAll, isSelectAll = _v === void 0 ? false : _v, pagination = _a.pagination, insideSelect = _a.insideSelect, isRemoveAllIcon = _a.isRemoveAllIcon;
|
|
85
|
+
var id = _a.id, label = _a.label, options = _a.options, onSelect = _a.onSelect, onSearch = _a.onSearch, _k = _a.isOptionLoading, isOptionLoading = _k === void 0 ? false : _k, _l = _a.isLoading, isLoading = _l === void 0 ? false : _l, _m = _a.loadingText, loadingText = _m === void 0 ? "Loading..." : _m, _o = _a.placeholder, placeholder = _o === void 0 ? "Select" : _o, value = _a.value, _p = _a.searchQuery, searchQuery = _p === void 0 ? "" : _p, _q = _a.isMultiple, isMultiple = _q === void 0 ? false : _q, _r = _a.isRequired, isRequired = _r === void 0 ? false : _r, _s = _a.error, error = _s === void 0 ? false : _s, errorMessage = _a.errorMessage, helperText = _a.helperText, _t = _a.width, width = _t === void 0 ? "100%" : _t, height = _a.height, _u = _a.size, size = _u === void 0 ? "md" : _u, chip = _a.chip, information = _a.information, isInformation = _a.isInformation, informationMessage = _a.informationMessage, rightIcon = _a.rightIcon, addNew = _a.addNew, _v = _a.isSelectAll, isSelectAll = _v === void 0 ? false : _v, pagination = _a.pagination, insideSelect = _a.insideSelect, isRemoveAllIcon = _a.isRemoveAllIcon;
|
|
86
86
|
var s = (0, searchSelectSize_1.getSearchSelectSizeStyles)((size || "md"));
|
|
87
87
|
var insideSelectBoxHeight = height !== null && height !== void 0 ? height : s.insideSelectDefaultHeight;
|
|
88
88
|
var _w = (0, react_1.useState)(searchQuery), inputValue = _w[0], setInputValue = _w[1];
|
|
@@ -90,19 +90,26 @@ var SearchSelect = function (_a) {
|
|
|
90
90
|
var _y = (0, react_1.useState)(true), hasMore = _y[0], setHasMore = _y[1];
|
|
91
91
|
var inputRef = (0, react_1.useRef)(null);
|
|
92
92
|
var containerRef = (0, react_1.useRef)(null);
|
|
93
|
+
var controlRef = (0, react_1.useRef)(null);
|
|
94
|
+
var _z = (0, react_1.useState)({ top: 0, left: 0, width: 0 }), dropdownPos = _z[0], setDropdownPos = _z[1];
|
|
93
95
|
var scrollTimeoutRef = (0, react_1.useRef)(null);
|
|
94
|
-
var
|
|
95
|
-
var
|
|
96
|
+
var _0 = (0, react_1.useState)(false), focused = _0[0], setFocused = _0[1];
|
|
97
|
+
var _1 = (0, react_1.useState)(false), customSelectOpen = _1[0], setCustomSelectOpen = _1[1];
|
|
96
98
|
var customSelectRef = (0, react_1.useRef)(null);
|
|
97
|
-
var
|
|
99
|
+
var _2 = (0, react_1.useState)({
|
|
98
100
|
top: 0,
|
|
99
101
|
left: 0,
|
|
100
102
|
width: 0,
|
|
101
|
-
}), customSelectPos =
|
|
103
|
+
}), customSelectPos = _2[0], setCustomSelectPos = _2[1];
|
|
102
104
|
var theme = (0, useCustomTheme_1.useCustomTheme)();
|
|
103
105
|
(0, react_2.useOutsideClick)({
|
|
104
106
|
ref: containerRef,
|
|
105
|
-
handler: function () {
|
|
107
|
+
handler: function (e) {
|
|
108
|
+
// The options dropdown is portaled to <body>, so a click on it is "outside"
|
|
109
|
+
// the container — ignore those so selecting an option doesn't close first.
|
|
110
|
+
var dropdown = document.getElementById("searchselect-dropdown-portal");
|
|
111
|
+
if (dropdown && dropdown.contains(e.target))
|
|
112
|
+
return;
|
|
106
113
|
setIsOpen(false);
|
|
107
114
|
},
|
|
108
115
|
});
|
|
@@ -223,14 +230,38 @@ var SearchSelect = function (_a) {
|
|
|
223
230
|
});
|
|
224
231
|
}
|
|
225
232
|
}, [customSelectOpen]);
|
|
233
|
+
// Keep the portaled options dropdown anchored to the control (on open + while
|
|
234
|
+
// open if the page/modal scrolls or resizes).
|
|
235
|
+
var updateDropdownPos = (0, react_1.useCallback)(function () {
|
|
236
|
+
if (!controlRef.current)
|
|
237
|
+
return;
|
|
238
|
+
var rect = controlRef.current.getBoundingClientRect();
|
|
239
|
+
setDropdownPos({
|
|
240
|
+
top: rect.bottom + window.scrollY,
|
|
241
|
+
left: rect.left + window.scrollX,
|
|
242
|
+
width: rect.width,
|
|
243
|
+
});
|
|
244
|
+
}, []);
|
|
245
|
+
(0, react_1.useEffect)(function () {
|
|
246
|
+
if (!isOpen)
|
|
247
|
+
return;
|
|
248
|
+
updateDropdownPos();
|
|
249
|
+
// `true` (capture) catches scrolling inside any ancestor (e.g. modal body).
|
|
250
|
+
window.addEventListener("scroll", updateDropdownPos, true);
|
|
251
|
+
window.addEventListener("resize", updateDropdownPos);
|
|
252
|
+
return function () {
|
|
253
|
+
window.removeEventListener("scroll", updateDropdownPos, true);
|
|
254
|
+
window.removeEventListener("resize", updateDropdownPos);
|
|
255
|
+
};
|
|
256
|
+
}, [isOpen, updateDropdownPos]);
|
|
226
257
|
return (react_1.default.createElement(react_2.Box, { ref: containerRef, width: width, position: "relative" },
|
|
227
|
-
label && (react_1.default.createElement(FormLabel_1.TextLabel, { label: label, id: id, isRequired: isRequired, isInformation: information === null || information === void 0 ? void 0 : information.isInformation, informationMessage: information === null || information === void 0 ? void 0 : information.informationMessage })),
|
|
258
|
+
label && (react_1.default.createElement(FormLabel_1.TextLabel, { label: label, id: id, isRequired: isRequired, isInformation: isInformation !== null && isInformation !== void 0 ? isInformation : information === null || information === void 0 ? void 0 : information.isInformation, informationMessage: informationMessage !== null && informationMessage !== void 0 ? informationMessage : information === null || information === void 0 ? void 0 : information.informationMessage })),
|
|
228
259
|
react_1.default.createElement(react_2.InputGroup, { size: size },
|
|
229
|
-
react_1.default.createElement(react_2.Box, { as: "div", w: "100%", minH: s.minH, px: s.px, pr: s.pr, position: "relative", display: "flex", alignItems: "center", flexWrap: "wrap", gap: s.gap, border: "0.063rem solid", borderColor: error
|
|
260
|
+
react_1.default.createElement(react_2.Box, { as: "div", ref: controlRef, w: "100%", minH: s.minH, px: s.px, pr: s.pr, position: "relative", display: "flex", alignItems: "center", flexWrap: "wrap", gap: s.gap, border: "0.063rem solid", borderColor: error
|
|
230
261
|
? theme.colors.semantic.error[500]
|
|
231
262
|
: focused
|
|
232
263
|
? theme.colors.primary[500]
|
|
233
|
-
: (_b = theme.colors.boxborder) === null || _b === void 0 ? void 0 : _b[500], borderRadius: "0.
|
|
264
|
+
: (_b = theme.colors.boxborder) === null || _b === void 0 ? void 0 : _b[500], borderRadius: "0.5rem", bg: (_c = theme.colors.gray) === null || _c === void 0 ? void 0 : _c[50], boxShadow: focused
|
|
234
265
|
? error
|
|
235
266
|
? "0 0 0 0.125rem ".concat((_d = theme.colors.boxShadow) === null || _d === void 0 ? void 0 : _d.error)
|
|
236
267
|
: "0 0 0 0.125rem ".concat((_e = theme.colors.boxShadow) === null || _e === void 0 ? void 0 : _e.primary)
|
|
@@ -275,22 +306,23 @@ var SearchSelect = function (_a) {
|
|
|
275
306
|
e.stopPropagation();
|
|
276
307
|
setIsOpen(function (prev) { return !prev; });
|
|
277
308
|
}, "aria-label": "toggle-dropdown", display: "flex", alignItems: "center" }, isOpen ? (react_1.default.createElement(lucide_react_1.ChevronUp, { size: s.chevronSize })) : (react_1.default.createElement(lucide_react_1.ChevronDown, { size: s.chevronSize }))))))),
|
|
278
|
-
isOpen && (react_1.default.createElement(react_2.
|
|
279
|
-
|
|
280
|
-
react_1.default.createElement(
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
react_1.default.createElement(react_2.
|
|
284
|
-
react_1.default.createElement(react_2.Text, { fontSize: s.dropdownTextFontSize }, loadingText))) : !isOptionLoading && filteredOptions.length === 0 ? (react_1.default.createElement(react_2.Text, { p: 3, fontSize: s.dropdownTextFontSize, color: theme.colors.gray[500] }, "No results found")) : (react_1.default.createElement(react_1.default.Fragment, null,
|
|
285
|
-
filteredOptions.map(function (option) { return (react_1.default.createElement(react_2.Box, { key: option.id, py: s.optionRowPy, px: 3, minH: s.optionRowMinH, cursor: "pointer", bg: isSelected(option.id) ? theme.colors.gray[100] : "transparent", _hover: { bg: theme.colors.gray[50] }, onClick: function () { return handleSelect(option); }, display: "flex", alignItems: "center", gap: 2, borderBottom: "0.063rem solid ".concat(theme.colors.gray[100]) },
|
|
286
|
-
isMultiple && (react_1.default.createElement(Checkbox_1.default, { isChecked: isSelected(option.id), sx: { pointerEvents: "none" }, size: s.checkboxSize })),
|
|
287
|
-
option.view ? (react_1.default.createElement(react_1.default.Fragment, null, option.view)) : (react_1.default.createElement(react_2.Text, { fontSize: s.dropdownTextFontSize }, option.label)))); }),
|
|
288
|
-
((pagination === null || pagination === void 0 ? void 0 : pagination.scrollLoading) || (isOptionLoading && filteredOptions.length > 0)) && (react_1.default.createElement(react_2.Box, { py: s.optionRowPy, px: 3, display: "flex", alignItems: "center", justifyContent: "center", gap: 2, minH: s.optionRowMinH },
|
|
309
|
+
isOpen && (react_1.default.createElement(react_2.Portal, null,
|
|
310
|
+
react_1.default.createElement(react_2.Box, { id: "searchselect-dropdown-portal", position: "absolute", top: "".concat(dropdownPos.top, "px"), left: "".concat(dropdownPos.left, "px"), width: "".concat(dropdownPos.width, "px"), zIndex: 1500, maxH: "20rem", borderWidth: 1, borderColor: theme.colors.gray[200], borderRadius: "sm", bg: theme.colors.white, boxShadow: "md", display: "flex", flexDirection: "column" },
|
|
311
|
+
isMultiple && isSelectAll && (react_1.default.createElement(react_2.Box, { py: s.optionRowPy, px: 3, cursor: "pointer", onClick: handleSelectAll, display: "flex", alignItems: "center", gap: 2, borderBottom: "0.063rem solid ".concat(theme.colors.gray[100]) },
|
|
312
|
+
react_1.default.createElement(Checkbox_1.default, { isChecked: allFilteredSelected, sx: { pointerEvents: "none" }, size: s.checkboxSize }),
|
|
313
|
+
react_1.default.createElement(react_2.Text, { fontSize: s.dropdownTextFontSize }, allFilteredSelected ? "Unselect All" : "Select All"))),
|
|
314
|
+
react_1.default.createElement(react_2.Box, { flex: "1", overflowY: "auto", onScroll: handleScroll, maxH: "15rem", borderBottom: "0.063rem solid", borderColor: theme.colors.gray[200] }, isOptionLoading && filteredOptions.length === 0 ? (react_1.default.createElement(react_2.Box, { py: s.optionRowPy, px: 3, display: "flex", alignItems: "center", gap: 2, minH: s.optionRowMinH },
|
|
289
315
|
react_1.default.createElement(react_2.Spinner, { size: s.spinnerSize }),
|
|
290
|
-
react_1.default.createElement(react_2.Text, { fontSize: s.dropdownTextFontSize }, loadingText)))))
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
316
|
+
react_1.default.createElement(react_2.Text, { fontSize: s.dropdownTextFontSize }, loadingText))) : !isOptionLoading && filteredOptions.length === 0 ? (react_1.default.createElement(react_2.Text, { p: 3, fontSize: s.dropdownTextFontSize, color: theme.colors.gray[500] }, "No results found")) : (react_1.default.createElement(react_1.default.Fragment, null,
|
|
317
|
+
filteredOptions.map(function (option) { return (react_1.default.createElement(react_2.Box, { key: option.id, py: s.optionRowPy, px: 3, minH: s.optionRowMinH, cursor: "pointer", bg: isSelected(option.id) ? theme.colors.gray[100] : "transparent", _hover: { bg: theme.colors.gray[50] }, onClick: function () { return handleSelect(option); }, display: "flex", alignItems: "center", gap: 2, borderBottom: "0.063rem solid ".concat(theme.colors.gray[100]) },
|
|
318
|
+
isMultiple && (react_1.default.createElement(Checkbox_1.default, { isChecked: isSelected(option.id), sx: { pointerEvents: "none" }, size: s.checkboxSize })),
|
|
319
|
+
option.view ? (react_1.default.createElement(react_1.default.Fragment, null, option.view)) : (react_1.default.createElement(react_2.Text, { fontSize: s.dropdownTextFontSize }, option.label)))); }),
|
|
320
|
+
((pagination === null || pagination === void 0 ? void 0 : pagination.scrollLoading) || (isOptionLoading && filteredOptions.length > 0)) && (react_1.default.createElement(react_2.Box, { py: s.optionRowPy, px: 3, display: "flex", alignItems: "center", justifyContent: "center", gap: 2, minH: s.optionRowMinH },
|
|
321
|
+
react_1.default.createElement(react_2.Spinner, { size: s.spinnerSize }),
|
|
322
|
+
react_1.default.createElement(react_2.Text, { fontSize: s.dropdownTextFontSize }, loadingText)))))),
|
|
323
|
+
(addNew === null || addNew === void 0 ? void 0 : addNew.enabled) && (react_1.default.createElement(react_2.Box, { py: s.optionRowPy, px: 3, borderTop: "0.063rem solid", borderColor: theme.colors.gray[200], bg: theme.colors.white, display: "flex", alignItems: "center", gap: 2, minH: s.optionRowMinH, cursor: "pointer", onClick: addNew.onClick, _hover: { bg: theme.colors.gray[50] } },
|
|
324
|
+
addNew.icon || react_1.default.createElement(lucide_react_1.Plus, { size: s.addNewIconSize }),
|
|
325
|
+
react_1.default.createElement(react_2.Text, { fontSize: s.dropdownTextFontSize }, addNew.text || "Add New")))))),
|
|
294
326
|
helperText && !error && react_1.default.createElement(HelperText_1.default, { helperText: helperText }),
|
|
295
327
|
error && react_1.default.createElement(ErrorMessage_1.default, { errorMessage: errorMessage })));
|
|
296
328
|
};
|
|
@@ -7,7 +7,8 @@ exports.Select = {
|
|
|
7
7
|
fontWeight: 500,
|
|
8
8
|
fontSize: "0.875rem",
|
|
9
9
|
letterSpacing: "0.044rem",
|
|
10
|
-
borderRadius: "0.
|
|
10
|
+
borderRadius: "0.5rem",
|
|
11
|
+
transition: "border-color 0.2s, box-shadow 0.2s",
|
|
11
12
|
minWidth: "0", // allow shrinking inside flex
|
|
12
13
|
width: "100%", // full container width
|
|
13
14
|
maxWidth: "100%",
|
|
@@ -60,6 +60,7 @@ exports.default = SelectSearch;
|
|
|
60
60
|
var react_1 = __importStar(require("react"));
|
|
61
61
|
var react_2 = require("@chakra-ui/react");
|
|
62
62
|
var FormLabel_1 = require("../Common/FormLabel");
|
|
63
|
+
var fieldStyles_1 = require("../Common/fieldStyles");
|
|
63
64
|
var useCustomTheme_1 = require("../../Theme/useCustomTheme");
|
|
64
65
|
var lucide_react_1 = require("lucide-react");
|
|
65
66
|
var ErrorMessage_1 = __importDefault(require("../Common/ErrorMessage"));
|
|
@@ -90,7 +91,6 @@ function SelectSearch(_a) {
|
|
|
90
91
|
BottomIcon = _l === void 0 ? false : _l, BottomText = _a.BottomText, handleBottomClick = _a.handleBottomClick, BottomTextColor = _a.BottomTextColor, isColorOptions = _a.isColorOptions;
|
|
91
92
|
var theme = (0, useCustomTheme_1.useCustomTheme)();
|
|
92
93
|
var errorBorder = "2px solid ".concat(theme.colors.semantic.error[500]);
|
|
93
|
-
var defaultBorderThick = "2px solid ".concat(theme.colors.boxborder[500]);
|
|
94
94
|
var defaultBorderThin = "1px solid ".concat(theme.colors.boxborder[500]);
|
|
95
95
|
var _m = (0, react_1.useState)(initialSelectedOption ? [initialSelectedOption] : []), selectedOptions = _m[0], setSelectedOptions = _m[1];
|
|
96
96
|
var _o = (0, react_1.useState)(searchQuery), inputValue = _o[0], setInputValue = _o[1];
|
|
@@ -239,13 +239,16 @@ function SelectSearch(_a) {
|
|
|
239
239
|
react_1.default.createElement(react_2.TagLabel, { width: "50px" }, option.label),
|
|
240
240
|
react_1.default.createElement(react_2.TagCloseButton, { onClick: function () { return handleRemoveOption(option); } }))); }))),
|
|
241
241
|
react_1.default.createElement(react_2.InputGroup, null,
|
|
242
|
-
react_1.default.createElement(react_2.Input, { ref: inputRef,
|
|
242
|
+
react_1.default.createElement(react_2.Input, { ref: inputRef, variant: "outline", borderRadius: fieldStyles_1.FIELD_RADIUS, value: inputValue ? inputValue : "", onClick: function () { return setIsOpen(true); }, onFocus: function () { return setIsOpen(true); }, onChange: function (e) { return handleInputChange(e.target.value); }, placeholder: placeholder, onKeyDown: handleKeyDown, id: id, name: name, cursor: "pointer", borderColor: theme.colors.boxborder[500], transition: "border-color 0.2s, box-shadow 0.2s", _hover: {
|
|
243
243
|
borderColor: error
|
|
244
244
|
? theme.colors.semantic.error[500]
|
|
245
245
|
: theme.colors.primary[500],
|
|
246
246
|
}, _focus: {
|
|
247
|
-
borderColor: error
|
|
248
|
-
|
|
247
|
+
borderColor: error
|
|
248
|
+
? theme.colors.semantic.error[500]
|
|
249
|
+
: theme.colors.primary[500],
|
|
250
|
+
boxShadow: (0, fieldStyles_1.fieldFocusRing)(theme, !!error),
|
|
251
|
+
}, style: __assign(__assign({}, inputStyle), { backgroundColor: theme.colors.gray[50], fontWeight: 600, color: theme.colors.gray[700], padding: "0 0.75rem", fontSize: 15, letterSpacing: 0.7, border: error ? errorBorder : defaultBorderThin }) }),
|
|
249
252
|
rightIcon && (react_1.default.createElement(react_2.InputRightElement, { pointerEvents: "none", children: rightIcon, style: __assign({}, rightElementStyle) }))),
|
|
250
253
|
isOpen && (react_1.default.createElement(react_2.Box, { ref: dropdownRef, marginTop: "5px", position: "absolute", top: position === "below" ? "100%" : "auto", bottom: position === "above" ? "100%" : "auto", left: 0, right: 0, border: "1px solid", borderColor: "gray.300", borderRadius: "md", bg: "white", maxHeight: "150px", overflowY: "auto", zIndex: 10 },
|
|
251
254
|
react_1.default.createElement(RenderOptions, { isOptionLoading: isOptionLoading, filteredOptions: filteredOptions, loadingText: loadingText, handleOptionClick: handleOptionClick, isProfile: isProfile, isColorOptions: isColorOptions }),
|