@festo-ui/react 9.0.1-dev.783 → 9.0.1-dev.784

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 (209) 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 +87 -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 +5 -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 +7 -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 +16 -0
  67. package/dist/components/modals/Prompt.js +58 -0
  68. package/dist/components/modals/image-gallery/ImageGallery.css +833 -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 +10 -0
  92. package/dist/components/popovers/legend/Legend.js +22 -0
  93. package/dist/components/popovers/popover/Popover.css +8 -0
  94. package/dist/components/popovers/popover/Popover.d.ts +19 -0
  95. package/dist/components/popovers/popover/Popover.js +82 -0
  96. package/dist/components/popovers/popover-menu/PopoverMenu.d.ts +7 -0
  97. package/dist/components/popovers/popover-menu/PopoverMenu.js +31 -0
  98. package/dist/components/popovers/popover-menu/PopoverMenuContext.d.ts +4 -0
  99. package/dist/components/popovers/popover-menu/PopoverMenuContext.js +5 -0
  100. package/dist/components/popovers/popover-menu/popover-menu-item/PopoverMenuItem.d.ts +7 -0
  101. package/dist/components/popovers/popover-menu/popover-menu-item/PopoverMenuItem.js +27 -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 +25 -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 +193 -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 +124 -0
  151. package/dist/forms/combobox/ComboBox.d.ts +28 -0
  152. package/dist/forms/combobox/ComboBox.js +175 -0
  153. package/dist/forms/multi-select/MultiSelect.d.ts +20 -0
  154. package/dist/forms/multi-select/MultiSelect.js +191 -0
  155. package/dist/forms/multi-select/MultiSelect.module.js +8 -0
  156. package/dist/forms/multi-select/MultiSelect_module.css +13 -0
  157. package/dist/forms/radio/RadioButton.d.ts +14 -0
  158. package/dist/forms/radio/RadioButton.js +61 -0
  159. package/dist/forms/radio/RadioGroup.d.ts +12 -0
  160. package/dist/forms/radio/RadioGroup.js +50 -0
  161. package/dist/forms/radio/RadioGroupContext.d.ts +12 -0
  162. package/dist/forms/radio/RadioGroupContext.js +3 -0
  163. package/dist/forms/segment/Segment.d.ts +13 -0
  164. package/dist/forms/segment/Segment.js +58 -0
  165. package/dist/forms/segment/segment-control/SegmentControl.d.ts +14 -0
  166. package/dist/forms/segment/segment-control/SegmentControl.js +57 -0
  167. package/dist/forms/select/Select.d.ts +25 -0
  168. package/dist/forms/select/Select.js +92 -0
  169. package/dist/forms/select/internal/SelectButton.d.ts +0 -0
  170. package/dist/forms/select/internal/SelectButton.js +0 -0
  171. package/dist/forms/select/internal/SelectButtonContent.d.ts +0 -0
  172. package/dist/forms/select/internal/SelectButtonContent.js +0 -0
  173. package/dist/forms/select/internal/SelectOptionsContainer.d.ts +0 -0
  174. package/dist/forms/select/internal/SelectOptionsContainer.js +0 -0
  175. package/dist/forms/slider/Slider.css +50 -0
  176. package/dist/forms/slider/Slider.d.ts +17 -0
  177. package/dist/forms/slider/Slider.js +93 -0
  178. package/dist/forms/switch/Switch.d.ts +12 -0
  179. package/dist/forms/switch/Switch.js +42 -0
  180. package/dist/forms/text-area/TextArea.css +14 -0
  181. package/dist/forms/text-area/TextArea.d.ts +22 -0
  182. package/dist/forms/text-area/TextArea.js +99 -0
  183. package/dist/forms/text-input/TextInput.d.ts +24 -0
  184. package/dist/forms/text-input/TextInput.js +74 -0
  185. package/dist/forms/time-picker/TimePicker.css +10 -0
  186. package/dist/forms/time-picker/TimePicker.d.ts +24 -0
  187. package/dist/forms/time-picker/TimePicker.js +123 -0
  188. package/dist/forms/time-picker/time-picker-dropdown/TimePickerDropdown.css +4 -0
  189. package/dist/forms/time-picker/time-picker-dropdown/TimePickerDropdown.d.ts +19 -0
  190. package/dist/forms/time-picker/time-picker-dropdown/TimePickerDropdown.js +208 -0
  191. package/dist/forms/time-picker/time-picker-dropdown/TimePickerInput.d.ts +9 -0
  192. package/dist/forms/time-picker/time-picker-dropdown/TimePickerInput.js +14 -0
  193. package/dist/index.d.ts +60 -0
  194. package/dist/index.js +60 -0
  195. package/dist/utils/index.d.ts +1 -0
  196. package/dist/utils/index.js +7 -0
  197. package/dist/utils/setRef.d.ts +1 -0
  198. package/dist/utils/setRef.js +5 -0
  199. package/dist/utils/types.d.ts +36 -0
  200. package/dist/utils/types.js +0 -0
  201. package/dist/utils/useControlled.d.ts +7 -0
  202. package/dist/utils/useControlled.js +20 -0
  203. package/dist/utils/useForkRef.d.ts +2 -0
  204. package/dist/utils/useForkRef.js +15 -0
  205. package/dist/utils/useId.d.ts +1 -0
  206. package/dist/utils/useId.js +20 -0
  207. package/dist/utils/useOnClickOutside.d.ts +2 -0
  208. package/dist/utils/useOnClickOutside.js +20 -0
  209. package/package.json +1 -1
@@ -0,0 +1,50 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import classnames from "classnames";
3
+ import { forwardRef, useCallback, useMemo } from "react";
4
+ import { useControlled } from "../../utils/useControlled.js";
5
+ import { useId } from "../../utils/useId.js";
6
+ import { RadioGroupContext } from "./RadioGroupContext.js";
7
+ const RadioGroup = /*#__PURE__*/ forwardRef(({ children, className, onValueChange, value: controlledValue, defaultValue, name, labelPosition, large, disabled, required, ...props }, ref)=>{
8
+ const contextName = useId(name);
9
+ const [value, setValue] = useControlled({
10
+ controlled: controlledValue,
11
+ default: defaultValue
12
+ });
13
+ const handleValueChange = useCallback((newValue)=>{
14
+ onValueChange?.(newValue);
15
+ setValue(newValue);
16
+ }, [
17
+ onValueChange,
18
+ setValue
19
+ ]);
20
+ const contextValue = useMemo(()=>({
21
+ labelPosition,
22
+ large,
23
+ disabled,
24
+ required,
25
+ handleValueChange,
26
+ value,
27
+ isControlled: void 0 !== controlledValue,
28
+ name: contextName
29
+ }), [
30
+ controlledValue,
31
+ handleValueChange,
32
+ labelPosition,
33
+ large,
34
+ disabled,
35
+ required,
36
+ value,
37
+ contextName
38
+ ]);
39
+ return /*#__PURE__*/ jsx(RadioGroupContext.Provider, {
40
+ value: contextValue,
41
+ children: /*#__PURE__*/ jsx("div", {
42
+ ref: ref,
43
+ className: classnames('fwe-radio-group', className),
44
+ role: "radiogroup",
45
+ ...props,
46
+ children: children
47
+ })
48
+ });
49
+ });
50
+ export { RadioGroup };
@@ -0,0 +1,12 @@
1
+ interface ContextProps {
2
+ name: string;
3
+ value: string;
4
+ isControlled: boolean;
5
+ labelPosition: 'before' | 'after' | 'below';
6
+ large: boolean;
7
+ handleValueChange: (value: string) => void;
8
+ disabled: boolean;
9
+ required: boolean;
10
+ }
11
+ export declare const RadioGroupContext: import("react").Context<Partial<ContextProps>>;
12
+ export {};
@@ -0,0 +1,3 @@
1
+ import { createContext } from "react";
2
+ const RadioGroupContext = /*#__PURE__*/ createContext({});
3
+ export { RadioGroupContext };
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import type { ClassNamePropsWithChildren } from '../../utils/types';
3
+ export interface SegmentConfiguration {
4
+ readonly outline?: boolean;
5
+ readonly iconOnly?: boolean;
6
+ }
7
+ export interface SegmentProps extends ClassNamePropsWithChildren {
8
+ readonly legend: string;
9
+ readonly config?: SegmentConfiguration;
10
+ readonly onChange?: (event: React.ChangeEvent<HTMLInputElement>, value: any) => void;
11
+ readonly value?: any;
12
+ }
13
+ export declare function Segment(props: SegmentProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,58 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import classnames from "classnames";
3
+ import react from "react";
4
+ import { useControlled } from "../../utils/useControlled.js";
5
+ const defaultConfig = {
6
+ outline: true,
7
+ iconOnly: true
8
+ };
9
+ function Segment(props) {
10
+ const { children, legend, config, onChange, className, value: valueProps } = props;
11
+ const innerConfig = {
12
+ ...defaultConfig,
13
+ ...config
14
+ };
15
+ let useIcon = false;
16
+ let useIconAndText = false;
17
+ let tmpValue = '';
18
+ react.Children.forEach(children, (child, index)=>{
19
+ if (!/*#__PURE__*/ react.isValidElement(child)) return null;
20
+ if (0 === index && null !== child.props.icon) if (innerConfig.iconOnly) useIcon = true;
21
+ else useIconAndText = true;
22
+ if (child.props.checked) tmpValue = child.props.value;
23
+ return null;
24
+ });
25
+ const [value, setValue] = useControlled({
26
+ controlled: valueProps,
27
+ default: tmpValue
28
+ });
29
+ const handleChange = (event, _value)=>{
30
+ if (onChange) onChange(event, _value);
31
+ setValue(_value);
32
+ };
33
+ return /*#__PURE__*/ jsxs("fieldset", {
34
+ className: classnames('fwe-segment', {
35
+ 'fwe-segment-outline': innerConfig.outline,
36
+ 'fwe-segment-icon': useIcon,
37
+ 'fwe-segment-icon-text': useIconAndText
38
+ }, className),
39
+ children: [
40
+ /*#__PURE__*/ jsx("legend", {
41
+ className: "fwe-sr-only fwe-d-inline-block",
42
+ children: legend
43
+ }),
44
+ /*#__PURE__*/ jsx("div", {
45
+ className: "fwe-segment-group",
46
+ children: react.Children.map(children, (child)=>{
47
+ if (!/*#__PURE__*/ react.isValidElement(child)) return null;
48
+ return /*#__PURE__*/ react.cloneElement(child, {
49
+ onChange: handleChange,
50
+ iconOnly: innerConfig.iconOnly,
51
+ checked: child.props.value === value
52
+ });
53
+ })
54
+ })
55
+ ]
56
+ });
57
+ }
58
+ export { Segment };
@@ -0,0 +1,14 @@
1
+ import type React from 'react';
2
+ import type { ClassNameProps } from '../../../utils/types';
3
+ export interface SegmentControlProps extends ClassNameProps {
4
+ readonly label: string;
5
+ readonly name: string;
6
+ readonly value: any;
7
+ readonly checked?: boolean;
8
+ readonly disabled?: boolean;
9
+ readonly icon?: React.ReactNode;
10
+ readonly onChange?: (event: React.ChangeEvent<HTMLInputElement>, value: any) => void;
11
+ readonly id?: string;
12
+ readonly iconOnly?: boolean;
13
+ }
14
+ export declare function SegmentControl(props: SegmentControlProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,57 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import classnames from "classnames";
3
+ import { useRef } from "react";
4
+ import { IconWrapper } from "../../../components/icon-wrapper/IconWrapper.js";
5
+ function SegmentControl(props) {
6
+ const { label, checked, disabled, name, value, icon, onChange, id, className, iconOnly } = props;
7
+ const componentId = useRef(id ?? (Math.random() * Date.now()).toString().replace('.', '-'));
8
+ let viewMode = 'text';
9
+ if (icon) viewMode = iconOnly ? 'icon' : 'icon-text';
10
+ const handleChange = (event)=>{
11
+ if (onChange) onChange(event, value);
12
+ };
13
+ return /*#__PURE__*/ jsxs(Fragment, {
14
+ children: [
15
+ /*#__PURE__*/ jsx("input", {
16
+ className: "fwe-segment-input",
17
+ type: "radio",
18
+ id: componentId.current,
19
+ name: name,
20
+ value: value,
21
+ checked: checked,
22
+ disabled: disabled,
23
+ onChange: (e)=>handleChange(e)
24
+ }),
25
+ /*#__PURE__*/ jsxs("label", {
26
+ className: classnames('fwe-segment-label', className),
27
+ htmlFor: componentId.current,
28
+ children: [
29
+ 'icon' === viewMode && /*#__PURE__*/ jsxs(Fragment, {
30
+ children: [
31
+ /*#__PURE__*/ jsx("span", {
32
+ className: "fwe-sr-only",
33
+ children: label
34
+ }),
35
+ /*#__PURE__*/ jsx(IconWrapper, {
36
+ icon: icon
37
+ })
38
+ ]
39
+ }),
40
+ 'text' === viewMode && label,
41
+ 'icon-text' === viewMode && /*#__PURE__*/ jsxs(Fragment, {
42
+ children: [
43
+ /*#__PURE__*/ jsx(IconWrapper, {
44
+ icon: icon
45
+ }),
46
+ /*#__PURE__*/ jsx("span", {
47
+ className: "fwe-ml-xxs",
48
+ children: label
49
+ })
50
+ ]
51
+ })
52
+ ]
53
+ })
54
+ ]
55
+ });
56
+ }
57
+ export { SegmentControl };
@@ -0,0 +1,25 @@
1
+ import type { ReactNode } from 'react';
2
+ import { type Ref } from 'react';
3
+ import type { ComponentBase } from '../../utils/types';
4
+ export interface SelectOption<T> {
5
+ readonly data: T;
6
+ readonly label: ReactNode;
7
+ readonly disabled?: boolean;
8
+ }
9
+ export interface SelectProps<T> extends ComponentBase {
10
+ readonly defaultValue?: T;
11
+ readonly value?: T;
12
+ readonly label?: string;
13
+ readonly options?: SelectOption<T>[];
14
+ readonly onChange?: (value: T) => void;
15
+ readonly disabled?: boolean;
16
+ readonly name?: string;
17
+ readonly hint?: string;
18
+ readonly error?: string;
19
+ readonly placeholder?: string;
20
+ }
21
+ declare function SelectComponent<T>({ defaultValue, value: controlled, label, options, onChange, disabled, name, id: idProp, hint, error, placeholder, className, ...props }: SelectProps<T>, ref: Ref<HTMLDivElement>): import("react/jsx-runtime").JSX.Element;
22
+ export declare const Select: <T>(props: SelectProps<T> & {
23
+ ref?: Ref<HTMLDivElement>;
24
+ }) => ReturnType<typeof SelectComponent>;
25
+ export {};
@@ -0,0 +1,92 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Listbox, ListboxButton, ListboxOption, ListboxOptions } from "@headlessui/react";
3
+ import classnames from "classnames";
4
+ import { forwardRef, useMemo } from "react";
5
+ import { useControlled } from "../../utils/useControlled.js";
6
+ import { useId } from "../../utils/useId.js";
7
+ function SelectComponent({ defaultValue = '', value: controlled, label, options = [], onChange, disabled, name, id: idProp, hint, error, placeholder, className, ...props }, ref) {
8
+ const id = useId(idProp);
9
+ const labelId = `${id}-label`;
10
+ const [value, setValue] = useControlled({
11
+ controlled,
12
+ default: defaultValue,
13
+ onChange
14
+ });
15
+ const selectedOption = useMemo(()=>options.find((option)=>option.data === value && !option.disabled), [
16
+ options,
17
+ value
18
+ ]);
19
+ function handleChange(option) {
20
+ if (!option || option.disabled) return;
21
+ setValue(option.data);
22
+ }
23
+ return /*#__PURE__*/ jsx(Listbox, {
24
+ value: selectedOption ?? null,
25
+ onChange: handleChange,
26
+ disabled: disabled,
27
+ children: /*#__PURE__*/ jsxs("div", {
28
+ className: classnames(className, 'fwe-select-wrapper', {
29
+ 'fwe-disabled': disabled
30
+ }),
31
+ ref: ref,
32
+ ...props,
33
+ children: [
34
+ /*#__PURE__*/ jsx(ListboxButton, {
35
+ className: classnames('fwe-select', {
36
+ 'fwe-invalid': error
37
+ }),
38
+ id: id,
39
+ "aria-labelledby": label ? labelId : void 0,
40
+ disabled: disabled,
41
+ children: selectedOption ? selectedOption.label : placeholder ?? ''
42
+ }),
43
+ /*#__PURE__*/ jsx("label", {
44
+ className: "fwe-select-label",
45
+ id: labelId,
46
+ htmlFor: id,
47
+ children: label || ''
48
+ }),
49
+ /*#__PURE__*/ jsx(ListboxOptions, {
50
+ className: "fwe-options-container",
51
+ as: "ul",
52
+ portal: false,
53
+ style: {
54
+ minWidth: 'var(--button-width)'
55
+ },
56
+ anchor: {
57
+ to: 'bottom start',
58
+ gap: 12,
59
+ padding: 8
60
+ },
61
+ children: options.map((option)=>/*#__PURE__*/ jsx(ListboxOption, {
62
+ value: option,
63
+ disabled: option.disabled,
64
+ as: "li",
65
+ className: ({ focus, selected, disabled: isDisabled })=>classnames('fwe-combobox-option', {
66
+ 'fwe-selected': selected,
67
+ 'fwe-focus': focus,
68
+ 'fwe-disabled': isDisabled
69
+ }),
70
+ children: option.label
71
+ }, String(option.data)))
72
+ }),
73
+ name && /*#__PURE__*/ jsx("input", {
74
+ type: "hidden",
75
+ name: name,
76
+ value: String(value ?? ''),
77
+ disabled: disabled
78
+ }),
79
+ hint && !error && /*#__PURE__*/ jsx("div", {
80
+ className: "fwe-select-description",
81
+ children: hint
82
+ }),
83
+ error && /*#__PURE__*/ jsx("div", {
84
+ className: "fwe-select-invalid",
85
+ children: error
86
+ })
87
+ ]
88
+ })
89
+ });
90
+ }
91
+ const Select = /*#__PURE__*/ forwardRef(SelectComponent);
92
+ export { Select };
File without changes
File without changes
@@ -0,0 +1,50 @@
1
+ label.fwe-slider {
2
+ display: block;
3
+ position: relative;
4
+ }
5
+
6
+ label.fwe-slider .fr-slider-indicator {
7
+ background: var(--fwe-hero);
8
+ height: 2px;
9
+ position: absolute;
10
+ bottom: 22px;
11
+ left: 0;
12
+ }
13
+
14
+ label.fwe-slider .fr-slider-indicator.disabled {
15
+ background: var(--fwe-border);
16
+ }
17
+
18
+ label.fwe-slider.fr-slider-value {
19
+ height: 56px;
20
+ }
21
+
22
+ label.fwe-slider.fr-slider-value .fr-slider-indicator {
23
+ bottom: 38px;
24
+ }
25
+
26
+ label.fwe-slider.fr-slider-label {
27
+ height: 67px;
28
+ }
29
+
30
+ label.fwe-slider.fr-slider-label .fr-slider-indicator {
31
+ bottom: 22px;
32
+ }
33
+
34
+ label.fwe-slider.fr-slider-value-label {
35
+ height: 83px;
36
+ }
37
+
38
+ label.fwe-slider.fr-slider-value-label .fr-slider-indicator {
39
+ bottom: 38px;
40
+ }
41
+
42
+ label.fwe-slider .fr-slider-value {
43
+ color: var(--fwe-text);
44
+ font-size: var(--fwe-font-size-base);
45
+ user-select: none;
46
+ margin-bottom: 0;
47
+ position: absolute;
48
+ bottom: 0;
49
+ }
50
+
@@ -0,0 +1,17 @@
1
+ import './Slider.scss';
2
+ import type React from 'react';
3
+ import type { ClassNameProps } from '../../utils/types';
4
+ export interface SliderProps extends ClassNameProps {
5
+ readonly disabled?: boolean;
6
+ readonly min: number;
7
+ readonly max: number;
8
+ readonly step?: number;
9
+ readonly value: number;
10
+ readonly onChangeCommitted?: (value: number) => void;
11
+ readonly label?: string;
12
+ readonly showValue?: boolean;
13
+ readonly onChange?: (event: React.ChangeEvent<HTMLInputElement>, value: number) => void;
14
+ readonly id?: string;
15
+ readonly widthOffset?: number;
16
+ }
17
+ export declare function Slider({ disabled, label, max, min, onChange, onChangeCommitted, step, value, showValue, className, id: idProps, widthOffset, }: SliderProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,93 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import "./Slider.css";
3
+ import classnames from "classnames";
4
+ import { useCallback, useEffect, useRef, useState } from "react";
5
+ import { useId } from "../../utils/useId.js";
6
+ function Slider({ disabled = false, label, max, min, onChange, onChangeCommitted, step, value, showValue = true, className, id: idProps, widthOffset = 8 }) {
7
+ const id = useId(idProps);
8
+ const [innerValue, setInnerValue] = useState(value);
9
+ const [left, setLeft] = useState(null);
10
+ const [numberOffset, setNumberOffset] = useState(0);
11
+ const labelEl = useRef(null);
12
+ const classes = classnames('fwe-slider', {
13
+ 'fr-slider-value': !label && showValue
14
+ }, {
15
+ 'fr-slider-label': label && !showValue
16
+ }, {
17
+ 'fr-slider-value-label': label && showValue
18
+ }, className);
19
+ useEffect(()=>{
20
+ setInnerValue(value);
21
+ }, [
22
+ value
23
+ ]);
24
+ const updateValuePosition = useCallback(()=>{
25
+ if (labelEl.current) {
26
+ const { width } = labelEl.current.getBoundingClientRect();
27
+ const diff = max - min;
28
+ setLeft((innerValue - min) / diff * (width - widthOffset));
29
+ setNumberOffset(8 - 6 * innerValue.toString().length);
30
+ }
31
+ }, [
32
+ innerValue,
33
+ max,
34
+ min,
35
+ widthOffset
36
+ ]);
37
+ const handleAfterChange = ()=>{
38
+ if (onChangeCommitted) onChangeCommitted(innerValue);
39
+ };
40
+ const handleChange = (e)=>{
41
+ const newValue = Number.parseFloat(e.target.value);
42
+ setInnerValue(newValue);
43
+ if (onChange) onChange(e, newValue);
44
+ };
45
+ useEffect(()=>{
46
+ function handleResize() {
47
+ updateValuePosition();
48
+ }
49
+ window.addEventListener('resize', handleResize);
50
+ handleResize();
51
+ return ()=>window.removeEventListener('resize', handleResize);
52
+ }, [
53
+ updateValuePosition
54
+ ]);
55
+ return /*#__PURE__*/ jsxs("label", {
56
+ ref: labelEl,
57
+ className: classes,
58
+ htmlFor: id,
59
+ children: [
60
+ label && /*#__PURE__*/ jsx("span", {
61
+ children: label
62
+ }),
63
+ /*#__PURE__*/ jsx("input", {
64
+ id: id,
65
+ className: "fwe-slider-input",
66
+ type: "range",
67
+ disabled: disabled,
68
+ min: min,
69
+ max: max,
70
+ step: step,
71
+ onChange: handleChange,
72
+ value: innerValue,
73
+ onKeyUp: handleAfterChange,
74
+ onMouseUp: handleAfterChange,
75
+ onTouchEnd: handleAfterChange
76
+ }),
77
+ showValue && null !== left && /*#__PURE__*/ jsx("span", {
78
+ className: "fr-slider-value",
79
+ style: {
80
+ left: `${left + numberOffset}px`
81
+ },
82
+ children: innerValue
83
+ }),
84
+ /*#__PURE__*/ jsx("div", {
85
+ className: `fr-slider-indicator${disabled ? ' disabled' : ''}`,
86
+ style: {
87
+ width: `${left}px`
88
+ }
89
+ })
90
+ ]
91
+ });
92
+ }
93
+ export { Slider };
@@ -0,0 +1,12 @@
1
+ import type { ClassNameProps } from '../../utils/types';
2
+ export interface SwitchProps extends ClassNameProps {
3
+ readonly labelPosition?: 'before' | 'after' | 'below';
4
+ readonly large?: boolean;
5
+ readonly title: string;
6
+ readonly value?: boolean;
7
+ readonly defaultValue?: boolean;
8
+ readonly disabled?: boolean;
9
+ readonly onChange?: (value: boolean) => void;
10
+ readonly id?: string;
11
+ }
12
+ export declare function Switch({ labelPosition, large, title, value, defaultValue, disabled, onChange, className, id: idProps, }: SwitchProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,42 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import classnames from "classnames";
3
+ import { useControlled } from "../../utils/useControlled.js";
4
+ import { useId } from "../../utils/useId.js";
5
+ function Switch({ labelPosition = 'after', large = false, title, value, defaultValue, disabled = false, onChange, className, id: idProps }) {
6
+ const id = useId(idProps);
7
+ const labelClassName = classnames('fwe-switch', {
8
+ [`fwe-switch-label-${labelPosition}`]: true
9
+ }, {
10
+ 'fwe-switch-lg': large
11
+ }, className);
12
+ const [currentValue, setCurrentValue] = useControlled({
13
+ controlled: value,
14
+ default: defaultValue
15
+ });
16
+ const handleChange = ()=>{
17
+ const newValue = !currentValue;
18
+ setCurrentValue(newValue);
19
+ if (onChange) onChange(newValue);
20
+ };
21
+ return /*#__PURE__*/ jsxs("label", {
22
+ className: labelClassName,
23
+ htmlFor: id,
24
+ children: [
25
+ /*#__PURE__*/ jsx("input", {
26
+ type: "checkbox",
27
+ disabled: disabled,
28
+ checked: currentValue,
29
+ onChange: ()=>handleChange(),
30
+ id: id
31
+ }),
32
+ /*#__PURE__*/ jsx("div", {
33
+ className: "fwe-switch-track"
34
+ }),
35
+ /*#__PURE__*/ jsx("div", {
36
+ className: "fwe-switch-label-content",
37
+ children: title
38
+ })
39
+ ]
40
+ });
41
+ }
42
+ export { Switch };
@@ -0,0 +1,14 @@
1
+ label.fwe-input-text .fwe-input-text-count {
2
+ line-height: var(--fwe-line-height-base);
3
+ color: var(--fwe-text-disabled);
4
+ font-size: var(--fwe-font-size-small);
5
+ display: block;
6
+ position: absolute;
7
+ bottom: 0;
8
+ right: 0;
9
+ }
10
+
11
+ label.fwe-input-text .fr-textarea {
12
+ overflow: visible;
13
+ }
14
+
@@ -0,0 +1,22 @@
1
+ import './TextArea.scss';
2
+ import React from 'react';
3
+ import type { ClassNameProps } from '../../utils/types';
4
+ export interface TextAreaProps extends ClassNameProps {
5
+ readonly disabled?: boolean;
6
+ readonly required?: boolean;
7
+ readonly readonly?: boolean;
8
+ readonly onChange?: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;
9
+ readonly onFocus?: (event: React.FocusEvent<HTMLTextAreaElement>) => void;
10
+ readonly onInput?: (event: React.FormEvent<HTMLTextAreaElement>) => void;
11
+ readonly onBlur?: (event: React.FocusEvent<HTMLTextAreaElement>) => void;
12
+ readonly label: string;
13
+ readonly hint?: string;
14
+ readonly error?: string;
15
+ readonly value?: string;
16
+ readonly defaultValue?: string;
17
+ readonly name?: string;
18
+ readonly rows?: number;
19
+ readonly maxLength?: number;
20
+ readonly id?: string;
21
+ }
22
+ export declare function TextArea({ disabled, onBlur, onChange, onFocus, onInput, readonly, required, label, error, hint, value, defaultValue, name, rows, maxLength, className, id: idProps, }: Readonly<TextAreaProps>): import("react/jsx-runtime").JSX.Element;