@rolster/react-components 19.0.0 → 19.0.2

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.
Files changed (38) hide show
  1. package/dist/cjs/assets/{index-QCv-Uo8R.css → index-DEldF_Je.css} +203 -8
  2. package/dist/cjs/index.js +264 -23
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/es/assets/{index-QCv-Uo8R.css → index-DEldF_Je.css} +203 -8
  5. package/dist/es/index.js +266 -27
  6. package/dist/es/index.js.map +1 -1
  7. package/dist/esm/components/atoms/Badge/Badge.css +4 -2
  8. package/dist/esm/components/atoms/Badge/Badge.css.map +1 -1
  9. package/dist/esm/components/organisms/FieldClock/FieldClock.css +71 -0
  10. package/dist/esm/components/organisms/FieldClock/FieldClock.css.map +1 -0
  11. package/dist/esm/components/organisms/FieldClock/FieldClock.d.ts +37 -0
  12. package/dist/esm/components/organisms/FieldClock/FieldClock.js +52 -0
  13. package/dist/esm/components/organisms/FieldClock/FieldClock.js.map +1 -0
  14. package/dist/esm/components/organisms/FieldDate/FieldDate.css +2 -2
  15. package/dist/esm/components/organisms/FieldDate/FieldDate.css.map +1 -1
  16. package/dist/esm/components/organisms/FieldDate/FieldDate.js +5 -5
  17. package/dist/esm/components/organisms/FieldDate/FieldDate.js.map +1 -1
  18. package/dist/esm/components/organisms/FieldDateRange/FieldDateRange.css +5 -2
  19. package/dist/esm/components/organisms/FieldDateRange/FieldDateRange.css.map +1 -1
  20. package/dist/esm/components/organisms/PickerClock/PickerClock.css +116 -0
  21. package/dist/esm/components/organisms/PickerClock/PickerClock.css.map +1 -0
  22. package/dist/esm/components/organisms/PickerClock/PickerClock.d.ts +13 -0
  23. package/dist/esm/components/organisms/PickerClock/PickerClock.js +208 -0
  24. package/dist/esm/components/organisms/PickerClock/PickerClock.js.map +1 -0
  25. package/dist/esm/components/organisms/PickerDate/PickerDate.css +3 -2
  26. package/dist/esm/components/organisms/PickerDate/PickerDate.css.map +1 -1
  27. package/dist/esm/components/organisms/PickerDate/PickerDate.js +11 -13
  28. package/dist/esm/components/organisms/PickerDate/PickerDate.js.map +1 -1
  29. package/dist/esm/components/organisms/PickerDateRange/PickerDateRange.d.ts +1 -1
  30. package/dist/esm/components/organisms/PickerDateRange/PickerDateRange.js +2 -2
  31. package/dist/esm/components/organisms/PickerDateRange/PickerDateRange.js.map +1 -1
  32. package/dist/esm/index.d.ts +2 -0
  33. package/dist/esm/index.js +2 -0
  34. package/dist/esm/index.js.map +1 -1
  35. package/package.json +4 -4
  36. package/dist/esm/components/molecules/PickerClock/PickerClock.d.ts +0 -1
  37. package/dist/esm/components/molecules/PickerClock/PickerClock.js +0 -5
  38. package/dist/esm/components/molecules/PickerClock/PickerClock.js.map +0 -1
@@ -98,6 +98,8 @@
98
98
 
99
99
  .rls-badge {
100
100
  --pvt-dimension: var(--rlc-badge-dimension, var(--rls-sizing-x12));
101
+ --pvt-font-color: var(--rls-app-color-050);
102
+ --pvt-background: var(--rls-app-color-700);
101
103
  --pvt-contrast-font-color: var(--rls-app-color-600);
102
104
  --pvt-contrast-background: var(--rls-app-color-200);
103
105
  position: relative;
@@ -124,10 +126,10 @@
124
126
  background: var(--pvt-contrast-background);
125
127
  }
126
128
  .rls-badge[rls-theme] {
129
+ --pvt-font-color: var(--rls-theme-color-050);
130
+ --pvt-background: var(--rls-theme-color-500);
127
131
  --pvt-contrast-font-color: var(--rls-theme-color-700);
128
132
  --pvt-contrast-background: var(--rls-theme-color-100);
129
- color: var(--rls-theme-color-050);
130
- background: var(--rls-theme-color-500);
131
133
  }
132
134
  .rls-badge > span {
133
135
  font-size: inherit;
@@ -2619,13 +2621,203 @@
2619
2621
  bottom 120ms 0ms var(--rls-deceleration-curve);
2620
2622
  } /*# sourceMappingURL=Modal.css.map */
2621
2623
 
2622
- .rls-picker-date {
2624
+ .rls-picker-clock {
2623
2625
  position: relative;
2624
2626
  display: flex;
2625
- flex-direction: column;
2626
2627
  width: 150rem;
2628
+ flex-direction: column;
2629
+ row-gap: var(--rls-sizing-x8);
2630
+ overflow: hidden;
2631
+ user-select: none;
2632
+ padding: var(--rlc-picker-clock-padding, 0rem);
2633
+ box-sizing: border-box;
2634
+ border-radius: var(--rlc-picker-clock-radius, 0rem);
2635
+ background: var(--rlc-picker-clock-background, transparent);
2636
+ }
2637
+ .rls-picker-clock__header {
2638
+ display: flex;
2639
+ column-gap: var(--rls-sizing-x8);
2640
+ padding: var(--rls-sizing-x4) var(--rls-sizing-x4) 0rem var(--rls-sizing-x4);
2641
+ box-sizing: border-box;
2642
+ justify-content: center;
2643
+ }
2644
+ .rls-picker-clock__title {
2645
+ display: flex;
2646
+ width: auto;
2647
+ column-gap: var(--rls-sizing-x2);
2648
+ align-items: center;
2649
+ }
2650
+ .rls-picker-clock__title__value {
2651
+ width: 16rem;
2652
+ text-align: center;
2653
+ font-size: var(--rls-heading4-font-size);
2654
+ font-weight: var(--rls-font-weight-semibold);
2655
+ color: var(--rls-app-color-600);
2656
+ }
2657
+ .rls-picker-clock__title__value--active {
2658
+ color: var(--rls-theme-color-500);
2659
+ }
2660
+ .rls-picker-clock__title__value:hover {
2661
+ color: var(--rls-app-color-900);
2662
+ }
2663
+ .rls-picker-clock__title__separator {
2664
+ font-size: var(--rls-title-font-size);
2665
+ font-weight: var(--rls-font-weight-semibold);
2666
+ }
2667
+ .rls-picker-clock__zone {
2668
+ display: flex;
2669
+ width: auto;
2670
+ column-gap: var(--rls-sizing-x4);
2671
+ align-items: center;
2672
+ }
2673
+ .rls-picker-clock__zone__value {
2674
+ width: 18rem;
2675
+ text-align: center;
2676
+ padding: var(--rls-sizing-x1) var(--rls-sizing-x2);
2677
+ border-radius: var(--rls-sizing-x2);
2678
+ font-size: var(--rls-body-font-size);
2679
+ font-weight: var(--rls-font-weight-semibold);
2680
+ background: var(--rls-app-color-200);
2681
+ }
2682
+ .rls-picker-clock__zone__value--active {
2683
+ background: var(--rls-theme-gradient-500);
2684
+ color: var(--rls-theme-color-050);
2685
+ }
2686
+ .rls-picker-clock__body {
2687
+ display: flex;
2688
+ justify-content: center;
2689
+ }
2690
+ .rls-picker-clock__plate {
2691
+ width: 120rem;
2692
+ height: 120rem;
2693
+ border-radius: 50%;
2694
+ border: var(--rls-app-border-2-200);
2695
+ box-sizing: border-box;
2696
+ overflow: hidden;
2697
+ }
2698
+ .rls-picker-clock__canvas {
2699
+ position: absolute;
2700
+ }
2701
+ .rls-picker-clock__canvas__line {
2702
+ stroke: var(--rls-theme-color-500);
2703
+ stroke-width: var(--rls-sizing-x1);
2704
+ }
2705
+ .rls-picker-clock__canvas__center {
2706
+ fill: var(--rls-theme-color-500);
2707
+ }
2708
+ .rls-picker-clock__canvas__indicator {
2709
+ fill: var(--rls-theme-color-300);
2710
+ }
2711
+ .rls-picker-clock__canvas__point {
2712
+ fill: var(--rls-theme-color-050);
2713
+ }
2714
+ .rls-picker-clock__tick {
2715
+ position: absolute;
2716
+ width: var(--rls-sizing-x14);
2717
+ height: var(--rls-sizing-x14);
2718
+ line-height: var(--rls-sizing-x14);
2719
+ text-align: center;
2720
+ cursor: pointer;
2721
+ font-size: var(--rls-paragraph-font-size);
2722
+ font-weight: var(--rls-font-weight-semibold);
2723
+ }
2724
+ .rls-picker-clock__footer {
2725
+ --rlc-button-width: 100%;
2726
+ display: flex;
2727
+ column-gap: var(--rls-sizing-x6);
2728
+ align-items: center;
2729
+ padding: var(--rls-sizing-x4) var(--rls-sizing-x8) var(--rls-sizing-x6)
2730
+ var(--rls-sizing-x8);
2627
2731
  overflow: hidden;
2732
+ box-sizing: border-box;
2733
+ }
2734
+ .rls-picker-clock__footer--today {
2735
+ display: flex;
2736
+ width: var(--rls-sizing-x16);
2737
+ align-items: center;
2738
+ justify-content: center;
2739
+ } /*# sourceMappingURL=PickerClock.css.map */
2740
+
2741
+ .rls-field-clock {
2742
+ --rlc-field-box-body-padding: var(--rls-sizing-x3) var(--rls-sizing-x4);
2743
+ --pvt-font-size: var(--rlc-field-clock-font-size, var(--rls-input-font-size));
2744
+ --pvt-letter-spacing: var(
2745
+ --rlc-field-clock-letter-spacing,
2746
+ var(--rls-input-letter-spacing)
2747
+ );
2748
+ --pvt-action-dimension: var(
2749
+ --rlc-field-box-action-dimension,
2750
+ var(--rls-sizing-x12)
2751
+ );
2752
+ --pvt-action-background: var(
2753
+ --rlc-field-box-action-background,
2754
+ var(--rls-app-color-200)
2755
+ );
2756
+ --pvt-control-width: calc(100% - var(--pvt-action-dimension));
2757
+ position: relative;
2758
+ width: 100%;
2759
+ box-sizing: border-box;
2760
+ }
2761
+ .rls-field-clock .rls-field-box--readonly {
2762
+ --pvt-control-width: 100%;
2763
+ }
2764
+ .rls-field-clock .rls-field-box__body {
2765
+ column-gap: var(--rls-sizing-x2);
2766
+ }
2767
+ .rls-field-clock__control {
2768
+ position: relative;
2769
+ width: var(--pvt-control-width);
2770
+ height: var(--rls-sizing-x12);
2771
+ line-height: var(--rls-sizing-x12);
2772
+ padding: 0rem;
2773
+ cursor: default;
2774
+ border: none;
2775
+ outline: none;
2776
+ background: rgba(0, 0, 0, 0);
2777
+ color: var(--rls-app-color-900);
2778
+ font-weight: var(--rls-font-weight-medium);
2779
+ font-size: var(--pvt-font-size);
2780
+ letter-spacing: var(--pvt-letter-spacing);
2781
+ }
2782
+ .rls-field-clock__control::placeholder {
2783
+ color: var(--rls-app-color-400);
2784
+ }
2785
+ .rls-field-clock__control:disabled {
2786
+ opacity: 0.5;
2787
+ cursor: not-allowed;
2788
+ }
2789
+ .rls-field-clock__action {
2790
+ --rlc-icon-dimension: calc(var(--pvt-action-dimension) - 2rem);
2791
+ width: var(--pvt-action-dimension);
2792
+ height: var(--pvt-action-dimension);
2793
+ color: var(--rls-app-color-600);
2794
+ padding: 0rem;
2795
+ outline: none;
2796
+ border-radius: var(--rlc-field-box-action-radius, var(--rls-sizing-x2));
2797
+ background: var(--pvt-action-background);
2798
+ }
2799
+ .rls-field-clock__action:disabled {
2800
+ opacity: 0.5;
2801
+ background: rgba(0, 0, 0, 0);
2802
+ }
2803
+ .rls-field-clock__action .rls-icon {
2804
+ margin: 1rem;
2805
+ }
2806
+ .rls-field-clock-modal {
2807
+ --rlc-modal-background: transparent;
2808
+ --rlc-modal-max-width: 150rem;
2809
+ --rlc-picker-clock-radius: var(--rls-sizing-x4);
2810
+ --rlc-picker-clock-background: var(--rls-app-color-050);
2811
+ } /*# sourceMappingURL=FieldClock.css.map */
2812
+
2813
+ .rls-picker-date {
2814
+ position: relative;
2815
+ display: flex;
2816
+ width: 150rem;
2817
+ flex-direction: column;
2628
2818
  row-gap: var(--rls-sizing-x4);
2819
+ overflow: hidden;
2820
+ user-select: none;
2629
2821
  border-radius: var(--rlc-picker-date-radius, 0rem);
2630
2822
  background: var(--rlc-picker-date-background, transparent);
2631
2823
  }
@@ -2686,9 +2878,9 @@
2686
2878
 
2687
2879
  .rls-field-date {
2688
2880
  --rlc-field-box-body-padding: var(--rls-sizing-x3) var(--rls-sizing-x4);
2689
- --pvt-font-size: var(--rlc-datefield-font-size, var(--rls-input-font-size));
2881
+ --pvt-font-size: var(--rlc-field-date-font-size, var(--rls-input-font-size));
2690
2882
  --pvt-letter-spacing: var(
2691
- --rlc-datefield-letter-spacing,
2883
+ --rlc-field-date-letter-spacing,
2692
2884
  var(--rls-input-letter-spacing)
2693
2885
  );
2694
2886
  --pvt-action-dimension: var(
@@ -2821,9 +3013,12 @@
2821
3013
 
2822
3014
  .rls-field-date-range {
2823
3015
  --rlc-field-box-body-padding: var(--rls-sizing-x3) var(--rls-sizing-x4);
2824
- --pvt-font-size: var(--rlc-datefield-font-size, var(--rls-input-font-size));
3016
+ --pvt-font-size: var(
3017
+ --rlc-field-date-range-font-size,
3018
+ var(--rls-input-font-size)
3019
+ );
2825
3020
  --pvt-letter-spacing: var(
2826
- --rlc-datefield-letter-spacing,
3021
+ --rlc-field-date-range-letter-spacing,
2827
3022
  var(--rls-input-letter-spacing)
2828
3023
  );
2829
3024
  --pvt-action-dimension: var(
package/dist/es/index.js CHANGED
@@ -1,8 +1,8 @@
1
- import require$$0, { useMemo, useState, useEffect, useCallback, useRef, createContext } from 'react';
1
+ import require$$0, { useMemo, useState, useEffect, useCallback, useRef, useEffectEvent, createContext } from 'react';
2
2
  import { currencyFormat, BigDecimal, valueIsDefined, SealedPartial } from '@rolster/commons';
3
3
  import { i18n, i18nSubscribe } from '@rolster/i18n';
4
- import { PaginationController, verifyDayPicker, createDayPicker, createDayRangePicker, verifyMonthPicker, createMonthPicker, monthLimitTemplate, createYearPicker, verifyYearPicker, ListCollection, locationListCanTop, navigationListFromInput, navigationListFromElement, createAutocompleteStore, dateOutRange, verifyDateRange, PickerListenerEvent } from '@rolster/components';
5
- import { DAY_LABELS, DateRange, normalizeMinTime, assignDayInDate, dateIsBefore, MONTH_NAMES, Month, dateFormatTemplate, assignYearInDate, assignMonthInDate } from '@rolster/dates';
4
+ import { PaginationController, verifyDayPicker, createDayPicker, createDayRangePicker, verifyMonthPicker, createMonthPicker, monthLimitTemplate, createYearPicker, verifyYearPicker, ListCollection, locationListCanTop, navigationListFromInput, navigationListFromElement, createAutocompleteStore, PickerListenerEvent, dateOutRange, verifyDateRange } from '@rolster/components';
5
+ import { DAY_LABELS, DateRange, normalizeMinTime, assignDayInDate, dateIsBefore, MONTH_NAMES, Month, Time, dateFormatTemplate, assignYearInDate, assignMonthInDate } from '@rolster/dates';
6
6
  import ReactDOM from 'react-dom';
7
7
  import { useReactControl } from '@rolster/react-forms';
8
8
 
@@ -2058,10 +2058,6 @@ function RlsFieldAutocomplete(props) {
2058
2058
  return jsxRuntimeExports.jsx(RlsFieldAutocompleteTemplate, { ...props, render: render });
2059
2059
  }
2060
2060
 
2061
- const DATE_FORMAT = '{dd}/{mx}/{yy}';
2062
- const DATE_FORMAT_TITLE = '{dw}, {mx} {dd} de {yy}';
2063
- const DATE_RANGE_FORMAT = '{dd}/{mx}/{yy}';
2064
-
2065
2061
  function RlsModal({ children, className, onAutoClose, visible, rlsTheme }) {
2066
2062
  const classNameModal = useMemo(() => {
2067
2063
  return renderClassStatus('rls-modal', { visible }, className);
@@ -2072,6 +2068,251 @@ function RlsModal({ children, className, onAutoClose, visible, rlsTheme }) {
2072
2068
  return ReactDOM.createPortal(jsxRuntimeExports.jsxs("div", { className: classNameModal, "rls-theme": rlsTheme, children: [jsxRuntimeExports.jsx("div", { className: "rls-modal__component", children: children }), jsxRuntimeExports.jsx("div", { className: "rls-modal__backdrop", onClick: onClickBackdrop })] }), document.body);
2073
2069
  }
2074
2070
 
2071
+ function formatTime(value) {
2072
+ return String(value).padStart(2, '0');
2073
+ }
2074
+ const CLOCK_VALUES = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
2075
+ const RADIUS = 48;
2076
+ const DIAL_RADIUS = 60;
2077
+ const TICK_RADIUS = 7;
2078
+ function RlsPickerClockTick({ onValue, selectionIsHours, value }) {
2079
+ const styleTick = useMemo(() => {
2080
+ const radian = (value / 6) * Math.PI;
2081
+ const x = Math.sin(radian) * RADIUS;
2082
+ const y = Math.cos(radian) * RADIUS;
2083
+ return {
2084
+ left: `${DIAL_RADIUS + x - TICK_RADIUS - 1}rem`,
2085
+ top: `${DIAL_RADIUS - y - TICK_RADIUS - 1}rem`
2086
+ };
2087
+ }, []);
2088
+ const label = useMemo(() => {
2089
+ if (selectionIsHours) {
2090
+ return formatTime(value);
2091
+ }
2092
+ if (value === 12) {
2093
+ return formatTime(0);
2094
+ }
2095
+ return formatTime(value * 5);
2096
+ }, [selectionIsHours]);
2097
+ const onClick = useCallback((event) => {
2098
+ event.preventDefault();
2099
+ onValue(value);
2100
+ }, [onValue]);
2101
+ return (jsxRuntimeExports.jsx("div", { className: "rls-picker-clock__tick", style: styleTick, onClick: onClick, children: label }));
2102
+ }
2103
+ function RlsPickerClock({ formControl, onListener, rlsTheme, time }) {
2104
+ const timeInitial = useMemo(() => {
2105
+ return formControl?.value ?? time ?? Time.now();
2106
+ }, [formControl?.value, time]);
2107
+ const plateElement = useRef(null);
2108
+ const lineElement = useRef(null);
2109
+ const centerElement = useRef(null);
2110
+ const indicatorElement = useRef(null);
2111
+ const pointElement = useRef(null);
2112
+ const [labels, setLabels] = useState({
2113
+ timeActionCancel: reactI18n('dateActionCancel'),
2114
+ timeActionSelect: reactI18n('dateActionSelect')
2115
+ });
2116
+ const [zoneIsPM, setZoneIsPM] = useState(timeInitial.hour >= 12);
2117
+ const [hour, setHour] = useState(zoneIsPM ? timeInitial.hour - 12 : timeInitial.hour);
2118
+ const [minute, setMinute] = useState(timeInitial.minute);
2119
+ const [selectionIsHours, setSelectionIsHours] = useState(true);
2120
+ const selectionIsActive = useRef(false);
2121
+ const radianUnit = useMemo(() => {
2122
+ return Math.PI / (selectionIsHours ? 6 : 30);
2123
+ }, [selectionIsHours]);
2124
+ const hourFormat = useMemo(() => {
2125
+ return formatTime(hour === 0 ? 12 : hour);
2126
+ }, [hour]);
2127
+ const minuteFormat = useMemo(() => {
2128
+ return formatTime(minute);
2129
+ }, [minute]);
2130
+ const classNameHour = useMemo(() => {
2131
+ return renderClassStatus('rls-picker-clock__title__value', {
2132
+ active: selectionIsHours
2133
+ });
2134
+ }, [selectionIsHours]);
2135
+ const classNameMinute = useMemo(() => {
2136
+ return renderClassStatus('rls-picker-clock__title__value', {
2137
+ active: !selectionIsHours
2138
+ });
2139
+ }, [selectionIsHours]);
2140
+ const classNameAM = useMemo(() => {
2141
+ return renderClassStatus('rls-picker-clock__zone__value', {
2142
+ active: !zoneIsPM
2143
+ });
2144
+ }, [zoneIsPM]);
2145
+ const classNamePM = useMemo(() => {
2146
+ return renderClassStatus('rls-picker-clock__zone__value', {
2147
+ active: zoneIsPM
2148
+ });
2149
+ }, [zoneIsPM]);
2150
+ const refreshClockHour = useEffectEvent(() => {
2151
+ refreshClock(hour > 12 ? hour - 12 : hour);
2152
+ });
2153
+ const refreshClockMinute = useEffectEvent(() => {
2154
+ refreshClock(minute);
2155
+ });
2156
+ useEffect(() => {
2157
+ return i18nSubscribe(() => {
2158
+ setLabels({
2159
+ timeActionCancel: reactI18n('dateActionCancel'),
2160
+ timeActionSelect: reactI18n('dateActionSelect')
2161
+ });
2162
+ });
2163
+ }, []);
2164
+ useEffect(() => {
2165
+ selectionIsHours ? refreshClockHour() : refreshClockMinute();
2166
+ }, [selectionIsHours]);
2167
+ const refreshComponent = useCallback((clientX, clientY) => {
2168
+ const rectangle = plateElement.current.getBoundingClientRect();
2169
+ const centerX = rectangle.left + rectangle.width / 2;
2170
+ const centerY = rectangle.top + rectangle.height / 2;
2171
+ const positionX = clientX - centerX;
2172
+ const positionY = clientY - centerY;
2173
+ const angle = Math.atan2(-positionX, positionY) + Math.PI;
2174
+ const value = Math.round(angle / radianUnit);
2175
+ refreshClock(value);
2176
+ selectionIsHours ? setHour(value === 0 ? 12 : value) : setMinute(value);
2177
+ }, [selectionIsHours, radianUnit]);
2178
+ const refreshClock = useCallback((value) => {
2179
+ const angle = value * radianUnit;
2180
+ const x2 = Math.sin(angle) * (RADIUS - TICK_RADIUS);
2181
+ const y2 = -Math.cos(angle) * (RADIUS - TICK_RADIUS);
2182
+ const cx = Math.sin(angle) * RADIUS;
2183
+ const cy = -Math.cos(angle) * RADIUS;
2184
+ lineElement.current.setAttribute('x2', `${x2 - 1}rem`);
2185
+ lineElement.current.setAttribute('y2', `${y2 - 1}rem`);
2186
+ indicatorElement.current.setAttribute('cx', `${cx - 1}rem`);
2187
+ indicatorElement.current.setAttribute('cy', `${cy - 1}rem`);
2188
+ pointElement.current.setAttribute('cx', `${cx - 1}rem`);
2189
+ pointElement.current.setAttribute('cy', `${cy - 1}rem`);
2190
+ pointElement.current.style.visibility =
2191
+ selectionIsHours || value % 5 === 0 ? 'hidden' : 'visible';
2192
+ }, [selectionIsHours, radianUnit]);
2193
+ const onClickHour = useCallback(() => {
2194
+ setSelectionIsHours(true);
2195
+ }, []);
2196
+ const onClickMinute = useCallback(() => {
2197
+ setSelectionIsHours(false);
2198
+ }, []);
2199
+ const onClickAM = useCallback(() => {
2200
+ setZoneIsPM(false);
2201
+ }, []);
2202
+ const onClickPM = useCallback(() => {
2203
+ setZoneIsPM(true);
2204
+ }, []);
2205
+ const onActiveSelection = useCallback(() => {
2206
+ selectionIsActive.current = true;
2207
+ }, []);
2208
+ const onMouseSelection = useCallback((event) => {
2209
+ if (selectionIsActive.current) {
2210
+ event.preventDefault();
2211
+ refreshComponent(event.clientX, event.clientY);
2212
+ }
2213
+ }, [refreshComponent]);
2214
+ const onTouchSelection = useCallback((event) => {
2215
+ const touch = event.touches.item(0);
2216
+ if (selectionIsActive.current && touch) {
2217
+ refreshComponent(touch.clientX, touch.clientY);
2218
+ }
2219
+ }, [refreshComponent]);
2220
+ const onInactiveSelection = useCallback(() => {
2221
+ selectionIsActive.current = false;
2222
+ }, []);
2223
+ const onClickValue = useCallback((value) => {
2224
+ if (selectionIsHours) {
2225
+ setHour(value);
2226
+ refreshClock(value);
2227
+ }
2228
+ else {
2229
+ const minute = value === 12 ? 0 : value * 5;
2230
+ setMinute(minute);
2231
+ refreshClock(minute);
2232
+ }
2233
+ }, [selectionIsHours]);
2234
+ const onCancel = useCallback(() => {
2235
+ onListener?.({ event: PickerListenerEvent.Cancel });
2236
+ }, [onListener]);
2237
+ const onCurrentTime = useCallback(() => {
2238
+ const currentTime = Time.now();
2239
+ formControl?.setValue(currentTime);
2240
+ setHour(currentTime.hour);
2241
+ setMinute(currentTime.minute);
2242
+ onListener?.({
2243
+ event: PickerListenerEvent.Select,
2244
+ value: currentTime
2245
+ });
2246
+ }, [formControl, onListener]);
2247
+ const onSelect = useCallback(() => {
2248
+ const hourValue = zoneIsPM
2249
+ ? hour !== 12
2250
+ ? hour + 12
2251
+ : 12
2252
+ : hour === 12
2253
+ ? 0
2254
+ : hour;
2255
+ const timeValue = new Time(hourValue, minute);
2256
+ formControl?.setValue(timeValue);
2257
+ onListener?.({
2258
+ event: PickerListenerEvent.Select,
2259
+ value: timeValue
2260
+ });
2261
+ }, [formControl, hour, minute, zoneIsPM, onListener]);
2262
+ return (jsxRuntimeExports.jsxs("div", { className: "rls-picker-clock", "rls-theme": rlsTheme, children: [jsxRuntimeExports.jsxs("div", { className: "rls-picker-clock__header", children: [jsxRuntimeExports.jsxs("div", { className: "rls-picker-clock__title", children: [jsxRuntimeExports.jsx("span", { className: classNameHour, onClick: onClickHour, children: hourFormat }), jsxRuntimeExports.jsx("span", { className: "rls-picker-clock__title__separator", children: ":" }), jsxRuntimeExports.jsx("span", { className: classNameMinute, onClick: onClickMinute, children: minuteFormat })] }), jsxRuntimeExports.jsxs("div", { className: "rls-picker-clock__zone", children: [jsxRuntimeExports.jsx("span", { className: classNameAM, onClick: onClickAM, children: "AM" }), jsxRuntimeExports.jsx("span", { className: classNamePM, onClick: onClickPM, children: "PM" })] })] }), jsxRuntimeExports.jsx("div", { className: "rls-picker-clock__body", children: jsxRuntimeExports.jsxs("div", { className: "rls-picker-clock__plate", ref: plateElement, onMouseDown: onActiveSelection, onMouseMove: onMouseSelection, onMouseUp: onInactiveSelection, onMouseLeave: onInactiveSelection, onTouchStart: onActiveSelection, onTouchMove: onTouchSelection, onTouchEnd: onInactiveSelection, children: [jsxRuntimeExports.jsx("div", { className: "rls-picker-clock__canvas", children: jsxRuntimeExports.jsx("svg", { width: "120rem", height: "120rem", children: jsxRuntimeExports.jsxs("g", { style: {
2263
+ transform: `translate(${DIAL_RADIUS}rem, ${DIAL_RADIUS}rem)`
2264
+ }, children: [jsxRuntimeExports.jsx("line", { ref: lineElement, className: "rls-picker-clock__canvas__line", x1: "-1", y1: "-1" }), jsxRuntimeExports.jsx("circle", { ref: centerElement, className: "rls-picker-clock__canvas__center", r: "4", cx: "-1", cy: "-1" }), jsxRuntimeExports.jsx("circle", { ref: indicatorElement, className: "rls-picker-clock__canvas__indicator", r: `${TICK_RADIUS}rem` }), jsxRuntimeExports.jsx("circle", { ref: pointElement, className: "rls-picker-clock__canvas__point", r: "3.5" })] }) }) }), jsxRuntimeExports.jsx("div", { className: "rls-picker-clock__hours", children: CLOCK_VALUES.map((value) => {
2265
+ return (jsxRuntimeExports.jsx(RlsPickerClockTick, { value: value, selectionIsHours: selectionIsHours, onValue: onClickValue }, value));
2266
+ }) })] }) }), jsxRuntimeExports.jsxs("div", { className: "rls-picker-clock__footer", children: [jsxRuntimeExports.jsx("div", { className: "rls-picker-clock__footer--cancel", children: jsxRuntimeExports.jsx(RlsButton, { type: "flat", onClick: onCancel, children: labels.timeActionCancel }) }), jsxRuntimeExports.jsx("div", { className: "rls-picker-clock__footer--today", children: jsxRuntimeExports.jsx(RlsButtonAction, { icon: "timer", onClick: onCurrentTime }) }), jsxRuntimeExports.jsx("div", { className: "rls-picker-clock__footer--ok", children: jsxRuntimeExports.jsx(RlsButton, { type: "gradient", onClick: onSelect, children: labels.timeActionSelect }) })] })] }));
2267
+ }
2268
+
2269
+ function RlsFieldClock({ children, disabled, formControl, identifier, msgErrorDisabled, onValue, placeholder, readOnly, rlsTheme, time, value: valueInitial }) {
2270
+ const [value, setValue] = useState(formControl?.value ?? valueInitial);
2271
+ const [modalIsVisible, setModalIsVisible] = useState(false);
2272
+ const _disabled = useMemo(() => {
2273
+ return formControl?.disabled || disabled;
2274
+ }, [formControl?.disabled, disabled]);
2275
+ const className = useMemo(() => {
2276
+ return renderClassStatus('rls-field-box', {
2277
+ disabled: _disabled,
2278
+ readonly: readOnly
2279
+ });
2280
+ }, [_disabled, readOnly]);
2281
+ const { icon, valueInput } = useMemo(() => {
2282
+ return {
2283
+ icon: value ? 'trash-2' : 'timer',
2284
+ valueInput: value?.normalizeMeridiemFormat || ''
2285
+ };
2286
+ }, [value]);
2287
+ const onClickInput = useCallback(() => {
2288
+ !readOnly && setModalIsVisible(true);
2289
+ }, [readOnly]);
2290
+ const onChange = useCallback((value) => {
2291
+ setValue(value);
2292
+ onValue?.(value);
2293
+ }, [onValue]);
2294
+ const onClickAction = useCallback(() => {
2295
+ if (value) {
2296
+ formControl?.setValue(valueInitial);
2297
+ formControl?.touch();
2298
+ onChange(valueInitial);
2299
+ }
2300
+ else {
2301
+ setModalIsVisible(true);
2302
+ }
2303
+ }, [value, formControl, valueInitial, onChange]);
2304
+ const onListener = useCallback(({ event, value }) => {
2305
+ event !== PickerListenerEvent.Cancel && onChange(value);
2306
+ formControl?.touch();
2307
+ setModalIsVisible(false);
2308
+ }, [formControl, onChange]);
2309
+ return (jsxRuntimeExports.jsxs("div", { id: identifier, className: "rls-field-date", "rls-theme": rlsTheme, children: [jsxRuntimeExports.jsxs("div", { className: className, children: [children && jsxRuntimeExports.jsx("span", { className: "rls-field-box__label", children: children }), jsxRuntimeExports.jsx("div", { className: "rls-field-box__component", children: jsxRuntimeExports.jsxs("div", { className: "rls-field-box__body", children: [jsxRuntimeExports.jsx("input", { className: "rls-field-date__control", type: "text", value: valueInput, readOnly: true, placeholder: placeholder, onClick: onClickInput, disabled: _disabled }), !readOnly && (jsxRuntimeExports.jsx("button", { className: "rls-field-date__action", onClick: onClickAction, disabled: _disabled, children: jsxRuntimeExports.jsx(RlsIcon, { value: icon }) }))] }) }), !msgErrorDisabled && (jsxRuntimeExports.jsx(RlsMessageFormError, { className: "rls-field-box__error", formControl: formControl }))] }), jsxRuntimeExports.jsx(RlsModal, { className: "rls-field-clock-modal", visible: modalIsVisible, rlsTheme: rlsTheme, children: jsxRuntimeExports.jsx(RlsPickerClock, { formControl: formControl, time: time, disabled: _disabled, onListener: onListener }) })] }));
2310
+ }
2311
+
2312
+ const DATE_FORMAT = '{dd}/{mx}/{yy}';
2313
+ const DATE_FORMAT_TITLE = '{dw}, {mx} {dd} de {yy}';
2314
+ const DATE_RANGE_FORMAT = '{dd}/{mx}/{yy}';
2315
+
2075
2316
  function RlsPickerDate({ automatic, date, disabled, formControl, maxDate, minDate, onListener, rlsTheme }) {
2076
2317
  const today = useRef(new Date()); // Initial current date in component
2077
2318
  const _date = useMemo(() => {
@@ -2124,33 +2365,31 @@ function RlsPickerDate({ automatic, date, disabled, formControl, maxDate, minDat
2124
2365
  type === 'month' ? setVisibility('MONTH') : setVisibility('YEAR');
2125
2366
  }, []);
2126
2367
  const onCancel = useCallback(() => {
2127
- onListener && onListener({ event: PickerListenerEvent.Cancel });
2368
+ onListener?.({ event: PickerListenerEvent.Cancel });
2128
2369
  }, [onListener]);
2129
2370
  const onToday = useCallback(() => {
2130
2371
  yearControl.setValue(today.current.getFullYear());
2131
2372
  dayControl.setValue(today.current.getDate());
2132
2373
  monthControl.setValue(today.current.getMonth());
2133
2374
  formControl?.setValue(today.current);
2134
- onListener &&
2135
- onListener({
2136
- event: PickerListenerEvent.Now,
2137
- value: today.current
2138
- });
2139
- }, [today.current, formControl, onListener]);
2375
+ onListener?.({
2376
+ event: PickerListenerEvent.Now,
2377
+ value: today.current
2378
+ });
2379
+ }, [formControl, onListener]);
2140
2380
  const onSelect = useCallback(() => {
2141
2381
  formControl?.setValue(value);
2142
- onListener &&
2143
- onListener({
2144
- event: PickerListenerEvent.Select,
2145
- value
2146
- });
2382
+ onListener?.({
2383
+ event: PickerListenerEvent.Select,
2384
+ value
2385
+ });
2147
2386
  }, [formControl, value, onListener]);
2148
2387
  return (jsxRuntimeExports.jsxs("div", { className: "rls-picker-date", "rls-theme": rlsTheme, children: [jsxRuntimeExports.jsxs("div", { className: "rls-picker-date__header", children: [jsxRuntimeExports.jsx(RlsPickerSelectorTitle, { monthControl: monthControl, yearControl: yearControl, date: value, maxDate: maxDate, minDate: minDate, disabled: visibility === 'YEAR', type: 'month', onClick: onVisibilityTitle }), jsxRuntimeExports.jsx("div", { className: "rls-picker-date__title", children: jsxRuntimeExports.jsx("span", { onClick: onVisibilityDay, children: title }) })] }), jsxRuntimeExports.jsxs("div", { className: classNameComponent, children: [jsxRuntimeExports.jsx(RlsPickerDay, { formControl: dayControl, date: _date, month: monthControl.value, year: yearControl.value, maxDate: maxDate, minDate: minDate, disabled: disabled }), jsxRuntimeExports.jsx(RlsPickerMonth, { formControl: monthControl, date: _date, year: yearControl.value, maxDate: maxDate, minDate: minDate, disabled: disabled, onValue: onVisibilityDay }), jsxRuntimeExports.jsx(RlsPickerYear, { formControl: yearControl, date: _date, maxDate: maxDate, minDate: minDate, disabled: disabled, onValue: onVisibilityDay })] }), !automatic && (jsxRuntimeExports.jsx("div", { className: "rls-picker-date__footer", children: jsxRuntimeExports.jsxs("div", { className: "rls-picker-date__actions", children: [jsxRuntimeExports.jsx("div", { className: "rls-picker-date__actions--cancel", children: jsxRuntimeExports.jsx(RlsButton, { type: "flat", onClick: onCancel, children: labels.dateActionCancel }) }), jsxRuntimeExports.jsx("div", { className: "rls-picker-date__actions--today", children: jsxRuntimeExports.jsx(RlsButtonAction, { icon: "calendar", onClick: onToday, disabled: itIsDisabledToday }) }), jsxRuntimeExports.jsx("div", { className: "rls-picker-date__actions--ok", children: jsxRuntimeExports.jsx(RlsButton, { type: "gradient", onClick: onSelect, children: labels.dateActionSelect }) })] }) }))] }));
2149
2388
  }
2150
2389
 
2151
- function RlsFieldDate({ children, date, disabled, formControl, format, identifier, maxDate, minDate, msgErrorDisabled, onValue, placeholder, readOnly, rlsTheme, value: _value }) {
2390
+ function RlsFieldDate({ children, date, disabled, formControl, format, identifier, maxDate, minDate, msgErrorDisabled, onValue, placeholder, readOnly, rlsTheme, value: valueInitial }) {
2152
2391
  const today = useRef(new Date()); // Initial current date in component
2153
- const [value, setValue] = useState(formControl?.value ?? _value);
2392
+ const [value, setValue] = useState(formControl?.value ?? valueInitial);
2154
2393
  const [modalIsVisible, setModalIsVisible] = useState(false);
2155
2394
  const _disabled = useMemo(() => {
2156
2395
  return formControl?.disabled || disabled;
@@ -2185,14 +2424,14 @@ function RlsFieldDate({ children, date, disabled, formControl, format, identifie
2185
2424
  }, [onValue]);
2186
2425
  const onClickAction = useCallback(() => {
2187
2426
  if (value) {
2188
- formControl?.setValue(_value);
2427
+ formControl?.setValue(valueInitial);
2189
2428
  formControl?.touch();
2190
- onChange(_value);
2429
+ onChange(valueInitial);
2191
2430
  }
2192
2431
  else {
2193
2432
  setModalIsVisible(true);
2194
2433
  }
2195
- }, [value, formControl, _value, onChange]);
2434
+ }, [value, formControl, valueInitial, onChange]);
2196
2435
  const onListener = useCallback(({ event, value }) => {
2197
2436
  event !== PickerListenerEvent.Cancel && onChange(value);
2198
2437
  formControl?.touch();
@@ -2207,8 +2446,8 @@ function rangeFormatTemplate({ maxDate, minDate }) {
2207
2446
  return `${minFormat} - ${maxFormat}`;
2208
2447
  }
2209
2448
 
2210
- function RlsPickerDateRange({ automatic, date: _picker, disabled, formControl, maxDate, minDate, onListener, rlsTheme }) {
2211
- const _date = useMemo(() => normalizeMinTime(_picker ?? new Date()), [_picker]);
2449
+ function RlsPickerDateRange({ automatic, date: datePicker, disabled, formControl, maxDate, minDate, onListener, rlsTheme }) {
2450
+ const _date = useMemo(() => normalizeMinTime(datePicker ?? new Date()), [datePicker]);
2212
2451
  const _range = useMemo(() => formControl?.value ?? DateRange.now(), [formControl?.value]);
2213
2452
  const yearControl = useReactControl(_date.getFullYear());
2214
2453
  const monthControl = useReactControl(_date.getMonth());
@@ -3012,5 +3251,5 @@ function usePortalController() {
3012
3251
  return { close, open, visible };
3013
3252
  }
3014
3253
 
3015
- export { ConfirmationResult, RlsAlert, RlsAmount, RlsApplication, RlsAvatar, RlsBadge, RlsBallot, RlsBottomSheet, RlsBreadcrumb, RlsButton, RlsButtonAction, RlsButtonOption, RlsButtonProgress, RlsButtonToggle, RlsCard, RlsCheckBox, RlsCheckBoxControl, RlsConfirmation, RlsContent, RlsContext, RlsDatatable, RlsDatatableCell, RlsDatatableData, RlsDatatableFloating, RlsDatatableHeader, RlsDatatableRecord, RlsDatatableSubheader, RlsDatatableTitle, RlsDatatableTotals, RlsFieldAutocomplete, RlsFieldAutocompleteTemplate, RlsFieldDate, RlsFieldDateRange, RlsFieldDecimal, RlsFieldMoney, RlsFieldNumber, RlsFieldPassword, RlsFieldPercentage, RlsFieldReadonly, RlsFieldSelect, RlsFieldSelectTemplate, RlsFieldText, RlsFormNavigation, RlsIcon, RlsImage, RlsImageChooser, RlsImageEditor, RlsInput, RlsInputDecimal, RlsInputMoney, RlsInputNumber, RlsInputPassword, RlsInputPercentage, RlsInputSearch, RlsInputText, RlsLabel, RlsLabelCheckBox, RlsLabelRadioButton, RlsLabelSwitch, RlsMessageFormError, RlsMessageIcon, RlsModal, RlsModalSheet, RlsNavbar, RlsPagination, RlsPickerDate, RlsPickerDateRange, RlsPickerDay, RlsPickerDayRange, RlsPickerMonth, RlsPickerSelectorTitle, RlsPickerYear, RlsPoster, RlsProgressBar, RlsProgressCircular, RlsRadioButton, RlsSkeleton, RlsSkeletonText, RlsSlider, RlsSnackbar, RlsSpinner, RlsSwitch, RlsSwitchControl, RlsTabs, RlsTabularText, RlsToolbar, calculateImgDimension, rangeFormatTemplate, renderClassStatus, setErrorsI18n, useConfirmation, useDatatable, useFieldAutocomplete, useFieldSelect, useFormSingleSelectionController, useFormToggleController, useImageEditorController, useListController, usePortalController, useRelocationOnComponent, useResize, useSnackbar };
3254
+ export { ConfirmationResult, RlsAlert, RlsAmount, RlsApplication, RlsAvatar, RlsBadge, RlsBallot, RlsBottomSheet, RlsBreadcrumb, RlsButton, RlsButtonAction, RlsButtonOption, RlsButtonProgress, RlsButtonToggle, RlsCard, RlsCheckBox, RlsCheckBoxControl, RlsConfirmation, RlsContent, RlsContext, RlsDatatable, RlsDatatableCell, RlsDatatableData, RlsDatatableFloating, RlsDatatableHeader, RlsDatatableRecord, RlsDatatableSubheader, RlsDatatableTitle, RlsDatatableTotals, RlsFieldAutocomplete, RlsFieldAutocompleteTemplate, RlsFieldClock, RlsFieldDate, RlsFieldDateRange, RlsFieldDecimal, RlsFieldMoney, RlsFieldNumber, RlsFieldPassword, RlsFieldPercentage, RlsFieldReadonly, RlsFieldSelect, RlsFieldSelectTemplate, RlsFieldText, RlsFormNavigation, RlsIcon, RlsImage, RlsImageChooser, RlsImageEditor, RlsInput, RlsInputDecimal, RlsInputMoney, RlsInputNumber, RlsInputPassword, RlsInputPercentage, RlsInputSearch, RlsInputText, RlsLabel, RlsLabelCheckBox, RlsLabelRadioButton, RlsLabelSwitch, RlsMessageFormError, RlsMessageIcon, RlsModal, RlsModalSheet, RlsNavbar, RlsPagination, RlsPickerClock, RlsPickerDate, RlsPickerDateRange, RlsPickerDay, RlsPickerDayRange, RlsPickerMonth, RlsPickerSelectorTitle, RlsPickerYear, RlsPoster, RlsProgressBar, RlsProgressCircular, RlsRadioButton, RlsSkeleton, RlsSkeletonText, RlsSlider, RlsSnackbar, RlsSpinner, RlsSwitch, RlsSwitchControl, RlsTabs, RlsTabularText, RlsToolbar, calculateImgDimension, rangeFormatTemplate, renderClassStatus, setErrorsI18n, useConfirmation, useDatatable, useFieldAutocomplete, useFieldSelect, useFormSingleSelectionController, useFormToggleController, useImageEditorController, useListController, usePortalController, useRelocationOnComponent, useResize, useSnackbar };
3016
3255
  //# sourceMappingURL=index.js.map