@uva-glass/component-library 3.55.6 → 3.55.7

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 (168) hide show
  1. package/dist/Accordion-DvblEUVu.js.map +1 -1
  2. package/dist/AccordionCard-BXy-plB7.js.map +1 -1
  3. package/dist/ActionList-O9w1hqNg.js.map +1 -1
  4. package/dist/AddCatalogueLinkForm-rph4K9P0.js.map +1 -1
  5. package/dist/CheckboxButtonBar-5UMIFMKH.js.map +1 -1
  6. package/dist/ClipboardButton-geHjMl2J.js.map +1 -1
  7. package/dist/ControlsButton-B1XRpMUM.js.map +1 -1
  8. package/dist/CopyableText-DkyhZ6wk.js.map +1 -1
  9. package/dist/Drawer-e7UFHVg9.js.map +1 -1
  10. package/dist/EmptyStateDataDisplay-D0QiI8nE.js.map +1 -1
  11. package/dist/ExpandableInfoPanel-CnBVVNlJ.js.map +1 -1
  12. package/dist/FeedbackBar-ByKp32HE.js.map +1 -1
  13. package/dist/FieldHint-fxnEOsVZ.js.map +1 -1
  14. package/dist/Input-Bn-arMaC.js.map +1 -1
  15. package/dist/InputField-BWAy19w9.js.map +1 -1
  16. package/dist/Lexical.prod-CqPLSi0R.js.map +1 -1
  17. package/dist/LexicalClipboard.prod-BVw_sFpo.js.map +1 -1
  18. package/dist/LexicalComposerContext.prod-Ca-YN_fj.js.map +1 -1
  19. package/dist/LexicalExtension.prod-CUQTgbur.js.map +1 -1
  20. package/dist/LexicalLink.prod-DMhcqD9x.js.map +1 -1
  21. package/dist/LexicalList.prod-eYlcb5Ao.js.map +1 -1
  22. package/dist/LexicalTable.prod-DlOxUQou.js.map +1 -1
  23. package/dist/LexicalUtils.prod-BqcriFWV.js.map +1 -1
  24. package/dist/LinkContextMenu-ePn1iZ_z.js.map +1 -1
  25. package/dist/MenuLink-Cm1yZO_5.js.map +1 -1
  26. package/dist/ModalDialog-N50NGnd4.js.map +1 -1
  27. package/dist/MultiSelectBox-Cuh_o-A1.js.map +1 -1
  28. package/dist/MultiSelectItem-BF5xRjz5.js.map +1 -1
  29. package/dist/Notification-CIhsHuF0.js.map +1 -1
  30. package/dist/OverlayStepBar-CjaoYdsh.js.map +1 -1
  31. package/dist/PageOverlay-S4xsqJha.js.map +1 -1
  32. package/dist/PasteHandlerPlugin-BNp8ST0q.js.map +1 -1
  33. package/dist/Periods-BYETtB6R.js.map +1 -1
  34. package/dist/ProgrammeCard-76gG7ksx.js.map +1 -1
  35. package/dist/RadioGroup-JeTjVp5B.js.map +1 -1
  36. package/dist/Slider-BlLyrET9.js.map +1 -1
  37. package/dist/SortableProvider-8HYiBXJS.js.map +1 -1
  38. package/dist/Spinner-BpElTDIu.js.map +1 -1
  39. package/dist/StatusPill-DM7n3I4W.js.map +1 -1
  40. package/dist/TableCellContextMenu-D0IMQr3E.js.map +1 -1
  41. package/dist/TableCellResizerPlugin-Bc5y-Qbx.js.map +1 -1
  42. package/dist/TextArea-CuASC9bX.js.map +1 -1
  43. package/dist/ToggleSwitch-C7z7JVtx.js.map +1 -1
  44. package/dist/Tooltip-D27p9kh4.js.map +1 -1
  45. package/dist/VarIndicator-C-GueOZD.js.map +1 -1
  46. package/dist/assets/{src/css/fonts.css → fonts.css} +4 -4
  47. package/dist/chunk-SZQXB3JV-D6GR5B4F.js.map +1 -1
  48. package/dist/{client-8jeXrH7N.js → client-b7M3CmlC.js} +9 -9
  49. package/dist/{client-8jeXrH7N.js.map → client-b7M3CmlC.js.map} +1 -1
  50. package/dist/clsx-BD2qMUU1.js.map +1 -1
  51. package/dist/components/Accordion/Accordion.test.js +2 -2
  52. package/dist/components/Accordion/Accordion.test.js.map +1 -1
  53. package/dist/components/AccordionCard/AccordionCard.test.js +2 -2
  54. package/dist/components/AccordionCard/AccordionCard.test.js.map +1 -1
  55. package/dist/components/ActionList/ActionList.test.js +2 -2
  56. package/dist/components/ActionList/ActionList.test.js.map +1 -1
  57. package/dist/components/AppStatusBar/AppStatusBar.test.js +1 -1
  58. package/dist/components/AppStatusBar/AppStatusBar.test.js.map +1 -1
  59. package/dist/components/Attention/Attention.test.js +1 -1
  60. package/dist/components/Attention/Attention.test.js.map +1 -1
  61. package/dist/components/Backdrop/Backdrop.test.js +1 -1
  62. package/dist/components/Backdrop/Backdrop.test.js.map +1 -1
  63. package/dist/components/Buttons/Button.test.js +1 -1
  64. package/dist/components/Buttons/Button.test.js.map +1 -1
  65. package/dist/components/Buttons/LinkButton.test.js +1 -1
  66. package/dist/components/Buttons/LinkButton.test.js.map +1 -1
  67. package/dist/components/Buttons/MenuButton.js.map +1 -1
  68. package/dist/components/Buttons/MenuButton.test.js +1 -1
  69. package/dist/components/Buttons/MenuButton.test.js.map +1 -1
  70. package/dist/components/Card/Card.test.js +1 -1
  71. package/dist/components/Card/Card.test.js.map +1 -1
  72. package/dist/components/Checkbox/Checkbox.test.js +2 -2
  73. package/dist/components/Checkbox/Checkbox.test.js.map +1 -1
  74. package/dist/components/CheckboxButtonBar/CheckboxButtonBar.test.js +1 -1
  75. package/dist/components/CheckboxButtonBar/CheckboxButtonBar.test.js.map +1 -1
  76. package/dist/components/CheckboxTree/CheckboxTree.stories.js.map +1 -1
  77. package/dist/components/Drawer/Drawer.stories.js.map +1 -1
  78. package/dist/components/FeedbackBar/FeedbackBar.stories.js.map +1 -1
  79. package/dist/components/FeedbackBar/FeedbackBar.test.js +1 -1
  80. package/dist/components/FeedbackBar/FeedbackBar.test.js.map +1 -1
  81. package/dist/components/Icon/Icon.js.map +1 -1
  82. package/dist/components/IconButton/IconButton.stories.js.map +1 -1
  83. package/dist/components/InputField/InputField.stories.js.map +1 -1
  84. package/dist/components/Label/Label.test.js +1 -1
  85. package/dist/components/Label/Label.test.js.map +1 -1
  86. package/dist/components/MetaDataBar/MetaDataBar.test.js +1 -1
  87. package/dist/components/MetaDataBar/MetaDataBar.test.js.map +1 -1
  88. package/dist/components/MultiSelect/MultiSelect.stories.js.map +1 -1
  89. package/dist/components/MultiSelectBox/MultiSelectBox.stories.js.map +1 -1
  90. package/dist/components/MultiSelectBox/MultiSelectBox.test.js +1 -1
  91. package/dist/components/MultiSelectBox/MultiSelectBox.test.js.map +1 -1
  92. package/dist/components/Notification/Notification.test.js +1 -1
  93. package/dist/components/Notification/Notification.test.js.map +1 -1
  94. package/dist/components/OverlayStepBar/OverlayStepBar.stories.js.map +1 -1
  95. package/dist/components/PageOverlay/PageOverlay.stories.js +2 -2
  96. package/dist/components/PageOverlay/PageOverlay.stories.js.map +1 -1
  97. package/dist/components/RadioGroup/Radiogroup.test.js +1 -1
  98. package/dist/components/RadioGroup/Radiogroup.test.js.map +1 -1
  99. package/dist/components/RteEditor/Plugins/BlockFormatPlugin/BlockFormatPlugin.js.map +1 -1
  100. package/dist/components/RteEditor/Plugins/CourseCataloguePlugin/CourseCataloguePlugin.js.map +1 -1
  101. package/dist/components/RteEditor/Plugins/ListPlugin/ListPlugin.js.map +1 -1
  102. package/dist/components/RteEditor/Plugins/TablePlugin/helpers.js.map +1 -1
  103. package/dist/components/RteEditor/Providers/LanguageProvider.js.map +1 -1
  104. package/dist/components/RteEditor/RteEditor.stories.js.map +1 -1
  105. package/dist/components/RteEditor/helpers.js.map +1 -1
  106. package/dist/components/RteEditor/hooks/useFlyout.js.map +1 -1
  107. package/dist/components/RteEditor/hooks/useTranslation.js.map +1 -1
  108. package/dist/components/RteEditor/nodes/CourseCatalogueNode/CourseCatalogueNode.js.map +1 -1
  109. package/dist/components/RteEditor/nodes/TableWrapperNode/TableWrapperNode.js.map +1 -1
  110. package/dist/components/SearchField/SearchField.js.map +1 -1
  111. package/dist/components/SearchField/SearcheField.stories.js.map +1 -1
  112. package/dist/components/SearchField/components/ResultsOption.js.map +1 -1
  113. package/dist/components/SelectListbox/SelectListBox.stories.js.map +1 -1
  114. package/dist/components/SelectListbox/SelectListbox.js.map +1 -1
  115. package/dist/components/SelectListbox/SelectProvider.js.map +1 -1
  116. package/dist/components/SelectListbox/components/SelectButton.js.map +1 -1
  117. package/dist/components/SelectListbox/components/SelectContainer.js.map +1 -1
  118. package/dist/components/SelectListbox/components/SelectOption.js.map +1 -1
  119. package/dist/components/SelectListbox/components/SelectOptionBox.js.map +1 -1
  120. package/dist/components/Slider/Slider.stories.js.map +1 -1
  121. package/dist/components/Sortable/Sortable.js.map +1 -1
  122. package/dist/components/Sortable/components/SortableHandle.js.map +1 -1
  123. package/dist/components/Sortable/components/SortableItem.js.map +1 -1
  124. package/dist/components/Sortable/sortableReducer.js.map +1 -1
  125. package/dist/components/StatusBadge/StatusBadge.test.js +1 -1
  126. package/dist/components/StatusBadge/StatusBadge.test.js.map +1 -1
  127. package/dist/components/TextArea/TextArea.test.js +2 -2
  128. package/dist/components/TextArea/TextArea.test.js.map +1 -1
  129. package/dist/components/VarIndicator/VarIndicator.test.js +2 -2
  130. package/dist/components/VarIndicator/VarIndicator.test.js.map +1 -1
  131. package/dist/components/WeekSelector/WeekSelector.js.map +1 -1
  132. package/dist/components/WeekSelector/WeekSelector.stories.js.map +1 -1
  133. package/dist/components/WeekSelector/components/WeekSelectorOption.js.map +1 -1
  134. package/dist/components/hooks/useDebounce.js.map +1 -1
  135. package/dist/components/hooks/useOnClickOutside.js.map +1 -1
  136. package/dist/components/hooks/usePositionedFloaters.js.map +1 -1
  137. package/dist/components/hooks/useResponsive.js.map +1 -1
  138. package/dist/components-BzxAULjf.js.map +1 -1
  139. package/dist/dist-V_v3kC0L.js.map +1 -1
  140. package/dist/{esm-BwHoYxVb.js → esm-BoujHjK5.js} +2 -2
  141. package/dist/{esm-BwHoYxVb.js.map → esm-BoujHjK5.js.map} +1 -1
  142. package/dist/helpers-B1VK8xTF.js.map +1 -1
  143. package/dist/lib-BvOQt8El.js.map +1 -1
  144. package/dist/{react-18-B7MZmX_Z.js → react-18-DxAWL8_m.js} +2 -2
  145. package/dist/{react-18-B7MZmX_Z.js.map → react-18-DxAWL8_m.js.map} +1 -1
  146. package/dist/{react.esm-D_F72rY1.js → react.esm-CweFe1CK.js} +2 -2
  147. package/dist/{react.esm-D_F72rY1.js.map → react.esm-CweFe1CK.js.map} +1 -1
  148. package/dist/setupTests.js +2 -2
  149. package/dist/setupTests.js.map +1 -1
  150. package/dist/storybook__react.d.js +1 -1
  151. package/dist/storybook__react.d.js.map +1 -1
  152. package/dist/test-Pa9Lwbsq.js.map +1 -1
  153. package/dist/test-utils-Cmn06m_x.js.map +1 -1
  154. package/package.json +7 -6
  155. /package/dist/assets/favicon/{src/assets/favicon/android-chrome-192x192.png → android-chrome-192x192.png} +0 -0
  156. /package/dist/assets/favicon/{src/assets/favicon/android-chrome-512x512.png → android-chrome-512x512.png} +0 -0
  157. /package/dist/assets/favicon/{src/assets/favicon/apple-touch-icon.png → apple-touch-icon.png} +0 -0
  158. /package/dist/assets/favicon/{src/assets/favicon/favicon-16x16.png → favicon-16x16.png} +0 -0
  159. /package/dist/assets/favicon/{src/assets/favicon/favicon-32x32.png → favicon-32x32.png} +0 -0
  160. /package/dist/assets/favicon/{src/assets/favicon/favicon.ico → favicon.ico} +0 -0
  161. /package/dist/assets/favicon/{src/assets/favicon/favicon.svg → favicon.svg} +0 -0
  162. /package/dist/assets/favicon/{src/assets/favicon/site.webmanifest → site.webmanifest} +0 -0
  163. /package/dist/assets/fonts/{src/assets/fonts/SourceSans3-Regular.otf.woff → SourceSans3-Regular.otf.woff} +0 -0
  164. /package/dist/assets/fonts/{src/assets/fonts/SourceSans3-Regular.otf.woff2 → SourceSans3-Regular.otf.woff2} +0 -0
  165. /package/dist/assets/fonts/{src/assets/fonts/SourceSans3-Semibold.otf.woff → SourceSans3-Semibold.otf.woff} +0 -0
  166. /package/dist/assets/fonts/{src/assets/fonts/SourceSans3-Semibold.otf.woff2 → SourceSans3-Semibold.otf.woff2} +0 -0
  167. /package/dist/assets/{src/css/globals.css → globals.css} +0 -0
  168. /package/dist/assets/{src/css/variables.css → variables.css} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"LexicalUtils.prod-BqcriFWV.js","names":["t","z","n","O","s","c","f","U","H","p","h","y","i","o","m","G","J","Q","S","x","T","N","C","Y","Z","k","t","r","l","s","i","n","o","e","d","f","C","u","A","a","K","c","x","E","S","y","L","N","b","P","R","M","v","h"],"sources":["../node_modules/@lexical/selection/LexicalSelection.prod.mjs","../node_modules/@lexical/utils/LexicalUtils.prod.mjs"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{$isTextNode as e,$getEditor as t,$isRootNode as n,$getSelection as o,$isRangeSelection as l,$caretRangeFromSelection as r,$isTokenOrSegmented as s,$isElementNode as i,$getCharacterOffsets as c,$cloneWithPropertiesEphemeral as f,$getNodeByKey as u,$getPreviousSelection as g,$createTextNode as a,getStyleObjectFromCSS as d,$createRangeSelection as p,$findMatchingParent as h,INTERNAL_$isBlock as y,$setSelection as m,$caretFromPoint as S,$isExtendableTextPointCaret as x,$extendCaretToRange as T,$isChildCaret as N,$isDecoratorNode as C,$isRootOrShadowRoot as w,$hasAncestor as v,$isLeafNode as K}from\"lexical\";export{$cloneWithProperties,$selectAll}from\"lexical\";function E(e,...t){const n=new URL(\"https://lexical.dev/docs/error\"),o=new URLSearchParams;o.append(\"code\",e);for(const e of t)o.append(\"v\",e);throw n.search=o.toString(),Error(`Minified Lexical error #${e}; visit ${n.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}function P(e){let t=e;for(;null!=t;){if(t.nodeType===Node.TEXT_NODE)return t;t=t.firstChild}return null}function k(e){const t=e.parentNode;if(null==t)throw new Error(\"Should never happen\");return[t,Array.from(t.childNodes).indexOf(e)]}function I(t,n,o,l,r){const s=n.getKey(),i=l.getKey(),c=document.createRange();let f=t.getElementByKey(s),u=t.getElementByKey(i),g=o,a=r;if(e(n)&&(f=P(f)),e(l)&&(u=P(u)),void 0===n||void 0===l||null===f||null===u)return null;\"BR\"===f.nodeName&&([f,g]=k(f)),\"BR\"===u.nodeName&&([u,a]=k(u));const d=f.firstChild;f===u&&null!=d&&\"BR\"===d.nodeName&&0===g&&0===a&&(a=1);try{c.setStart(f,g),c.setEnd(u,a)}catch(e){return null}return!c.collapsed||g===a&&s===i||(c.setStart(u,a),c.setEnd(f,g)),c}function B(e,t){const n=e.getRootElement();if(null===n)return[];const o=n.getBoundingClientRect(),l=getComputedStyle(n),r=parseFloat(l.paddingLeft)+parseFloat(l.paddingRight),s=Array.from(t.getClientRects());let i,c=s.length;s.sort((e,t)=>{const n=e.top-t.top;return Math.abs(n)<=3?e.left-t.left:n});for(let e=0;e<c;e++){const t=s[e],n=i&&i.top<=t.top&&i.top+i.height>t.top&&i.left+i.width>t.left,l=t.width+r===o.width;n||l?(s.splice(e--,1),c--):i=t}return s}function F(e){let t=\"\";for(const n in e)n&&(t+=`${n}: ${e[n]};`);return t}function b(e){const n=t().getElementByKey(e.getKey());if(null===n)return null;const o=n.ownerDocument.defaultView;return null===o?null:o.getComputedStyle(n)}function z(e){return b(n(e)?e:e.getParentOrThrow())}function O(e){const t=z(e);return null!==t&&\"rtl\"===t.direction}function R(e,t,n=\"self\"){const o=e.getStartEndPoints();if(t.isSelected(e)&&!s(t)&&null!==o){const[l,r]=o,s=e.isBackward(),i=l.getNode(),u=r.getNode(),g=t.is(i),a=t.is(u);if(g||a){const[o,l]=c(e),r=i.is(u),g=t.is(s?u:i),a=t.is(s?i:u);let d,p=0;if(r)p=o>l?l:o,d=o>l?o:l;else if(g){p=s?l:o,d=void 0}else if(a){p=0,d=s?o:l}const h=t.__text.slice(p,d);h!==t.__text&&(\"clone\"===n&&(t=f(t)),t.__text=h)}}return t}function A(e){if(\"text\"===e.type)return e.offset===e.getNode().getTextContentSize();const t=e.getNode();return i(t)||E(177),e.offset===t.getChildrenSize()}function _(t,o,r){let s=o.getNode(),c=r;if(i(s)){const e=s.getDescendantByIndex(o.offset);null!==e&&(s=e)}for(;c>0&&null!==s;){if(i(s)){const e=s.getLastDescendant();null!==e&&(s=e)}let r=s.getPreviousSibling(),f=0;if(null===r){let e=s.getParentOrThrow(),t=e.getPreviousSibling();for(;null===t;){if(e=e.getParent(),null===e){r=null;break}t=e.getPreviousSibling()}null!==e&&(f=e.isInline()?0:2,r=t)}let d=s.getTextContent();\"\"===d&&i(s)&&!s.isInline()&&(d=\"\\n\\n\");const p=d.length;if(!e(s)||c>=p){const e=s.getParent();s.remove(),null==e||0!==e.getChildrenSize()||n(e)||e.remove(),c-=p+f,s=r}else{const n=s.getKey(),r=t.getEditorState().read(()=>{const t=u(n);return e(t)&&t.isSimpleText()?t.getTextContent():null}),i=p-c,f=d.slice(0,i);if(null!==r&&r!==d){const e=g();let t=s;if(s.isSimpleText())s.setTextContent(r);else{const e=a(r);s.replace(e),t=e}if(l(e)&&e.isCollapsed()){const n=e.anchor.offset;t.select(n,n)}}else if(s.isSimpleText()){const e=o.key===n;let t=o.offset;t<c&&(t=p);const l=e?t-c:0,r=e?t:i;if(e&&0===l){const[e]=s.splitText(l,r);e.remove()}else{const[,e]=s.splitText(l,r);e.remove()}}else{const e=a(f);s.replace(e)}c=0}}}const L=()=>{};function M(t,n){(l(t)?t.isCollapsed():e(t)||i(t))||E(280);const o=d(l(t)?t.style:e(t)?t.getStyle():t.getTextStyle()),r=F(Object.entries(n).reduce((e,[n,l])=>(\"function\"==typeof l?e[n]=l(o[n],t):null===l?delete e[n]:e[n]=l,e),{...o}));l(t)||e(t)?t.setStyle(r):t.setTextStyle(r)}function $(e,t){if(l(e)&&e.isCollapsed()){M(e,t);const n=e.anchor.getNode();i(n)&&n.isEmpty()&&M(n,t)}D(e=>{M(e,t)});const n=e.getNodes();if(n.length>0){const e=new Set;for(const o of n){if(!i(o)||!o.canBeEmpty()||0!==o.getChildrenSize())continue;const n=o.getKey();e.has(n)||(e.add(n),M(o,t))}}}function D(t){const n=o();if(!n)return;const i=new Map,c=e=>i.get(e.getKey())||[0,e.getTextContentSize()];if(l(n))for(const e of r(n).getTextSlices())e&&i.set(e.caret.origin.getKey(),e.getSliceIndices());const f=n.getNodes();for(const n of f){if(!e(n)||!n.canHaveFormat())continue;const[o,l]=c(n);if(l!==o)if(s(n)||0===o&&l===n.getTextContentSize())t(n);else{t(n.splitText(o,l)[0===o?0:1])}}l(n)&&\"text\"===n.anchor.type&&\"text\"===n.focus.type&&n.anchor.key===n.focus.key&&j(n)}function j(e){if(e.isBackward()){const{anchor:t,focus:n}=e,{key:o,offset:l,type:r}=t;t.set(n.key,n.offset,n.type),n.set(o,l,r)}}function U(e,t){const n=e.getFormatType(),o=e.getIndent();n!==t.getFormatType()&&t.setFormat(n),o!==t.getIndent()&&t.setIndent(o)}function H(e,t,n=U){if(null===e)return;const l=e.getStartEndPoints(),r=new Map;let s=null;if(l){const[e,t]=l;s=p(),s.anchor.set(e.key,e.offset,e.type),s.focus.set(t.key,t.offset,t.type);const n=h(e.getNode(),y),o=h(t.getNode(),y);i(n)&&r.set(n.getKey(),n),i(o)&&r.set(o.getKey(),o)}for(const t of e.getNodes())if(i(t)&&y(t))r.set(t.getKey(),t);else if(null===l){const e=h(t,y);i(e)&&r.set(e.getKey(),e)}for(const[e,o]of r){const l=t();n(o,l),o.replace(l,!0),s&&(e===s.anchor.key&&s.anchor.set(l.getKey(),s.anchor.offset,s.anchor.type),e===s.focus.key&&s.focus.set(l.getKey(),s.focus.offset,s.focus.type))}s&&e.is(o())&&m(s)}function V(e){return e.getNode().isAttached()}function W(e){let t=e;for(;null!==t&&!w(t);){const e=t.getLatest(),n=t.getParent();0===e.getChildrenSize()&&t.remove(!0),t=n}}function X(e,t,n=null){const o=e.getStartEndPoints(),l=o?o[0]:null,r=e.getNodes(),s=r.length;if(null!==l&&(0===s||1===s&&\"element\"===l.type&&0===l.getNode().getChildrenSize())){const e=\"text\"===l.type?l.getNode().getParentOrThrow():l.getNode(),o=e.getChildren();let r=t();return r.setFormat(e.getFormatType()),r.setIndent(e.getIndent()),o.forEach(e=>r.append(e)),n&&(r=n.append(r)),void e.replace(r)}let i=null,c=[];for(let o=0;o<s;o++){const l=r[o];w(l)?(q(e,c,c.length,t,n),c=[],i=l):null===i||null!==i&&v(l,i)?c.push(l):(q(e,c,c.length,t,n),c=[l])}q(e,c,c.length,t,n)}function q(e,t,n,o,r=null){if(0===t.length)return;const s=t[0],c=new Map,f=[];let u=i(s)?s:s.getParentOrThrow();u.isInline()&&(u=u.getParentOrThrow());let a=!1;for(;null!==u;){const e=u.getPreviousSibling();if(null!==e){u=e,a=!0;break}if(u=u.getParentOrThrow(),w(u))break}const d=new Set;for(let e=0;e<n;e++){const n=t[e];i(n)&&0===n.getChildrenSize()&&d.add(n.getKey())}const p=new Set;for(let e=0;e<n;e++){const n=t[e];let l=n.getParent();if(null!==l&&l.isInline()&&(l=l.getParent()),null!==l&&K(n)&&!p.has(n.getKey())){const e=l.getKey();if(void 0===c.get(e)){const t=o();t.setFormat(l.getFormatType()),t.setIndent(l.getIndent()),f.push(t),c.set(e,t),l.getChildren().forEach(e=>{t.append(e),p.add(e.getKey()),i(e)&&e.getChildrenKeys().forEach(e=>p.add(e))}),W(l)}}else if(d.has(n.getKey())){i(n)||E(179);const e=o();e.setFormat(n.getFormatType()),e.setIndent(n.getIndent()),f.push(e),n.remove(!0)}}if(null!==r)for(let e=0;e<f.length;e++){const t=f[e];r.append(t)}let h=null;if(w(u))if(a)if(null!==r)u.insertAfter(r);else for(let e=f.length-1;e>=0;e--){const t=f[e];u.insertAfter(t)}else{const e=u.getFirstChild();if(i(e)&&(u=e),null===e)if(r)u.append(r);else for(let e=0;e<f.length;e++){const t=f[e];u.append(t),h=t}else if(null!==r)e.insertBefore(r);else for(let t=0;t<f.length;t++){const n=f[t];e.insertBefore(n),h=n}}else if(r)u.insertAfter(r);else for(let e=f.length-1;e>=0;e--){const t=f[e];u.insertAfter(t),h=t}const y=g();l(y)&&V(y.anchor)&&V(y.focus)?m(y.clone()):null!==h?h.selectEnd():e.dirty=!0}function G(e){const t=J(e);return null!==t&&\"vertical-rl\"===t.writingMode}function J(e){const t=e.anchor.getNode();return i(t)?b(t):z(t)}function Q(e,t){let n=G(e)?!t:t;Z(e)&&(n=!n);const o=S(e.focus,n?\"previous\":\"next\");if(x(o))return!1;for(const e of T(o)){if(N(e))return!e.origin.isInline();if(!i(e.origin)){if(C(e.origin))return!0;break}}return!1}function Y(e,t,n,o){e.modify(t?\"extend\":\"move\",n,o)}function Z(e){const t=J(e);return null!==t&&\"rtl\"===t.direction}function ee(e,t,n){const o=Z(e);let l;l=G(e)||o?!n:n,Y(e,t,l,\"character\")}function te(e,t,n){const o=e.getStyle(),l=d(o);return null!==l&&l[t]||n}function ne(t,n,o=\"\"){let r=null;const s=t.getNodes(),i=t.anchor,c=t.focus,f=t.isBackward(),u=f?c.getNode():i.getNode(),g=f?i.getNode():c.getNode(),a=f?c.offset:i.offset,p=f?i.offset:c.offset;if(l(t)&&t.isCollapsed()&&\"\"!==t.style){const e=t.style,o=d(e);if(null!==o&&n in o)return o[n]}for(let t=0;t<s.length;t++){const l=s[t];if((0!==t||!l.is(u)||!e(l)||a!==l.getTextContentSize())&&((0===t||!l.is(g)||0!==p)&&e(l))){const e=te(l,n,o);if(null===r)r=e;else if(r!==e){r=\"\";break}}}return null===r?o:r}const oe=d,le=_;export{L as $addNodeStyle,U as $copyBlockFormatIndent,j as $ensureForwardRangeSelection,D as $forEachSelectedTextNode,b as $getComputedStyleForElement,z as $getComputedStyleForParent,ne as $getSelectionStyleValueForProperty,A as $isAtNodeEnd,Z as $isParentElementRTL,O as $isParentRTL,Y as $moveCaretSelection,ee as $moveCharacter,$ as $patchStyleText,H as $setBlocksType,Q as $shouldOverrideDefaultCharacterSelection,R as $sliceSelectedTextNodeContent,_ as $trimTextContentFromAnchor,X as $wrapNodes,I as createDOMRange,B as createRectsFromDOMRange,F as getCSSFromStyleObject,oe as getStyleObjectFromCSS,le as trimTextContentFromAnchor};\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{isHTMLElement as t,mergeRegister as e,$getSelection as n,$isRangeSelection as o,$isElementNode as r,getDOMTextNode as i,$getEditor as l,$getEditorDOMRenderConfig as s,$getChildCaret as u,$findMatchingParent as c,$getChildCaretOrSelf as a,$getSiblingCaret as f,$getAdjacentSiblingOrParentSiblingCaret as d,$caretRangeFromSelection as g,$getCaretRangeInDirection as p,$removeTextFromCaretRange as m,$isTextPointCaret as h,$splitAtPointCaretNext as v,$setSelectionFromCaretRange as y,$getCaretRange as w,$getPreviousSelection as x,$caretFromPoint as E,$getRoot as C,$createParagraphNode as S,$getAdjacentChildCaret as A,$isChildCaret as N,$normalizeCaret as b,$getCollapsedCaretRange as L,$getCaretInDirection as P,$isSiblingCaret as R,$rewindSiblingCaret as M,$cloneWithProperties as T,$setSelection as B,makeStepwiseIterator as K,$getState as _,$setState as $}from\"lexical\";export{$findMatchingParent,$getAdjacentSiblingOrParentSiblingCaret,$splitNode,addClassNamesToElement,isBlockDomNode,isHTMLAnchorElement,isHTMLElement,isInlineDomNode,mergeRegister,removeClassNamesFromElement}from\"lexical\";import{createRectsFromDOMRange as k}from\"@lexical/selection\";function F(t,...e){const n=new URL(\"https://lexical.dev/docs/error\"),o=new URLSearchParams;o.append(\"code\",t);for(const t of e)o.append(\"v\",t);throw n.search=o.toString(),Error(`Minified Lexical error #${t}; visit ${n.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}const I=\"undefined\"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,O=I&&\"documentMode\"in document?document.documentMode:null,D=I&&/Mac|iPod|iPhone|iPad/.test(navigator.platform),H=I&&/^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent),j=!(!I||!(\"InputEvent\"in window)||O)&&\"getTargetRanges\"in new window.InputEvent(\"input\"),z=I&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,U=I&&/Android/.test(navigator.userAgent),V=I&&/Version\\/[\\d.]+.*Safari/.test(navigator.userAgent)&&!U,W=I&&/^(?=.*Chrome).*/i.test(navigator.userAgent),G=I&&U&&W,q=I&&/AppleWebKit\\/[\\d.]+/.test(navigator.userAgent)&&D&&!W;function J(t){return`${t}px`}const Q={attributes:!0,characterData:!0,childList:!0,subtree:!0};function X(e,n,o){let r=null,i=null,l=null,s=[];const u=document.createElement(\"div\");function c(){null===r&&F(182),null===i&&F(183);const{left:t,top:l}=i.getBoundingClientRect(),c=k(e,n);var a,f;u.isConnected||(f=u,(a=i).insertBefore(f,a.firstChild));let d=!1;for(let e=0;e<c.length;e++){const n=c[e],o=s[e]||document.createElement(\"div\"),r=o.style;\"absolute\"!==r.position&&(r.position=\"absolute\",d=!0);const i=J(n.left-t);r.left!==i&&(r.left=i,d=!0);const a=J(n.top-l);r.top!==a&&(o.style.top=a,d=!0);const f=J(n.width);r.width!==f&&(o.style.width=f,d=!0);const g=J(n.height);r.height!==g&&(o.style.height=g,d=!0),o.parentNode!==u&&(u.append(o),d=!0),s[e]=o}for(;s.length>c.length;)s.pop();d&&o(s)}function a(){i=null,r=null,null!==l&&l.disconnect(),l=null,u.remove();for(const t of s)t.remove();s=[]}u.style.position=\"relative\";const f=e.registerRootListener(function n(){const o=e.getRootElement();if(null===o)return a();const s=o.parentElement;if(!t(s))return a();a(),r=o,i=s,l=new MutationObserver(t=>{const o=e.getRootElement(),l=o&&o.parentElement;if(o!==r||l!==i)return n();for(const e of t)if(!u.contains(e.target))return c()}),l.observe(s,Q),c()});return()=>{f(),a()}}function Y(t,e,n){if(\"text\"!==t.type&&r(e)){const o=l(),r=s(o).$getDOMSlot(e,n,o);return[r.element,r.getFirstChildOffset()+t.offset]}return[i(n)||n,t.offset]}function Z(t){for(const e of t){const t=e.style;\"Highlight\"!==t.background&&(t.background=\"Highlight\"),\"HighlightText\"!==t.color&&(t.color=\"HighlightText\"),t.marginTop!==J(-1.5)&&(t.marginTop=J(-1.5)),t.paddingTop!==J(4)&&(t.paddingTop=J(4)),t.paddingBottom!==J(0)&&(t.paddingBottom=J(0))}}function tt(t,r=Z){let i=null,l=null,s=null,u=null,c=null,a=null,f=()=>{};function d(e){e.read(()=>{const e=n();if(!o(e))return i=null,s=null,u=null,a=null,f(),void(f=()=>{});const[d,g]=function(t){const e=t.getStartEndPoints();return t.isBackward()?[e[1],e[0]]:e}(e),p=d.getNode(),m=p.getKey(),h=d.offset,v=g.getNode(),y=v.getKey(),w=g.offset,x=t.getElementByKey(m),E=t.getElementByKey(y),C=null===i||x!==l||h!==s||m!==i.getKey(),S=null===u||E!==c||w!==a||y!==u.getKey();if((C||S)&&null!==x&&null!==E){const e=function(t,e,n,o,r,i,l){const s=(t._window?t._window.document:document).createRange();return s.setStart(...Y(e,n,o)),s.setEnd(...Y(r,i,l)),s}(t,d,p,x,g,v,E);f(),f=X(t,e,r)}i=p,l=x,s=h,u=v,c=E,a=w})}return d(t.getEditorState()),e(t.registerUpdateListener(({editorState:t})=>d(t)),()=>{f()})}function et(t,e){let n=null;const o=()=>{const o=getSelection(),r=o&&o.anchorNode,i=t.getRootElement();null!==r&&null!==i&&i.contains(r)?null!==n&&(n(),n=null):null===n&&(n=tt(t,e))};return t.registerRootListener(t=>{if(t){const e=t.ownerDocument;return e.addEventListener(\"selectionchange\",o),o(),()=>{null!==n&&n(),e.removeEventListener(\"selectionchange\",o)}}})}const nt=j,ot=I,rt=U,it=G,lt=D,st=q,ut=W,ct=H,at=z,ft=V;function dt(t,e){for(const n of e)if(t.type.startsWith(n))return!0;return!1}function gt(t,e){const n=t[Symbol.iterator]();return new Promise((t,o)=>{const r=[],i=()=>{const{done:l,value:s}=n.next();if(l)return t(r);const u=new FileReader;u.addEventListener(\"error\",o),u.addEventListener(\"load\",()=>{const t=u.result;\"string\"==typeof t&&r.push({file:s,result:t}),i()}),dt(s,e)?u.readAsDataURL(s):i()};i()})}function pt(t,e){return Array.from(vt(t,e))}function mt(t){return t?t.getAdjacentCaret():null}function ht(t,e){return Array.from(St(t,e))}function vt(t,e){return wt(\"next\",t,e)}function yt(t,e){const n=d(f(t,e));return n&&n[0]}function wt(t,e,n){const o=C(),i=e||o,l=r(i)?u(i,t):f(i,t),s=Et(i),c=n?A(a(f(n,t)))||yt(n,t):yt(i,t);let g=s;return K({hasNext:t=>null!==t,initial:l,map:t=>({depth:g,node:t.origin}),step:t=>{if(t.isSameNodeCaret(c))return null;N(t)&&g++;const e=d(t);return!e||e[0].isSameNodeCaret(c)?null:(g+=e[1],e[0])}})}function xt(t){const e=d(f(t,\"next\"));return e&&[e[0].origin,e[1]]}function Et(t){let e=-1;for(let n=t;null!==n;n=n.getParent())e++;return e}function Ct(t){const e=a(f(t,\"previous\")),n=d(e,\"root\");return n&&n[0].origin}function St(t,e){return wt(\"previous\",t,e)}function At(t,e){let n=t;for(;null!=n;){if(n instanceof e)return n;n=n.getParent()}return null}function Nt(t){const e=c(t,t=>r(t)&&!t.isInline());return r(e)||F(4,t.__key),e}function bt(t,e,n,o){const r=t=>t instanceof e;return t.registerNodeTransform(e,t=>{const e=(t=>{const e=t.getChildren();for(let t=0;t<e.length;t++){const n=e[t];if(r(n))return null}let n=t,o=t;for(;null!==n;)if(o=n,n=n.getParent(),r(n))return{child:o,parent:n};return null})(t);if(null!==e){const{child:r,parent:i}=e;if(r.is(t)){o(i,t);const e=r.getNextSiblings(),l=e.length;if(i.insertAfter(r),0!==l){const t=n(i);r.insertAfter(t);for(let n=0;n<l;n++)t.append(e[n])}i.canBeEmpty()||0!==i.getChildrenSize()||i.remove()}}})}function Lt(t,e){const n=new Map,o=t._pendingEditorState;for(const[t,o]of e._nodeMap)n.set(t,T(o));o&&(o._nodeMap=n),t._dirtyType=2;const r=e._selection;B(null===r?null:r.clone())}function Pt(t){const e=n()||x();let r;if(o(e))r=E(e.focus,\"next\");else{if(null!=e){const t=e.getNodes(),n=t[t.length-1];n&&(r=f(n,\"next\"))}r=r||u(C(),\"previous\").getFlipped().insert(S())}const i=Rt(t,r),l=A(i),s=N(l)?b(l):i;return y(L(s)),t.getLatest()}function Rt(t,e,n){let o=P(e,\"next\");h(o)&&(0===o.offset?o=f(o.origin,\"previous\").getFlipped():o.offset===o.origin.getTextContentSize()&&(o=f(o.origin,\"next\"))),o.origin.is(t)&&(R(o)||F(342,t.getKey(),t.getType()),o=M(o)),(t.is(o.getNodeAtCaret())||t.is(o.getFlipped().getNodeAtCaret()))&&t.remove(!0);for(let t=o;t;t=v(t,n))o=t;return h(o)&&F(283),o.insert(t.isInline()?S().append(t):t),P(f(t.getLatest(),\"next\"),e.direction)}function Mt(t){const e=n();if(!o(e))return void(e&&e.insertNodes([t]));const r=g(e);let i=p(m(r),\"next\").anchor;if(h(i)){const t=v(i);if(!t)return;i=t}const l=i.getFlipped();l.insert(t),y(w(l,l))}function Tt(t,e){const n=e();return t.replace(n),n.append(t),n}function Bt(t,e){return null!==t&&Object.getPrototypeOf(t).constructor.name===e.name}function Kt(t,e){const n=[];for(let o=0;o<t.length;o++){const r=e(t[o]);null!==r&&n.push(r)}return n}function _t(t){const e=n();if(!o(e))return!1;const i=new Set,l=e.getNodes();for(let e=0;e<l.length;e++){const n=l[e],o=n.getKey();if(i.has(o))continue;const s=c(n,t=>r(t)&&!t.isInline());if(null===s)continue;const u=s.getKey();s.canIndent()&&!i.has(u)&&(i.add(u),t(s))}return i.size>0}function $t(t,e){u(t,\"next\").insert(e)}let kt=!(ct||!ot)&&void 0;function Ft(t,e=!1){let n=1;if(function(){if(void 0===kt){const t=document.createElement(\"div\");t.style.position=\"absolute\",t.style.opacity=\"0\",t.style.width=\"100px\",t.style.left=\"-1000px\",document.body.appendChild(t);const e=t.getBoundingClientRect();t.style.setProperty(\"zoom\",\"2\"),kt=t.getBoundingClientRect().width===e.width,document.body.removeChild(t)}return kt}()||e)for(;t;)n*=Number(window.getComputedStyle(t).getPropertyValue(\"zoom\")),t=t.parentElement;return n}function It(t){return null!==t._parentEditor}function Ot(t,e){return Dt(t,e,null)}function Dt(t,e,n){let o=!1;for(const i of zt(t))e(i)?null!==n&&n(i):(o=!0,r(i)&&Dt(i,e,n||(t=>i.insertAfter(t))),i.remove());return o}function Ht(t,e){const n=[],o=Array.from(t).reverse();for(let t=o.pop();void 0!==t;t=o.pop())if(e(t))n.push(t);else if(r(t))for(const e of zt(t))o.push(e);return n}function jt(t){return Ut(u(t,\"next\"))}function zt(t){return Ut(u(t,\"previous\"))}function Ut(t){return K({hasNext:R,initial:t.getAdjacentCaret(),map:t=>t.origin.getLatest(),step:t=>t.getAdjacentCaret()})}function Vt(t){M(f(t,\"next\")).splice(1,t.getChildren())}function Wt(t){const e=e=>_(e,t),n=(e,n)=>$(e,t,n);return{$get:e,$set:n,accessors:[e,n],makeGetterMethod:()=>function(){return e(this)},makeSetterMethod:()=>function(t){return n(this,t)},stateConfig:t}}export{Ht as $descendantsMatching,pt as $dfs,vt as $dfsIterator,Kt as $filter,jt as $firstToLastIterator,mt as $getAdjacentCaret,Et as $getDepth,Nt as $getNearestBlockElementAncestorOrThrow,At as $getNearestNodeOfType,Ct as $getNextRightPreorderNode,xt as $getNextSiblingOrParentSibling,_t as $handleIndentAndOutdent,$t as $insertFirst,Mt as $insertNodeIntoLeaf,Pt as $insertNodeToNearestRoot,Rt as $insertNodeToNearestRootAtCaret,It as $isEditorIsNestedEditor,zt as $lastToFirstIterator,Lt as $restoreEditorState,ht as $reverseDfs,St as $reverseDfsIterator,Ot as $unwrapAndFilterDescendants,Vt as $unwrapNode,Tt as $wrapNodeInElement,nt as CAN_USE_BEFORE_INPUT,ot as CAN_USE_DOM,rt as IS_ANDROID,it as IS_ANDROID_CHROME,lt as IS_APPLE,st as IS_APPLE_WEBKIT,ut as IS_CHROME,ct as IS_FIREFOX,at as IS_IOS,ft as IS_SAFARI,Ft as calculateZoomLevel,dt as isMimeType,Wt as makeStateWrapper,tt as markSelection,gt as mediaFileReader,Bt as objectKlassEquals,X as positionNodeOnRange,bt as registerNestedElementResolver,et as selectionAlwaysOnDisplay};\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
1
+ {"version":3,"file":"LexicalUtils.prod-BqcriFWV.js","names":["t","z","n","O","s","c","f","U","H","p","h","y","i","o","m","G","J","Q","S","x","T","N","C","Y","Z","k","t","r","l","s","i","n","o","e","d","f","C","u","A","a","K","c","x","E","S","y","L","N","b","P","R","M","v","h"],"sources":["../node_modules/@lexical/selection/LexicalSelection.prod.mjs","../node_modules/@lexical/utils/LexicalUtils.prod.mjs"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{$isTextNode as e,$getEditor as t,$isRootNode as n,$getSelection as o,$isRangeSelection as l,$caretRangeFromSelection as r,$isTokenOrSegmented as s,$isElementNode as i,$getCharacterOffsets as c,$cloneWithPropertiesEphemeral as f,$getNodeByKey as u,$getPreviousSelection as g,$createTextNode as a,getStyleObjectFromCSS as d,$createRangeSelection as p,$findMatchingParent as h,INTERNAL_$isBlock as y,$setSelection as m,$caretFromPoint as S,$isExtendableTextPointCaret as x,$extendCaretToRange as T,$isChildCaret as N,$isDecoratorNode as C,$isRootOrShadowRoot as w,$hasAncestor as v,$isLeafNode as K}from\"lexical\";export{$cloneWithProperties,$selectAll}from\"lexical\";function E(e,...t){const n=new URL(\"https://lexical.dev/docs/error\"),o=new URLSearchParams;o.append(\"code\",e);for(const e of t)o.append(\"v\",e);throw n.search=o.toString(),Error(`Minified Lexical error #${e}; visit ${n.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}function P(e){let t=e;for(;null!=t;){if(t.nodeType===Node.TEXT_NODE)return t;t=t.firstChild}return null}function k(e){const t=e.parentNode;if(null==t)throw new Error(\"Should never happen\");return[t,Array.from(t.childNodes).indexOf(e)]}function I(t,n,o,l,r){const s=n.getKey(),i=l.getKey(),c=document.createRange();let f=t.getElementByKey(s),u=t.getElementByKey(i),g=o,a=r;if(e(n)&&(f=P(f)),e(l)&&(u=P(u)),void 0===n||void 0===l||null===f||null===u)return null;\"BR\"===f.nodeName&&([f,g]=k(f)),\"BR\"===u.nodeName&&([u,a]=k(u));const d=f.firstChild;f===u&&null!=d&&\"BR\"===d.nodeName&&0===g&&0===a&&(a=1);try{c.setStart(f,g),c.setEnd(u,a)}catch(e){return null}return!c.collapsed||g===a&&s===i||(c.setStart(u,a),c.setEnd(f,g)),c}function B(e,t){const n=e.getRootElement();if(null===n)return[];const o=n.getBoundingClientRect(),l=getComputedStyle(n),r=parseFloat(l.paddingLeft)+parseFloat(l.paddingRight),s=Array.from(t.getClientRects());let i,c=s.length;s.sort((e,t)=>{const n=e.top-t.top;return Math.abs(n)<=3?e.left-t.left:n});for(let e=0;e<c;e++){const t=s[e],n=i&&i.top<=t.top&&i.top+i.height>t.top&&i.left+i.width>t.left,l=t.width+r===o.width;n||l?(s.splice(e--,1),c--):i=t}return s}function F(e){let t=\"\";for(const n in e)n&&(t+=`${n}: ${e[n]};`);return t}function b(e){const n=t().getElementByKey(e.getKey());if(null===n)return null;const o=n.ownerDocument.defaultView;return null===o?null:o.getComputedStyle(n)}function z(e){return b(n(e)?e:e.getParentOrThrow())}function O(e){const t=z(e);return null!==t&&\"rtl\"===t.direction}function R(e,t,n=\"self\"){const o=e.getStartEndPoints();if(t.isSelected(e)&&!s(t)&&null!==o){const[l,r]=o,s=e.isBackward(),i=l.getNode(),u=r.getNode(),g=t.is(i),a=t.is(u);if(g||a){const[o,l]=c(e),r=i.is(u),g=t.is(s?u:i),a=t.is(s?i:u);let d,p=0;if(r)p=o>l?l:o,d=o>l?o:l;else if(g){p=s?l:o,d=void 0}else if(a){p=0,d=s?o:l}const h=t.__text.slice(p,d);h!==t.__text&&(\"clone\"===n&&(t=f(t)),t.__text=h)}}return t}function A(e){if(\"text\"===e.type)return e.offset===e.getNode().getTextContentSize();const t=e.getNode();return i(t)||E(177),e.offset===t.getChildrenSize()}function _(t,o,r){let s=o.getNode(),c=r;if(i(s)){const e=s.getDescendantByIndex(o.offset);null!==e&&(s=e)}for(;c>0&&null!==s;){if(i(s)){const e=s.getLastDescendant();null!==e&&(s=e)}let r=s.getPreviousSibling(),f=0;if(null===r){let e=s.getParentOrThrow(),t=e.getPreviousSibling();for(;null===t;){if(e=e.getParent(),null===e){r=null;break}t=e.getPreviousSibling()}null!==e&&(f=e.isInline()?0:2,r=t)}let d=s.getTextContent();\"\"===d&&i(s)&&!s.isInline()&&(d=\"\\n\\n\");const p=d.length;if(!e(s)||c>=p){const e=s.getParent();s.remove(),null==e||0!==e.getChildrenSize()||n(e)||e.remove(),c-=p+f,s=r}else{const n=s.getKey(),r=t.getEditorState().read(()=>{const t=u(n);return e(t)&&t.isSimpleText()?t.getTextContent():null}),i=p-c,f=d.slice(0,i);if(null!==r&&r!==d){const e=g();let t=s;if(s.isSimpleText())s.setTextContent(r);else{const e=a(r);s.replace(e),t=e}if(l(e)&&e.isCollapsed()){const n=e.anchor.offset;t.select(n,n)}}else if(s.isSimpleText()){const e=o.key===n;let t=o.offset;t<c&&(t=p);const l=e?t-c:0,r=e?t:i;if(e&&0===l){const[e]=s.splitText(l,r);e.remove()}else{const[,e]=s.splitText(l,r);e.remove()}}else{const e=a(f);s.replace(e)}c=0}}}const L=()=>{};function M(t,n){(l(t)?t.isCollapsed():e(t)||i(t))||E(280);const o=d(l(t)?t.style:e(t)?t.getStyle():t.getTextStyle()),r=F(Object.entries(n).reduce((e,[n,l])=>(\"function\"==typeof l?e[n]=l(o[n],t):null===l?delete e[n]:e[n]=l,e),{...o}));l(t)||e(t)?t.setStyle(r):t.setTextStyle(r)}function $(e,t){if(l(e)&&e.isCollapsed()){M(e,t);const n=e.anchor.getNode();i(n)&&n.isEmpty()&&M(n,t)}D(e=>{M(e,t)});const n=e.getNodes();if(n.length>0){const e=new Set;for(const o of n){if(!i(o)||!o.canBeEmpty()||0!==o.getChildrenSize())continue;const n=o.getKey();e.has(n)||(e.add(n),M(o,t))}}}function D(t){const n=o();if(!n)return;const i=new Map,c=e=>i.get(e.getKey())||[0,e.getTextContentSize()];if(l(n))for(const e of r(n).getTextSlices())e&&i.set(e.caret.origin.getKey(),e.getSliceIndices());const f=n.getNodes();for(const n of f){if(!e(n)||!n.canHaveFormat())continue;const[o,l]=c(n);if(l!==o)if(s(n)||0===o&&l===n.getTextContentSize())t(n);else{t(n.splitText(o,l)[0===o?0:1])}}l(n)&&\"text\"===n.anchor.type&&\"text\"===n.focus.type&&n.anchor.key===n.focus.key&&j(n)}function j(e){if(e.isBackward()){const{anchor:t,focus:n}=e,{key:o,offset:l,type:r}=t;t.set(n.key,n.offset,n.type),n.set(o,l,r)}}function U(e,t){const n=e.getFormatType(),o=e.getIndent();n!==t.getFormatType()&&t.setFormat(n),o!==t.getIndent()&&t.setIndent(o)}function H(e,t,n=U){if(null===e)return;const l=e.getStartEndPoints(),r=new Map;let s=null;if(l){const[e,t]=l;s=p(),s.anchor.set(e.key,e.offset,e.type),s.focus.set(t.key,t.offset,t.type);const n=h(e.getNode(),y),o=h(t.getNode(),y);i(n)&&r.set(n.getKey(),n),i(o)&&r.set(o.getKey(),o)}for(const t of e.getNodes())if(i(t)&&y(t))r.set(t.getKey(),t);else if(null===l){const e=h(t,y);i(e)&&r.set(e.getKey(),e)}for(const[e,o]of r){const l=t();n(o,l),o.replace(l,!0),s&&(e===s.anchor.key&&s.anchor.set(l.getKey(),s.anchor.offset,s.anchor.type),e===s.focus.key&&s.focus.set(l.getKey(),s.focus.offset,s.focus.type))}s&&e.is(o())&&m(s)}function V(e){return e.getNode().isAttached()}function W(e){let t=e;for(;null!==t&&!w(t);){const e=t.getLatest(),n=t.getParent();0===e.getChildrenSize()&&t.remove(!0),t=n}}function X(e,t,n=null){const o=e.getStartEndPoints(),l=o?o[0]:null,r=e.getNodes(),s=r.length;if(null!==l&&(0===s||1===s&&\"element\"===l.type&&0===l.getNode().getChildrenSize())){const e=\"text\"===l.type?l.getNode().getParentOrThrow():l.getNode(),o=e.getChildren();let r=t();return r.setFormat(e.getFormatType()),r.setIndent(e.getIndent()),o.forEach(e=>r.append(e)),n&&(r=n.append(r)),void e.replace(r)}let i=null,c=[];for(let o=0;o<s;o++){const l=r[o];w(l)?(q(e,c,c.length,t,n),c=[],i=l):null===i||null!==i&&v(l,i)?c.push(l):(q(e,c,c.length,t,n),c=[l])}q(e,c,c.length,t,n)}function q(e,t,n,o,r=null){if(0===t.length)return;const s=t[0],c=new Map,f=[];let u=i(s)?s:s.getParentOrThrow();u.isInline()&&(u=u.getParentOrThrow());let a=!1;for(;null!==u;){const e=u.getPreviousSibling();if(null!==e){u=e,a=!0;break}if(u=u.getParentOrThrow(),w(u))break}const d=new Set;for(let e=0;e<n;e++){const n=t[e];i(n)&&0===n.getChildrenSize()&&d.add(n.getKey())}const p=new Set;for(let e=0;e<n;e++){const n=t[e];let l=n.getParent();if(null!==l&&l.isInline()&&(l=l.getParent()),null!==l&&K(n)&&!p.has(n.getKey())){const e=l.getKey();if(void 0===c.get(e)){const t=o();t.setFormat(l.getFormatType()),t.setIndent(l.getIndent()),f.push(t),c.set(e,t),l.getChildren().forEach(e=>{t.append(e),p.add(e.getKey()),i(e)&&e.getChildrenKeys().forEach(e=>p.add(e))}),W(l)}}else if(d.has(n.getKey())){i(n)||E(179);const e=o();e.setFormat(n.getFormatType()),e.setIndent(n.getIndent()),f.push(e),n.remove(!0)}}if(null!==r)for(let e=0;e<f.length;e++){const t=f[e];r.append(t)}let h=null;if(w(u))if(a)if(null!==r)u.insertAfter(r);else for(let e=f.length-1;e>=0;e--){const t=f[e];u.insertAfter(t)}else{const e=u.getFirstChild();if(i(e)&&(u=e),null===e)if(r)u.append(r);else for(let e=0;e<f.length;e++){const t=f[e];u.append(t),h=t}else if(null!==r)e.insertBefore(r);else for(let t=0;t<f.length;t++){const n=f[t];e.insertBefore(n),h=n}}else if(r)u.insertAfter(r);else for(let e=f.length-1;e>=0;e--){const t=f[e];u.insertAfter(t),h=t}const y=g();l(y)&&V(y.anchor)&&V(y.focus)?m(y.clone()):null!==h?h.selectEnd():e.dirty=!0}function G(e){const t=J(e);return null!==t&&\"vertical-rl\"===t.writingMode}function J(e){const t=e.anchor.getNode();return i(t)?b(t):z(t)}function Q(e,t){let n=G(e)?!t:t;Z(e)&&(n=!n);const o=S(e.focus,n?\"previous\":\"next\");if(x(o))return!1;for(const e of T(o)){if(N(e))return!e.origin.isInline();if(!i(e.origin)){if(C(e.origin))return!0;break}}return!1}function Y(e,t,n,o){e.modify(t?\"extend\":\"move\",n,o)}function Z(e){const t=J(e);return null!==t&&\"rtl\"===t.direction}function ee(e,t,n){const o=Z(e);let l;l=G(e)||o?!n:n,Y(e,t,l,\"character\")}function te(e,t,n){const o=e.getStyle(),l=d(o);return null!==l&&l[t]||n}function ne(t,n,o=\"\"){let r=null;const s=t.getNodes(),i=t.anchor,c=t.focus,f=t.isBackward(),u=f?c.getNode():i.getNode(),g=f?i.getNode():c.getNode(),a=f?c.offset:i.offset,p=f?i.offset:c.offset;if(l(t)&&t.isCollapsed()&&\"\"!==t.style){const e=t.style,o=d(e);if(null!==o&&n in o)return o[n]}for(let t=0;t<s.length;t++){const l=s[t];if((0!==t||!l.is(u)||!e(l)||a!==l.getTextContentSize())&&((0===t||!l.is(g)||0!==p)&&e(l))){const e=te(l,n,o);if(null===r)r=e;else if(r!==e){r=\"\";break}}}return null===r?o:r}const oe=d,le=_;export{L as $addNodeStyle,U as $copyBlockFormatIndent,j as $ensureForwardRangeSelection,D as $forEachSelectedTextNode,b as $getComputedStyleForElement,z as $getComputedStyleForParent,ne as $getSelectionStyleValueForProperty,A as $isAtNodeEnd,Z as $isParentElementRTL,O as $isParentRTL,Y as $moveCaretSelection,ee as $moveCharacter,$ as $patchStyleText,H as $setBlocksType,Q as $shouldOverrideDefaultCharacterSelection,R as $sliceSelectedTextNodeContent,_ as $trimTextContentFromAnchor,X as $wrapNodes,I as createDOMRange,B as createRectsFromDOMRange,F as getCSSFromStyleObject,oe as getStyleObjectFromCSS,le as trimTextContentFromAnchor};\n","/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport{isHTMLElement as t,mergeRegister as e,$getSelection as n,$isRangeSelection as o,$isElementNode as r,getDOMTextNode as i,$getEditor as l,$getEditorDOMRenderConfig as s,$getChildCaret as u,$findMatchingParent as c,$getChildCaretOrSelf as a,$getSiblingCaret as f,$getAdjacentSiblingOrParentSiblingCaret as d,$caretRangeFromSelection as g,$getCaretRangeInDirection as p,$removeTextFromCaretRange as m,$isTextPointCaret as h,$splitAtPointCaretNext as v,$setSelectionFromCaretRange as y,$getCaretRange as w,$getPreviousSelection as x,$caretFromPoint as E,$getRoot as C,$createParagraphNode as S,$getAdjacentChildCaret as A,$isChildCaret as N,$normalizeCaret as b,$getCollapsedCaretRange as L,$getCaretInDirection as P,$isSiblingCaret as R,$rewindSiblingCaret as M,$cloneWithProperties as T,$setSelection as B,makeStepwiseIterator as K,$getState as _,$setState as $}from\"lexical\";export{$findMatchingParent,$getAdjacentSiblingOrParentSiblingCaret,$splitNode,addClassNamesToElement,isBlockDomNode,isHTMLAnchorElement,isHTMLElement,isInlineDomNode,mergeRegister,removeClassNamesFromElement}from\"lexical\";import{createRectsFromDOMRange as k}from\"@lexical/selection\";function F(t,...e){const n=new URL(\"https://lexical.dev/docs/error\"),o=new URLSearchParams;o.append(\"code\",t);for(const t of e)o.append(\"v\",t);throw n.search=o.toString(),Error(`Minified Lexical error #${t}; visit ${n.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}const I=\"undefined\"!=typeof window&&void 0!==window.document&&void 0!==window.document.createElement,O=I&&\"documentMode\"in document?document.documentMode:null,D=I&&/Mac|iPod|iPhone|iPad/.test(navigator.platform),H=I&&/^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent),j=!(!I||!(\"InputEvent\"in window)||O)&&\"getTargetRanges\"in new window.InputEvent(\"input\"),z=I&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,U=I&&/Android/.test(navigator.userAgent),V=I&&/Version\\/[\\d.]+.*Safari/.test(navigator.userAgent)&&!U,W=I&&/^(?=.*Chrome).*/i.test(navigator.userAgent),G=I&&U&&W,q=I&&/AppleWebKit\\/[\\d.]+/.test(navigator.userAgent)&&D&&!W;function J(t){return`${t}px`}const Q={attributes:!0,characterData:!0,childList:!0,subtree:!0};function X(e,n,o){let r=null,i=null,l=null,s=[];const u=document.createElement(\"div\");function c(){null===r&&F(182),null===i&&F(183);const{left:t,top:l}=i.getBoundingClientRect(),c=k(e,n);var a,f;u.isConnected||(f=u,(a=i).insertBefore(f,a.firstChild));let d=!1;for(let e=0;e<c.length;e++){const n=c[e],o=s[e]||document.createElement(\"div\"),r=o.style;\"absolute\"!==r.position&&(r.position=\"absolute\",d=!0);const i=J(n.left-t);r.left!==i&&(r.left=i,d=!0);const a=J(n.top-l);r.top!==a&&(o.style.top=a,d=!0);const f=J(n.width);r.width!==f&&(o.style.width=f,d=!0);const g=J(n.height);r.height!==g&&(o.style.height=g,d=!0),o.parentNode!==u&&(u.append(o),d=!0),s[e]=o}for(;s.length>c.length;)s.pop();d&&o(s)}function a(){i=null,r=null,null!==l&&l.disconnect(),l=null,u.remove();for(const t of s)t.remove();s=[]}u.style.position=\"relative\";const f=e.registerRootListener(function n(){const o=e.getRootElement();if(null===o)return a();const s=o.parentElement;if(!t(s))return a();a(),r=o,i=s,l=new MutationObserver(t=>{const o=e.getRootElement(),l=o&&o.parentElement;if(o!==r||l!==i)return n();for(const e of t)if(!u.contains(e.target))return c()}),l.observe(s,Q),c()});return()=>{f(),a()}}function Y(t,e,n){if(\"text\"!==t.type&&r(e)){const o=l(),r=s(o).$getDOMSlot(e,n,o);return[r.element,r.getFirstChildOffset()+t.offset]}return[i(n)||n,t.offset]}function Z(t){for(const e of t){const t=e.style;\"Highlight\"!==t.background&&(t.background=\"Highlight\"),\"HighlightText\"!==t.color&&(t.color=\"HighlightText\"),t.marginTop!==J(-1.5)&&(t.marginTop=J(-1.5)),t.paddingTop!==J(4)&&(t.paddingTop=J(4)),t.paddingBottom!==J(0)&&(t.paddingBottom=J(0))}}function tt(t,r=Z){let i=null,l=null,s=null,u=null,c=null,a=null,f=()=>{};function d(e){e.read(()=>{const e=n();if(!o(e))return i=null,s=null,u=null,a=null,f(),void(f=()=>{});const[d,g]=function(t){const e=t.getStartEndPoints();return t.isBackward()?[e[1],e[0]]:e}(e),p=d.getNode(),m=p.getKey(),h=d.offset,v=g.getNode(),y=v.getKey(),w=g.offset,x=t.getElementByKey(m),E=t.getElementByKey(y),C=null===i||x!==l||h!==s||m!==i.getKey(),S=null===u||E!==c||w!==a||y!==u.getKey();if((C||S)&&null!==x&&null!==E){const e=function(t,e,n,o,r,i,l){const s=(t._window?t._window.document:document).createRange();return s.setStart(...Y(e,n,o)),s.setEnd(...Y(r,i,l)),s}(t,d,p,x,g,v,E);f(),f=X(t,e,r)}i=p,l=x,s=h,u=v,c=E,a=w})}return d(t.getEditorState()),e(t.registerUpdateListener(({editorState:t})=>d(t)),()=>{f()})}function et(t,e){let n=null;const o=()=>{const o=getSelection(),r=o&&o.anchorNode,i=t.getRootElement();null!==r&&null!==i&&i.contains(r)?null!==n&&(n(),n=null):null===n&&(n=tt(t,e))};return t.registerRootListener(t=>{if(t){const e=t.ownerDocument;return e.addEventListener(\"selectionchange\",o),o(),()=>{null!==n&&n(),e.removeEventListener(\"selectionchange\",o)}}})}const nt=j,ot=I,rt=U,it=G,lt=D,st=q,ut=W,ct=H,at=z,ft=V;function dt(t,e){for(const n of e)if(t.type.startsWith(n))return!0;return!1}function gt(t,e){const n=t[Symbol.iterator]();return new Promise((t,o)=>{const r=[],i=()=>{const{done:l,value:s}=n.next();if(l)return t(r);const u=new FileReader;u.addEventListener(\"error\",o),u.addEventListener(\"load\",()=>{const t=u.result;\"string\"==typeof t&&r.push({file:s,result:t}),i()}),dt(s,e)?u.readAsDataURL(s):i()};i()})}function pt(t,e){return Array.from(vt(t,e))}function mt(t){return t?t.getAdjacentCaret():null}function ht(t,e){return Array.from(St(t,e))}function vt(t,e){return wt(\"next\",t,e)}function yt(t,e){const n=d(f(t,e));return n&&n[0]}function wt(t,e,n){const o=C(),i=e||o,l=r(i)?u(i,t):f(i,t),s=Et(i),c=n?A(a(f(n,t)))||yt(n,t):yt(i,t);let g=s;return K({hasNext:t=>null!==t,initial:l,map:t=>({depth:g,node:t.origin}),step:t=>{if(t.isSameNodeCaret(c))return null;N(t)&&g++;const e=d(t);return!e||e[0].isSameNodeCaret(c)?null:(g+=e[1],e[0])}})}function xt(t){const e=d(f(t,\"next\"));return e&&[e[0].origin,e[1]]}function Et(t){let e=-1;for(let n=t;null!==n;n=n.getParent())e++;return e}function Ct(t){const e=a(f(t,\"previous\")),n=d(e,\"root\");return n&&n[0].origin}function St(t,e){return wt(\"previous\",t,e)}function At(t,e){let n=t;for(;null!=n;){if(n instanceof e)return n;n=n.getParent()}return null}function Nt(t){const e=c(t,t=>r(t)&&!t.isInline());return r(e)||F(4,t.__key),e}function bt(t,e,n,o){const r=t=>t instanceof e;return t.registerNodeTransform(e,t=>{const e=(t=>{const e=t.getChildren();for(let t=0;t<e.length;t++){const n=e[t];if(r(n))return null}let n=t,o=t;for(;null!==n;)if(o=n,n=n.getParent(),r(n))return{child:o,parent:n};return null})(t);if(null!==e){const{child:r,parent:i}=e;if(r.is(t)){o(i,t);const e=r.getNextSiblings(),l=e.length;if(i.insertAfter(r),0!==l){const t=n(i);r.insertAfter(t);for(let n=0;n<l;n++)t.append(e[n])}i.canBeEmpty()||0!==i.getChildrenSize()||i.remove()}}})}function Lt(t,e){const n=new Map,o=t._pendingEditorState;for(const[t,o]of e._nodeMap)n.set(t,T(o));o&&(o._nodeMap=n),t._dirtyType=2;const r=e._selection;B(null===r?null:r.clone())}function Pt(t){const e=n()||x();let r;if(o(e))r=E(e.focus,\"next\");else{if(null!=e){const t=e.getNodes(),n=t[t.length-1];n&&(r=f(n,\"next\"))}r=r||u(C(),\"previous\").getFlipped().insert(S())}const i=Rt(t,r),l=A(i),s=N(l)?b(l):i;return y(L(s)),t.getLatest()}function Rt(t,e,n){let o=P(e,\"next\");h(o)&&(0===o.offset?o=f(o.origin,\"previous\").getFlipped():o.offset===o.origin.getTextContentSize()&&(o=f(o.origin,\"next\"))),o.origin.is(t)&&(R(o)||F(342,t.getKey(),t.getType()),o=M(o)),(t.is(o.getNodeAtCaret())||t.is(o.getFlipped().getNodeAtCaret()))&&t.remove(!0);for(let t=o;t;t=v(t,n))o=t;return h(o)&&F(283),o.insert(t.isInline()?S().append(t):t),P(f(t.getLatest(),\"next\"),e.direction)}function Mt(t){const e=n();if(!o(e))return void(e&&e.insertNodes([t]));const r=g(e);let i=p(m(r),\"next\").anchor;if(h(i)){const t=v(i);if(!t)return;i=t}const l=i.getFlipped();l.insert(t),y(w(l,l))}function Tt(t,e){const n=e();return t.replace(n),n.append(t),n}function Bt(t,e){return null!==t&&Object.getPrototypeOf(t).constructor.name===e.name}function Kt(t,e){const n=[];for(let o=0;o<t.length;o++){const r=e(t[o]);null!==r&&n.push(r)}return n}function _t(t){const e=n();if(!o(e))return!1;const i=new Set,l=e.getNodes();for(let e=0;e<l.length;e++){const n=l[e],o=n.getKey();if(i.has(o))continue;const s=c(n,t=>r(t)&&!t.isInline());if(null===s)continue;const u=s.getKey();s.canIndent()&&!i.has(u)&&(i.add(u),t(s))}return i.size>0}function $t(t,e){u(t,\"next\").insert(e)}let kt=!(ct||!ot)&&void 0;function Ft(t,e=!1){let n=1;if(function(){if(void 0===kt){const t=document.createElement(\"div\");t.style.position=\"absolute\",t.style.opacity=\"0\",t.style.width=\"100px\",t.style.left=\"-1000px\",document.body.appendChild(t);const e=t.getBoundingClientRect();t.style.setProperty(\"zoom\",\"2\"),kt=t.getBoundingClientRect().width===e.width,document.body.removeChild(t)}return kt}()||e)for(;t;)n*=Number(window.getComputedStyle(t).getPropertyValue(\"zoom\")),t=t.parentElement;return n}function It(t){return null!==t._parentEditor}function Ot(t,e){return Dt(t,e,null)}function Dt(t,e,n){let o=!1;for(const i of zt(t))e(i)?null!==n&&n(i):(o=!0,r(i)&&Dt(i,e,n||(t=>i.insertAfter(t))),i.remove());return o}function Ht(t,e){const n=[],o=Array.from(t).reverse();for(let t=o.pop();void 0!==t;t=o.pop())if(e(t))n.push(t);else if(r(t))for(const e of zt(t))o.push(e);return n}function jt(t){return Ut(u(t,\"next\"))}function zt(t){return Ut(u(t,\"previous\"))}function Ut(t){return K({hasNext:R,initial:t.getAdjacentCaret(),map:t=>t.origin.getLatest(),step:t=>t.getAdjacentCaret()})}function Vt(t){M(f(t,\"next\")).splice(1,t.getChildren())}function Wt(t){const e=e=>_(e,t),n=(e,n)=>$(e,t,n);return{$get:e,$set:n,accessors:[e,n],makeGetterMethod:()=>function(){return e(this)},makeSetterMethod:()=>function(t){return n(this,t)},stateConfig:t}}export{Ht as $descendantsMatching,pt as $dfs,vt as $dfsIterator,Kt as $filter,jt as $firstToLastIterator,mt as $getAdjacentCaret,Et as $getDepth,Nt as $getNearestBlockElementAncestorOrThrow,At as $getNearestNodeOfType,Ct as $getNextRightPreorderNode,xt as $getNextSiblingOrParentSibling,_t as $handleIndentAndOutdent,$t as $insertFirst,Mt as $insertNodeIntoLeaf,Pt as $insertNodeToNearestRoot,Rt as $insertNodeToNearestRootAtCaret,It as $isEditorIsNestedEditor,zt as $lastToFirstIterator,Lt as $restoreEditorState,ht as $reverseDfs,St as $reverseDfsIterator,Ot as $unwrapAndFilterDescendants,Vt as $unwrapNode,Tt as $wrapNodeInElement,nt as CAN_USE_BEFORE_INPUT,ot as CAN_USE_DOM,rt as IS_ANDROID,it as IS_ANDROID_CHROME,lt as IS_APPLE,st as IS_APPLE_WEBKIT,ut as IS_CHROME,ct as IS_FIREFOX,at as IS_IOS,ft as IS_SAFARI,Ft as calculateZoomLevel,dt as isMimeType,Wt as makeStateWrapper,tt as markSelection,gt as mediaFileReader,Bt as objectKlassEquals,X as positionNodeOnRange,bt as registerNestedElementResolver,et as selectionAlwaysOnDisplay};\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LinkContextMenu-ePn1iZ_z.js","names":[],"sources":["../src/components/RteEditor/Plugins/LinkPlugin/LinkContextMenu/LinkContextMenu.module.css","../src/components/RteEditor/Plugins/LinkPlugin/LinkContextMenu/LinkContextMenu.tsx"],"sourcesContent":[".link-context-menu__wrapper {\n align-items: center;\n display: flex;\n justify-content: flex-start;\n}\n\n.link-context-menu__input {\n appearance: none;\n background-color: transparent;\n border: 2px solid var(--color-navy-600);\n border-radius: 0.5rem;\n color: var(--color-uva-black);\n font-family: inherit;\n font-size: inherit;\n height: 2.5rem;\n margin: 0 0.5rem 0 0;\n min-width: 20rem;\n padding: 0 0.5rem;\n}\n\n.link-context-menu__input:disabled {\n border-color: transparent;\n}\n\n.link-context-menu__button {\n aspect-ratio: 1;\n background-color: transparent;\n border: none;\n border-radius: 0.5rem;\n color: var(--color-uva-black);\n cursor: pointer;\n font-size: inherit;\n height: 2.5rem;\n}\n\n.link-context-menu__actions {\n align-items: center;\n display: flex;\n gap: 0.5rem;\n justify-content: flex-end;\n margin-top: 1rem;\n}\n","import { forwardRef, useImperativeHandle, useLayoutEffect, useRef, useState } from 'react';\n\nimport styles from './LinkContextMenu.module.css';\n\nimport { ensureHttps } from 'components/RteEditor/Plugins/LinkPlugin/helpers';\nimport { Icon } from 'components/Icon';\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\nimport { Button } from 'components/Buttons';\n\ninterface LinkContextMenuProps {\n url: string;\n onSave: (url: string) => void;\n onDelete: () => void;\n onClose: () => void;\n}\n\nexport interface linkFormMethods {\n clearForm: () => void;\n}\n\nexport const LinkContextMenu = forwardRef(({ url, onSave, onDelete, onClose }: LinkContextMenuProps, ref) => {\n const t = useTranslation();\n const [link, setLink] = useState(url);\n const [editable, setEditable] = useState(false);\n const linkRef = useRef<HTMLInputElement>(null);\n\n const reset = () => {\n setLink(url);\n setEditable(false);\n linkRef.current?.blur();\n };\n\n const handleSave = () => {\n onSave(link);\n reset();\n };\n\n const handleDelete = () => {\n onDelete();\n setLink('');\n reset();\n };\n\n const handleClose = () => {\n reset();\n onClose();\n };\n\n const handlePreview = () => {\n window.open(ensureHttps(url), '_blank');\n };\n\n useImperativeHandle(ref, () => ({\n clearForm: reset,\n }));\n\n useLayoutEffect(() => {\n setLink(url);\n\n const handleKeydown = (event: KeyboardEvent) => {\n if (event.ctrlKey && event.shiftKey && event.key === 'L') {\n event.preventDefault();\n setEditable(true);\n setTimeout(() => linkRef.current?.focus(), 0);\n }\n\n if (event.ctrlKey && event.shiftKey && event.code === 'Digit1') {\n event.preventDefault();\n handlePreview();\n setTimeout(() => linkRef.current?.focus(), 0);\n }\n\n if (event.ctrlKey && event.shiftKey && event.key === 'Q') {\n event.preventDefault();\n handleDelete();\n setTimeout(() => linkRef.current?.focus(), 0);\n }\n };\n\n window.addEventListener('keydown', handleKeydown);\n\n return () => {\n window.removeEventListener('keydown', handleKeydown);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [url]);\n\n return (\n <>\n <div className={styles['link-context-menu__wrapper']}>\n <input\n type=\"text\"\n value={link}\n onChange={(event) => setLink(event.target.value)}\n className={styles['link-context-menu__input']}\n disabled={!editable}\n ref={linkRef}\n />\n {!editable && (\n <button\n type=\"button\"\n className={styles['link-context-menu__button']}\n onClick={() => setEditable(true)}\n title={t.links.linkEdittip}\n aria-label={t.aria.labels.link}\n aria-keyshortcuts={t.aria.keyshortcuts.editlink}\n >\n <Icon name=\"Pencil\" size={20} />\n </button>\n )}\n <button\n type=\"button\"\n className={styles['link-context-menu__button']}\n onClick={handlePreview}\n title={t.links.linkTesttip}\n aria-label={t.aria.labels.link}\n aria-keyshortcuts={t.aria.keyshortcuts.testlink}\n >\n <Icon name=\"ArrowTopRightOnSquare\" size={20} />\n </button>\n <button\n type=\"button\"\n className={styles['link-context-menu__button']}\n onClick={handleDelete}\n title={t.links.linkDeletetip}\n aria-label={t.aria.labels.link}\n aria-keyshortcuts={t.aria.keyshortcuts.deletelink}\n >\n <Icon name=\"LinkSlash\" size={20} />\n </button>\n </div>\n {editable && (\n <div className={styles['link-context-menu__actions']}>\n <Button variant={'secondary'} onClick={handleClose} aria-label={t.common.cancel} type=\"button\">\n {t.common.cancel}\n </Button>\n <Button variant={'primary'} onClick={handleSave} aria-label={t.aria.labels.linkOkButton} type=\"button\">\n {t.links.addLink}\n </Button>\n </div>\n )}\n </>\n );\n});\n"],"mappings":";;;;;;;;;;;;GCoBa,IAAkB,GAAY,EAAE,QAAK,WAAQ,aAAU,cAAiC,MAAQ;CAC3G,IAAM,IAAI,GAAgB,EACpB,CAAC,GAAM,KAAW,EAAS,EAAI,EAC/B,CAAC,GAAU,KAAe,EAAS,GAAM,EACzC,IAAU,EAAyB,KAAK,EAExC,UAAc;AAGlB,EAFA,EAAQ,EAAI,EACZ,EAAY,GAAM,EAClB,EAAQ,SAAS,MAAM;IAGnB,UAAmB;AAEvB,EADA,EAAO,EAAK,EACZ,GAAO;IAGH,UAAqB;AAGzB,EAFA,GAAU,EACV,EAAQ,GAAG,EACX,GAAO;IAGH,UAAoB;AAExB,EADA,GAAO,EACP,GAAS;IAGL,UAAsB;AAC1B,SAAO,KAAK,EAAY,EAAI,EAAE,SAAS;;AAsCzC,QAnCA,EAAoB,UAAY,EAC9B,WAAW,GACZ,EAAE,EAEH,QAAsB;AACpB,IAAQ,EAAI;EAEZ,IAAM,KAAiB,MAAyB;AAa9C,GAZI,EAAM,WAAW,EAAM,YAAY,EAAM,QAAQ,QACnD,EAAM,gBAAgB,EACtB,EAAY,GAAK,EACjB,iBAAiB,EAAQ,SAAS,OAAO,EAAE,EAAE,GAG3C,EAAM,WAAW,EAAM,YAAY,EAAM,SAAS,aACpD,EAAM,gBAAgB,EACtB,GAAe,EACf,iBAAiB,EAAQ,SAAS,OAAO,EAAE,EAAE,GAG3C,EAAM,WAAW,EAAM,YAAY,EAAM,QAAQ,QACnD,EAAM,gBAAgB,EACtB,GAAc,EACd,iBAAiB,EAAQ,SAAS,OAAO,EAAE,EAAE;;AAMjD,SAFA,OAAO,iBAAiB,WAAW,EAAc,QAEpC;AACX,UAAO,oBAAoB,WAAW,EAAc;;IAGrD,CAAC,EAAI,CAAC,EAGP,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,OAAD;EAAK,WAAW,EAAO;YAAvB;GACE,kBAAC,SAAD;IACE,MAAK;IACL,OAAO;IACP,WAAW,MAAU,EAAQ,EAAM,OAAO,MAAM;IAChD,WAAW,EAAO;IAClB,UAAU,CAAC;IACX,KAAK;IACL,CAAA;GACD,CAAC,KACA,kBAAC,UAAD;IACE,MAAK;IACL,WAAW,EAAO;IAClB,eAAe,EAAY,GAAK;IAChC,OAAO,EAAE,MAAM;IACf,cAAY,EAAE,KAAK,OAAO;IAC1B,qBAAmB,EAAE,KAAK,aAAa;cAEvC,kBAAC,GAAD;KAAM,MAAK;KAAS,MAAM;KAAM,CAAA;IACzB,CAAA;GAEX,kBAAC,UAAD;IACE,MAAK;IACL,WAAW,EAAO;IAClB,SAAS;IACT,OAAO,EAAE,MAAM;IACf,cAAY,EAAE,KAAK,OAAO;IAC1B,qBAAmB,EAAE,KAAK,aAAa;cAEvC,kBAAC,GAAD;KAAM,MAAK;KAAwB,MAAM;KAAM,CAAA;IACxC,CAAA;GACT,kBAAC,UAAD;IACE,MAAK;IACL,WAAW,EAAO;IAClB,SAAS;IACT,OAAO,EAAE,MAAM;IACf,cAAY,EAAE,KAAK,OAAO;IAC1B,qBAAmB,EAAE,KAAK,aAAa;cAEvC,kBAAC,GAAD;KAAM,MAAK;KAAY,MAAM;KAAM,CAAA;IAC5B,CAAA;GACL;KACL,KACC,kBAAC,OAAD;EAAK,WAAW,EAAO;YAAvB,CACE,kBAAC,GAAD;GAAQ,SAAS;GAAa,SAAS;GAAa,cAAY,EAAE,OAAO;GAAQ,MAAK;aACnF,EAAE,OAAO;GACH,CAAA,EACT,kBAAC,GAAD;GAAQ,SAAS;GAAW,SAAS;GAAY,cAAY,EAAE,KAAK,OAAO;GAAc,MAAK;aAC3F,EAAE,MAAM;GACF,CAAA,CACL;IAEP,EAAA,CAAA;EAEL"}
1
+ {"version":3,"file":"LinkContextMenu-ePn1iZ_z.js","names":[],"sources":["../src/components/RteEditor/Plugins/LinkPlugin/LinkContextMenu/LinkContextMenu.module.css","../src/components/RteEditor/Plugins/LinkPlugin/LinkContextMenu/LinkContextMenu.tsx"],"sourcesContent":[".link-context-menu__wrapper {\n align-items: center;\n display: flex;\n justify-content: flex-start;\n}\n\n.link-context-menu__input {\n appearance: none;\n background-color: transparent;\n border: 2px solid var(--color-navy-600);\n border-radius: 0.5rem;\n color: var(--color-uva-black);\n font-family: inherit;\n font-size: inherit;\n height: 2.5rem;\n margin: 0 0.5rem 0 0;\n min-width: 20rem;\n padding: 0 0.5rem;\n}\n\n.link-context-menu__input:disabled {\n border-color: transparent;\n}\n\n.link-context-menu__button {\n aspect-ratio: 1;\n background-color: transparent;\n border: none;\n border-radius: 0.5rem;\n color: var(--color-uva-black);\n cursor: pointer;\n font-size: inherit;\n height: 2.5rem;\n}\n\n.link-context-menu__actions {\n align-items: center;\n display: flex;\n gap: 0.5rem;\n justify-content: flex-end;\n margin-top: 1rem;\n}\n","import { forwardRef, useImperativeHandle, useLayoutEffect, useRef, useState } from 'react';\n\nimport styles from './LinkContextMenu.module.css';\n\nimport { ensureHttps } from 'components/RteEditor/Plugins/LinkPlugin/helpers';\nimport { Icon } from 'components/Icon';\nimport { useTranslation } from 'components/RteEditor/hooks/useTranslation';\nimport { Button } from 'components/Buttons';\n\ninterface LinkContextMenuProps {\n url: string;\n onSave: (url: string) => void;\n onDelete: () => void;\n onClose: () => void;\n}\n\nexport interface linkFormMethods {\n clearForm: () => void;\n}\n\nexport const LinkContextMenu = forwardRef(({ url, onSave, onDelete, onClose }: LinkContextMenuProps, ref) => {\n const t = useTranslation();\n const [link, setLink] = useState(url);\n const [editable, setEditable] = useState(false);\n const linkRef = useRef<HTMLInputElement>(null);\n\n const reset = () => {\n setLink(url);\n setEditable(false);\n linkRef.current?.blur();\n };\n\n const handleSave = () => {\n onSave(link);\n reset();\n };\n\n const handleDelete = () => {\n onDelete();\n setLink('');\n reset();\n };\n\n const handleClose = () => {\n reset();\n onClose();\n };\n\n const handlePreview = () => {\n window.open(ensureHttps(url), '_blank');\n };\n\n useImperativeHandle(ref, () => ({\n clearForm: reset,\n }));\n\n useLayoutEffect(() => {\n setLink(url);\n\n const handleKeydown = (event: KeyboardEvent) => {\n if (event.ctrlKey && event.shiftKey && event.key === 'L') {\n event.preventDefault();\n setEditable(true);\n setTimeout(() => linkRef.current?.focus(), 0);\n }\n\n if (event.ctrlKey && event.shiftKey && event.code === 'Digit1') {\n event.preventDefault();\n handlePreview();\n setTimeout(() => linkRef.current?.focus(), 0);\n }\n\n if (event.ctrlKey && event.shiftKey && event.key === 'Q') {\n event.preventDefault();\n handleDelete();\n setTimeout(() => linkRef.current?.focus(), 0);\n }\n };\n\n window.addEventListener('keydown', handleKeydown);\n\n return () => {\n window.removeEventListener('keydown', handleKeydown);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [url]);\n\n return (\n <>\n <div className={styles['link-context-menu__wrapper']}>\n <input\n type=\"text\"\n value={link}\n onChange={(event) => setLink(event.target.value)}\n className={styles['link-context-menu__input']}\n disabled={!editable}\n ref={linkRef}\n />\n {!editable && (\n <button\n type=\"button\"\n className={styles['link-context-menu__button']}\n onClick={() => setEditable(true)}\n title={t.links.linkEdittip}\n aria-label={t.aria.labels.link}\n aria-keyshortcuts={t.aria.keyshortcuts.editlink}\n >\n <Icon name=\"Pencil\" size={20} />\n </button>\n )}\n <button\n type=\"button\"\n className={styles['link-context-menu__button']}\n onClick={handlePreview}\n title={t.links.linkTesttip}\n aria-label={t.aria.labels.link}\n aria-keyshortcuts={t.aria.keyshortcuts.testlink}\n >\n <Icon name=\"ArrowTopRightOnSquare\" size={20} />\n </button>\n <button\n type=\"button\"\n className={styles['link-context-menu__button']}\n onClick={handleDelete}\n title={t.links.linkDeletetip}\n aria-label={t.aria.labels.link}\n aria-keyshortcuts={t.aria.keyshortcuts.deletelink}\n >\n <Icon name=\"LinkSlash\" size={20} />\n </button>\n </div>\n {editable && (\n <div className={styles['link-context-menu__actions']}>\n <Button variant={'secondary'} onClick={handleClose} aria-label={t.common.cancel} type=\"button\">\n {t.common.cancel}\n </Button>\n <Button variant={'primary'} onClick={handleSave} aria-label={t.aria.labels.linkOkButton} type=\"button\">\n {t.links.addLink}\n </Button>\n </div>\n )}\n </>\n );\n});\n"],"mappings":";;;;;;;;;;;;GCoBa,IAAkB,GAAY,EAAE,QAAK,WAAQ,aAAU,cAAiC,MAAQ;CAC3G,IAAM,IAAI,GAAgB,EACpB,CAAC,GAAM,KAAW,EAAS,EAAI,EAC/B,CAAC,GAAU,KAAe,EAAS,GAAM,EACzC,IAAU,EAAyB,KAAK,EAExC,UAAc;EAGlB,AAFA,EAAQ,EAAI,EACZ,EAAY,GAAM,EAClB,EAAQ,SAAS,MAAM;IAGnB,UAAmB;EAEvB,AADA,EAAO,EAAK,EACZ,GAAO;IAGH,UAAqB;EAGzB,AAFA,GAAU,EACV,EAAQ,GAAG,EACX,GAAO;IAGH,UAAoB;EAExB,AADA,GAAO,EACP,GAAS;IAGL,UAAsB;EAC1B,OAAO,KAAK,EAAY,EAAI,EAAE,SAAS;;CAsCzC,OAnCA,EAAoB,UAAY,EAC9B,WAAW,GACZ,EAAE,EAEH,QAAsB;EACpB,EAAQ,EAAI;EAEZ,IAAM,KAAiB,MAAyB;GAa9C,AAZI,EAAM,WAAW,EAAM,YAAY,EAAM,QAAQ,QACnD,EAAM,gBAAgB,EACtB,EAAY,GAAK,EACjB,iBAAiB,EAAQ,SAAS,OAAO,EAAE,EAAE,GAG3C,EAAM,WAAW,EAAM,YAAY,EAAM,SAAS,aACpD,EAAM,gBAAgB,EACtB,GAAe,EACf,iBAAiB,EAAQ,SAAS,OAAO,EAAE,EAAE,GAG3C,EAAM,WAAW,EAAM,YAAY,EAAM,QAAQ,QACnD,EAAM,gBAAgB,EACtB,GAAc,EACd,iBAAiB,EAAQ,SAAS,OAAO,EAAE,EAAE;;EAMjD,OAFA,OAAO,iBAAiB,WAAW,EAAc,QAEpC;GACX,OAAO,oBAAoB,WAAW,EAAc;;IAGrD,CAAC,EAAI,CAAC,EAGP,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,OAAD;EAAK,WAAW,EAAO;YAAvB;GACE,kBAAC,SAAD;IACE,MAAK;IACL,OAAO;IACP,WAAW,MAAU,EAAQ,EAAM,OAAO,MAAM;IAChD,WAAW,EAAO;IAClB,UAAU,CAAC;IACX,KAAK;IACL,CAAA;GACD,CAAC,KACA,kBAAC,UAAD;IACE,MAAK;IACL,WAAW,EAAO;IAClB,eAAe,EAAY,GAAK;IAChC,OAAO,EAAE,MAAM;IACf,cAAY,EAAE,KAAK,OAAO;IAC1B,qBAAmB,EAAE,KAAK,aAAa;cAEvC,kBAAC,GAAD;KAAM,MAAK;KAAS,MAAM;KAAM,CAAA;IACzB,CAAA;GAEX,kBAAC,UAAD;IACE,MAAK;IACL,WAAW,EAAO;IAClB,SAAS;IACT,OAAO,EAAE,MAAM;IACf,cAAY,EAAE,KAAK,OAAO;IAC1B,qBAAmB,EAAE,KAAK,aAAa;cAEvC,kBAAC,GAAD;KAAM,MAAK;KAAwB,MAAM;KAAM,CAAA;IACxC,CAAA;GACT,kBAAC,UAAD;IACE,MAAK;IACL,WAAW,EAAO;IAClB,SAAS;IACT,OAAO,EAAE,MAAM;IACf,cAAY,EAAE,KAAK,OAAO;IAC1B,qBAAmB,EAAE,KAAK,aAAa;cAEvC,kBAAC,GAAD;KAAM,MAAK;KAAY,MAAM;KAAM,CAAA;IAC5B,CAAA;GACL;KACL,KACC,kBAAC,OAAD;EAAK,WAAW,EAAO;YAAvB,CACE,kBAAC,GAAD;GAAQ,SAAS;GAAa,SAAS;GAAa,cAAY,EAAE,OAAO;GAAQ,MAAK;aACnF,EAAE,OAAO;GACH,CAAA,EACT,kBAAC,GAAD;GAAQ,SAAS;GAAW,SAAS;GAAY,cAAY,EAAE,KAAK,OAAO;GAAc,MAAK;aAC3F,EAAE,MAAM;GACF,CAAA,CACL;IAEP,EAAA,CAAA;EAEL"}
@@ -1 +1 @@
1
- {"version":3,"file":"MenuLink-Cm1yZO_5.js","names":[],"sources":["../src/components/MenuLink/MenuLink.module.css","../src/components/MenuLink/MenuLink.tsx"],"sourcesContent":[".menu-link {\n border-bottom: 0.125rem solid transparent;\n text-decoration: none;\n transition: var(--transition-colors) var(--default-duration) var(--default-easing-function);\n}\n\n.menu-link:hover,\n.menu-link--active {\n border-bottom-color: inherit;\n color: unset;\n}\n\n.menu-link--active {\n font-weight: var(--semibold);\n}\n","import classNames from 'clsx';\nimport { NavLink, useLocation } from 'react-router';\n\nimport type { NavLinkProps } from 'react-router';\n\nimport styles from './MenuLink.module.css';\n\n/** Represents a component for a [NavLink](https://reactrouter.com/en/main/components/nav-link) with styling. */\n// Omit style so it cannot be accidentally used\nexport interface MenuLinkProps extends Omit<NavLinkProps, 'style'> {\n overrideDefault?: boolean;\n}\n\nexport const MenuLink = ({ overrideDefault, ...props }: MenuLinkProps) => {\n const location = useLocation();\n\n // Helper function to remove trailing 's' from a string\n const singularize = (str: string) => str.replace(/s$/, '');\n\n // Check if 'to' path (singular version) matches any segment (singular version)\n const isActiveSingular = (to: string) => {\n const currentSegments = location.pathname.split('/').filter(Boolean);\n const latestToPath = to.split('/').filter(Boolean).slice(-1)[0]; // return only lates path removing any prepend path\n const singularizedToPath = singularize(latestToPath);\n\n return currentSegments.some((segment) => singularize(segment) === singularizedToPath);\n };\n\n return (\n <NavLink\n {...props}\n className={({ isActive }) =>\n classNames(styles['menu-link'], {\n [styles['menu-link--active']]: overrideDefault ? '' : isActive || isActiveSingular(props.to as string),\n })\n }\n />\n );\n};\n"],"mappings":";;;;;;;GCaa,KAAY,EAAE,oBAAiB,GAAG,QAA2B;CACxE,IAAM,IAAW,GAAa,EAGxB,KAAe,MAAgB,EAAI,QAAQ,MAAM,GAAG,EAGpD,KAAoB,MAAe;EACvC,IAAM,IAAkB,EAAS,SAAS,MAAM,IAAI,CAAC,OAAO,QAAQ,EAC9D,IAAe,EAAG,MAAM,IAAI,CAAC,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,IACvD,IAAqB,EAAY,EAAa;AAEpD,SAAO,EAAgB,MAAM,MAAY,EAAY,EAAQ,KAAK,EAAmB;;AAGvF,QACE,kBAAC,GAAD;EACE,GAAI;EACJ,YAAY,EAAE,kBACZ,EAAW,EAAO,cAAc,GAC7B,EAAO,uBAAuB,IAAkB,KAAK,KAAY,EAAiB,EAAM,GAAa,EACvG,CAAC;EAEJ,CAAA"}
1
+ {"version":3,"file":"MenuLink-Cm1yZO_5.js","names":[],"sources":["../src/components/MenuLink/MenuLink.module.css","../src/components/MenuLink/MenuLink.tsx"],"sourcesContent":[".menu-link {\n border-bottom: 0.125rem solid transparent;\n text-decoration: none;\n transition: var(--transition-colors) var(--default-duration) var(--default-easing-function);\n}\n\n.menu-link:hover,\n.menu-link--active {\n border-bottom-color: inherit;\n color: unset;\n}\n\n.menu-link--active {\n font-weight: var(--semibold);\n}\n","import classNames from 'clsx';\nimport { NavLink, useLocation } from 'react-router';\n\nimport type { NavLinkProps } from 'react-router';\n\nimport styles from './MenuLink.module.css';\n\n/** Represents a component for a [NavLink](https://reactrouter.com/en/main/components/nav-link) with styling. */\n// Omit style so it cannot be accidentally used\nexport interface MenuLinkProps extends Omit<NavLinkProps, 'style'> {\n overrideDefault?: boolean;\n}\n\nexport const MenuLink = ({ overrideDefault, ...props }: MenuLinkProps) => {\n const location = useLocation();\n\n // Helper function to remove trailing 's' from a string\n const singularize = (str: string) => str.replace(/s$/, '');\n\n // Check if 'to' path (singular version) matches any segment (singular version)\n const isActiveSingular = (to: string) => {\n const currentSegments = location.pathname.split('/').filter(Boolean);\n const latestToPath = to.split('/').filter(Boolean).slice(-1)[0]; // return only lates path removing any prepend path\n const singularizedToPath = singularize(latestToPath);\n\n return currentSegments.some((segment) => singularize(segment) === singularizedToPath);\n };\n\n return (\n <NavLink\n {...props}\n className={({ isActive }) =>\n classNames(styles['menu-link'], {\n [styles['menu-link--active']]: overrideDefault ? '' : isActive || isActiveSingular(props.to as string),\n })\n }\n />\n );\n};\n"],"mappings":";;;;;;;GCaa,KAAY,EAAE,oBAAiB,GAAG,QAA2B;CACxE,IAAM,IAAW,GAAa,EAGxB,KAAe,MAAgB,EAAI,QAAQ,MAAM,GAAG,EAGpD,KAAoB,MAAe;EACvC,IAAM,IAAkB,EAAS,SAAS,MAAM,IAAI,CAAC,OAAO,QAAQ,EAC9D,IAAe,EAAG,MAAM,IAAI,CAAC,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,IACvD,IAAqB,EAAY,EAAa;EAEpD,OAAO,EAAgB,MAAM,MAAY,EAAY,EAAQ,KAAK,EAAmB;;CAGvF,OACE,kBAAC,GAAD;EACE,GAAI;EACJ,YAAY,EAAE,kBACZ,EAAW,EAAO,cAAc,GAC7B,EAAO,uBAAuB,IAAkB,KAAK,KAAY,EAAiB,EAAM,GAAa,EACvG,CAAC;EAEJ,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ModalDialog-N50NGnd4.js","names":[],"sources":["../src/components/ModalDialog/ModalDialog.module.css","../src/components/ModalDialog/ModalDialog.tsx"],"sourcesContent":[".modal-dialog {\n --modal-dialog-padding: 1.5rem;\n --modal-dialog-padding-mobile: 1.25rem;\n\n background: var(--color-uva-white);\n box-shadow:\n 0 2px 2px hsl(0deg 0% 0% / 6%),\n 0 4px 3px hsla(0deg 0% 0% / 7%);\n display: flex;\n flex-direction: column;\n\n /* dynamic view height needed to adapt for possible auto hiding of mobile address bar */\n height: 100dvh;\n position: relative;\n width: 100vw;\n}\n\n.modal-dialog--padded {\n padding: 0;\n}\n\n.modal-dialog__content {\n display: flex;\n flex-direction: column;\n height: 100svh;\n justify-content: space-between;\n overflow: hidden;\n overflow-y: auto;\n padding: 0 var(--modal-dialog-padding-mobile);\n width: 100%;\n}\n\n.modal-dialog__children {\n padding-bottom: var(--modal-dialog-padding-mobile);\n}\n\n.modal-dialog__title {\n font-size: var(--font-size-m);\n line-height: var(--line-height-m);\n margin: 0 var(--modal-dialog-padding-mobile) 0 0;\n padding: var(--modal-dialog-padding-mobile);\n}\n\n.modal-dialog--confirm {\n padding: var(--modal-dialog-padding-mobile) 0 0;\n}\n\n.modal-dialog__buttons {\n background-color: var(--color-uva-white);\n bottom: 0;\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n justify-content: flex-start;\n margin: 0 calc(-1 * var(--modal-dialog-padding-mobile));\n padding: var(--modal-dialog-padding-mobile);\n position: sticky;\n right: 0;\n}\n\n.modal-dialog__buttons--border {\n border-top: 1px solid var(--color-grey-300);\n}\n\n.modal-dialog__buttons::before {\n background: linear-gradient(to top, rgba(0 0 0 / 30%), rgba(0 0 0 / 0%));\n bottom: 100%;\n content: \"\";\n height: 10px;\n left: 0;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n right: 0;\n transition: opacity 0.4s ease-out;\n}\n\n.modal-dialog__buttons--shadow::before {\n opacity: 1; /* Show the shadow when content is scrollable and not scrolled to the bottom */\n}\n\n.modal-dialog__close {\n position: absolute;\n right: var(--modal-dialog-padding-mobile);\n top: var(--modal-dialog-padding-mobile);\n}\n\n@media (min-width: 28rem) and (min-height: 28rem) {\n .modal-dialog {\n height: unset;\n max-height: 100svh;\n max-width: 100vw;\n }\n\n .modal-dialog--padded {\n width: 34.25rem;\n }\n\n .modal-dialog--small {\n width: 27.5rem;\n }\n\n .modal-dialog--regular {\n width: 30rem;\n }\n\n .modal-dialog--medium {\n width: 36rem;\n }\n\n .modal-dialog--large {\n width: 65.375rem;\n }\n\n .modal-dialog__title {\n margin-right: var(--modal-dialog-padding);\n padding: var(--modal-dialog-padding);\n }\n\n .modal-dialog__content {\n height: unset;\n padding: 0 var(--modal-dialog-padding);\n }\n\n .modal-dialog--content-with-buttons {\n margin-bottom: 5.75rem;\n }\n\n .modal-dialog__children {\n padding-bottom: var(--modal-dialog-padding);\n }\n\n .modal-dialog--confirm {\n padding: var(--modal-dialog-padding) 0 0;\n }\n\n .modal-dialog__buttons {\n margin: unset;\n padding: var(--modal-dialog-padding);\n position: absolute;\n width: inherit;\n }\n\n .modal-dialog__close {\n position: absolute;\n right: var(--modal-dialog-padding);\n top: var(--modal-dialog-padding);\n }\n}\n","import { useDialog } from '@react-aria/dialog';\nimport { FocusScope } from '@react-aria/focus';\nimport { OverlayContainer, useModal, useOverlay, usePreventScroll } from '@react-aria/overlays';\nimport { clsx } from 'clsx';\nimport { useEffect, useRef, useState } from 'react';\n\nimport type { FormHTMLAttributes, KeyboardEvent, PropsWithChildren, ReactNode } from 'react';\nimport type { AriaDialogProps } from '@react-types/dialog';\n\nimport styles from './ModalDialog.module.css';\n\nimport { Backdrop } from 'components/Backdrop';\nimport { OverlayCloseButton } from 'components/OverlayCloseButton';\nimport { Spinner } from 'components/Spinner';\n\nexport interface ModalDialogProps {\n /** The buttons of the dialog. */\n buttons?: ReactNode;\n /** `true` if the dialog can be closed by clicking outside of it; otherwise, `false`. The default is `false`. */\n isDismissable?: boolean;\n /** `true` to disable closing the dialog with the keyboard; otherwise, `false`. The default is `false`. */\n isKeyboardDismissDisabled?: boolean;\n /** `true` to show a spinner, if the contents of the dialog is lazy loaded; otherwise, `false`. The default is `false`. */\n isLoading?: boolean;\n /** The `aria-valuetext` value of the [Spinner](/story/atoms-spinner--spinner-example) component. The default is `'Loading'` Used together with `isLoading`. */\n spinnerAriaValueText?: string;\n /** The `aria-label` value of the [OverlayCloseButton](/story/atoms-overlayclosebutton--overlay-close-button-example) component. The default is `'Close'` */\n closeButtonAriaValueText?: string;\n /** `true` to render the dialog opened; otherwise, `false`. The default is `false`. */\n isOpen: boolean;\n /** `true` to disable form validation; otherwise, `false`. The default is `false`. */\n noValidate?: boolean;\n /** The callback function that is invoked when the dialog is closed. */\n onClose?(): void;\n /** The callback function that is invoked when the form is submitted. */\n onSubmit?: FormHTMLAttributes<HTMLFormElement>['onSubmit'];\n /** The `aria-role` value of the dialog. Possible values are `'dialog'`, `'alertdialog'`. The default is `'dialog'`. */\n role?: AriaDialogProps['role'];\n /** The title of the dialog. */\n title?: string;\n /** The contents of the dialog header. */\n headerContent?: ReactNode;\n /** The variant of the dialog. */\n variant?: 'confirm' | 'dialog';\n /** `true` to add padding to the dialog; otherwise, `false`. The default is `false`. */\n padded?: boolean;\n /** Size of the dialog. */\n size?: 'small' | 'regular' | 'medium' | 'large';\n /** `true` to show a border between the main content of the dialog and the buttons; otherwise, `false`. The default is `false`. */\n noButtonBorder?: boolean;\n}\n\n/** Represents a component for a modal dialog. */\nexport function ModalDialog(props: PropsWithChildren<ModalDialogProps>) {\n const {\n buttons,\n children,\n isDismissable = true,\n isKeyboardDismissDisabled = !isDismissable,\n isLoading,\n spinnerAriaValueText = 'Loading',\n closeButtonAriaValueText = 'Close',\n isOpen,\n noValidate = false,\n onClose,\n onSubmit,\n role = 'dialog',\n title,\n headerContent,\n variant = 'dialog',\n padded,\n size = 'regular',\n noButtonBorder = false,\n } = props;\n\n const ref = useRef<HTMLDivElement>(null);\n const formRef = useRef<HTMLFormElement>(null);\n const [isScrollable, setIsScrollable] = useState(false);\n const [isScrolledToBottom, setIsScrolledToBottom] = useState(false);\n\n const { dialogProps, titleProps } = useDialog({ role }, ref);\n const { modalProps } = useModal({ isDisabled: !isOpen });\n const { overlayProps, underlayProps } = useOverlay(\n { isDismissable, isKeyboardDismissDisabled, isOpen, onClose },\n ref\n );\n\n usePreventScroll({ isDisabled: !isOpen });\n\n useEffect(() => {\n const formElement = formRef.current;\n\n function checkScrollable() {\n if (formElement) {\n const scrollHeight = formElement.scrollHeight;\n const clientHeight = formElement.clientHeight;\n const scrollTop = formElement.scrollTop;\n\n setIsScrollable(scrollHeight > clientHeight);\n setIsScrolledToBottom(scrollTop + clientHeight >= scrollHeight);\n }\n }\n\n function handleScrollAndResize() {\n checkScrollable();\n }\n\n if (formElement) {\n formElement.addEventListener('scroll', handleScrollAndResize);\n window.addEventListener('resize', handleScrollAndResize);\n }\n\n const timeoutId = setTimeout(() => {\n checkScrollable();\n }, 0);\n\n return () => {\n if (formElement) {\n formElement.removeEventListener('scroll', handleScrollAndResize);\n }\n window.removeEventListener('resize', handleScrollAndResize);\n clearTimeout(timeoutId);\n };\n }, [isOpen, headerContent]);\n\n function onKeyUp(event: KeyboardEvent) {\n event.stopPropagation();\n }\n\n if (!isOpen) return null;\n\n return (\n <OverlayContainer>\n <Backdrop {...underlayProps}>\n {isLoading ? (\n <Spinner ariaValueText={spinnerAriaValueText} />\n ) : (\n <>\n {/* eslint-disable-next-line jsx-a11y/no-autofocus */}\n <FocusScope autoFocus contain restoreFocus>\n <div\n {...dialogProps}\n {...modalProps}\n {...overlayProps}\n className={clsx(styles['modal-dialog'], [styles[`modal-dialog--${size}`]], {\n [styles['modal-dialog--confirm']]: variant === 'confirm',\n [styles['modal-dialog--padded']]: padded,\n })}\n onKeyUp={onKeyUp}\n role=\"presentation\"\n ref={ref}\n >\n {(title || headerContent) && variant === 'dialog' && (\n <>\n {title && (\n <h1 {...titleProps} className={styles['modal-dialog__title']}>\n {title}\n </h1>\n )}\n {headerContent}\n {variant === 'dialog' && (\n <span className={styles['modal-dialog__close']}>\n <OverlayCloseButton\n aria-label={closeButtonAriaValueText}\n onClick={onClose}\n paddedModal={padded}\n />\n </span>\n )}\n </>\n )}\n <form\n className={clsx(styles['modal-dialog__content'], {\n [styles['modal-dialog--content-with-buttons']]: buttons,\n })}\n onSubmit={onSubmit}\n noValidate={noValidate}\n ref={formRef}\n >\n <div className={clsx({ [styles['modal-dialog__children']]: !noButtonBorder })}>{children}</div>\n {buttons && (\n <div\n className={clsx(styles['modal-dialog__buttons'], {\n [styles['modal-dialog__buttons--border']]: !noButtonBorder,\n [styles['modal-dialog__buttons--shadow']]: isScrollable && !isScrolledToBottom,\n })}\n >\n {buttons}\n </div>\n )}\n </form>\n </div>\n </FocusScope>\n </>\n )}\n </Backdrop>\n </OverlayContainer>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACqDA,SAAgB,EAAY,GAA4C;CACtE,IAAM,EACJ,YACA,aACA,mBAAgB,IAChB,+BAA4B,CAAC,GAC7B,cACA,0BAAuB,WACvB,8BAA2B,SAC3B,WACA,gBAAa,IACb,YACA,aACA,UAAO,UACP,UACA,kBACA,aAAU,UACV,WACA,UAAO,WACP,oBAAiB,OACf,GAEE,IAAM,EAAuB,KAAK,EAClC,IAAU,EAAwB,KAAK,EACvC,CAAC,GAAc,KAAmB,EAAS,GAAM,EACjD,CAAC,GAAoB,KAAyB,EAAS,GAAM,EAE7D,EAAE,gBAAa,kBAAe,EAAU,EAAE,SAAM,EAAE,EAAI,EACtD,EAAE,kBAAe,EAAS,EAAE,YAAY,CAAC,GAAQ,CAAC,EAClD,EAAE,iBAAc,qBAAkB,EACtC;EAAE;EAAe;EAA2B;EAAQ;EAAS,EAC7D,EACD;AAID,CAFA,EAAiB,EAAE,YAAY,CAAC,GAAQ,CAAC,EAEzC,QAAgB;EACd,IAAM,IAAc,EAAQ;EAE5B,SAAS,IAAkB;AACzB,OAAI,GAAa;IACf,IAAM,IAAe,EAAY,cAC3B,IAAe,EAAY,cAC3B,IAAY,EAAY;AAG9B,IADA,EAAgB,IAAe,EAAa,EAC5C,EAAsB,IAAY,KAAgB,EAAa;;;EAInE,SAAS,IAAwB;AAC/B,MAAiB;;AAGnB,EAAI,MACF,EAAY,iBAAiB,UAAU,EAAsB,EAC7D,OAAO,iBAAiB,UAAU,EAAsB;EAG1D,IAAM,IAAY,iBAAiB;AACjC,MAAiB;KAChB,EAAE;AAEL,eAAa;AAKX,GAJI,KACF,EAAY,oBAAoB,UAAU,EAAsB,EAElE,OAAO,oBAAoB,UAAU,EAAsB,EAC3D,aAAa,EAAU;;IAExB,CAAC,GAAQ,EAAc,CAAC;CAE3B,SAAS,EAAQ,GAAsB;AACrC,IAAM,iBAAiB;;AAKzB,QAFK,IAGH,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;EAAU,GAAI;YACX,IACC,kBAAC,GAAD,EAAS,eAAe,GAAwB,CAAA,GAEhD,kBAAA,GAAA,EAAA,UAEE,kBAAC,GAAD;GAAY,WAAA;GAAU,SAAA;GAAQ,cAAA;aAC5B,kBAAC,OAAD;IACE,GAAI;IACJ,GAAI;IACJ,GAAI;IACJ,WAAW,EAAK,EAAO,iBAAiB,CAAC,EAAO,iBAAiB,KAAQ,EAAE;MACxE,EAAO,2BAA2B,MAAY;MAC9C,EAAO,0BAA0B;KACnC,CAAC;IACO;IACT,MAAK;IACA;cAVP,EAYI,KAAS,MAAkB,MAAY,YACvC,kBAAA,GAAA,EAAA,UAAA;KACG,KACC,kBAAC,MAAD;MAAI,GAAI;MAAY,WAAW,EAAO;gBACnC;MACE,CAAA;KAEN;KACA,MAAY,YACX,kBAAC,QAAD;MAAM,WAAW,EAAO;gBACtB,kBAAC,GAAD;OACE,cAAY;OACZ,SAAS;OACT,aAAa;OACb,CAAA;MACG,CAAA;KAER,EAAA,CAAA,EAEL,kBAAC,QAAD;KACE,WAAW,EAAK,EAAO,0BAA0B,GAC9C,EAAO,wCAAwC,GACjD,CAAC;KACQ;KACE;KACZ,KAAK;eANP,CAQE,kBAAC,OAAD;MAAK,WAAW,EAAK,GAAG,EAAO,4BAA4B,CAAC,GAAgB,CAAC;MAAG;MAAe,CAAA,EAC9F,KACC,kBAAC,OAAD;MACE,WAAW,EAAK,EAAO,0BAA0B;QAC9C,EAAO,mCAAmC,CAAC;QAC3C,EAAO,mCAAmC,KAAgB,CAAC;OAC7D,CAAC;gBAED;MACG,CAAA,CAEH;OACH;;GACK,CAAA,EACZ,CAAA;EAEI,CAAA,EACM,CAAA,GAnED"}
1
+ {"version":3,"file":"ModalDialog-N50NGnd4.js","names":[],"sources":["../src/components/ModalDialog/ModalDialog.module.css","../src/components/ModalDialog/ModalDialog.tsx"],"sourcesContent":[".modal-dialog {\n --modal-dialog-padding: 1.5rem;\n --modal-dialog-padding-mobile: 1.25rem;\n\n background: var(--color-uva-white);\n box-shadow:\n 0 2px 2px hsl(0deg 0% 0% / 6%),\n 0 4px 3px hsla(0deg 0% 0% / 7%);\n display: flex;\n flex-direction: column;\n\n /* dynamic view height needed to adapt for possible auto hiding of mobile address bar */\n height: 100dvh;\n position: relative;\n width: 100vw;\n}\n\n.modal-dialog--padded {\n padding: 0;\n}\n\n.modal-dialog__content {\n display: flex;\n flex-direction: column;\n height: 100svh;\n justify-content: space-between;\n overflow: hidden;\n overflow-y: auto;\n padding: 0 var(--modal-dialog-padding-mobile);\n width: 100%;\n}\n\n.modal-dialog__children {\n padding-bottom: var(--modal-dialog-padding-mobile);\n}\n\n.modal-dialog__title {\n font-size: var(--font-size-m);\n line-height: var(--line-height-m);\n margin: 0 var(--modal-dialog-padding-mobile) 0 0;\n padding: var(--modal-dialog-padding-mobile);\n}\n\n.modal-dialog--confirm {\n padding: var(--modal-dialog-padding-mobile) 0 0;\n}\n\n.modal-dialog__buttons {\n background-color: var(--color-uva-white);\n bottom: 0;\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n justify-content: flex-start;\n margin: 0 calc(-1 * var(--modal-dialog-padding-mobile));\n padding: var(--modal-dialog-padding-mobile);\n position: sticky;\n right: 0;\n}\n\n.modal-dialog__buttons--border {\n border-top: 1px solid var(--color-grey-300);\n}\n\n.modal-dialog__buttons::before {\n background: linear-gradient(to top, rgba(0 0 0 / 30%), rgba(0 0 0 / 0%));\n bottom: 100%;\n content: \"\";\n height: 10px;\n left: 0;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n right: 0;\n transition: opacity 0.4s ease-out;\n}\n\n.modal-dialog__buttons--shadow::before {\n opacity: 1; /* Show the shadow when content is scrollable and not scrolled to the bottom */\n}\n\n.modal-dialog__close {\n position: absolute;\n right: var(--modal-dialog-padding-mobile);\n top: var(--modal-dialog-padding-mobile);\n}\n\n@media (min-width: 28rem) and (min-height: 28rem) {\n .modal-dialog {\n height: unset;\n max-height: 100svh;\n max-width: 100vw;\n }\n\n .modal-dialog--padded {\n width: 34.25rem;\n }\n\n .modal-dialog--small {\n width: 27.5rem;\n }\n\n .modal-dialog--regular {\n width: 30rem;\n }\n\n .modal-dialog--medium {\n width: 36rem;\n }\n\n .modal-dialog--large {\n width: 65.375rem;\n }\n\n .modal-dialog__title {\n margin-right: var(--modal-dialog-padding);\n padding: var(--modal-dialog-padding);\n }\n\n .modal-dialog__content {\n height: unset;\n padding: 0 var(--modal-dialog-padding);\n }\n\n .modal-dialog--content-with-buttons {\n margin-bottom: 5.75rem;\n }\n\n .modal-dialog__children {\n padding-bottom: var(--modal-dialog-padding);\n }\n\n .modal-dialog--confirm {\n padding: var(--modal-dialog-padding) 0 0;\n }\n\n .modal-dialog__buttons {\n margin: unset;\n padding: var(--modal-dialog-padding);\n position: absolute;\n width: inherit;\n }\n\n .modal-dialog__close {\n position: absolute;\n right: var(--modal-dialog-padding);\n top: var(--modal-dialog-padding);\n }\n}\n","import { useDialog } from '@react-aria/dialog';\nimport { FocusScope } from '@react-aria/focus';\nimport { OverlayContainer, useModal, useOverlay, usePreventScroll } from '@react-aria/overlays';\nimport { clsx } from 'clsx';\nimport { useEffect, useRef, useState } from 'react';\n\nimport type { FormHTMLAttributes, KeyboardEvent, PropsWithChildren, ReactNode } from 'react';\nimport type { AriaDialogProps } from '@react-types/dialog';\n\nimport styles from './ModalDialog.module.css';\n\nimport { Backdrop } from 'components/Backdrop';\nimport { OverlayCloseButton } from 'components/OverlayCloseButton';\nimport { Spinner } from 'components/Spinner';\n\nexport interface ModalDialogProps {\n /** The buttons of the dialog. */\n buttons?: ReactNode;\n /** `true` if the dialog can be closed by clicking outside of it; otherwise, `false`. The default is `false`. */\n isDismissable?: boolean;\n /** `true` to disable closing the dialog with the keyboard; otherwise, `false`. The default is `false`. */\n isKeyboardDismissDisabled?: boolean;\n /** `true` to show a spinner, if the contents of the dialog is lazy loaded; otherwise, `false`. The default is `false`. */\n isLoading?: boolean;\n /** The `aria-valuetext` value of the [Spinner](/story/atoms-spinner--spinner-example) component. The default is `'Loading'` Used together with `isLoading`. */\n spinnerAriaValueText?: string;\n /** The `aria-label` value of the [OverlayCloseButton](/story/atoms-overlayclosebutton--overlay-close-button-example) component. The default is `'Close'` */\n closeButtonAriaValueText?: string;\n /** `true` to render the dialog opened; otherwise, `false`. The default is `false`. */\n isOpen: boolean;\n /** `true` to disable form validation; otherwise, `false`. The default is `false`. */\n noValidate?: boolean;\n /** The callback function that is invoked when the dialog is closed. */\n onClose?(): void;\n /** The callback function that is invoked when the form is submitted. */\n onSubmit?: FormHTMLAttributes<HTMLFormElement>['onSubmit'];\n /** The `aria-role` value of the dialog. Possible values are `'dialog'`, `'alertdialog'`. The default is `'dialog'`. */\n role?: AriaDialogProps['role'];\n /** The title of the dialog. */\n title?: string;\n /** The contents of the dialog header. */\n headerContent?: ReactNode;\n /** The variant of the dialog. */\n variant?: 'confirm' | 'dialog';\n /** `true` to add padding to the dialog; otherwise, `false`. The default is `false`. */\n padded?: boolean;\n /** Size of the dialog. */\n size?: 'small' | 'regular' | 'medium' | 'large';\n /** `true` to show a border between the main content of the dialog and the buttons; otherwise, `false`. The default is `false`. */\n noButtonBorder?: boolean;\n}\n\n/** Represents a component for a modal dialog. */\nexport function ModalDialog(props: PropsWithChildren<ModalDialogProps>) {\n const {\n buttons,\n children,\n isDismissable = true,\n isKeyboardDismissDisabled = !isDismissable,\n isLoading,\n spinnerAriaValueText = 'Loading',\n closeButtonAriaValueText = 'Close',\n isOpen,\n noValidate = false,\n onClose,\n onSubmit,\n role = 'dialog',\n title,\n headerContent,\n variant = 'dialog',\n padded,\n size = 'regular',\n noButtonBorder = false,\n } = props;\n\n const ref = useRef<HTMLDivElement>(null);\n const formRef = useRef<HTMLFormElement>(null);\n const [isScrollable, setIsScrollable] = useState(false);\n const [isScrolledToBottom, setIsScrolledToBottom] = useState(false);\n\n const { dialogProps, titleProps } = useDialog({ role }, ref);\n const { modalProps } = useModal({ isDisabled: !isOpen });\n const { overlayProps, underlayProps } = useOverlay(\n { isDismissable, isKeyboardDismissDisabled, isOpen, onClose },\n ref\n );\n\n usePreventScroll({ isDisabled: !isOpen });\n\n useEffect(() => {\n const formElement = formRef.current;\n\n function checkScrollable() {\n if (formElement) {\n const scrollHeight = formElement.scrollHeight;\n const clientHeight = formElement.clientHeight;\n const scrollTop = formElement.scrollTop;\n\n setIsScrollable(scrollHeight > clientHeight);\n setIsScrolledToBottom(scrollTop + clientHeight >= scrollHeight);\n }\n }\n\n function handleScrollAndResize() {\n checkScrollable();\n }\n\n if (formElement) {\n formElement.addEventListener('scroll', handleScrollAndResize);\n window.addEventListener('resize', handleScrollAndResize);\n }\n\n const timeoutId = setTimeout(() => {\n checkScrollable();\n }, 0);\n\n return () => {\n if (formElement) {\n formElement.removeEventListener('scroll', handleScrollAndResize);\n }\n window.removeEventListener('resize', handleScrollAndResize);\n clearTimeout(timeoutId);\n };\n }, [isOpen, headerContent]);\n\n function onKeyUp(event: KeyboardEvent) {\n event.stopPropagation();\n }\n\n if (!isOpen) return null;\n\n return (\n <OverlayContainer>\n <Backdrop {...underlayProps}>\n {isLoading ? (\n <Spinner ariaValueText={spinnerAriaValueText} />\n ) : (\n <>\n {/* eslint-disable-next-line jsx-a11y/no-autofocus */}\n <FocusScope autoFocus contain restoreFocus>\n <div\n {...dialogProps}\n {...modalProps}\n {...overlayProps}\n className={clsx(styles['modal-dialog'], [styles[`modal-dialog--${size}`]], {\n [styles['modal-dialog--confirm']]: variant === 'confirm',\n [styles['modal-dialog--padded']]: padded,\n })}\n onKeyUp={onKeyUp}\n role=\"presentation\"\n ref={ref}\n >\n {(title || headerContent) && variant === 'dialog' && (\n <>\n {title && (\n <h1 {...titleProps} className={styles['modal-dialog__title']}>\n {title}\n </h1>\n )}\n {headerContent}\n {variant === 'dialog' && (\n <span className={styles['modal-dialog__close']}>\n <OverlayCloseButton\n aria-label={closeButtonAriaValueText}\n onClick={onClose}\n paddedModal={padded}\n />\n </span>\n )}\n </>\n )}\n <form\n className={clsx(styles['modal-dialog__content'], {\n [styles['modal-dialog--content-with-buttons']]: buttons,\n })}\n onSubmit={onSubmit}\n noValidate={noValidate}\n ref={formRef}\n >\n <div className={clsx({ [styles['modal-dialog__children']]: !noButtonBorder })}>{children}</div>\n {buttons && (\n <div\n className={clsx(styles['modal-dialog__buttons'], {\n [styles['modal-dialog__buttons--border']]: !noButtonBorder,\n [styles['modal-dialog__buttons--shadow']]: isScrollable && !isScrolledToBottom,\n })}\n >\n {buttons}\n </div>\n )}\n </form>\n </div>\n </FocusScope>\n </>\n )}\n </Backdrop>\n </OverlayContainer>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACqDA,SAAgB,EAAY,GAA4C;CACtE,IAAM,EACJ,YACA,aACA,mBAAgB,IAChB,+BAA4B,CAAC,GAC7B,cACA,0BAAuB,WACvB,8BAA2B,SAC3B,WACA,gBAAa,IACb,YACA,aACA,UAAO,UACP,UACA,kBACA,aAAU,UACV,WACA,UAAO,WACP,oBAAiB,OACf,GAEE,IAAM,EAAuB,KAAK,EAClC,IAAU,EAAwB,KAAK,EACvC,CAAC,GAAc,KAAmB,EAAS,GAAM,EACjD,CAAC,GAAoB,KAAyB,EAAS,GAAM,EAE7D,EAAE,gBAAa,kBAAe,EAAU,EAAE,SAAM,EAAE,EAAI,EACtD,EAAE,kBAAe,EAAS,EAAE,YAAY,CAAC,GAAQ,CAAC,EAClD,EAAE,iBAAc,qBAAkB,EACtC;EAAE;EAAe;EAA2B;EAAQ;EAAS,EAC7D,EACD;CAID,AAFA,EAAiB,EAAE,YAAY,CAAC,GAAQ,CAAC,EAEzC,QAAgB;EACd,IAAM,IAAc,EAAQ;EAE5B,SAAS,IAAkB;GACzB,IAAI,GAAa;IACf,IAAM,IAAe,EAAY,cAC3B,IAAe,EAAY,cAC3B,IAAY,EAAY;IAG9B,AADA,EAAgB,IAAe,EAAa,EAC5C,EAAsB,IAAY,KAAgB,EAAa;;;EAInE,SAAS,IAAwB;GAC/B,GAAiB;;EAGnB,AAAI,MACF,EAAY,iBAAiB,UAAU,EAAsB,EAC7D,OAAO,iBAAiB,UAAU,EAAsB;EAG1D,IAAM,IAAY,iBAAiB;GACjC,GAAiB;KAChB,EAAE;EAEL,aAAa;GAKX,AAJI,KACF,EAAY,oBAAoB,UAAU,EAAsB,EAElE,OAAO,oBAAoB,UAAU,EAAsB,EAC3D,aAAa,EAAU;;IAExB,CAAC,GAAQ,EAAc,CAAC;CAE3B,SAAS,EAAQ,GAAsB;EACrC,EAAM,iBAAiB;;CAKzB,OAFK,IAGH,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;EAAU,GAAI;YACX,IACC,kBAAC,GAAD,EAAS,eAAe,GAAwB,CAAA,GAEhD,kBAAA,GAAA,EAAA,UAEE,kBAAC,GAAD;GAAY,WAAA;GAAU,SAAA;GAAQ,cAAA;aAC5B,kBAAC,OAAD;IACE,GAAI;IACJ,GAAI;IACJ,GAAI;IACJ,WAAW,EAAK,EAAO,iBAAiB,CAAC,EAAO,iBAAiB,KAAQ,EAAE;MACxE,EAAO,2BAA2B,MAAY;MAC9C,EAAO,0BAA0B;KACnC,CAAC;IACO;IACT,MAAK;IACA;cAVP,EAYI,KAAS,MAAkB,MAAY,YACvC,kBAAA,GAAA,EAAA,UAAA;KACG,KACC,kBAAC,MAAD;MAAI,GAAI;MAAY,WAAW,EAAO;gBACnC;MACE,CAAA;KAEN;KACA,MAAY,YACX,kBAAC,QAAD;MAAM,WAAW,EAAO;gBACtB,kBAAC,GAAD;OACE,cAAY;OACZ,SAAS;OACT,aAAa;OACb,CAAA;MACG,CAAA;KAER,EAAA,CAAA,EAEL,kBAAC,QAAD;KACE,WAAW,EAAK,EAAO,0BAA0B,GAC9C,EAAO,wCAAwC,GACjD,CAAC;KACQ;KACE;KACZ,KAAK;eANP,CAQE,kBAAC,OAAD;MAAK,WAAW,EAAK,GAAG,EAAO,4BAA4B,CAAC,GAAgB,CAAC;MAAG;MAAe,CAAA,EAC9F,KACC,kBAAC,OAAD;MACE,WAAW,EAAK,EAAO,0BAA0B;QAC9C,EAAO,mCAAmC,CAAC;QAC3C,EAAO,mCAAmC,KAAgB,CAAC;OAC7D,CAAC;gBAED;MACG,CAAA,CAEH;OACH;;GACK,CAAA,EACZ,CAAA;EAEI,CAAA,EACM,CAAA,GAnED"}
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelectBox-Cuh_o-A1.js","names":[],"sources":["../src/components/MultiSelectBox/MultiSelectBox.module.css","../src/components/MultiSelectBox/MultiSelectBox.tsx"],"sourcesContent":[".multi-select-box-wrapper {\n position: relative;\n}\n\n.multi-select-box-trigger {\n align-items: center;\n background-color: var(--color-uva-white);\n border: 1px solid var(--color-grey-500);\n border-radius: 0.5rem;\n cursor: pointer;\n display: flex;\n font: inherit;\n height: 2.75rem;\n justify-content: space-between;\n line-height: inherit;\n overflow: hidden;\n padding: 0.4rem 2rem 0.4rem 1rem;\n position: relative;\n width: 100%;\n}\n\n.multi-select-box-trigger--darkBorder {\n border-color: var(--color-uva-black);\n}\n\n.multi-select-box-trigger--not-valid {\n border-color: var(--color-red-600);\n}\n\n.multi-select-box-trigger:focus-visible {\n background-color: var(--color-grey-300);\n outline: 1px solid var(--color-grey-300);\n}\n\n.multi-select-box-trigger:focus-visible,\n.multi-select-box-trigger:hover {\n background-color: var(--color-grey-300);\n}\n\n.multi-select-box-trigger-label {\n min-height: 0.65rem;\n overflow: hidden;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n}\n\n.multi-select-box-trigger:disabled:hover {\n background-color: var(--color-uva-white);\n cursor: not-allowed;\n}\n\n.multi-select-box-trigger-icon {\n position: absolute;\n right: 0.875rem;\n}\n\n.multi-select-box-trigger-icon--open {\n transform: rotate(180deg);\n}\n\n.multi-select-box-listbox--wrapper {\n border-radius: 0.5rem;\n box-shadow: 0 0 0.25rem 0 rgba(0 0 0 / 25%);\n display: flex;\n height: auto;\n margin: 0.25rem 0;\n overflow: hidden;\n position: fixed;\n width: auto;\n z-index: 20;\n}\n\n.multi-select-box-listbox {\n background-color: var(--color-uva-white);\n border-radius: var(--border-radius);\n display: flex;\n flex-direction: column;\n gap: 0.125rem;\n list-style: none;\n margin: 0;\n min-width: 100%;\n overflow-y: auto;\n padding: 0.25rem;\n white-space: nowrap;\n width: fit-content;\n}\n\n.multi-select-box-listbox-option {\n border-radius: 0.25rem;\n cursor: pointer;\n display: flex;\n height: 2.5rem;\n justify-content: flex-start;\n position: relative;\n user-select: none;\n width: 100%;\n}\n\n.multi-select-box-listbox-option--active,\n.multi-select-box-listbox-option:hover {\n background-color: var(--color-grey-300);\n box-shadow: 0 0 0 1px var(--color-uva-white);\n}\n\n.multi-select-box-listbox-option:focus-visible,\n.multi-select-box-listbox-option:hover {\n background-color: var(--color-grey-300);\n}\n\n.multi-select-box-listbox-option-content {\n align-items: center;\n cursor: pointer;\n display: flex;\n gap: 1rem;\n padding: 0.75rem;\n width: 100%;\n}\n\n.multi-select-box-listbox-option:focus-visible {\n background-color: var(--color-grey-300);\n outline: 1px solid var(--color-grey-700);\n}\n\n.multi-select-box-listbox-option--disabled {\n cursor: not-allowed;\n opacity: 0.5;\n pointer-events: none;\n user-select: none;\n}\n","import { useRef, useState, useId, useEffect, useCallback } from 'react';\nimport { clsx } from 'clsx';\n\nimport type { KeyboardEvent, ChangeEvent, MouseEvent } from 'react';\n\nimport styles from './MultiSelectBox.module.css';\n\nimport { Icon } from 'components/Icon';\nimport { Checkbox } from 'components/Checkbox';\nimport { usePositionedFloaters } from 'components/hooks/usePositionedFloaters';\n\nexport type MultiSelectData = {\n label: string;\n value: string | number;\n disabled?: boolean;\n};\n\nexport interface MultiSelectBoxProps {\n /** Array of label, values pairs */\n selectData: MultiSelectData[];\n /** Retuns selected label, values */\n onChange: (values: MultiSelectData[]) => void;\n /** Array of label, value pairs that should be check by default */\n defaultSelectedItems?: MultiSelectData[];\n /** Suffix label in the selectbutton '[count] selected' */\n labelSuffix?: string;\n /** Disables the multiselect */\n disabled?: boolean;\n /** If true sets the option dropdown min-width to the width of the select button. */\n fullWidth?: boolean;\n /** Dark border. */\n darkBorder?: boolean;\n /** `true` to color border red to show not valid; otherwise, `false`. */\n notValid?: boolean;\n /** The max height of the options. */\n maxOptionHeight?: `${number}${'px' | 'rem'}`;\n /** `true` to align the right side of the options with the select box; otherwise, `false` to align on the left side. */\n optionPositionRight?: boolean;\n}\n\nexport const MultiSelectBox = ({\n selectData,\n onChange,\n defaultSelectedItems,\n labelSuffix = 'geselecteerd',\n disabled = false,\n fullWidth = false,\n darkBorder = false,\n notValid = false,\n maxOptionHeight,\n optionPositionRight,\n}: MultiSelectBoxProps) => {\n const multiselectboxId = useId();\n const [selectedItems, setSelectedItems] = useState<MultiSelectData[]>(defaultSelectedItems || []);\n const [selectedItemsCount, setSelectedItemsCount] = useState(defaultSelectedItems?.length || 0);\n const [isOpen, setIsOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const optionListRef = useRef<HTMLUListElement>(null);\n\n const [positionElement, setPositionElement] = useState<HTMLElement | null>(null);\n const [referenceElement, setReferenceElement] = useState<HTMLButtonElement | null>(null);\n const { style: positionStyle, updatePosition } = usePositionedFloaters(positionElement, referenceElement, {\n mouseEvent: 'click',\n position: 'bottomLeft',\n offset: 4,\n maxFixedHeight: maxOptionHeight,\n horizontalPosition: optionPositionRight ? 'right' : 'left',\n mobileBreakpoint: '28rem',\n fullWidth,\n });\n\n const onMouseEventOutside = useCallback(\n ({ target }: Event | MouseEvent) => {\n if (!target || !wrapperRef.current) return;\n\n if (!wrapperRef.current.contains(target as Node)) {\n setIsOpen(false);\n }\n },\n [setIsOpen]\n );\n\n const onTriggerKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>) => {\n switch (event.key) {\n case 'Enter':\n event.preventDefault();\n setIsOpen(true);\n break;\n case 'Escape':\n if (isOpen) {\n event.stopPropagation();\n setIsOpen(false);\n }\n break;\n default:\n break;\n }\n },\n [isOpen]\n );\n\n const onOptionKeyDown = useCallback(\n (event: KeyboardEvent<HTMLLIElement>) => {\n if (!isOpen) return;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n setActiveIndex((prev) => {\n let nextIndex = prev;\n do {\n nextIndex = nextIndex < selectData.length - 1 ? nextIndex + 1 : 0;\n } while (selectData[nextIndex]?.disabled);\n return nextIndex;\n });\n break;\n case 'ArrowUp':\n event.preventDefault();\n setActiveIndex((prev) => {\n let nextIndex = prev;\n do {\n nextIndex = nextIndex <= 0 ? selectData.length - 1 : nextIndex - 1;\n } while (selectData[nextIndex]?.disabled);\n return nextIndex;\n });\n break;\n case 'Enter': {\n event.preventDefault();\n const selectedItem = selectData[activeIndex];\n if (!selectedItem || selectedItem.disabled) break;\n const isAlreadySelected = selectedItems.some((item) => item.value === selectedItem.value);\n const updatedSelectedItems = isAlreadySelected\n ? selectedItems.filter((item) => item.value !== selectedItem.value)\n : [...selectedItems, selectedItem];\n\n setSelectedItems(updatedSelectedItems);\n setSelectedItemsCount(updatedSelectedItems.length);\n onChange(updatedSelectedItems);\n break;\n }\n case 'Tab':\n event.preventDefault();\n setIsOpen(false);\n break;\n case 'Escape':\n event.stopPropagation();\n setIsOpen(false);\n break;\n default:\n break;\n }\n },\n [activeIndex, isOpen, selectData, selectedItems, onChange]\n );\n\n const onOptionClick = (event: MouseEvent<HTMLLIElement>, option: MultiSelectData) => {\n if (option.disabled) return;\n\n // Prevent toggle if click originated from the checkbox\n if ((event.target as HTMLElement).tagName === 'INPUT') return;\n\n const isAlreadySelected = selectedItems.some((item) => item.value === option.value);\n const updatedSelectedItems = isAlreadySelected\n ? selectedItems.filter((item) => item.value !== option.value)\n : [...selectedItems, option];\n\n setSelectedItems(updatedSelectedItems);\n setSelectedItemsCount(updatedSelectedItems.length);\n onChange(updatedSelectedItems);\n updatePosition();\n };\n\n const handleSelect = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const { checked, value } = event.target;\n let updatedSelectedItems = [...selectedItems];\n\n if (checked) {\n const selectedItem = selectData.find((item) => item.value === value);\n if (selectedItem) {\n updatedSelectedItems.push(selectedItem);\n }\n } else {\n updatedSelectedItems = updatedSelectedItems.filter((item) => item.value !== value);\n }\n\n setSelectedItems(updatedSelectedItems);\n setSelectedItemsCount(updatedSelectedItems.length);\n onChange(updatedSelectedItems);\n updatePosition();\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [selectData, selectedItems, onChange]\n );\n\n useEffect(() => {\n if (isOpen) {\n setActiveIndex(0);\n }\n }, [isOpen]);\n\n useEffect(() => {\n const activeOption = optionListRef.current?.children[activeIndex] as HTMLElement;\n activeOption?.focus();\n }, [activeIndex]);\n\n useEffect(() => {\n if (!isOpen) return;\n\n document.addEventListener('click', onMouseEventOutside, true);\n document.addEventListener('scroll', onMouseEventOutside, true);\n\n return () => {\n document.removeEventListener('click', onMouseEventOutside, true);\n document.removeEventListener('scroll', onMouseEventOutside, true);\n };\n }, [onMouseEventOutside, isOpen]);\n\n return (\n <div className={styles['multi-select-box-wrapper']} ref={wrapperRef}>\n <button\n className={clsx(styles['multi-select-box-trigger'], {\n [styles['multi-select-box-trigger--darkBorder']]: darkBorder,\n [styles['multi-select-box-trigger--not-valid']]: notValid,\n })}\n type=\"button\"\n onClick={() => {\n setIsOpen(!isOpen);\n }}\n onKeyDown={onTriggerKeyDown}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-label={`${selectedItemsCount} ${labelSuffix}`}\n disabled={disabled}\n {...(isOpen && { 'aria-controls': multiselectboxId })}\n ref={setReferenceElement}\n >\n <span className={styles['multi-select-box-trigger-label']}>\n {selectedItemsCount} {labelSuffix}\n </span>\n <Icon\n className={clsx(styles['multi-select-box-trigger-icon'], {\n [styles['multi-select-box-trigger-icon--open']]: isOpen,\n })}\n name=\"CheveronDown\"\n size={16}\n />\n </button>\n\n <div\n id={multiselectboxId}\n className={clsx(styles['multi-select-box-listbox--wrapper'])}\n style={{ ...positionStyle.style, visibility: isOpen ? 'visible' : 'hidden' }}\n role=\"listbox\"\n ref={setPositionElement}\n >\n <ul className={styles['multi-select-box-listbox']} ref={optionListRef}>\n {selectData.map(({ label, value, disabled }, index) => (\n <li\n className={clsx(styles['multi-select-box-listbox-option'], {\n [styles['multi-select-box-listbox-option--active']]: index === activeIndex,\n [styles['multi-select-box-listbox-option--disabled']]: disabled,\n })}\n key={value}\n role=\"option\"\n onKeyDown={onOptionKeyDown}\n onClick={(event) => onOptionClick(event, { label, value, disabled })}\n onMouseOver={() => setActiveIndex(index)}\n onFocus={() => setActiveIndex(index)}\n tabIndex={0}\n aria-selected={selectedItems.some((item) => item.value === value)}\n >\n <label htmlFor={label} className={styles['multi-select-box-listbox-option-content']} tabIndex={-1}>\n <Checkbox\n id={`${label}-${multiselectboxId}`}\n onChange={handleSelect}\n value={value}\n tabIndex={-1}\n disabled={disabled}\n checked={selectedItems.some((item) => item.value === value)}\n />\n <span>{label}</span>\n </label>\n </li>\n ))}\n </ul>\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"MultiSelectBox-Cuh_o-A1.js","names":[],"sources":["../src/components/MultiSelectBox/MultiSelectBox.module.css","../src/components/MultiSelectBox/MultiSelectBox.tsx"],"sourcesContent":[".multi-select-box-wrapper {\n position: relative;\n}\n\n.multi-select-box-trigger {\n align-items: center;\n background-color: var(--color-uva-white);\n border: 1px solid var(--color-grey-500);\n border-radius: 0.5rem;\n cursor: pointer;\n display: flex;\n font: inherit;\n height: 2.75rem;\n justify-content: space-between;\n line-height: inherit;\n overflow: hidden;\n padding: 0.4rem 2rem 0.4rem 1rem;\n position: relative;\n width: 100%;\n}\n\n.multi-select-box-trigger--darkBorder {\n border-color: var(--color-uva-black);\n}\n\n.multi-select-box-trigger--not-valid {\n border-color: var(--color-red-600);\n}\n\n.multi-select-box-trigger:focus-visible {\n background-color: var(--color-grey-300);\n outline: 1px solid var(--color-grey-300);\n}\n\n.multi-select-box-trigger:focus-visible,\n.multi-select-box-trigger:hover {\n background-color: var(--color-grey-300);\n}\n\n.multi-select-box-trigger-label {\n min-height: 0.65rem;\n overflow: hidden;\n text-align: left;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n}\n\n.multi-select-box-trigger:disabled:hover {\n background-color: var(--color-uva-white);\n cursor: not-allowed;\n}\n\n.multi-select-box-trigger-icon {\n position: absolute;\n right: 0.875rem;\n}\n\n.multi-select-box-trigger-icon--open {\n transform: rotate(180deg);\n}\n\n.multi-select-box-listbox--wrapper {\n border-radius: 0.5rem;\n box-shadow: 0 0 0.25rem 0 rgba(0 0 0 / 25%);\n display: flex;\n height: auto;\n margin: 0.25rem 0;\n overflow: hidden;\n position: fixed;\n width: auto;\n z-index: 20;\n}\n\n.multi-select-box-listbox {\n background-color: var(--color-uva-white);\n border-radius: var(--border-radius);\n display: flex;\n flex-direction: column;\n gap: 0.125rem;\n list-style: none;\n margin: 0;\n min-width: 100%;\n overflow-y: auto;\n padding: 0.25rem;\n white-space: nowrap;\n width: fit-content;\n}\n\n.multi-select-box-listbox-option {\n border-radius: 0.25rem;\n cursor: pointer;\n display: flex;\n height: 2.5rem;\n justify-content: flex-start;\n position: relative;\n user-select: none;\n width: 100%;\n}\n\n.multi-select-box-listbox-option--active,\n.multi-select-box-listbox-option:hover {\n background-color: var(--color-grey-300);\n box-shadow: 0 0 0 1px var(--color-uva-white);\n}\n\n.multi-select-box-listbox-option:focus-visible,\n.multi-select-box-listbox-option:hover {\n background-color: var(--color-grey-300);\n}\n\n.multi-select-box-listbox-option-content {\n align-items: center;\n cursor: pointer;\n display: flex;\n gap: 1rem;\n padding: 0.75rem;\n width: 100%;\n}\n\n.multi-select-box-listbox-option:focus-visible {\n background-color: var(--color-grey-300);\n outline: 1px solid var(--color-grey-700);\n}\n\n.multi-select-box-listbox-option--disabled {\n cursor: not-allowed;\n opacity: 0.5;\n pointer-events: none;\n user-select: none;\n}\n","import { useRef, useState, useId, useEffect, useCallback } from 'react';\nimport { clsx } from 'clsx';\n\nimport type { KeyboardEvent, ChangeEvent, MouseEvent } from 'react';\n\nimport styles from './MultiSelectBox.module.css';\n\nimport { Icon } from 'components/Icon';\nimport { Checkbox } from 'components/Checkbox';\nimport { usePositionedFloaters } from 'components/hooks/usePositionedFloaters';\n\nexport type MultiSelectData = {\n label: string;\n value: string | number;\n disabled?: boolean;\n};\n\nexport interface MultiSelectBoxProps {\n /** Array of label, values pairs */\n selectData: MultiSelectData[];\n /** Retuns selected label, values */\n onChange: (values: MultiSelectData[]) => void;\n /** Array of label, value pairs that should be check by default */\n defaultSelectedItems?: MultiSelectData[];\n /** Suffix label in the selectbutton '[count] selected' */\n labelSuffix?: string;\n /** Disables the multiselect */\n disabled?: boolean;\n /** If true sets the option dropdown min-width to the width of the select button. */\n fullWidth?: boolean;\n /** Dark border. */\n darkBorder?: boolean;\n /** `true` to color border red to show not valid; otherwise, `false`. */\n notValid?: boolean;\n /** The max height of the options. */\n maxOptionHeight?: `${number}${'px' | 'rem'}`;\n /** `true` to align the right side of the options with the select box; otherwise, `false` to align on the left side. */\n optionPositionRight?: boolean;\n}\n\nexport const MultiSelectBox = ({\n selectData,\n onChange,\n defaultSelectedItems,\n labelSuffix = 'geselecteerd',\n disabled = false,\n fullWidth = false,\n darkBorder = false,\n notValid = false,\n maxOptionHeight,\n optionPositionRight,\n}: MultiSelectBoxProps) => {\n const multiselectboxId = useId();\n const [selectedItems, setSelectedItems] = useState<MultiSelectData[]>(defaultSelectedItems || []);\n const [selectedItemsCount, setSelectedItemsCount] = useState(defaultSelectedItems?.length || 0);\n const [isOpen, setIsOpen] = useState(false);\n const [activeIndex, setActiveIndex] = useState(-1);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const optionListRef = useRef<HTMLUListElement>(null);\n\n const [positionElement, setPositionElement] = useState<HTMLElement | null>(null);\n const [referenceElement, setReferenceElement] = useState<HTMLButtonElement | null>(null);\n const { style: positionStyle, updatePosition } = usePositionedFloaters(positionElement, referenceElement, {\n mouseEvent: 'click',\n position: 'bottomLeft',\n offset: 4,\n maxFixedHeight: maxOptionHeight,\n horizontalPosition: optionPositionRight ? 'right' : 'left',\n mobileBreakpoint: '28rem',\n fullWidth,\n });\n\n const onMouseEventOutside = useCallback(\n ({ target }: Event | MouseEvent) => {\n if (!target || !wrapperRef.current) return;\n\n if (!wrapperRef.current.contains(target as Node)) {\n setIsOpen(false);\n }\n },\n [setIsOpen]\n );\n\n const onTriggerKeyDown = useCallback(\n (event: KeyboardEvent<HTMLButtonElement>) => {\n switch (event.key) {\n case 'Enter':\n event.preventDefault();\n setIsOpen(true);\n break;\n case 'Escape':\n if (isOpen) {\n event.stopPropagation();\n setIsOpen(false);\n }\n break;\n default:\n break;\n }\n },\n [isOpen]\n );\n\n const onOptionKeyDown = useCallback(\n (event: KeyboardEvent<HTMLLIElement>) => {\n if (!isOpen) return;\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault();\n setActiveIndex((prev) => {\n let nextIndex = prev;\n do {\n nextIndex = nextIndex < selectData.length - 1 ? nextIndex + 1 : 0;\n } while (selectData[nextIndex]?.disabled);\n return nextIndex;\n });\n break;\n case 'ArrowUp':\n event.preventDefault();\n setActiveIndex((prev) => {\n let nextIndex = prev;\n do {\n nextIndex = nextIndex <= 0 ? selectData.length - 1 : nextIndex - 1;\n } while (selectData[nextIndex]?.disabled);\n return nextIndex;\n });\n break;\n case 'Enter': {\n event.preventDefault();\n const selectedItem = selectData[activeIndex];\n if (!selectedItem || selectedItem.disabled) break;\n const isAlreadySelected = selectedItems.some((item) => item.value === selectedItem.value);\n const updatedSelectedItems = isAlreadySelected\n ? selectedItems.filter((item) => item.value !== selectedItem.value)\n : [...selectedItems, selectedItem];\n\n setSelectedItems(updatedSelectedItems);\n setSelectedItemsCount(updatedSelectedItems.length);\n onChange(updatedSelectedItems);\n break;\n }\n case 'Tab':\n event.preventDefault();\n setIsOpen(false);\n break;\n case 'Escape':\n event.stopPropagation();\n setIsOpen(false);\n break;\n default:\n break;\n }\n },\n [activeIndex, isOpen, selectData, selectedItems, onChange]\n );\n\n const onOptionClick = (event: MouseEvent<HTMLLIElement>, option: MultiSelectData) => {\n if (option.disabled) return;\n\n // Prevent toggle if click originated from the checkbox\n if ((event.target as HTMLElement).tagName === 'INPUT') return;\n\n const isAlreadySelected = selectedItems.some((item) => item.value === option.value);\n const updatedSelectedItems = isAlreadySelected\n ? selectedItems.filter((item) => item.value !== option.value)\n : [...selectedItems, option];\n\n setSelectedItems(updatedSelectedItems);\n setSelectedItemsCount(updatedSelectedItems.length);\n onChange(updatedSelectedItems);\n updatePosition();\n };\n\n const handleSelect = useCallback(\n (event: ChangeEvent<HTMLInputElement>) => {\n const { checked, value } = event.target;\n let updatedSelectedItems = [...selectedItems];\n\n if (checked) {\n const selectedItem = selectData.find((item) => item.value === value);\n if (selectedItem) {\n updatedSelectedItems.push(selectedItem);\n }\n } else {\n updatedSelectedItems = updatedSelectedItems.filter((item) => item.value !== value);\n }\n\n setSelectedItems(updatedSelectedItems);\n setSelectedItemsCount(updatedSelectedItems.length);\n onChange(updatedSelectedItems);\n updatePosition();\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [selectData, selectedItems, onChange]\n );\n\n useEffect(() => {\n if (isOpen) {\n setActiveIndex(0);\n }\n }, [isOpen]);\n\n useEffect(() => {\n const activeOption = optionListRef.current?.children[activeIndex] as HTMLElement;\n activeOption?.focus();\n }, [activeIndex]);\n\n useEffect(() => {\n if (!isOpen) return;\n\n document.addEventListener('click', onMouseEventOutside, true);\n document.addEventListener('scroll', onMouseEventOutside, true);\n\n return () => {\n document.removeEventListener('click', onMouseEventOutside, true);\n document.removeEventListener('scroll', onMouseEventOutside, true);\n };\n }, [onMouseEventOutside, isOpen]);\n\n return (\n <div className={styles['multi-select-box-wrapper']} ref={wrapperRef}>\n <button\n className={clsx(styles['multi-select-box-trigger'], {\n [styles['multi-select-box-trigger--darkBorder']]: darkBorder,\n [styles['multi-select-box-trigger--not-valid']]: notValid,\n })}\n type=\"button\"\n onClick={() => {\n setIsOpen(!isOpen);\n }}\n onKeyDown={onTriggerKeyDown}\n aria-expanded={isOpen}\n aria-haspopup=\"listbox\"\n aria-label={`${selectedItemsCount} ${labelSuffix}`}\n disabled={disabled}\n {...(isOpen && { 'aria-controls': multiselectboxId })}\n ref={setReferenceElement}\n >\n <span className={styles['multi-select-box-trigger-label']}>\n {selectedItemsCount} {labelSuffix}\n </span>\n <Icon\n className={clsx(styles['multi-select-box-trigger-icon'], {\n [styles['multi-select-box-trigger-icon--open']]: isOpen,\n })}\n name=\"CheveronDown\"\n size={16}\n />\n </button>\n\n <div\n id={multiselectboxId}\n className={clsx(styles['multi-select-box-listbox--wrapper'])}\n style={{ ...positionStyle.style, visibility: isOpen ? 'visible' : 'hidden' }}\n role=\"listbox\"\n ref={setPositionElement}\n >\n <ul className={styles['multi-select-box-listbox']} ref={optionListRef}>\n {selectData.map(({ label, value, disabled }, index) => (\n <li\n className={clsx(styles['multi-select-box-listbox-option'], {\n [styles['multi-select-box-listbox-option--active']]: index === activeIndex,\n [styles['multi-select-box-listbox-option--disabled']]: disabled,\n })}\n key={value}\n role=\"option\"\n onKeyDown={onOptionKeyDown}\n onClick={(event) => onOptionClick(event, { label, value, disabled })}\n onMouseOver={() => setActiveIndex(index)}\n onFocus={() => setActiveIndex(index)}\n tabIndex={0}\n aria-selected={selectedItems.some((item) => item.value === value)}\n >\n <label htmlFor={label} className={styles['multi-select-box-listbox-option-content']} tabIndex={-1}>\n <Checkbox\n id={`${label}-${multiselectboxId}`}\n onChange={handleSelect}\n value={value}\n tabIndex={-1}\n disabled={disabled}\n checked={selectedItems.some((item) => item.value === value)}\n />\n <span>{label}</span>\n </label>\n </li>\n ))}\n </ul>\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelectItem-BF5xRjz5.js","names":[],"sources":["../src/components/MultiSelect/MultiSelect.module.css","../src/components/MultiSelect/components/MultiSelectItem.tsx"],"sourcesContent":[".multi-select {\n border: 1px solid var(--color-uva-black);\n border-radius: var(--border-radius-default);\n padding: 0.75rem;\n}\n\n.multi-select--no-border {\n border: none;\n padding: 0;\n}\n\n.multi-select__header {\n display: flex;\n justify-content: space-between;\n margin-bottom: 0.5rem;\n}\n\n.multi-select__list {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.multi-select__list--scrollable {\n max-height: 8.75rem;\n overflow: auto;\n}\n\n.multi-select__item {\n align-items: start;\n display: grid;\n grid-template-columns: auto 1fr;\n user-select: none;\n}\n\n.multi-select__item input[type=\"checkbox\"] {\n margin-right: 0.75rem;\n margin-top: 0.25rem;\n}\n\n.multi-select__item input[type=\"checkbox\"]:disabled + label {\n color: var(--color-grey-500);\n}\n","import { useId } from 'react';\n\nimport type { ChangeEvent } from 'react';\n\nimport styles from 'components/MultiSelect/MultiSelect.module.css';\nimport { Checkbox } from 'components/Checkbox';\nimport { Label } from 'components/Label';\n\nexport interface MultiSelectItemProps {\n label: string;\n value: string | number;\n checked: boolean;\n disabled?: boolean;\n onChange(event: ChangeEvent<HTMLInputElement>): void;\n}\n\nexport function MultiSelectItem({ label, value, checked, disabled = false, onChange }: MultiSelectItemProps) {\n const id = useId();\n\n return (\n <li className={styles['multi-select__item']}>\n <Checkbox id={id} value={value} checked={checked} onChange={onChange} disabled={disabled} />\n <Label htmlFor={id} noFontWeight={!checked}>\n {label}\n </Label>\n </li>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;ACgBA,SAAgB,EAAgB,EAAE,UAAO,UAAO,YAAS,cAAW,IAAO,eAAkC;CAC3G,IAAM,IAAK,GAAO;AAElB,QACE,kBAAC,MAAD;EAAI,WAAW,EAAO;YAAtB,CACE,kBAAC,GAAD;GAAc;GAAW;GAAgB;GAAmB;GAAoB;GAAY,CAAA,EAC5F,kBAAC,GAAD;GAAO,SAAS;GAAI,cAAc,CAAC;aAChC;GACK,CAAA,CACL"}
1
+ {"version":3,"file":"MultiSelectItem-BF5xRjz5.js","names":[],"sources":["../src/components/MultiSelect/MultiSelect.module.css","../src/components/MultiSelect/components/MultiSelectItem.tsx"],"sourcesContent":[".multi-select {\n border: 1px solid var(--color-uva-black);\n border-radius: var(--border-radius-default);\n padding: 0.75rem;\n}\n\n.multi-select--no-border {\n border: none;\n padding: 0;\n}\n\n.multi-select__header {\n display: flex;\n justify-content: space-between;\n margin-bottom: 0.5rem;\n}\n\n.multi-select__list {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.multi-select__list--scrollable {\n max-height: 8.75rem;\n overflow: auto;\n}\n\n.multi-select__item {\n align-items: start;\n display: grid;\n grid-template-columns: auto 1fr;\n user-select: none;\n}\n\n.multi-select__item input[type=\"checkbox\"] {\n margin-right: 0.75rem;\n margin-top: 0.25rem;\n}\n\n.multi-select__item input[type=\"checkbox\"]:disabled + label {\n color: var(--color-grey-500);\n}\n","import { useId } from 'react';\n\nimport type { ChangeEvent } from 'react';\n\nimport styles from 'components/MultiSelect/MultiSelect.module.css';\nimport { Checkbox } from 'components/Checkbox';\nimport { Label } from 'components/Label';\n\nexport interface MultiSelectItemProps {\n label: string;\n value: string | number;\n checked: boolean;\n disabled?: boolean;\n onChange(event: ChangeEvent<HTMLInputElement>): void;\n}\n\nexport function MultiSelectItem({ label, value, checked, disabled = false, onChange }: MultiSelectItemProps) {\n const id = useId();\n\n return (\n <li className={styles['multi-select__item']}>\n <Checkbox id={id} value={value} checked={checked} onChange={onChange} disabled={disabled} />\n <Label htmlFor={id} noFontWeight={!checked}>\n {label}\n </Label>\n </li>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;ACgBA,SAAgB,EAAgB,EAAE,UAAO,UAAO,YAAS,cAAW,IAAO,eAAkC;CAC3G,IAAM,IAAK,GAAO;CAElB,OACE,kBAAC,MAAD;EAAI,WAAW,EAAO;YAAtB,CACE,kBAAC,GAAD;GAAc;GAAW;GAAgB;GAAmB;GAAoB;GAAY,CAAA,EAC5F,kBAAC,GAAD;GAAO,SAAS;GAAI,cAAc,CAAC;aAChC;GACK,CAAA,CACL"}
@@ -1 +1 @@
1
- {"version":3,"file":"Notification-CIhsHuF0.js","names":[],"sources":["../src/components/Notification/Notification.module.css","../src/components/Notification/Notification.tsx"],"sourcesContent":[".notification {\n display: flex;\n justify-content: space-between;\n width: 100%;\n}\n\n.notification--default {\n padding: 1rem;\n}\n.notification--bar {\n border: none;\n padding: 0.5rem 1rem;\n}\n\n.notification--neutral {\n background-color: var(--color-grey-300);\n border-left: 0.25rem solid var(--color-grey-600);\n}\n.notification--information {\n background-color: var(--color-navy-200);\n border-left: 0.25rem solid var(--color-navy-600);\n}\n.notification--success {\n background-color: var(--color-forest-200);\n border-left: 0.25rem solid var(--color-forest-600);\n}\n.notification--warning {\n background-color: var(--color-orange-200);\n border-left: 0.25rem solid var(--color-orange-600);\n}\n.notification--danger {\n background-color: var(--color-red-200);\n border-left: 0.25rem solid var(--color-red-600);\n}\n\n.notification--bar.notification--neutral {\n background-color: var(--color-grey-600);\n color: var(--color-uva-white);\n}\n.notification--bar.notification--information {\n background-color: var(--color-navy-600);\n color: var(--color-uva-white);\n}\n.notification--bar.notification--success {\n background-color: var(--color-forest-600);\n}\n.notification--bar.notification--warning {\n background-color: var(--color-orange-600);\n}\n.notification--bar.notification--danger {\n background-color: var(--color-red-600);\n color: var(--color-uva-white);\n}\n\n.notification-content {\n display: flex;\n gap: 1rem;\n}\n.notification-content--text {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.notification-title {\n font-weight: var(--semibold);\n margin: 0;\n}\n.notification-subtitle {\n margin: 0;\n}\n\n.notification-close-button {\n align-items: center;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n color: var(--color-uva-black);\n display: inline-flex;\n height: 1.5rem;\n justify-content: center;\n position: relative;\n transition: var(--transition-colors);\n width: 1.5rem;\n}\n\n.notification-close-button:focus-visible {\n outline: 0.125rem dotted var(--color-navy-600);\n outline-offset: 0.125rem;\n}\n\n.notification-close-button:hover {\n cursor: pointer;\n outline: 0;\n}\n\n/* make the clickable area of the overlay close button 42x42px simmilar to a regular button */\n.notification-close-button::after {\n bottom: -0.625rem;\n content: \"\";\n left: -0.625rem;\n position: absolute;\n right: -0.625rem;\n top: -0.625rem;\n}\n\n.notification-close-button--bar--neutral,\n.notification-close-button--bar--information,\n.notification-close-button--bar--danger {\n color: var(--color-uva-white);\n}\n\n.notification-close-button--neutral:hover {\n background-color: var(--color-grey-600);\n color: var(--color-uva-white);\n}\n.notification-close-button--information:hover {\n background-color: var(--color-navy-600);\n color: var(--color-uva-white);\n}\n.notification-close-button--success:hover {\n background-color: var(--color-forest-600);\n}\n.notification-close-button--warning:hover {\n background-color: var(--color-orange-600);\n}\n.notification-close-button--danger:hover {\n background-color: var(--color-red-600);\n color: var(--color-uva-white);\n}\n\n.notification-close-button--bar--neutral:hover {\n background-color: var(--color-grey-300);\n color: var(--color-uva-black);\n}\n.notification-close-button--bar--information:hover {\n background-color: var(--color-navy-300);\n color: var(--color-uva-black);\n}\n.notification-close-button--bar--success:hover {\n background-color: var(--color-forest-300);\n}\n.notification-close-button--bar--warning:hover {\n background-color: var(--color-orange-300);\n}\n.notification-close-button--bar--danger:hover {\n background-color: var(--color-red-300);\n color: var(--color-uva-black);\n}\n","import { clsx } from 'clsx';\n\nimport type { ReactNode } from 'react';\n\nimport styles from './Notification.module.css';\n\nimport { Icon } from 'components/Icon';\n\nexport type NotificationVariant = 'default' | 'bar';\nexport type NotificationLevel = 'neutral' | 'information' | 'success' | 'warning' | 'danger';\n\nexport interface NotificationProps {\n title?: string;\n subtitle?: string;\n action?: ReactNode;\n variant?: NotificationVariant;\n level: NotificationLevel;\n onClose?: () => void;\n}\n\nexport const Notification = ({ title, subtitle, action, variant = 'default', level, onClose }: NotificationProps) => {\n const isBar = variant === 'bar';\n\n function setIconName(toastType: NotificationLevel) {\n if (toastType === 'neutral') return 'CalendarEdit';\n if (toastType === 'information') return 'SquareInfo';\n if (toastType === 'success') return 'CheckCircle';\n return 'ExclamationTriangleMini';\n }\n\n return (\n <div className={clsx(styles['notification'], styles[`notification--${variant}`], styles[`notification--${level}`])}>\n <div className={styles['notification-content']}>\n <Icon name={setIconName(level)} />\n <div className={styles['notification-content--text']}>\n {title && <p className={styles['notification-title']}>{title}</p>}\n {subtitle && <p className={styles['notification-subtitle']}>{subtitle}</p>}\n {action && <div className={styles['notification-action']}>{action}</div>}\n </div>\n </div>\n {onClose && (\n <button\n type=\"button\"\n aria-label=\"close\"\n className={clsx(styles['notification-close-button'], styles[`notification-close-button--${level}`], {\n [styles[`notification-close-button--bar--${level}`]]: isBar,\n })}\n >\n <Icon name=\"Cross\" size={24} />\n </button>\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;GCoBa,KAAgB,EAAE,UAAO,aAAU,WAAQ,aAAU,WAAW,UAAO,iBAAiC;CACnH,IAAM,IAAQ,MAAY;CAE1B,SAAS,EAAY,GAA8B;AAIjD,SAHI,MAAc,YAAkB,iBAChC,MAAc,gBAAsB,eACpC,MAAc,YAAkB,gBAC7B;;AAGT,QACE,kBAAC,OAAD;EAAK,WAAW,EAAK,EAAO,cAAiB,EAAO,iBAAiB,MAAY,EAAO,iBAAiB,KAAS;YAAlH,CACE,kBAAC,OAAD;GAAK,WAAW,EAAO;aAAvB,CACE,kBAAC,GAAD,EAAM,MAAM,EAAY,EAAM,EAAI,CAAA,EAClC,kBAAC,OAAD;IAAK,WAAW,EAAO;cAAvB;KACG,KAAS,kBAAC,KAAD;MAAG,WAAW,EAAO;gBAAwB;MAAU,CAAA;KAChE,KAAY,kBAAC,KAAD;MAAG,WAAW,EAAO;gBAA2B;MAAa,CAAA;KACzE,KAAU,kBAAC,OAAD;MAAK,WAAW,EAAO;gBAAyB;MAAa,CAAA;KACpE;MACF;MACL,KACC,kBAAC,UAAD;GACE,MAAK;GACL,cAAW;GACX,WAAW,EAAK,EAAO,8BAA8B,EAAO,8BAA8B,MAAU,GACjG,EAAO,mCAAmC,OAAW,GACvD,CAAC;aAEF,kBAAC,GAAD;IAAM,MAAK;IAAQ,MAAM;IAAM,CAAA;GACxB,CAAA,CAEP"}
1
+ {"version":3,"file":"Notification-CIhsHuF0.js","names":[],"sources":["../src/components/Notification/Notification.module.css","../src/components/Notification/Notification.tsx"],"sourcesContent":[".notification {\n display: flex;\n justify-content: space-between;\n width: 100%;\n}\n\n.notification--default {\n padding: 1rem;\n}\n.notification--bar {\n border: none;\n padding: 0.5rem 1rem;\n}\n\n.notification--neutral {\n background-color: var(--color-grey-300);\n border-left: 0.25rem solid var(--color-grey-600);\n}\n.notification--information {\n background-color: var(--color-navy-200);\n border-left: 0.25rem solid var(--color-navy-600);\n}\n.notification--success {\n background-color: var(--color-forest-200);\n border-left: 0.25rem solid var(--color-forest-600);\n}\n.notification--warning {\n background-color: var(--color-orange-200);\n border-left: 0.25rem solid var(--color-orange-600);\n}\n.notification--danger {\n background-color: var(--color-red-200);\n border-left: 0.25rem solid var(--color-red-600);\n}\n\n.notification--bar.notification--neutral {\n background-color: var(--color-grey-600);\n color: var(--color-uva-white);\n}\n.notification--bar.notification--information {\n background-color: var(--color-navy-600);\n color: var(--color-uva-white);\n}\n.notification--bar.notification--success {\n background-color: var(--color-forest-600);\n}\n.notification--bar.notification--warning {\n background-color: var(--color-orange-600);\n}\n.notification--bar.notification--danger {\n background-color: var(--color-red-600);\n color: var(--color-uva-white);\n}\n\n.notification-content {\n display: flex;\n gap: 1rem;\n}\n.notification-content--text {\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n}\n\n.notification-title {\n font-weight: var(--semibold);\n margin: 0;\n}\n.notification-subtitle {\n margin: 0;\n}\n\n.notification-close-button {\n align-items: center;\n background-color: transparent;\n border: 1px solid transparent;\n border-radius: 0.25rem;\n color: var(--color-uva-black);\n display: inline-flex;\n height: 1.5rem;\n justify-content: center;\n position: relative;\n transition: var(--transition-colors);\n width: 1.5rem;\n}\n\n.notification-close-button:focus-visible {\n outline: 0.125rem dotted var(--color-navy-600);\n outline-offset: 0.125rem;\n}\n\n.notification-close-button:hover {\n cursor: pointer;\n outline: 0;\n}\n\n/* make the clickable area of the overlay close button 42x42px simmilar to a regular button */\n.notification-close-button::after {\n bottom: -0.625rem;\n content: \"\";\n left: -0.625rem;\n position: absolute;\n right: -0.625rem;\n top: -0.625rem;\n}\n\n.notification-close-button--bar--neutral,\n.notification-close-button--bar--information,\n.notification-close-button--bar--danger {\n color: var(--color-uva-white);\n}\n\n.notification-close-button--neutral:hover {\n background-color: var(--color-grey-600);\n color: var(--color-uva-white);\n}\n.notification-close-button--information:hover {\n background-color: var(--color-navy-600);\n color: var(--color-uva-white);\n}\n.notification-close-button--success:hover {\n background-color: var(--color-forest-600);\n}\n.notification-close-button--warning:hover {\n background-color: var(--color-orange-600);\n}\n.notification-close-button--danger:hover {\n background-color: var(--color-red-600);\n color: var(--color-uva-white);\n}\n\n.notification-close-button--bar--neutral:hover {\n background-color: var(--color-grey-300);\n color: var(--color-uva-black);\n}\n.notification-close-button--bar--information:hover {\n background-color: var(--color-navy-300);\n color: var(--color-uva-black);\n}\n.notification-close-button--bar--success:hover {\n background-color: var(--color-forest-300);\n}\n.notification-close-button--bar--warning:hover {\n background-color: var(--color-orange-300);\n}\n.notification-close-button--bar--danger:hover {\n background-color: var(--color-red-300);\n color: var(--color-uva-black);\n}\n","import { clsx } from 'clsx';\n\nimport type { ReactNode } from 'react';\n\nimport styles from './Notification.module.css';\n\nimport { Icon } from 'components/Icon';\n\nexport type NotificationVariant = 'default' | 'bar';\nexport type NotificationLevel = 'neutral' | 'information' | 'success' | 'warning' | 'danger';\n\nexport interface NotificationProps {\n title?: string;\n subtitle?: string;\n action?: ReactNode;\n variant?: NotificationVariant;\n level: NotificationLevel;\n onClose?: () => void;\n}\n\nexport const Notification = ({ title, subtitle, action, variant = 'default', level, onClose }: NotificationProps) => {\n const isBar = variant === 'bar';\n\n function setIconName(toastType: NotificationLevel) {\n if (toastType === 'neutral') return 'CalendarEdit';\n if (toastType === 'information') return 'SquareInfo';\n if (toastType === 'success') return 'CheckCircle';\n return 'ExclamationTriangleMini';\n }\n\n return (\n <div className={clsx(styles['notification'], styles[`notification--${variant}`], styles[`notification--${level}`])}>\n <div className={styles['notification-content']}>\n <Icon name={setIconName(level)} />\n <div className={styles['notification-content--text']}>\n {title && <p className={styles['notification-title']}>{title}</p>}\n {subtitle && <p className={styles['notification-subtitle']}>{subtitle}</p>}\n {action && <div className={styles['notification-action']}>{action}</div>}\n </div>\n </div>\n {onClose && (\n <button\n type=\"button\"\n aria-label=\"close\"\n className={clsx(styles['notification-close-button'], styles[`notification-close-button--${level}`], {\n [styles[`notification-close-button--bar--${level}`]]: isBar,\n })}\n >\n <Icon name=\"Cross\" size={24} />\n </button>\n )}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;GCoBa,KAAgB,EAAE,UAAO,aAAU,WAAQ,aAAU,WAAW,UAAO,iBAAiC;CACnH,IAAM,IAAQ,MAAY;CAE1B,SAAS,EAAY,GAA8B;EAIjD,OAHI,MAAc,YAAkB,iBAChC,MAAc,gBAAsB,eACpC,MAAc,YAAkB,gBAC7B;;CAGT,OACE,kBAAC,OAAD;EAAK,WAAW,EAAK,EAAO,cAAiB,EAAO,iBAAiB,MAAY,EAAO,iBAAiB,KAAS;YAAlH,CACE,kBAAC,OAAD;GAAK,WAAW,EAAO;aAAvB,CACE,kBAAC,GAAD,EAAM,MAAM,EAAY,EAAM,EAAI,CAAA,EAClC,kBAAC,OAAD;IAAK,WAAW,EAAO;cAAvB;KACG,KAAS,kBAAC,KAAD;MAAG,WAAW,EAAO;gBAAwB;MAAU,CAAA;KAChE,KAAY,kBAAC,KAAD;MAAG,WAAW,EAAO;gBAA2B;MAAa,CAAA;KACzE,KAAU,kBAAC,OAAD;MAAK,WAAW,EAAO;gBAAyB;MAAa,CAAA;KACpE;MACF;MACL,KACC,kBAAC,UAAD;GACE,MAAK;GACL,cAAW;GACX,WAAW,EAAK,EAAO,8BAA8B,EAAO,8BAA8B,MAAU,GACjG,EAAO,mCAAmC,OAAW,GACvD,CAAC;aAEF,kBAAC,GAAD;IAAM,MAAK;IAAQ,MAAM;IAAM,CAAA;GACxB,CAAA,CAEP"}
@@ -1 +1 @@
1
- {"version":3,"file":"OverlayStepBar-CjaoYdsh.js","names":[],"sources":["../src/components/OverlayStepBar/OverlayStepBar.module.css","../src/components/OverlayStepBar/OverlayStepBar.tsx"],"sourcesContent":[".overlay-step-bar__container {\n align-items: center;\n background-color: var(--color-grey-200);\n display: flex;\n height: 2.5rem;\n justify-content: center;\n overflow-y: hidden;\n}\n\n.overlay-step-bar__step-wrapper {\n background-color: var(--color-grey-200);\n height: 100%;\n position: relative;\n}\n\n.overlay-step-bar__step-wrapper:not(:last-child)::after {\n border-bottom: 1.5rem solid transparent;\n border-left: 1rem solid var(--color-grey-200);\n border-top: 1.5rem solid transparent;\n content: \"\";\n position: absolute;\n right: -0.25rem;\n top: -0.25rem;\n z-index: 10;\n}\n\n.overlay-step-bar__step-wrapper:not(:last-child)::before {\n border-bottom: 1.5rem solid transparent;\n border-left: 1rem solid var(--color-uva-white);\n border-top: 1.5rem solid transparent;\n content: \"\";\n position: absolute;\n right: calc(-0.25rem - 0.25rem);\n top: -0.25rem;\n z-index: 5;\n}\n\n.overlay-step-bar__step {\n align-items: center;\n appearance: none;\n background-color: transparent;\n border: none;\n color: var(--color-grey-700);\n cursor: pointer;\n display: flex;\n font-family: inherit;\n font-size: var(--font-size-default);\n height: 100%;\n margin-left: 0.5rem;\n padding: 0 2rem 0 1.5rem;\n position: relative;\n width: calc(100% - 0.75rem);\n}\n\n.overlay-step-bar__step--label {\n display: none;\n text-decoration: none;\n white-space: nowrap;\n}\n\n.overlay-step-bar__step--label-show {\n display: block;\n}\n\n.overlay-step-bar__step--index {\n margin-right: 0.5rem;\n}\n\n.overlay-step-bar__step--label:hover {\n text-decoration: underline;\n}\n\n.overlay-step-bar__step--active .overlay-step-bar__step--label {\n display: block;\n}\n\n.overlay-step-bar__step:hover .overlay-step-bar__step--index,\n.overlay-step-bar__step:hover .overlay-step-bar__step--label {\n text-decoration: underline;\n}\n\n@media (min-width: 70rem) {\n .overlay-step-bar__step--label {\n display: block;\n }\n\n .overlay-step-bar__step:hover .overlay-step-bar__step--index {\n text-decoration: none;\n }\n}\n\n.overlay-step-bar__step:focus-visible {\n outline: 0.125rem dotted var(--color-navy-600);\n outline-offset: -0.25rem;\n z-index: 15;\n}\n\n.overlay-step-bar__step--active {\n color: var(--color-uva-black);\n font-weight: var(--semibold);\n}\n\n.overlay-step-bar__step--active:hover .overlay-step-bar__step--index,\n.overlay-step-bar__step--active:hover .overlay-step-bar__step--label {\n cursor: default;\n text-decoration: none;\n}\n","import { clsx } from 'clsx';\n\nimport styles from './OverlayStepBar.module.css';\n\nexport interface OverlayStepBarProps {\n /** Array of strings. */\n stepLabels: string[];\n /** activeStep number starting with 1. */\n activeStep: number;\n /** Array of prefix numbers to not show in the steplabels */\n disabledCountPrefix?: number[];\n /** navigate to step. */\n onStepClick?: (step: number) => void;\n}\n\nexport const OverlayStepBar = ({\n stepLabels,\n activeStep = 0,\n disabledCountPrefix = [],\n onStepClick,\n}: OverlayStepBarProps) => {\n if (activeStep > stepLabels.length) {\n console.error('activeStep is greater than the number of steps');\n }\n\n const getStepDisplayNumber = (stepIndex: number): string => {\n const stepNumber = stepIndex + 1;\n\n if (disabledCountPrefix.includes(stepNumber)) {\n return '';\n }\n\n const enabledStepsBefore = Array.from({ length: stepIndex }, (_, count) => count + 1).filter(\n (step) => !disabledCountPrefix.includes(step)\n ).length;\n\n return String(enabledStepsBefore + 1);\n };\n\n return (\n <div className={styles['overlay-step-bar__container']}>\n {stepLabels.length &&\n stepLabels.map((label, index) => (\n <span key={`${index}_${label}`} className={styles[`overlay-step-bar__step-wrapper`]}>\n <button\n className={clsx(styles[`overlay-step-bar__step`], [\n index === activeStep - 1 && styles[`overlay-step-bar__step--active`],\n ])}\n {...(onStepClick && { onClick: () => onStepClick(index + 1) })}\n type=\"button\"\n aria-label={`Step ${index + 1}`}\n aria-current={index === activeStep - 1 ? 'step' : undefined}\n disabled={index === activeStep - 1}\n >\n <span className={styles[`overlay-step-bar__step--index`]}>{getStepDisplayNumber(index)}</span>\n <span\n className={clsx(\n styles[`overlay-step-bar__step--label`],\n disabledCountPrefix.includes(index + 1) && styles[`overlay-step-bar__step--label-show`]\n )}\n >\n {label}\n </span>\n </button>\n </span>\n ))}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;GCea,KAAkB,EAC7B,eACA,gBAAa,GACb,yBAAsB,EAAE,EACxB,qBACyB;AACzB,CAAI,IAAa,EAAW,UAC1B,QAAQ,MAAM,iDAAiD;CAGjE,IAAM,KAAwB,MAA8B;EAC1D,IAAM,IAAa,IAAY;AAE/B,MAAI,EAAoB,SAAS,EAAW,CAC1C,QAAO;EAGT,IAAM,IAAqB,MAAM,KAAK,EAAE,QAAQ,GAAW,GAAG,GAAG,MAAU,IAAQ,EAAE,CAAC,QACnF,MAAS,CAAC,EAAoB,SAAS,EAAK,CAC9C,CAAC;AAEF,SAAO,OAAO,IAAqB,EAAE;;AAGvC,QACE,kBAAC,OAAD;EAAK,WAAW,EAAO;YACpB,EAAW,UACV,EAAW,KAAK,GAAO,MACrB,kBAAC,QAAD;GAAgC,WAAW,EAAO;aAChD,kBAAC,UAAD;IACE,WAAW,EAAK,EAAO,2BAA2B,CAChD,MAAU,IAAa,KAAK,EAAO,kCACpC,CAAC;IACF,GAAK,KAAe,EAAE,eAAe,EAAY,IAAQ,EAAE,EAAE;IAC7D,MAAK;IACL,cAAY,QAAQ,IAAQ;IAC5B,gBAAc,MAAU,IAAa,IAAI,SAAS,KAAA;IAClD,UAAU,MAAU,IAAa;cARnC,CAUE,kBAAC,QAAD;KAAM,WAAW,EAAO;eAAmC,EAAqB,EAAM;KAAQ,CAAA,EAC9F,kBAAC,QAAD;KACE,WAAW,EACT,EAAO,kCACP,EAAoB,SAAS,IAAQ,EAAE,IAAI,EAAO,sCACnD;eAEA;KACI,CAAA,CACA;;GACJ,EArBI,GAAG,EAAM,GAAG,IAqBhB,CACP;EACA,CAAA"}
1
+ {"version":3,"file":"OverlayStepBar-CjaoYdsh.js","names":[],"sources":["../src/components/OverlayStepBar/OverlayStepBar.module.css","../src/components/OverlayStepBar/OverlayStepBar.tsx"],"sourcesContent":[".overlay-step-bar__container {\n align-items: center;\n background-color: var(--color-grey-200);\n display: flex;\n height: 2.5rem;\n justify-content: center;\n overflow-y: hidden;\n}\n\n.overlay-step-bar__step-wrapper {\n background-color: var(--color-grey-200);\n height: 100%;\n position: relative;\n}\n\n.overlay-step-bar__step-wrapper:not(:last-child)::after {\n border-bottom: 1.5rem solid transparent;\n border-left: 1rem solid var(--color-grey-200);\n border-top: 1.5rem solid transparent;\n content: \"\";\n position: absolute;\n right: -0.25rem;\n top: -0.25rem;\n z-index: 10;\n}\n\n.overlay-step-bar__step-wrapper:not(:last-child)::before {\n border-bottom: 1.5rem solid transparent;\n border-left: 1rem solid var(--color-uva-white);\n border-top: 1.5rem solid transparent;\n content: \"\";\n position: absolute;\n right: calc(-0.25rem - 0.25rem);\n top: -0.25rem;\n z-index: 5;\n}\n\n.overlay-step-bar__step {\n align-items: center;\n appearance: none;\n background-color: transparent;\n border: none;\n color: var(--color-grey-700);\n cursor: pointer;\n display: flex;\n font-family: inherit;\n font-size: var(--font-size-default);\n height: 100%;\n margin-left: 0.5rem;\n padding: 0 2rem 0 1.5rem;\n position: relative;\n width: calc(100% - 0.75rem);\n}\n\n.overlay-step-bar__step--label {\n display: none;\n text-decoration: none;\n white-space: nowrap;\n}\n\n.overlay-step-bar__step--label-show {\n display: block;\n}\n\n.overlay-step-bar__step--index {\n margin-right: 0.5rem;\n}\n\n.overlay-step-bar__step--label:hover {\n text-decoration: underline;\n}\n\n.overlay-step-bar__step--active .overlay-step-bar__step--label {\n display: block;\n}\n\n.overlay-step-bar__step:hover .overlay-step-bar__step--index,\n.overlay-step-bar__step:hover .overlay-step-bar__step--label {\n text-decoration: underline;\n}\n\n@media (min-width: 70rem) {\n .overlay-step-bar__step--label {\n display: block;\n }\n\n .overlay-step-bar__step:hover .overlay-step-bar__step--index {\n text-decoration: none;\n }\n}\n\n.overlay-step-bar__step:focus-visible {\n outline: 0.125rem dotted var(--color-navy-600);\n outline-offset: -0.25rem;\n z-index: 15;\n}\n\n.overlay-step-bar__step--active {\n color: var(--color-uva-black);\n font-weight: var(--semibold);\n}\n\n.overlay-step-bar__step--active:hover .overlay-step-bar__step--index,\n.overlay-step-bar__step--active:hover .overlay-step-bar__step--label {\n cursor: default;\n text-decoration: none;\n}\n","import { clsx } from 'clsx';\n\nimport styles from './OverlayStepBar.module.css';\n\nexport interface OverlayStepBarProps {\n /** Array of strings. */\n stepLabels: string[];\n /** activeStep number starting with 1. */\n activeStep: number;\n /** Array of prefix numbers to not show in the steplabels */\n disabledCountPrefix?: number[];\n /** navigate to step. */\n onStepClick?: (step: number) => void;\n}\n\nexport const OverlayStepBar = ({\n stepLabels,\n activeStep = 0,\n disabledCountPrefix = [],\n onStepClick,\n}: OverlayStepBarProps) => {\n if (activeStep > stepLabels.length) {\n console.error('activeStep is greater than the number of steps');\n }\n\n const getStepDisplayNumber = (stepIndex: number): string => {\n const stepNumber = stepIndex + 1;\n\n if (disabledCountPrefix.includes(stepNumber)) {\n return '';\n }\n\n const enabledStepsBefore = Array.from({ length: stepIndex }, (_, count) => count + 1).filter(\n (step) => !disabledCountPrefix.includes(step)\n ).length;\n\n return String(enabledStepsBefore + 1);\n };\n\n return (\n <div className={styles['overlay-step-bar__container']}>\n {stepLabels.length &&\n stepLabels.map((label, index) => (\n <span key={`${index}_${label}`} className={styles[`overlay-step-bar__step-wrapper`]}>\n <button\n className={clsx(styles[`overlay-step-bar__step`], [\n index === activeStep - 1 && styles[`overlay-step-bar__step--active`],\n ])}\n {...(onStepClick && { onClick: () => onStepClick(index + 1) })}\n type=\"button\"\n aria-label={`Step ${index + 1}`}\n aria-current={index === activeStep - 1 ? 'step' : undefined}\n disabled={index === activeStep - 1}\n >\n <span className={styles[`overlay-step-bar__step--index`]}>{getStepDisplayNumber(index)}</span>\n <span\n className={clsx(\n styles[`overlay-step-bar__step--label`],\n disabledCountPrefix.includes(index + 1) && styles[`overlay-step-bar__step--label-show`]\n )}\n >\n {label}\n </span>\n </button>\n </span>\n ))}\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;GCea,KAAkB,EAC7B,eACA,gBAAa,GACb,yBAAsB,EAAE,EACxB,qBACyB;CACzB,AAAI,IAAa,EAAW,UAC1B,QAAQ,MAAM,iDAAiD;CAGjE,IAAM,KAAwB,MAA8B;EAC1D,IAAM,IAAa,IAAY;EAE/B,IAAI,EAAoB,SAAS,EAAW,EAC1C,OAAO;EAGT,IAAM,IAAqB,MAAM,KAAK,EAAE,QAAQ,GAAW,GAAG,GAAG,MAAU,IAAQ,EAAE,CAAC,QACnF,MAAS,CAAC,EAAoB,SAAS,EAAK,CAC9C,CAAC;EAEF,OAAO,OAAO,IAAqB,EAAE;;CAGvC,OACE,kBAAC,OAAD;EAAK,WAAW,EAAO;YACpB,EAAW,UACV,EAAW,KAAK,GAAO,MACrB,kBAAC,QAAD;GAAgC,WAAW,EAAO;aAChD,kBAAC,UAAD;IACE,WAAW,EAAK,EAAO,2BAA2B,CAChD,MAAU,IAAa,KAAK,EAAO,kCACpC,CAAC;IACF,GAAK,KAAe,EAAE,eAAe,EAAY,IAAQ,EAAE,EAAE;IAC7D,MAAK;IACL,cAAY,QAAQ,IAAQ;IAC5B,gBAAc,MAAU,IAAa,IAAI,SAAS,KAAA;IAClD,UAAU,MAAU,IAAa;cARnC,CAUE,kBAAC,QAAD;KAAM,WAAW,EAAO;eAAmC,EAAqB,EAAM;KAAQ,CAAA,EAC9F,kBAAC,QAAD;KACE,WAAW,EACT,EAAO,kCACP,EAAoB,SAAS,IAAQ,EAAE,IAAI,EAAO,sCACnD;eAEA;KACI,CAAA,CACA;;GACJ,EArBI,GAAG,EAAM,GAAG,IAqBhB,CACP;EACA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"PageOverlay-S4xsqJha.js","names":[],"sources":["../src/components/PageOverlay/PageOverlay.module.css","../src/components/PageOverlay/PageOverlay.tsx"],"sourcesContent":[".page-overlay__container {\n bottom: 0;\n left: 0;\n position: fixed;\n right: 0;\n top: 0;\n z-index: 50;\n}\n\n.page-overlay {\n background: var(--color-uva-white);\n display: flex;\n flex-direction: column;\n\n /* dynamic view height needed to adapt for possible auto hiding of mobile address bar */\n height: 100dvh;\n}\n\n.page-overlay--full-screen {\n width: 100vw;\n}\n\n.page-overlay--with-gutters {\n max-width: 87.5rem;\n width: 100%;\n}\n\n.page-overlay__content {\n display: flex;\n flex-direction: column;\n height: 100svh;\n justify-content: space-between;\n overflow: hidden;\n overflow-y: auto;\n padding: 0 1.5rem;\n width: 100%;\n}\n\n.page-overlay__content--grey {\n background-color: var(--color-grey-200);\n}\n\n.page-overlay__content--white {\n background-color: var(--color-uva-white);\n}\n\n.page-overlay__children {\n padding-bottom: 1rem;\n}\n\n.page-overlay__title-wrapper {\n position: relative;\n}\n\n.page-overlay__title {\n font-size: var(--font-size-s);\n line-height: var(--line-height-m);\n margin: 0 1.5rem 0 0;\n padding: 1rem 1.5rem;\n}\n\n.page-overlay__buttons-bar {\n background-color: var(--color-uva-white);\n bottom: 0;\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n justify-content: flex-start;\n margin: 0 calc(-1 * 1.5rem);\n padding: 0.5rem 1rem;\n position: sticky;\n right: 0;\n}\n\n.page-overlay__buttons-bar::before {\n background: linear-gradient(to top, rgba(0 0 0 / 30%), rgba(0 0 0 / 0%));\n bottom: 100%;\n content: \"\";\n height: 10px;\n left: 0;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n right: 0;\n transition: opacity 0.4s ease-out;\n}\n\n.page-overlay__buttons-bar--shadow::before {\n opacity: 1;\n\n /* Show the shadow when content is scrollable and not scrolled to the bottom */\n}\n\n.page-overlay__close {\n height: 1.5rem;\n position: absolute;\n right: 1rem;\n top: calc(50% - 0.125rem);\n transform: translateY(-50%);\n}\n\n@media (min-width: 28rem) and (min-height: 28rem) {\n .page-overlay--with-gutters {\n margin: 0 calc(1.5rem / 2);\n }\n}\n","import { useDialog } from '@react-aria/dialog';\nimport { FocusScope } from '@react-aria/focus';\nimport { OverlayContainer, useModal, useOverlay, usePreventScroll } from '@react-aria/overlays';\nimport classNames, { clsx } from 'clsx';\nimport { useEffect, useRef, useState } from 'react';\n\nimport type { FormHTMLAttributes, KeyboardEvent, PropsWithChildren, ReactNode } from 'react';\n\nimport styles from './PageOverlay.module.css';\n\nimport { OverlayCloseButton } from 'components/OverlayCloseButton';\nimport { Spinner } from 'components/Spinner';\nimport { Backdrop } from 'components/Backdrop';\n\nexport interface PageOverlayProps {\n /** The buttons of the dialog. */\n buttons?: ReactNode;\n /** `true` to show a spinner, if the contents of the dialog is lazy loaded; otherwise, `false`. */\n isLoading?: boolean;\n /** The `aria-valuetext` value of the [Spinner](/story/atoms-spinner--spinner-example) component. Used together with `isLoading`. */\n spinnerAriaValueText?: string;\n /** The `aria-label` value of the [OverlayCloseButton](/story/atoms-overlayclosebutton--overlay-close-button-example) component. */\n closeButtonAriaValueText?: string;\n /** `true` to render the dialog opened; otherwise, `false`. */\n isOpen: boolean;\n /** `true` to disable form validation; otherwise, `false`. */\n noValidate?: boolean;\n /** The callback function that is invoked when the dialog is closed. */\n onClose?(): void;\n /** The callback function that is invoked when the form is submitted. */\n onSubmit?: FormHTMLAttributes<HTMLFormElement>['onSubmit'];\n /** The title of the dialog. */\n title?: string;\n /** The contents of the dialog header. */\n headerContent?: ReactNode;\n /** The variant styling of the dialog. */\n variant?: 'full-screen' | 'with-gutters';\n /** The content background color of the dialog. Default grey-300*/\n contentBackgroundColor?: 'grey' | 'white';\n}\n\n/** Represents a component for a modal dialog. */\nexport function PageOverlay({\n buttons,\n children,\n isLoading,\n spinnerAriaValueText = 'Loading',\n closeButtonAriaValueText = 'Close',\n isOpen,\n noValidate = false,\n onClose,\n onSubmit,\n title,\n headerContent,\n variant = 'full-screen',\n contentBackgroundColor = 'grey',\n}: PropsWithChildren<PageOverlayProps>) {\n const ref = useRef<HTMLDivElement>(null);\n const formRef = useRef<HTMLFormElement>(null);\n const [isScrollable, setIsScrollable] = useState(false);\n const [isScrolledToBottom, setIsScrolledToBottom] = useState(false);\n\n const { dialogProps, titleProps } = useDialog({ role: 'dialog' }, ref);\n const { modalProps } = useModal({ isDisabled: !isOpen });\n const { overlayProps, underlayProps } = useOverlay({ isOpen, onClose }, ref);\n\n usePreventScroll({ isDisabled: !isOpen });\n\n useEffect(() => {\n const formElement = formRef.current;\n\n if (!formElement) return;\n\n function checkScrollable() {\n const scrollHeight = formElement!.scrollHeight;\n const clientHeight = formElement!.clientHeight;\n const scrollTop = formElement!.scrollTop;\n\n setIsScrollable(scrollHeight > clientHeight);\n setIsScrolledToBottom(scrollTop + clientHeight >= scrollHeight);\n }\n\n function handleScrollAndResize() {\n checkScrollable();\n }\n\n formElement.addEventListener('scroll', handleScrollAndResize);\n window.addEventListener('resize', handleScrollAndResize);\n\n const timeoutId = setTimeout(() => {\n checkScrollable();\n }, 0);\n\n return () => {\n formElement.removeEventListener('scroll', handleScrollAndResize);\n\n window.removeEventListener('resize', handleScrollAndResize);\n clearTimeout(timeoutId);\n };\n }, [isOpen, headerContent]);\n\n function onKeyUp(event: KeyboardEvent) {\n event.stopPropagation();\n }\n\n if (!isOpen) return null;\n\n return (\n <OverlayContainer className={styles['page-overlay__container']}>\n <Backdrop {...underlayProps}>\n {isLoading ? (\n <Spinner ariaValueText={spinnerAriaValueText} />\n ) : (\n <>\n {/* eslint-disable-next-line jsx-a11y/no-autofocus */}\n <FocusScope autoFocus contain restoreFocus>\n <div\n {...dialogProps}\n {...modalProps}\n {...overlayProps}\n className={clsx(styles['page-overlay'], {\n [styles[`page-overlay--${variant}`]]: variant,\n })}\n onKeyUp={onKeyUp}\n role=\"presentation\"\n ref={ref}\n >\n {(title || headerContent) && (\n <div className={styles['page-overlay__title-wrapper']}>\n {title && (\n <h1 {...titleProps} className={styles['page-overlay__title']}>\n {title}\n </h1>\n )}\n {headerContent}\n {\n <span className={styles['page-overlay__close']}>\n <OverlayCloseButton aria-label={closeButtonAriaValueText} onClick={onClose} />\n </span>\n }\n </div>\n )}\n <form\n className={classNames(\n styles['page-overlay__content'],\n styles[`page-overlay__content--${contentBackgroundColor}`],\n {\n [styles['page-overlay--content-with-buttons']]: buttons,\n }\n )}\n onSubmit={onSubmit}\n noValidate={noValidate}\n ref={formRef}\n >\n <div className={styles['page-overlay__children']}>{children}</div>\n {buttons && (\n <div\n className={classNames(styles['page-overlay__buttons-bar'], {\n [styles['page-overlay__buttons-bar--shadow']]: isScrollable && !isScrolledToBottom,\n })}\n >\n {buttons}\n </div>\n )}\n </form>\n </div>\n </FocusScope>\n </>\n )}\n </Backdrop>\n </OverlayContainer>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AC0CA,SAAgB,EAAY,EAC1B,YACA,aACA,cACA,0BAAuB,WACvB,8BAA2B,SAC3B,WACA,gBAAa,IACb,YACA,aACA,UACA,kBACA,aAAU,eACV,4BAAyB,UACa;CACtC,IAAM,IAAM,EAAuB,KAAK,EAClC,IAAU,EAAwB,KAAK,EACvC,CAAC,GAAc,KAAmB,EAAS,GAAM,EACjD,CAAC,GAAoB,KAAyB,EAAS,GAAM,EAE7D,EAAE,gBAAa,kBAAe,EAAU,EAAE,MAAM,UAAU,EAAE,EAAI,EAChE,EAAE,kBAAe,EAAS,EAAE,YAAY,CAAC,GAAQ,CAAC,EAClD,EAAE,iBAAc,qBAAkB,EAAW;EAAE;EAAQ;EAAS,EAAE,EAAI;AAI5E,CAFA,EAAiB,EAAE,YAAY,CAAC,GAAQ,CAAC,EAEzC,QAAgB;EACd,IAAM,IAAc,EAAQ;AAE5B,MAAI,CAAC,EAAa;EAElB,SAAS,IAAkB;GACzB,IAAM,IAAe,EAAa,cAC5B,IAAe,EAAa,cAC5B,IAAY,EAAa;AAG/B,GADA,EAAgB,IAAe,EAAa,EAC5C,EAAsB,IAAY,KAAgB,EAAa;;EAGjE,SAAS,IAAwB;AAC/B,MAAiB;;AAInB,EADA,EAAY,iBAAiB,UAAU,EAAsB,EAC7D,OAAO,iBAAiB,UAAU,EAAsB;EAExD,IAAM,IAAY,iBAAiB;AACjC,MAAiB;KAChB,EAAE;AAEL,eAAa;AAIX,GAHA,EAAY,oBAAoB,UAAU,EAAsB,EAEhE,OAAO,oBAAoB,UAAU,EAAsB,EAC3D,aAAa,EAAU;;IAExB,CAAC,GAAQ,EAAc,CAAC;CAE3B,SAAS,EAAQ,GAAsB;AACrC,IAAM,iBAAiB;;AAKzB,QAFK,IAGH,kBAAC,GAAD;EAAkB,WAAW,EAAO;YAClC,kBAAC,GAAD;GAAU,GAAI;aACX,IACC,kBAAC,GAAD,EAAS,eAAe,GAAwB,CAAA,GAEhD,kBAAA,GAAA,EAAA,UAEE,kBAAC,GAAD;IAAY,WAAA;IAAU,SAAA;IAAQ,cAAA;cAC5B,kBAAC,OAAD;KACE,GAAI;KACJ,GAAI;KACJ,GAAI;KACJ,WAAW,EAAK,EAAO,iBAAiB,GACrC,EAAO,iBAAiB,OAAa,GACvC,CAAC;KACO;KACT,MAAK;KACA;eATP,EAWI,KAAS,MACT,kBAAC,OAAD;MAAK,WAAW,EAAO;gBAAvB;OACG,KACC,kBAAC,MAAD;QAAI,GAAI;QAAY,WAAW,EAAO;kBACnC;QACE,CAAA;OAEN;OAEC,kBAAC,QAAD;QAAM,WAAW,EAAO;kBACtB,kBAAC,GAAD;SAAoB,cAAY;SAA0B,SAAS;SAAW,CAAA;QACzE,CAAA;OAEL;SAER,kBAAC,QAAD;MACE,WAAW,EACT,EAAO,0BACP,EAAO,0BAA0B,MACjC,GACG,EAAO,wCAAwC,GACjD,CACF;MACS;MACE;MACZ,KAAK;gBAVP,CAYE,kBAAC,OAAD;OAAK,WAAW,EAAO;OAA4B;OAAe,CAAA,EACjE,KACC,kBAAC,OAAD;OACE,WAAW,EAAW,EAAO,8BAA8B,GACxD,EAAO,uCAAuC,KAAgB,CAAC,GACjE,CAAC;iBAED;OACG,CAAA,CAEH;QACH;;IACK,CAAA,EACZ,CAAA;GAEI,CAAA;EACM,CAAA,GAjED"}
1
+ {"version":3,"file":"PageOverlay-S4xsqJha.js","names":[],"sources":["../src/components/PageOverlay/PageOverlay.module.css","../src/components/PageOverlay/PageOverlay.tsx"],"sourcesContent":[".page-overlay__container {\n bottom: 0;\n left: 0;\n position: fixed;\n right: 0;\n top: 0;\n z-index: 50;\n}\n\n.page-overlay {\n background: var(--color-uva-white);\n display: flex;\n flex-direction: column;\n\n /* dynamic view height needed to adapt for possible auto hiding of mobile address bar */\n height: 100dvh;\n}\n\n.page-overlay--full-screen {\n width: 100vw;\n}\n\n.page-overlay--with-gutters {\n max-width: 87.5rem;\n width: 100%;\n}\n\n.page-overlay__content {\n display: flex;\n flex-direction: column;\n height: 100svh;\n justify-content: space-between;\n overflow: hidden;\n overflow-y: auto;\n padding: 0 1.5rem;\n width: 100%;\n}\n\n.page-overlay__content--grey {\n background-color: var(--color-grey-200);\n}\n\n.page-overlay__content--white {\n background-color: var(--color-uva-white);\n}\n\n.page-overlay__children {\n padding-bottom: 1rem;\n}\n\n.page-overlay__title-wrapper {\n position: relative;\n}\n\n.page-overlay__title {\n font-size: var(--font-size-s);\n line-height: var(--line-height-m);\n margin: 0 1.5rem 0 0;\n padding: 1rem 1.5rem;\n}\n\n.page-overlay__buttons-bar {\n background-color: var(--color-uva-white);\n bottom: 0;\n display: flex;\n flex-direction: column;\n gap: 0.75rem;\n justify-content: flex-start;\n margin: 0 calc(-1 * 1.5rem);\n padding: 0.5rem 1rem;\n position: sticky;\n right: 0;\n}\n\n.page-overlay__buttons-bar::before {\n background: linear-gradient(to top, rgba(0 0 0 / 30%), rgba(0 0 0 / 0%));\n bottom: 100%;\n content: \"\";\n height: 10px;\n left: 0;\n opacity: 0;\n pointer-events: none;\n position: absolute;\n right: 0;\n transition: opacity 0.4s ease-out;\n}\n\n.page-overlay__buttons-bar--shadow::before {\n opacity: 1;\n\n /* Show the shadow when content is scrollable and not scrolled to the bottom */\n}\n\n.page-overlay__close {\n height: 1.5rem;\n position: absolute;\n right: 1rem;\n top: calc(50% - 0.125rem);\n transform: translateY(-50%);\n}\n\n@media (min-width: 28rem) and (min-height: 28rem) {\n .page-overlay--with-gutters {\n margin: 0 calc(1.5rem / 2);\n }\n}\n","import { useDialog } from '@react-aria/dialog';\nimport { FocusScope } from '@react-aria/focus';\nimport { OverlayContainer, useModal, useOverlay, usePreventScroll } from '@react-aria/overlays';\nimport classNames, { clsx } from 'clsx';\nimport { useEffect, useRef, useState } from 'react';\n\nimport type { FormHTMLAttributes, KeyboardEvent, PropsWithChildren, ReactNode } from 'react';\n\nimport styles from './PageOverlay.module.css';\n\nimport { OverlayCloseButton } from 'components/OverlayCloseButton';\nimport { Spinner } from 'components/Spinner';\nimport { Backdrop } from 'components/Backdrop';\n\nexport interface PageOverlayProps {\n /** The buttons of the dialog. */\n buttons?: ReactNode;\n /** `true` to show a spinner, if the contents of the dialog is lazy loaded; otherwise, `false`. */\n isLoading?: boolean;\n /** The `aria-valuetext` value of the [Spinner](/story/atoms-spinner--spinner-example) component. Used together with `isLoading`. */\n spinnerAriaValueText?: string;\n /** The `aria-label` value of the [OverlayCloseButton](/story/atoms-overlayclosebutton--overlay-close-button-example) component. */\n closeButtonAriaValueText?: string;\n /** `true` to render the dialog opened; otherwise, `false`. */\n isOpen: boolean;\n /** `true` to disable form validation; otherwise, `false`. */\n noValidate?: boolean;\n /** The callback function that is invoked when the dialog is closed. */\n onClose?(): void;\n /** The callback function that is invoked when the form is submitted. */\n onSubmit?: FormHTMLAttributes<HTMLFormElement>['onSubmit'];\n /** The title of the dialog. */\n title?: string;\n /** The contents of the dialog header. */\n headerContent?: ReactNode;\n /** The variant styling of the dialog. */\n variant?: 'full-screen' | 'with-gutters';\n /** The content background color of the dialog. Default grey-300*/\n contentBackgroundColor?: 'grey' | 'white';\n}\n\n/** Represents a component for a modal dialog. */\nexport function PageOverlay({\n buttons,\n children,\n isLoading,\n spinnerAriaValueText = 'Loading',\n closeButtonAriaValueText = 'Close',\n isOpen,\n noValidate = false,\n onClose,\n onSubmit,\n title,\n headerContent,\n variant = 'full-screen',\n contentBackgroundColor = 'grey',\n}: PropsWithChildren<PageOverlayProps>) {\n const ref = useRef<HTMLDivElement>(null);\n const formRef = useRef<HTMLFormElement>(null);\n const [isScrollable, setIsScrollable] = useState(false);\n const [isScrolledToBottom, setIsScrolledToBottom] = useState(false);\n\n const { dialogProps, titleProps } = useDialog({ role: 'dialog' }, ref);\n const { modalProps } = useModal({ isDisabled: !isOpen });\n const { overlayProps, underlayProps } = useOverlay({ isOpen, onClose }, ref);\n\n usePreventScroll({ isDisabled: !isOpen });\n\n useEffect(() => {\n const formElement = formRef.current;\n\n if (!formElement) return;\n\n function checkScrollable() {\n const scrollHeight = formElement!.scrollHeight;\n const clientHeight = formElement!.clientHeight;\n const scrollTop = formElement!.scrollTop;\n\n setIsScrollable(scrollHeight > clientHeight);\n setIsScrolledToBottom(scrollTop + clientHeight >= scrollHeight);\n }\n\n function handleScrollAndResize() {\n checkScrollable();\n }\n\n formElement.addEventListener('scroll', handleScrollAndResize);\n window.addEventListener('resize', handleScrollAndResize);\n\n const timeoutId = setTimeout(() => {\n checkScrollable();\n }, 0);\n\n return () => {\n formElement.removeEventListener('scroll', handleScrollAndResize);\n\n window.removeEventListener('resize', handleScrollAndResize);\n clearTimeout(timeoutId);\n };\n }, [isOpen, headerContent]);\n\n function onKeyUp(event: KeyboardEvent) {\n event.stopPropagation();\n }\n\n if (!isOpen) return null;\n\n return (\n <OverlayContainer className={styles['page-overlay__container']}>\n <Backdrop {...underlayProps}>\n {isLoading ? (\n <Spinner ariaValueText={spinnerAriaValueText} />\n ) : (\n <>\n {/* eslint-disable-next-line jsx-a11y/no-autofocus */}\n <FocusScope autoFocus contain restoreFocus>\n <div\n {...dialogProps}\n {...modalProps}\n {...overlayProps}\n className={clsx(styles['page-overlay'], {\n [styles[`page-overlay--${variant}`]]: variant,\n })}\n onKeyUp={onKeyUp}\n role=\"presentation\"\n ref={ref}\n >\n {(title || headerContent) && (\n <div className={styles['page-overlay__title-wrapper']}>\n {title && (\n <h1 {...titleProps} className={styles['page-overlay__title']}>\n {title}\n </h1>\n )}\n {headerContent}\n {\n <span className={styles['page-overlay__close']}>\n <OverlayCloseButton aria-label={closeButtonAriaValueText} onClick={onClose} />\n </span>\n }\n </div>\n )}\n <form\n className={classNames(\n styles['page-overlay__content'],\n styles[`page-overlay__content--${contentBackgroundColor}`],\n {\n [styles['page-overlay--content-with-buttons']]: buttons,\n }\n )}\n onSubmit={onSubmit}\n noValidate={noValidate}\n ref={formRef}\n >\n <div className={styles['page-overlay__children']}>{children}</div>\n {buttons && (\n <div\n className={classNames(styles['page-overlay__buttons-bar'], {\n [styles['page-overlay__buttons-bar--shadow']]: isScrollable && !isScrolledToBottom,\n })}\n >\n {buttons}\n </div>\n )}\n </form>\n </div>\n </FocusScope>\n </>\n )}\n </Backdrop>\n </OverlayContainer>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AC0CA,SAAgB,EAAY,EAC1B,YACA,aACA,cACA,0BAAuB,WACvB,8BAA2B,SAC3B,WACA,gBAAa,IACb,YACA,aACA,UACA,kBACA,aAAU,eACV,4BAAyB,UACa;CACtC,IAAM,IAAM,EAAuB,KAAK,EAClC,IAAU,EAAwB,KAAK,EACvC,CAAC,GAAc,KAAmB,EAAS,GAAM,EACjD,CAAC,GAAoB,KAAyB,EAAS,GAAM,EAE7D,EAAE,gBAAa,kBAAe,EAAU,EAAE,MAAM,UAAU,EAAE,EAAI,EAChE,EAAE,kBAAe,EAAS,EAAE,YAAY,CAAC,GAAQ,CAAC,EAClD,EAAE,iBAAc,qBAAkB,EAAW;EAAE;EAAQ;EAAS,EAAE,EAAI;CAI5E,AAFA,EAAiB,EAAE,YAAY,CAAC,GAAQ,CAAC,EAEzC,QAAgB;EACd,IAAM,IAAc,EAAQ;EAE5B,IAAI,CAAC,GAAa;EAElB,SAAS,IAAkB;GACzB,IAAM,IAAe,EAAa,cAC5B,IAAe,EAAa,cAC5B,IAAY,EAAa;GAG/B,AADA,EAAgB,IAAe,EAAa,EAC5C,EAAsB,IAAY,KAAgB,EAAa;;EAGjE,SAAS,IAAwB;GAC/B,GAAiB;;EAInB,AADA,EAAY,iBAAiB,UAAU,EAAsB,EAC7D,OAAO,iBAAiB,UAAU,EAAsB;EAExD,IAAM,IAAY,iBAAiB;GACjC,GAAiB;KAChB,EAAE;EAEL,aAAa;GAIX,AAHA,EAAY,oBAAoB,UAAU,EAAsB,EAEhE,OAAO,oBAAoB,UAAU,EAAsB,EAC3D,aAAa,EAAU;;IAExB,CAAC,GAAQ,EAAc,CAAC;CAE3B,SAAS,EAAQ,GAAsB;EACrC,EAAM,iBAAiB;;CAKzB,OAFK,IAGH,kBAAC,GAAD;EAAkB,WAAW,EAAO;YAClC,kBAAC,GAAD;GAAU,GAAI;aACX,IACC,kBAAC,GAAD,EAAS,eAAe,GAAwB,CAAA,GAEhD,kBAAA,GAAA,EAAA,UAEE,kBAAC,GAAD;IAAY,WAAA;IAAU,SAAA;IAAQ,cAAA;cAC5B,kBAAC,OAAD;KACE,GAAI;KACJ,GAAI;KACJ,GAAI;KACJ,WAAW,EAAK,EAAO,iBAAiB,GACrC,EAAO,iBAAiB,OAAa,GACvC,CAAC;KACO;KACT,MAAK;KACA;eATP,EAWI,KAAS,MACT,kBAAC,OAAD;MAAK,WAAW,EAAO;gBAAvB;OACG,KACC,kBAAC,MAAD;QAAI,GAAI;QAAY,WAAW,EAAO;kBACnC;QACE,CAAA;OAEN;OAEC,kBAAC,QAAD;QAAM,WAAW,EAAO;kBACtB,kBAAC,GAAD;SAAoB,cAAY;SAA0B,SAAS;SAAW,CAAA;QACzE,CAAA;OAEL;SAER,kBAAC,QAAD;MACE,WAAW,EACT,EAAO,0BACP,EAAO,0BAA0B,MACjC,GACG,EAAO,wCAAwC,GACjD,CACF;MACS;MACE;MACZ,KAAK;gBAVP,CAYE,kBAAC,OAAD;OAAK,WAAW,EAAO;OAA4B;OAAe,CAAA,EACjE,KACC,kBAAC,OAAD;OACE,WAAW,EAAW,EAAO,8BAA8B,GACxD,EAAO,uCAAuC,KAAgB,CAAC,GACjE,CAAC;iBAED;OACG,CAAA,CAEH;QACH;;IACK,CAAA,EACZ,CAAA;GAEI,CAAA;EACM,CAAA,GAjED"}