@uva-glass/component-library 3.57.2 → 3.57.3

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 (246) hide show
  1. package/dist/ActionList-D2GC2qPX.js.map +1 -1
  2. package/dist/AddCatalogueLinkForm-Di0xm7Ep.js.map +1 -1
  3. package/dist/ClipboardButton-Cg6LGUiD.js.map +1 -1
  4. package/dist/ControlsButton-Byx4XQtB.js.map +1 -1
  5. package/dist/CopyableText-BKsM-TuS.js.map +1 -1
  6. package/dist/DataTable-Cgn_RKTA.js.map +1 -1
  7. package/dist/{Lexical.prod-nAj5fF96.js → Lexical.prod-Dy5aDppc.js} +2449 -1794
  8. package/dist/Lexical.prod-Dy5aDppc.js.map +1 -0
  9. package/dist/LexicalClipboard.prod-CS8a49uL.js +398 -0
  10. package/dist/LexicalClipboard.prod-CS8a49uL.js.map +1 -0
  11. package/dist/{LexicalComposerContext.prod-DumMmRBt.js → LexicalComposerContext.prod-D4HOlWII.js} +3 -3
  12. package/dist/LexicalComposerContext.prod-D4HOlWII.js.map +1 -0
  13. package/dist/LexicalHtml.prod-BtzosUOH.js +1611 -0
  14. package/dist/LexicalHtml.prod-BtzosUOH.js.map +1 -0
  15. package/dist/LexicalLink.prod-DzgwWhQM.js +646 -0
  16. package/dist/LexicalLink.prod-DzgwWhQM.js.map +1 -0
  17. package/dist/LexicalList.prod-icY8mpm6.js +710 -0
  18. package/dist/LexicalList.prod-icY8mpm6.js.map +1 -0
  19. package/dist/{LexicalTable.prod-BpHQYpBM.js → LexicalTable.prod-Bf0is-op.js} +674 -750
  20. package/dist/LexicalTable.prod-Bf0is-op.js.map +1 -0
  21. package/dist/LexicalUtils.prod-CjGUKarD.js +259 -0
  22. package/dist/LexicalUtils.prod-CjGUKarD.js.map +1 -0
  23. package/dist/{LinkContextMenu-Byu3AEqp.js → LinkContextMenu-C8ehPbP8.js} +2 -2
  24. package/dist/{LinkContextMenu-Byu3AEqp.js.map → LinkContextMenu-C8ehPbP8.js.map} +1 -1
  25. package/dist/MenuLink-sK2_W2zs.js.map +1 -1
  26. package/dist/MetaDataList-Co9WCexh.js.map +1 -1
  27. package/dist/MultiSelectBox-D34qAgzc.js.map +1 -1
  28. package/dist/OverlayStepBar-BiC06Itd.js.map +1 -1
  29. package/dist/{PasteHandlerPlugin-DyTXcFsj.js → PasteHandlerPlugin-CSo_lOE8.js} +6 -6
  30. package/dist/{PasteHandlerPlugin-DyTXcFsj.js.map → PasteHandlerPlugin-CSo_lOE8.js.map} +1 -1
  31. package/dist/Periods-B4ms3N24.js.map +1 -1
  32. package/dist/SortableProvider-D-6Ttz0h.js.map +1 -1
  33. package/dist/{TableCellContextMenu--4IdoKAU.js → TableCellContextMenu-Cu5iXYSJ.js} +2 -2
  34. package/dist/{TableCellContextMenu--4IdoKAU.js.map → TableCellContextMenu-Cu5iXYSJ.js.map} +1 -1
  35. package/dist/{TableCellResizerPlugin-Dn8Ks2Lm.js → TableCellResizerPlugin-Bb2blXnq.js} +43 -43
  36. package/dist/TableCellResizerPlugin-Bb2blXnq.js.map +1 -0
  37. package/dist/VarIndicator-D0cnlcIf.js.map +1 -1
  38. package/dist/{chunk-5WKL7XVT-3IraU-Ja.js → chunk-5WKL7XVT-CvOIS3NE.js} +15 -15
  39. package/dist/{chunk-5WKL7XVT-3IraU-Ja.js.map → chunk-5WKL7XVT-CvOIS3NE.js.map} +1 -1
  40. package/dist/{client-BcEWjSJP.js → client-CXlG3hNo.js} +956 -957
  41. package/dist/{client-BcEWjSJP.js.map → client-CXlG3hNo.js.map} +1 -1
  42. package/dist/components/Accordion/Accordion.test.js +3 -3
  43. package/dist/components/Accordion/Accordion.test.js.map +1 -1
  44. package/dist/components/AccordionCard/AccordionCard.stories.js.map +1 -1
  45. package/dist/components/AccordionCard/AccordionCard.test.js +3 -3
  46. package/dist/components/AccordionCard/AccordionCard.test.js.map +1 -1
  47. package/dist/components/ActionList/ActionList.test.js +3 -3
  48. package/dist/components/ActionList/ActionList.test.js.map +1 -1
  49. package/dist/components/AppStatusBar/AppStatusBar.test.js +2 -2
  50. package/dist/components/AppStatusBar/AppStatusBar.test.js.map +1 -1
  51. package/dist/components/Attention/Attention.stories.js.map +1 -1
  52. package/dist/components/Attention/Attention.test.js +2 -2
  53. package/dist/components/Attention/Attention.test.js.map +1 -1
  54. package/dist/components/Backdrop/Backdrop.stories.js.map +1 -1
  55. package/dist/components/Backdrop/Backdrop.test.js +2 -2
  56. package/dist/components/Backdrop/Backdrop.test.js.map +1 -1
  57. package/dist/components/Buttons/Button.stories.js +1 -1
  58. package/dist/components/Buttons/Button.test.js +2 -2
  59. package/dist/components/Buttons/Button.test.js.map +1 -1
  60. package/dist/components/Buttons/LinkButton.stories.js +1 -1
  61. package/dist/components/Buttons/LinkButton.test.js +2 -2
  62. package/dist/components/Buttons/LinkButton.test.js.map +1 -1
  63. package/dist/components/Buttons/MenuButton.stories.js +1 -1
  64. package/dist/components/Buttons/MenuButton.test.js +2 -2
  65. package/dist/components/Buttons/MenuButton.test.js.map +1 -1
  66. package/dist/components/Card/Card.test.js +2 -2
  67. package/dist/components/Card/Card.test.js.map +1 -1
  68. package/dist/components/Checkbox/Checkbox.stories.js +1 -1
  69. package/dist/components/Checkbox/Checkbox.stories.js.map +1 -1
  70. package/dist/components/Checkbox/Checkbox.test.js +3 -3
  71. package/dist/components/Checkbox/Checkbox.test.js.map +1 -1
  72. package/dist/components/CheckboxButtonBar/CheckboxButtonBar.stories.js +1 -1
  73. package/dist/components/CheckboxButtonBar/CheckboxButtonBar.test.js +2 -2
  74. package/dist/components/CheckboxButtonBar/CheckboxButtonBar.test.js.map +1 -1
  75. package/dist/components/CheckboxTree/CheckboxTree.js +1 -1
  76. package/dist/components/CheckboxTree/CheckboxTree.stories.js +3 -3
  77. package/dist/components/CheckboxTree/CheckboxTree.stories.js.map +1 -1
  78. package/dist/components/CheckboxTree/index.js +1 -1
  79. package/dist/components/Chip/Chip.stories.js +1 -1
  80. package/dist/components/ControlsButton/ControlsButton.stories.js +1 -1
  81. package/dist/components/CopyableText/CopyableText.stories.js.map +1 -1
  82. package/dist/components/DataTable/DataTable.stories.js +2 -2
  83. package/dist/components/DataTable/DataTable.stories.js.map +1 -1
  84. package/dist/components/Drawer/Drawer.stories.js +1 -1
  85. package/dist/components/Drawer/Drawer.stories.js.map +1 -1
  86. package/dist/components/EmptyStateDataDisplay/EmptyStateDataDisplay.stories.js.map +1 -1
  87. package/dist/components/FeedbackBar/FeedbackBar.stories.js.map +1 -1
  88. package/dist/components/FeedbackBar/FeedbackBar.test.js +2 -2
  89. package/dist/components/FeedbackBar/FeedbackBar.test.js.map +1 -1
  90. package/dist/components/FormInput/FormInput.js +1 -1
  91. package/dist/components/FormInput/FormInput.stories.js +2 -2
  92. package/dist/components/FormInput/index.js +1 -1
  93. package/dist/components/GridRow/GridRow.stories.js.map +1 -1
  94. package/dist/components/Icon/Icon.stories.js.map +1 -1
  95. package/dist/components/IconButton/IconButton.stories.js +1 -1
  96. package/dist/components/IconButton/IconButton.stories.js.map +1 -1
  97. package/dist/components/InfoBanner/InfoBanner.stories.js.map +1 -1
  98. package/dist/components/InfoMessage/InfoMessage.stories.js.map +1 -1
  99. package/dist/components/InputField/InputField.stories.js +1 -1
  100. package/dist/components/InputField/InputField.stories.js.map +1 -1
  101. package/dist/components/Label/Label.test.js +2 -2
  102. package/dist/components/Label/Label.test.js.map +1 -1
  103. package/dist/components/MenuLink/MenuLink.stories.js.map +1 -1
  104. package/dist/components/MetaDataBar/MetaDataBar.stories.js.map +1 -1
  105. package/dist/components/MetaDataBar/MetaDataBar.test.js +1 -1
  106. package/dist/components/MetaDataBar/MetaDataBar.test.js.map +1 -1
  107. package/dist/components/MetaDataList/MetaDataList.stories.js.map +1 -1
  108. package/dist/components/ModalDialog/ModalDialog.stories.js +1 -1
  109. package/dist/components/ModalDialog/ModalDialog.stories.js.map +1 -1
  110. package/dist/components/MultiSelect/MultiSelect.js +1 -1
  111. package/dist/components/MultiSelect/MultiSelect.stories.js +2 -2
  112. package/dist/components/MultiSelect/MultiSelect.stories.js.map +1 -1
  113. package/dist/components/MultiSelect/components/MultiSelectHeader.js +1 -1
  114. package/dist/components/MultiSelect/index.js +1 -1
  115. package/dist/components/MultiSelectBox/MultiSelectBox.stories.js +1 -1
  116. package/dist/components/MultiSelectBox/MultiSelectBox.stories.js.map +1 -1
  117. package/dist/components/MultiSelectBox/MultiSelectBox.test.js +2 -2
  118. package/dist/components/MultiSelectBox/MultiSelectBox.test.js.map +1 -1
  119. package/dist/components/Notification/Notification.stories.js +1 -1
  120. package/dist/components/Notification/Notification.test.js +2 -2
  121. package/dist/components/Notification/Notification.test.js.map +1 -1
  122. package/dist/components/OverlayCloseButton/OverlayCloseButton.stories.js +1 -1
  123. package/dist/components/OverlayCloseButton/OverlayCloseButton.stories.js.map +1 -1
  124. package/dist/components/PageOverlay/PageOverlay.stories.js.map +1 -1
  125. package/dist/components/PeriodSelector/PeriodSelector.js +1 -1
  126. package/dist/components/PeriodSelector/PeriodSelector.stories.js +2 -2
  127. package/dist/components/PeriodSelector/PeriodSelector.stories.js.map +1 -1
  128. package/dist/components/PeriodSelector/index.js +1 -1
  129. package/dist/components/Periods/Periods.stories.js.map +1 -1
  130. package/dist/components/ProgrammeCard/ProgrammeCard.stories.js.map +1 -1
  131. package/dist/components/RadioButton/RadioButton.stories.js.map +1 -1
  132. package/dist/components/RadioGroup/RadioGroup.stories.js +1 -1
  133. package/dist/components/RadioGroup/RadioGroup.stories.js.map +1 -1
  134. package/dist/components/RadioGroup/Radiogroup.test.js +2 -2
  135. package/dist/components/RadioGroup/Radiogroup.test.js.map +1 -1
  136. package/dist/components/RadioTabSelector/RadioTabSelector.js +1 -1
  137. package/dist/components/RadioTabSelector/RadioTabSelector.stories.js +2 -2
  138. package/dist/components/RadioTabSelector/index.js +1 -1
  139. package/dist/components/Repeater/Repeater.stories.js.map +1 -1
  140. package/dist/components/RteEditor/EditorHeader/EditorHeader.js +1 -1
  141. package/dist/components/RteEditor/EditorHeader/index.js +1 -1
  142. package/dist/components/RteEditor/Plugins/BlockFormatPlugin/BlockFormatPlugin.js +4 -4
  143. package/dist/components/RteEditor/Plugins/CourseCataloguePlugin/CourseCataloguePlugin.js +35 -35
  144. package/dist/components/RteEditor/Plugins/CourseCataloguePlugin/CourseCataloguePlugin.js.map +1 -1
  145. package/dist/components/RteEditor/Plugins/HistoryPlugin/HistoryPlugin.js +1 -1
  146. package/dist/components/RteEditor/Plugins/HistoryPlugin/index.js +1 -1
  147. package/dist/components/RteEditor/Plugins/LinkPlugin/AddLinkForm/AddLinkFrom.js +1 -1
  148. package/dist/components/RteEditor/Plugins/LinkPlugin/LinkContextMenu/LinkContextMenu.js +1 -1
  149. package/dist/components/RteEditor/Plugins/LinkPlugin/LinkPlugin.js +1 -1
  150. package/dist/components/RteEditor/Plugins/LinkPlugin/helpers.js +1 -1
  151. package/dist/components/RteEditor/Plugins/LinkPlugin/index.js +1 -1
  152. package/dist/components/RteEditor/Plugins/ListPlugin/ListPlugin.js +15 -15
  153. package/dist/components/RteEditor/Plugins/PasteHandlerPlugin/PasteHandlerPlugin.js +1 -1
  154. package/dist/components/RteEditor/Plugins/PasteHandlerPlugin/index.js +1 -1
  155. package/dist/components/RteEditor/Plugins/TableCellResizerPlugin/TableCellResizerPlugin.js +1 -1
  156. package/dist/components/RteEditor/Plugins/TableCellResizerPlugin/index.js +1 -1
  157. package/dist/components/RteEditor/Plugins/TablePlugin/AddTableFrom.js +1 -1
  158. package/dist/components/RteEditor/Plugins/TablePlugin/TableCellContextMenu/TableCellContextMenu.js +1 -1
  159. package/dist/components/RteEditor/Plugins/TablePlugin/TableCellContextMenu/index.js +1 -1
  160. package/dist/components/RteEditor/Plugins/TablePlugin/TablePlugin.js +1 -1
  161. package/dist/components/RteEditor/Plugins/TablePlugin/helpers.js +33 -33
  162. package/dist/components/RteEditor/Plugins/TablePlugin/helpers.js.map +1 -1
  163. package/dist/components/RteEditor/Plugins/TablePlugin/index.js +2 -2
  164. package/dist/components/RteEditor/Plugins/ToolbarPlugin/ToolbarPlugin.js +1 -1
  165. package/dist/components/RteEditor/Plugins/ToolbarPlugin/index.js +1 -1
  166. package/dist/components/RteEditor/Plugins/index.js +4 -4
  167. package/dist/components/RteEditor/RteEditor.js +1 -1
  168. package/dist/components/RteEditor/RteEditor.stories.js +1 -1
  169. package/dist/components/RteEditor/RteEditor.stories.js.map +1 -1
  170. package/dist/components/RteEditor/helpers.js +7 -7
  171. package/dist/components/RteEditor/helpers.js.map +1 -1
  172. package/dist/components/RteEditor/index.js +1 -1
  173. package/dist/components/RteEditor/nodes/CourseCatalogueNode/CourseCatalogueNode.js +18 -18
  174. package/dist/components/RteEditor/nodes/CourseCatalogueNode/CourseCatalogueNode.js.map +1 -1
  175. package/dist/components/RteEditor/nodes/TableWrapperNode/TableWrapperNode.js +22 -22
  176. package/dist/components/SearchField/SearcheField.stories.js.map +1 -1
  177. package/dist/components/SectionNotification/SectionNotification.stories.js.map +1 -1
  178. package/dist/components/SelectListbox/SelectListBox.stories.js +1 -1
  179. package/dist/components/SelectListbox/SelectListBox.stories.js.map +1 -1
  180. package/dist/components/SelectListbox/SelectProvider.js.map +1 -1
  181. package/dist/components/SelectListbox/components/SelectButton.js.map +1 -1
  182. package/dist/components/SelectListbox/components/SelectOption.js.map +1 -1
  183. package/dist/components/Slider/Slider.stories.js.map +1 -1
  184. package/dist/components/Sortable/Sortable.stories.js +1 -1
  185. package/dist/components/Sortable/Sortable.stories.js.map +1 -1
  186. package/dist/components/Spinner/Spinner.stories.js.map +1 -1
  187. package/dist/components/StatusBadge/StatusBadge.test.js +2 -2
  188. package/dist/components/StatusBadge/StatusBadge.test.js.map +1 -1
  189. package/dist/components/StatusPill/StatusPill.stories.js.map +1 -1
  190. package/dist/components/TextArea/TextArea.stories.js +1 -1
  191. package/dist/components/TextArea/TextArea.test.js +3 -3
  192. package/dist/components/TextArea/TextArea.test.js.map +1 -1
  193. package/dist/components/ToggleSwitch/ToggleSwitch.stories.js +1 -1
  194. package/dist/components/Tooltip/Tooltip.stories.js.map +1 -1
  195. package/dist/components/VarIndicator/VarIndicator.stories.js +1 -1
  196. package/dist/components/VarIndicator/VarIndicator.test.js +3 -3
  197. package/dist/components/VarIndicator/VarIndicator.test.js.map +1 -1
  198. package/dist/components/WeekSelector/WeekSelector.js.map +1 -1
  199. package/dist/components/WeekSelector/WeekSelector.stories.js.map +1 -1
  200. package/dist/components/WeekSelector/components/WeekSelectorOption.js.map +1 -1
  201. package/dist/components/hooks/useOnClickOutside.js.map +1 -1
  202. package/dist/components/hooks/usePositionedFloaters.js.map +1 -1
  203. package/dist/components/hooks/useResponsive.js.map +1 -1
  204. package/dist/components/index.js +1 -1
  205. package/dist/components-CgBF6db6.js +2013 -0
  206. package/dist/components-CgBF6db6.js.map +1 -0
  207. package/dist/{dist-C6Ar8a59.js → dist-oLwM--0y.js} +14 -14
  208. package/dist/{dist-C6Ar8a59.js.map → dist-oLwM--0y.js.map} +1 -1
  209. package/dist/{esm-B6Pg-v2v.js → esm-BXzGXYWZ.js} +3 -3
  210. package/dist/{esm-B6Pg-v2v.js.map → esm-BXzGXYWZ.js.map} +1 -1
  211. package/dist/{helpers-BzYayeT-.js → helpers-MMNO9vlK.js} +9 -9
  212. package/dist/helpers-MMNO9vlK.js.map +1 -0
  213. package/dist/index.js +1 -1
  214. package/dist/{react-18-DbbN8Pdb.js → react-18-BwdnKC48.js} +3 -3
  215. package/dist/react-18-BwdnKC48.js.map +1 -0
  216. package/dist/{react.esm-56DGmlLk.js → react.esm-DwWzhs9e.js} +17 -17
  217. package/dist/react.esm-DwWzhs9e.js.map +1 -0
  218. package/dist/setupTests.js +2 -2
  219. package/dist/setupTests.js.map +1 -1
  220. package/dist/storybook__react.d.js +266 -266
  221. package/dist/storybook__react.d.js.map +1 -1
  222. package/dist/{test-WxLxsxwA.js → test-Gtly6H2f.js} +7 -5
  223. package/dist/{test-WxLxsxwA.js.map → test-Gtly6H2f.js.map} +1 -1
  224. package/dist/{test-utils-CMrZ33U0.js → test-utils-BVa31HVj.js} +2 -2
  225. package/dist/{test-utils-CMrZ33U0.js.map → test-utils-BVa31HVj.js.map} +1 -1
  226. package/package.json +21 -22
  227. package/dist/Lexical.prod-nAj5fF96.js.map +0 -1
  228. package/dist/LexicalClipboard.prod-B9sWgdS2.js +0 -348
  229. package/dist/LexicalClipboard.prod-B9sWgdS2.js.map +0 -1
  230. package/dist/LexicalComposerContext.prod-DumMmRBt.js.map +0 -1
  231. package/dist/LexicalHtml.prod-RCMsF0qt.js +0 -2139
  232. package/dist/LexicalHtml.prod-RCMsF0qt.js.map +0 -1
  233. package/dist/LexicalLink.prod-BcBNTFEb.js +0 -707
  234. package/dist/LexicalLink.prod-BcBNTFEb.js.map +0 -1
  235. package/dist/LexicalList.prod-THQt9B32.js +0 -890
  236. package/dist/LexicalList.prod-THQt9B32.js.map +0 -1
  237. package/dist/LexicalTable.prod-BpHQYpBM.js.map +0 -1
  238. package/dist/LexicalUtils.prod-7S6iuu9A.js +0 -347
  239. package/dist/LexicalUtils.prod-7S6iuu9A.js.map +0 -1
  240. package/dist/TableCellResizerPlugin-Dn8Ks2Lm.js.map +0 -1
  241. package/dist/components-KU0q76JR.js +0 -2150
  242. package/dist/components-KU0q76JR.js.map +0 -1
  243. package/dist/helpers-BzYayeT-.js.map +0 -1
  244. package/dist/react-18-DbbN8Pdb.js.map +0 -1
  245. package/dist/react.esm-56DGmlLk.js.map +0 -1
  246. /package/dist/{chunk-CWhphoD1.js → rolldown-runtime-CWhphoD1.js} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LexicalUtils.prod-CjGUKarD.js","names":["n","o","s","f","u","h","y","c","J","m","S","x","N","T","g","p","h","l","C","w","I","m","O","E","V","y","v","r","L","i","D","P","B","_","M","T","F","Y","q","a","W"],"sources":["../node_modules/.pnpm/@lexical+selection@0.46.0_typescript@5.9.3/node_modules/@lexical/selection/dist/LexicalSelection.prod.mjs","../node_modules/.pnpm/@lexical+utils@0.46.0_typescript@5.9.3/node_modules/@lexical/utils/dist/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{getRootOwnerDocument as e,$isTextNode as t,$getEditor as n,$isRootNode as o,$getSelection as l,$isRangeSelection as r,$caretRangeFromSelection as i,$isTokenOrSegmented as s,$isElementNode as c,$getCharacterOffsets as f,$cloneWithPropertiesEphemeral as u,$getNodeByKey as g,$getPreviousSelection as d,$createTextNode as a,getStyleObjectFromCSS as p,$findMatchingParent as h,INTERNAL_$isBlock as y,$caretFromPoint as m,$isExtendableTextPointCaret as S,$extendCaretToRange as x,$isChildCaret as N,$isDecoratorNode as T,$isRootOrShadowRoot as C,$hasAncestor as v,$isLeafNode as w,$setSelection as P}from\"lexical\";export{$cloneWithProperties,$selectAll}from\"lexical\";function K(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.`)}\n/*@__INLINE__*/function E(e){let t=e;for(;null!=t;){if(t.nodeType===Node.TEXT_NODE)return t;t=t.firstChild}return null}function I(e){const t=e.parentNode;if(null==t)throw new Error(\"Should never happen\");return[t,Array.from(t.childNodes).indexOf(e)]}function B(n,o,l,r,i){const s=o.getKey(),c=r.getKey(),f=e(n.getRootElement()).createRange();let u=n.getElementByKey(s),g=n.getElementByKey(c),d=l,a=i;if(t(o)&&(u=E(u)),t(r)&&(g=E(g)),void 0===o||void 0===r||null===u||null===g)return null;\"BR\"===u.nodeName&&([u,d]=I(u)),\"BR\"===g.nodeName&&([g,a]=I(g));const p=u.firstChild;u===g&&null!=p&&\"BR\"===p.nodeName&&0===d&&0===a&&(a=1);try{f.setStart(u,d),f.setEnd(g,a)}catch(e){return null}return!f.collapsed||d===a&&s===c||(f.setStart(g,a),f.setEnd(u,d)),f}function F(e,t){const n=e.getRootElement();if(null===n)return[];const o=n.getBoundingClientRect(),l=getComputedStyle(n),r=parseFloat(l.paddingLeft)+parseFloat(l.paddingRight),i=Array.from(t.getClientRects());let s,c=i.length;i.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=i[e],n=s&&s.top<=t.top&&s.top+s.height>t.top&&s.left+s.width>t.left,l=t.width+r===o.width;n||l?(i.splice(e--,1),c--):s=t}return i}function b(e){let t=\"\";for(const n in e)n&&(t+=`${n}: ${e[n]};`);return t}function k(e){const t=n().getElementByKey(e.getKey());if(null===t)return null;const o=t.ownerDocument.defaultView;return null===o?null:o.getComputedStyle(t)}function z(e){return k(o(e)?e:e.getParentOrThrow())}function R(e){const t=z(e);return null!==t&&\"rtl\"===t.direction}function O(e,t,n=\"self\"){const o=e.getStartEndPoints();if(t.isSelected(e)&&!s(t)&&null!==o){const[l,r]=o,i=e.isBackward(),s=l.getNode(),c=r.getNode(),g=t.is(s),d=t.is(c);if(g||d){const[o,l]=f(e),r=s.is(c),g=t.is(i?c:s),d=t.is(i?s:c);let a,p=0;if(r)p=o>l?l:o,a=o>l?o:l;else if(g){p=i?l:o,a=void 0}else if(d){p=0,a=i?o:l}const h=t.__text.slice(p,a);h!==t.__text&&(\"clone\"===n&&(t=u(t)),t.__text=h)}}return t}function A(e){if(\"text\"===e.type)return e.offset===e.getNode().getTextContentSize();const t=e.getNode();return c(t)||K(177),e.offset===t.getChildrenSize()}function _(e,n,l){let i=n.getNode(),s=l;if(c(i)){const e=i.getDescendantByIndex(n.offset);null!==e&&(i=e)}for(;s>0&&null!==i;){if(c(i)){const e=i.getLastDescendant();null!==e&&(i=e)}let l=i.getPreviousSibling(),f=0;if(null===l){let e=i.getParentOrThrow(),t=e.getPreviousSibling();for(;null===t;){if(e=e.getParent(),null===e){l=null;break}t=e.getPreviousSibling()}null!==e&&(f=e.isInline()?0:2,l=t)}let u=i.getTextContent();\"\"===u&&c(i)&&!i.isInline()&&(u=\"\\n\\n\");const p=u.length;if(!t(i)||s>=p){const e=i.getParent();i.remove(),null==e||0!==e.getChildrenSize()||o(e)||e.remove(),s-=p+f,i=l}else{const o=i.getKey(),l=e.read(\"latest\",()=>{const e=g(o);return t(e)&&e.isSimpleText()?e.getTextContent():null}),c=p-s,f=u.slice(0,c);if(null!==l&&l!==u){const e=d();let t=i;if(i.isSimpleText())i.setTextContent(l);else{const e=a(l);i.replace(e),t=e}if(r(e)&&e.isCollapsed()){const n=e.anchor.offset;t.select(n,n)}}else if(i.isSimpleText()){const e=n.key===o;let t=n.offset;t<s&&(t=p);const l=e?t-s:0,r=e?t:c;if(e&&0===l){const[e]=i.splitText(l,r);e.remove()}else{const[,e]=i.splitText(l,r);e.remove()}}else{const e=a(f);i.replace(e)}s=0}}}const L=()=>{};function M(e,n){(r(e)?e.isCollapsed():t(e)||c(e))||K(280);const o=p(r(e)?e.style:t(e)?e.getStyle():e.getTextStyle()),l=b(Object.entries(n).reduce((t,[n,l])=>(\"function\"==typeof l?t[n]=l(o[n],e):null===l?delete t[n]:t[n]=l,t),{...o}));r(e)||t(e)?e.setStyle(l):e.setTextStyle(l)}function $(e,t){if(r(e)&&e.isCollapsed()){M(e,t);const n=e.anchor.getNode();c(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(!c(o)||!o.canBeEmpty()||0!==o.getChildrenSize())continue;const n=o.getKey();e.has(n)||(e.add(n),M(o,t))}}}function D(e){const n=l();if(!n)return;const o=new Map,c=e=>o.get(e.getKey())||[0,e.getTextContentSize()];if(r(n))for(const e of i(n).getTextSlices())e&&o.set(e.caret.origin.getKey(),e.getSliceIndices());const f=n.getNodes();for(const n of f){if(!t(n)||!n.canHaveFormat())continue;const[o,l]=c(n);if(l!==o)if(s(n)||0===o&&l===n.getTextContentSize())e(n);else{e(n.splitText(o,l)[0===o?0:1])}}r(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(!e)return;const o=e.getStartEndPoints();let l=!1,r=null;const i=new Map;if(o){const[e,t]=o,n=h(e.getNode(),y);r=h(t.getNode(),y),l=c(r)&&!r.is(n)&&function(e,t){if(0!==e.offset)return!1;let n=e.getNode();if(c(n)&&n.isEmpty())return!1;for(;!n.is(t);){if(null!==n.getPreviousSibling())return!1;const e=n.getParent();if(null===e)return!1;n=e}return!0}(t,r),c(n)&&i.set(n.getKey(),n),c(r)&&!l&&i.set(r.getKey(),r)}for(const t of e.getNodes())if(c(t)&&y(t)){if(l&&t.is(r))continue;i.set(t.getKey(),t)}else if(!o){const e=h(t,y);c(e)&&i.set(e.getKey(),e)}for(const e of i.values()){const o=t();n(e,o),e.replace(o,!0)}}function V(e){return e.getNode().isAttached()}function W(e){let t=e;for(;null!==t&&!C(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(),i=r.length;if(null!==l&&(0===i||1===i&&\"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 s=null,c=[];for(let o=0;o<i;o++){const l=r[o];C(l)?(q(e,c,c.length,t,n),c=[],s=l):null===s||null!==s&&v(l,s)?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,l=null){if(0===t.length)return;const i=t[0],s=new Map,f=[],u=c(i)?i:i.getParentOrThrow();let g=u.isInline()?u.getParentOrThrow():u,a=!1;for(;null!==g;){const e=g.getPreviousSibling();if(null!==e){g=e,a=!0;break}if(g=g.getParentOrThrow(),C(g))break}const p=new Set;for(let e=0;e<n;e++){const n=t[e];c(n)&&0===n.getChildrenSize()&&p.add(n.getKey())}const h=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&&w(n)&&!h.has(n.getKey())){const e=l.getKey();if(void 0===s.get(e)){const t=o();t.setFormat(l.getFormatType()),t.setIndent(l.getIndent()),f.push(t),s.set(e,t);const n=l.getChildren();t.splice(t.getChildrenSize(),0,n);for(const e of n)if(h.add(e.getKey()),c(e))for(const t of e.getChildrenKeys())h.add(t);W(l)}}else if(p.has(n.getKey())){c(n)||K(179);const e=o();e.setFormat(n.getFormatType()),e.setIndent(n.getIndent()),f.push(e),n.remove(!0)}}if(null!==l)for(let e=0;e<f.length;e++){const t=f[e];l.append(t)}let y=null;if(C(g))if(a)if(null!==l)g.insertAfter(l);else for(let e=f.length-1;e>=0;e--){const t=f[e];g.insertAfter(t)}else{const e=g,t=e.getFirstChild();if(c(t)&&(g=t),null===t)if(l)e.append(l);else for(let t=0;t<f.length;t++){const n=f[t];e.append(n),y=n}else if(null!==l)t.insertBefore(l);else for(let e=0;e<f.length;e++){const n=f[e];t.insertBefore(n),y=n}}else if(l)g.insertAfter(l);else for(let e=f.length-1;e>=0;e--){const t=f[e];g.insertAfter(t),y=t}const m=d();r(m)&&V(m.anchor)&&V(m.focus)?P(m.clone()):null!==y?y.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 c(t)?k(t):z(t)}function Q(e,t){let n=G(e)?!t:t;Z(e)&&(n=!n);const o=m(e.focus,n?\"previous\":\"next\");if(S(o))return!1;for(const e of x(o)){if(N(e))return!e.origin.isInline();if(!c(e.origin)){if(T(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=p(o);return null!==l&&l[t]||n}function ne(e,n,o=\"\"){let l=null;const i=e.getNodes();let s,c;if(r(e)){if(e.isCollapsed()&&\"\"!==e.style){const t=p(e.style);if(null!==t&&n in t)return t[n]}const{anchor:o,focus:l}=e,r=e.isBackward(),i=r?l.getNode():o.getNode(),f=r?o.getNode():l.getNode(),u=r?l.offset:o.offset,g=r?o.offset:l.offset;t(i)&&u===i.getTextContentSize()&&(s=i),0===g&&(c=f)}for(let e=0;e<i.length;e++){const r=i[e];if(t(r)&&!r.is(0===e?s:c)){const e=te(r,n,o);if(null===l)l=e;else if(l!==e){l=\"\";break}}}return null===l?o:l}const oe=p,le=_;export{L as $addNodeStyle,U as $copyBlockFormatIndent,j as $ensureForwardRangeSelection,D as $forEachSelectedTextNode,k as $getComputedStyleForElement,z as $getComputedStyleForParent,ne as $getSelectionStyleValueForProperty,A as $isAtNodeEnd,Z as $isParentElementRTL,R as $isParentRTL,Y as $moveCaretSelection,ee as $moveCharacter,$ as $patchStyleText,H as $setBlocksType,Q as $shouldOverrideDefaultCharacterSelection,O as $sliceSelectedTextNodeContent,_ as $trimTextContentFromAnchor,X as $wrapNodes,B as createDOMRange,F as createRectsFromDOMRange,b 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{createRectsFromDOMRange as t,$isAtNodeEnd as e}from\"@lexical/selection\";import{isHTMLElement as n,mergeRegister as o,$getSelection as r,$isRangeSelection as i,$isElementNode as l,$isTextNode as s,$getDOMTextNode as u,getDOMTextNode as c,$getDOMSlot as f,getDOMSelectionPoints as d,getParentElement as a,$isSlotHost as g,$getSlotNames as p,$getSlot as h,$getChildCaret as m,$getSlotHost as y,$findMatchingParent as v,$getChildCaretOrSelf as E,$getSiblingCaret as w,$getAdjacentSiblingOrParentSiblingCaret as C,$caretRangeFromSelection as S,$getCaretRangeInDirection as x,$removeTextFromCaretRange as N,$isTextPointCaret as A,$splitAtPointCaretNext as b,$setSelectionFromCaretRange as _,$getCaretRange as R,$getPreviousSelection as L,$caretFromPoint as D,$getRoot as I,$createParagraphNode as P,$insertNodeToNearestRootAtCaret as B,$getAdjacentChildCaret as O,$isChildCaret as T,$normalizeCaret as F,$getCollapsedCaretRange as M,$getSlotFrame as K,$getCaretInDirection as $,$comparePointCaretNext as H,$cloneWithProperties as k,$fullReconcile as U,$setSelection as j,$rewindSiblingCaret as z,makeStepwiseIterator as V,$isSiblingCaret as W,$getState as X,$setState as G,IS_FIREFOX as Y,CAN_USE_DOM as q}from\"lexical\";export{$findMatchingParent,$getAdjacentSiblingOrParentSiblingCaret,$insertNodeToNearestRootAtCaret,$splitNode,CAN_USE_BEFORE_INPUT,CAN_USE_DOM,IS_ANDROID,IS_ANDROID_CHROME,IS_APPLE,IS_APPLE_WEBKIT,IS_CHROME,IS_FIREFOX,IS_IOS,IS_SAFARI,addClassNamesToElement,isBlockDomNode,isHTMLAnchorElement,isHTMLElement,isInlineDomNode,mergeRegister,removeClassNamesFromElement}from\"lexical\";function J(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.`)}function Q(t){const e=(t,e)=>e.left>=t.left-1&&e.top>=t.top-1&&e.right<=t.right+1&&e.bottom<=t.bottom+1,n=[];for(const o of Array.from(t))if(!(o.width<.5||o.height<.5||n.some(t=>e(o,t)))){for(let t=n.length-1;t>=0;t--)e(n[t],o)&&n.splice(t,1);n.push(o)}return n}function Z(t){return`${t}px`}const tt={attributes:!0,characterData:!0,childList:!0,subtree:!0};function et(e,o,r){let i=null,l=null,s=null,u=[];const c=document.createElement(\"div\");function f(){null===i&&J(182),null===l&&J(183);const{left:n,top:s}=l.getBoundingClientRect(),f=Q(t(e,o));var d,a;c.isConnected||(a=c,(d=l).insertBefore(a,d.firstChild));let g=!1;for(let t=0;t<f.length;t++){const e=f[t],o=u[t]||document.createElement(\"div\"),r=o.style;\"absolute\"!==r.position&&(r.position=\"absolute\",g=!0);const i=Z(e.left-n);r.left!==i&&(r.left=i,g=!0);const l=Z(e.top-s);r.top!==l&&(o.style.top=l,g=!0);const d=Z(e.width);r.width!==d&&(o.style.width=d,g=!0);const a=Z(e.height);r.height!==a&&(o.style.height=a,g=!0),o.parentNode!==c&&(c.append(o),g=!0),u[t]=o}for(;u.length>f.length;)u.pop();g&&r(u)}function d(){l=null,i=null,null!==s&&s.disconnect(),s=null,c.remove();for(const t of u)t.remove();u=[]}c.style.position=\"relative\";const a=e.registerRootListener(function t(){const o=e.getRootElement();if(null===o)return d();const r=o.parentElement;if(!n(r))return d();d(),i=o,l=r,s=new MutationObserver(n=>{const o=e.getRootElement(),r=o&&o.parentElement;if(o!==i||r!==l)return t();for(const t of n)if(!c.contains(t.target))return f()}),s.observe(r,tt),f()});return()=>{a(),d()}}function nt(t,e,n,o){if(\"text\"!==e.type&&l(n)){const r=f(n,o,t);return[r.element,r.getFirstChildOffset()+e.offset]}return[(s(n)?u(n,o,t):c(o))||o,e.offset]}function ot(t){for(const e of t){const t=e.style;\"Highlight\"!==t.background&&(t.background=\"Highlight\"),\"HighlightText\"!==t.color&&(t.color=\"HighlightText\"),t.marginTop!==Z(-1.5)&&(t.marginTop=Z(-1.5)),t.paddingTop!==Z(4)&&(t.paddingTop=Z(4)),t.paddingBottom!==Z(0)&&(t.paddingBottom=Z(0))}}function rt(t,e=ot){let n=null,l=null,s=null,u=null,c=null,f=null,d=()=>{};function a(o){o.read(()=>{const o=r();if(!i(o))return n=null,s=null,u=null,f=null,d(),void(d=()=>{});const[a,g]=function(t){const e=t.getStartEndPoints();return t.isBackward()?[e[1],e[0]]:e}(o),p=a.getNode(),h=p.getKey(),m=a.offset,y=g.getNode(),v=y.getKey(),E=g.offset,w=t.getElementByKey(h),C=t.getElementByKey(v),S=null===n||w!==l||m!==s||h!==n.getKey(),x=null===u||C!==c||E!==f||v!==u.getKey();if((S||x)&&null!==w&&null!==C){const n=function(t,e,n,o,r,i,l){const s=(t._window?t._window.document:document).createRange();return s.setStart(...nt(t,e,n,o)),s.setEnd(...nt(t,r,i,l)),s}(t,a,p,w,g,y,C);d(),d=et(t,n,e)}n=p,l=w,s=m,u=y,c=C,f=E},{editor:t})}return a(t.getEditorState()),o(t.registerUpdateListener(({editorState:t})=>a(t)),()=>{d()})}function it(t,e){let n=null;const o=()=>{const o=t.getRootElement(),r=null!==o?o.ownerDocument.defaultView:null,i=null!==r?r.getSelection():null,l=null!==i?d(i,o).anchorNode:null;null!==l&&null!==o&&o.contains(l)?null!==n&&(n(),n=null):null===n&&(n=rt(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)}}})}function lt(t,e){const n=t.ownerDocument,o=n.defaultView||window;let r=o.getComputedStyle(t);const i=\"absolute\"===r.position,l=e?/(auto|scroll|hidden)/:/(auto|scroll)/;if(\"fixed\"===r.position)return n.body;for(let e=t;e=a(e);)if(r=o.getComputedStyle(e),(!i||\"static\"!==r.position)&&l.test(r.overflow+r.overflowY+r.overflowX))return e;return n.body}function st(t,e){for(const n of e)if(t.type.startsWith(n))return!0;return!1}function ut(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()}),st(s,e)?u.readAsDataURL(s):i()};i()})}function ct(t,e){return Array.from(at(t,e))}function ft(t){return t?t.getAdjacentCaret():null}function dt(t,e){return Array.from(Ct(t,e))}function at(t,e){return yt(\"next\",t,e)}function gt(t,e){return Array.from(pt(t,e))}function*pt(t,e){for(const n of yt(\"next\",t,e)){yield n;const{node:t,depth:o}=n;if(g(t)&&!t.is(e))for(const e of p(t)){const n=h(t,e);null!==n&&(yield*ht(n,o+1))}}}function*ht(t,e){yield{depth:e,node:t};const n=e+1;if(g(t))for(const e of p(t)){const o=h(t,e);null!==o&&(yield*ht(o,n))}if(l(t))for(const e of t.getChildren())yield*ht(e,n)}function mt(t,e){const n=C(w(t,e));return n&&n[0]}function yt(t,e,n){const o=I(),r=e||o,i=l(r)?m(r,t):w(r,t),s=Et(r),u=n?O(E(w(n,t)))||mt(n,t):mt(r,t);let c=s;return V({hasNext:t=>null!==t,initial:i,map:t=>({depth:c,node:t.origin}),step:t=>{if(t.isSameNodeCaret(u))return null;T(t)&&c++;const e=C(t);return!e||e[0].isSameNodeCaret(u)?null:(c+=e[1],e[0])}})}function vt(t){const e=C(w(t,\"next\"));return e&&[e[0].origin,e[1]]}function Et(t){let e=-1;for(let n=t;null!==n;n=n.getParent()??y(n))e++;return e}function wt(t){const e=E(w(t,\"previous\")),n=C(e,\"root\");return n&&n[0].origin}function Ct(t,e){return yt(\"previous\",t,e)}function St(t,e){return Array.from(xt(t,e))}function*xt(t,e){const n=[];for(const o of yt(\"previous\",t,e)){for(;n.length>0&&o.depth<=n[n.length-1].depth;){const t=n.pop();yield*Nt(t.node,t.depth+1)}yield o;const{node:t,depth:r}=o;g(t)&&p(t).length>0&&!t.is(e)&&n.push({depth:r,node:t})}for(;n.length>0;){const t=n.pop();yield*Nt(t.node,t.depth+1)}}function*Nt(t,e){const n=p(t);for(let o=n.length-1;o>=0;o--){const r=h(t,n[o]);null!==r&&(yield*At(r,e))}}function*At(t,e){yield{depth:e,node:t};const n=e+1;if(l(t)){const e=t.getChildren();for(let t=e.length-1;t>=0;t--)yield*At(e[t],n)}g(t)&&(yield*Nt(t,n))}function bt(t,e){let n=t;for(;null!=n;){if(n instanceof e)return n;n=n.getParent()}return null}function _t(t){const e=v(t,t=>l(t)&&!t.isInline());return l(e)||J(4,t.__key),e}function Rt(t,e){const n=x(i(e)?S(e):e,\"next\"),o=K(n.anchor.origin),r=K(t.getLatest());if(null===o?null!==r:!o.is(r))return!1;const l=F(m(t,\"next\")),s=$(F(m(t,\"previous\")),\"next\");return H(n.anchor,l)<=0&&H(n.focus,s)>=0}function Lt(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 Dt(t,e){const n=new Map,o=t._pendingEditorState;for(const[t,o]of e._nodeMap)n.set(t,k(o));o&&(o._nodeMap=n),U();const r=e._selection;j(null===r?null:r.clone())}function It(t){const e=r()||L();let n;if(i(e))n=D(e.focus,\"next\");else{if(null!=e){const t=e.getNodes(),o=t[t.length-1];o&&(n=w(o,\"next\"))}n=n||m(I(),\"previous\").getFlipped().insert(P())}const o=B(t,n),l=O(o),s=T(l)?F(l):o;return _(M(s)),t.getLatest()}function Pt(t){const e=r();if(!i(e))return void(e&&e.insertNodes([t]));const n=S(e);let o=x(N(n),\"next\").anchor;if(A(o)){const t=b(o);if(!t)return;o=t}const l=o.getFlipped();l.insert(t),_(R(l,l))}function Bt(t,e){const n=e();return t.replace(n),n.append(t),n}function Ot(t,e){return null!==t&&Object.getPrototypeOf(t).constructor.name===e.name}function Tt(t){let e=null;if(Ot(t,DragEvent)?e=t.dataTransfer:Ot(t,ClipboardEvent)&&(e=t.clipboardData),null===e)return[!1,[],!1];const n=e.types,o=n.includes(\"Files\"),r=n.includes(\"text/html\")||n.includes(\"text/plain\");return[o,Array.from(e.files),r]}function Ft(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 Mt(t){const e=r();if(!i(e))return!1;const n=new Set,o=e.getNodes();for(let e=0;e<o.length;e++){const r=o[e],i=r.getKey();if(n.has(i))continue;const s=v(r,t=>l(t)&&!t.isInline());if(null===s)continue;const u=s.getKey();s.canIndent()&&!n.has(u)&&(n.add(u),t(s))}return n.size>0}function Kt(t,e){m(t,\"next\").insert(e)}let $t=!(Y||!q)&&void 0;function Ht(t,e=!1){let n=1;if(function(){if(void 0===$t){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\"),$t=t.getBoundingClientRect().width===e.width,document.body.removeChild(t)}return $t}()||e){const e=t&&t.ownerDocument.defaultView||window;for(;t;)n*=Number(e.getComputedStyle(t).getPropertyValue(\"zoom\")),t=a(t)}return n}function kt(t){return null!==t._parentEditor}function Ut(t,e){return jt(t,e,null)}function jt(t,e,n){let o=!1;for(const r of Wt(t))e(r)?null!==n&&n(r):(o=!0,l(r)&&jt(r,e,n||(t=>r.insertAfter(t))),r.remove());return o}function zt(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(l(t))for(const e of Wt(t))o.push(e);return n}function Vt(t){return Xt(m(t,\"next\"))}function Wt(t){return Xt(m(t,\"previous\"))}function Xt(t){return V({hasNext:W,initial:t.getAdjacentCaret(),map:t=>t.origin.getLatest(),step:t=>t.getAdjacentCaret()})}function Gt(t){z(w(t,\"next\")).splice(1,t.getChildren())}function Yt(t){const e=e=>X(e,t),n=(e,n)=>G(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}}function qt(t,e){const n=r();if(i(n)&&n.isCollapsed()){const o=v(n.anchor.getNode(),t);if(o){const t=o.getParent();if(null!==t&&t.getFirstChild()===o&&Qt(n.anchor,o))return o.insertBefore(P()).selectEnd(),e&&e.preventDefault(),!0}}return!1}function Jt(t,e){const n=r();if(i(n)&&n.isCollapsed()){const o=v(n.anchor.getNode(),t);if(o){const t=o.getParent();if(null!==t&&t.getLastChild()===o&&Zt(n.anchor,o))return o.insertAfter(P()).selectEnd(),e&&e.preventDefault(),!0}}return!1}function Qt(t,e){if(0!==t.offset)return!1;const n=e.getFirstDescendant()??e,o=t.getNode();return o===n||l(o)&&o.getFirstDescendant()===n}function Zt(t,n){if(!e(t))return!1;const o=n.getLastDescendant()??n,r=t.getNode();return r===o||l(r)&&r.getLastDescendant()===o}export{zt as $descendantsMatching,ct as $dfs,at as $dfsIterator,gt as $dfsWithSlots,pt as $dfsWithSlotsIterator,Ft as $filter,Vt as $firstToLastIterator,ft as $getAdjacentCaret,Et as $getDepth,_t as $getNearestBlockElementAncestorOrThrow,bt as $getNearestNodeOfType,wt as $getNextRightPreorderNode,vt as $getNextSiblingOrParentSibling,Mt as $handleIndentAndOutdent,Kt as $insertFirst,Pt as $insertNodeIntoLeaf,It as $insertNodeToNearestRoot,Zt as $isAtEndOfNode,Qt as $isAtStartOfNode,Rt as $isBlockFullySelected,kt as $isEditorIsNestedEditor,Wt as $lastToFirstIterator,Jt as $onEscapeDown,qt as $onEscapeUp,Dt as $restoreEditorState,dt as $reverseDfs,Ct as $reverseDfsIterator,St as $reverseDfsWithSlots,xt as $reverseDfsWithSlotsIterator,Ut as $unwrapAndFilterDescendants,Gt as $unwrapNode,Bt as $wrapNodeInElement,Ht as calculateZoomLevel,Q as dedupeSelectionRects,Tt as eventFiles,lt as getScrollParent,st as isMimeType,Yt as makeStateWrapper,rt as markSelection,ut as mediaFileReader,Ot as objectKlassEquals,et as positionNodeOnRange,Lt as registerNestedElementResolver,it as selectionAlwaysOnDisplay};\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Icon as e } from "./components/Icon/Icon.js";
2
2
  import { Button as t } from "./components/Buttons/Button.js";
3
- import { n } from "./helpers-BzYayeT-.js";
3
+ import { n } from "./helpers-MMNO9vlK.js";
4
4
  import { useTranslation as r } from "./components/RteEditor/hooks/useTranslation.js";
5
5
  import { forwardRef as i, useImperativeHandle as a, useLayoutEffect as o, useRef as s, useState as c } from "react";
6
6
  import { Fragment as l, jsx as u, jsxs as d } from "react/jsx-runtime";
@@ -98,4 +98,4 @@ var f = {
98
98
  //#endregion
99
99
  export { p as t };
100
100
 
101
- //# sourceMappingURL=LinkContextMenu-Byu3AEqp.js.map
101
+ //# sourceMappingURL=LinkContextMenu-C8ehPbP8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"LinkContextMenu-Byu3AEqp.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,EAAe,GACnB,CAAC,GAAM,KAAW,EAAS,CAAG,GAC9B,CAAC,GAAU,KAAe,EAAS,EAAK,GACxC,IAAU,EAAyB,IAAI,GAEvC,UAAc;EAGlB,AAFA,EAAQ,CAAG,GACX,EAAY,EAAK,GACjB,EAAQ,SAAS,KAAK;CACxB,GAEM,UAAmB;EAEvB,AADA,EAAO,CAAI,GACX,EAAM;CACR,GAEM,UAAqB;EAGzB,AAFA,EAAS,GACT,EAAQ,EAAE,GACV,EAAM;CACR,GAEM,UAAoB;EAExB,AADA,EAAM,GACN,EAAQ;CACV,GAEM,UAAsB;EAC1B,OAAO,KAAK,EAAY,CAAG,GAAG,QAAQ;CACxC;CAqCA,OAnCA,EAAoB,UAAY,EAC9B,WAAW,EACb,EAAE,GAEF,QAAsB;EACpB,EAAQ,CAAG;EAEX,IAAM,KAAiB,MAAyB;GAa9C,AAZI,EAAM,WAAW,EAAM,YAAY,EAAM,QAAQ,QACnD,EAAM,eAAe,GACrB,EAAY,EAAI,GAChB,iBAAiB,EAAQ,SAAS,MAAM,GAAG,CAAC,IAG1C,EAAM,WAAW,EAAM,YAAY,EAAM,SAAS,aACpD,EAAM,eAAe,GACrB,EAAc,GACd,iBAAiB,EAAQ,SAAS,MAAM,GAAG,CAAC,IAG1C,EAAM,WAAW,EAAM,YAAY,EAAM,QAAQ,QACnD,EAAM,eAAe,GACrB,EAAa,GACb,iBAAiB,EAAQ,SAAS,MAAM,GAAG,CAAC;EAEhD;EAIA,OAFA,OAAO,iBAAiB,WAAW,CAAa,SAEnC;GACX,OAAO,oBAAoB,WAAW,CAAa;EACrD;CAEF,GAAG,CAAC,CAAG,CAAC,GAGN,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,OAAD;EAAK,WAAW,EAAO;YAAvB;GACE,kBAAC,SAAD;IACE,MAAK;IACL,OAAO;IACP,WAAW,MAAU,EAAQ,EAAM,OAAO,KAAK;IAC/C,WAAW,EAAO;IAClB,UAAU,CAAC;IACX,KAAK;GACN,CAAA;GACA,CAAC,KACA,kBAAC,UAAD;IACE,MAAK;IACL,WAAW,EAAO;IAClB,eAAe,EAAY,EAAI;IAC/B,OAAO,EAAE,MAAM;IACf,cAAY,EAAE,KAAK,OAAO;IAC1B,qBAAmB,EAAE,KAAK,aAAa;cAEvC,kBAAC,GAAD;KAAM,MAAK;KAAS,MAAM;IAAK,CAAA;GACzB,CAAA;GAEV,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;IAAK,CAAA;GACxC,CAAA;GACR,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;IAAK,CAAA;GAC5B,CAAA;EACL;KACJ,KACC,kBAAC,OAAD;EAAK,WAAW,EAAO;YAAvB,CACE,kBAAC,GAAD;GAAQ,SAAS;GAAa,SAAS;GAAa,cAAY,EAAE,OAAO;GAAQ,MAAK;aACnF,EAAE,OAAO;EACJ,CAAA,GACR,kBAAC,GAAD;GAAQ,SAAS;GAAW,SAAS;GAAY,cAAY,EAAE,KAAK,OAAO;GAAc,MAAK;aAC3F,EAAE,MAAM;EACH,CAAA,CACL;GAEP,EAAA,CAAA;AAEN,CAAC"}
1
+ {"version":3,"file":"LinkContextMenu-C8ehPbP8.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,EAAe,GACnB,CAAC,GAAM,KAAW,EAAS,CAAG,GAC9B,CAAC,GAAU,KAAe,EAAS,EAAK,GACxC,IAAU,EAAyB,IAAI,GAEvC,UAAc;EAGlB,AAFA,EAAQ,CAAG,GACX,EAAY,EAAK,GACjB,EAAQ,SAAS,KAAK;CACxB,GAEM,UAAmB;EAEvB,AADA,EAAO,CAAI,GACX,EAAM;CACR,GAEM,UAAqB;EAGzB,AAFA,EAAS,GACT,EAAQ,EAAE,GACV,EAAM;CACR,GAEM,UAAoB;EAExB,AADA,EAAM,GACN,EAAQ;CACV,GAEM,UAAsB;EAC1B,OAAO,KAAK,EAAY,CAAG,GAAG,QAAQ;CACxC;CAqCA,OAnCA,EAAoB,UAAY,EAC9B,WAAW,EACb,EAAE,GAEF,QAAsB;EACpB,EAAQ,CAAG;EAEX,IAAM,KAAiB,MAAyB;GAa9C,AAZI,EAAM,WAAW,EAAM,YAAY,EAAM,QAAQ,QACnD,EAAM,eAAe,GACrB,EAAY,EAAI,GAChB,iBAAiB,EAAQ,SAAS,MAAM,GAAG,CAAC,IAG1C,EAAM,WAAW,EAAM,YAAY,EAAM,SAAS,aACpD,EAAM,eAAe,GACrB,EAAc,GACd,iBAAiB,EAAQ,SAAS,MAAM,GAAG,CAAC,IAG1C,EAAM,WAAW,EAAM,YAAY,EAAM,QAAQ,QACnD,EAAM,eAAe,GACrB,EAAa,GACb,iBAAiB,EAAQ,SAAS,MAAM,GAAG,CAAC;EAEhD;EAIA,OAFA,OAAO,iBAAiB,WAAW,CAAa,SAEnC;GACX,OAAO,oBAAoB,WAAW,CAAa;EACrD;CAEF,GAAG,CAAC,CAAG,CAAC,GAGN,kBAAA,GAAA,EAAA,UAAA,CACE,kBAAC,OAAD;EAAK,WAAW,EAAO;YAAvB;GACE,kBAAC,SAAD;IACE,MAAK;IACL,OAAO;IACP,WAAW,MAAU,EAAQ,EAAM,OAAO,KAAK;IAC/C,WAAW,EAAO;IAClB,UAAU,CAAC;IACX,KAAK;GACN,CAAA;GACA,CAAC,KACA,kBAAC,UAAD;IACE,MAAK;IACL,WAAW,EAAO;IAClB,eAAe,EAAY,EAAI;IAC/B,OAAO,EAAE,MAAM;IACf,cAAY,EAAE,KAAK,OAAO;IAC1B,qBAAmB,EAAE,KAAK,aAAa;cAEvC,kBAAC,GAAD;KAAM,MAAK;KAAS,MAAM;IAAK,CAAA;GACzB,CAAA;GAEV,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;IAAK,CAAA;GACxC,CAAA;GACR,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;IAAK,CAAA;GAC5B,CAAA;EACL;KACJ,KACC,kBAAC,OAAD;EAAK,WAAW,EAAO;YAAvB,CACE,kBAAC,GAAD;GAAQ,SAAS;GAAa,SAAS;GAAa,cAAY,EAAE,OAAO;GAAQ,MAAK;aACnF,EAAE,OAAO;EACJ,CAAA,GACR,kBAAC,GAAD;GAAQ,SAAS;GAAW,SAAS;GAAY,cAAY,EAAE,KAAK,OAAO;GAAc,MAAK;aAC3F,EAAE,MAAM;EACH,CAAA,CACL;GAEP,EAAA,CAAA;AAEN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"MenuLink-sK2_W2zs.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,EAAY,GAGvB,KAAe,MAAgB,EAAI,QAAQ,MAAM,EAAE,GAGnD,KAAoB,MAAe;EACvC,IAAM,IAAkB,EAAS,SAAS,MAAM,GAAG,EAAE,OAAO,OAAO,GAC7D,IAAe,EAAG,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE,MAAM,EAAE,EAAE,IACvD,IAAqB,EAAY,CAAY;EAEnD,OAAO,EAAgB,MAAM,MAAY,EAAY,CAAO,MAAM,CAAkB;CACtF;CAEA,OACE,kBAAC,GAAD;EACE,GAAI;EACJ,YAAY,EAAE,kBACZ,EAAW,EAAO,cAAc,GAC7B,EAAO,uBAAuB,IAAkB,KAAK,KAAY,EAAiB,EAAM,EAAY,EACvG,CAAC;CAEJ,CAAA;AAEL"}
1
+ {"version":3,"file":"MenuLink-sK2_W2zs.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,EAAY,GAGvB,KAAe,MAAgB,EAAI,QAAQ,MAAM,EAAE,GAGnD,KAAoB,MAAe;EACvC,IAAM,IAAkB,EAAS,SAAS,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO,GAC7D,IAAe,EAAG,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IACvD,IAAqB,EAAY,CAAY;EAEnD,OAAO,EAAgB,MAAM,MAAY,EAAY,CAAO,MAAM,CAAkB;CACtF;CAEA,OACE,kBAAC,GAAD;EACE,GAAI;EACJ,YAAY,EAAE,kBACZ,EAAW,EAAO,cAAc,GAC7B,EAAO,uBAAuB,IAAkB,KAAK,KAAY,EAAiB,EAAM,EAAY,EACvG,CAAC;CAEJ,CAAA;AAEL"}
@@ -1 +1 @@
1
- {"version":3,"file":"MetaDataList-Co9WCexh.js","names":[],"sources":["../src/components/MetaDataList/MetaDataList.module.css","../src/components/MetaDataList/MetaDataList.tsx"],"sourcesContent":[".meta-data-list {\n margin: 0;\n}\n\n.meta-data-list__item {\n display: flex;\n gap: 1rem;\n justify-content: space-between;\n padding: 0.5rem 0;\n}\n\n.meta-data-list__item:not(:last-of-type) {\n border-bottom: 1px solid var(--color-grey-400);\n}\n\n.meta-data-list__term {\n color: var(--color-grey-700);\n}\n\n.meta-data-list__description {\n align-items: center;\n display: inline-flex;\n font-weight: var(--semibold);\n margin: 0;\n text-align: right;\n}\n","import type { ReactNode } from 'react';\n\nimport styles from './MetaDataList.module.css';\n\nexport interface MetaDataListProps {\n /** A list of key value pairs to display. The value is be a [ReactNode](https://reactnative.dev/docs/react-node). */\n items: Record<string, ReactNode>;\n}\n\n/** Represents a component of a list of key value pairs. */\nexport const MetaDataList = ({ items }: MetaDataListProps) => (\n <dl className={styles['meta-data-list']}>\n {Object.entries(items).map(([term, description]) => (\n <div key={term} className={styles['meta-data-list__item']}>\n <dt className={styles['meta-data-list__term']}>{term}</dt>\n <dd className={styles['meta-data-list__description']}>{description}</dd>\n </div>\n ))}\n </dl>\n);\n"],"mappings":";;;;;;;GCUa,KAAgB,EAAE,eAC7B,kBAAC,MAAD;CAAI,WAAW,EAAO;WACnB,OAAO,QAAQ,CAAK,EAAE,KAAK,CAAC,GAAM,OACjC,kBAAC,OAAD;EAAgB,WAAW,EAAO;YAAlC,CACE,kBAAC,MAAD;GAAI,WAAW,EAAO;aAA0B;EAAS,CAAA,GACzD,kBAAC,MAAD;GAAI,WAAW,EAAO;aAAiC;EAAgB,CAAA,CACpE;IAHK,CAGL,CACN;AACC,CAAA"}
1
+ {"version":3,"file":"MetaDataList-Co9WCexh.js","names":[],"sources":["../src/components/MetaDataList/MetaDataList.module.css","../src/components/MetaDataList/MetaDataList.tsx"],"sourcesContent":[".meta-data-list {\n margin: 0;\n}\n\n.meta-data-list__item {\n display: flex;\n gap: 1rem;\n justify-content: space-between;\n padding: 0.5rem 0;\n}\n\n.meta-data-list__item:not(:last-of-type) {\n border-bottom: 1px solid var(--color-grey-400);\n}\n\n.meta-data-list__term {\n color: var(--color-grey-700);\n}\n\n.meta-data-list__description {\n align-items: center;\n display: inline-flex;\n font-weight: var(--semibold);\n margin: 0;\n text-align: right;\n}\n","import type { ReactNode } from 'react';\n\nimport styles from './MetaDataList.module.css';\n\nexport interface MetaDataListProps {\n /** A list of key value pairs to display. The value is be a [ReactNode](https://reactnative.dev/docs/react-node). */\n items: Record<string, ReactNode>;\n}\n\n/** Represents a component of a list of key value pairs. */\nexport const MetaDataList = ({ items }: MetaDataListProps) => (\n <dl className={styles['meta-data-list']}>\n {Object.entries(items).map(([term, description]) => (\n <div key={term} className={styles['meta-data-list__item']}>\n <dt className={styles['meta-data-list__term']}>{term}</dt>\n <dd className={styles['meta-data-list__description']}>{description}</dd>\n </div>\n ))}\n </dl>\n);\n"],"mappings":";;;;;;;GCUa,KAAgB,EAAE,eAC7B,kBAAC,MAAD;CAAI,WAAW,EAAO;WACnB,OAAO,QAAQ,CAAK,CAAC,CAAC,KAAK,CAAC,GAAM,OACjC,kBAAC,OAAD;EAAgB,WAAW,EAAO;YAAlC,CACE,kBAAC,MAAD;GAAI,WAAW,EAAO;aAA0B;EAAS,CAAA,GACzD,kBAAC,MAAD;GAAI,WAAW,EAAO;aAAiC;EAAgB,CAAA,CACpE;IAHK,CAGL,CACN;AACC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelectBox-D34qAgzc.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-D34qAgzc.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":"OverlayStepBar-BiC06Itd.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,CAAC,GACvB,qBACyB;CACzB,AAAI,IAAa,EAAW,UAC1B,QAAQ,MAAM,gDAAgD;CAGhE,IAAM,KAAwB,MAA8B;EAC1D,IAAM,IAAa,IAAY;EAE/B,IAAI,EAAoB,SAAS,CAAU,GACzC,OAAO;EAGT,IAAM,IAAqB,MAAM,KAAK,EAAE,QAAQ,EAAU,IAAI,GAAG,MAAU,IAAQ,CAAC,EAAE,QACnF,MAAS,CAAC,EAAoB,SAAS,CAAI,CAC9C,EAAE;EAEF,OAAO,OAAO,IAAqB,CAAC;CACtC;CAEA,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,iCACrC,CAAC;IACD,GAAK,KAAe,EAAE,eAAe,EAAY,IAAQ,CAAC,EAAE;IAC5D,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,CAAK;IAAQ,CAAA,GAC7F,kBAAC,QAAD;KACE,WAAW,EACT,EAAO,kCACP,EAAoB,SAAS,IAAQ,CAAC,KAAK,EAAO,qCACpD;eAEC;IACG,CAAA,CACA;;EACJ,GArBK,GAAG,EAAM,GAAG,GAqBjB,CACP;CACA,CAAA;AAET"}
1
+ {"version":3,"file":"OverlayStepBar-BiC06Itd.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,CAAC,GACvB,qBACyB;CACzB,AAAI,IAAa,EAAW,UAC1B,QAAQ,MAAM,gDAAgD;CAGhE,IAAM,KAAwB,MAA8B;EAC1D,IAAM,IAAa,IAAY;EAE/B,IAAI,EAAoB,SAAS,CAAU,GACzC,OAAO;EAGT,IAAM,IAAqB,MAAM,KAAK,EAAE,QAAQ,EAAU,IAAI,GAAG,MAAU,IAAQ,CAAC,CAAC,CAAC,QACnF,MAAS,CAAC,EAAoB,SAAS,CAAI,CAC9C,CAAC,CAAC;EAEF,OAAO,OAAO,IAAqB,CAAC;CACtC;CAEA,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,iCACrC,CAAC;IACD,GAAK,KAAe,EAAE,eAAe,EAAY,IAAQ,CAAC,EAAE;IAC5D,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,CAAK;IAAQ,CAAA,GAC7F,kBAAC,QAAD;KACE,WAAW,EACT,EAAO,kCACP,EAAoB,SAAS,IAAQ,CAAC,KAAK,EAAO,qCACpD;eAEC;IACG,CAAA,CACA;;EACJ,GArBK,GAAG,EAAM,GAAG,GAqBjB,CACP;CACA,CAAA;AAET"}
@@ -1,8 +1,8 @@
1
- import { t as e } from "./chunk-CWhphoD1.js";
2
- import { t } from "./LexicalComposerContext.prod-DumMmRBt.js";
3
- import { M as n, gt as r } from "./Lexical.prod-nAj5fF96.js";
4
- import { c as i } from "./LexicalUtils.prod-7S6iuu9A.js";
5
- import { t as a } from "./LexicalClipboard.prod-B9sWgdS2.js";
1
+ import { t as e } from "./rolldown-runtime-CWhphoD1.js";
2
+ import { t } from "./LexicalComposerContext.prod-D4HOlWII.js";
3
+ import { Dn as n, K as r } from "./Lexical.prod-Dy5aDppc.js";
4
+ import { a as i } from "./LexicalUtils.prod-CjGUKarD.js";
5
+ import { o as a } from "./LexicalClipboard.prod-CS8a49uL.js";
6
6
  import { useEffect as o } from "react";
7
7
  //#region node_modules/.pnpm/@staartwind.nl+lexical-paste-from-word@1.0.2/node_modules/@staartwind.nl/lexical-paste-from-word/dist/normalizer.js
8
8
  var s = /* @__PURE__ */ e(((e) => {
@@ -232,4 +232,4 @@ var s = /* @__PURE__ */ e(((e) => {
232
232
  //#endregion
233
233
  export { l as t };
234
234
 
235
- //# sourceMappingURL=PasteHandlerPlugin-DyTXcFsj.js.map
235
+ //# sourceMappingURL=PasteHandlerPlugin-CSo_lOE8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PasteHandlerPlugin-DyTXcFsj.js","names":[],"sources":["../node_modules/.pnpm/@staartwind.nl+lexical-paste-from-word@1.0.2/node_modules/@staartwind.nl/lexical-paste-from-word/dist/normalizer.js","../node_modules/.pnpm/@staartwind.nl+lexical-paste-from-word@1.0.2/node_modules/@staartwind.nl/lexical-paste-from-word/dist/index.js","../src/components/RteEditor/Plugins/PasteHandlerPlugin/PasteHandlerPlugin.tsx"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.normalizeSpacerunSpans = exports.normalizeSpacing = exports.parseHtml = exports.MSWordNormalizer = void 0;\nconst MS_WORD_MATCHES = [\n /<meta\\s*name=\"?generator\"?\\s*content=\"?microsoft\\s*word\\s*\\d+\"?\\/?>/i,\n /xmlns:o=\"urn:schemas-microsoft-com/i\n];\nclass MSWordNormalizer {\n isActive(htmlString) {\n return MS_WORD_MATCHES.some(regex => regex.test(htmlString));\n }\n normalize(htmlString) {\n const { bodyString, stylesString } = parseHtml(htmlString);\n const doc = new DOMParser().parseFromString(bodyString, 'text/html');\n this.transformListItemLikeLElementsIntoLists(doc, stylesString);\n this.removeMSAttributes(doc);\n return doc.body.innerHTML;\n }\n findAllItemLikeElements(doc) {\n const items = doc.querySelectorAll('*');\n const res = [];\n for (const item of items) {\n const tagName = item.tagName.toLowerCase();\n // Find all the possible list items\n if (!['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'li', 'div'].includes(tagName) || !(item instanceof HTMLElement)) {\n continue;\n }\n const style = convertStyleToObject(item.getAttribute('style') || '');\n // Keep items that are part of a list.\n if ('mso-list' in style) {\n if (!item.parentElement)\n continue;\n if (isList(item.parentElement))\n continue;\n const itemData = getListItemData(style);\n res.push(Object.assign(Object.assign({}, itemData), { element: item }));\n }\n }\n return res;\n }\n transformListItemLikeLElementsIntoLists(doc, stylesString) {\n var _a, _b, _c, _d, _e, _f, _g;\n const itemLikeElements = this.findAllItemLikeElements(doc);\n if (!itemLikeElements.length) {\n return;\n }\n const encounteredLists = {};\n const stack = [];\n for (const itemLikeElement of itemLikeElements) {\n if (itemLikeElement.indent != null) {\n // Reset the current stack if the previous used list does not continue with itemLikeElement\n if (!isListContinuation(itemLikeElement)) {\n stack.length = 0;\n }\n // Combined list ID for addressing encounter lists counters.\n const originalListId = `${itemLikeElement.id}:${itemLikeElement.indent}`;\n // Normalized list item indentation.\n const indent = Math.min(itemLikeElement.indent - 1, stack.length);\n // Trimming of the list stack on list ID change.\n if (indent < stack.length && ((_a = stack[indent]) === null || _a === void 0 ? void 0 : _a.id) !== itemLikeElement.id) {\n stack.length = indent;\n }\n // Trimming of the list stack on lower indent list encountered.\n if (indent < stack.length - 1) {\n stack.length = indent + 1;\n }\n else {\n const listStyle = detectListStyle(itemLikeElement, stylesString);\n // Create a new OL/UL if required (greater indent or different list type).\n if (indent > stack.length - 1 || ((_b = stack[indent]) === null || _b === void 0 ? void 0 : _b.listElement.tagName.toLowerCase()) != listStyle.type) {\n if (indent == 0 &&\n listStyle.type == 'ol' &&\n itemLikeElement.id !== undefined &&\n encounteredLists[originalListId]) {\n listStyle.startIndex = (_c = encounteredLists[originalListId]) !== null && _c !== void 0 ? _c : null;\n }\n const listElement = createNewEmptyList(listStyle, false);\n // Insert the new OL/UL.\n if (stack.length == 0) {\n const parent = itemLikeElement.element.parentNode;\n const index = Array.from(parent.children).indexOf(itemLikeElement.element) + 1;\n if (index === parent.children.length) {\n parent.appendChild(listElement);\n }\n else {\n parent.insertBefore(listElement, itemLikeElement.element);\n }\n }\n else {\n const parentListItems = (_d = stack[indent - 1]) === null || _d === void 0 ? void 0 : _d.listItemElements;\n if (parentListItems) {\n (_e = parentListItems[parentListItems.length - 1]) === null || _e === void 0 ? void 0 : _e.appendChild(listElement);\n }\n }\n // Update the list stack for other items to reference.\n stack[indent] = Object.assign(Object.assign({}, itemLikeElement), { listElement, listItemElements: [] });\n // Prepare list counter for start index.\n if (indent == 0 && itemLikeElement.id !== undefined) {\n encounteredLists[originalListId] = listStyle.startIndex || 1;\n }\n }\n }\n // Use LI if it is already it or create a new LI element.\n const listItem = itemLikeElement.element.tagName.toLowerCase() == 'li' ? itemLikeElement.element : document.createElement('li');\n // Append the LI to OL/UL.\n (_f = stack[indent]) === null || _f === void 0 ? void 0 : _f.listElement.appendChild(listItem);\n (_g = stack[indent]) === null || _g === void 0 ? void 0 : _g.listItemElements.push(listItem);\n // Increment list counter.\n if (indent == 0 && itemLikeElement.id !== undefined) {\n encounteredLists[originalListId]++;\n }\n // Append list block to LI.\n if (itemLikeElement.element != listItem) {\n listItem.appendChild(itemLikeElement.element);\n }\n // Clean list block.\n removeMsoListIgnoreSpans(itemLikeElement.element);\n }\n }\n }\n removeMSAttributes(doc) {\n const items = doc.querySelectorAll('*');\n const elementsToUnwrap = [];\n for (const item of items) {\n // Eliminate all classes that include mso.\n for (const className of item.classList) {\n if (/\\bmso/gi.exec(className)) {\n item.classList.remove(className);\n }\n }\n // Eliminate all useless mso styling\n if (item instanceof HTMLElement) {\n removeMSOStyles(item);\n }\n // Push word specific elements to an array\n if (item.tagName === 'W:SDT' || item.tagName === 'W:SDTPR' && isElementEmpty(item) || item.tagName === 'O:P' && isElementEmpty(item)) {\n elementsToUnwrap.push(item);\n }\n }\n // Eliminate word specific elements\n for (const item of elementsToUnwrap) {\n const itemParent = item.parentNode;\n itemParent.removeChild(item);\n }\n }\n}\nexports.MSWordNormalizer = MSWordNormalizer;\nfunction parseHtml(htmlString) {\n const domParser = new DOMParser();\n // Remove Word specific \"if comments\" so content inside is not omitted by the parser.\n htmlString = htmlString.replace(/<!--\\[if gte vml 1]>/g, '');\n // Clean the <head> section of MS Windows specific tags. See https://github.com/ckeditor/ckeditor5/issues/15333.\n // The regular expression matches the <o:SmartTagType> tag with optional attributes (with or without values).\n htmlString = htmlString.replace(/<o:SmartTagType(?:\\s+[^\\s>=]+(?:=\"[^\"]*\")?)*\\s*\\/?>/gi, '');\n const normalizedHtml = normalizeSpacing(cleanContentAfterBody(htmlString));\n // Parse htmlString as native Document object.\n const htmlDocument = domParser.parseFromString(normalizedHtml, 'text/html');\n normalizeSpacerunSpans(htmlDocument);\n // Get `innerHTML` first as transforming to View modifies the source document.\n const bodyString = htmlDocument.body.innerHTML;\n const stylesString = extractStyles(htmlDocument);\n return {\n bodyString,\n stylesString\n };\n}\nexports.parseHtml = parseHtml;\nfunction extractStyles(htmlDocument) {\n const styles = [];\n const stylesString = [];\n const styleTags = Array.from(htmlDocument.getElementsByTagName('style'));\n for (const style of styleTags) {\n if (style.sheet && style.sheet.cssRules && style.sheet.cssRules.length) {\n styles.push(style.sheet);\n stylesString.push(style.innerHTML);\n }\n }\n return stylesString.join(' ');\n}\nfunction normalizeSpacing(htmlString) {\n // Run normalizeSafariSpaceSpans() two times to cover nested spans.\n return normalizeSafariSpaceSpans(normalizeSafariSpaceSpans(htmlString))\n // Remove all \\r\\n from \"spacerun spans\" so the last replace line doesn't strip all whitespaces.\n .replace(/(<span\\s+style=['\"]mso-spacerun:yes['\"]>[^\\S\\r\\n]*?)[\\r\\n]+([^\\S\\r\\n]*<\\/span>)/g, '$1$2')\n .replace(/<span\\s+style=['\"]mso-spacerun:yes['\"]><\\/span>/g, '')\n .replace(/(<span\\s+style=['\"]letter-spacing:[^'\"]+?['\"]>)[\\r\\n]+(<\\/span>)/g, '$1 $2')\n .replace(/ <\\//g, '\\u00A0</')\n .replace(/ <o:p><\\/o:p>/g, '\\u00A0<o:p></o:p>')\n // Remove <o:p> block filler from empty paragraph. Safari uses \\u00A0 instead of &nbsp;.\n .replace(/<o:p>(&nbsp;|\\u00A0)<\\/o:p>/g, '')\n // Remove all whitespaces when they contain any \\r or \\n.\n .replace(/>([^\\S\\r\\n]*[\\r\\n]\\s*)</g, '><');\n}\nexports.normalizeSpacing = normalizeSpacing;\nfunction normalizeSafariSpaceSpans(htmlString) {\n return htmlString.replace(/<span(?: class=\"Apple-converted-space\"|)>(\\s+)<\\/span>/g, (fullMatch, spaces) => {\n return spaces.length === 1 ? ' ' : Array(spaces.length + 1).join('\\u00A0 ').substring(0, spaces.length);\n });\n}\nfunction normalizeSpacerunSpans(htmlDocument) {\n htmlDocument.querySelectorAll('span[style*=spacerun]').forEach(el => {\n const htmlElement = el;\n const innerTextLength = htmlElement.innerText.length || 0;\n htmlElement.innerText = Array(innerTextLength + 1).join('\\u00A0 ').substring(0, innerTextLength);\n });\n}\nexports.normalizeSpacerunSpans = normalizeSpacerunSpans;\nfunction cleanContentAfterBody(htmlString) {\n const bodyCloseTag = '</body>';\n const htmlCloseTag = '</html>';\n const bodyCloseIndex = htmlString.indexOf(bodyCloseTag);\n if (bodyCloseIndex < 0) {\n return htmlString;\n }\n const htmlCloseIndex = htmlString.indexOf(htmlCloseTag, bodyCloseIndex + bodyCloseTag.length);\n return htmlString.substring(0, bodyCloseIndex + bodyCloseTag.length) +\n (htmlCloseIndex >= 0 ? htmlString.substring(htmlCloseIndex) : '');\n}\nfunction convertStyleToObject(styleString) {\n const styleObject = {};\n if (!styleString) {\n return styleObject;\n }\n // Split the style string into individual declarations\n const declarations = styleString.split(';').map(declaration => declaration.trim());\n // Iterate over each declaration and split it into property and value\n declarations.forEach(declaration => {\n const [property, value] = declaration.split(':').map(part => part.trim());\n if (property && value) {\n // Add the property and value to the style object\n styleObject[property] = value;\n }\n });\n return styleObject;\n}\nfunction isElementEmpty(element) {\n return !element.textContent && !element.innerHTML.trim();\n}\nfunction removeMSOStyles(element) {\n // Get the current style string of the paragraph node\n const currentStyle = element.getAttribute('style') || '';\n // Parse the style string to extract individual style properties\n const styleProperties = currentStyle.split(';').map(property => property.trim());\n // Remove the 'mso-bidi-font-family' property from the list of style properties\n const filteredProperties = styleProperties.filter(property => {\n var _a;\n const [key] = property.split(':');\n return !(/\\bmso/gi.exec((_a = key === null || key === void 0 ? void 0 : key.toLowerCase()) !== null && _a !== void 0 ? _a : ''));\n });\n // Reconstruct the style string without the removed property\n const updatedStyle = filteredProperties.join(';');\n // Set the updated style string back to the paragraph node\n element.setAttribute('style', updatedStyle);\n}\nfunction getListItemData(styles) {\n var _a;\n const listStyle = styles['mso-list'];\n if (listStyle === undefined) {\n return {};\n }\n const idMatch = listStyle.match(/(^|\\s{1,100})l(\\d+)/i);\n const orderMatch = listStyle.match(/\\s{0,100}lfo(\\d+)/i);\n const indentMatch = listStyle.match(/\\s{0,100}level(\\d+)/i);\n if (idMatch && orderMatch && indentMatch) {\n return {\n id: idMatch[2],\n order: orderMatch[1],\n indent: parseInt((_a = indentMatch[1]) !== null && _a !== void 0 ? _a : '')\n };\n }\n return {\n indent: 1\n };\n}\nfunction detectListStyle(listLikeItem, stylesString) {\n const listStyleRegexp = new RegExp(`@list l${listLikeItem.id}:level${listLikeItem.indent}\\\\s*({[^}]*)`, 'gi');\n const listStyleTypeRegex = /mso-level-number-format:([^;]{0,100});/gi;\n const listStartIndexRegex = /mso-level-start-at:\\s{0,100}([0-9]{0,10})\\s{0,100};/gi;\n const legalStyleListRegex = new RegExp(`@list\\\\s+l${listLikeItem.id}:level\\\\d\\\\s*{[^{]*mso-level-text:\"%\\\\d\\\\\\\\.`, 'gi');\n const multiLevelNumberFormatTypeRegex = new RegExp(`@list l${listLikeItem.id}:level\\\\d\\\\s*{[^{]*mso-level-number-format:`, 'gi');\n const legalStyleListMatch = legalStyleListRegex.exec(stylesString);\n const multiLevelNumberFormatMatch = multiLevelNumberFormatTypeRegex.exec(stylesString);\n // Multi level lists in Word have mso-level-number-format attribute except legal lists,\n // so we used that. If list has legal list match and doesn't has mso-level-number-format\n // then this is legal-list.\n const islegalStyleList = legalStyleListMatch && !multiLevelNumberFormatMatch;\n const listStyleMatch = listStyleRegexp.exec(stylesString);\n let listStyleType = 'decimal'; // Decimal is default one.\n let type = 'ol'; // <ol> is default list.\n let startIndex = null;\n if (listStyleMatch && listStyleMatch[1]) {\n const listStyleTypeMatch = listStyleTypeRegex.exec(listStyleMatch[1]);\n if (listStyleTypeMatch && listStyleTypeMatch[1]) {\n listStyleType = listStyleTypeMatch[1].trim();\n type = listStyleType !== 'bullet' && listStyleType !== 'image' ? 'ol' : 'ul';\n }\n // Styles for the numbered lists are always defined in the Word CSS stylesheet.\n // Unordered lists MAY contain a value for the Word CSS definition `mso-level-text` but sometimes\n // this tag is missing. And because of that, we cannot depend on that. We need to predict the list style value\n // based on the list style marker element.\n if (listStyleType === 'bullet') {\n const bulletedStyle = findBulletedListStyle(listLikeItem.element);\n if (bulletedStyle) {\n listStyleType = bulletedStyle;\n }\n }\n else {\n const listStartIndexMatch = listStartIndexRegex.exec(listStyleMatch[1]);\n if (listStartIndexMatch && listStartIndexMatch[1]) {\n startIndex = parseInt(listStartIndexMatch[1]);\n }\n }\n if (islegalStyleList) {\n type = 'ol';\n }\n }\n return {\n type,\n startIndex,\n style: mapListStyleDefinition(listStyleType),\n isLegalStyleList: islegalStyleList\n };\n}\nfunction findBulletedListStyle(element) {\n // https://github.com/ckeditor/ckeditor5/issues/15964\n if (element.tagName.toLowerCase() == 'li' && element.parentElement.tagName.toLowerCase() == 'ul' && element.parentElement.hasAttribute('type')) {\n return element.parentElement.getAttribute('type');\n }\n const listMarkerElement = findListMarkerNode(element);\n if (!listMarkerElement) {\n return null;\n }\n const listMarker = listMarkerElement.textContent;\n if (listMarker === 'o') {\n return 'circle';\n }\n else if ((listMarker !== null && listMarker !== void 0 ? listMarker : '').charCodeAt(0) === 183) {\n return 'disc';\n }\n // Word returns '§' instead of '■' for the square list style.\n else if (listMarker === '§') {\n return 'square';\n }\n return null;\n}\nfunction findListMarkerNode(element) {\n var _a;\n // If the first child is a text node, it is the data for the element.\n // The list-style marker is not present here.\n if (((_a = Array.from(element.children)[0]) === null || _a === void 0 ? void 0 : _a.tagName.toLowerCase()) === '#text') {\n return null;\n }\n for (const childNode of Array.from(element.children)) {\n // The list-style marker will be inside the `<span>` element. Let's ignore all non-span elements.\n // It may happen that the `<a>` element is added as the first child. Most probably, it's an anchor element.\n if (!['element', 'span'].includes(childNode.tagName.toLowerCase())) {\n continue;\n }\n return childNode;\n }\n return null;\n}\nfunction mapListStyleDefinition(value) {\n if (value.startsWith('arabic-leading-zero')) {\n return 'decimal-leading-zero';\n }\n switch (value) {\n case 'alpha-upper':\n return 'upper-alpha';\n case 'alpha-lower':\n return 'lower-alpha';\n case 'roman-upper':\n return 'upper-roman';\n case 'roman-lower':\n return 'lower-roman';\n case 'circle':\n case 'disc':\n case 'square':\n return value;\n default:\n return null;\n }\n}\nfunction createNewEmptyList(listStyle, hasMultiLevelListPlugin) {\n const list = document.createElement(listStyle.type);\n // We do not support modifying the marker for a particular list item.\n // Set the value for the `list-style-type` property directly to the list container.\n if (listStyle.style) {\n list.style.setProperty('list-style-type', listStyle.style);\n }\n if (listStyle.startIndex && listStyle.startIndex > 1) {\n list.setAttribute('start', listStyle.startIndex.toString());\n }\n if (listStyle.isLegalStyleList && hasMultiLevelListPlugin) {\n list.classList.add('legal-list');\n }\n return list;\n}\nfunction removeMsoListIgnoreSpans(parentElement) {\n // Get all <span> elements inside the parentElement\n const spans = parentElement.querySelectorAll('span');\n // Iterate over each <span> element\n spans.forEach(span => {\n var _a;\n // Get the value of the 'style' attribute\n const style = span.getAttribute('style');\n // Check if the 'style' attribute contains 'mso-list: Ignore'\n if (style && style.includes('mso-list:Ignore')) {\n // Remove the <span> element\n (_a = span.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(span);\n }\n });\n}\nfunction isListContinuation(currentItem) {\n const previousSibling = currentItem.element.previousSibling;\n if (!previousSibling) {\n // If it's a li inside ul or ol like in here: https://github.com/ckeditor/ckeditor5/issues/15964.\n return isList(currentItem.element.parentElement);\n }\n // Even with the same id the list does not have to be continuous (#43).\n // @ts-expect-error\n return isList(previousSibling);\n}\nconst isList = (element) => ['ul', 'ol'].includes(element.tagName.toLowerCase());\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MSWordNormalizer = void 0;\nconst normalizer_1 = require(\"./normalizer\");\nObject.defineProperty(exports, \"MSWordNormalizer\", { enumerable: true, get: function () { return normalizer_1.MSWordNormalizer; } });\n","import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { useEffect } from 'react';\nimport { $getSelection, COMMAND_PRIORITY_CRITICAL, type CommandPayloadType, PASTE_COMMAND } from 'lexical';\nimport { objectKlassEquals } from '@lexical/utils';\nimport { $insertDataTransferForRichText } from '@lexical/clipboard';\nimport { MSWordNormalizer } from '@staartwind.nl/lexical-paste-from-word';\n\nexport const PasteHandlerPlugin = () => {\n const [editor] = useLexicalComposerContext();\n\n const handlePaste = (event: CommandPayloadType<typeof PASTE_COMMAND>) => {\n event.preventDefault();\n editor.update(() => {\n const selection = $getSelection();\n const clipboardData =\n objectKlassEquals(event, InputEvent) || objectKlassEquals(event, KeyboardEvent) ? null : event.clipboardData;\n if (clipboardData != null && selection !== null) {\n const content = clipboardData.getData('text/html') || clipboardData.getData('text/plain');\n const newData = new DataTransfer();\n const wordNormalizer = new MSWordNormalizer();\n newData.setData('text/html', content);\n if (wordNormalizer.isActive(content)) {\n newData.setData('text/html', wordNormalizer.normalize(content));\n }\n $insertDataTransferForRichText(newData, selection, editor);\n }\n });\n };\n\n useEffect(() => {\n const removePasteListener = editor.registerCommand(\n PASTE_COMMAND,\n (event) => {\n if (event instanceof ClipboardEvent) {\n handlePaste(event);\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_CRITICAL\n );\n\n return () => {\n removePasteListener();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editor]);\n\n return null;\n};\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
1
+ {"version":3,"file":"PasteHandlerPlugin-CSo_lOE8.js","names":[],"sources":["../node_modules/.pnpm/@staartwind.nl+lexical-paste-from-word@1.0.2/node_modules/@staartwind.nl/lexical-paste-from-word/dist/normalizer.js","../node_modules/.pnpm/@staartwind.nl+lexical-paste-from-word@1.0.2/node_modules/@staartwind.nl/lexical-paste-from-word/dist/index.js","../src/components/RteEditor/Plugins/PasteHandlerPlugin/PasteHandlerPlugin.tsx"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.normalizeSpacerunSpans = exports.normalizeSpacing = exports.parseHtml = exports.MSWordNormalizer = void 0;\nconst MS_WORD_MATCHES = [\n /<meta\\s*name=\"?generator\"?\\s*content=\"?microsoft\\s*word\\s*\\d+\"?\\/?>/i,\n /xmlns:o=\"urn:schemas-microsoft-com/i\n];\nclass MSWordNormalizer {\n isActive(htmlString) {\n return MS_WORD_MATCHES.some(regex => regex.test(htmlString));\n }\n normalize(htmlString) {\n const { bodyString, stylesString } = parseHtml(htmlString);\n const doc = new DOMParser().parseFromString(bodyString, 'text/html');\n this.transformListItemLikeLElementsIntoLists(doc, stylesString);\n this.removeMSAttributes(doc);\n return doc.body.innerHTML;\n }\n findAllItemLikeElements(doc) {\n const items = doc.querySelectorAll('*');\n const res = [];\n for (const item of items) {\n const tagName = item.tagName.toLowerCase();\n // Find all the possible list items\n if (!['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'li', 'div'].includes(tagName) || !(item instanceof HTMLElement)) {\n continue;\n }\n const style = convertStyleToObject(item.getAttribute('style') || '');\n // Keep items that are part of a list.\n if ('mso-list' in style) {\n if (!item.parentElement)\n continue;\n if (isList(item.parentElement))\n continue;\n const itemData = getListItemData(style);\n res.push(Object.assign(Object.assign({}, itemData), { element: item }));\n }\n }\n return res;\n }\n transformListItemLikeLElementsIntoLists(doc, stylesString) {\n var _a, _b, _c, _d, _e, _f, _g;\n const itemLikeElements = this.findAllItemLikeElements(doc);\n if (!itemLikeElements.length) {\n return;\n }\n const encounteredLists = {};\n const stack = [];\n for (const itemLikeElement of itemLikeElements) {\n if (itemLikeElement.indent != null) {\n // Reset the current stack if the previous used list does not continue with itemLikeElement\n if (!isListContinuation(itemLikeElement)) {\n stack.length = 0;\n }\n // Combined list ID for addressing encounter lists counters.\n const originalListId = `${itemLikeElement.id}:${itemLikeElement.indent}`;\n // Normalized list item indentation.\n const indent = Math.min(itemLikeElement.indent - 1, stack.length);\n // Trimming of the list stack on list ID change.\n if (indent < stack.length && ((_a = stack[indent]) === null || _a === void 0 ? void 0 : _a.id) !== itemLikeElement.id) {\n stack.length = indent;\n }\n // Trimming of the list stack on lower indent list encountered.\n if (indent < stack.length - 1) {\n stack.length = indent + 1;\n }\n else {\n const listStyle = detectListStyle(itemLikeElement, stylesString);\n // Create a new OL/UL if required (greater indent or different list type).\n if (indent > stack.length - 1 || ((_b = stack[indent]) === null || _b === void 0 ? void 0 : _b.listElement.tagName.toLowerCase()) != listStyle.type) {\n if (indent == 0 &&\n listStyle.type == 'ol' &&\n itemLikeElement.id !== undefined &&\n encounteredLists[originalListId]) {\n listStyle.startIndex = (_c = encounteredLists[originalListId]) !== null && _c !== void 0 ? _c : null;\n }\n const listElement = createNewEmptyList(listStyle, false);\n // Insert the new OL/UL.\n if (stack.length == 0) {\n const parent = itemLikeElement.element.parentNode;\n const index = Array.from(parent.children).indexOf(itemLikeElement.element) + 1;\n if (index === parent.children.length) {\n parent.appendChild(listElement);\n }\n else {\n parent.insertBefore(listElement, itemLikeElement.element);\n }\n }\n else {\n const parentListItems = (_d = stack[indent - 1]) === null || _d === void 0 ? void 0 : _d.listItemElements;\n if (parentListItems) {\n (_e = parentListItems[parentListItems.length - 1]) === null || _e === void 0 ? void 0 : _e.appendChild(listElement);\n }\n }\n // Update the list stack for other items to reference.\n stack[indent] = Object.assign(Object.assign({}, itemLikeElement), { listElement, listItemElements: [] });\n // Prepare list counter for start index.\n if (indent == 0 && itemLikeElement.id !== undefined) {\n encounteredLists[originalListId] = listStyle.startIndex || 1;\n }\n }\n }\n // Use LI if it is already it or create a new LI element.\n const listItem = itemLikeElement.element.tagName.toLowerCase() == 'li' ? itemLikeElement.element : document.createElement('li');\n // Append the LI to OL/UL.\n (_f = stack[indent]) === null || _f === void 0 ? void 0 : _f.listElement.appendChild(listItem);\n (_g = stack[indent]) === null || _g === void 0 ? void 0 : _g.listItemElements.push(listItem);\n // Increment list counter.\n if (indent == 0 && itemLikeElement.id !== undefined) {\n encounteredLists[originalListId]++;\n }\n // Append list block to LI.\n if (itemLikeElement.element != listItem) {\n listItem.appendChild(itemLikeElement.element);\n }\n // Clean list block.\n removeMsoListIgnoreSpans(itemLikeElement.element);\n }\n }\n }\n removeMSAttributes(doc) {\n const items = doc.querySelectorAll('*');\n const elementsToUnwrap = [];\n for (const item of items) {\n // Eliminate all classes that include mso.\n for (const className of item.classList) {\n if (/\\bmso/gi.exec(className)) {\n item.classList.remove(className);\n }\n }\n // Eliminate all useless mso styling\n if (item instanceof HTMLElement) {\n removeMSOStyles(item);\n }\n // Push word specific elements to an array\n if (item.tagName === 'W:SDT' || item.tagName === 'W:SDTPR' && isElementEmpty(item) || item.tagName === 'O:P' && isElementEmpty(item)) {\n elementsToUnwrap.push(item);\n }\n }\n // Eliminate word specific elements\n for (const item of elementsToUnwrap) {\n const itemParent = item.parentNode;\n itemParent.removeChild(item);\n }\n }\n}\nexports.MSWordNormalizer = MSWordNormalizer;\nfunction parseHtml(htmlString) {\n const domParser = new DOMParser();\n // Remove Word specific \"if comments\" so content inside is not omitted by the parser.\n htmlString = htmlString.replace(/<!--\\[if gte vml 1]>/g, '');\n // Clean the <head> section of MS Windows specific tags. See https://github.com/ckeditor/ckeditor5/issues/15333.\n // The regular expression matches the <o:SmartTagType> tag with optional attributes (with or without values).\n htmlString = htmlString.replace(/<o:SmartTagType(?:\\s+[^\\s>=]+(?:=\"[^\"]*\")?)*\\s*\\/?>/gi, '');\n const normalizedHtml = normalizeSpacing(cleanContentAfterBody(htmlString));\n // Parse htmlString as native Document object.\n const htmlDocument = domParser.parseFromString(normalizedHtml, 'text/html');\n normalizeSpacerunSpans(htmlDocument);\n // Get `innerHTML` first as transforming to View modifies the source document.\n const bodyString = htmlDocument.body.innerHTML;\n const stylesString = extractStyles(htmlDocument);\n return {\n bodyString,\n stylesString\n };\n}\nexports.parseHtml = parseHtml;\nfunction extractStyles(htmlDocument) {\n const styles = [];\n const stylesString = [];\n const styleTags = Array.from(htmlDocument.getElementsByTagName('style'));\n for (const style of styleTags) {\n if (style.sheet && style.sheet.cssRules && style.sheet.cssRules.length) {\n styles.push(style.sheet);\n stylesString.push(style.innerHTML);\n }\n }\n return stylesString.join(' ');\n}\nfunction normalizeSpacing(htmlString) {\n // Run normalizeSafariSpaceSpans() two times to cover nested spans.\n return normalizeSafariSpaceSpans(normalizeSafariSpaceSpans(htmlString))\n // Remove all \\r\\n from \"spacerun spans\" so the last replace line doesn't strip all whitespaces.\n .replace(/(<span\\s+style=['\"]mso-spacerun:yes['\"]>[^\\S\\r\\n]*?)[\\r\\n]+([^\\S\\r\\n]*<\\/span>)/g, '$1$2')\n .replace(/<span\\s+style=['\"]mso-spacerun:yes['\"]><\\/span>/g, '')\n .replace(/(<span\\s+style=['\"]letter-spacing:[^'\"]+?['\"]>)[\\r\\n]+(<\\/span>)/g, '$1 $2')\n .replace(/ <\\//g, '\\u00A0</')\n .replace(/ <o:p><\\/o:p>/g, '\\u00A0<o:p></o:p>')\n // Remove <o:p> block filler from empty paragraph. Safari uses \\u00A0 instead of &nbsp;.\n .replace(/<o:p>(&nbsp;|\\u00A0)<\\/o:p>/g, '')\n // Remove all whitespaces when they contain any \\r or \\n.\n .replace(/>([^\\S\\r\\n]*[\\r\\n]\\s*)</g, '><');\n}\nexports.normalizeSpacing = normalizeSpacing;\nfunction normalizeSafariSpaceSpans(htmlString) {\n return htmlString.replace(/<span(?: class=\"Apple-converted-space\"|)>(\\s+)<\\/span>/g, (fullMatch, spaces) => {\n return spaces.length === 1 ? ' ' : Array(spaces.length + 1).join('\\u00A0 ').substring(0, spaces.length);\n });\n}\nfunction normalizeSpacerunSpans(htmlDocument) {\n htmlDocument.querySelectorAll('span[style*=spacerun]').forEach(el => {\n const htmlElement = el;\n const innerTextLength = htmlElement.innerText.length || 0;\n htmlElement.innerText = Array(innerTextLength + 1).join('\\u00A0 ').substring(0, innerTextLength);\n });\n}\nexports.normalizeSpacerunSpans = normalizeSpacerunSpans;\nfunction cleanContentAfterBody(htmlString) {\n const bodyCloseTag = '</body>';\n const htmlCloseTag = '</html>';\n const bodyCloseIndex = htmlString.indexOf(bodyCloseTag);\n if (bodyCloseIndex < 0) {\n return htmlString;\n }\n const htmlCloseIndex = htmlString.indexOf(htmlCloseTag, bodyCloseIndex + bodyCloseTag.length);\n return htmlString.substring(0, bodyCloseIndex + bodyCloseTag.length) +\n (htmlCloseIndex >= 0 ? htmlString.substring(htmlCloseIndex) : '');\n}\nfunction convertStyleToObject(styleString) {\n const styleObject = {};\n if (!styleString) {\n return styleObject;\n }\n // Split the style string into individual declarations\n const declarations = styleString.split(';').map(declaration => declaration.trim());\n // Iterate over each declaration and split it into property and value\n declarations.forEach(declaration => {\n const [property, value] = declaration.split(':').map(part => part.trim());\n if (property && value) {\n // Add the property and value to the style object\n styleObject[property] = value;\n }\n });\n return styleObject;\n}\nfunction isElementEmpty(element) {\n return !element.textContent && !element.innerHTML.trim();\n}\nfunction removeMSOStyles(element) {\n // Get the current style string of the paragraph node\n const currentStyle = element.getAttribute('style') || '';\n // Parse the style string to extract individual style properties\n const styleProperties = currentStyle.split(';').map(property => property.trim());\n // Remove the 'mso-bidi-font-family' property from the list of style properties\n const filteredProperties = styleProperties.filter(property => {\n var _a;\n const [key] = property.split(':');\n return !(/\\bmso/gi.exec((_a = key === null || key === void 0 ? void 0 : key.toLowerCase()) !== null && _a !== void 0 ? _a : ''));\n });\n // Reconstruct the style string without the removed property\n const updatedStyle = filteredProperties.join(';');\n // Set the updated style string back to the paragraph node\n element.setAttribute('style', updatedStyle);\n}\nfunction getListItemData(styles) {\n var _a;\n const listStyle = styles['mso-list'];\n if (listStyle === undefined) {\n return {};\n }\n const idMatch = listStyle.match(/(^|\\s{1,100})l(\\d+)/i);\n const orderMatch = listStyle.match(/\\s{0,100}lfo(\\d+)/i);\n const indentMatch = listStyle.match(/\\s{0,100}level(\\d+)/i);\n if (idMatch && orderMatch && indentMatch) {\n return {\n id: idMatch[2],\n order: orderMatch[1],\n indent: parseInt((_a = indentMatch[1]) !== null && _a !== void 0 ? _a : '')\n };\n }\n return {\n indent: 1\n };\n}\nfunction detectListStyle(listLikeItem, stylesString) {\n const listStyleRegexp = new RegExp(`@list l${listLikeItem.id}:level${listLikeItem.indent}\\\\s*({[^}]*)`, 'gi');\n const listStyleTypeRegex = /mso-level-number-format:([^;]{0,100});/gi;\n const listStartIndexRegex = /mso-level-start-at:\\s{0,100}([0-9]{0,10})\\s{0,100};/gi;\n const legalStyleListRegex = new RegExp(`@list\\\\s+l${listLikeItem.id}:level\\\\d\\\\s*{[^{]*mso-level-text:\"%\\\\d\\\\\\\\.`, 'gi');\n const multiLevelNumberFormatTypeRegex = new RegExp(`@list l${listLikeItem.id}:level\\\\d\\\\s*{[^{]*mso-level-number-format:`, 'gi');\n const legalStyleListMatch = legalStyleListRegex.exec(stylesString);\n const multiLevelNumberFormatMatch = multiLevelNumberFormatTypeRegex.exec(stylesString);\n // Multi level lists in Word have mso-level-number-format attribute except legal lists,\n // so we used that. If list has legal list match and doesn't has mso-level-number-format\n // then this is legal-list.\n const islegalStyleList = legalStyleListMatch && !multiLevelNumberFormatMatch;\n const listStyleMatch = listStyleRegexp.exec(stylesString);\n let listStyleType = 'decimal'; // Decimal is default one.\n let type = 'ol'; // <ol> is default list.\n let startIndex = null;\n if (listStyleMatch && listStyleMatch[1]) {\n const listStyleTypeMatch = listStyleTypeRegex.exec(listStyleMatch[1]);\n if (listStyleTypeMatch && listStyleTypeMatch[1]) {\n listStyleType = listStyleTypeMatch[1].trim();\n type = listStyleType !== 'bullet' && listStyleType !== 'image' ? 'ol' : 'ul';\n }\n // Styles for the numbered lists are always defined in the Word CSS stylesheet.\n // Unordered lists MAY contain a value for the Word CSS definition `mso-level-text` but sometimes\n // this tag is missing. And because of that, we cannot depend on that. We need to predict the list style value\n // based on the list style marker element.\n if (listStyleType === 'bullet') {\n const bulletedStyle = findBulletedListStyle(listLikeItem.element);\n if (bulletedStyle) {\n listStyleType = bulletedStyle;\n }\n }\n else {\n const listStartIndexMatch = listStartIndexRegex.exec(listStyleMatch[1]);\n if (listStartIndexMatch && listStartIndexMatch[1]) {\n startIndex = parseInt(listStartIndexMatch[1]);\n }\n }\n if (islegalStyleList) {\n type = 'ol';\n }\n }\n return {\n type,\n startIndex,\n style: mapListStyleDefinition(listStyleType),\n isLegalStyleList: islegalStyleList\n };\n}\nfunction findBulletedListStyle(element) {\n // https://github.com/ckeditor/ckeditor5/issues/15964\n if (element.tagName.toLowerCase() == 'li' && element.parentElement.tagName.toLowerCase() == 'ul' && element.parentElement.hasAttribute('type')) {\n return element.parentElement.getAttribute('type');\n }\n const listMarkerElement = findListMarkerNode(element);\n if (!listMarkerElement) {\n return null;\n }\n const listMarker = listMarkerElement.textContent;\n if (listMarker === 'o') {\n return 'circle';\n }\n else if ((listMarker !== null && listMarker !== void 0 ? listMarker : '').charCodeAt(0) === 183) {\n return 'disc';\n }\n // Word returns '§' instead of '■' for the square list style.\n else if (listMarker === '§') {\n return 'square';\n }\n return null;\n}\nfunction findListMarkerNode(element) {\n var _a;\n // If the first child is a text node, it is the data for the element.\n // The list-style marker is not present here.\n if (((_a = Array.from(element.children)[0]) === null || _a === void 0 ? void 0 : _a.tagName.toLowerCase()) === '#text') {\n return null;\n }\n for (const childNode of Array.from(element.children)) {\n // The list-style marker will be inside the `<span>` element. Let's ignore all non-span elements.\n // It may happen that the `<a>` element is added as the first child. Most probably, it's an anchor element.\n if (!['element', 'span'].includes(childNode.tagName.toLowerCase())) {\n continue;\n }\n return childNode;\n }\n return null;\n}\nfunction mapListStyleDefinition(value) {\n if (value.startsWith('arabic-leading-zero')) {\n return 'decimal-leading-zero';\n }\n switch (value) {\n case 'alpha-upper':\n return 'upper-alpha';\n case 'alpha-lower':\n return 'lower-alpha';\n case 'roman-upper':\n return 'upper-roman';\n case 'roman-lower':\n return 'lower-roman';\n case 'circle':\n case 'disc':\n case 'square':\n return value;\n default:\n return null;\n }\n}\nfunction createNewEmptyList(listStyle, hasMultiLevelListPlugin) {\n const list = document.createElement(listStyle.type);\n // We do not support modifying the marker for a particular list item.\n // Set the value for the `list-style-type` property directly to the list container.\n if (listStyle.style) {\n list.style.setProperty('list-style-type', listStyle.style);\n }\n if (listStyle.startIndex && listStyle.startIndex > 1) {\n list.setAttribute('start', listStyle.startIndex.toString());\n }\n if (listStyle.isLegalStyleList && hasMultiLevelListPlugin) {\n list.classList.add('legal-list');\n }\n return list;\n}\nfunction removeMsoListIgnoreSpans(parentElement) {\n // Get all <span> elements inside the parentElement\n const spans = parentElement.querySelectorAll('span');\n // Iterate over each <span> element\n spans.forEach(span => {\n var _a;\n // Get the value of the 'style' attribute\n const style = span.getAttribute('style');\n // Check if the 'style' attribute contains 'mso-list: Ignore'\n if (style && style.includes('mso-list:Ignore')) {\n // Remove the <span> element\n (_a = span.parentNode) === null || _a === void 0 ? void 0 : _a.removeChild(span);\n }\n });\n}\nfunction isListContinuation(currentItem) {\n const previousSibling = currentItem.element.previousSibling;\n if (!previousSibling) {\n // If it's a li inside ul or ol like in here: https://github.com/ckeditor/ckeditor5/issues/15964.\n return isList(currentItem.element.parentElement);\n }\n // Even with the same id the list does not have to be continuous (#43).\n // @ts-expect-error\n return isList(previousSibling);\n}\nconst isList = (element) => ['ul', 'ol'].includes(element.tagName.toLowerCase());\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MSWordNormalizer = void 0;\nconst normalizer_1 = require(\"./normalizer\");\nObject.defineProperty(exports, \"MSWordNormalizer\", { enumerable: true, get: function () { return normalizer_1.MSWordNormalizer; } });\n","import { useLexicalComposerContext } from '@lexical/react/LexicalComposerContext';\nimport { useEffect } from 'react';\nimport { $getSelection, COMMAND_PRIORITY_CRITICAL, type CommandPayloadType, PASTE_COMMAND } from 'lexical';\nimport { objectKlassEquals } from '@lexical/utils';\nimport { $insertDataTransferForRichText } from '@lexical/clipboard';\nimport { MSWordNormalizer } from '@staartwind.nl/lexical-paste-from-word';\n\nexport const PasteHandlerPlugin = () => {\n const [editor] = useLexicalComposerContext();\n\n const handlePaste = (event: CommandPayloadType<typeof PASTE_COMMAND>) => {\n event.preventDefault();\n editor.update(() => {\n const selection = $getSelection();\n const clipboardData =\n objectKlassEquals(event, InputEvent) || objectKlassEquals(event, KeyboardEvent) ? null : event.clipboardData;\n if (clipboardData != null && selection !== null) {\n const content = clipboardData.getData('text/html') || clipboardData.getData('text/plain');\n const newData = new DataTransfer();\n const wordNormalizer = new MSWordNormalizer();\n newData.setData('text/html', content);\n if (wordNormalizer.isActive(content)) {\n newData.setData('text/html', wordNormalizer.normalize(content));\n }\n $insertDataTransferForRichText(newData, selection, editor);\n }\n });\n };\n\n useEffect(() => {\n const removePasteListener = editor.registerCommand(\n PASTE_COMMAND,\n (event) => {\n if (event instanceof ClipboardEvent) {\n handlePaste(event);\n return true;\n }\n return false;\n },\n COMMAND_PRIORITY_CRITICAL\n );\n\n return () => {\n removePasteListener();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editor]);\n\n return null;\n};\n"],"x_google_ignoreList":[0,1],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Periods-B4ms3N24.js","names":[],"sources":["../src/components/Periods/Periods.module.css","../src/components/Periods/Periods.tsx"],"sourcesContent":[".periods__container {\n display: flex;\n flex-wrap: nowrap;\n}\n\n.periods__item {\n background-color: var(--color-grey-400);\n border: 1px solid var(--color-grey-500);\n display: inline-block;\n height: 0.75rem;\n margin-right: 0.125rem;\n width: 0.5rem;\n}\n\n.periods__item:last-child {\n margin-right: 0;\n}\n\n.periods__item:nth-child(3n):not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.periods__item--active {\n background-color: var(--color-grey-600);\n border: unset;\n}\n","import { clsx } from 'clsx';\nimport { useId } from 'react';\n\nimport styles from './Periods.module.css';\n\ninterface Period {\n id: string;\n number: number;\n semesterNumber: number;\n periodInSemester: number;\n}\n\ninterface TooltipTranslations {\n period: string;\n periods: string;\n and: string;\n}\n\nexport interface PeriodsProps {\n /** Indicates which periods are selected. */\n periods: Period[] | number[];\n /** Indicates the maximum number of periods to show in the selector. */\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n maxPeriods?: 3 | 6 | 7;\n /** A object of translations for the tooltip. */\n tooltipTranslations?: TooltipTranslations;\n}\n\nconst MAX_PERIODS = 6;\n\n/** Represents a component for a period indicator. */\nexport const Periods = ({ periods, tooltipTranslations, maxPeriods = MAX_PERIODS }: PeriodsProps) => {\n const maxPeriodsList = Array.from({ length: maxPeriods }, (_, index) => index + 1);\n const idPrefix = useId();\n\n const isArrayOfNumbers = periods.some((value) => {\n return typeof value === 'number';\n });\n\n const getTitles = (tooltipTranslations: TooltipTranslations): string => {\n const semesterPeriods: Record<number, number[]> = {};\n\n // Group periods by semester\n isArrayOfNumbers\n ? periods.forEach((period) => {\n if (typeof period === 'number') {\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n const groupKey = Math.ceil(period / 3); // Determine the semester (1, 2, or 3)\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n const mappedValue = ((period - 1) % 3) + 1; // Map period to semester\n\n if (!semesterPeriods[groupKey]) {\n semesterPeriods[groupKey] = [];\n }\n semesterPeriods[groupKey].push(mappedValue);\n }\n })\n : periods.forEach((period) => {\n const { semesterNumber, periodInSemester } = period as Period;\n\n if (!semesterPeriods[semesterNumber]) {\n semesterPeriods[semesterNumber] = [];\n }\n semesterPeriods[semesterNumber].push(periodInSemester);\n });\n\n // Build the title string\n const title = Object.keys(semesterPeriods).reduce((acc, semesterKey, index) => {\n const semesterNumber = Number(semesterKey);\n const periodsInSemester = semesterPeriods[semesterNumber];\n let periodTitle = '';\n\n // Determine if we need singular or plural form for \"period\"\n const blokLabel = periodsInSemester.length > 1 ? tooltipTranslations.periods : tooltipTranslations.period;\n\n // Build period sequence for the current semester\n if (periodsInSemester.length > 1) {\n const lastPeriod = periodsInSemester.pop();\n periodTitle = `Semester ${semesterNumber} ${blokLabel} ${periodsInSemester.join(', ')} ${tooltipTranslations.and} ${lastPeriod}`;\n } else {\n periodTitle = `Semester ${semesterNumber} ${blokLabel} ${periodsInSemester[0]}`;\n }\n\n // Add proper spacing and periods\n return `${acc}${index > 0 ? '. ' : ''}${periodTitle}`;\n }, '');\n\n return title.trim() + '.';\n };\n\n const isPeriodActive = (periodIndex: number): boolean => {\n if (isArrayOfNumbers) {\n return (periods as number[]).includes(periodIndex);\n } else {\n return periods.find((period) => (period as Period).number === periodIndex) ? true : false;\n }\n };\n\n return (\n <div className={styles['periods__container']} title={tooltipTranslations ? getTitles(tooltipTranslations) : ''}>\n {maxPeriodsList.map((periodIndex) => {\n return (\n <span\n className={clsx(\n styles['periods__item'],\n isPeriodActive(periodIndex) ? styles['periods__item--active'] : ''\n )}\n data-period-item\n key={`${idPrefix}-${periodIndex}`}\n />\n );\n })}\n </div>\n );\n};\n"],"mappings":";;;;;;;GC4BM,IAAc,GAGP,KAAW,EAAE,YAAS,wBAAqB,gBAAa,QAAgC;CACnG,IAAM,IAAiB,MAAM,KAAK,EAAE,QAAQ,EAAW,IAAI,GAAG,MAAU,IAAQ,CAAC,GAC3E,IAAW,EAAM,GAEjB,IAAmB,EAAQ,MAAM,MAC9B,OAAO,KAAU,QACzB,GAEK,KAAa,MAAqD;EACtE,IAAM,IAA4C,CAAC;EA+CnD,OA5CA,IACI,EAAQ,SAAS,MAAW;GAC1B,IAAI,OAAO,KAAW,UAAU;IAE9B,IAAM,IAAW,KAAK,KAAK,IAAS,CAAC,GAE/B,KAAgB,IAAS,KAAK,IAAK;IAKzC,AAHK,EAAgB,OACnB,EAAgB,KAAY,CAAC,IAE/B,EAAgB,GAAU,KAAK,CAAW;GAC5C;EACF,CAAC,IACD,EAAQ,SAAS,MAAW;GAC1B,IAAM,EAAE,mBAAgB,wBAAqB;GAK7C,AAHK,EAAgB,OACnB,EAAgB,KAAkB,CAAC,IAErC,EAAgB,GAAgB,KAAK,CAAgB;EACvD,CAAC,GAGS,OAAO,KAAK,CAAe,EAAE,QAAQ,GAAK,GAAa,MAAU;GAC7E,IAAM,IAAiB,OAAO,CAAW,GACnC,IAAoB,EAAgB,IACtC,IAAc,IAGZ,IAAY,EAAkB,SAAS,IAAI,EAAoB,UAAU,EAAoB;GAGnG,IAAI,EAAkB,SAAS,GAAG;IAChC,IAAM,IAAa,EAAkB,IAAI;IACzC,IAAc,YAAY,EAAe,GAAG,EAAU,GAAG,EAAkB,KAAK,IAAI,EAAE,GAAG,EAAoB,IAAI,GAAG;GACtH,OACE,IAAc,YAAY,EAAe,GAAG,EAAU,GAAG,EAAkB;GAI7E,OAAO,GAAG,IAAM,IAAQ,IAAI,OAAO,KAAK;EAC1C,GAAG,EAEI,EAAM,KAAK,IAAI;CACxB,GAEM,KAAkB,MAClB,IACM,EAAqB,SAAS,CAAW,IAE1C,IAAQ,MAAM,MAAY,EAAkB,WAAW,CAAW;CAI7E,OACE,kBAAC,OAAD;EAAK,WAAW,EAAO;EAAuB,OAAO,IAAsB,EAAU,CAAmB,IAAI;YACzG,EAAe,KAAK,MAEjB,kBAAC,QAAD;GACE,WAAW,EACT,EAAO,eACP,EAAe,CAAW,IAAI,EAAO,2BAA2B,EAClE;GACA,oBAAA;EAED,GADM,GAAG,EAAS,GAAG,GACrB,CAEJ;CACE,CAAA;AAET"}
1
+ {"version":3,"file":"Periods-B4ms3N24.js","names":[],"sources":["../src/components/Periods/Periods.module.css","../src/components/Periods/Periods.tsx"],"sourcesContent":[".periods__container {\n display: flex;\n flex-wrap: nowrap;\n}\n\n.periods__item {\n background-color: var(--color-grey-400);\n border: 1px solid var(--color-grey-500);\n display: inline-block;\n height: 0.75rem;\n margin-right: 0.125rem;\n width: 0.5rem;\n}\n\n.periods__item:last-child {\n margin-right: 0;\n}\n\n.periods__item:nth-child(3n):not(:last-child) {\n margin-right: 0.5rem;\n}\n\n.periods__item--active {\n background-color: var(--color-grey-600);\n border: unset;\n}\n","import { clsx } from 'clsx';\nimport { useId } from 'react';\n\nimport styles from './Periods.module.css';\n\ninterface Period {\n id: string;\n number: number;\n semesterNumber: number;\n periodInSemester: number;\n}\n\ninterface TooltipTranslations {\n period: string;\n periods: string;\n and: string;\n}\n\nexport interface PeriodsProps {\n /** Indicates which periods are selected. */\n periods: Period[] | number[];\n /** Indicates the maximum number of periods to show in the selector. */\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n maxPeriods?: 3 | 6 | 7;\n /** A object of translations for the tooltip. */\n tooltipTranslations?: TooltipTranslations;\n}\n\nconst MAX_PERIODS = 6;\n\n/** Represents a component for a period indicator. */\nexport const Periods = ({ periods, tooltipTranslations, maxPeriods = MAX_PERIODS }: PeriodsProps) => {\n const maxPeriodsList = Array.from({ length: maxPeriods }, (_, index) => index + 1);\n const idPrefix = useId();\n\n const isArrayOfNumbers = periods.some((value) => {\n return typeof value === 'number';\n });\n\n const getTitles = (tooltipTranslations: TooltipTranslations): string => {\n const semesterPeriods: Record<number, number[]> = {};\n\n // Group periods by semester\n isArrayOfNumbers\n ? periods.forEach((period) => {\n if (typeof period === 'number') {\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n const groupKey = Math.ceil(period / 3); // Determine the semester (1, 2, or 3)\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n const mappedValue = ((period - 1) % 3) + 1; // Map period to semester\n\n if (!semesterPeriods[groupKey]) {\n semesterPeriods[groupKey] = [];\n }\n semesterPeriods[groupKey].push(mappedValue);\n }\n })\n : periods.forEach((period) => {\n const { semesterNumber, periodInSemester } = period as Period;\n\n if (!semesterPeriods[semesterNumber]) {\n semesterPeriods[semesterNumber] = [];\n }\n semesterPeriods[semesterNumber].push(periodInSemester);\n });\n\n // Build the title string\n const title = Object.keys(semesterPeriods).reduce((acc, semesterKey, index) => {\n const semesterNumber = Number(semesterKey);\n const periodsInSemester = semesterPeriods[semesterNumber];\n let periodTitle = '';\n\n // Determine if we need singular or plural form for \"period\"\n const blokLabel = periodsInSemester.length > 1 ? tooltipTranslations.periods : tooltipTranslations.period;\n\n // Build period sequence for the current semester\n if (periodsInSemester.length > 1) {\n const lastPeriod = periodsInSemester.pop();\n periodTitle = `Semester ${semesterNumber} ${blokLabel} ${periodsInSemester.join(', ')} ${tooltipTranslations.and} ${lastPeriod}`;\n } else {\n periodTitle = `Semester ${semesterNumber} ${blokLabel} ${periodsInSemester[0]}`;\n }\n\n // Add proper spacing and periods\n return `${acc}${index > 0 ? '. ' : ''}${periodTitle}`;\n }, '');\n\n return title.trim() + '.';\n };\n\n const isPeriodActive = (periodIndex: number): boolean => {\n if (isArrayOfNumbers) {\n return (periods as number[]).includes(periodIndex);\n } else {\n return periods.find((period) => (period as Period).number === periodIndex) ? true : false;\n }\n };\n\n return (\n <div className={styles['periods__container']} title={tooltipTranslations ? getTitles(tooltipTranslations) : ''}>\n {maxPeriodsList.map((periodIndex) => {\n return (\n <span\n className={clsx(\n styles['periods__item'],\n isPeriodActive(periodIndex) ? styles['periods__item--active'] : ''\n )}\n data-period-item\n key={`${idPrefix}-${periodIndex}`}\n />\n );\n })}\n </div>\n );\n};\n"],"mappings":";;;;;;;GC4BM,IAAc,GAGP,KAAW,EAAE,YAAS,wBAAqB,gBAAa,QAAgC;CACnG,IAAM,IAAiB,MAAM,KAAK,EAAE,QAAQ,EAAW,IAAI,GAAG,MAAU,IAAQ,CAAC,GAC3E,IAAW,EAAM,GAEjB,IAAmB,EAAQ,MAAM,MAC9B,OAAO,KAAU,QACzB,GAEK,KAAa,MAAqD;EACtE,IAAM,IAA4C,CAAC;EA+CnD,OA5CA,IACI,EAAQ,SAAS,MAAW;GAC1B,IAAI,OAAO,KAAW,UAAU;IAE9B,IAAM,IAAW,KAAK,KAAK,IAAS,CAAC,GAE/B,KAAgB,IAAS,KAAK,IAAK;IAKzC,AAHK,EAAgB,OACnB,EAAgB,KAAY,CAAC,IAE/B,EAAgB,EAAS,CAAC,KAAK,CAAW;GAC5C;EACF,CAAC,IACD,EAAQ,SAAS,MAAW;GAC1B,IAAM,EAAE,mBAAgB,wBAAqB;GAK7C,AAHK,EAAgB,OACnB,EAAgB,KAAkB,CAAC,IAErC,EAAgB,EAAe,CAAC,KAAK,CAAgB;EACvD,CAAC,GAGS,OAAO,KAAK,CAAe,CAAC,CAAC,QAAQ,GAAK,GAAa,MAAU;GAC7E,IAAM,IAAiB,OAAO,CAAW,GACnC,IAAoB,EAAgB,IACtC,IAAc,IAGZ,IAAY,EAAkB,SAAS,IAAI,EAAoB,UAAU,EAAoB;GAGnG,IAAI,EAAkB,SAAS,GAAG;IAChC,IAAM,IAAa,EAAkB,IAAI;IACzC,IAAc,YAAY,EAAe,GAAG,EAAU,GAAG,EAAkB,KAAK,IAAI,EAAE,GAAG,EAAoB,IAAI,GAAG;GACtH,OACE,IAAc,YAAY,EAAe,GAAG,EAAU,GAAG,EAAkB;GAI7E,OAAO,GAAG,IAAM,IAAQ,IAAI,OAAO,KAAK;EAC1C,GAAG,EAEI,CAAA,CAAM,KAAK,IAAI;CACxB,GAEM,KAAkB,MAClB,IACM,EAAqB,SAAS,CAAW,IAE1C,IAAQ,MAAM,MAAY,EAAkB,WAAW,CAAW;CAI7E,OACE,kBAAC,OAAD;EAAK,WAAW,EAAO;EAAuB,OAAO,IAAsB,EAAU,CAAmB,IAAI;YACzG,EAAe,KAAK,MAEjB,kBAAC,QAAD;GACE,WAAW,EACT,EAAO,eACP,EAAe,CAAW,IAAI,EAAO,2BAA2B,EAClE;GACA,oBAAA;EAED,GADM,GAAG,EAAS,GAAG,GACrB,CAEJ;CACE,CAAA;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"SortableProvider-D-6Ttz0h.js","names":[],"sources":["../src/components/Sortable/components/SortableContainer.tsx","../src/components/Sortable/SortableProvider.tsx"],"sourcesContent":["import { cloneElement, useEffect, useRef } from 'react';\nimport { clsx } from 'clsx';\n\nimport type { DragEvent } from 'react';\n\nimport styles from 'components/Sortable/Sortable.module.css';\nimport { useSortable } from 'components/Sortable/SortableProvider';\n\nexport type OnSort = (indices: number[]) => void;\n\ninterface SortableContainerProps {\n scrollable?: boolean;\n hideNumbers?: boolean;\n onSort?: OnSort;\n}\n\nexport function SortableContainer({ scrollable, hideNumbers, onSort }: SortableContainerProps) {\n const { clone, draggingTarget, drop, sortableItems, setDraggingTarget, reset, indices } = useSortable();\n const containerRef = useRef<HTMLUListElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const indicesRef = useRef<number[]>(indices);\n\n function getTargetIndex(event: DragEvent<HTMLLIElement>) {\n const sortableContainer = containerRef.current;\n\n if (!sortableContainer?.hasChildNodes()) return;\n\n const listItemNode = event.currentTarget;\n const childNodes = Array.from(sortableContainer.childNodes);\n const targetIndex = childNodes.findIndex((node) => node.isEqualNode(listItemNode));\n\n return targetIndex;\n }\n\n function handleDrop(event: DragEvent<HTMLLIElement>) {\n const targetIndex = getTargetIndex(event);\n\n if (targetIndex === undefined) return;\n\n if (clone && wrapperRef.current) wrapperRef.current.removeChild(clone);\n\n drop(targetIndex);\n }\n\n function handleDragOver(event: DragEvent<HTMLLIElement>) {\n // Prevent default to allow drop\n event.preventDefault();\n event.dataTransfer.dropEffect = 'move';\n\n if (clone) {\n const { clientX, clientY } = event;\n const { x, y, width, height } = event.currentTarget.getBoundingClientRect();\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n const grabPosition = height / 2 - (clientY - y);\n\n // lock drag image movement to x-axis and mouse pointer\n clone.setAttribute(\n 'style',\n `\n left: ${clientX - (clientX - x)}px;\n top: ${y - grabPosition}px;\n height: ${height}px;\n width: ${width}px;\n visibility: visible;\n `\n );\n }\n\n const targetIndex = getTargetIndex(event);\n\n if (targetIndex === undefined || targetIndex === draggingTarget) return;\n\n setDraggingTarget(targetIndex);\n }\n\n function handleContainerDragLeave(event: DragEvent<HTMLUListElement>) {\n const { relatedTarget } = event;\n\n const within = relatedTarget !== null && containerRef.current?.contains(relatedTarget as Node);\n\n if (!within) {\n reset();\n\n if (clone) {\n clone.setAttribute('style', 'visibility: hidden;');\n }\n }\n }\n\n useEffect(() => {\n if (!clone || !wrapperRef.current) return;\n\n wrapperRef.current.appendChild(clone);\n\n return function () {\n clone.remove();\n };\n }, [clone]);\n\n useEffect(() => {\n if (!onSort) return;\n\n if (indices.valueOf() !== indicesRef.current.valueOf()) {\n onSort(indices);\n\n indicesRef.current = indices;\n }\n }, [indices, indicesRef, onSort]);\n\n return (\n <div\n className={clsx(styles['sortable__wrapper'], { [styles['sortable__wrapper--scrollable']]: scrollable })}\n ref={wrapperRef}\n >\n <ul\n className={clsx(styles['sortable__container'], {\n [styles['sortable__container--drag-over']]: clone !== undefined,\n })}\n onDragLeave={handleContainerDragLeave}\n ref={containerRef}\n role=\"presentation\"\n >\n {sortableItems.map((child, index) => (\n <li\n className={clsx(styles['sortable__drop-target'], {\n [styles['sortable__drop-target--no-number']]: hideNumbers,\n })}\n draggable={false}\n key={index}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n role=\"presentation\"\n >\n {cloneElement(child, { index })}\n </li>\n ))}\n </ul>\n </div>\n );\n}\n","import { createContext, useContext, useReducer, useRef } from 'react';\n\nimport type { ReactElement, ReactNode } from 'react';\nimport type { SortableStateType } from './sortableReducer';\nimport type { SortableItem, SortableItemProps } from './components/SortableItem';\n\nimport { sortableReducer, initialState } from './sortableReducer';\nimport { SortableContainer } from './components/SortableContainer';\nimport * as actions from './actions';\n\ntype SortableContextType = {\n clearDraggingSource: () => void;\n clearDraggingTarget: () => void;\n dragEnd: () => void;\n dragStart: (index: number) => void;\n drop: (index: number) => void;\n moveToPosition: (index: number) => void;\n reset: () => void;\n setClone: (node: Element) => void;\n setDraggingSource: (index: number) => void;\n setDraggingTarget: (index: number) => void;\n};\n\nconst SortableContext = createContext<(SortableContextType & SortableStateType) | undefined>(undefined);\n\ntype SortableItems = ReactElement<SortableItemProps, typeof SortableItem>[];\n\ninterface Props<T = unknown> {\n renderItems: SortableItems;\n dataItems: T[];\n scrollable?: boolean;\n hideNumbers?: boolean;\n onSort?: (items: T[]) => void;\n children?: ReactNode;\n}\n\nfunction isReactElementWithIndex(value: string | ReactElement): value is ReactElement<{ index: number }> {\n return typeof value !== 'string';\n}\n\nconst init = (renderItems: SortableItems): SortableStateType => {\n const reactChildren = renderItems.filter(isReactElementWithIndex);\n\n return {\n ...initialState,\n indices: reactChildren.map(({ props }) => props.index),\n maxIndex: reactChildren.length - 1,\n sortableItems: reactChildren,\n };\n};\n\nexport function SortableProvider<T>({ renderItems, dataItems, scrollable, hideNumbers, onSort }: Props<T>) {\n const persistentItems = useRef(dataItems);\n\n const [state, dispatch] = useReducer(sortableReducer, renderItems, init);\n\n function setDraggingSource(index: number) {\n dispatch(actions.setDraggingSource(index));\n }\n\n function setDraggingTarget(index: number) {\n dispatch(actions.setDraggingTarget(index));\n }\n\n function moveToPosition(index: number) {\n dispatch(actions.moveToPosition(index));\n }\n\n function clearDraggingTarget() {\n dispatch(actions.clearDraggingTarget());\n }\n\n function clearDraggingSource() {\n dispatch(actions.clearDraggingSource());\n }\n\n function drop(index: number) {\n dispatch(actions.drop(index));\n }\n\n function dragStart(index: number) {\n dispatch(actions.dragStart(index));\n }\n\n function dragEnd() {\n dispatch(actions.dragEnd());\n }\n\n function reset() {\n dispatch(actions.reset());\n }\n\n function setClone(node: Element) {\n dispatch(actions.setClone(node));\n }\n\n function onHandleSort(sortedIndices: number[]) {\n const sortedData = sortedIndices.map((index) => persistentItems.current[index]);\n onSort && onSort(sortedData);\n }\n\n return (\n <SortableContext.Provider\n value={{\n ...state,\n clearDraggingSource,\n clearDraggingTarget,\n dragEnd,\n dragStart,\n drop,\n moveToPosition,\n reset,\n setClone,\n setDraggingSource,\n setDraggingTarget,\n }}\n >\n <SortableContainer scrollable={scrollable} hideNumbers={hideNumbers} onSort={onHandleSort} />\n </SortableContext.Provider>\n );\n}\n\nexport function useSortable() {\n const context = useContext(SortableContext);\n\n if (context === undefined) {\n throw new Error('useSortable must be used within a SortableProvider');\n }\n\n return context;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SortableProvider-D-6Ttz0h.js","names":[],"sources":["../src/components/Sortable/components/SortableContainer.tsx","../src/components/Sortable/SortableProvider.tsx"],"sourcesContent":["import { cloneElement, useEffect, useRef } from 'react';\nimport { clsx } from 'clsx';\n\nimport type { DragEvent } from 'react';\n\nimport styles from 'components/Sortable/Sortable.module.css';\nimport { useSortable } from 'components/Sortable/SortableProvider';\n\nexport type OnSort = (indices: number[]) => void;\n\ninterface SortableContainerProps {\n scrollable?: boolean;\n hideNumbers?: boolean;\n onSort?: OnSort;\n}\n\nexport function SortableContainer({ scrollable, hideNumbers, onSort }: SortableContainerProps) {\n const { clone, draggingTarget, drop, sortableItems, setDraggingTarget, reset, indices } = useSortable();\n const containerRef = useRef<HTMLUListElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const indicesRef = useRef<number[]>(indices);\n\n function getTargetIndex(event: DragEvent<HTMLLIElement>) {\n const sortableContainer = containerRef.current;\n\n if (!sortableContainer?.hasChildNodes()) return;\n\n const listItemNode = event.currentTarget;\n const childNodes = Array.from(sortableContainer.childNodes);\n const targetIndex = childNodes.findIndex((node) => node.isEqualNode(listItemNode));\n\n return targetIndex;\n }\n\n function handleDrop(event: DragEvent<HTMLLIElement>) {\n const targetIndex = getTargetIndex(event);\n\n if (targetIndex === undefined) return;\n\n if (clone && wrapperRef.current) wrapperRef.current.removeChild(clone);\n\n drop(targetIndex);\n }\n\n function handleDragOver(event: DragEvent<HTMLLIElement>) {\n // Prevent default to allow drop\n event.preventDefault();\n event.dataTransfer.dropEffect = 'move';\n\n if (clone) {\n const { clientX, clientY } = event;\n const { x, y, width, height } = event.currentTarget.getBoundingClientRect();\n // eslint-disable-next-line @typescript-eslint/no-magic-numbers\n const grabPosition = height / 2 - (clientY - y);\n\n // lock drag image movement to x-axis and mouse pointer\n clone.setAttribute(\n 'style',\n `\n left: ${clientX - (clientX - x)}px;\n top: ${y - grabPosition}px;\n height: ${height}px;\n width: ${width}px;\n visibility: visible;\n `\n );\n }\n\n const targetIndex = getTargetIndex(event);\n\n if (targetIndex === undefined || targetIndex === draggingTarget) return;\n\n setDraggingTarget(targetIndex);\n }\n\n function handleContainerDragLeave(event: DragEvent<HTMLUListElement>) {\n const { relatedTarget } = event;\n\n const within = relatedTarget !== null && containerRef.current?.contains(relatedTarget as Node);\n\n if (!within) {\n reset();\n\n if (clone) {\n clone.setAttribute('style', 'visibility: hidden;');\n }\n }\n }\n\n useEffect(() => {\n if (!clone || !wrapperRef.current) return;\n\n wrapperRef.current.appendChild(clone);\n\n return function () {\n clone.remove();\n };\n }, [clone]);\n\n useEffect(() => {\n if (!onSort) return;\n\n if (indices.valueOf() !== indicesRef.current.valueOf()) {\n onSort(indices);\n\n indicesRef.current = indices;\n }\n }, [indices, indicesRef, onSort]);\n\n return (\n <div\n className={clsx(styles['sortable__wrapper'], { [styles['sortable__wrapper--scrollable']]: scrollable })}\n ref={wrapperRef}\n >\n <ul\n className={clsx(styles['sortable__container'], {\n [styles['sortable__container--drag-over']]: clone !== undefined,\n })}\n onDragLeave={handleContainerDragLeave}\n ref={containerRef}\n role=\"presentation\"\n >\n {sortableItems.map((child, index) => (\n <li\n className={clsx(styles['sortable__drop-target'], {\n [styles['sortable__drop-target--no-number']]: hideNumbers,\n })}\n draggable={false}\n key={index}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n role=\"presentation\"\n >\n {cloneElement(child, { index })}\n </li>\n ))}\n </ul>\n </div>\n );\n}\n","import { createContext, useContext, useReducer, useRef } from 'react';\n\nimport type { ReactElement, ReactNode } from 'react';\nimport type { SortableStateType } from './sortableReducer';\nimport type { SortableItem, SortableItemProps } from './components/SortableItem';\n\nimport { sortableReducer, initialState } from './sortableReducer';\nimport { SortableContainer } from './components/SortableContainer';\nimport * as actions from './actions';\n\ntype SortableContextType = {\n clearDraggingSource: () => void;\n clearDraggingTarget: () => void;\n dragEnd: () => void;\n dragStart: (index: number) => void;\n drop: (index: number) => void;\n moveToPosition: (index: number) => void;\n reset: () => void;\n setClone: (node: Element) => void;\n setDraggingSource: (index: number) => void;\n setDraggingTarget: (index: number) => void;\n};\n\nconst SortableContext = createContext<(SortableContextType & SortableStateType) | undefined>(undefined);\n\ntype SortableItems = ReactElement<SortableItemProps, typeof SortableItem>[];\n\ninterface Props<T = unknown> {\n renderItems: SortableItems;\n dataItems: T[];\n scrollable?: boolean;\n hideNumbers?: boolean;\n onSort?: (items: T[]) => void;\n children?: ReactNode;\n}\n\nfunction isReactElementWithIndex(value: string | ReactElement): value is ReactElement<{ index: number }> {\n return typeof value !== 'string';\n}\n\nconst init = (renderItems: SortableItems): SortableStateType => {\n const reactChildren = renderItems.filter(isReactElementWithIndex);\n\n return {\n ...initialState,\n indices: reactChildren.map(({ props }) => props.index),\n maxIndex: reactChildren.length - 1,\n sortableItems: reactChildren,\n };\n};\n\nexport function SortableProvider<T>({ renderItems, dataItems, scrollable, hideNumbers, onSort }: Props<T>) {\n const persistentItems = useRef(dataItems);\n\n const [state, dispatch] = useReducer(sortableReducer, renderItems, init);\n\n function setDraggingSource(index: number) {\n dispatch(actions.setDraggingSource(index));\n }\n\n function setDraggingTarget(index: number) {\n dispatch(actions.setDraggingTarget(index));\n }\n\n function moveToPosition(index: number) {\n dispatch(actions.moveToPosition(index));\n }\n\n function clearDraggingTarget() {\n dispatch(actions.clearDraggingTarget());\n }\n\n function clearDraggingSource() {\n dispatch(actions.clearDraggingSource());\n }\n\n function drop(index: number) {\n dispatch(actions.drop(index));\n }\n\n function dragStart(index: number) {\n dispatch(actions.dragStart(index));\n }\n\n function dragEnd() {\n dispatch(actions.dragEnd());\n }\n\n function reset() {\n dispatch(actions.reset());\n }\n\n function setClone(node: Element) {\n dispatch(actions.setClone(node));\n }\n\n function onHandleSort(sortedIndices: number[]) {\n const sortedData = sortedIndices.map((index) => persistentItems.current[index]);\n onSort && onSort(sortedData);\n }\n\n return (\n <SortableContext.Provider\n value={{\n ...state,\n clearDraggingSource,\n clearDraggingTarget,\n dragEnd,\n dragStart,\n drop,\n moveToPosition,\n reset,\n setClone,\n setDraggingSource,\n setDraggingTarget,\n }}\n >\n <SortableContainer scrollable={scrollable} hideNumbers={hideNumbers} onSort={onHandleSort} />\n </SortableContext.Provider>\n );\n}\n\nexport function useSortable() {\n const context = useContext(SortableContext);\n\n if (context === undefined) {\n throw new Error('useSortable must be used within a SortableProvider');\n }\n\n return context;\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { t as e } from "./clsx-C67XSbzZ.js";
2
2
  import { Icon as t } from "./components/Icon/Icon.js";
3
- import { t as n } from "./LexicalComposerContext.prod-DumMmRBt.js";
3
+ import { t as n } from "./LexicalComposerContext.prod-D4HOlWII.js";
4
4
  import { useTranslation as r } from "./components/RteEditor/hooks/useTranslation.js";
5
5
  import { useEffect as i, useRef as a, useState as o } from "react";
6
6
  import { jsx as s, jsxs as c } from "react/jsx-runtime";
@@ -116,4 +116,4 @@ var l = {
116
116
  //#endregion
117
117
  export { h as t };
118
118
 
119
- //# sourceMappingURL=TableCellContextMenu--4IdoKAU.js.map
119
+ //# sourceMappingURL=TableCellContextMenu-Cu5iXYSJ.js.map