@festo-ui/react 9.0.1-dev.768 → 9.0.1-dev.769

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 (226) hide show
  1. package/dist/components/accordion/Accordion.css +4 -0
  2. package/dist/components/accordion/Accordion.d.ts +10 -0
  3. package/dist/components/accordion/Accordion.js +41 -0
  4. package/dist/components/accordion/AccordionContext.d.ts +11 -0
  5. package/dist/components/accordion/AccordionContext.js +3 -0
  6. package/dist/components/accordion/accordion-header/AccordionHeader.css +11 -0
  7. package/dist/components/accordion/accordion-header/AccordionHeader.d.ts +2 -0
  8. package/dist/components/accordion/accordion-header/AccordionHeader.js +11 -0
  9. package/dist/components/accordion/accordion-item/AccordionItem.css +64 -0
  10. package/dist/components/accordion/accordion-item/AccordionItem.d.ts +8 -0
  11. package/dist/components/accordion/accordion-item/AccordionItem.js +60 -0
  12. package/dist/components/accordion/accordion-item/AccordionItemContext.d.ts +7 -0
  13. package/dist/components/accordion/accordion-item/AccordionItemContext.js +3 -0
  14. package/dist/components/accordion/accordion-item/accordion-item-body/AccordionItemBody.css +76 -0
  15. package/dist/components/accordion/accordion-item/accordion-item-body/AccordionItemBody.d.ts +2 -0
  16. package/dist/components/accordion/accordion-item/accordion-item-body/AccordionItemBody.js +61 -0
  17. package/dist/components/accordion/accordion-item/accordion-item-header/AccordionItemHeader.css +11 -0
  18. package/dist/components/accordion/accordion-item/accordion-item-header/AccordionItemHeader.d.ts +2 -0
  19. package/dist/components/accordion/accordion-item/accordion-item-header/AccordionItemHeader.js +20 -0
  20. package/dist/components/bottom-sheet/BottomSheet.css +18 -0
  21. package/dist/components/bottom-sheet/BottomSheet.d.ts +11 -0
  22. package/dist/components/bottom-sheet/BottomSheet.js +101 -0
  23. package/dist/components/breadcrumb/Breadcrumb.d.ts +14 -0
  24. package/dist/components/breadcrumb/Breadcrumb.js +84 -0
  25. package/dist/components/button/Button.d.ts +11 -0
  26. package/dist/components/button/Button.js +36 -0
  27. package/dist/components/card/Card.d.ts +4 -0
  28. package/dist/components/card/Card.js +9 -0
  29. package/dist/components/card/CardBody.d.ts +5 -0
  30. package/dist/components/card/CardBody.js +15 -0
  31. package/dist/components/card/CardHeader.d.ts +8 -0
  32. package/dist/components/card/CardHeader.js +31 -0
  33. package/dist/components/card/CardHeader.stories.helper.js +7 -0
  34. package/dist/components/card/CardNotification.d.ts +6 -0
  35. package/dist/components/card/CardNotification.js +26 -0
  36. package/dist/components/chips/chip/Chip.d.ts +17 -0
  37. package/dist/components/chips/chip/Chip.js +38 -0
  38. package/dist/components/chips/chip-container/ChipContainer.d.ts +5 -0
  39. package/dist/components/chips/chip-container/ChipContainer.js +12 -0
  40. package/dist/components/icon-wrapper/IconWrapper.d.ts +6 -0
  41. package/dist/components/icon-wrapper/IconWrapper.js +13 -0
  42. package/dist/components/loading-indicator/LoadingIndicator.d.ts +5 -0
  43. package/dist/components/loading-indicator/LoadingIndicator.js +41 -0
  44. package/dist/components/mobile-flyout/MobileFlyout.d.ts +11 -0
  45. package/dist/components/mobile-flyout/MobileFlyout.js +88 -0
  46. package/dist/components/mobile-flyout/MobileFlyoutContext.d.ts +8 -0
  47. package/dist/components/mobile-flyout/MobileFlyoutContext.js +3 -0
  48. package/dist/components/mobile-flyout/mobile-flyout-item/MobileFlyoutItem.d.ts +17 -0
  49. package/dist/components/mobile-flyout/mobile-flyout-item/MobileFlyoutItem.js +36 -0
  50. package/dist/components/mobile-flyout/mobile-flyout-page/MobileFlyoutPage.css +5 -0
  51. package/dist/components/mobile-flyout/mobile-flyout-page/MobileFlyoutPage.d.ts +8 -0
  52. package/dist/components/mobile-flyout/mobile-flyout-page/MobileFlyoutPage.js +35 -0
  53. package/dist/components/modals/AlertModal.d.ts +12 -0
  54. package/dist/components/modals/AlertModal.js +53 -0
  55. package/dist/components/modals/ConfirmModal.d.ts +11 -0
  56. package/dist/components/modals/ConfirmModal.js +46 -0
  57. package/dist/components/modals/CustomModal.d.ts +8 -0
  58. package/dist/components/modals/CustomModal.js +38 -0
  59. package/dist/components/modals/Modal.css +39 -0
  60. package/dist/components/modals/Modal.d.ts +8 -0
  61. package/dist/components/modals/Modal.js +31 -0
  62. package/dist/components/modals/ModalBase.d.ts +9 -0
  63. package/dist/components/modals/ModalBase.js +124 -0
  64. package/dist/components/modals/ModalFooter.d.ts +2 -0
  65. package/dist/components/modals/ModalFooter.js +12 -0
  66. package/dist/components/modals/Prompt.d.ts +15 -0
  67. package/dist/components/modals/Prompt.js +58 -0
  68. package/dist/components/modals/image-gallery/ImageGallery.css +815 -0
  69. package/dist/components/modals/image-gallery/ImageGallery.d.ts +21 -0
  70. package/dist/components/modals/image-gallery/ImageGallery.helper.d.ts +2 -0
  71. package/dist/components/modals/image-gallery/ImageGallery.helper.js +13 -0
  72. package/dist/components/modals/image-gallery/ImageGallery.js +103 -0
  73. package/dist/components/modals/image-gallery/ImageGallery.stories.helper.js +112 -0
  74. package/dist/components/modals/image-gallery/ImageGalleryContent.d.ts +8 -0
  75. package/dist/components/modals/image-gallery/ImageGalleryContent.js +15 -0
  76. package/dist/components/modals/image-gallery/ImageGalleryScale.d.ts +6 -0
  77. package/dist/components/modals/image-gallery/ImageGalleryScale.js +15 -0
  78. package/dist/components/modals/image-gallery/ImageGallerySwiper.d.ts +12 -0
  79. package/dist/components/modals/image-gallery/ImageGallerySwiper.js +40 -0
  80. package/dist/components/modals/image-gallery/ImageGalleryThumbsSwiper.d.ts +7 -0
  81. package/dist/components/modals/image-gallery/ImageGalleryThumbsSwiper.js +27 -0
  82. package/dist/components/modals/image-gallery/internal/CloseButton.d.ts +6 -0
  83. package/dist/components/modals/image-gallery/internal/CloseButton.js +14 -0
  84. package/dist/components/modals/image-gallery/internal/ImageGalleryContainer.d.ts +5 -0
  85. package/dist/components/modals/image-gallery/internal/ImageGalleryContainer.js +8 -0
  86. package/dist/components/modals/image-gallery/internal/ImageGalleryPagination.d.ts +5 -0
  87. package/dist/components/modals/image-gallery/internal/ImageGalleryPagination.js +29 -0
  88. package/dist/components/pagination/Pagination.css +10 -0
  89. package/dist/components/pagination/Pagination.d.ts +15 -0
  90. package/dist/components/pagination/Pagination.js +100 -0
  91. package/dist/components/popovers/legend/Legend.d.ts +9 -0
  92. package/dist/components/popovers/legend/Legend.js +21 -0
  93. package/dist/components/popovers/popover/Popover.css +56 -0
  94. package/dist/components/popovers/popover/Popover.d.ts +21 -0
  95. package/dist/components/popovers/popover/Popover.js +106 -0
  96. package/dist/components/popovers/popover-menu/PopoverMenu.d.ts +7 -0
  97. package/dist/components/popovers/popover-menu/PopoverMenu.js +37 -0
  98. package/dist/components/popovers/popover-menu/PopoverMenuContext.d.ts +3 -0
  99. package/dist/components/popovers/popover-menu/PopoverMenuContext.js +5 -0
  100. package/dist/components/popovers/popover-menu-item/PopoverMenuItem.d.ts +9 -0
  101. package/dist/components/popovers/popover-menu-item/PopoverMenuItem.js +28 -0
  102. package/dist/components/popovers/tooltip/Tooltip.d.ts +5 -0
  103. package/dist/components/popovers/tooltip/Tooltip.js +12 -0
  104. package/dist/components/progress/Progress.d.ts +7 -0
  105. package/dist/components/progress/Progress.js +26 -0
  106. package/dist/components/search-input/ClearButton.d.ts +2 -0
  107. package/dist/components/search-input/ClearButton.js +10 -0
  108. package/dist/components/search-input/SearchInput.css +13 -0
  109. package/dist/components/search-input/SearchInput.d.ts +14 -0
  110. package/dist/components/search-input/SearchInput.js +61 -0
  111. package/dist/components/search-input/SearchSuggestion.d.ts +17 -0
  112. package/dist/components/search-input/SearchSuggestion.js +21 -0
  113. package/dist/components/search-input/useSearchInput.d.ts +13 -0
  114. package/dist/components/search-input/useSearchInput.js +85 -0
  115. package/dist/components/snackbar/Snackbar.css +55 -0
  116. package/dist/components/snackbar/Snackbar.d.ts +21 -0
  117. package/dist/components/snackbar/Snackbar.js +78 -0
  118. package/dist/components/snackbar/SnackbarContext.d.ts +7 -0
  119. package/dist/components/snackbar/SnackbarContext.js +3 -0
  120. package/dist/components/snackbar/SnackbarProvider.d.ts +7 -0
  121. package/dist/components/snackbar/SnackbarProvider.js +66 -0
  122. package/dist/components/snackbar/useSnackbar.d.ts +2 -0
  123. package/dist/components/snackbar/useSnackbar.js +4 -0
  124. package/dist/components/stepper-horizontal/StepperHorizontal.css +6 -0
  125. package/dist/components/stepper-horizontal/StepperHorizontal.d.ts +7 -0
  126. package/dist/components/stepper-horizontal/StepperHorizontal.js +48 -0
  127. package/dist/components/stepper-horizontal/step-horizontal/StepHorizontal.css +24 -0
  128. package/dist/components/stepper-horizontal/step-horizontal/StepHorizontal.d.ts +6 -0
  129. package/dist/components/stepper-horizontal/step-horizontal/StepHorizontal.js +16 -0
  130. package/dist/components/stepper-vertical/StepperVertical.d.ts +6 -0
  131. package/dist/components/stepper-vertical/StepperVertical.js +26 -0
  132. package/dist/components/stepper-vertical/step-vertical/StepVertical.css +10 -0
  133. package/dist/components/stepper-vertical/step-vertical/StepVertical.d.ts +11 -0
  134. package/dist/components/stepper-vertical/step-vertical/StepVertical.js +58 -0
  135. package/dist/components/tab/Tabs.css +285 -0
  136. package/dist/components/tab/Tabs.d.ts +22 -0
  137. package/dist/components/tab/Tabs.js +194 -0
  138. package/dist/components/tab/interfaces.d.ts +5 -0
  139. package/dist/components/tab/interfaces.js +0 -0
  140. package/dist/components/tab/tab-pane/TabPane.css +8 -0
  141. package/dist/components/tab/tab-pane/TabPane.d.ts +9 -0
  142. package/dist/components/tab/tab-pane/TabPane.js +18 -0
  143. package/dist/components/tab/useTabScroll.d.ts +25 -0
  144. package/dist/components/tab/useTabScroll.js +151 -0
  145. package/dist/components/table-header-cell/TableHeaderCell.d.ts +5 -0
  146. package/dist/components/table-header-cell/TableHeaderCell.js +21 -0
  147. package/dist/forms/checkbox/Checkbox.css +134 -0
  148. package/dist/forms/checkbox/Checkbox.d.ts +15 -0
  149. package/dist/forms/checkbox/Checkbox.js +80 -0
  150. package/dist/forms/combobox/ComboBox.css +163 -0
  151. package/dist/forms/combobox/ComboBox.d.ts +28 -0
  152. package/dist/forms/combobox/ComboBox.js +169 -0
  153. package/dist/forms/radio/RadioButton.d.ts +14 -0
  154. package/dist/forms/radio/RadioButton.js +61 -0
  155. package/dist/forms/radio/RadioGroup.d.ts +12 -0
  156. package/dist/forms/radio/RadioGroup.js +50 -0
  157. package/dist/forms/radio/RadioGroupContext.d.ts +12 -0
  158. package/dist/forms/radio/RadioGroupContext.js +3 -0
  159. package/dist/forms/segment/Segment.d.ts +13 -0
  160. package/dist/forms/segment/Segment.js +59 -0
  161. package/dist/forms/segment/segment-control/SegmentControl.d.ts +14 -0
  162. package/dist/forms/segment/segment-control/SegmentControl.js +57 -0
  163. package/dist/forms/select/Select.css +160 -0
  164. package/dist/forms/select/Select.d.ts +26 -0
  165. package/dist/forms/select/Select.js +95 -0
  166. package/dist/forms/select/internal/HiddenInput.d.ts +8 -0
  167. package/dist/forms/select/internal/HiddenInput.js +15 -0
  168. package/dist/forms/select/internal/ListItem.d.ts +18 -0
  169. package/dist/forms/select/internal/ListItem.js +69 -0
  170. package/dist/forms/select/internal/SelectButton.d.ts +12 -0
  171. package/dist/forms/select/internal/SelectButton.js +49 -0
  172. package/dist/forms/select/internal/SelectButtonContent.d.ts +7 -0
  173. package/dist/forms/select/internal/SelectButtonContent.js +31 -0
  174. package/dist/forms/select/internal/SelectCheckbox.d.ts +4 -0
  175. package/dist/forms/select/internal/SelectCheckbox.js +13 -0
  176. package/dist/forms/select/internal/SelectLabel.d.ts +7 -0
  177. package/dist/forms/select/internal/SelectLabel.js +12 -0
  178. package/dist/forms/select/internal/SelectOptionsContainer.d.ts +17 -0
  179. package/dist/forms/select/internal/SelectOptionsContainer.js +103 -0
  180. package/dist/forms/select/internal/SelectScrollContainer.d.ts +8 -0
  181. package/dist/forms/select/internal/SelectScrollContainer.js +15 -0
  182. package/dist/forms/select/internal/SelectWrapper.d.ts +6 -0
  183. package/dist/forms/select/internal/SelectWrapper.js +12 -0
  184. package/dist/forms/select/internal/index.d.ts +6 -0
  185. package/dist/forms/select/internal/index.js +7 -0
  186. package/dist/forms/select/internal/utils.d.ts +7 -0
  187. package/dist/forms/select/internal/utils.js +30 -0
  188. package/dist/forms/select/select-option/SelectOption.d.ts +14 -0
  189. package/dist/forms/select/select-option/SelectOption.js +12 -0
  190. package/dist/forms/select/utils.d.ts +2 -0
  191. package/dist/forms/select/utils.js +12 -0
  192. package/dist/forms/slider/Slider.css +50 -0
  193. package/dist/forms/slider/Slider.d.ts +17 -0
  194. package/dist/forms/slider/Slider.js +93 -0
  195. package/dist/forms/switch/Switch.d.ts +12 -0
  196. package/dist/forms/switch/Switch.js +42 -0
  197. package/dist/forms/text-area/TextArea.css +14 -0
  198. package/dist/forms/text-area/TextArea.d.ts +22 -0
  199. package/dist/forms/text-area/TextArea.js +99 -0
  200. package/dist/forms/text-input/TextInput.d.ts +24 -0
  201. package/dist/forms/text-input/TextInput.js +74 -0
  202. package/dist/forms/time-picker/TimePicker.css +10 -0
  203. package/dist/forms/time-picker/TimePicker.d.ts +24 -0
  204. package/dist/forms/time-picker/TimePicker.js +140 -0
  205. package/dist/forms/time-picker/time-picker-dropdown/TimePickerDropdown.css +4 -0
  206. package/dist/forms/time-picker/time-picker-dropdown/TimePickerDropdown.d.ts +19 -0
  207. package/dist/forms/time-picker/time-picker-dropdown/TimePickerDropdown.js +208 -0
  208. package/dist/forms/time-picker/time-picker-dropdown/TimePickerInput.d.ts +9 -0
  209. package/dist/forms/time-picker/time-picker-dropdown/TimePickerInput.js +14 -0
  210. package/dist/index.d.ts +59 -0
  211. package/dist/index.js +60 -0
  212. package/dist/utils/index.d.ts +1 -0
  213. package/dist/utils/index.js +7 -0
  214. package/dist/utils/setRef.d.ts +1 -0
  215. package/dist/utils/setRef.js +5 -0
  216. package/dist/utils/types.d.ts +36 -0
  217. package/dist/utils/types.js +0 -0
  218. package/dist/utils/useControlled.d.ts +7 -0
  219. package/dist/utils/useControlled.js +20 -0
  220. package/dist/utils/useForkRef.d.ts +2 -0
  221. package/dist/utils/useForkRef.js +15 -0
  222. package/dist/utils/useId.d.ts +1 -0
  223. package/dist/utils/useId.js +20 -0
  224. package/dist/utils/useOnClickOutside.d.ts +2 -0
  225. package/dist/utils/useOnClickOutside.js +20 -0
  226. package/package.json +1 -1
@@ -0,0 +1,208 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import "./TimePickerDropdown.css";
3
+ import { IconCollapse, IconExpand } from "@festo-ui/react-icons";
4
+ import classnames from "classnames";
5
+ import { forwardRef, useEffect, useRef, useState } from "react";
6
+ import { Button } from "../../../components/button/Button.js";
7
+ import { useForkRef } from "../../../utils/useForkRef.js";
8
+ import { useOnClickOutside } from "../../../utils/useOnClickOutside.js";
9
+ import { TimePickerInput } from "./TimePickerInput.js";
10
+ const TimePickerDropdown = /*#__PURE__*/ forwardRef(({ timeFormat, date, onDateChange, showSeconds, minuteStepSize, range, onClose, style, labelRef }, ref)=>{
11
+ const innerRef = useRef(null);
12
+ const combinedRef = useForkRef(ref, innerRef);
13
+ const hoursRef = useRef(null);
14
+ const [tmpHours, setTmpHours] = useState(null);
15
+ const [tmpMinutes, setTmpMinutes] = useState(null);
16
+ const [tmpSeconds, setTmpSeconds] = useState(null);
17
+ const [innerDate, setInnerDate] = useState(date);
18
+ useOnClickOutside(labelRef, ()=>onClose(innerDate), innerRef);
19
+ const min = 0;
20
+ const hourMax = '12' === timeFormat ? 12 : 23;
21
+ const minutesSecondsMax = 59;
22
+ let innerMinuteStepSize = 1;
23
+ if (minuteStepSize) {
24
+ if (minuteStepSize > 1 && minuteStepSize < 60) innerMinuteStepSize = Math.round(minuteStepSize);
25
+ }
26
+ useEffect(()=>{
27
+ requestAnimationFrame(()=>{
28
+ hoursRef.current?.focus();
29
+ });
30
+ }, []);
31
+ function handleKeyPress(e) {
32
+ if ('Escape' === e.key || 'Enter' === e.key) onClose('Enter' === e.key ? innerDate : void 0);
33
+ }
34
+ function limitRange(newDate) {
35
+ if (range) {
36
+ if (newDate > range.maxValue) return range.minValue;
37
+ if (newDate < range.minValue) return range.maxValue;
38
+ }
39
+ return newDate;
40
+ }
41
+ function handleHourIncrement(increment) {
42
+ let newDate = new Date(innerDate);
43
+ newDate.setHours(innerDate.getHours() + increment);
44
+ newDate = limitRange(newDate);
45
+ setInnerDate(newDate);
46
+ onDateChange(newDate);
47
+ setTmpHours(null);
48
+ }
49
+ function handleHourChange(e) {
50
+ let newDate = new Date(innerDate);
51
+ const hour = +e.target.value;
52
+ newDate.setHours(Math.min(Math.max(hour, min), hourMax));
53
+ newDate = limitRange(newDate);
54
+ setInnerDate(newDate);
55
+ setTmpHours(newDate.getHours().toString());
56
+ }
57
+ function handleMinuteIncrement(increment) {
58
+ let newDate = new Date(innerDate);
59
+ newDate.setMinutes(innerDate.getMinutes() + increment);
60
+ newDate = limitRange(newDate);
61
+ setInnerDate(newDate);
62
+ onDateChange(newDate);
63
+ setTmpMinutes(null);
64
+ }
65
+ function handleMinuteChange(e) {
66
+ let newDate = new Date(innerDate);
67
+ const minute = +e.target.value;
68
+ newDate.setMinutes(Math.min(Math.max(minute, min), minutesSecondsMax));
69
+ newDate = limitRange(newDate);
70
+ setInnerDate(newDate);
71
+ setTmpMinutes(newDate.getMinutes().toString());
72
+ }
73
+ function handleSecondIncrement(increment) {
74
+ let newDate = new Date(innerDate);
75
+ newDate.setSeconds(innerDate.getSeconds() + increment);
76
+ newDate = limitRange(newDate);
77
+ setInnerDate(newDate);
78
+ onDateChange(newDate);
79
+ setTmpSeconds(null);
80
+ }
81
+ function handleSecondChange(e) {
82
+ let newDate = new Date(innerDate);
83
+ const seconds = +e.target.value;
84
+ newDate.setSeconds(Math.min(Math.max(seconds, min), minutesSecondsMax));
85
+ newDate = limitRange(newDate);
86
+ setInnerDate(newDate);
87
+ setTmpSeconds(newDate.getSeconds().toString());
88
+ }
89
+ const hours = '12' === timeFormat ? (innerDate.getHours() + 11) % 12 + 1 : innerDate.getHours();
90
+ function toggleAmPm() {
91
+ const newDate = new Date(innerDate);
92
+ const currentHours = innerDate.getHours();
93
+ if (currentHours >= 0 && currentHours < 12) newDate.setHours(currentHours + 12);
94
+ else newDate.setHours(currentHours - 12);
95
+ setInnerDate(newDate);
96
+ onDateChange(newDate);
97
+ }
98
+ const formatNumberWithLeadingZero = (number)=>(number < 10 ? '0' : '') + number;
99
+ return /*#__PURE__*/ jsxs("div", {
100
+ role: "dialog",
101
+ style: style,
102
+ ref: combinedRef,
103
+ className: classnames('fr-timepicker fwe-timepicker', {
104
+ 'fwe-timepicker-am-pm': '12' === timeFormat
105
+ }),
106
+ onKeyDown: (e)=>handleKeyPress(e),
107
+ tabIndex: -1,
108
+ children: [
109
+ /*#__PURE__*/ jsxs("div", {
110
+ className: "fwe-timepicker-spinners",
111
+ children: [
112
+ /*#__PURE__*/ jsxs("div", {
113
+ className: "fwe-timepicker-spinners-hours",
114
+ children: [
115
+ /*#__PURE__*/ jsx(Button, {
116
+ tertiary: true,
117
+ "aria-label": "hour up",
118
+ className: "fwe-dark",
119
+ onClick: ()=>handleHourIncrement(1),
120
+ iconOnly: true,
121
+ icon: /*#__PURE__*/ jsx(IconExpand, {})
122
+ }),
123
+ /*#__PURE__*/ jsx(TimePickerInput, {
124
+ "aria-label": "hours value",
125
+ min: min,
126
+ max: hourMax,
127
+ value: tmpHours ?? formatNumberWithLeadingZero(hours),
128
+ onInput: handleHourChange,
129
+ ref: hoursRef
130
+ }),
131
+ /*#__PURE__*/ jsx(Button, {
132
+ tertiary: true,
133
+ "aria-label": "hour down",
134
+ className: "fwe-dark",
135
+ onClick: ()=>handleHourIncrement(-1),
136
+ iconOnly: true,
137
+ icon: /*#__PURE__*/ jsx(IconCollapse, {})
138
+ })
139
+ ]
140
+ }),
141
+ /*#__PURE__*/ jsxs("div", {
142
+ className: "fwe-timepicker-spinners-minutes",
143
+ children: [
144
+ /*#__PURE__*/ jsx(Button, {
145
+ tertiary: true,
146
+ "aria-label": "minute up",
147
+ className: "fwe-dark",
148
+ onClick: ()=>handleMinuteIncrement(innerMinuteStepSize),
149
+ iconOnly: true,
150
+ icon: /*#__PURE__*/ jsx(IconExpand, {})
151
+ }),
152
+ /*#__PURE__*/ jsx(TimePickerInput, {
153
+ "aria-label": "minutes value",
154
+ min: min,
155
+ max: minutesSecondsMax,
156
+ value: tmpMinutes ?? formatNumberWithLeadingZero(innerDate.getMinutes()),
157
+ onInput: handleMinuteChange
158
+ }),
159
+ /*#__PURE__*/ jsx(Button, {
160
+ tertiary: true,
161
+ "aria-label": "minute down",
162
+ className: "fwe-dark",
163
+ onClick: ()=>handleMinuteIncrement(-innerMinuteStepSize),
164
+ iconOnly: true,
165
+ icon: /*#__PURE__*/ jsx(IconCollapse, {})
166
+ })
167
+ ]
168
+ }),
169
+ showSeconds && /*#__PURE__*/ jsxs("div", {
170
+ className: "fwe-timepicker-spinners-seconds",
171
+ children: [
172
+ /*#__PURE__*/ jsx(Button, {
173
+ tertiary: true,
174
+ "aria-label": "seconds up",
175
+ className: "fwe-dark",
176
+ onClick: ()=>handleSecondIncrement(1),
177
+ iconOnly: true,
178
+ icon: /*#__PURE__*/ jsx(IconExpand, {})
179
+ }),
180
+ /*#__PURE__*/ jsx(TimePickerInput, {
181
+ "aria-label": "seconds value",
182
+ min: min,
183
+ max: minutesSecondsMax,
184
+ value: tmpSeconds ?? formatNumberWithLeadingZero(innerDate.getSeconds()),
185
+ onInput: handleSecondChange
186
+ }),
187
+ /*#__PURE__*/ jsx(Button, {
188
+ tertiary: true,
189
+ "aria-label": "minute down",
190
+ className: "fwe-dark",
191
+ onClick: ()=>handleSecondIncrement(-1),
192
+ iconOnly: true,
193
+ icon: /*#__PURE__*/ jsx(IconCollapse, {})
194
+ })
195
+ ]
196
+ })
197
+ ]
198
+ }),
199
+ '12' === timeFormat && /*#__PURE__*/ jsx("button", {
200
+ onClick: toggleAmPm,
201
+ type: "button",
202
+ className: "fwe-btn fwe-ml-m",
203
+ children: innerDate.getHours() >= 12 ? 'PM' : 'AM'
204
+ })
205
+ ]
206
+ });
207
+ });
208
+ export { TimePickerDropdown };
@@ -0,0 +1,9 @@
1
+ interface TimePickerInputProps {
2
+ min: number;
3
+ value: string | number;
4
+ max: number;
5
+ onInput: React.FormEventHandler<HTMLInputElement>;
6
+ 'aria-label': string;
7
+ }
8
+ export declare const TimePickerInput: (props: TimePickerInputProps & import("react").RefAttributes<HTMLInputElement>) => React.ReactElement | null;
9
+ export {};
@@ -0,0 +1,14 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ const TimePickerInput = /*#__PURE__*/ forwardRef(({ min, max, value, onInput, 'aria-label': ariaLabel }, ref)=>/*#__PURE__*/ jsx("input", {
4
+ "aria-label": ariaLabel,
5
+ className: "fwe-timepicker-hide-spinners",
6
+ type: "number",
7
+ min: min,
8
+ step: 1,
9
+ value: value,
10
+ max: max,
11
+ onInput: onInput,
12
+ ref: ref
13
+ }));
14
+ export { TimePickerInput };
@@ -0,0 +1,59 @@
1
+ export { Accordion, type AccordionProps, } from './components/accordion/Accordion';
2
+ export { AccordionHeader } from './components/accordion/accordion-header/AccordionHeader';
3
+ export { AccordionItem, type AccordionItemProps, } from './components/accordion/accordion-item/AccordionItem';
4
+ export { AccordionItemBody } from './components/accordion/accordion-item/accordion-item-body/AccordionItemBody';
5
+ export { AccordionItemHeader } from './components/accordion/accordion-item/accordion-item-header/AccordionItemHeader';
6
+ export { BottomSheet, type BottomSheetProps, } from './components/bottom-sheet/BottomSheet';
7
+ export { Breadcrumb, type BreadcrumbProps, } from './components/breadcrumb/Breadcrumb';
8
+ export { Button, type ButtonProps } from './components/button/Button';
9
+ export { Card, type CardProps } from './components/card/Card';
10
+ export { CardBody, type CardBodyProps } from './components/card/CardBody';
11
+ export { CardHeader, type CardHeaderProps } from './components/card/CardHeader';
12
+ export { CardNotification, type CardNotificationProps, } from './components/card/CardNotification';
13
+ export { Chip, type ChipProps, ChipType } from './components/chips/chip/Chip';
14
+ export { ChipContainer, type ChipContainerProps, } from './components/chips/chip-container/ChipContainer';
15
+ export { LoadingIndicator, type LoadingIndicatorProps, } from './components/loading-indicator/LoadingIndicator';
16
+ export { MobileFlyout, type MobileFlyoutProps, } from './components/mobile-flyout/MobileFlyout';
17
+ export { MobileFlyoutItem, type MobileFlyoutItemBaseProps, type MobileFlyoutItemProps, } from './components/mobile-flyout/mobile-flyout-item/MobileFlyoutItem';
18
+ export { MobileFlyoutPage, type MobileFlyoutPageProps, } from './components/mobile-flyout/mobile-flyout-page/MobileFlyoutPage';
19
+ export { AlertModal, type AlertModalProps, } from './components/modals/AlertModal';
20
+ export { ConfirmModal, type ConfirmModalProps, } from './components/modals/ConfirmModal';
21
+ export { CustomModal, type CustomModalProps, } from './components/modals/CustomModal';
22
+ export { ImageGallery, type ImageGalleryItemData, type ImageGalleryProps, } from './components/modals/image-gallery/ImageGallery';
23
+ export { type ImageDescriptiveContent, ImageGalleryContent, type ImageGalleryContentProps, } from './components/modals/image-gallery/ImageGalleryContent';
24
+ export { ImageGallerySwiper, type ImageGallerySwiperProps, } from './components/modals/image-gallery/ImageGallerySwiper';
25
+ export { ImageGalleryThumbsSwiper, type ImageGalleryThumbsSwiperProps, } from './components/modals/image-gallery/ImageGalleryThumbsSwiper';
26
+ export { Prompt, type PromptProps } from './components/modals/Prompt';
27
+ export { Pagination, type PaginationProps, type PaginationType, } from './components/pagination/Pagination';
28
+ export { Legend, type LegendProps, type PopoverLegendItem, } from './components/popovers/legend/Legend';
29
+ export { Popover, type PopoverProps, } from './components/popovers/popover/Popover';
30
+ export { PopoverMenu, type PopoverMenuProps, } from './components/popovers/popover-menu/PopoverMenu';
31
+ export { PopoverMenuContext } from './components/popovers/popover-menu/PopoverMenuContext';
32
+ export { PopoverMenuItem, type PopoverMenuItemProps, } from './components/popovers/popover-menu-item/PopoverMenuItem';
33
+ export { Tooltip, type TooltipProps, } from './components/popovers/tooltip/Tooltip';
34
+ export { Progress, type ProgressProps } from './components/progress/Progress';
35
+ export { SearchInput, type SearchInputProps, } from './components/search-input/SearchInput';
36
+ export { SearchSuggestion } from './components/search-input/SearchSuggestion';
37
+ export { Snackbar, type SnackbarConfig, type SnackbarData, type SnackbarProps, } from './components/snackbar/Snackbar';
38
+ export { addSnackbar, SnackbarProvider, type SnackbarProviderProps, } from './components/snackbar/SnackbarProvider';
39
+ export { useSnackbar } from './components/snackbar/useSnackbar';
40
+ export { StepperHorizontal, type StepperHorizontalProps, } from './components/stepper-horizontal/StepperHorizontal';
41
+ export { StepHorizontal, type StepHorizontalProps, } from './components/stepper-horizontal/step-horizontal/StepHorizontal';
42
+ export { StepperVertical, type StepperVerticalProps, } from './components/stepper-vertical/StepperVertical';
43
+ export { StepVertical, type StepVerticalProps, } from './components/stepper-vertical/step-vertical/StepVertical';
44
+ export { type TabItemAppearance, Tabs, type TabsConfiguration, type TabsProps, type TabViewType, } from './components/tab/Tabs';
45
+ export { TabPane, type TabPaneProps } from './components/tab/tab-pane/TabPane';
46
+ export { TableHeaderCell, type TableHeaderCellProps, } from './components/table-header-cell/TableHeaderCell';
47
+ export { Checkbox, type CheckboxProps } from './forms/checkbox/Checkbox';
48
+ export { ComboBox, type ComboBoxOption, type ComboBoxProps, } from './forms/combobox/ComboBox';
49
+ export { RadioButton, type RadioButtonProps, } from './forms/radio/RadioButton';
50
+ export { RadioGroup, type RadioGroupProps } from './forms/radio/RadioGroup';
51
+ export { Segment, type SegmentConfiguration, type SegmentProps, } from './forms/segment/Segment';
52
+ export { SegmentControl, type SegmentControlProps, } from './forms/segment/segment-control/SegmentControl';
53
+ export { Select, type SelectProps } from './forms/select/Select';
54
+ export { SelectOption, type SelectOptionProps, type SelectOptionType, } from './forms/select/select-option/SelectOption';
55
+ export { Slider, type SliderProps } from './forms/slider/Slider';
56
+ export { Switch, type SwitchProps } from './forms/switch/Switch';
57
+ export { TextArea, type TextAreaProps } from './forms/text-area/TextArea';
58
+ export { TextInput, type TextInputProps } from './forms/text-input/TextInput';
59
+ export { TimePicker, type TimePickerOptions, type TimePickerProps, } from './forms/time-picker/TimePicker';
package/dist/index.js ADDED
@@ -0,0 +1,60 @@
1
+ import { Accordion } from "./components/accordion/Accordion.js";
2
+ import { AccordionHeader } from "./components/accordion/accordion-header/AccordionHeader.js";
3
+ import { AccordionItem } from "./components/accordion/accordion-item/AccordionItem.js";
4
+ import { AccordionItemBody } from "./components/accordion/accordion-item/accordion-item-body/AccordionItemBody.js";
5
+ import { AccordionItemHeader } from "./components/accordion/accordion-item/accordion-item-header/AccordionItemHeader.js";
6
+ import { BottomSheet } from "./components/bottom-sheet/BottomSheet.js";
7
+ import { Breadcrumb } from "./components/breadcrumb/Breadcrumb.js";
8
+ import { Button } from "./components/button/Button.js";
9
+ import { Card } from "./components/card/Card.js";
10
+ import { CardBody } from "./components/card/CardBody.js";
11
+ import { CardHeader } from "./components/card/CardHeader.js";
12
+ import { CardNotification } from "./components/card/CardNotification.js";
13
+ import { Chip, ChipType } from "./components/chips/chip/Chip.js";
14
+ import { ChipContainer } from "./components/chips/chip-container/ChipContainer.js";
15
+ import { LoadingIndicator } from "./components/loading-indicator/LoadingIndicator.js";
16
+ import { MobileFlyout } from "./components/mobile-flyout/MobileFlyout.js";
17
+ import { MobileFlyoutItem } from "./components/mobile-flyout/mobile-flyout-item/MobileFlyoutItem.js";
18
+ import { MobileFlyoutPage } from "./components/mobile-flyout/mobile-flyout-page/MobileFlyoutPage.js";
19
+ import { AlertModal } from "./components/modals/AlertModal.js";
20
+ import { ConfirmModal } from "./components/modals/ConfirmModal.js";
21
+ import { CustomModal } from "./components/modals/CustomModal.js";
22
+ import { ImageGallery } from "./components/modals/image-gallery/ImageGallery.js";
23
+ import { ImageGalleryContent } from "./components/modals/image-gallery/ImageGalleryContent.js";
24
+ import { ImageGallerySwiper } from "./components/modals/image-gallery/ImageGallerySwiper.js";
25
+ import { ImageGalleryThumbsSwiper } from "./components/modals/image-gallery/ImageGalleryThumbsSwiper.js";
26
+ import { Prompt } from "./components/modals/Prompt.js";
27
+ import { Pagination } from "./components/pagination/Pagination.js";
28
+ import { Legend } from "./components/popovers/legend/Legend.js";
29
+ import { Popover } from "./components/popovers/popover/Popover.js";
30
+ import { PopoverMenu } from "./components/popovers/popover-menu/PopoverMenu.js";
31
+ import { PopoverMenuContext } from "./components/popovers/popover-menu/PopoverMenuContext.js";
32
+ import { PopoverMenuItem } from "./components/popovers/popover-menu-item/PopoverMenuItem.js";
33
+ import { Tooltip } from "./components/popovers/tooltip/Tooltip.js";
34
+ import { Progress } from "./components/progress/Progress.js";
35
+ import { SearchInput } from "./components/search-input/SearchInput.js";
36
+ import { SearchSuggestion } from "./components/search-input/SearchSuggestion.js";
37
+ import { Snackbar } from "./components/snackbar/Snackbar.js";
38
+ import { SnackbarProvider, addSnackbar } from "./components/snackbar/SnackbarProvider.js";
39
+ import { useSnackbar } from "./components/snackbar/useSnackbar.js";
40
+ import { StepperHorizontal } from "./components/stepper-horizontal/StepperHorizontal.js";
41
+ import { StepHorizontal } from "./components/stepper-horizontal/step-horizontal/StepHorizontal.js";
42
+ import { StepperVertical } from "./components/stepper-vertical/StepperVertical.js";
43
+ import { StepVertical } from "./components/stepper-vertical/step-vertical/StepVertical.js";
44
+ import { Tabs } from "./components/tab/Tabs.js";
45
+ import { TabPane } from "./components/tab/tab-pane/TabPane.js";
46
+ import { TableHeaderCell } from "./components/table-header-cell/TableHeaderCell.js";
47
+ import { Checkbox } from "./forms/checkbox/Checkbox.js";
48
+ import { ComboBox } from "./forms/combobox/ComboBox.js";
49
+ import { RadioButton } from "./forms/radio/RadioButton.js";
50
+ import { RadioGroup } from "./forms/radio/RadioGroup.js";
51
+ import { Segment } from "./forms/segment/Segment.js";
52
+ import { SegmentControl } from "./forms/segment/segment-control/SegmentControl.js";
53
+ import { Select } from "./forms/select/Select.js";
54
+ import { SelectOption } from "./forms/select/select-option/SelectOption.js";
55
+ import { Slider } from "./forms/slider/Slider.js";
56
+ import { Switch } from "./forms/switch/Switch.js";
57
+ import { TextArea } from "./forms/text-area/TextArea.js";
58
+ import { TextInput } from "./forms/text-input/TextInput.js";
59
+ import { TimePicker } from "./forms/time-picker/TimePicker.js";
60
+ export { Accordion, AccordionHeader, AccordionItem, AccordionItemBody, AccordionItemHeader, AlertModal, BottomSheet, Breadcrumb, Button, Card, CardBody, CardHeader, CardNotification, Checkbox, Chip, ChipContainer, ChipType, ComboBox, ConfirmModal, CustomModal, ImageGallery, ImageGalleryContent, ImageGallerySwiper, ImageGalleryThumbsSwiper, Legend, LoadingIndicator, MobileFlyout, MobileFlyoutItem, MobileFlyoutPage, Pagination, Popover, PopoverMenu, PopoverMenuContext, PopoverMenuItem, Progress, Prompt, RadioButton, RadioGroup, SearchInput, SearchSuggestion, Segment, SegmentControl, Select, SelectOption, Slider, Snackbar, SnackbarProvider, StepHorizontal, StepVertical, StepperHorizontal, StepperVertical, Switch, TabPane, TableHeaderCell, Tabs, TextArea, TextInput, TimePicker, Tooltip, addSnackbar, useSnackbar };
@@ -0,0 +1 @@
1
+ export declare const provideDiv: () => HTMLDivElement;
@@ -0,0 +1,7 @@
1
+ const provideDiv = ()=>{
2
+ const div = document.createElement('div');
3
+ const id = Math.floor(1000 * Math.random());
4
+ div.setAttribute('id', `${id}`);
5
+ return div;
6
+ };
7
+ export { provideDiv };
@@ -0,0 +1 @@
1
+ export declare function setRef<T>(ref: React.ForwardedRef<T> | undefined, value: any): void;
@@ -0,0 +1,5 @@
1
+ function setRef(ref, value) {
2
+ if ('function' == typeof ref) ref(value);
3
+ else if (ref) ref.current = value;
4
+ }
5
+ export { setRef };
@@ -0,0 +1,36 @@
1
+ import type { CSSProperties } from 'react';
2
+ export interface ComponentBase {
3
+ className?: string;
4
+ style?: CSSProperties;
5
+ 'data-testid'?: string;
6
+ id?: string;
7
+ }
8
+ export interface ClassNameProps {
9
+ className?: string;
10
+ }
11
+ export interface ClassNamePropsWithChildren extends ClassNameProps {
12
+ children?: React.ReactNode;
13
+ }
14
+ export interface Image {
15
+ src: string;
16
+ alt: string;
17
+ aspectRatio: '3/2' | '16/9';
18
+ }
19
+ export interface SelectConfiguration {
20
+ hideLabel?: boolean;
21
+ contentWidth?: string;
22
+ scroll?: {
23
+ enabled?: boolean;
24
+ viewportSize?: number;
25
+ };
26
+ }
27
+ export type PolymorphicRef<C extends React.ElementType> = React.ComponentPropsWithRef<C>['ref'];
28
+ type AsProp<C extends React.ElementType> = {
29
+ component?: C;
30
+ };
31
+ type PropsToOmit<C extends React.ElementType, P> = keyof (AsProp<C> & P);
32
+ type PolymorphicComponentProp<C extends React.ElementType, Props = object> = React.PropsWithChildren<Props & AsProp<C>> & Omit<React.ComponentPropsWithoutRef<C>, PropsToOmit<C, Props>>;
33
+ export type PolymorphicComponentPropWithRef<C extends React.ElementType, Props = object> = PolymorphicComponentProp<C, Props> & {
34
+ ref?: PolymorphicRef<C>;
35
+ };
36
+ export {};
File without changes
@@ -0,0 +1,7 @@
1
+ import { type Dispatch, type SetStateAction } from 'react';
2
+ export interface UseControlledProps<T> {
3
+ controlled: T | undefined;
4
+ default: T;
5
+ onChange?: (value: T) => void;
6
+ }
7
+ export declare function useControlled<T>({ controlled, default: defaultValue, onChange, }: UseControlledProps<T>): [T | undefined, Dispatch<SetStateAction<T>>];
@@ -0,0 +1,20 @@
1
+ import { useCallback, useRef, useState } from "react";
2
+ function useControlled({ controlled, default: defaultValue, onChange }) {
3
+ const { current: isControlled } = useRef(void 0 !== controlled);
4
+ const [valueState, setValue] = useState(defaultValue);
5
+ const value = isControlled ? controlled : valueState;
6
+ const setValueIfUncontrolled = useCallback((newValue)=>{
7
+ if (!isControlled) setValue(newValue);
8
+ const setter = newValue;
9
+ const onChangeValue = 'function' == typeof newValue ? setter(controlled) : newValue;
10
+ onChange?.(onChangeValue);
11
+ }, [
12
+ controlled,
13
+ onChange
14
+ ]);
15
+ return [
16
+ value,
17
+ setValueIfUncontrolled
18
+ ];
19
+ }
20
+ export { useControlled };
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare function useForkRef<T>(refA: React.Ref<T> | null | undefined, refB: React.Ref<T> | null | undefined): React.RefCallback<T> | null;
@@ -0,0 +1,15 @@
1
+ import react from "react";
2
+ import { setRef } from "./setRef.js";
3
+ function useForkRef(refA, refB) {
4
+ return react.useMemo(()=>{
5
+ if (null == refA && (null == refB || void 0 === refB)) return null;
6
+ return (instance)=>{
7
+ setRef(refA, instance);
8
+ setRef(refB, instance);
9
+ };
10
+ }, [
11
+ refA,
12
+ refB
13
+ ]);
14
+ }
15
+ export { useForkRef };
@@ -0,0 +1 @@
1
+ export declare function useId(idInput?: string): string | undefined;
@@ -0,0 +1,20 @@
1
+ import react from "react";
2
+ const maybeReactUseId = react["useId"];
3
+ let nextId = 0;
4
+ function useLegacyId() {
5
+ const [id, setId] = react.useState(void 0);
6
+ react.useEffect(()=>{
7
+ if (null == id) {
8
+ nextId += 1;
9
+ setId(`fr-${nextId}`);
10
+ }
11
+ }, [
12
+ id
13
+ ]);
14
+ return id;
15
+ }
16
+ function useId(idInput) {
17
+ if (null != idInput) return idInput;
18
+ return maybeReactUseId ? maybeReactUseId() : useLegacyId();
19
+ }
20
+ export { useId };
@@ -0,0 +1,2 @@
1
+ import { type RefObject } from 'react';
2
+ export declare function useOnClickOutside(ref: RefObject<HTMLElement>, callback: (event: MouseEvent | TouchEvent) => void, ref2?: RefObject<HTMLElement>): void;
@@ -0,0 +1,20 @@
1
+ import { useEffect } from "react";
2
+ function useOnClickOutside(ref, callback, ref2) {
3
+ useEffect(()=>{
4
+ const listener = (event)=>{
5
+ if (!ref.current || ref.current.contains(event.target) || ref2 && (!ref2.current || ref2.current.contains(event.target))) return;
6
+ callback(event);
7
+ };
8
+ document.addEventListener('mousedown', listener, true);
9
+ document.addEventListener('touchstart', listener, true);
10
+ return ()=>{
11
+ document.removeEventListener('mousedown', listener, true);
12
+ document.removeEventListener('touchstart', listener, true);
13
+ };
14
+ }, [
15
+ ref,
16
+ ref2,
17
+ callback
18
+ ]);
19
+ }
20
+ export { useOnClickOutside };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@festo-ui/react",
3
- "version": "9.0.1-dev.768",
3
+ "version": "9.0.1-dev.769",
4
4
  "author": "Festo UI (styleguide@festo.com)",
5
5
  "copyright": "Copyright (c) 2025 Festo SE & Co. KG. All rights reserved.",
6
6
  "license": "apache-2.0",