@seedgrid/fe-components 2026.11.1 → 2026.11.3
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/ai/seedgrid-components.manifest.json +1527 -89
- package/dist/buttons/SgButton.d.ts +6 -2
- package/dist/buttons/SgButton.d.ts.map +1 -1
- package/dist/buttons/SgButton.js +2 -2
- package/dist/buttons/SgButton.meta.js +3 -3
- package/dist/buttons/SgFloatActionButton.d.ts +2 -2
- package/dist/buttons/SgFloatActionButton.d.ts.map +1 -1
- package/dist/buttons/SgFloatActionButton.js +7 -7
- package/dist/buttons/SgFloatActionButton.meta.js +2 -2
- package/dist/buttons/SgSplitButton.d.ts +2 -2
- package/dist/buttons/SgSplitButton.d.ts.map +1 -1
- package/dist/buttons/SgSplitButton.js +4 -4
- package/dist/buttons/SgSplitButton.meta.js +3 -3
- package/dist/commons/SgAvatar.d.ts +2 -2
- package/dist/commons/SgAvatar.d.ts.map +1 -1
- package/dist/commons/SgAvatar.js +3 -3
- package/dist/commons/SgBadge.d.ts +1 -1
- package/dist/commons/SgBadge.d.ts.map +1 -1
- package/dist/commons/SgBadge.js +3 -3
- package/dist/generated/compiledStyles.d.ts +1 -1
- package/dist/generated/compiledStyles.d.ts.map +1 -1
- package/dist/generated/compiledStyles.js +1 -1
- package/dist/i18n/en-US.d.ts.map +1 -1
- package/dist/i18n/en-US.js +55 -0
- package/dist/i18n/es.d.ts.map +1 -1
- package/dist/i18n/es.js +55 -0
- package/dist/i18n/fr.d.ts.map +1 -1
- package/dist/i18n/fr.js +55 -0
- package/dist/i18n/pt-BR.d.ts.map +1 -1
- package/dist/i18n/pt-BR.js +55 -0
- package/dist/i18n/pt-PT.d.ts.map +1 -1
- package/dist/i18n/pt-PT.js +55 -0
- package/dist/index.d.ts +12 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/inputs/SgAutocomplete.d.ts +1 -1
- package/dist/inputs/SgAutocomplete.d.ts.map +1 -1
- package/dist/inputs/SgAutocomplete.js +3 -3
- package/dist/inputs/SgCameraCapture.d.ts +25 -0
- package/dist/inputs/SgCameraCapture.d.ts.map +1 -0
- package/dist/inputs/SgCameraCapture.js +114 -0
- package/dist/inputs/SgCameraCapture.meta.d.ts +4 -0
- package/dist/inputs/SgCameraCapture.meta.d.ts.map +1 -0
- package/dist/inputs/SgCameraCapture.meta.js +63 -0
- package/dist/inputs/SgCheckboxGroup.d.ts +2 -2
- package/dist/inputs/SgCheckboxGroup.d.ts.map +1 -1
- package/dist/inputs/SgCheckboxGroup.js +12 -12
- package/dist/inputs/SgCombobox.js +5 -5
- package/dist/inputs/SgDatatable.js +11 -11
- package/dist/inputs/SgDatatable.meta.d.ts.map +1 -1
- package/dist/inputs/SgDatatable.meta.js +4 -1
- package/dist/inputs/SgFileUpload.d.ts +69 -0
- package/dist/inputs/SgFileUpload.d.ts.map +1 -0
- package/dist/inputs/SgFileUpload.js +234 -0
- package/dist/inputs/SgFileUpload.meta.d.ts +4 -0
- package/dist/inputs/SgFileUpload.meta.d.ts.map +1 -0
- package/dist/inputs/SgFileUpload.meta.js +71 -0
- package/dist/inputs/SgImageUpload.d.ts +20 -0
- package/dist/inputs/SgImageUpload.d.ts.map +1 -0
- package/dist/inputs/SgImageUpload.js +74 -0
- package/dist/inputs/SgImageUpload.meta.d.ts +4 -0
- package/dist/inputs/SgImageUpload.meta.d.ts.map +1 -0
- package/dist/inputs/SgImageUpload.meta.js +73 -0
- package/dist/inputs/SgInputCurrency.d.ts.map +1 -1
- package/dist/inputs/SgInputCurrency.js +6 -4
- package/dist/inputs/SgInputDate.d.ts.map +1 -1
- package/dist/inputs/SgInputDate.js +3 -4
- package/dist/inputs/SgInputDateTime.d.ts +29 -0
- package/dist/inputs/SgInputDateTime.d.ts.map +1 -0
- package/dist/inputs/SgInputDateTime.js +141 -0
- package/dist/inputs/SgInputDateTime.meta.d.ts +4 -0
- package/dist/inputs/SgInputDateTime.meta.d.ts.map +1 -0
- package/dist/inputs/SgInputDateTime.meta.js +73 -0
- package/dist/inputs/SgInputNumber.d.ts.map +1 -1
- package/dist/inputs/SgInputNumber.js +6 -4
- package/dist/inputs/SgInputText.d.ts.map +1 -1
- package/dist/inputs/SgInputText.js +6 -4
- package/dist/inputs/SgInputTextArea.d.ts.map +1 -1
- package/dist/inputs/SgInputTextArea.js +4 -2
- package/dist/inputs/SgMultiSelect.meta.js +1 -1
- package/dist/inputs/SgMultiSelectChips.meta.js +1 -1
- package/dist/inputs/SgMultiSelectDropdown.js +1 -1
- package/dist/inputs/SgOrderList.d.ts +3 -3
- package/dist/inputs/SgOrderList.d.ts.map +1 -1
- package/dist/inputs/SgOrderList.js +13 -13
- package/dist/inputs/SgOrderList.meta.js +1 -1
- package/dist/inputs/SgPeriodSelector.d.ts +1 -1
- package/dist/inputs/SgPeriodSelector.d.ts.map +1 -1
- package/dist/inputs/SgPeriodSelector.js +3 -3
- package/dist/inputs/SgPickList.d.ts +3 -3
- package/dist/inputs/SgPickList.d.ts.map +1 -1
- package/dist/inputs/SgPickList.js +28 -28
- package/dist/inputs/SgPickList.meta.js +1 -1
- package/dist/inputs/SgRadioGroup.d.ts +2 -2
- package/dist/inputs/SgRadioGroup.d.ts.map +1 -1
- package/dist/inputs/SgRadioGroup.js +5 -5
- package/dist/inputs/SgRating.d.ts +1 -1
- package/dist/inputs/SgRating.d.ts.map +1 -1
- package/dist/inputs/SgRating.js +7 -7
- package/dist/inputs/SgRating.meta.js +1 -1
- package/dist/inputs/SgSlider.d.ts +1 -1
- package/dist/inputs/SgSlider.d.ts.map +1 -1
- package/dist/inputs/SgSlider.js +3 -3
- package/dist/inputs/SgSlider.meta.js +1 -1
- package/dist/inputs/SgStepperInput.d.ts +2 -2
- package/dist/inputs/SgStepperInput.d.ts.map +1 -1
- package/dist/inputs/SgStepperInput.js +4 -4
- package/dist/inputs/SgStepperInput.meta.js +1 -1
- package/dist/inputs/SgTextEditor.d.ts +1 -1
- package/dist/inputs/SgTextEditor.d.ts.map +1 -1
- package/dist/inputs/SgTextEditor.js +14 -14
- package/dist/inputs/SgToggleSwitch.meta.js +1 -1
- package/dist/inputs/SgYearPartSelector.d.ts +1 -1
- package/dist/inputs/SgYearPartSelector.d.ts.map +1 -1
- package/dist/inputs/SgYearPartSelector.js +1 -2
- package/dist/inputs/SgYearPartSelector.meta.js +2 -2
- package/dist/inputs/cameraLogic.d.ts +27 -0
- package/dist/inputs/cameraLogic.d.ts.map +1 -0
- package/dist/inputs/cameraLogic.js +57 -0
- package/dist/inputs/dateTimeLogic.d.ts +28 -0
- package/dist/inputs/dateTimeLogic.d.ts.map +1 -0
- package/dist/inputs/dateTimeLogic.js +153 -0
- package/dist/inputs/fileUploadLogic.d.ts +62 -0
- package/dist/inputs/fileUploadLogic.d.ts.map +1 -0
- package/dist/inputs/fileUploadLogic.js +254 -0
- package/dist/inputs/imageUploadLogic.d.ts +31 -0
- package/dist/inputs/imageUploadLogic.d.ts.map +1 -0
- package/dist/inputs/imageUploadLogic.js +70 -0
- package/dist/inputs/useSgMultiSelect.d.ts +1 -1
- package/dist/inputs/useSgMultiSelect.d.ts.map +1 -1
- package/dist/inputs/useSgMultiSelect.js +1 -1
- package/dist/layout/SgAccordion.d.ts +1 -1
- package/dist/layout/SgAccordion.d.ts.map +1 -1
- package/dist/layout/SgAccordion.js +3 -3
- package/dist/layout/SgBreadcrumb.d.ts +1 -1
- package/dist/layout/SgBreadcrumb.d.ts.map +1 -1
- package/dist/layout/SgBreadcrumb.js +1 -1
- package/dist/layout/SgCard.d.ts +1 -1
- package/dist/layout/SgCard.d.ts.map +1 -1
- package/dist/layout/SgCard.js +14 -14
- package/dist/layout/SgMenu.d.ts +1 -1
- package/dist/layout/SgMenu.d.ts.map +1 -1
- package/dist/layout/SgMenu.js +15 -15
- package/dist/layout/SgPageControl.d.ts +1 -1
- package/dist/layout/SgPageControl.d.ts.map +1 -1
- package/dist/layout/SgPageControl.js +4 -4
- package/dist/layout/SgPageControlPage.meta.js +2 -2
- package/dist/layout/SgToolBar.d.ts +1 -1
- package/dist/layout/SgToolBar.d.ts.map +1 -1
- package/dist/layout/SgToolBar.js +4 -4
- package/dist/layout/SgToolbarIconButton.meta.js +2 -2
- package/dist/layout/SgTreeView.d.ts +4 -4
- package/dist/layout/SgTreeView.d.ts.map +1 -1
- package/dist/layout/SgTreeView.js +6 -6
- package/dist/menus/SgDockMenu.d.ts +1 -1
- package/dist/menus/SgDockMenu.d.ts.map +1 -1
- package/dist/menus/SgDockMenu.js +6 -4
- package/dist/notifications/SgNotificationBell.d.ts +51 -0
- package/dist/notifications/SgNotificationBell.d.ts.map +1 -0
- package/dist/notifications/SgNotificationBell.js +348 -0
- package/dist/notifications/SgNotificationBell.meta.d.ts +4 -0
- package/dist/notifications/SgNotificationBell.meta.d.ts.map +1 -0
- package/dist/notifications/SgNotificationBell.meta.js +75 -0
- package/dist/notifications/notificationBellLogic.d.ts +148 -0
- package/dist/notifications/notificationBellLogic.d.ts.map +1 -0
- package/dist/notifications/notificationBellLogic.js +244 -0
- package/dist/overlay/SgConfirmationDialog.d.ts +1 -1
- package/dist/overlay/SgConfirmationDialog.d.ts.map +1 -1
- package/dist/overlay/SgConfirmationDialog.js +1 -1
- package/dist/overlay/SgPopup.d.ts +1 -1
- package/dist/overlay/SgPopup.d.ts.map +1 -1
- package/dist/overlay/SgPopup.js +1 -1
- package/dist/realtime/SgRealtimeProvider.d.ts +5 -0
- package/dist/realtime/SgRealtimeProvider.d.ts.map +1 -1
- package/dist/realtime/SgRealtimeProvider.js +31 -8
- package/dist/sandbox.cjs +77 -66
- package/dist/style.css +1 -1
- package/package.json +3 -3
|
@@ -351,9 +351,11 @@ function SgInputNumberBase(props) {
|
|
|
351
351
|
setCaretToEnd(inputRef.current);
|
|
352
352
|
}, [displayValue]);
|
|
353
353
|
const isDisabled = props.enabled === false || props.readOnly || inputProps.readOnly;
|
|
354
|
-
|
|
354
|
+
// O X so aparece com texto, mas o espaco dele fica sempre reservado (o texto do campo nao anda).
|
|
355
|
+
const clearEnabled = (props.clearButton ?? true) && !isDisabled;
|
|
356
|
+
const canShowClear = clearEnabled && isFilled;
|
|
355
357
|
const iconButtonsCount = props.iconButtons?.length ?? 0;
|
|
356
|
-
const hasSuffix =
|
|
358
|
+
const hasSuffix = clearEnabled || iconButtonsCount > 0;
|
|
357
359
|
const paddingLeft = props.prefixIcon ? "pl-10" : "px-3";
|
|
358
360
|
const paddingRight = hasSuffix ? "pr-10" : "pr-3";
|
|
359
361
|
const placeholderClass = isFloatLabel
|
|
@@ -398,7 +400,7 @@ function SgInputNumberBase(props) {
|
|
|
398
400
|
: undefined;
|
|
399
401
|
const labelLeftStyle = prefixPaddingStyle ?? (props.prefixIcon ? "2.5rem" : "0.75rem");
|
|
400
402
|
const iconButtonsPadding = iconButtonsCount > 0 ? `${iconButtonsCount * 1.5}rem` : "0rem";
|
|
401
|
-
const baseRightPadding =
|
|
403
|
+
const baseRightPadding = clearEnabled ? "2rem" : "0.75rem";
|
|
402
404
|
const suffixActionGap = props.suffixText && hasSuffix ? "0.375rem" : "0rem";
|
|
403
405
|
const suffixPaddingStyle = props.suffixText
|
|
404
406
|
? `calc(${suffixWidth}px + ${baseRightPadding} + ${iconButtonsPadding} + ${suffixActionGap})`
|
|
@@ -446,7 +448,7 @@ function SgInputNumberBase(props) {
|
|
|
446
448
|
? "peer-focus:-top-2 peer-focus:text-xs peer-focus:text-[hsl(var(--destructive))]"
|
|
447
449
|
: "peer-focus:-top-2 peer-focus:text-xs peer-focus:text-[hsl(var(--primary))]",
|
|
448
450
|
props.labelClassName ?? ""
|
|
449
|
-
].join(" "), style: { left: labelLeftStyle }, children: [_jsx("span", { children: labelText }), props.required ? (_jsx("span", { className: "ml-1 text-[hsl(var(--destructive))]", "aria-hidden": "true", children: "*" })) : null] })) : null, hasSuffix ? (_jsxs("span", { className: "absolute right-2 top-1/2 z-20 flex -translate-y-1/2 items-center gap-1", style: clearRightStyle ? { right: clearRightStyle } : undefined, children: [
|
|
451
|
+
].join(" "), style: { left: labelLeftStyle }, children: [_jsx("span", { children: labelText }), props.required ? (_jsx("span", { className: "ml-1 text-[hsl(var(--destructive))]", "aria-hidden": "true", children: "*" })) : null] })) : null, hasSuffix ? (_jsxs("span", { className: "absolute right-2 top-1/2 z-20 flex -translate-y-1/2 items-center gap-1", style: clearRightStyle ? { right: clearRightStyle } : undefined, children: [clearEnabled ? (isFilled ? (_jsx("button", { type: "button", tabIndex: -1, onMouseDown: (event) => event.preventDefault(), onClick: handleClear, className: "rounded px-1 text-xs text-foreground/60 hover:text-foreground", "aria-label": t(i18n, "components.actions.clear"), children: _jsx(X, { size: 16 }) })) : (_jsx("span", { "aria-hidden": "true", className: "inline-block w-6" }))) : null, props.iconButtons?.map((node, index) => (_jsx("span", { children: node }, index)))] })) : null] }), _jsx("div", { className: "mt-1 flex items-center justify-between gap-2", children: _jsx(ErrorText, { message: props.error ?? internalError ?? undefined }) })] }));
|
|
450
452
|
if (labelPosition === "left") {
|
|
451
453
|
return (_jsx("div", { style: { width: props.width ?? "100%" }, children: _jsxs("div", { className: "grid grid-cols-1 gap-2 sm:grid-cols-[var(--sg-input-label-width)_minmax(0,1fr)] sm:items-start sm:gap-3", style: outerLayoutStyle, children: [showExternalLabel ? (_jsxs("label", { htmlFor: props.id, className: externalLabelClass, children: [_jsx("span", { children: labelText }), props.required ? (_jsx("span", { className: "ml-1 text-[hsl(var(--destructive))]", "aria-hidden": "true", children: "*" })) : null] })) : null, _jsx("div", { children: fieldNode })] }) }));
|
|
452
454
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SgInputText.d.ts","sourceRoot":"","sources":["../../src/inputs/SgInputText.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAwC,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AAGlF,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,KAAK,CAAC,sBAAsB,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,GAAG;QAC1D,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;KACnC,CAAC,CAAC;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC,CAAC;IACzE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC9C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACjD,CAAC;
|
|
1
|
+
{"version":3,"file":"SgInputText.d.ts","sourceRoot":"","sources":["../../src/inputs/SgInputText.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAwC,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AAGlF,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,KAAK,CAAC,sBAAsB,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,GAAG;QAC1D,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;KACnC,CAAC,CAAC;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC,CAAC;IACzE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC9C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACjD,CAAC;AAgiBF,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,2CAsElD"}
|
|
@@ -269,8 +269,10 @@ function SgInputTextBase(props) {
|
|
|
269
269
|
props.onClear?.();
|
|
270
270
|
};
|
|
271
271
|
const isDisabled = props.enabled === false || props.readOnly || resolvedInputProps.readOnly;
|
|
272
|
-
|
|
273
|
-
const
|
|
272
|
+
// O X so aparece com texto, mas o espaco dele fica sempre reservado (o texto do campo nao anda).
|
|
273
|
+
const clearEnabled = (props.clearButton ?? true) && !isDisabled;
|
|
274
|
+
const canShowClear = clearEnabled && isFilled;
|
|
275
|
+
const hasSuffix = clearEnabled || (props.iconButtons?.length ?? 0) > 0;
|
|
274
276
|
const iconButtonsCount = props.iconButtons?.length ?? 0;
|
|
275
277
|
const paddingLeft = props.prefixIcon ? "pl-10" : "px-3";
|
|
276
278
|
const paddingRight = hasSuffix ? "pr-10" : "pr-3";
|
|
@@ -317,7 +319,7 @@ function SgInputTextBase(props) {
|
|
|
317
319
|
: undefined;
|
|
318
320
|
const labelLeftStyle = prefixPaddingStyle ?? (props.prefixIcon ? "2.5rem" : "0.75rem");
|
|
319
321
|
const iconButtonsPadding = iconButtonsCount > 0 ? `${iconButtonsCount * 1.5}rem` : "0rem";
|
|
320
|
-
const baseRightPadding =
|
|
322
|
+
const baseRightPadding = clearEnabled ? "2rem" : "0.75rem";
|
|
321
323
|
const suffixActionGap = suffixText && hasSuffix ? "0.375rem" : "0rem";
|
|
322
324
|
const suffixPaddingStyle = suffixText
|
|
323
325
|
? `calc(${suffixWidth}px + ${baseRightPadding} + ${iconButtonsPadding} + ${suffixActionGap})`
|
|
@@ -380,7 +382,7 @@ function SgInputTextBase(props) {
|
|
|
380
382
|
? "peer-focus:-top-2 peer-focus:text-xs peer-focus:text-[hsl(var(--destructive))]"
|
|
381
383
|
: "peer-focus:-top-2 peer-focus:text-xs peer-focus:text-[hsl(var(--primary))]",
|
|
382
384
|
props.labelClassName ?? ""
|
|
383
|
-
].join(" "), style: { left: labelLeftStyle }, children: [_jsx("span", { children: labelText }), props.required ? (_jsx("span", { className: "ml-1 text-[hsl(var(--destructive))]", "aria-hidden": "true", children: "*" })) : null] })) : null, hasSuffix ? (_jsxs("span", { className: "absolute right-2 top-1/2 z-20 flex -translate-y-1/2 items-center gap-1", style: clearRightStyle ? { right: clearRightStyle } : undefined, children: [
|
|
385
|
+
].join(" "), style: { left: labelLeftStyle }, children: [_jsx("span", { children: labelText }), props.required ? (_jsx("span", { className: "ml-1 text-[hsl(var(--destructive))]", "aria-hidden": "true", children: "*" })) : null] })) : null, hasSuffix ? (_jsxs("span", { className: "absolute right-2 top-1/2 z-20 flex -translate-y-1/2 items-center gap-1", style: clearRightStyle ? { right: clearRightStyle } : undefined, children: [clearEnabled ? (isFilled ? (_jsx("button", { type: "button", tabIndex: -1, onMouseDown: (event) => event.preventDefault(), onClick: handleClear, className: "rounded px-1 text-xs text-foreground/60 hover:text-foreground", "aria-label": t(i18n, "components.actions.clear"), children: _jsx(X, { size: 16 }) })) : (_jsx("span", { "aria-hidden": "true", className: "inline-block w-6" }))) : null, props.iconButtons?.map((node, index) => (_jsx("span", { children: node }, index)))] })) : null] }), _jsxs("div", { className: "mt-1 flex items-center justify-between gap-2", children: [_jsx(ErrorText, { message: props.error ?? internalError ?? undefined }), props.showCharCounter ? (_jsxs("span", { className: "text-[11px] text-foreground/50", children: [valueLength, props.maxLength ? `/${props.maxLength}` : ""] })) : null] })] }));
|
|
384
386
|
if (labelPosition === "left") {
|
|
385
387
|
return (_jsx("div", { style: { width: props.width ?? "100%" }, children: _jsxs("div", { className: "grid grid-cols-1 gap-2 sm:grid-cols-[var(--sg-input-label-width)_minmax(0,1fr)] sm:items-start sm:gap-3", style: outerLayoutStyle, children: [showExternalLabel ? (_jsxs("label", { htmlFor: props.id, className: externalLabelClass, children: [_jsx("span", { children: labelText }), props.required ? (_jsx("span", { className: "ml-1 text-[hsl(var(--destructive))]", "aria-hidden": "true", children: "*" })) : null] })) : null, _jsx("div", { children: fieldNode })] }) }));
|
|
386
388
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SgInputTextArea.d.ts","sourceRoot":"","sources":["../../src/inputs/SgInputTextArea.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAwC,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AAGlF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,KAAK,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,GAAG;QAClE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;KACtC,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC9C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACjD,GAAG,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"SgInputTextArea.d.ts","sourceRoot":"","sources":["../../src/inputs/SgInputTextArea.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAwC,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AAGlF,MAAM,MAAM,oBAAoB,GAAG;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,KAAK,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,GAAG;QAClE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;KACtC,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAC9C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACjD,GAAG,aAAa,CAAC;AA4WlB,wBAAgB,eAAe,CAAC,KAAK,EAAE,QAAQ,CAAC,oBAAoB,CAAC,2CAyDpE"}
|
|
@@ -177,8 +177,10 @@ function SgInputTextAreaBase(props) {
|
|
|
177
177
|
props.onClear?.();
|
|
178
178
|
};
|
|
179
179
|
const isDisabled = props.enabled === false || textareaProps.readOnly;
|
|
180
|
-
|
|
181
|
-
const
|
|
180
|
+
// O X so aparece com texto, mas o espaco dele fica sempre reservado (o texto do campo nao anda).
|
|
181
|
+
const clearEnabled = (props.clearButton ?? true) && !isDisabled;
|
|
182
|
+
const canShowClear = clearEnabled && isFilled;
|
|
183
|
+
const hasSuffix = clearEnabled;
|
|
182
184
|
const paddingLeft = props.prefixIcon ? "pl-10" : "px-3";
|
|
183
185
|
const paddingRight = hasSuffix ? "pr-10" : "pr-3";
|
|
184
186
|
const placeholderClass = isFloatLabel
|
|
@@ -14,7 +14,7 @@ export const sgMeta = {
|
|
|
14
14
|
props: [
|
|
15
15
|
{ name: "id", type: "string", required: true, description: "Identificador unico do campo.", semanticRole: "data", bindable: false },
|
|
16
16
|
{ name: "label", type: "string", description: "Rotulo exibido ao usuario.", semanticRole: "label", bindable: true },
|
|
17
|
-
{ name: "options", type: "{ label: string; value: string | number; chipLabel?: string;
|
|
17
|
+
{ name: "options", type: "{ label: string; value: string | number; chipLabel?: string; enabled?: boolean }[]", description: "Lista de opcoes disponiveis. `label` aparece na lista; `chipLabel` (opcional) e' o texto curto do item ja' selecionado (o resumo do campo), ex.: label \"3 - Filial Centro\" e chipLabel \"3\".", semanticRole: "data", bindable: false },
|
|
18
18
|
{ name: "value", type: "(string | number)[]", description: "Array de valores selecionados.", semanticRole: "value", bindable: true },
|
|
19
19
|
{ name: "onChange", type: "(value: (string | number)[]) => void", description: "Callback com o array atualizado de valores.", semanticRole: "event", bindable: false },
|
|
20
20
|
{ name: "searchable", type: "boolean", default: false, description: "Exibe campo de busca no topo do dropdown.", semanticRole: "behavior", bindable: true },
|
|
@@ -14,7 +14,7 @@ export const sgMeta = {
|
|
|
14
14
|
props: [
|
|
15
15
|
{ name: "id", type: "string", required: true, description: "Identificador unico do campo.", semanticRole: "data", bindable: false },
|
|
16
16
|
{ name: "label", type: "string", description: "Rotulo exibido ao usuario.", semanticRole: "label", bindable: true },
|
|
17
|
-
{ name: "options", type: "{ label: string; value: string | number; chipLabel?: string;
|
|
17
|
+
{ name: "options", type: "{ label: string; value: string | number; chipLabel?: string; enabled?: boolean }[]", description: "Lista de opcoes disponiveis. `label` aparece na lista; `chipLabel` (opcional) e' o texto curto do item ja' selecionado (o chip), ex.: label \"3 - Filial Centro\" e chipLabel \"3\".", semanticRole: "data", bindable: false },
|
|
18
18
|
{ name: "value", type: "(string | number)[]", description: "Array de valores selecionados.", semanticRole: "value", bindable: true },
|
|
19
19
|
{ name: "onChange", type: "(value: (string | number)[]) => void", description: "Callback com o array atualizado de valores.", semanticRole: "event", bindable: false },
|
|
20
20
|
{ name: "searchable", type: "boolean", default: false, description: "Exibe campo de busca no topo do dropdown.", semanticRole: "behavior", bindable: true },
|
|
@@ -23,7 +23,7 @@ export function SgMultiSelectDropdown(props) {
|
|
|
23
23
|
const reachedMax = !checked &&
|
|
24
24
|
props.maxSelected !== undefined &&
|
|
25
25
|
props.resolvedValueLength >= props.maxSelected;
|
|
26
|
-
const optionDisabled = option.
|
|
26
|
+
const optionDisabled = (option.enabled === false) || reachedMax;
|
|
27
27
|
return (_jsxs("div", { role: "option", "aria-selected": checked, className: [
|
|
28
28
|
"flex cursor-pointer items-center gap-2 px-3 py-2 text-sm",
|
|
29
29
|
isActive ? "bg-muted/60" : "",
|
|
@@ -4,7 +4,7 @@ import { type SgGroupBoxProps } from "../layout/SgGroupBox";
|
|
|
4
4
|
export interface SgOrderListItem {
|
|
5
5
|
label: string;
|
|
6
6
|
value: string | number;
|
|
7
|
-
|
|
7
|
+
enabled?: boolean;
|
|
8
8
|
icon?: React.ReactNode;
|
|
9
9
|
data?: unknown;
|
|
10
10
|
}
|
|
@@ -34,13 +34,13 @@ export interface SgOrderListProps extends RhfFieldProps {
|
|
|
34
34
|
showControls?: boolean;
|
|
35
35
|
controlsPosition?: SgOrderListControlsPosition;
|
|
36
36
|
draggable?: boolean;
|
|
37
|
-
|
|
37
|
+
enabled?: boolean;
|
|
38
38
|
readOnly?: boolean;
|
|
39
39
|
emptyMessage?: string;
|
|
40
40
|
itemTemplate?: (item: SgOrderListItem, state: {
|
|
41
41
|
index: number;
|
|
42
42
|
selected: boolean;
|
|
43
|
-
|
|
43
|
+
enabled: boolean;
|
|
44
44
|
}) => React.ReactNode;
|
|
45
45
|
className?: string;
|
|
46
46
|
style?: React.CSSProperties;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SgOrderList.d.ts","sourceRoot":"","sources":["../../src/inputs/SgOrderList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AAE/D,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGxE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,
|
|
1
|
+
{"version":3,"file":"SgOrderList.d.ts","sourceRoot":"","sources":["../../src/inputs/SgOrderList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AAE/D,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGxE,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,wBAAwB,GAAG,QAAQ,GAAG,UAAU,CAAC;AAC7D,MAAM,MAAM,2BAA2B,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,MAAM,eAAe,EAAE,CAAC;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAC7C,YAAY,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACxC,YAAY,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC;IACpD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B,CAAC;AAEF,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,eAAe,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAC9C,cAAc,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IACrC,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC;IAC1D,aAAa,CAAC,EAAE,wBAAwB,CAAC;IACzC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,2BAA2B,CAAC;IAC/C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,CACb,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,KAC1D,KAAK,CAAC,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3F;AAggBD,eAAO,MAAM,WAAW,yFA4BtB,CAAC"}
|
|
@@ -33,7 +33,7 @@ function isSameOrder(a, b) {
|
|
|
33
33
|
function getMovableSelection(items, selection) {
|
|
34
34
|
const selectedValues = new Set(selection);
|
|
35
35
|
return new Set(items
|
|
36
|
-
.filter((item) => selectedValues.has(item.value) &&
|
|
36
|
+
.filter((item) => selectedValues.has(item.value) && item.enabled !== false)
|
|
37
37
|
.map((item) => item.value));
|
|
38
38
|
}
|
|
39
39
|
function moveSelectionTop(items, selected) {
|
|
@@ -111,7 +111,7 @@ function resolveMessage(translated, key, fallback) {
|
|
|
111
111
|
}
|
|
112
112
|
function SgOrderListBase(props, imperativeRef) {
|
|
113
113
|
const i18n = useComponentsI18n();
|
|
114
|
-
const { id, title, source, value: controlledValue, onChange, selectedValues: controlledSelection, onSelectionChange, selectionMode = "multiple", showControls = true, controlsPosition = "left", draggable = true,
|
|
114
|
+
const { id, title, source, value: controlledValue, onChange, selectedValues: controlledSelection, onSelectionChange, selectionMode = "multiple", showControls = true, controlsPosition = "left", draggable = true, enabled = true, readOnly = false, emptyMessage, itemTemplate, className = "", style, listClassName = "", itemClassName = "", groupBoxProps = {}, error } = props;
|
|
115
115
|
const [internalItems, setInternalItems] = React.useState(() => controlledValue ?? source);
|
|
116
116
|
const [internalSelection, setInternalSelection] = React.useState(() => uniqueValues(controlledSelection ?? []));
|
|
117
117
|
const [anchorValue, setAnchorValue] = React.useState(null);
|
|
@@ -140,7 +140,7 @@ function SgOrderListBase(props, imperativeRef) {
|
|
|
140
140
|
return isSameValueList(previous, next) ? previous : next;
|
|
141
141
|
});
|
|
142
142
|
}, [currentItems, isSelectionControlled]);
|
|
143
|
-
const canInteract =
|
|
143
|
+
const canInteract = enabled && !readOnly;
|
|
144
144
|
const allowDrag = draggable && canInteract;
|
|
145
145
|
const movableSelection = React.useMemo(() => getMovableSelection(currentItems, currentSelection), [currentItems, currentSelection]);
|
|
146
146
|
const commitItems = React.useCallback((nextItems) => {
|
|
@@ -181,7 +181,7 @@ function SgOrderListBase(props, imperativeRef) {
|
|
|
181
181
|
clearSelection: () => commitSelection([])
|
|
182
182
|
}), [applyMove, commitItems, commitSelection, currentItems, currentSelection]);
|
|
183
183
|
const handleItemSelection = React.useCallback((event, item, index) => {
|
|
184
|
-
if (!canInteract || item.
|
|
184
|
+
if (!canInteract || (item.enabled === false))
|
|
185
185
|
return;
|
|
186
186
|
const itemValue = item.value;
|
|
187
187
|
if (selectionMode === "single") {
|
|
@@ -196,7 +196,7 @@ function SgOrderListBase(props, imperativeRef) {
|
|
|
196
196
|
const end = Math.max(anchorIndex, index);
|
|
197
197
|
const rangeValues = currentItems
|
|
198
198
|
.slice(start, end + 1)
|
|
199
|
-
.filter((entry) =>
|
|
199
|
+
.filter((entry) => entry.enabled !== false)
|
|
200
200
|
.map((entry) => entry.value);
|
|
201
201
|
if (event.metaKey || event.ctrlKey) {
|
|
202
202
|
commitSelection([...currentSelection, ...rangeValues]);
|
|
@@ -227,7 +227,7 @@ function SgOrderListBase(props, imperativeRef) {
|
|
|
227
227
|
setDropIndex(null);
|
|
228
228
|
}, []);
|
|
229
229
|
const handleDragStart = React.useCallback((event, item, index) => {
|
|
230
|
-
if (!allowDrag || item.
|
|
230
|
+
if (!allowDrag || (item.enabled === false)) {
|
|
231
231
|
event.preventDefault();
|
|
232
232
|
return;
|
|
233
233
|
}
|
|
@@ -297,20 +297,20 @@ function SgOrderListBase(props, imperativeRef) {
|
|
|
297
297
|
const canMoveUp = canInteract && moveSelectionUp(currentItems, movableSelection) !== currentItems;
|
|
298
298
|
const canMoveDown = canInteract && moveSelectionDown(currentItems, movableSelection) !== currentItems;
|
|
299
299
|
const canMoveBottom = canInteract && moveSelectionBottom(currentItems, movableSelection) !== currentItems;
|
|
300
|
-
const renderedList = (_jsxs("ul", { id: id, role: "listbox", "aria-multiselectable": selectionMode === "multiple" ? true : undefined, "aria-disabled":
|
|
300
|
+
const renderedList = (_jsxs("ul", { id: id, role: "listbox", "aria-multiselectable": selectionMode === "multiple" ? true : undefined, "aria-disabled": !enabled || undefined, "aria-readonly": readOnly || undefined, className: cn("w-full min-w-0 overflow-y-auto rounded-lg border border-[rgb(var(--sg-border))] bg-[rgb(var(--sg-surface))] p-1", "max-h-[22rem]", listClassName), children: [currentItems.length === 0 ? (_jsx("li", { className: "list-none px-3 py-4 text-sm text-[rgb(var(--sg-muted))]", children: emptyLabel })) : (currentItems.map((item, index) => {
|
|
301
301
|
const isItemSelected = selectedSet.has(item.value);
|
|
302
|
-
const isItemDisabled =
|
|
302
|
+
const isItemDisabled = !enabled || Boolean((item.enabled === false));
|
|
303
303
|
const isDropTarget = dropIndex === index && draggingIndex !== null && draggingIndex !== index;
|
|
304
304
|
const isDragging = draggingIndex === index;
|
|
305
|
-
return (_jsx("li", { className: "list-none", children: _jsxs("button", { type: "button", role: "option", "aria-selected": isItemSelected, draggable: allowDrag &&
|
|
305
|
+
return (_jsx("li", { className: "list-none", children: _jsxs("button", { type: "button", role: "option", "aria-selected": isItemSelected, draggable: allowDrag && item.enabled !== false, disabled: isItemDisabled, onClick: (event) => handleItemSelection(event, item, index), onKeyDown: (event) => handleItemKeyDown(event, item, index), onDragStart: (event) => handleDragStart(event, item, index), onDragOver: (event) => handleDragOver(event, index), onDrop: (event) => handleDrop(event, index), onDragEnd: clearDragState, className: cn("group flex w-full items-center gap-2 rounded-md px-3 py-2 text-left text-sm transition-all", isItemSelected
|
|
306
306
|
? "bg-[rgb(var(--sg-primary-100))] text-[rgb(var(--sg-text))] ring-1 ring-[rgb(var(--sg-primary-300))]"
|
|
307
|
-
: "bg-[rgb(var(--sg-input-bg,var(--sg-surface)))] text-[rgb(var(--sg-text))] hover:bg-[rgb(var(--sg-primary-50))]", isItemDisabled ? "cursor-not-allowed opacity-60" : "cursor-pointer", allowDrag &&
|
|
307
|
+
: "bg-[rgb(var(--sg-input-bg,var(--sg-surface)))] text-[rgb(var(--sg-text))] hover:bg-[rgb(var(--sg-primary-50))]", isItemDisabled ? "cursor-not-allowed opacity-60" : "cursor-pointer", allowDrag && item.enabled !== false ? "active:cursor-grabbing" : "", isDropTarget ? "ring-2 ring-[rgb(var(--sg-primary-400))]" : "", isDragging ? "opacity-50" : "", itemClassName), children: [_jsx("span", { className: "min-w-0 flex-1", children: itemTemplate ? (itemTemplate(item, {
|
|
308
308
|
index,
|
|
309
309
|
selected: isItemSelected,
|
|
310
|
-
|
|
311
|
-
})) : (_jsxs("span", { className: "flex items-center gap-2", children: [item.icon ? _jsx("span", { className: "shrink-0", children: item.icon }) : null, _jsx("span", { className: "truncate", children: item.label })] })) }), allowDrag &&
|
|
310
|
+
enabled: !isItemDisabled
|
|
311
|
+
})) : (_jsxs("span", { className: "flex items-center gap-2", children: [item.icon ? _jsx("span", { className: "shrink-0", children: item.icon }) : null, _jsx("span", { className: "truncate", children: item.label })] })) }), allowDrag && item.enabled !== false ? (_jsx("span", { "aria-hidden": "true", className: "shrink-0 text-xs tracking-wide text-[rgb(var(--sg-muted))]", children: "::" })) : null] }) }, `${item.value}-${index}`));
|
|
312
312
|
})), allowDrag && currentItems.length > 0 ? (_jsx("li", { className: "list-none", children: _jsx("div", { onDragOver: (event) => handleDragOver(event, currentItems.length), onDrop: (event) => handleDrop(event, currentItems.length), className: cn("mt-1 h-3 rounded-md border border-dashed border-transparent transition-colors", dropIndex === currentItems.length ? "border-[rgb(var(--sg-primary-400))] bg-[rgb(var(--sg-primary-100))]" : "") }) })) : null] }));
|
|
313
|
-
const controls = showControls ? (_jsxs("div", { className: "flex shrink-0 flex-col gap-2", children: [_jsx(SgButton, { size: "sm", appearance: "outline",
|
|
313
|
+
const controls = showControls ? (_jsxs("div", { className: "flex shrink-0 flex-col gap-2", children: [_jsx(SgButton, { size: "sm", appearance: "outline", enabled: canMoveTop, title: moveTopLabel, "aria-label": moveTopLabel, onClick: () => applyMove("top"), children: "Top" }), _jsx(SgButton, { size: "sm", appearance: "outline", enabled: canMoveUp, title: moveUpLabel, "aria-label": moveUpLabel, onClick: () => applyMove("up"), children: "Up" }), _jsx(SgButton, { size: "sm", appearance: "outline", enabled: canMoveDown, title: moveDownLabel, "aria-label": moveDownLabel, onClick: () => applyMove("down"), children: "Down" }), _jsx(SgButton, { size: "sm", appearance: "outline", enabled: canMoveBottom, title: moveBottomLabel, "aria-label": moveBottomLabel, onClick: () => applyMove("bottom"), children: "Bottom" })] })) : null;
|
|
314
314
|
const containerDirection = controlsPosition === "right" ? "flex-row-reverse" : "flex-row";
|
|
315
315
|
const resolvedTitle = (groupBoxProps.title ?? title ?? "").trim() || " ";
|
|
316
316
|
return (_jsx("div", { className: className, style: style, children: _jsxs(SgGroupBox, { ...groupBoxProps, title: resolvedTitle, children: [error ? _jsx("p", { className: "mb-2 text-xs text-red-600", children: error }) : null, _jsxs("div", { className: cn("flex items-start gap-3", containerDirection), children: [controls, _jsx("div", { className: "min-w-0 flex-1", children: renderedList })] })] }) }));
|
|
@@ -18,7 +18,7 @@ export const sgMeta = {
|
|
|
18
18
|
{ name: "selectionMode", type: "\"single\" | \"multiple\"", default: "single", description: "Modo de selecao.", semanticRole: "behavior", bindable: true },
|
|
19
19
|
{ name: "showControls", type: "boolean", default: true, description: "Exibe botoes de ordenacao.", semanticRole: "appearance", bindable: true },
|
|
20
20
|
{ name: "draggable", type: "boolean", default: false, description: "Permite arrastar itens.", semanticRole: "behavior", bindable: true },
|
|
21
|
-
{ name: "
|
|
21
|
+
{ name: "enabled", type: "boolean", default: true, description: "Desabilita interacao.", semanticRole: "behavior", bindable: true },
|
|
22
22
|
{ name: "onChange", type: "(items: SgOrderListItem[]) => void", description: "Callback ao alterar a ordem.", semanticRole: "event", bindable: false }
|
|
23
23
|
],
|
|
24
24
|
states: ["default", "disabled", "readOnly", "empty"],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SgPeriodSelector.d.ts","sourceRoot":"","sources":["../../src/inputs/SgPeriodSelector.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAO7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D;;;;GAIG;AACH,oBAAY,YAAY;IACtB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,SAAS,cAAc;IACvB,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAC/B,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAC/B,SAAS,cAAc;IACvB,SAAS,cAAc;IACvB,aAAa,kBAAkB;IAC/B,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,aAAa,kBAAkB;IAC/B,SAAS,cAAc;CACxB;AAED;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,YAAY,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,mEAAmE;IACnE,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,kEAAkE;IAClE,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAC5C,oEAAoE;IACpE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oFAAoF;IACpF,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oEAAoE;IACpE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,
|
|
1
|
+
{"version":3,"file":"SgPeriodSelector.d.ts","sourceRoot":"","sources":["../../src/inputs/SgPeriodSelector.tsx"],"names":[],"mappings":"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"}
|
|
@@ -318,7 +318,7 @@ function parseIsoDate(value) {
|
|
|
318
318
|
return Number.isNaN(date.getTime()) ? null : date;
|
|
319
319
|
}
|
|
320
320
|
function SgPeriodSelectorBase(props) {
|
|
321
|
-
const { id = "sg-period-selector", label, value, onChange, permitPast = true, permitCurrent = true, permitFuture = true, permitAll = true, allowCustomPeriod = true, locale = "pt-BR",
|
|
321
|
+
const { id = "sg-period-selector", label, value, onChange, permitPast = true, permitCurrent = true, permitFuture = true, permitAll = true, allowCustomPeriod = true, locale = "pt-BR", enabled = true, required, minDate, maxDate, referenceDate, className, error } = props;
|
|
322
322
|
const isControlled = value !== undefined;
|
|
323
323
|
const [internalPreset, setInternalPreset] = React.useState(value ?? null);
|
|
324
324
|
const selectedPreset = isControlled ? value ?? null : internalPreset;
|
|
@@ -360,10 +360,10 @@ function SgPeriodSelectorBase(props) {
|
|
|
360
360
|
onChange?.(resolvePeriod(preset, referenceDate ?? new Date(), resolveOptions));
|
|
361
361
|
}, [customEnd, customStart, emitCustom, isControlled, onChange, referenceDate, resolveOptions]);
|
|
362
362
|
const showCustomRange = allowCustomPeriod && selectedPreset === PeriodPreset.CUSTOM;
|
|
363
|
-
return (_jsxs("div", { className: cn("w-full max-w-[18rem]", className), children: [_jsx(SgCombobox, { id: id, label: label, source: options, value: selectedPreset ?? null, grouped: true, openOnFocus: true, enabled:
|
|
363
|
+
return (_jsxs("div", { className: cn("w-full max-w-[18rem]", className), children: [_jsx(SgCombobox, { id: id, label: label, source: options, value: selectedPreset ?? null, grouped: true, openOnFocus: true, enabled: enabled, required: required, error: error, renderGroupHeader: (group) => group ? (_jsx("div", { className: "mt-2 border-b border-border pb-1.5 text-center text-[11px] font-bold uppercase tracking-wider text-muted-foreground", children: group })) : null, onValueChange: handleValueChange }), showCustomRange ? (_jsxs("div", { className: "mt-2 grid grid-cols-1 gap-2", children: [_jsx(SgInputDate, { id: `${id}-custom-start`, inputProps: { value: customStart }, minDate: minDate, maxDate: maxDate, enabled: enabled, onChange: (next) => {
|
|
364
364
|
setCustomStart(next);
|
|
365
365
|
emitCustom(next, customEnd);
|
|
366
|
-
} }), _jsx(SgInputDate, { id: `${id}-custom-end`, inputProps: { value: customEnd }, minDate: minDate, maxDate: maxDate, enabled:
|
|
366
|
+
} }), _jsx(SgInputDate, { id: `${id}-custom-end`, inputProps: { value: customEnd }, minDate: minDate, maxDate: maxDate, enabled: enabled, onChange: (next) => {
|
|
367
367
|
setCustomEnd(next);
|
|
368
368
|
emitCustom(customStart, next);
|
|
369
369
|
} })] })) : null] }));
|
|
@@ -4,7 +4,7 @@ import { type SgGroupBoxProps } from "../layout/SgGroupBox";
|
|
|
4
4
|
export interface SgPickListItem {
|
|
5
5
|
label: string;
|
|
6
6
|
value: string | number;
|
|
7
|
-
|
|
7
|
+
enabled?: boolean;
|
|
8
8
|
icon?: React.ReactNode;
|
|
9
9
|
data?: unknown;
|
|
10
10
|
}
|
|
@@ -52,13 +52,13 @@ export interface SgPickListProps extends RhfFieldProps {
|
|
|
52
52
|
targetFilterPlaceholder?: string;
|
|
53
53
|
filterMatchMode?: SgPickListFilterMatchMode;
|
|
54
54
|
draggable?: boolean;
|
|
55
|
-
|
|
55
|
+
enabled?: boolean;
|
|
56
56
|
readOnly?: boolean;
|
|
57
57
|
emptyMessage?: string;
|
|
58
58
|
itemTemplate?: (item: SgPickListItem, state: {
|
|
59
59
|
index: number;
|
|
60
60
|
selected: boolean;
|
|
61
|
-
|
|
61
|
+
enabled: boolean;
|
|
62
62
|
list: SgPickListListName;
|
|
63
63
|
}) => React.ReactNode;
|
|
64
64
|
className?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SgPickList.d.ts","sourceRoot":"","sources":["../../src/inputs/SgPickList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC;AAE/D,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGxE,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,
|
|
1
|
+
{"version":3,"file":"SgPickList.d.ts","sourceRoot":"","sources":["../../src/inputs/SgPickList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -31,17 +31,17 @@ function moveSingleItem(items, fromIndex, toIndex) {
|
|
|
31
31
|
return next;
|
|
32
32
|
}
|
|
33
33
|
function moveSelectionTop(items, selected) {
|
|
34
|
-
const picked = items.filter((item) => selected.has(item.value) &&
|
|
34
|
+
const picked = items.filter((item) => selected.has(item.value) && item.enabled !== false);
|
|
35
35
|
if (picked.length === 0)
|
|
36
36
|
return items;
|
|
37
|
-
const rest = items.filter((item) => !(selected.has(item.value) &&
|
|
37
|
+
const rest = items.filter((item) => !(selected.has(item.value) && item.enabled !== false));
|
|
38
38
|
return [...picked, ...rest];
|
|
39
39
|
}
|
|
40
40
|
function moveSelectionBottom(items, selected) {
|
|
41
|
-
const picked = items.filter((item) => selected.has(item.value) &&
|
|
41
|
+
const picked = items.filter((item) => selected.has(item.value) && item.enabled !== false);
|
|
42
42
|
if (picked.length === 0)
|
|
43
43
|
return items;
|
|
44
|
-
const rest = items.filter((item) => !(selected.has(item.value) &&
|
|
44
|
+
const rest = items.filter((item) => !(selected.has(item.value) && item.enabled !== false));
|
|
45
45
|
return [...rest, ...picked];
|
|
46
46
|
}
|
|
47
47
|
function moveSelectionUp(items, selected) {
|
|
@@ -49,9 +49,9 @@ function moveSelectionUp(items, selected) {
|
|
|
49
49
|
for (let index = 1; index < next.length; index += 1) {
|
|
50
50
|
const current = next[index];
|
|
51
51
|
const prev = next[index - 1];
|
|
52
|
-
if (!(selected.has(current.value) &&
|
|
52
|
+
if (!(selected.has(current.value) && current.enabled !== false))
|
|
53
53
|
continue;
|
|
54
|
-
if (selected.has(prev.value) &&
|
|
54
|
+
if (selected.has(prev.value) && prev.enabled !== false)
|
|
55
55
|
continue;
|
|
56
56
|
next[index] = prev;
|
|
57
57
|
next[index - 1] = current;
|
|
@@ -63,9 +63,9 @@ function moveSelectionDown(items, selected) {
|
|
|
63
63
|
for (let index = next.length - 2; index >= 0; index -= 1) {
|
|
64
64
|
const current = next[index];
|
|
65
65
|
const nextItem = next[index + 1];
|
|
66
|
-
if (!(selected.has(current.value) &&
|
|
66
|
+
if (!(selected.has(current.value) && current.enabled !== false))
|
|
67
67
|
continue;
|
|
68
|
-
if (selected.has(nextItem.value) &&
|
|
68
|
+
if (selected.has(nextItem.value) && nextItem.enabled !== false)
|
|
69
69
|
continue;
|
|
70
70
|
next[index] = nextItem;
|
|
71
71
|
next[index + 1] = current;
|
|
@@ -86,7 +86,7 @@ function matchFilter(label, query, mode) {
|
|
|
86
86
|
}
|
|
87
87
|
function SgPickListBase(props, imperativeRef) {
|
|
88
88
|
const i18n = useComponentsI18n();
|
|
89
|
-
const { id, title, source, target, value: controlledValue, onChange, sourceSelection: controlledSourceSelection, targetSelection: controlledTargetSelection, onSourceSelectionChange, onTargetSelectionChange, selectionMode = "multiple", sourceHeader, targetHeader, showTransferControls = true, showSourceControls = true, showTargetControls = true, showSourceFilter = false, showTargetFilter = false, sourceFilterPlaceholder, targetFilterPlaceholder, filterMatchMode = "contains", draggable = true,
|
|
89
|
+
const { id, title, source, target, value: controlledValue, onChange, sourceSelection: controlledSourceSelection, targetSelection: controlledTargetSelection, onSourceSelectionChange, onTargetSelectionChange, selectionMode = "multiple", sourceHeader, targetHeader, showTransferControls = true, showSourceControls = true, showTargetControls = true, showSourceFilter = false, showTargetFilter = false, sourceFilterPlaceholder, targetFilterPlaceholder, filterMatchMode = "contains", draggable = true, enabled = true, readOnly = false, emptyMessage, itemTemplate, className = "", style, listClassName = "", itemClassName = "", groupBoxProps = {}, error } = props;
|
|
90
90
|
const [internalValue, setInternalValue] = React.useState(() => ({ source, target }));
|
|
91
91
|
const [internalSourceSelection, setInternalSourceSelection] = React.useState(() => uniqueValues(controlledSourceSelection ?? []));
|
|
92
92
|
const [internalTargetSelection, setInternalTargetSelection] = React.useState(() => uniqueValues(controlledTargetSelection ?? []));
|
|
@@ -110,7 +110,7 @@ function SgPickListBase(props, imperativeRef) {
|
|
|
110
110
|
const targetSelection = uniqueValues(targetSelectionRaw.filter((valueItem) => targetItems.some((item) => item.value === valueItem)));
|
|
111
111
|
const sourceSelectedSet = new Set(sourceSelection);
|
|
112
112
|
const targetSelectedSet = new Set(targetSelection);
|
|
113
|
-
const canInteract =
|
|
113
|
+
const canInteract = enabled && !readOnly;
|
|
114
114
|
const commitValue = React.useCallback((nextValue, type) => {
|
|
115
115
|
if (!isValueControlled)
|
|
116
116
|
setInternalValue(nextValue);
|
|
@@ -135,10 +135,10 @@ function SgPickListBase(props, imperativeRef) {
|
|
|
135
135
|
const moveToTarget = React.useCallback(() => {
|
|
136
136
|
if (!canInteract)
|
|
137
137
|
return;
|
|
138
|
-
const picked = sourceItems.filter((item) => sourceSelectedSet.has(item.value) &&
|
|
138
|
+
const picked = sourceItems.filter((item) => sourceSelectedSet.has(item.value) && item.enabled !== false);
|
|
139
139
|
if (picked.length === 0)
|
|
140
140
|
return;
|
|
141
|
-
const nextSource = sourceItems.filter((item) => !(sourceSelectedSet.has(item.value) &&
|
|
141
|
+
const nextSource = sourceItems.filter((item) => !(sourceSelectedSet.has(item.value) && item.enabled !== false));
|
|
142
142
|
const nextTarget = [...targetItems, ...picked];
|
|
143
143
|
commitValue({ source: nextSource, target: nextTarget }, "moveToTarget");
|
|
144
144
|
commitSourceSelection([]);
|
|
@@ -147,10 +147,10 @@ function SgPickListBase(props, imperativeRef) {
|
|
|
147
147
|
const moveAllToTarget = React.useCallback(() => {
|
|
148
148
|
if (!canInteract)
|
|
149
149
|
return;
|
|
150
|
-
const picked = sourceItems.filter((item) =>
|
|
150
|
+
const picked = sourceItems.filter((item) => item.enabled !== false);
|
|
151
151
|
if (picked.length === 0)
|
|
152
152
|
return;
|
|
153
|
-
const nextSource = sourceItems.filter((item) => item.
|
|
153
|
+
const nextSource = sourceItems.filter((item) => (item.enabled === false));
|
|
154
154
|
const nextTarget = [...targetItems, ...picked];
|
|
155
155
|
commitValue({ source: nextSource, target: nextTarget }, "moveAllToTarget");
|
|
156
156
|
commitSourceSelection([]);
|
|
@@ -159,10 +159,10 @@ function SgPickListBase(props, imperativeRef) {
|
|
|
159
159
|
const moveToSource = React.useCallback(() => {
|
|
160
160
|
if (!canInteract)
|
|
161
161
|
return;
|
|
162
|
-
const picked = targetItems.filter((item) => targetSelectedSet.has(item.value) &&
|
|
162
|
+
const picked = targetItems.filter((item) => targetSelectedSet.has(item.value) && item.enabled !== false);
|
|
163
163
|
if (picked.length === 0)
|
|
164
164
|
return;
|
|
165
|
-
const nextTarget = targetItems.filter((item) => !(targetSelectedSet.has(item.value) &&
|
|
165
|
+
const nextTarget = targetItems.filter((item) => !(targetSelectedSet.has(item.value) && item.enabled !== false));
|
|
166
166
|
const nextSource = [...sourceItems, ...picked];
|
|
167
167
|
commitValue({ source: nextSource, target: nextTarget }, "moveToSource");
|
|
168
168
|
commitTargetSelection([]);
|
|
@@ -171,10 +171,10 @@ function SgPickListBase(props, imperativeRef) {
|
|
|
171
171
|
const moveAllToSource = React.useCallback(() => {
|
|
172
172
|
if (!canInteract)
|
|
173
173
|
return;
|
|
174
|
-
const picked = targetItems.filter((item) =>
|
|
174
|
+
const picked = targetItems.filter((item) => item.enabled !== false);
|
|
175
175
|
if (picked.length === 0)
|
|
176
176
|
return;
|
|
177
|
-
const nextTarget = targetItems.filter((item) => item.
|
|
177
|
+
const nextTarget = targetItems.filter((item) => (item.enabled === false));
|
|
178
178
|
const nextSource = [...sourceItems, ...picked];
|
|
179
179
|
commitValue({ source: nextSource, target: nextTarget }, "moveAllToSource");
|
|
180
180
|
commitTargetSelection([]);
|
|
@@ -185,7 +185,7 @@ function SgPickListBase(props, imperativeRef) {
|
|
|
185
185
|
return;
|
|
186
186
|
if (from === "source") {
|
|
187
187
|
const moving = sourceItems[fromIndex];
|
|
188
|
-
if (!moving || moving.
|
|
188
|
+
if (!moving || (moving.enabled === false))
|
|
189
189
|
return;
|
|
190
190
|
const nextSource = sourceItems.filter((_, index) => index !== fromIndex);
|
|
191
191
|
const nextTarget = [...targetItems, moving];
|
|
@@ -195,7 +195,7 @@ function SgPickListBase(props, imperativeRef) {
|
|
|
195
195
|
return;
|
|
196
196
|
}
|
|
197
197
|
const moving = targetItems[fromIndex];
|
|
198
|
-
if (!moving || moving.
|
|
198
|
+
if (!moving || (moving.enabled === false))
|
|
199
199
|
return;
|
|
200
200
|
const nextTarget = targetItems.filter((_, index) => index !== fromIndex);
|
|
201
201
|
const nextSource = [...sourceItems, moving];
|
|
@@ -243,7 +243,7 @@ function SgPickListBase(props, imperativeRef) {
|
|
|
243
243
|
commitValue({ source: sourceItems, target: nextItems }, "reorderTarget");
|
|
244
244
|
};
|
|
245
245
|
const handleSelect = (list, item) => {
|
|
246
|
-
if (!canInteract || item.
|
|
246
|
+
if (!canInteract || (item.enabled === false))
|
|
247
247
|
return;
|
|
248
248
|
const selected = list === "source" ? sourceSelectedSet : targetSelectedSet;
|
|
249
249
|
const commit = list === "source" ? commitSourceSelection : commitTargetSelection;
|
|
@@ -276,7 +276,7 @@ function SgPickListBase(props, imperativeRef) {
|
|
|
276
276
|
const fromList = dragState.from === "source" ? sourceItems : targetItems;
|
|
277
277
|
const toList = to === "source" ? sourceItems : targetItems;
|
|
278
278
|
const moving = fromList[dragState.fromIndex];
|
|
279
|
-
if (!moving || moving.
|
|
279
|
+
if (!moving || (moving.enabled === false)) {
|
|
280
280
|
setDragState(null);
|
|
281
281
|
return;
|
|
282
282
|
}
|
|
@@ -324,8 +324,8 @@ function SgPickListBase(props, imperativeRef) {
|
|
|
324
324
|
handleDrop(list, list === "source" ? sourceItems.length : targetItems.length);
|
|
325
325
|
}, children: items.length === 0 ? (_jsx("li", { className: "list-none px-3 py-4 text-sm text-[rgb(var(--sg-muted))]", children: emptyLabel })) : (items.map(({ item, index }) => {
|
|
326
326
|
const selectedItem = selected.has(item.value);
|
|
327
|
-
const itemDisabled =
|
|
328
|
-
return (_jsx("li", { className: "list-none", children: _jsxs("button", { type: "button", role: "option", "aria-selected": selectedItem, disabled: itemDisabled, draggable: dragEnabled &&
|
|
327
|
+
const itemDisabled = !enabled || Boolean((item.enabled === false));
|
|
328
|
+
return (_jsx("li", { className: "list-none", children: _jsxs("button", { type: "button", role: "option", "aria-selected": selectedItem, disabled: itemDisabled, draggable: dragEnabled && item.enabled !== false, onClick: (event) => {
|
|
329
329
|
if (event.detail >= 2) {
|
|
330
330
|
moveSingleByDoubleClick(list, index);
|
|
331
331
|
return;
|
|
@@ -353,11 +353,11 @@ function SgPickListBase(props, imperativeRef) {
|
|
|
353
353
|
}, onDragEnd: () => setDragState(null), className: cn("flex w-full items-center gap-2 rounded-md px-3 py-2 text-left text-sm", selectedItem
|
|
354
354
|
? "bg-[rgb(var(--sg-primary-100))] ring-1 ring-[rgb(var(--sg-primary-300))]"
|
|
355
355
|
: "bg-[rgb(var(--sg-input-bg,var(--sg-surface)))] hover:bg-[rgb(var(--sg-primary-50))]", itemDisabled ? "cursor-not-allowed opacity-60" : "cursor-pointer", itemClassName), children: [_jsx("span", { className: "min-w-0 flex-1 truncate", children: itemTemplate
|
|
356
|
-
? itemTemplate(item, { index, selected: selectedItem,
|
|
357
|
-
: (_jsxs("span", { className: "flex items-center gap-2", children: [item.icon ? _jsx("span", { className: "shrink-0", children: item.icon }) : null, _jsx("span", { className: "truncate", children: item.label })] })) }), dragEnabled &&
|
|
356
|
+
? itemTemplate(item, { index, selected: selectedItem, enabled: !itemDisabled, list })
|
|
357
|
+
: (_jsxs("span", { className: "flex items-center gap-2", children: [item.icon ? _jsx("span", { className: "shrink-0", children: item.icon }) : null, _jsx("span", { className: "truncate", children: item.label })] })) }), dragEnabled && item.enabled !== false ? (_jsx("span", { "aria-hidden": "true", className: "shrink-0 text-xs text-[rgb(var(--sg-muted))]", children: "::" })) : null] }) }, `${item.value}-${index}`));
|
|
358
358
|
})) }));
|
|
359
|
-
const renderReorderControls = (list) => (_jsxs("div", { className: "flex shrink-0 flex-col gap-2", children: [_jsx(SgButton, { size: "sm", appearance: "outline",
|
|
360
|
-
const transferControls = showTransferControls ? (_jsxs("div", { className: "flex shrink-0 flex-row gap-2 md:flex-col", children: [_jsx(SgButton, { size: "sm", appearance: "outline",
|
|
359
|
+
const renderReorderControls = (list) => (_jsxs("div", { className: "flex shrink-0 flex-col gap-2", children: [_jsx(SgButton, { size: "sm", appearance: "outline", enabled: canInteract, "aria-label": moveTopLabel, title: moveTopLabel, onClick: () => applyReorder(list, "top"), children: t(i18n, "components.actions.top") }), _jsx(SgButton, { size: "sm", appearance: "outline", enabled: canInteract, "aria-label": moveUpLabel, title: moveUpLabel, onClick: () => applyReorder(list, "up"), children: t(i18n, "components.actions.up") }), _jsx(SgButton, { size: "sm", appearance: "outline", enabled: canInteract, "aria-label": moveDownLabel, title: moveDownLabel, onClick: () => applyReorder(list, "down"), children: t(i18n, "components.actions.down") }), _jsx(SgButton, { size: "sm", appearance: "outline", enabled: canInteract, "aria-label": moveBottomLabel, title: moveBottomLabel, onClick: () => applyReorder(list, "bottom"), children: t(i18n, "components.actions.bottom") })] }));
|
|
360
|
+
const transferControls = showTransferControls ? (_jsxs("div", { className: "flex shrink-0 flex-row gap-2 md:flex-col", children: [_jsx(SgButton, { size: "sm", appearance: "outline", enabled: canInteract, "aria-label": moveToTargetLabel, title: moveToTargetLabel, onClick: moveToTarget, children: ">" }), _jsx(SgButton, { size: "sm", appearance: "outline", enabled: canInteract, "aria-label": moveAllToTargetLabel, title: moveAllToTargetLabel, onClick: moveAllToTarget, children: ">>" }), _jsx(SgButton, { size: "sm", appearance: "outline", enabled: canInteract, "aria-label": moveToSourceLabel, title: moveToSourceLabel, onClick: moveToSource, children: "<" }), _jsx(SgButton, { size: "sm", appearance: "outline", enabled: canInteract, "aria-label": moveAllToSourceLabel, title: moveAllToSourceLabel, onClick: moveAllToSource, children: "<<" })] })) : null;
|
|
361
361
|
const resolvedTitle = (groupBoxProps.title ?? title ?? "").trim() || " ";
|
|
362
362
|
return (_jsx("div", { className: className, style: style, children: _jsxs(SgGroupBox, { ...groupBoxProps, title: resolvedTitle, children: [error ? _jsx("p", { className: "mb-2 text-xs text-red-600", children: error }) : null, _jsxs("div", { className: "grid gap-3 md:grid-cols-[minmax(0,1fr)_auto_minmax(0,1fr)] md:items-start", children: [_jsxs("div", { className: "min-w-0 space-y-2", children: [_jsx("p", { className: "text-xs font-semibold uppercase tracking-wide text-[rgb(var(--sg-muted))]", children: sourceHeaderLabel }), showSourceFilter ? (_jsx("input", { value: sourceFilter, onChange: (event) => setSourceFilter(event.target.value), placeholder: sourceFilterLabel, className: "w-full rounded-md border border-[rgb(var(--sg-border))] bg-[rgb(var(--sg-input-bg,var(--sg-surface)))] px-2 py-1 text-sm text-[rgb(var(--sg-input-fg,var(--sg-text)))] placeholder:text-[rgb(var(--sg-input-placeholder,var(--sg-muted)))] outline-none focus:ring-2 focus:ring-[rgb(var(--sg-ring))]" })) : null, _jsxs("div", { className: "flex items-start gap-2", children: [showSourceControls ? renderReorderControls("source") : null, _jsx("div", { className: "min-w-0 flex-1", children: renderList("source", filteredSource, sourceSelectedSet) })] })] }), _jsx("div", { className: "flex justify-center md:pt-7", children: transferControls }), _jsxs("div", { className: "min-w-0 space-y-2", children: [_jsx("p", { className: "text-xs font-semibold uppercase tracking-wide text-[rgb(var(--sg-muted))]", children: targetHeaderLabel }), showTargetFilter ? (_jsx("input", { value: targetFilter, onChange: (event) => setTargetFilter(event.target.value), placeholder: targetFilterLabel, className: "w-full rounded-md border border-[rgb(var(--sg-border))] bg-[rgb(var(--sg-input-bg,var(--sg-surface)))] px-2 py-1 text-sm text-[rgb(var(--sg-input-fg,var(--sg-text)))] placeholder:text-[rgb(var(--sg-input-placeholder,var(--sg-muted)))] outline-none focus:ring-2 focus:ring-[rgb(var(--sg-ring))]" })) : null, _jsxs("div", { className: "flex items-start gap-2", children: [_jsx("div", { className: "min-w-0 flex-1", children: renderList("target", filteredTarget, targetSelectedSet) }), showTargetControls ? renderReorderControls("target") : null] })] })] })] }) }));
|
|
363
363
|
}
|
|
@@ -15,7 +15,7 @@ export const sgMeta = {
|
|
|
15
15
|
{ name: "id", type: "string", description: "Identificador unico do componente.", semanticRole: "data", bindable: false },
|
|
16
16
|
{ name: "value", type: "SgPickListValue", description: "Estado atual das listas.", semanticRole: "value", bindable: true },
|
|
17
17
|
{ name: "selectionMode", type: "\"single\" | \"multiple\"", description: "Modo de selecao nas listas.", semanticRole: "behavior", bindable: true },
|
|
18
|
-
{ name: "
|
|
18
|
+
{ name: "enabled", type: "boolean", default: true, description: "Desabilita interacao.", semanticRole: "behavior", bindable: true },
|
|
19
19
|
{ name: "onChange", type: "(event: SgPickListChangeEvent) => void", description: "Callback ao mover itens.", semanticRole: "event", bindable: false }
|
|
20
20
|
],
|
|
21
21
|
states: ["default", "disabled", "empty"],
|