@festo-ui/react 5.0.1 → 5.1.0-dev.164

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 (144) hide show
  1. package/index.css +2 -2
  2. package/index.d.ts +4 -0
  3. package/index.js +4 -0
  4. package/lib/components/accordion/Accordion.d.ts +1 -1
  5. package/lib/components/accordion/Accordion.js +1 -1
  6. package/lib/components/accordion/accordion-header/AccordionHeader.d.ts +1 -1
  7. package/lib/components/accordion/accordion-item/AccordionItem.d.ts +1 -1
  8. package/lib/components/accordion/accordion-item/accordion-item-body/AccordionItemBody.d.ts +1 -1
  9. package/lib/components/accordion/accordion-item/accordion-item-header/AccordionItemHeader.d.ts +1 -1
  10. package/lib/components/loading-indicator/LoadingIndicator.d.ts +1 -1
  11. package/lib/components/mobile-flyout/MobileFlyout.d.ts +12 -0
  12. package/lib/components/mobile-flyout/MobileFlyout.js +83 -0
  13. package/lib/components/mobile-flyout/MobileFlyoutContext.d.ts +9 -0
  14. package/lib/components/mobile-flyout/MobileFlyoutContext.js +2 -0
  15. package/lib/components/mobile-flyout/mobile-flyout-item/MobileFlyoutItem.d.ts +19 -0
  16. package/lib/components/mobile-flyout/mobile-flyout-item/MobileFlyoutItem.js +54 -0
  17. package/lib/components/mobile-flyout/mobile-flyout-page/MobileFlyoutPage.d.ts +8 -0
  18. package/lib/components/mobile-flyout/mobile-flyout-page/MobileFlyoutPage.js +47 -0
  19. package/lib/components/modals/Modal.d.ts +5 -7
  20. package/lib/components/modals/Modal.js +28 -61
  21. package/lib/components/modals/ModalBase.d.ts +9 -0
  22. package/lib/components/modals/ModalBase.js +68 -0
  23. package/lib/components/modals/ModalFooter.d.ts +1 -1
  24. package/lib/components/modals/imageGallery/BaseGallery.d.ts +18 -0
  25. package/lib/components/modals/imageGallery/BaseGallery.js +77 -0
  26. package/lib/components/modals/imageGallery/ImageGallery.d.ts +15 -0
  27. package/lib/components/modals/imageGallery/ImageGallery.helper.d.ts +3 -0
  28. package/lib/components/modals/imageGallery/ImageGallery.helper.js +11 -0
  29. package/lib/components/modals/imageGallery/ImageGallery.js +77 -0
  30. package/lib/components/modals/imageGallery/ImageGallery.stories.helper.d.ts +3 -0
  31. package/lib/components/modals/imageGallery/ImageGallery.stories.helper.js +108 -0
  32. package/lib/components/modals/imageGallery/ImageGalleryContent.d.ts +10 -0
  33. package/lib/components/modals/imageGallery/ImageGalleryContent.js +16 -0
  34. package/lib/components/modals/imageGallery/ImageGalleryPagination.d.ts +8 -0
  35. package/lib/components/modals/imageGallery/ImageGalleryPagination.js +30 -0
  36. package/lib/components/modals/imageGallery/useClasses.d.ts +0 -0
  37. package/lib/components/modals/imageGallery/useClasses.js +0 -0
  38. package/lib/components/snackbar/SnackbarProvider.js +4 -4
  39. package/lib/components/stepper-horizontal/StepperHorizontal.d.ts +1 -1
  40. package/lib/components/stepper-horizontal/StepperHorizontal.js +1 -1
  41. package/lib/components/stepper-horizontal/step-horizontal/StepHorizontal.d.ts +1 -1
  42. package/lib/components/stepper-vertical/StepperVertical.d.ts +1 -1
  43. package/lib/components/stepper-vertical/StepperVertical.js +1 -1
  44. package/lib/components/stepper-vertical/step-vertical/StepVertical.d.ts +1 -1
  45. package/lib/components/tab/Tabs.d.ts +1 -1
  46. package/lib/components/tab/Tabs.js +3 -0
  47. package/lib/components/tab/useTabScroll.js +0 -1
  48. package/lib/components/table-header-cell/TableHeaderCell.d.ts +1 -1
  49. package/lib/components/table-header-cell/TableHeaderCell.js +10 -4
  50. package/lib/forms/checkbox/Checkbox.d.ts +5 -4
  51. package/lib/forms/checkbox/Checkbox.js +16 -18
  52. package/lib/forms/radio/RadioGroup.js +1 -1
  53. package/lib/forms/select/Select.d.ts +4 -10
  54. package/lib/forms/select/Select.js +96 -126
  55. package/lib/forms/select/list-item/ListItem.d.ts +6 -0
  56. package/lib/forms/select/list-item/ListItem.js +24 -0
  57. package/lib/forms/select/select-option/SelectOption.d.ts +2 -2
  58. package/lib/forms/select/utils.d.ts +2 -0
  59. package/lib/forms/select/utils.js +17 -0
  60. package/lib/forms/text-editor/TextEditor.d.ts +2 -1
  61. package/lib/forms/text-editor/TextEditor.js +29 -14
  62. package/lib/forms/text-input/TextInput.d.ts +1 -1
  63. package/lib/forms/time-picker/TimePicker.d.ts +1 -1
  64. package/lib/forms/time-picker/time-picker-dropdown/TimePickerDropdown.d.ts +1 -1
  65. package/lib/helper/types.d.ts +17 -0
  66. package/lib/helper/useId.js +2 -1
  67. package/node/index.js +30 -2
  68. package/node/lib/components/accordion/Accordion.js +2 -3
  69. package/node/lib/components/accordion/AccordionContext.js +1 -2
  70. package/node/lib/components/accordion/accordion-header/AccordionHeader.js +1 -2
  71. package/node/lib/components/accordion/accordion-item/AccordionItem.js +1 -2
  72. package/node/lib/components/accordion/accordion-item/AccordionItemContext.js +1 -2
  73. package/node/lib/components/accordion/accordion-item/accordion-item-body/AccordionItemBody.js +1 -2
  74. package/node/lib/components/accordion/accordion-item/accordion-item-header/AccordionItemHeader.js +1 -2
  75. package/node/lib/components/breadcrumb/Breadcrumb.js +1 -2
  76. package/node/lib/components/buttons/button/Button.js +1 -2
  77. package/node/lib/components/card/Card.js +1 -2
  78. package/node/lib/components/card/CardBody.js +1 -2
  79. package/node/lib/components/card/CardHeader.js +1 -2
  80. package/node/lib/components/card/CardNotification.js +1 -2
  81. package/node/lib/components/chips/chip/Chip.js +2 -4
  82. package/node/lib/components/chips/chip-container/ChipContainer.js +1 -2
  83. package/node/lib/components/link-button/LinkButton.js +1 -2
  84. package/node/lib/components/loading-indicator/LoadingIndicator.js +2 -4
  85. package/node/lib/components/mobile-flyout/MobileFlyout.js +89 -0
  86. package/node/lib/components/mobile-flyout/MobileFlyoutContext.js +8 -0
  87. package/node/lib/components/mobile-flyout/mobile-flyout-item/MobileFlyoutItem.js +77 -0
  88. package/node/lib/components/mobile-flyout/mobile-flyout-page/MobileFlyoutPage.js +53 -0
  89. package/node/lib/components/modals/AlertModal.js +1 -2
  90. package/node/lib/components/modals/ConfirmModal.js +1 -2
  91. package/node/lib/components/modals/Modal.js +30 -63
  92. package/node/lib/components/modals/ModalBase.js +73 -0
  93. package/node/lib/components/modals/ModalFooter.js +1 -2
  94. package/node/lib/components/modals/Prompt.js +2 -2
  95. package/node/lib/components/modals/imageGallery/BaseGallery.js +83 -0
  96. package/node/lib/components/modals/imageGallery/ImageGallery.helper.js +18 -0
  97. package/node/lib/components/modals/imageGallery/ImageGallery.js +82 -0
  98. package/node/lib/components/modals/imageGallery/ImageGallery.stories.helper.js +123 -0
  99. package/node/lib/components/modals/imageGallery/ImageGalleryContent.js +20 -0
  100. package/node/lib/components/modals/imageGallery/ImageGalleryPagination.js +34 -0
  101. package/node/lib/components/modals/imageGallery/useClasses.js +1 -0
  102. package/node/lib/components/pagination/Pagination.js +4 -6
  103. package/node/lib/components/popovers/legend/Legend.js +1 -2
  104. package/node/lib/components/popovers/popover/Popover.js +3 -4
  105. package/node/lib/components/popovers/popover-menu/PopoverMenu.js +1 -2
  106. package/node/lib/components/popovers/tooltip/Tooltip.js +1 -2
  107. package/node/lib/components/progress/Progress.js +1 -2
  108. package/node/lib/components/search-input/SearchInput.js +1 -2
  109. package/node/lib/components/snackbar/Snackbar.js +1 -2
  110. package/node/lib/components/snackbar/SnackbarContext.js +1 -2
  111. package/node/lib/components/snackbar/SnackbarProvider.js +4 -5
  112. package/node/lib/components/stepper-horizontal/StepperHorizontal.js +5 -6
  113. package/node/lib/components/stepper-horizontal/step-horizontal/StepHorizontal.js +1 -2
  114. package/node/lib/components/stepper-vertical/StepperVertical.js +5 -6
  115. package/node/lib/components/stepper-vertical/step-vertical/StepVertical.js +1 -2
  116. package/node/lib/components/tab/Tabs.js +5 -4
  117. package/node/lib/components/tab/tab-pane/TabPane.js +1 -2
  118. package/node/lib/components/tab/useTabScroll.js +3 -2
  119. package/node/lib/components/table-header-cell/TableHeaderCell.js +11 -6
  120. package/node/lib/forms/checkbox/Checkbox.js +17 -22
  121. package/node/lib/forms/color-indicator/ColorIndicator.js +3 -4
  122. package/node/lib/forms/color-picker/ColorPicker.js +4 -6
  123. package/node/lib/forms/date-picker/DatePicker.js +1 -2
  124. package/node/lib/forms/date-range-picker/DateRangePicker.js +1 -2
  125. package/node/lib/forms/radio/RadioButton.js +1 -2
  126. package/node/lib/forms/radio/RadioGroup.js +2 -3
  127. package/node/lib/forms/radio/RadioGroupContext.js +1 -2
  128. package/node/lib/forms/segment/Segment.js +1 -2
  129. package/node/lib/forms/segment/segment-control/SegmentControl.js +3 -4
  130. package/node/lib/forms/select/Select.js +99 -130
  131. package/node/lib/forms/select/list-item/ListItem.js +33 -0
  132. package/node/lib/forms/select/select-option/SelectOption.js +4 -6
  133. package/node/lib/forms/select/utils.js +23 -0
  134. package/node/lib/forms/slider/Slider.js +3 -4
  135. package/node/lib/forms/switch/Switch.js +1 -2
  136. package/node/lib/forms/text-area/TextArea.js +3 -4
  137. package/node/lib/forms/text-editor/TextEditor.js +29 -15
  138. package/node/lib/forms/text-editor/TextEditorButton.js +1 -2
  139. package/node/lib/forms/text-input/TextInput.js +3 -4
  140. package/node/lib/forms/time-picker/TimePicker.js +3 -4
  141. package/node/lib/forms/time-picker/time-picker-dropdown/TimePickerDropdown.js +3 -4
  142. package/node/lib/helper/index.js +1 -2
  143. package/node/lib/helper/useId.js +2 -1
  144. package/package.json +2 -2
@@ -3,8 +3,8 @@ export interface SelectOptionType {
3
3
  label: string;
4
4
  data: any;
5
5
  }
6
- interface SelectOptionProps extends React.ComponentPropsWithoutRef<'span'> {
6
+ export interface SelectOptionProps extends React.ComponentPropsWithoutRef<'span'> {
7
7
  option: SelectOptionType;
8
8
  }
9
- export declare const SelectOption: React.ForwardRefExoticComponent<SelectOptionProps & React.RefAttributes<HTMLDivElement>>;
9
+ export declare const SelectOption: (props: SelectOptionProps & React.RefAttributes<HTMLDivElement>) => React.ReactElement<any, string | React.JSXElementConstructor<any>> | null;
10
10
  export default SelectOption;
@@ -0,0 +1,2 @@
1
+ import { SelectConfiguration } from '../../helper/types';
2
+ export default function calcVirtualScrollHeight(config: SelectConfiguration | undefined, itemLength: number): number;
@@ -0,0 +1,17 @@
1
+ export default function calcVirtualScrollHeight(config, itemLength) {
2
+ const defaultHeight = 48;
3
+ let height = defaultHeight;
4
+ if (itemLength === 2) {
5
+ height = defaultHeight * 2;
6
+ } else if (itemLength >= 3) {
7
+ height = defaultHeight * 3;
8
+ }
9
+ if (config?.scroll?.viewportSize != null && config.scroll.viewportSize !== undefined) {
10
+ if (itemLength >= config.scroll.viewportSize) {
11
+ height = config.scroll.viewportSize * defaultHeight;
12
+ } else if (itemLength < config.scroll.viewportSize) {
13
+ height = itemLength * defaultHeight;
14
+ }
15
+ }
16
+ return height;
17
+ }
@@ -18,6 +18,7 @@ export interface TextEditorProps {
18
18
  label: string;
19
19
  maxLength?: number;
20
20
  value?: string;
21
+ defaultValue?: string;
21
22
  hint?: string;
22
23
  error?: string;
23
24
  readOnly?: boolean;
@@ -25,5 +26,5 @@ export interface TextEditorProps {
25
26
  className?: string;
26
27
  config?: TextEditorConfiguration;
27
28
  }
28
- declare function TextEditor({ disabled, label, maxLength, value, hint, error, readOnly, onChange, className, config: configProps, }: TextEditorProps): JSX.Element;
29
+ declare function TextEditor({ disabled, defaultValue, label, maxLength, value, hint, error, readOnly, onChange, className, config: configProps, }: TextEditorProps): JSX.Element;
29
30
  export default TextEditor;
@@ -1,4 +1,4 @@
1
- import { useEffect, useRef, useState } from 'react';
1
+ import { useCallback, useEffect, useRef, useState } from 'react';
2
2
  import classNames from 'classnames';
3
3
  import TextEditorButton from './TextEditorButton';
4
4
  import useId from '../../helper/useId';
@@ -19,9 +19,13 @@ const defaultConfig = {
19
19
  link: true
20
20
  }
21
21
  };
22
+ function postpone(fn) {
23
+ Promise.resolve().then(fn);
24
+ }
22
25
  function TextEditor(_ref) {
23
26
  let {
24
27
  disabled = false,
28
+ defaultValue,
25
29
  label,
26
30
  maxLength,
27
31
  value,
@@ -35,13 +39,29 @@ function TextEditor(_ref) {
35
39
  const editorRef = useRef(null);
36
40
  const [editor, setEditor] = useState(null);
37
41
  const id = useId();
38
- const [innerValue, setInnerValue] = useState(value);
42
+ const [innerValue, setInnerValue] = useState(null);
39
43
  const config = {
40
44
  toolbar: {
41
45
  ...defaultConfig.toolbar,
42
46
  ...configProps?.toolbar
43
47
  }
44
48
  };
49
+ const setEditorContents = useCallback((e, v) => {
50
+ if (e) {
51
+ const whiteList = {
52
+ ...xss.whiteList,
53
+ a: [...xss.whiteList.a, 'rel']
54
+ };
55
+ const sanitizedValue = xss(v, {
56
+ whiteList
57
+ });
58
+ const content = e.clipboard.convert(sanitizedValue);
59
+ const selection = e.getSelection();
60
+ e.setContents(content, 'silent');
61
+ setInnerValue(sanitizedValue);
62
+ postpone(() => e.setSelection(selection));
63
+ }
64
+ }, []);
45
65
  useEffect(() => {
46
66
  if (editorRef && editor === null && typeof window === 'object') {
47
67
  // eslint-disable-next-line global-require
@@ -75,8 +95,11 @@ function TextEditor(_ref) {
75
95
  return new Delta().insert('');
76
96
  });
77
97
  setEditor(newEditor);
98
+ if (defaultValue) {
99
+ setEditorContents(newEditor, defaultValue);
100
+ }
78
101
  }
79
- }, [editorRef, editor, disabled, readOnly, className, id, config.toolbar?.image]);
102
+ }, [editorRef, editor, disabled, readOnly, className, id, config.toolbar?.image, setEditorContents, defaultValue]);
80
103
  useEffect(() => {
81
104
  if (editor) {
82
105
  editor.on('text-change', () => {
@@ -92,18 +115,10 @@ function TextEditor(_ref) {
92
115
  }
93
116
  }, [editor, onChange]);
94
117
  useEffect(() => {
95
- if (editor) {
96
- const whiteList = {
97
- ...xss.whiteList,
98
- a: [...xss.whiteList.a, 'rel']
99
- };
100
- const sanitizedValue = xss(value, {
101
- whiteList
102
- });
103
- const content = editor.clipboard.convert(sanitizedValue);
104
- editor.setContents(content, 'silent');
118
+ if (value !== innerValue && value !== undefined && value !== null) {
119
+ setEditorContents(editor, value);
105
120
  }
106
- }, [editor, value]);
121
+ }, [editor, innerValue, setEditorContents, value]);
107
122
  function currentLength() {
108
123
  return innerValue?.length || 0;
109
124
  }
@@ -17,5 +17,5 @@ interface TextInputProps {
17
17
  error?: string;
18
18
  labelClassName?: string;
19
19
  }
20
- declare const TextInput: React.ForwardRefExoticComponent<Pick<TextInputProps & React.HTMLProps<HTMLInputElement>, "cite" | "data" | "form" | "label" | "slot" | "span" | "style" | "summary" | "title" | "pattern" | "key" | "defaultChecked" | "defaultValue" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "dir" | "draggable" | "hidden" | "id" | "lang" | "nonce" | "placeholder" | "spellCheck" | "tabIndex" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "children" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocus" | "onFocusCapture" | "onBlur" | "onBlurCapture" | "onChange" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onResize" | "onResizeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture" | "value" | "list" | "step" | "type" | "height" | "start" | "content" | "size" | "default" | "wrap" | "open" | "multiple" | "disabled" | "href" | "action" | "selected" | "error" | "required" | "readonly" | "max" | "min" | "hint" | "labelClassName" | "accept" | "acceptCharset" | "allowFullScreen" | "allowTransparency" | "alt" | "as" | "async" | "autoComplete" | "autoFocus" | "autoPlay" | "capture" | "cellPadding" | "cellSpacing" | "charSet" | "challenge" | "checked" | "classID" | "cols" | "colSpan" | "controls" | "coords" | "crossOrigin" | "dateTime" | "defer" | "download" | "encType" | "formAction" | "formEncType" | "formMethod" | "formNoValidate" | "formTarget" | "frameBorder" | "headers" | "high" | "hrefLang" | "htmlFor" | "httpEquiv" | "integrity" | "keyParams" | "keyType" | "kind" | "loop" | "low" | "manifest" | "marginHeight" | "marginWidth" | "maxLength" | "media" | "mediaGroup" | "method" | "minLength" | "muted" | "name" | "noValidate" | "optimum" | "playsInline" | "poster" | "preload" | "readOnly" | "rel" | "reversed" | "rows" | "rowSpan" | "sandbox" | "scope" | "scoped" | "scrolling" | "seamless" | "shape" | "sizes" | "src" | "srcDoc" | "srcLang" | "srcSet" | "target" | "useMap" | "width" | "wmode"> & React.RefAttributes<HTMLLabelElement>>;
20
+ declare const TextInput: (props: TextInputProps & React.HTMLProps<HTMLInputElement> & React.RefAttributes<HTMLLabelElement>) => React.ReactElement<any, string | React.JSXElementConstructor<any>> | null;
21
21
  export default TextInput;
@@ -14,5 +14,5 @@ export interface TimePickerProps extends Omit<ComponentPropsWithoutRef<'div'>, '
14
14
  formatDate?: (date: Date) => string;
15
15
  onChange?: (date: Date) => void;
16
16
  }
17
- declare const TimePicker: React.ForwardRefExoticComponent<TimePickerProps & React.RefAttributes<HTMLDivElement>>;
17
+ declare const TimePicker: (props: TimePickerProps & React.RefAttributes<HTMLDivElement>) => React.ReactElement<any, string | React.JSXElementConstructor<any>> | null;
18
18
  export default TimePicker;
@@ -8,5 +8,5 @@ interface TimePickerDropdownProps {
8
8
  onClose: (date?: Date) => void;
9
9
  style?: React.CSSProperties;
10
10
  }
11
- declare const TimePickerDropdown: React.ForwardRefExoticComponent<TimePickerDropdownProps & React.RefAttributes<HTMLDivElement>>;
11
+ declare const TimePickerDropdown: (props: TimePickerDropdownProps & React.RefAttributes<HTMLDivElement>) => React.ReactElement<any, string | React.JSXElementConstructor<any>> | null;
12
12
  export default TimePickerDropdown;
@@ -5,3 +5,20 @@ export interface ClassNameProps {
5
5
  export interface ClassNamePropsWithChildren extends ClassNameProps {
6
6
  children?: React.ReactNode;
7
7
  }
8
+ export interface SelectConfiguration {
9
+ hideLabel?: boolean;
10
+ scroll?: {
11
+ enabled?: boolean;
12
+ viewportSize?: number;
13
+ };
14
+ }
15
+ export type PolymorphicRef<C extends React.ElementType> = React.ComponentPropsWithRef<C>["ref"];
16
+ type AsProp<C extends React.ElementType> = {
17
+ component?: C;
18
+ };
19
+ type PropsToOmit<C extends React.ElementType, P> = keyof (AsProp<C> & P);
20
+ type PolymorphicComponentProp<C extends React.ElementType, Props = {}> = React.PropsWithChildren<Props & AsProp<C>> & Omit<React.ComponentPropsWithoutRef<C>, PropsToOmit<C, Props>>;
21
+ export type PolymorphicComponentPropWithRef<C extends React.ElementType, Props = {}> = PolymorphicComponentProp<C, Props> & {
22
+ ref?: PolymorphicRef<C>;
23
+ };
24
+ export {};
@@ -10,12 +10,13 @@ function useLegacyId() {
10
10
  nextId += 1;
11
11
  setId(`fr-${nextId}`);
12
12
  }
13
- }, [setId]);
13
+ }, [id]);
14
14
  return id;
15
15
  }
16
16
  export default function useId(idInput) {
17
17
  if (idInput !== undefined && idInput !== null) {
18
18
  return idInput;
19
19
  }
20
+ // eslint-disable-next-line react-hooks/rules-of-hooks
20
21
  return maybeReactUseId ? maybeReactUseId() : useLegacyId();
21
22
  }
package/node/index.js CHANGED
@@ -129,6 +129,12 @@ Object.defineProperty(exports, "DateRangePicker", {
129
129
  return _DateRangePicker.default;
130
130
  }
131
131
  });
132
+ Object.defineProperty(exports, "ImageGallery", {
133
+ enumerable: true,
134
+ get: function () {
135
+ return _ImageGallery.default;
136
+ }
137
+ });
132
138
  Object.defineProperty(exports, "LinkButton", {
133
139
  enumerable: true,
134
140
  get: function () {
@@ -141,6 +147,24 @@ Object.defineProperty(exports, "LoadingIndicator", {
141
147
  return _LoadingIndicator.default;
142
148
  }
143
149
  });
150
+ Object.defineProperty(exports, "MobileFlyout", {
151
+ enumerable: true,
152
+ get: function () {
153
+ return _MobileFlyout.default;
154
+ }
155
+ });
156
+ Object.defineProperty(exports, "MobileFlyoutItem", {
157
+ enumerable: true,
158
+ get: function () {
159
+ return _MobileFlyoutItem.default;
160
+ }
161
+ });
162
+ Object.defineProperty(exports, "MobileFlyoutPage", {
163
+ enumerable: true,
164
+ get: function () {
165
+ return _MobileFlyoutPage.default;
166
+ }
167
+ });
144
168
  Object.defineProperty(exports, "Pagination", {
145
169
  enumerable: true,
146
170
  get: function () {
@@ -330,8 +354,12 @@ var _ChipContainer = _interopRequireDefault(require("./lib/components/chips/chip
330
354
  var _Chip = _interopRequireWildcard(require("./lib/components/chips/chip/Chip"));
331
355
  var _LinkButton = _interopRequireDefault(require("./lib/components/link-button/LinkButton"));
332
356
  var _LoadingIndicator = _interopRequireDefault(require("./lib/components/loading-indicator/LoadingIndicator"));
357
+ var _MobileFlyout = _interopRequireDefault(require("./lib/components/mobile-flyout/MobileFlyout"));
358
+ var _MobileFlyoutItem = _interopRequireDefault(require("./lib/components/mobile-flyout/mobile-flyout-item/MobileFlyoutItem"));
359
+ var _MobileFlyoutPage = _interopRequireDefault(require("./lib/components/mobile-flyout/mobile-flyout-page/MobileFlyoutPage"));
333
360
  var _AlertModal = _interopRequireDefault(require("./lib/components/modals/AlertModal"));
334
361
  var _ConfirmModal = _interopRequireDefault(require("./lib/components/modals/ConfirmModal"));
362
+ var _ImageGallery = _interopRequireDefault(require("./lib/components/modals/imageGallery/ImageGallery"));
335
363
  var _Prompt = _interopRequireDefault(require("./lib/components/modals/Prompt"));
336
364
  var _Pagination = _interopRequireDefault(require("./lib/components/pagination/Pagination"));
337
365
  var _PopoverMenu = _interopRequireDefault(require("./lib/components/popovers/popover-menu/PopoverMenu"));
@@ -365,6 +393,6 @@ var _TextArea = _interopRequireDefault(require("./lib/forms/text-area/TextArea")
365
393
  var _TextEditor = _interopRequireDefault(require("./lib/forms/text-editor/TextEditor"));
366
394
  var _TextInput = _interopRequireDefault(require("./lib/forms/text-input/TextInput"));
367
395
  var _TimePicker = _interopRequireDefault(require("./lib/forms/time-picker/TimePicker"));
368
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
369
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
396
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
397
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
370
398
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
@@ -31,7 +31,7 @@ const Accordion = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
31
31
  keepItemsOpen,
32
32
  expanded,
33
33
  toggle: handleChange
34
- }), [expanded]);
34
+ }), [expanded, keepItemsOpen, showLess, showMore]);
35
35
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_AccordionContext.default.Provider, {
36
36
  value: contextValue,
37
37
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
@@ -42,5 +42,4 @@ const Accordion = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
42
42
  })
43
43
  });
44
44
  });
45
- var _default = Accordion;
46
- exports.default = _default;
45
+ var _default = exports.default = Accordion;
@@ -6,5 +6,4 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _react = require("react");
8
8
  const AccordionContext = /*#__PURE__*/(0, _react.createContext)({});
9
- var _default = AccordionContext;
10
- exports.default = _default;
9
+ var _default = exports.default = AccordionContext;
@@ -21,5 +21,4 @@ const AccordionHeader = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
21
21
  children: children
22
22
  });
23
23
  });
24
- var _default = AccordionHeader;
25
- exports.default = _default;
24
+ var _default = exports.default = AccordionHeader;
@@ -67,5 +67,4 @@ const AccordionItem = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
67
67
  })
68
68
  });
69
69
  });
70
- var _default = AccordionItem;
71
- exports.default = _default;
70
+ var _default = exports.default = AccordionItem;
@@ -6,5 +6,4 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _react = require("react");
8
8
  const AccordionContext = /*#__PURE__*/(0, _react.createContext)({});
9
- var _default = AccordionContext;
10
- exports.default = _default;
9
+ var _default = exports.default = AccordionContext;
@@ -74,5 +74,4 @@ const AccordionItemBody = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
74
74
  })
75
75
  });
76
76
  });
77
- var _default = AccordionItemBody;
78
- exports.default = _default;
77
+ var _default = exports.default = AccordionItemBody;
@@ -45,5 +45,4 @@ const AccordionItemHeader = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
45
45
  children: children
46
46
  });
47
47
  });
48
- var _default = AccordionItemHeader;
49
- exports.default = _default;
48
+ var _default = exports.default = AccordionItemHeader;
@@ -48,5 +48,4 @@ function Breadcrumb(_ref) {
48
48
  }, child.props.children))
49
49
  });
50
50
  }
51
- var _default = Breadcrumb;
52
- exports.default = _default;
51
+ var _default = exports.default = Breadcrumb;
@@ -40,5 +40,4 @@ function Button(_ref) {
40
40
  })]
41
41
  });
42
42
  }
43
- var _default = Button;
44
- exports.default = _default;
43
+ var _default = exports.default = Button;
@@ -17,5 +17,4 @@ function Card(_ref) {
17
17
  children: children
18
18
  });
19
19
  }
20
- var _default = Card;
21
- exports.default = _default;
20
+ var _default = exports.default = Card;
@@ -21,5 +21,4 @@ function CardBody(_ref) {
21
21
  }), children]
22
22
  });
23
23
  }
24
- var _default = CardBody;
25
- exports.default = _default;
24
+ var _default = exports.default = CardBody;
@@ -26,5 +26,4 @@ function CardHeader(_ref) {
26
26
  }), action]
27
27
  });
28
28
  }
29
- var _default = CardHeader;
30
- exports.default = _default;
29
+ var _default = exports.default = CardHeader;
@@ -29,5 +29,4 @@ function CardNotification(_ref) {
29
29
  })]
30
30
  });
31
31
  }
32
- var _default = CardNotification;
33
- exports.default = _default;
32
+ var _default = exports.default = CardNotification;
@@ -8,8 +8,7 @@ var _classnames = _interopRequireDefault(require("classnames"));
8
8
  var _DeleteIcon = _interopRequireDefault(require("./DeleteIcon"));
9
9
  var _jsxRuntime = require("react/jsx-runtime");
10
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
- let ChipType;
12
- exports.ChipType = ChipType;
11
+ let ChipType = exports.ChipType = void 0;
13
12
  (function (ChipType) {
14
13
  ChipType[ChipType["Choice"] = 0] = "Choice";
15
14
  ChipType[ChipType["Category"] = 1] = "Category";
@@ -50,5 +49,4 @@ function Chip(_ref) {
50
49
  })]
51
50
  });
52
51
  }
53
- var _default = Chip;
54
- exports.default = _default;
52
+ var _default = exports.default = Chip;
@@ -21,5 +21,4 @@ function ChipContainer(_ref) {
21
21
  children: children
22
22
  });
23
23
  }
24
- var _default = ChipContainer;
25
- exports.default = _default;
24
+ var _default = exports.default = ChipContainer;
@@ -29,5 +29,4 @@ function LinkButton(_ref) {
29
29
  }), !iconOnly && children]
30
30
  });
31
31
  }
32
- var _default = LinkButton;
33
- exports.default = _default;
32
+ var _default = exports.default = LinkButton;
@@ -8,7 +8,7 @@ var _react = require("react");
8
8
  var _classnames = _interopRequireDefault(require("classnames"));
9
9
  var _jsxRuntime = require("react/jsx-runtime");
10
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
- const LoadingIndicator = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
11
+ const LoadingIndicator = exports.LoadingIndicator = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
12
12
  let {
13
13
  size = 'large',
14
14
  children,
@@ -43,6 +43,4 @@ const LoadingIndicator = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
43
43
  })]
44
44
  });
45
45
  });
46
- exports.LoadingIndicator = LoadingIndicator;
47
- var _default = LoadingIndicator;
48
- exports.default = _default;
46
+ var _default = exports.default = LoadingIndicator;
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = exports.MobileFlyout = void 0;
7
+ var _react = require("react");
8
+ var _classnames = _interopRequireDefault(require("classnames"));
9
+ var _useForkRef = _interopRequireDefault(require("../../helper/useForkRef"));
10
+ var _useOnClickOutside = _interopRequireDefault(require("../../helper/useOnClickOutside"));
11
+ var _useControlled = _interopRequireDefault(require("../../helper/useControlled"));
12
+ var _MobileFlyoutContext = _interopRequireDefault(require("./MobileFlyoutContext"));
13
+ var _jsxRuntime = require("react/jsx-runtime");
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+ const defaultVisibleValue = ['root'];
16
+ const MobileFlyout = exports.MobileFlyout = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
17
+ let {
18
+ className,
19
+ children,
20
+ open,
21
+ onOpenChange,
22
+ onVisibleChange,
23
+ defaultOpen,
24
+ visible,
25
+ defaultVisible = defaultVisibleValue,
26
+ back,
27
+ ...props
28
+ } = _ref;
29
+ const [openState, setOpen] = (0, _useControlled.default)({
30
+ controlled: open,
31
+ default: defaultOpen
32
+ });
33
+ const [visibleState, setVisible] = (0, _useControlled.default)({
34
+ controlled: visible,
35
+ default: defaultVisible
36
+ });
37
+ const innerRef = (0, _react.useRef)(null);
38
+ const combinedRef = (0, _useForkRef.default)(ref, innerRef);
39
+ const handleVisibleChange = (0, _react.useCallback)(v => {
40
+ if (visibleState !== undefined) {
41
+ if (visibleState.includes(v)) {
42
+ const newArray = visibleState.filter(entry => entry !== v);
43
+ setVisible(newArray);
44
+ } else {
45
+ const newArray = [...visibleState, v];
46
+ setVisible(newArray);
47
+ }
48
+ }
49
+ onVisibleChange?.(v);
50
+ }, [onVisibleChange, setVisible, visibleState]);
51
+ const handleOpenChange = (0, _react.useCallback)(v => {
52
+ setOpen(v);
53
+ onOpenChange?.(v);
54
+ }, [onOpenChange, setOpen]);
55
+ function handleClickOutside() {
56
+ handleOpenChange(false);
57
+ }
58
+ function toggle() {
59
+ const newOpen = !openState;
60
+ handleOpenChange(newOpen);
61
+ }
62
+ (0, _useOnClickOutside.default)(innerRef, handleClickOutside);
63
+ const contextValue = (0, _react.useMemo)(() => ({
64
+ visible: visibleState ?? defaultVisibleValue,
65
+ setVisible: handleVisibleChange,
66
+ setOpen: handleOpenChange,
67
+ back
68
+ }), [handleVisibleChange, visibleState, back, handleOpenChange]);
69
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
70
+ className: (0, _classnames.default)('fwe-mobile-flyout', className),
71
+ ...props,
72
+ ref: combinedRef,
73
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
74
+ "aria-label": "menu",
75
+ type: "button",
76
+ className: openState ? 'fwe-close-button' : 'fwe-burger-button',
77
+ onClick: toggle
78
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
79
+ className: (0, _classnames.default)('fwe-mobile-flyout-container', {
80
+ 'fwe-opened': openState
81
+ }),
82
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_MobileFlyoutContext.default.Provider, {
83
+ value: contextValue,
84
+ children: children
85
+ })
86
+ })]
87
+ });
88
+ });
89
+ var _default = exports.default = MobileFlyout;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _react = require("react");
8
+ var _default = exports.default = /*#__PURE__*/(0, _react.createContext)(null);
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "ReactElement", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _react.ReactElement;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "Ref", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _react.Ref;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "RefAttributes", {
19
+ enumerable: true,
20
+ get: function () {
21
+ return _react.RefAttributes;
22
+ }
23
+ });
24
+ exports.default = void 0;
25
+ var _classnames = _interopRequireDefault(require("classnames"));
26
+ var _react = require("react");
27
+ var _MobileFlyoutContext = _interopRequireDefault(require("../MobileFlyoutContext"));
28
+ var _jsxRuntime = require("react/jsx-runtime");
29
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
30
+ /*
31
+ * Augment `forwardRef` only for this module so that storybook can infer controls
32
+ * (despite component being wrapped in forwardRef)
33
+ * https://fettblog.eu/typescript-react-generic-forward-refs/#option-3%3A-augment-forwardref
34
+ * https://github.com/microsoft/TypeScript/pull/30215
35
+ */
36
+
37
+ const MobileFlyoutItem = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
38
+ let {
39
+ component,
40
+ children,
41
+ pageLink,
42
+ icon,
43
+ onClick,
44
+ active,
45
+ ...props
46
+ } = _ref;
47
+ const Component = component || 'a';
48
+ const {
49
+ setVisible,
50
+ setOpen
51
+ } = (0, _react.useContext)(_MobileFlyoutContext.default);
52
+ function handleClick(e) {
53
+ if (pageLink) {
54
+ setVisible(pageLink);
55
+ } else {
56
+ setOpen(false);
57
+ }
58
+ onClick?.(e);
59
+ }
60
+ return /*#__PURE__*/(0, _jsxRuntime.jsxs)(Component, {
61
+ className: "fwe-mobile-flyout-item fwe-bb",
62
+ ...props,
63
+ ref: ref,
64
+ onClick: handleClick,
65
+ children: [icon && /*#__PURE__*/(0, _jsxRuntime.jsx)("i", {
66
+ className: `fwe-mr-xs fwe-icon fwe-icon-${icon}`
67
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
68
+ className: (0, _classnames.default)('fwe-flex-grow-1', {
69
+ 'fwe-color-hero': active
70
+ }),
71
+ children: children
72
+ }), pageLink && /*#__PURE__*/(0, _jsxRuntime.jsx)("i", {
73
+ className: "fwe-icon fwe-icon-arrows-right-2"
74
+ })]
75
+ });
76
+ });
77
+ var _default = exports.default = MobileFlyoutItem;