@stfrigerio/sito-template 0.1.26 → 0.1.27
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/components/atoms/NumberStepper/NumberStepper.d.ts +65 -0
- package/dist/components/atoms/NumberStepper/NumberStepper.d.ts.map +1 -1
- package/dist/components/atoms/NumberStepper/NumberStepper.stories.d.ts +8 -0
- package/dist/components/atoms/NumberStepper/NumberStepper.stories.d.ts.map +1 -1
- package/dist/components/atoms/TextArea/TextArea.d.ts +3 -1
- package/dist/components/atoms/TextArea/TextArea.d.ts.map +1 -1
- package/dist/components/molecules/TimeInput/TimeInput.d.ts +2 -1
- package/dist/components/molecules/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/index.esm.js +83 -9
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +83 -9
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -676,7 +676,7 @@ var styles$l = {"textareaContainer":"TextArea-module_textareaContainer__AquFj","
|
|
|
676
676
|
* required
|
|
677
677
|
* />
|
|
678
678
|
*/
|
|
679
|
-
function TextArea({ label, value, onChange, rows = 5, placeholder = "", required = false, maxLength, disabled = false, error = false, success = false, loading = false, focusMode = false, compact = false }) {
|
|
679
|
+
function TextArea({ label, value, onChange, rows = 5, placeholder = "", required = false, maxLength, disabled = false, error = false, success = false, loading = false, focusMode = false, compact = false, className = "" }) {
|
|
680
680
|
const textareaId = `textarea-${Math.random().toString(36).substr(2, 9)}`;
|
|
681
681
|
const getContainerClassName = () => {
|
|
682
682
|
const classes = [styles$l.textareaContainer];
|
|
@@ -690,6 +690,8 @@ function TextArea({ label, value, onChange, rows = 5, placeholder = "", required
|
|
|
690
690
|
classes.push(styles$l.focusMode);
|
|
691
691
|
if (compact)
|
|
692
692
|
classes.push(styles$l.compact);
|
|
693
|
+
if (className)
|
|
694
|
+
classes.push(className);
|
|
693
695
|
return classes.join(' ');
|
|
694
696
|
};
|
|
695
697
|
const getCharCountClassName = () => {
|
|
@@ -843,6 +845,71 @@ var styles$i = {"container":"NumberStepper-module_container__WSGlU","header":"Nu
|
|
|
843
845
|
* icon="📦"
|
|
844
846
|
* />
|
|
845
847
|
*
|
|
848
|
+
* @example
|
|
849
|
+
* // With custom styles
|
|
850
|
+
* <NumberStepper
|
|
851
|
+
* value={volume}
|
|
852
|
+
* onChange={setVolume}
|
|
853
|
+
* min={0}
|
|
854
|
+
* max={100}
|
|
855
|
+
* label="Volume"
|
|
856
|
+
* icon="🔊"
|
|
857
|
+
* customStyles={{
|
|
858
|
+
* container: {
|
|
859
|
+
* background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
|
|
860
|
+
* padding: '20px',
|
|
861
|
+
* borderRadius: '16px',
|
|
862
|
+
* },
|
|
863
|
+
* label: { color: 'white', fontWeight: 'bold' },
|
|
864
|
+
* button: {
|
|
865
|
+
* background: 'rgba(255,255,255,0.2)',
|
|
866
|
+
* color: 'white',
|
|
867
|
+
* },
|
|
868
|
+
* buttonHover: {
|
|
869
|
+
* background: 'rgba(255,255,255,0.3)',
|
|
870
|
+
* },
|
|
871
|
+
* value: {
|
|
872
|
+
* color: 'white',
|
|
873
|
+
* fontSize: '24px',
|
|
874
|
+
* fontWeight: 'bold',
|
|
875
|
+
* },
|
|
876
|
+
* }}
|
|
877
|
+
* />
|
|
878
|
+
*
|
|
879
|
+
* @example
|
|
880
|
+
* // Custom variant with horizontal layout
|
|
881
|
+
* <NumberStepper
|
|
882
|
+
* value={discount}
|
|
883
|
+
* onChange={setDiscount}
|
|
884
|
+
* min={0}
|
|
885
|
+
* max={100}
|
|
886
|
+
* step={5}
|
|
887
|
+
* label="Discount %"
|
|
888
|
+
* icon="🏷️"
|
|
889
|
+
* variant="custom"
|
|
890
|
+
* customStyles={{
|
|
891
|
+
* container: {
|
|
892
|
+
* display: 'flex',
|
|
893
|
+
* alignItems: 'center',
|
|
894
|
+
* gap: '16px',
|
|
895
|
+
* },
|
|
896
|
+
* header: { flex: 1, marginBottom: 0 },
|
|
897
|
+
* }}
|
|
898
|
+
* />
|
|
899
|
+
*
|
|
900
|
+
* @example
|
|
901
|
+
* // With custom buttons
|
|
902
|
+
* <NumberStepper
|
|
903
|
+
* value={rating}
|
|
904
|
+
* onChange={setRating}
|
|
905
|
+
* min={1}
|
|
906
|
+
* max={5}
|
|
907
|
+
* customButtons={{
|
|
908
|
+
* decrement: <span>👎</span>,
|
|
909
|
+
* increment: <span>👍</span>,
|
|
910
|
+
* }}
|
|
911
|
+
* />
|
|
912
|
+
*
|
|
846
913
|
* @param {NumberStepperProps} props - The props for the NumberStepper component
|
|
847
914
|
* @returns {JSX.Element} The rendered NumberStepper component
|
|
848
915
|
*/
|
|
@@ -940,13 +1007,18 @@ const NumberStepper = ({ value, onChange, min = -Infinity, max = Infinity, step
|
|
|
940
1007
|
const [isButtonHovered, setIsButtonHovered] = React.useState(null);
|
|
941
1008
|
const isDecrementDisabled = disabled || value <= min;
|
|
942
1009
|
const isIncrementDisabled = disabled || value >= max;
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
1010
|
+
const stepperContent = (jsxRuntime.jsxs("div", { className: styles$i.stepper, style: customStyles.stepper, onKeyDown: handleKeyDown, tabIndex: disabled ? -1 : 0, children: [jsxRuntime.jsx(framerMotion.motion.button, { className: styles$i.button, style: {
|
|
1011
|
+
...customStyles.button,
|
|
1012
|
+
...(isButtonHovered === 'decrement' && customStyles.buttonHover)
|
|
1013
|
+
}, onMouseEnter: () => setIsButtonHovered('decrement'), onMouseLeave: () => setIsButtonHovered(null), onClick: handleDecrement, disabled: isDecrementDisabled, whileTap: !isDecrementDisabled ? { scale: 0.9 } : undefined, animate: isDecrementing ? { scale: [1, 1.2, 1] } : undefined, transition: { duration: 0.2 }, "aria-label": "Decrease value", children: customButtons.decrement || (showPlusMinus ? (jsxRuntime.jsx("span", { className: styles$i.buttonIcon, style: customStyles.buttonIcon, children: "\u2212" })) : (jsxRuntime.jsx("svg", { className: styles$i.buttonIcon, style: customStyles.buttonIcon, viewBox: "0 0 24 24", fill: "none", children: jsxRuntime.jsx("path", { d: "M15 18L9 12L15 6", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }))) }), jsxRuntime.jsx("div", { className: styles$i.valueContainer, style: customStyles.valueContainer, children: jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "wait", children: jsxRuntime.jsx(framerMotion.motion.div, { initial: { y: isIncrementing ? 10 : isDecrementing ? -10 : 0, opacity: 0 }, animate: { y: 0, opacity: 1 }, exit: { y: isIncrementing ? -10 : isDecrementing ? 10 : 0, opacity: 0 }, transition: { duration: 0.15 }, className: styles$i.valueWrapper, children: jsxRuntime.jsx("input", { type: "text", className: styles$i.value, style: customStyles.value, value: displayValue, onChange: handleInputChange, onBlur: handleInputBlur, disabled: disabled, "aria-label": label || "Number input", "aria-valuemin": min, "aria-valuemax": max, "aria-valuenow": value }) }, value) }) }), jsxRuntime.jsx(framerMotion.motion.button, { className: styles$i.button, style: {
|
|
1014
|
+
...customStyles.button,
|
|
1015
|
+
...(isButtonHovered === 'increment' && customStyles.buttonHover)
|
|
1016
|
+
}, onMouseEnter: () => setIsButtonHovered('increment'), onMouseLeave: () => setIsButtonHovered(null), onClick: handleIncrement, disabled: isIncrementDisabled, whileTap: !isIncrementDisabled ? { scale: 0.9 } : undefined, animate: isIncrementing ? { scale: [1, 1.2, 1] } : undefined, transition: { duration: 0.2 }, "aria-label": "Increase value", children: customButtons.increment || (showPlusMinus ? (jsxRuntime.jsx("span", { className: styles$i.buttonIcon, style: customStyles.buttonIcon, children: "+" })) : (jsxRuntime.jsx("svg", { className: styles$i.buttonIcon, style: customStyles.buttonIcon, viewBox: "0 0 24 24", fill: "none", children: jsxRuntime.jsx("path", { d: "M9 18L15 12L9 6", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }))) })] }));
|
|
1017
|
+
// For custom variant with horizontal layout, render differently
|
|
1018
|
+
if (variant === 'custom' && (label || icon)) {
|
|
1019
|
+
return (jsxRuntime.jsxs("div", { className: containerClasses, style: { ...customStyles.container, display: 'flex', alignItems: 'center' }, children: [jsxRuntime.jsxs("div", { className: styles$i.header, style: { ...customStyles.header, flex: 1, marginBottom: 0 }, children: [icon && jsxRuntime.jsx("span", { className: styles$i.icon, style: customStyles.icon, children: icon }), label && jsxRuntime.jsx("label", { className: styles$i.label, style: customStyles.label, children: label })] }), stepperContent, !hideLimits && (min !== -Infinity || max !== Infinity) && (jsxRuntime.jsxs("div", { className: styles$i.limits, style: customStyles.limits, children: [jsxRuntime.jsx("span", { className: styles$i.limit, children: min !== -Infinity && `Min: ${min}` }), jsxRuntime.jsx("span", { className: styles$i.limit, children: max !== Infinity && `Max: ${max}` })] }))] }));
|
|
1020
|
+
}
|
|
1021
|
+
return (jsxRuntime.jsxs("div", { className: containerClasses, style: customStyles.container, children: [(label || icon) && (jsxRuntime.jsxs("div", { className: styles$i.header, style: customStyles.header, children: [icon && jsxRuntime.jsx("span", { className: styles$i.icon, style: customStyles.icon, children: icon }), label && jsxRuntime.jsx("label", { className: styles$i.label, style: customStyles.label, children: label })] })), stepperContent, !hideLimits && (min !== -Infinity || max !== Infinity) && (jsxRuntime.jsxs("div", { className: styles$i.limits, style: customStyles.limits, children: [jsxRuntime.jsx("span", { className: styles$i.limit, children: min !== -Infinity && `Min: ${min}` }), jsxRuntime.jsx("span", { className: styles$i.limit, children: max !== Infinity && `Max: ${max}` })] }))] }));
|
|
950
1022
|
};
|
|
951
1023
|
|
|
952
1024
|
var styles$h = {"button":"ToggleButton-module_button__DTuyY","background":"ToggleButton-module_background__NwfTp","content":"ToggleButton-module_content__NHqIN","iconWrapper":"ToggleButton-module_iconWrapper__yN4sP","icon":"ToggleButton-module_icon__r8juX","label":"ToggleButton-module_label__4mPJP","hideMobile":"ToggleButton-module_hideMobile__GFAc3","checkmark":"ToggleButton-module_checkmark__ZJwf-","ripple":"ToggleButton-module_ripple__2-faB","small":"ToggleButton-module_small__MhfoN","large":"ToggleButton-module_large__A3naL","default":"ToggleButton-module_default__q8QaZ","active":"ToggleButton-module_active__4DjlR","outlined":"ToggleButton-module_outlined__OtqJB","filled":"ToggleButton-module_filled__LySNn","ghost":"ToggleButton-module_ghost__9KXcb","active-primary":"ToggleButton-module_active-primary__vXMP7","active-secondary":"ToggleButton-module_active-secondary__9Ttdx","active-success":"ToggleButton-module_active-success__oi0rr","active-danger":"ToggleButton-module_active-danger__VUdxr","active-warning":"ToggleButton-module_active-warning__77nSu","animation-scale":"ToggleButton-module_animation-scale__j-3mJ","scaleAnimation":"ToggleButton-module_scaleAnimation__Ms1j2","animation-rotate":"ToggleButton-module_animation-rotate__pBmfc","rotateAnimation":"ToggleButton-module_rotateAnimation__xWZJ5","animation-flip":"ToggleButton-module_animation-flip__ErAbm","flipAnimation":"ToggleButton-module_flipAnimation__qwDTb","disabled":"ToggleButton-module_disabled__Gv5ji"};
|
|
@@ -1660,7 +1732,7 @@ function TimePickerModal({ isOpen, onClose, value, onChange }) {
|
|
|
1660
1732
|
|
|
1661
1733
|
var styles$b = {"timeInput":"TimeInput-module_timeInput__h1DpT","label":"TimeInput-module_label__d4rZw","required":"TimeInput-module_required__rc1vq","inputWrapper":"TimeInput-module_inputWrapper__4RPAn","textInput":"TimeInput-module_textInput__M3eBZ","clockButton":"TimeInput-module_clockButton__3qoub","error":"TimeInput-module_error__gJnpk","success":"TimeInput-module_success__np-lF","loading":"TimeInput-module_loading__Wb1DC","disabled":"TimeInput-module_disabled__wxiZ-"};
|
|
1662
1734
|
|
|
1663
|
-
function TimeInput({ label, value, onChange, placeholder = "14:30", onFocus, onBlur, error = false, success = false, loading = false, disabled = false, required = false }) {
|
|
1735
|
+
function TimeInput({ label, value, onChange, placeholder = "14:30", onFocus, onBlur, error = false, success = false, loading = false, disabled = false, required = false, className = "" }) {
|
|
1664
1736
|
const [showPicker, setShowPicker] = React.useState(false);
|
|
1665
1737
|
const formatTime24 = (time) => {
|
|
1666
1738
|
if (!time)
|
|
@@ -1720,6 +1792,8 @@ function TimeInput({ label, value, onChange, placeholder = "14:30", onFocus, onB
|
|
|
1720
1792
|
classes.push(styles$b.loading);
|
|
1721
1793
|
if (disabled)
|
|
1722
1794
|
classes.push(styles$b.disabled);
|
|
1795
|
+
if (className)
|
|
1796
|
+
classes.push(className);
|
|
1723
1797
|
return classes.join(' ');
|
|
1724
1798
|
};
|
|
1725
1799
|
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsxs("div", { className: getContainerClassName(), children: [jsxRuntime.jsxs("label", { className: styles$b.label, children: [label, required && jsxRuntime.jsx("span", { className: styles$b.required, children: "*" })] }), jsxRuntime.jsxs("div", { className: styles$b.inputWrapper, children: [jsxRuntime.jsx("input", { type: "text", value: value, onChange: (e) => handleTextChange(e.target.value), onFocus: onFocus, onBlur: onBlur, placeholder: placeholder, className: styles$b.textInput, maxLength: 5, disabled: disabled || loading, "aria-invalid": error, "aria-required": required, inputMode: "numeric", pattern: "[0-9:]*" }), jsxRuntime.jsx("button", { type: "button", onClick: handleClockClick, className: styles$b.clockButton, title: "Open time picker", disabled: disabled || loading, "aria-label": "Open time picker", children: jsxRuntime.jsx(FiClock, { size: 20 }) })] })] }), jsxRuntime.jsx(TimePickerModal, { isOpen: showPicker, onClose: () => setShowPicker(false), value: value, onChange: onChange })] }));
|