@dso-toolkit/core 69.0.0 → 69.1.0

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 (65) hide show
  1. package/dist/cjs/dso-alert_6.cjs.entry.js +14 -1
  2. package/dist/cjs/dso-alert_6.cjs.entry.js.map +1 -1
  3. package/dist/cjs/dso-autosuggest.cjs.entry.js +149 -20
  4. package/dist/cjs/dso-autosuggest.cjs.entry.js.map +1 -1
  5. package/dist/cjs/dso-pagination.cjs.entry.js +39 -26
  6. package/dist/cjs/dso-pagination.cjs.entry.js.map +1 -1
  7. package/dist/cjs/dso-scrollable.cjs.entry.js +5 -2
  8. package/dist/cjs/dso-scrollable.cjs.entry.js.map +1 -1
  9. package/dist/cjs/dso-toolkit.cjs.js +1 -1
  10. package/dist/cjs/loader.cjs.js +1 -1
  11. package/dist/collection/components/autosuggest/autosuggest.css +23 -11
  12. package/dist/collection/components/autosuggest/autosuggest.interfaces.js.map +1 -1
  13. package/dist/collection/components/autosuggest/autosuggest.js +158 -23
  14. package/dist/collection/components/autosuggest/autosuggest.js.map +1 -1
  15. package/dist/collection/components/ozon-content/nodes/abbr.node.js +11 -0
  16. package/dist/collection/components/ozon-content/nodes/abbr.node.js.map +1 -0
  17. package/dist/collection/components/ozon-content/ozon-content-mapper.js +2 -0
  18. package/dist/collection/components/ozon-content/ozon-content-mapper.js.map +1 -1
  19. package/dist/collection/components/ozon-content/ozon-content.css +4 -0
  20. package/dist/collection/components/pagination/pagination.js +39 -26
  21. package/dist/collection/components/pagination/pagination.js.map +1 -1
  22. package/dist/collection/components/scrollable/scrollable.js +5 -2
  23. package/dist/collection/components/scrollable/scrollable.js.map +1 -1
  24. package/dist/components/dso-autosuggest.js +150 -20
  25. package/dist/components/dso-autosuggest.js.map +1 -1
  26. package/dist/components/dso-pagination.js +39 -26
  27. package/dist/components/dso-pagination.js.map +1 -1
  28. package/dist/components/ozon-content.js +14 -1
  29. package/dist/components/ozon-content.js.map +1 -1
  30. package/dist/components/scrollable.js +5 -2
  31. package/dist/components/scrollable.js.map +1 -1
  32. package/dist/dso-toolkit/dso-toolkit.esm.js +1 -1
  33. package/dist/dso-toolkit/dso-toolkit.esm.js.map +1 -1
  34. package/dist/dso-toolkit/p-3efc1929.entry.js +2 -0
  35. package/dist/dso-toolkit/p-3efc1929.entry.js.map +1 -0
  36. package/dist/dso-toolkit/p-7949fc70.entry.js +2 -0
  37. package/dist/dso-toolkit/p-7949fc70.entry.js.map +1 -0
  38. package/dist/dso-toolkit/p-e26460b5.entry.js +2 -0
  39. package/dist/dso-toolkit/p-e26460b5.entry.js.map +1 -0
  40. package/dist/dso-toolkit/p-eeca54c6.entry.js +2 -0
  41. package/dist/dso-toolkit/p-eeca54c6.entry.js.map +1 -0
  42. package/dist/esm/dso-alert_6.entry.js +14 -1
  43. package/dist/esm/dso-alert_6.entry.js.map +1 -1
  44. package/dist/esm/dso-autosuggest.entry.js +149 -20
  45. package/dist/esm/dso-autosuggest.entry.js.map +1 -1
  46. package/dist/esm/dso-pagination.entry.js +39 -26
  47. package/dist/esm/dso-pagination.entry.js.map +1 -1
  48. package/dist/esm/dso-scrollable.entry.js +5 -2
  49. package/dist/esm/dso-scrollable.entry.js.map +1 -1
  50. package/dist/esm/dso-toolkit.js +1 -1
  51. package/dist/esm/loader.js +1 -1
  52. package/dist/types/components/autosuggest/autosuggest.d.ts +18 -7
  53. package/dist/types/components/autosuggest/autosuggest.interfaces.d.ts +10 -0
  54. package/dist/types/components/ozon-content/nodes/abbr.node.d.ts +6 -0
  55. package/dist/types/components/pagination/pagination.d.ts +2 -0
  56. package/dist/types/components.d.ts +6 -6
  57. package/package.json +3 -3
  58. package/dist/dso-toolkit/p-135bf595.entry.js +0 -2
  59. package/dist/dso-toolkit/p-135bf595.entry.js.map +0 -1
  60. package/dist/dso-toolkit/p-beaa587d.entry.js +0 -2
  61. package/dist/dso-toolkit/p-beaa587d.entry.js.map +0 -1
  62. package/dist/dso-toolkit/p-da7f089a.entry.js +0 -2
  63. package/dist/dso-toolkit/p-da7f089a.entry.js.map +0 -1
  64. package/dist/dso-toolkit/p-fd989862.entry.js +0 -2
  65. package/dist/dso-toolkit/p-fd989862.entry.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"names":["translations","en","close","success","info","warning","error","nl","alertCss","DsoAlertStyle0","Alert","constructor","hostRef","this","closable","text","i18n","host","render","status","Error","h","key","class","clsx","compact","role","roleAlert","undefined","icon","type","onClick","e","dsoClose","emit","originalEvent","badgeCss","DsoBadgeStyle0","Badge","imageOverlayCss","DsoImageOverlayStyle0","wijzigactieLabels","verwijder","voegtoe","Dimmer","active","src","alt","ref","click","children","ImageOverlay","zoomable","titelSlot","bijschriftSlot","loadListener","event","target","HTMLImageElement","setZoomable","connectedCallback","querySelector","componentDidLoad","resizeObserver","ResizeObserver","debounce","imgElement","mutationObserver","MutationObserver","forceUpdate","_a","_b","disconnect","initZoomableImage","observe","attributes","subtree","attributeFilter","childList","disconnectedCallback","trap","deactivate","_c","complete","imageElement","width","naturalWidth","height","naturalHeight","isWijzigactie","wijzigactie","editActionLabel","button","element","buttonElement","Host","focus","wrapperElement","name","hidden","componentDidRender","createFocusTrap","escapeDeactivates","clickOutsideDeactivates","MouseEvent","composedPath","setReturnFocus","onDeactivate","activate","getNodeName","node","Element","localName","nodeName","includes","substring","indexOf","OzonContentAbbrNode","mapNodeToJsx","title","getAttribute","childNodes","wijzigactieToClassName","parseWijzigactieFromNode","WrapWijzigactie","isNestedAl","path","some","n","OzonContentAlNode","inline","content","className","OzonContentBronNode","OzonContentDocumentNode","Fragment","INFINITY","symbolTag","reAsciiWord","reLatin","rsAstralRange","rsComboMarksRange","rsComboSymbolsRange","rsDingbatRange","rsLowerRange","rsMathOpRange","rsNonCharRange","rsPunctuationRange","rsSpaceRange","rsUpperRange","rsVarRange","rsBreakRange","rsApos","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsModifier","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsZWJ","rsLowerMisc","rsUpperMisc","rsOptLowerContr","rsOptUpperContr","reOptMod","rsOptVar","rsOptJoin","join","rsSeq","rsEmoji","reApos","RegExp","reComboMark","reUnicodeWord","reHasUnicodeWord","deburredLetters","freeGlobal","global","Object","freeSelf","self","root","Function","arrayReduce","array","iteratee","accumulator","initAccum","index","length","asciiWords","string","match","basePropertyOf","object","deburrLetter","hasUnicodeWord","test","unicodeWords","objectProto","prototype","objectToString","toString","Symbol","symbolProto","symbolToString","baseToString","value","isSymbol","call","result","createCompounder","callback","words","deburr","replace","isObjectLike","kebabCase","word","toLowerCase","pattern","guard","lodash_kebabcase","OzonContentExtRefNode","href","tagName","rel","OzonContentFallbackNode","Bijschrift","bijschrift","bron","inhoud","OzonContentFiguurNode","Array","from","titel","find","textContent","illustratieNode","bijschriftNode","illustratie","naam","breedte","hoogte","uitlijning","locatie","slot","_f","_e","_d","OzonContentInhoudNode","richContent","OzonContentInlineTekstAfbeeldingNode","OzonContentInlineNodes","Tag","OzonContentIntIoRefNode","emitAnchorClick","intRefOnClick","preventDefault","currentTarget","HTMLAnchorElement","documentComponent","OzonContentIntRefNode","OzonContentLijstNode","parseTypeFromLijstNode","aanhef","sluiting","listItems","filter","map","item","itemNodes","liNummer","liWijzigactie","OzonContentNieuweTekstNode","OzonContentNootNode","handles","identify","state","openNoteId","setState","noteId","console","noteControlsId","nootNummer","onBlur","id","stateless","descriptive","querySelectorAll","OzonContentKopNode","mapColspecs","count","nodeList","elements","totalWidth","getTotalWidth","columns","colNumber","colsep","number","parseInt","rowsep","getWidth","reduce","colWidth","isNaN","Math","round","Colgroup","colspecs","colspec","style","getColspecStartColsep","nameStart","colspecStart","c","getColspecStartRowsep","getData","cell","row","parentElement","tgroup","table","moreRows","nameEnd","getColspan","colspecEnd","colspan","Cell","context","rowSpan","colSpan","Rows","rows","mapData","colAttribute","columnCount","caption","headRows","bodyRows","frame","OzonContentTableNode","uuidv4","assign","OzonContentTextNode","mark","emitMarkItemHighlight","highlight","OzonContentVerwijderdeTekstNode","Mapper","mappers","skip","t","m","push","fallbackNode","findMapper","isArray","NodeList","addSpaceBeforeNode","mapper","identity","s","transform","input","document","inputToXmlDocument","message","getRootNode","XMLDocument","domParser","DOMParser","parseFromString","implementation","createDocument","ozonContentCss","DsoOzonContentStyle0","OzonContent","handleMarkItemHighlight","elementRef","dsoOzonContentMarkItemHighlight","contentWatcher","dsoAnchorClick","transformed","panelCss","DsoPanelStyle0","Panel","emphasized","dsoCloseClick","closeButtonLabel","tableCss","DsoTableStyle0","Table","labelledbyId","v4","noModal","isResponsive","modalActive","startResponsiveBehavior","componentWillLoad","entries","setResponsiveTable","setFocusTrap","trim","placeholderHeight","focusTrapElement","display","openModal","closeModal","clientHeight","tabbableOptions","getShadowRoot","dsoTable","tableElement","HTMLTableElement","floor","getBoundingClientRect","contentRect"],"sources":["src/components/alert/alert.i18n.ts","src/components/alert/alert.scss?tag=dso-alert&encapsulation=shadow","src/components/alert/alert.tsx","src/components/badge/badge.scss?tag=dso-badge&encapsulation=shadow","src/components/badge/badge.tsx","src/components/image-overlay/image-overlay.scss?tag=dso-image-overlay&encapsulation=shadow","src/components/image-overlay/image-overlay.tsx","src/components/ozon-content/get-node-name.function.ts","src/components/ozon-content/nodes/abbr.node.tsx","src/components/ozon-content/functions/wijzigactie-to-class-name.function.ts","src/components/ozon-content/functions/parse-wijzigactie-from-node.function.ts","src/components/ozon-content/functional-components/wrap-wijzigactie.functional-component.tsx","src/components/ozon-content/nodes/al.node.tsx","src/components/ozon-content/nodes/bron.node.tsx","src/components/ozon-content/nodes/document.node.tsx","../../node_modules/lodash.kebabcase/index.js","src/components/ozon-content/nodes/ext-ref.node.tsx","src/components/ozon-content/nodes/fallback.node.tsx","src/components/ozon-content/nodes/figuur.node.tsx","src/components/ozon-content/nodes/inhoud.node.tsx","src/components/ozon-content/nodes/inline-tekst-afbeelding.node.tsx","src/components/ozon-content/nodes/inline.nodes.tsx","src/components/ozon-content/nodes/int-io-ref.node.tsx","src/components/ozon-content/nodes/int-ref.node.tsx","src/components/ozon-content/nodes/lijst.node.tsx","src/components/ozon-content/nodes/nieuwe-tekst.node.tsx","src/components/ozon-content/nodes/noot.node.tsx","src/components/ozon-content/nodes/kop.node.tsx","src/components/ozon-content/nodes/table.node/colspec/colspec-mapper.ts","src/components/ozon-content/nodes/table.node/table-colgroup.tsx","src/components/ozon-content/nodes/table.node/table-cell.tsx","src/components/ozon-content/nodes/table.node/table-rows.tsx","src/components/ozon-content/nodes/table.node/table.node.tsx","src/components/ozon-content/nodes/text.node.tsx","src/components/ozon-content/nodes/verwijderde-tekst.node.tsx","src/components/ozon-content/ozon-content-mapper.tsx","src/components/ozon-content/ozon-content.scss?tag=dso-ozon-content&encapsulation=shadow","src/components/ozon-content/ozon-content.tsx","src/components/panel/panel.i18n.ts","src/components/panel/panel.scss?tag=dso-panel&encapsulation=shadow","src/components/panel/panel.tsx","src/components/table/table.scss?tag=dso-table&encapsulation=shadow","src/components/table/table.tsx"],"sourcesContent":["import { Resource } from \"../../utils/i18n\";\r\n\r\nexport const translations: Resource = {\r\n en: {\r\n \"dso-alert\": {\r\n close: \"Close\",\r\n success: \"Success\",\r\n info: \"Notice\",\r\n warning: \"Warning\",\r\n error: \"Error\",\r\n },\r\n },\r\n nl: {\r\n \"dso-alert\": {\r\n close: \"Sluiten\",\r\n success: \"Gelukt\",\r\n info: \"Opmerking\",\r\n warning: \"Waarschuwing\",\r\n error: \"Fout\",\r\n },\r\n },\r\n};\r\n","@use \"~dso-toolkit/src/utilities\";\r\n@use \"~dso-toolkit/src/variables/units\";\r\n@use \"~dso-toolkit/src/components/alert\";\r\n\r\n:host {\r\n display: block;\r\n}\r\n\r\n:host(:not(:first-child)) {\r\n margin-block-start: units.$u3;\r\n}\r\n\r\n:host([compact]:not([compact=\"false\"])) {\r\n position: relative;\r\n @include alert.compact();\r\n}\r\n\r\n:host([status=\"success\"]) {\r\n @include alert.status-success();\r\n}\r\n\r\n:host([status=\"success\"][compact]:not([compact=\"false\"])) {\r\n &::before {\r\n background-color: alert.$success-compact-accent-bg;\r\n }\r\n}\r\n\r\n:host([status=\"error\"]) {\r\n @include alert.status-error();\r\n}\r\n\r\n:host([status=\"error\"][compact]:not([compact=\"false\"])) {\r\n &::before {\r\n background-color: alert.$danger-compact-accent-bg;\r\n }\r\n}\r\n\r\n:host([status=\"warning\"]) {\r\n @include alert.status-warning();\r\n}\r\n\r\n:host([status=\"warning\"][compact]:not([compact=\"false\"])) {\r\n &::before {\r\n background-color: alert.$warning-compact-accent-bg;\r\n }\r\n}\r\n\r\n:host([status=\"info\"]) {\r\n @include alert.status-info();\r\n}\r\n\r\n:host([status=\"info\"][compact]:not([compact=\"false\"])) {\r\n &::before {\r\n background-color: alert.$info-compact-accent-bg;\r\n }\r\n}\r\n\r\n@include utilities.box-sizing();\r\n\r\n.sr-only {\r\n @include utilities.sr-only();\r\n}\r\n\r\n.alert {\r\n @include alert.root();\r\n\r\n &.dso-compact {\r\n min-block-size: alert.$inline-padding;\r\n }\r\n}\r\n","import { Component, Element, Event, EventEmitter, h, Prop } from \"@stencil/core\";\r\n\r\nimport clsx from \"clsx\";\r\n\r\nimport { i18n } from \"../../utils/i18n\";\r\n\r\nimport { translations } from \"./alert.i18n\";\r\nimport { AlertCloseEvent } from \"./alert.interfaces\";\r\n\r\n@Component({\r\n tag: \"dso-alert\",\r\n styleUrl: \"alert.scss\",\r\n shadow: true,\r\n})\r\nexport class Alert {\r\n @Element()\r\n host!: HTMLDsoAlertElement;\r\n\r\n /**\r\n * Set status of alert\r\n */\r\n @Prop({ reflect: true })\r\n status!: \"success\" | \"info\" | \"warning\" | \"error\";\r\n\r\n /**\r\n * Whether or not to show the role attribute with value \"alert\". To control the tooltip add the `role-alert` attribute.\r\n */\r\n @Prop()\r\n roleAlert?: boolean;\r\n\r\n /**\r\n * Show alert as compact variant (without icon)\r\n */\r\n @Prop({ reflect: true })\r\n compact?: boolean;\r\n\r\n /**\r\n * When `false` the close button in the alert will not be rendered.\r\n */\r\n @Prop()\r\n closable = false;\r\n\r\n /**\r\n * Emitted when the user closes the Alert.\r\n */\r\n @Event()\r\n dsoClose!: EventEmitter<AlertCloseEvent>;\r\n\r\n private text = i18n(() => this.host, translations);\r\n\r\n render() {\r\n const status = this.text(this.status);\r\n if (!status) {\r\n throw new Error(`Invalid status ${this.status}`);\r\n }\r\n\r\n return (\r\n <div\r\n class={clsx(\"alert\", `alert-${this.status}`, { \"dso-compact\": this.compact })}\r\n role={this.roleAlert ? \"alert\" : undefined}\r\n >\r\n {!this.compact && <dso-icon class=\"icon-status\" icon={\"status-\" + this.status} />}\r\n <span class=\"sr-only\">{status}:</span>\r\n <slot></slot>\r\n\r\n {this.closable && (\r\n <button type=\"button\" class=\"dso-close\" onClick={(e) => this.dsoClose.emit({ originalEvent: e })}>\r\n <dso-icon icon=\"times\"></dso-icon>\r\n <span class=\"sr-only\">{this.text(\"close\")}</span>\r\n </button>\r\n )}\r\n </div>\r\n );\r\n }\r\n}\r\n","@use \"~dso-toolkit/src/utilities\";\r\n@use \"~dso-toolkit/src/components/badge\";\r\n\r\n:host {\r\n display: inline-block;\r\n}\r\n\r\n@include utilities.box-sizing();\r\n\r\n.sr-only {\r\n @include utilities.sr-only();\r\n}\r\n\r\n.dso-badge {\r\n @include badge.root();\r\n}\r\n","import { Component, h, Prop } from \"@stencil/core\";\r\nimport clsx from \"clsx\";\r\nimport { BadgeStatus } from \"./badge.interfaces\";\r\n\r\n@Component({\r\n tag: \"dso-badge\",\r\n styleUrl: \"badge.scss\",\r\n shadow: true,\r\n})\r\nexport class Badge {\r\n /**\r\n * The status of the Badge.\r\n */\r\n @Prop()\r\n status?: BadgeStatus;\r\n\r\n render() {\r\n return (\r\n <span class={clsx(\"dso-badge\", { [`badge-${this.status}`]: this.status })}>\r\n <slot></slot>\r\n </span>\r\n );\r\n }\r\n}\r\n","@use \"sass:color\";\r\n\r\n@use \"~dso-toolkit/src/utilities\";\r\n\r\n@use \"~dso-toolkit/src/variables/colors\";\r\n@use \"~dso-toolkit/src/variables/units\";\r\n@use \"~dso-toolkit/src/variables/zindex\";\r\n\r\n@use \"~dso-toolkit/src/components/button\";\r\n@use \"~dso-toolkit/src/components/insert\";\r\n@use \"~dso-toolkit/src/components/delete\";\r\n\r\n:host {\r\n display: inline-block;\r\n position: relative;\r\n}\r\n\r\n:host(:hover) .open,\r\n.open:focus {\r\n opacity: 1;\r\n}\r\n\r\nbutton {\r\n @include button.element();\r\n}\r\n\r\n.open {\r\n @include button.secondary($modifiers: false, $icon-only: true);\r\n\r\n // stylelint-disable-next-line no-duplicate-selectors -- needed to fix sass deprecation warnings: #2724\r\n & {\r\n border: 0;\r\n box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.5);\r\n min-inline-size: auto;\r\n padding: units.$u1;\r\n opacity: 0;\r\n position: absolute;\r\n inset-inline-end: units.$u2;\r\n inset-block-start: units.$u2;\r\n }\r\n}\r\n\r\n.dimmer {\r\n position: fixed;\r\n inset: 0;\r\n z-index: zindex.$image-overlay - 1;\r\n display: flex;\r\n padding: units.$u4;\r\n background-color: color.scale(colors.$wit, $alpha: -20%);\r\n justify-content: center;\r\n}\r\n\r\n.wrapper {\r\n align-self: center;\r\n box-shadow: 0 units.$u1 units.$u3 0 rgba(25, 25, 25, 0.4);\r\n line-height: 0;\r\n outline: 4px solid colors.$wit;\r\n position: relative;\r\n z-index: zindex.$image-overlay;\r\n\r\n .title {\r\n background-color: colors.$wit;\r\n font-weight: 700;\r\n line-height: initial;\r\n padding: units.$u1;\r\n position: absolute;\r\n }\r\n\r\n img {\r\n inline-size: auto;\r\n block-size: auto;\r\n max-inline-size: 100%;\r\n max-block-size: calc(100vh - units.$u8);\r\n }\r\n\r\n .figuur-bijschrift:not([hidden]) {\r\n display: block;\r\n font-size: 0.75rem;\r\n font-style: italic;\r\n padding-block-end: units.$u1 * 1.5;\r\n padding-block-start: units.$u2;\r\n }\r\n}\r\n\r\n.close {\r\n @include button.secondary($modifiers: false, $icon-only: true);\r\n\r\n // stylelint-disable-next-line no-duplicate-selectors -- needed to fix sass deprecation warnings: #2724\r\n & {\r\n border: 0;\r\n box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.5);\r\n min-inline-size: auto;\r\n padding: units.$u1;\r\n position: absolute;\r\n inset-block-start: units.$u2;\r\n inset-inline-end: units.$u2;\r\n }\r\n}\r\n\r\nins.editaction-add {\r\n display: inline-block;\r\n margin-block-end: units.$u1;\r\n padding: units.$u1;\r\n @include insert.element();\r\n @include insert.root();\r\n\r\n .wrapper {\r\n outline: none;\r\n padding: units.$u1;\r\n @include insert.root();\r\n\r\n .editaction-label {\r\n line-height: 1.5;\r\n }\r\n\r\n .close {\r\n inset-block-start: units.$u6;\r\n }\r\n }\r\n\r\n .open {\r\n inset-block-start: units.$u6;\r\n }\r\n}\r\n\r\ndel.editaction-remove {\r\n display: inline-block;\r\n margin-block-end: units.$u1;\r\n padding: units.$u1;\r\n @include delete.root();\r\n\r\n .wrapper {\r\n outline: none;\r\n padding: units.$u1;\r\n @include delete.root();\r\n\r\n .title {\r\n text-decoration: line-through;\r\n }\r\n\r\n .editaction-label {\r\n line-height: 1.5;\r\n }\r\n\r\n .close {\r\n inset-block-start: units.$u6;\r\n }\r\n }\r\n\r\n .open {\r\n inset-block-start: units.$u6;\r\n }\r\n}\r\n\r\n.editaction-label {\r\n font-style: italic;\r\n margin-block-end: units.$u1;\r\n}\r\n","import {\r\n Component,\r\n ComponentInterface,\r\n Element,\r\n forceUpdate,\r\n FunctionalComponent,\r\n h,\r\n Host,\r\n Listen,\r\n Prop,\r\n State,\r\n} from \"@stencil/core\";\r\nimport debounce from \"debounce\";\r\nimport { createFocusTrap, FocusTrap } from \"focus-trap\";\r\n\r\ntype ImageOverlayWijzigactie = \"voegtoe\" | \"verwijder\";\r\n\r\nconst wijzigactieLabels: { [wijzigactie in ImageOverlayWijzigactie]: string } = {\r\n verwijder: \"Verwijderd\",\r\n voegtoe: \"Toegevoegd\",\r\n};\r\n\r\nconst Dimmer: FunctionalComponent<{\r\n active: boolean;\r\n src: string | undefined;\r\n alt: string | undefined;\r\n ref: (element: HTMLHeadingElement | undefined) => void;\r\n click: () => void;\r\n}> = ({ active, src, alt, ref, click }, children) =>\r\n active &&\r\n src && (\r\n <div class=\"dimmer\">\r\n <div class=\"wrapper\" ref={ref}>\r\n {children[2]}\r\n {children[0]}\r\n <img src={src} alt={alt} />\r\n <button type=\"button\" class=\"close\" onClick={click}>\r\n <dso-icon icon=\"times\"></dso-icon>\r\n <span>Sluiten</span>\r\n </button>\r\n {children[1]}\r\n </div>\r\n </div>\r\n );\r\n\r\n@Component({\r\n tag: \"dso-image-overlay\",\r\n styleUrl: \"./image-overlay.scss\",\r\n shadow: true,\r\n})\r\nexport class ImageOverlay implements ComponentInterface {\r\n @Element()\r\n host!: HTMLDsoImageOverlayElement;\r\n\r\n /**\r\n * The wijzigactie.\r\n */\r\n @Prop()\r\n wijzigactie?: string;\r\n\r\n @State()\r\n active = false;\r\n\r\n @State()\r\n zoomable = false;\r\n\r\n private buttonElement: HTMLButtonElement | undefined;\r\n\r\n private wrapperElement: HTMLDivElement | undefined;\r\n\r\n private trap: FocusTrap | undefined;\r\n\r\n private titelSlot: HTMLElement | null = null;\r\n\r\n private bijschriftSlot: HTMLElement | null = null;\r\n\r\n private mutationObserver?: MutationObserver;\r\n\r\n private resizeObserver?: ResizeObserver;\r\n\r\n @Listen(\"load\", { capture: true })\r\n loadListener(event: Event) {\r\n if (event.target instanceof HTMLImageElement) {\r\n this.setZoomable(event.target);\r\n }\r\n }\r\n\r\n connectedCallback() {\r\n this.titelSlot = this.host.querySelector<HTMLDivElement>(\"div[slot='titel']\");\r\n\r\n this.bijschriftSlot = this.host.querySelector<HTMLDivElement>(\"div[slot='bijschrift']\");\r\n }\r\n\r\n componentDidLoad() {\r\n this.resizeObserver = new ResizeObserver(\r\n debounce(() => {\r\n const imgElement = this.host.querySelector(\"img\");\r\n\r\n if (imgElement instanceof HTMLImageElement) {\r\n this.setZoomable(imgElement);\r\n }\r\n }, 200),\r\n );\r\n\r\n this.mutationObserver = new MutationObserver((e) => {\r\n forceUpdate(this.host);\r\n\r\n if (e[0]?.type === \"childList\") {\r\n this.resizeObserver?.disconnect();\r\n // <img> is gone or a new element.\r\n this.initZoomableImage();\r\n }\r\n });\r\n\r\n this.mutationObserver.observe(this.host, {\r\n attributes: true,\r\n subtree: true,\r\n attributeFilter: [\"src\", \"alt\"],\r\n childList: true,\r\n });\r\n\r\n this.initZoomableImage();\r\n }\r\n\r\n disconnectedCallback() {\r\n this.trap?.deactivate();\r\n this.mutationObserver?.disconnect();\r\n this.resizeObserver?.disconnect();\r\n }\r\n\r\n private initZoomableImage(): void {\r\n const imgElement = this.host.querySelector(\"img\");\r\n\r\n if (!(imgElement instanceof HTMLImageElement)) {\r\n return;\r\n }\r\n\r\n // Due to timing issues where the image is loaded before we listen to load events we double check if the image is already complete.\r\n if (imgElement.complete) {\r\n this.setZoomable(imgElement);\r\n }\r\n\r\n this.resizeObserver?.observe(imgElement);\r\n }\r\n\r\n private setZoomable(imageElement: HTMLImageElement): void {\r\n const { width, naturalWidth, height, naturalHeight } = imageElement;\r\n\r\n this.zoomable = width < naturalWidth || height < naturalHeight;\r\n }\r\n\r\n private isWijzigactie(wijzigactie: string): wijzigactie is ImageOverlayWijzigactie {\r\n return wijzigactie === \"voegtoe\" || wijzigactie === \"verwijder\";\r\n }\r\n\r\n render() {\r\n const { src, alt } = this.host.querySelector(\"img\") ?? {};\r\n\r\n const editActionLabel: string | undefined =\r\n (this.wijzigactie && this.isWijzigactie(this.wijzigactie) && wijzigactieLabels[this.wijzigactie]) || undefined;\r\n\r\n const button = this.zoomable && (\r\n <button\r\n type=\"button\"\r\n class=\"open\"\r\n ref={(element) => (this.buttonElement = element)}\r\n onClick={() => (this.active = true)}\r\n >\r\n <dso-icon icon=\"external-link\"></dso-icon>\r\n <span>Afbeelding vergroot weergeven</span>\r\n </button>\r\n );\r\n\r\n if (this.wijzigactie === \"verwijder\") {\r\n return (\r\n <Host onClick={() => this.buttonElement?.focus()}>\r\n <del class=\"editaction-remove\">\r\n <div class=\"editaction-label\">{editActionLabel}:</div>\r\n <Dimmer\r\n active={this.active}\r\n src={src}\r\n alt={alt}\r\n ref={(element) => (this.wrapperElement = element)}\r\n click={() => (this.active = false)}\r\n >\r\n {this.titelSlot && (\r\n <div class=\"title\">\r\n <slot name=\"titel\" />\r\n </div>\r\n )}\r\n <div class=\"figuur-bijschrift\" hidden={!this.bijschriftSlot}>\r\n <slot name=\"bijschrift\" />\r\n </div>\r\n {<div class=\"editaction-label\">{editActionLabel}:</div>}\r\n </Dimmer>\r\n <slot />\r\n {button}\r\n </del>\r\n </Host>\r\n );\r\n }\r\n\r\n if (this.wijzigactie === \"voegtoe\") {\r\n return (\r\n <Host onClick={() => this.buttonElement?.focus()}>\r\n <ins class=\"editaction-add\">\r\n <div class=\"editaction-label\">{editActionLabel}:</div>\r\n <Dimmer\r\n active={this.active}\r\n src={src}\r\n alt={alt}\r\n ref={(element) => (this.wrapperElement = element)}\r\n click={() => (this.active = false)}\r\n >\r\n {this.titelSlot && (\r\n <div class=\"title\">\r\n <slot name=\"titel\" />\r\n </div>\r\n )}\r\n <div class=\"figuur-bijschrift\" hidden={!this.bijschriftSlot}>\r\n <slot name=\"bijschrift\" />\r\n </div>\r\n {<div class=\"editaction-label\">{editActionLabel}:</div>}\r\n </Dimmer>\r\n <slot />\r\n {button}\r\n </ins>\r\n </Host>\r\n );\r\n }\r\n\r\n return (\r\n <Host onClick={() => this.buttonElement?.focus()}>\r\n <Dimmer\r\n active={this.active}\r\n src={src}\r\n alt={alt}\r\n ref={(element) => (this.wrapperElement = element)}\r\n click={() => (this.active = false)}\r\n >\r\n {this.titelSlot && (\r\n <div class=\"title\">\r\n <slot name=\"titel\" />\r\n </div>\r\n )}\r\n <div class=\"figuur-bijschrift\" hidden={!this.bijschriftSlot}>\r\n <slot name=\"bijschrift\" />\r\n </div>\r\n </Dimmer>\r\n <slot />\r\n {button}\r\n </Host>\r\n );\r\n }\r\n\r\n componentDidRender() {\r\n if (this.active && this.wrapperElement && !this.trap) {\r\n this.trap = createFocusTrap(this.wrapperElement, {\r\n escapeDeactivates: true,\r\n clickOutsideDeactivates: (e) => {\r\n if (e instanceof MouseEvent && e.composedPath()[0] === this.wrapperElement) {\r\n this.active = false;\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n },\r\n setReturnFocus: this.buttonElement ?? false,\r\n onDeactivate: () => (this.active = false),\r\n }).activate();\r\n } else if (!this.active && this.trap) {\r\n this.trap?.deactivate();\r\n\r\n delete this.trap;\r\n }\r\n }\r\n}\r\n","export function getNodeName(node: Node): string {\r\n if (node instanceof Element) {\r\n return node.localName;\r\n }\r\n\r\n if (node.nodeName.includes(\":\")) {\r\n return node.nodeName.substring(node.nodeName.indexOf(\":\") + 1);\r\n }\r\n\r\n return node.nodeName;\r\n}\r\n","import { h } from \"@stencil/core\";\r\n\r\nimport { OzonContentNode } from \"../ozon-content-node.interface\";\r\nimport { OzonContentNodeContext } from \"../ozon-content-node-context.interface\";\r\n\r\nexport class OzonContentAbbrNode implements OzonContentNode {\r\n name = \"abbr\";\r\n\r\n render(node: Element, { mapNodeToJsx }: OzonContentNodeContext) {\r\n const title = node.getAttribute(\"title\");\r\n\r\n return (\r\n <span class=\"od-abbr\">\r\n <abbr>{mapNodeToJsx(node.childNodes)}</abbr>\r\n {title && ` (${title})`}\r\n </span>\r\n );\r\n }\r\n}\r\n","import { OzonContentWijzigActie } from \"../ozon-content.interfaces\";\r\n\r\nexport function wijzigactieToClassName(wijzigactie: OzonContentWijzigActie | undefined): string | undefined {\r\n if (wijzigactie === \"voegtoe\") {\r\n return \"editaction-add\";\r\n }\r\n\r\n if (wijzigactie === \"verwijder\") {\r\n return \"editaction-remove\";\r\n }\r\n\r\n return undefined;\r\n}\r\n","import { OzonContentWijzigActie } from \"../ozon-content.interfaces\";\r\n\r\nexport function parseWijzigactieFromNode(node: Node): OzonContentWijzigActie | undefined {\r\n const wijzigactie = node instanceof Element ? node.getAttribute(\"wijzigactie\") : undefined;\r\n\r\n return wijzigactie === \"voegtoe\" || wijzigactie === \"verwijder\" ? wijzigactie : undefined;\r\n}\r\n","import { FunctionalComponent, h } from \"@stencil/core\";\r\nimport { OzonContentWijzigActie } from \"../ozon-content.interfaces\";\r\n\r\nexport interface WrapWijzigactieProps {\r\n wijzigactie: OzonContentWijzigActie | undefined;\r\n}\r\n\r\nexport const WrapWijzigactie: FunctionalComponent<WrapWijzigactieProps> = ({ wijzigactie }, children) => {\r\n if (wijzigactie === \"voegtoe\") {\r\n return <ins>{children}</ins>;\r\n }\r\n\r\n if (wijzigactie === \"verwijder\") {\r\n return <del>{children}</del>;\r\n }\r\n\r\n return children;\r\n};\r\n","import { h } from \"@stencil/core\";\r\n\r\nimport { getNodeName } from \"../get-node-name.function\";\r\nimport { OzonContentNodeContext } from \"../ozon-content-node-context.interface\";\r\nimport { OzonContentNode } from \"../ozon-content-node.interface\";\r\n\r\nimport { wijzigactieToClassName } from \"../functions/wijzigactie-to-class-name.function\";\r\nimport { parseWijzigactieFromNode } from \"../functions/parse-wijzigactie-from-node.function\";\r\nimport { WrapWijzigactie } from \"../functional-components/wrap-wijzigactie.functional-component\";\r\n\r\nfunction isNestedAl(path: Node[]) {\r\n return path.some((n) => {\r\n const nodeName = getNodeName(n);\r\n\r\n return nodeName === \"Al\" || nodeName === \"Opschrift\";\r\n });\r\n}\r\n\r\nexport class OzonContentAlNode implements OzonContentNode {\r\n name = \"Al\";\r\n\r\n render(node: Element, { mapNodeToJsx, path, inline }: OzonContentNodeContext) {\r\n let content = mapNodeToJsx(node.childNodes);\r\n const wijzigactie = parseWijzigactieFromNode(node);\r\n const className = wijzigactieToClassName(wijzigactie);\r\n\r\n if (inline || isNestedAl(path)) {\r\n content = (\r\n <span role=\"paragraph\" class={className}>\r\n {content}\r\n </span>\r\n );\r\n } else {\r\n content = <p class={className}>{content}</p>;\r\n }\r\n\r\n return <WrapWijzigactie wijzigactie={wijzigactie}>{content}</WrapWijzigactie>;\r\n }\r\n}\r\n","import { h } from \"@stencil/core\";\r\n\r\nimport { OzonContentNodeContext } from \"../ozon-content-node-context.interface\";\r\nimport { OzonContentNode } from \"../ozon-content-node.interface\";\r\n\r\nexport class OzonContentBronNode implements OzonContentNode {\r\n name = \"Bron\";\r\n\r\n render(node: Element, { mapNodeToJsx }: OzonContentNodeContext) {\r\n return <span class=\"dso-ozon-bron\">{mapNodeToJsx(node.childNodes)}</span>;\r\n }\r\n}\r\n","import { Fragment, h } from \"@stencil/core\";\r\n\r\nimport { OzonContentNodeContext } from \"../ozon-content-node-context.interface\";\r\nimport { OzonContentNode } from \"../ozon-content-node.interface\";\r\n\r\nexport class OzonContentDocumentNode implements OzonContentNode {\r\n name = \"#document\";\r\n\r\n render(node: Node, { mapNodeToJsx }: OzonContentNodeContext) {\r\n return <Fragment>{mapNodeToJsx(node.childNodes)}</Fragment>;\r\n }\r\n}\r\n","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/** Used to match words composed of alphanumeric characters. */\nvar reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe23',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20f0',\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n/** Used to compose unicode capture groups. */\nvar rsApos = \"['\\u2019]\",\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')',\n rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;\n\n/** Used to match apostrophes. */\nvar reApos = RegExp(rsApos, 'g');\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/** Used to match complex or compound words. */\nvar reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')',\n rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr,\n rsUpper + '+' + rsOptUpperContr,\n rsDigits,\n rsEmoji\n].join('|'), 'g');\n\n/** Used to detect strings that need a more robust regexp to match words. */\nvar reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 'ss'\n};\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\nfunction arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array ? array.length : 0;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n}\n\n/**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction asciiWords(string) {\n return string.match(reAsciiWord) || [];\n}\n\n/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n}\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\n/**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\nfunction hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n}\n\n/**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\nfunction unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n}\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\nfunction createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\n/**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\nvar kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n});\n\n/**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\nfunction words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n}\n\nmodule.exports = kebabCase;\n","import { h } from \"@stencil/core\";\r\nimport kebabCase from \"lodash.kebabcase\";\r\n\r\nimport { OzonContentNodeContext } from \"../ozon-content-node-context.interface\";\r\nimport { OzonContentNode } from \"../ozon-content-node.interface\";\r\n\r\nexport class OzonContentExtRefNode implements OzonContentNode {\r\n name = [\"ExtRef\", \"ExtIoRef\"];\r\n\r\n render(node: Element, { mapNodeToJsx }: OzonContentNodeContext) {\r\n const href = node.tagName === \"ExtIoRef\" ? node.getAttribute(\"href\") : node.getAttribute(\"ref\");\r\n const className = kebabCase(node.tagName);\r\n\r\n return (\r\n <a\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n href={href ?? undefined}\r\n class={className}\r\n title=\"Opent andere website in nieuw tabblad\"\r\n >\r\n <span>{mapNodeToJsx(node.childNodes)}</span>\r\n <dso-icon icon=\"external-link\"></dso-icon>\r\n </a>\r\n );\r\n }\r\n}\r\n","import { h } from \"@stencil/core\";\r\n\r\nimport { getNodeName } from \"../get-node-name.function\";\r\nimport { OzonContentNodeContext } from \"../ozon-content-node-context.interface\";\r\nimport { OzonContentNode } from \"../ozon-content-node.interface\";\r\n\r\nexport class OzonContentFallbackNode implements OzonContentNode {\r\n // This name does not match any elements\r\n name = [\"<fallback>\"];\r\n\r\n render(node: Node, { mapNodeToJsx }: OzonContentNodeContext) {\r\n return <span class={`fallback od-${getNodeName(node)}`}>{mapNodeToJsx(node.childNodes)}</span>;\r\n }\r\n}\r\n","import { Fragment, h, JSX } from \"@stencil/core\";\r\n\r\nimport { getNodeName } from \"../get-node-name.function\";\r\nimport { OzonContentNodeContext } from \"../ozon-content-node-context.interface\";\r\nimport { OzonContentNode } from \"../ozon-content-node.interface\";\r\n\r\ntype BijschriftProps = {\r\n bijschrift?: IBijschrift;\r\n bron?: ChildNode;\r\n mapNodeToJsx: (node: Node | NodeList | Node[]) => JSX.Element;\r\n};\r\n\r\ninterface IBijschrift {\r\n inhoud: NodeListOf<ChildNode>;\r\n locatie: string;\r\n}\r\n\r\nconst Bijschrift = ({ bijschrift, bron, mapNodeToJsx }: BijschriftProps): HTMLSpanElement => {\r\n return (\r\n <span class=\"figuur-bijschrift\">\r\n {bijschrift && bijschrift.inhoud && mapNodeToJsx(bijschrift.inhoud)}\r\n {bron && (\r\n <Fragment>\r\n {`${bijschrift ? \" \" : \"\"}(bron: `}\r\n {mapNodeToJsx(bron)})\r\n </Fragment>\r\n )}\r\n </span>\r\n );\r\n};\r\n\r\nexport class OzonContentFiguurNode implements OzonContentNode {\r\n name = [\"Figuur\"];\r\n\r\n render(node: Element, { mapNodeToJsx }: OzonContentNodeContext) {\r\n const childNodes = Array.from(node.childNodes);\r\n const titel = childNodes.find((n) => getNodeName(n) === \"Titel\")?.textContent;\r\n const bron = childNodes.find((n) => getNodeName(n) === \"Bron\");\r\n\r\n const illustratieNode = childNodes.find((n) => getNodeName(n) === \"Illustratie\");\r\n const bijschriftNode = childNodes.find((n) => getNodeName(n) === \"Bijschrift\");\r\n\r\n const wijzigactie = node.getAttribute(\"wijzigactie\") || undefined;\r\n\r\n if (illustratieNode instanceof Element) {\r\n const illustratie = {\r\n naam: illustratieNode.getAttribute(\"naam\"),\r\n breedte: illustratieNode.getAttribute(\"breedte\"),\r\n hoogte: illustratieNode.getAttribute(\"hoogte\"),\r\n uitlijning: illustratieNode.getAttribute(\"uitlijning\"),\r\n alt: illustratieNode.getAttribute(\"alt\"),\r\n };\r\n\r\n const bijschrift =\r\n bijschriftNode instanceof Element\r\n ? {\r\n inhoud: bijschriftNode.childNodes,\r\n locatie: bijschriftNode.getAttribute(\"locatie\") ?? \"onder\",\r\n }\r\n : undefined;\r\n\r\n return (\r\n <div class={`dso-ozon-figuur ${bijschrift ? `bijschrift-${bijschrift.locatie}` : \"onder\"}`}>\r\n {titel && <span class=\"figuur-titel\">{titel}</span>}\r\n {bijschrift?.locatie === \"boven\" && (\r\n <Bijschrift bijschrift={bijschrift} bron={bron} mapNodeToJsx={mapNodeToJsx} />\r\n )}\r\n <dso-image-overlay wijzigactie={wijzigactie}>\r\n {titel && (\r\n <div slot=\"titel\">\r\n <span>{titel}</span>\r\n </div>\r\n )}\r\n <img src={illustratie.naam ?? undefined} alt={illustratie.alt ?? titel ?? illustratie.naam ?? undefined} />\r\n {(bijschrift || bron) && (\r\n <div slot=\"bijschrift\">\r\n <Bijschrift bijschrift={bijschrift} bron={bron} mapNodeToJsx={mapNodeToJsx} />\r\n </div>\r\n )}\r\n </dso-image-overlay>\r\n {(bijschrift?.locatie === \"onder\" || (!bijschrift && bron)) && (\r\n <Bijschrift bijschrift={bijschrift} bron={bron} mapNodeToJsx={mapNodeToJsx} />\r\n )}\r\n </div>\r\n );\r\n }\r\n }\r\n}\r\n","import { h } from \"@stencil/core\";\r\n\r\nimport { OzonContentNodeContext } from \"../ozon-content-node-context.interface\";\r\nimport { OzonContentNode } from \"../ozon-content-node.interface\";\r\n\r\nexport class OzonContentInhoudNode implements OzonContentNode {\r\n name = [\"Inhoud\", \"ContainerBlocksType\", \"BlockMixedcontentMetMaximaleInlinesMarkersPopupsType\"];\r\n\r\n render(node: Element, { mapNodeToJsx }: OzonContentNodeContext) {\r\n const wijzigactie = node.getAttribute(\"wijzigactie\");\r\n\r\n const richContent = <div class=\"dso-rich-content\">{mapNodeToJsx(node.childNodes)}</div>;\r\n\r\n if (wijzigactie === \"verwijder\") {\r\n return <del class=\"editaction-remove\">{richContent}</del>;\r\n }\r\n\r\n if (wijzigactie === \"voegtoe\") {\r\n return <ins class=\"editaction-add\">{richContent}</ins>;\r\n }\r\n\r\n return richContent;\r\n }\r\n}\r\n","import { h } from \"@stencil/core\";\r\n\r\nimport { OzonContentNode } from \"../ozon-content-node.interface\";\r\n\r\nexport class OzonContentInlineTekstAfbeeldingNode implements OzonContentNode {\r\n name = [\"InlineTekstAfbeelding\", \"Illustratie\"];\r\n\r\n render(node: Element) {\r\n return (\r\n <img\r\n src={node.getAttribute(\"naam\") ?? undefined}\r\n alt={node.getAttribute(\"naam\") ?? undefined}\r\n height={node.getAttribute(\"hoogte\") ?? undefined}\r\n width={node.getAttribute(\"breedte\") ?? undefined}\r\n />\r\n );\r\n }\r\n}\r\n","import { h } from \"@stencil/core\";\r\n\r\nimport { OzonContentNodeContext } from \"../ozon-content-node-context.interface\";\r\nimport { OzonContentNode } from \"../ozon-content-node.interface\";\r\n\r\nexport class OzonContentInlineNodes implements OzonContentNode {\r\n name = [\"sub\", \"sup\", \"strong\", \"b\", \"u\", \"i\", \"br\"];\r\n\r\n render(node: Element, { mapNodeToJsx }: OzonContentNodeContext) {\r\n if (node.localName === \"br\") {\r\n return <br />;\r\n }\r\n\r\n const Tag = node.localName;\r\n\r\n return <Tag>{mapNodeToJsx(node.childNodes)}</Tag>;\r\n }\r\n}\r\n","import { h } from \"@stencil/core\";\r\n\r\nimport { OzonContentNodeContext } from \"../ozon-content-node-context.interface\";\r\nimport { OzonContentNode } from \"../ozon-content-node.interface\";\r\n\r\nexport class OzonContentIntIoRefNode implements OzonContentNode {\r\n name = \"IntIoRef\";\r\n\r\n render(node: Element, { mapNodeToJsx, emitAnchorClick }: OzonContentNodeContext) {\r\n const ref = node.getAttribute(\"ref\");\r\n if (!ref) {\r\n return mapNodeToJsx(node.childNodes);\r\n }\r\n\r\n const intRefOnClick = (event: MouseEvent) => {\r\n event.preventDefault();\r\n\r\n const target = event.currentTarget;\r\n if (!(target instanceof HTMLAnchorElement)) {\r\n return;\r\n }\r\n\r\n const { href } = target;\r\n\r\n emitAnchorClick({\r\n node: this.name,\r\n href,\r\n documentComponent: ref,\r\n originalEvent: event,\r\n });\r\n };\r\n\r\n return (\r\n <a href={`#${ref}`} onClick={intRefOnClick}>\r\n {mapNodeToJsx(node.childNodes)}\r\n </a>\r\n );\r\n }\r\n}\r\n","import { h } from \"@stencil/core\";\r\n\r\nimport { OzonContentNodeContext } from \"../ozon-content-node-context.interface\";\r\nimport { OzonContentNode } from \"../ozon-content-node.interface\";\r\n\r\nexport class OzonContentIntRefNode implements OzonContentNode {\r\n name = \"IntRef\";\r\n\r\n render(node: Element, { mapNodeToJsx, emitAnchorClick }: OzonContentNodeContext) {\r\n const ref = node.getAttribute(\"ref\");\r\n if (!ref) {\r\n return mapNodeToJsx(node.childNodes);\r\n }\r\n\r\n const intRefOnClick = (event: MouseEvent) => {\r\n event.preventDefault();\r\n\r\n const target = event.currentTarget;\r\n if (!(target instanceof HTMLAnchorElement)) {\r\n return;\r\n }\r\n\r\n const { href } = target;\r\n\r\n emitAnchorClick({\r\n node: this.name,\r\n href,\r\n documentComponent: ref,\r\n originalEvent: event,\r\n });\r\n };\r\n\r\n return (\r\n <a href={`#${ref}`} onClick={intRefOnClick}>\r\n {mapNodeToJsx(node.childNodes)}\r\n </a>\r\n );\r\n }\r\n}\r\n","import { h } from \"@stencil/core\";\r\n\r\nimport { getNodeName } from \"../get-node-name.function\";\r\nimport { OzonContentNodeContext } from \"../ozon-content-node-context.interface\";\r\nimport { OzonContentNode } from \"../ozon-content-node.interface\";\r\nimport { parseWijzigactieFromNode } from \"../functions/parse-wijzigactie-from-node.function\";\r\nimport clsx from \"clsx\";\r\nimport { wijzigactieToClassName } from \"../functions/wijzigactie-to-class-name.function\";\r\nimport { WrapWijzigactie } from \"../functional-components/wrap-wijzigactie.functional-component\";\r\n\r\nexport class OzonContentLijstNode implements OzonContentNode {\r\n name = \"Lijst\";\r\n\r\n render(node: Element, { mapNodeToJsx }: OzonContentNodeContext) {\r\n const wijzigactie = parseWijzigactieFromNode(node);\r\n const childNodes = Array.from(node.childNodes);\r\n const type = parseTypeFromLijstNode(node);\r\n const aanhef = childNodes.find((n) => getNodeName(n) === \"Lijstaanhef\");\r\n const sluiting = childNodes.find((n) => getNodeName(n) === \"Lijstsluiting\");\r\n const listItems = childNodes.filter((n) => getNodeName(n) === \"Li\");\r\n\r\n return (\r\n <WrapWijzigactie wijzigactie={wijzigactie}>\r\n <div class={clsx(\"dso-ozon-lijst od-Lijst\", wijzigactieToClassName(wijzigactie))}>\r\n {aanhef && mapNodeToJsx(aanhef)}\r\n <ul class={type}>\r\n {listItems.map((item) => {\r\n const itemNodes = Array.from(item.childNodes);\r\n const liNummer = itemNodes.find((n) => getNodeName(n) === \"LiNummer\")?.childNodes;\r\n const liWijzigactie = parseWijzigactieFromNode(item);\r\n\r\n return (\r\n <li class={clsx(\"od-Li\", wijzigactieToClassName(liWijzigactie))}>\r\n {liNummer && <span class=\"od-LiNummer\">{mapNodeToJsx(liNummer)}</span>}\r\n <WrapWijzigactie wijzigactie={liWijzigactie}>\r\n {mapNodeToJsx(itemNodes.filter((n) => getNodeName(n) !== \"LiNummer\"))}\r\n </WrapWijzigactie>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n {sluiting && mapNodeToJsx(sluiting)}\r\n </div>\r\n </WrapWijzigactie>\r\n );\r\n }\r\n}\r\n\r\nfunction parseTypeFromLijstNode(node: Node): LijstType | undefined {\r\n const type = node instanceof Element ? node.getAttribute(\"type\") : undefined;\r\n\r\n return type === \"expliciet\" || type === \"ongemarkeerd\" ? type : undefined;\r\n}\r\n\r\ntype LijstType = \"expliciet\" | \"ongemarkeerd\";\r\n","import { h } from \"@stencil/core\";\r\n\r\nimport { OzonContentNodeContext } from \"../ozon-content-node-context.interface\";\r\nimport { OzonContentNode } from \"../ozon-content-node.interface\";\r\n\r\nexport class OzonContentNieuweTekstNode implements OzonContentNode {\r\n name = \"NieuweTekst\";\r\n\r\n render(node: Element, { mapNodeToJsx }: OzonContentNodeContext) {\r\n return <ins class=\"new-text\">{mapNodeToJsx(node.childNodes)}</ins>;\r\n }\r\n}\r\n","import { h, Fragment } from \"@stencil/core\";\r\n\r\nimport { getNodeName } from \"../get-node-name.function\";\r\nimport { OzonContentNodeContext } from \"../ozon-content-node-context.interface\";\r\nimport { OzonContentNode } from \"../ozon-content-node.interface\";\r\n\r\nexport class OzonContentNootNode implements OzonContentNode {\r\n name = \"Noot\";\r\n\r\n handles = [\"NootNummer\"];\r\n\r\n identify(): string | undefined {\r\n return \"Noot\";\r\n }\r\n\r\n render(node: Element, { mapNodeToJsx, state: openNoteId, setState }: OzonContentNodeContext<string | undefined>) {\r\n const noteId = node.getAttribute(\"id\");\r\n if (!noteId) {\r\n console.error(\"Noot node without id\", node);\r\n\r\n return <Fragment />;\r\n }\r\n\r\n const noteControlsId = `dso-ozon-note-${noteId}`;\r\n\r\n const childNodes = Array.from(node.childNodes);\r\n const nootNummer = childNodes.find((n) => getNodeName(n) === \"NootNummer\")?.textContent ?? noteId;\r\n\r\n return (\r\n <>\r\n <sup>\r\n <button\r\n type=\"button\"\r\n class=\"toggle-note\"\r\n aria-describedby={noteControlsId}\r\n onClick={() => setState?.(openNoteId === noteId ? undefined : noteId)}\r\n onBlur={() => setState?.(undefined)}\r\n aria-expanded={openNoteId === noteId ? \"true\" : \"false\"}\r\n >\r\n {nootNummer}\r\n </button>\r\n </sup>\r\n <dso-tooltip active={openNoteId === noteId} id={noteControlsId} stateless descriptive>\r\n <span role=\"section\">{mapNodeToJsx(Array.from(node.querySelectorAll(\":scope > Al\")))}</span>\r\n </dso-tooltip>\r\n </>\r\n );\r\n }\r\n}\r\n","import { h, Fragment } from \"@stencil/core\";\r\n\r\nimport { OzonContentNodeContext } from \"../ozon-content-node-context.interface\";\r\nimport { OzonContentNode } from \"../ozon-content-node.interface\";\r\n\r\nexport class OzonContentKopNode implements OzonContentNode {\r\n name = [\"Opschrift\", \"Label\", \"Nummer\", \"Kop\"];\r\n\r\n render(node: Element, { mapNodeToJsx }: OzonContentNodeContext) {\r\n let content = mapNodeToJsx(node.childNodes);\r\n const wijzigactie = node.getAttribute(\"wijzigactie\");\r\n\r\n if (wijzigactie === \"voegtoe\") {\r\n content = <ins class=\"new-text\">{content}</ins>;\r\n } else if (wijzigactie === \"verwijder\") {\r\n content = <del class=\"removed-text\">{content}</del>;\r\n }\r\n\r\n return <>{content}</>;\r\n }\r\n}\r\n","import { Colspec, Colspecs } from \"./colspec.interface\";\r\n\r\nexport function mapColspecs(count: number, nodeList: NodeListOf<Element>): Colspecs {\r\n const elements = Array.from(nodeList);\r\n const totalWidth = getTotalWidth(elements);\r\n\r\n return {\r\n totalWidth,\r\n count,\r\n columns: elements.map((element, index): Colspec => {\r\n const colNumber = element.getAttribute(\"colnum\");\r\n\r\n return {\r\n colsep: element.getAttribute(\"colsep\"),\r\n name: element.getAttribute(\"colname\") ?? \"\",\r\n number: colNumber ? parseInt(colNumber, 10) : index + 1,\r\n rowsep: element.getAttribute(\"rowsep\"),\r\n width: getWidth(totalWidth, element),\r\n };\r\n }),\r\n };\r\n}\r\n\r\nfunction getTotalWidth(elements: Element[]): number {\r\n return elements.reduce((totalWidth, element) => {\r\n const width = element.getAttribute(\"colwidth\")?.replace(/[^0-9]/, \"\") ?? \"\";\r\n const colWidth = parseInt(width, 10);\r\n\r\n return totalWidth + (isNaN(colWidth) ? 0 : colWidth);\r\n }, 0);\r\n}\r\n\r\nfunction getWidth(totalWidth: number, element: Element): string | undefined {\r\n const width = element.getAttribute(\"colwidth\");\r\n\r\n if (!width) {\r\n return undefined;\r\n }\r\n\r\n if (width === \"*\") {\r\n return \"100%\";\r\n }\r\n\r\n if (width.includes(\"*\") || width.match(/^[\\d+]$/)) {\r\n const colWidth = parseInt(width.replace(/[^0-9]/, \"\"), 10);\r\n\r\n return `${Math.round((colWidth / totalWidth) * 100)}%`;\r\n }\r\n\r\n return width;\r\n}\r\n","import { Fragment, FunctionalComponent, h } from \"@stencil/core\";\r\n\r\nimport { Colspecs } from \"./colspec/colspec.interface\";\r\n\r\nexport const Colgroup: FunctionalComponent<{ colspecs: Colspecs }> = ({ colspecs }) =>\r\n colspecs.columns.length > 0 ? (\r\n <colgroup>\r\n {colspecs.columns.map((colspec) => (\r\n <col style={{ width: colspec.width }} />\r\n ))}\r\n </colgroup>\r\n ) : (\r\n <Fragment />\r\n );\r\n","import { FunctionalComponent } from \"@stencil/core\";\r\nimport { h } from \"@stencil/core/internal\";\r\nimport clsx from \"clsx\";\r\n\r\nimport { OzonContentNodeContext } from \"../../ozon-content-node-context.interface\";\r\nimport { Colspecs } from \"./colspec/colspec.interface\";\r\n\r\nfunction getColspecStartColsep({ columns }: Colspecs, nameStart: string): string | null {\r\n const colspecStart = columns.find((c) => c.name === nameStart);\r\n\r\n return colspecStart ? colspecStart.colsep : null;\r\n}\r\n\r\nfunction getColspecStartRowsep({ columns }: Colspecs, nameStart: string): string | null {\r\n const colspecStart = columns.find((c) => c.name === nameStart);\r\n\r\n return colspecStart ? colspecStart.rowsep : null;\r\n}\r\n\r\nfunction getData(cell: Element, colspecs?: Colspecs) {\r\n const nameStart = cell.getAttribute(\"namest\");\r\n const row = cell.parentElement;\r\n const tgroup = row?.parentElement?.parentElement;\r\n const table = tgroup?.parentElement;\r\n const colsep =\r\n cell.getAttribute(\"colsep\") ||\r\n (colspecs && nameStart ? getColspecStartColsep(colspecs, nameStart) : null) ||\r\n (tgroup && tgroup.getAttribute(\"colsep\")) ||\r\n (table && table.getAttribute(\"colsep\"));\r\n const rowsep =\r\n cell.getAttribute(\"rowsep\") ||\r\n (row && row.getAttribute(\"rowsep\")) ||\r\n (colspecs && nameStart ? getColspecStartRowsep(colspecs, nameStart) : null) ||\r\n (tgroup && tgroup.getAttribute(\"rowsep\")) ||\r\n (table && table.getAttribute(\"rowsep\"));\r\n\r\n return {\r\n moreRows: cell.getAttribute(\"morerows\"),\r\n nameStart,\r\n nameEnd: cell.getAttribute(\"nameend\"),\r\n colsep,\r\n rowsep,\r\n };\r\n}\r\n\r\nfunction getColspan({ columns }: Colspecs, nameStart: string, nameEnd: string): number | undefined {\r\n const colspecStart = columns.find((c) => c.name === nameStart);\r\n const colspecEnd = columns.find((c) => c.name === nameEnd);\r\n if (!colspecStart || !colspecEnd) {\r\n return undefined;\r\n }\r\n\r\n const colspan = colspecEnd.number - colspecStart.number + 1;\r\n\r\n return colspan === 1 ? undefined : colspan;\r\n}\r\n\r\nexport const Cell: FunctionalComponent<{\r\n context: OzonContentNodeContext;\r\n colspecs: Colspecs | undefined;\r\n cell: Element;\r\n}> = ({ context: { mapNodeToJsx }, colspecs, cell }) => {\r\n const { moreRows, nameStart, nameEnd, colsep, rowsep } = getData(cell, colspecs);\r\n\r\n return (\r\n <td\r\n class={clsx({ \"dso-horizontal-line\": rowsep !== \"0\" }, { \"dso-vertical-line\": colsep !== \"0\" })}\r\n rowSpan={moreRows ? parseInt(moreRows, 10) + 1 : undefined}\r\n colSpan={colspecs && nameStart && nameEnd ? getColspan(colspecs, nameStart, nameEnd) : undefined}\r\n >\r\n {mapNodeToJsx(cell.childNodes)}\r\n </td>\r\n );\r\n};\r\n","import { Fragment, FunctionalComponent, h } from \"@stencil/core\";\r\n\r\nimport { OzonContentNodeContext } from \"../../ozon-content-node-context.interface\";\r\n\r\nimport { Colspecs } from \"./colspec/colspec.interface\";\r\nimport { Cell } from \"./table-cell\";\r\n\r\nexport const Rows: FunctionalComponent<{\r\n context: OzonContentNodeContext;\r\n colspecs: Colspecs | undefined;\r\n rows: Element[];\r\n}> = ({ context, colspecs, rows }) => {\r\n return (\r\n <>\r\n {rows.map((row) => (\r\n <tr>\r\n {Array.from(row.children).map((cell) => (\r\n <Cell cell={cell} colspecs={colspecs} context={context} />\r\n ))}\r\n </tr>\r\n ))}\r\n </>\r\n );\r\n};\r\n","import { h } from \"@stencil/core\";\r\nimport clsx from \"clsx\";\r\nimport { v4 as uuidv4 } from \"uuid\";\r\n\r\nimport { getNodeName } from \"../../get-node-name.function\";\r\nimport { OzonContentNodeContext } from \"../../ozon-content-node-context.interface\";\r\nimport { OzonContentNode } from \"../../ozon-content-node.interface\";\r\n\r\nimport { mapColspecs } from \"./colspec/colspec-mapper\";\r\nimport { Colgroup } from \"./table-colgroup\";\r\nimport { Rows } from \"./table-rows\";\r\n\r\nfunction mapData(node: Element) {\r\n const tgroup = node.querySelector(\":scope > tgroup\");\r\n const colAttribute = tgroup?.getAttribute(\"cols\") ?? undefined;\r\n const columnCount = colAttribute ? parseInt(colAttribute, 10) : undefined;\r\n\r\n return {\r\n caption: node.querySelector(\":scope > title\")?.textContent ?? undefined,\r\n colspecs: tgroup && columnCount ? mapColspecs(columnCount, tgroup.querySelectorAll(\":scope > colspec\")) : undefined,\r\n headRows: Array.from(node.querySelectorAll(\":scope > tgroup > thead > row\")),\r\n bodyRows: Array.from(node.querySelectorAll(\":scope > tgroup > tbody > row\")),\r\n wijzigactie: node.getAttribute(\"wijzigactie\"),\r\n frame: node.getAttribute(\"frame\") ? node.getAttribute(\"frame\") : \"all\",\r\n };\r\n}\r\n\r\nexport class OzonContentTableNode implements OzonContentNode {\r\n name = \"table\";\r\n\r\n handles = [\"title\", \"tgroup\", \"colspec\", \"thead\", \"tbody\", \"row\", \"cell\"];\r\n\r\n id = uuidv4();\r\n\r\n render(node: Element, context: OzonContentNodeContext) {\r\n const { caption, colspecs, headRows, bodyRows, wijzigactie, frame } = mapData(node);\r\n\r\n const bron = Array.from(node.childNodes).find((n) => getNodeName(n) === \"Bron\");\r\n\r\n return (\r\n <dso-table>\r\n <table\r\n class={clsx(\"table\", {\r\n \"editaction-add\": wijzigactie === \"voegtoe\",\r\n \"editaction-remove\": wijzigactie === \"verwijder\",\r\n [`dso-table-outside-lines-${frame}`]: frame,\r\n })}\r\n {...(bron ? { \"aria-describedby\": this.id } : {})}\r\n >\r\n {caption && <caption>{caption}</caption>}\r\n {colspecs && <Colgroup colspecs={colspecs} />}\r\n {headRows.length > 0 && (\r\n <thead>\r\n <Rows rows={headRows} colspecs={colspecs} context={context}></Rows>\r\n </thead>\r\n )}\r\n {bodyRows.length > 0 && (\r\n <tbody>\r\n <Rows rows={bodyRows} colspecs={colspecs} context={context}></Rows>\r\n </tbody>\r\n )}\r\n </table>\r\n {bron && <div id={this.id}>{context.mapNodeToJsx(bron)}</div>}\r\n </dso-table>\r\n );\r\n }\r\n}\r\n","import { Fragment, h } from \"@stencil/core\";\r\n\r\nimport { OzonContentNode } from \"../ozon-content-node.interface\";\r\nimport { OzonContentNodeContext } from \"../ozon-content-node-context.interface\";\r\n\r\nexport class OzonContentTextNode implements OzonContentNode {\r\n name = \"#text\";\r\n\r\n render({ textContent }: Node, { mark, emitMarkItemHighlight }: OzonContentNodeContext) {\r\n if (!mark || !textContent) {\r\n return <>{textContent}</>;\r\n }\r\n\r\n const result = mark(textContent);\r\n\r\n return !result || result.length === 0 ? (\r\n <>{textContent}</>\r\n ) : (\r\n <>\r\n {result.map((value) => {\r\n if (typeof value === \"string\") {\r\n return <>{value}</>;\r\n }\r\n\r\n return (\r\n <mark\r\n class={value.highlight ? \"dso-highlight\" : undefined}\r\n ref={(ref) => value.highlight && ref && emitMarkItemHighlight(value.text, ref)}\r\n >\r\n {value.text}\r\n </mark>\r\n );\r\n })}\r\n </>\r\n );\r\n }\r\n}\r\n","import { h } from \"@stencil/core\";\r\n\r\nimport { OzonContentNodeContext } from \"../ozon-content-node-context.interface\";\r\nimport { OzonContentNode } from \"../ozon-content-node.interface\";\r\n\r\nexport class OzonContentVerwijderdeTekstNode implements OzonContentNode {\r\n name = \"VerwijderdeTekst\";\r\n\r\n render(node: Element, { mapNodeToJsx }: OzonContentNodeContext) {\r\n return <del class=\"removed-text\">{mapNodeToJsx(node.childNodes)}</del>;\r\n }\r\n}\r\n","import { Fragment, h, JSX } from \"@stencil/core\";\r\n\r\nimport { getNodeName } from \"./get-node-name.function\";\r\nimport { OzonContentAbbrNode } from \"./nodes/abbr.node\";\r\nimport { OzonContentAlNode } from \"./nodes/al.node\";\r\nimport { OzonContentBronNode } from \"./nodes/bron.node\";\r\nimport { OzonContentDocumentNode } from \"./nodes/document.node\";\r\nimport { OzonContentExtRefNode } from \"./nodes/ext-ref.node\";\r\nimport { OzonContentFallbackNode } from \"./nodes/fallback.node\";\r\nimport { OzonContentFiguurNode } from \"./nodes/figuur.node\";\r\nimport { OzonContentInhoudNode } from \"./nodes/inhoud.node\";\r\nimport { OzonContentInlineTekstAfbeeldingNode } from \"./nodes/inline-tekst-afbeelding.node\";\r\nimport { OzonContentInlineNodes } from \"./nodes/inline.nodes\";\r\nimport { OzonContentIntIoRefNode } from \"./nodes/int-io-ref.node\";\r\nimport { OzonContentIntRefNode } from \"./nodes/int-ref.node\";\r\nimport { OzonContentLijstNode } from \"./nodes/lijst.node\";\r\nimport { OzonContentNieuweTekstNode } from \"./nodes/nieuwe-tekst.node\";\r\nimport { OzonContentNootNode } from \"./nodes/noot.node\";\r\nimport { OzonContentKopNode } from \"./nodes/kop.node\";\r\nimport { OzonContentTableNode } from \"./nodes/table.node\";\r\nimport { OzonContentTextNode } from \"./nodes/text.node\";\r\nimport { OzonContentVerwijderdeTekstNode } from \"./nodes/verwijderde-tekst.node\";\r\nimport { OzonContentContext } from \"./ozon-content-context.interface\";\r\nimport { OzonContentNode } from \"./ozon-content-node.interface\";\r\nimport { OzonContentInputType } from \"./ozon-content.interfaces\";\r\n\r\nexport class Mapper {\r\n private mappers: OzonContentNode[] = [\r\n new OzonContentAbbrNode(),\r\n new OzonContentTextNode(),\r\n new OzonContentDocumentNode(),\r\n new OzonContentInhoudNode(),\r\n new OzonContentKopNode(),\r\n new OzonContentIntRefNode(),\r\n new OzonContentExtRefNode(),\r\n new OzonContentAlNode(),\r\n new OzonContentInlineNodes(),\r\n new OzonContentInlineTekstAfbeeldingNode(),\r\n new OzonContentNootNode(),\r\n new OzonContentTableNode(),\r\n new OzonContentIntIoRefNode(),\r\n new OzonContentFiguurNode(),\r\n new OzonContentLijstNode(),\r\n new OzonContentBronNode(),\r\n new OzonContentNieuweTekstNode(),\r\n new OzonContentVerwijderdeTekstNode(),\r\n ];\r\n\r\n private skip = this.mappers.reduce<string[]>((t, m) => {\r\n if (m.handles) {\r\n t.push(...m.handles);\r\n }\r\n\r\n return t;\r\n }, []);\r\n\r\n private fallbackNode = new OzonContentFallbackNode();\r\n\r\n private domParser?: DOMParser;\r\n\r\n private findMapper(name: string): OzonContentNode | undefined {\r\n if (this.skip.includes(name)) {\r\n return undefined;\r\n }\r\n\r\n return (\r\n this.mappers.find((m) => {\r\n if (Array.isArray(m.name)) {\r\n return m.name.includes(name);\r\n }\r\n\r\n return m.name === name;\r\n }) ?? this.fallbackNode\r\n );\r\n }\r\n\r\n mapNodeToJsx(node: Node | Node[] | NodeList, context: OzonContentContext, path: Node[]): JSX.Element {\r\n if (node instanceof NodeList) {\r\n return (\r\n <Fragment>\r\n {Array.from(node).map((n, index) => {\r\n return (\r\n <>\r\n {context.addSpaceBeforeNode && index > 0 && \" \"}\r\n {this.mapNodeToJsx(n, context, path)}\r\n </>\r\n );\r\n })}\r\n </Fragment>\r\n );\r\n }\r\n\r\n if (Array.isArray(node)) {\r\n return (\r\n <Fragment>\r\n {node.map((n, index) => {\r\n return (\r\n <>\r\n {context.addSpaceBeforeNode && index > 0 && \" \"}\r\n {this.mapNodeToJsx(n, context, path)}\r\n </>\r\n );\r\n })}\r\n </Fragment>\r\n );\r\n }\r\n\r\n const nodeName = getNodeName(node);\r\n const mapper = this.findMapper(nodeName);\r\n if (!mapper) {\r\n return <Fragment />;\r\n }\r\n\r\n const identity = mapper.identify?.(node);\r\n\r\n const state = identity ? context.state[identity] : undefined;\r\n const setState = identity ? (s: unknown) => context.setState({ ...context.state, [identity]: s }) : undefined;\r\n\r\n return mapper.render(node, {\r\n inline: context.inline,\r\n mark: context.mark,\r\n mapNodeToJsx: (n) => this.mapNodeToJsx(n, context, [...path, node]),\r\n emitAnchorClick: context.emitAnchorClick,\r\n setState,\r\n emitMarkItemHighlight: context.emitMarkItemHighlight,\r\n state,\r\n path,\r\n });\r\n }\r\n\r\n transform(input: OzonContentInputType | undefined, context: OzonContentContext): JSX.Element {\r\n if (!input) {\r\n return <Fragment />;\r\n }\r\n\r\n const document = this.inputToXmlDocument(input);\r\n if (document.querySelector(\"parsererror\")) {\r\n console.error({\r\n message: \"[DSO Toolkit: Ozon Content Mapper] Unable to parse XML\",\r\n context,\r\n input,\r\n document,\r\n });\r\n\r\n return <Fragment />;\r\n }\r\n\r\n return this.mapNodeToJsx(document.getRootNode(), context, []);\r\n }\r\n\r\n private inputToXmlDocument(input: OzonContentInputType): XMLDocument {\r\n if (input instanceof XMLDocument) {\r\n return input;\r\n }\r\n\r\n if (typeof input === \"string\") {\r\n this.domParser ??= new DOMParser();\r\n\r\n return this.domParser.parseFromString(input, \"text/xml\");\r\n }\r\n\r\n return document.implementation.createDocument(null, null);\r\n }\r\n}\r\n","@use \"~dso-toolkit/src/variables/units\";\r\n@use \"~dso-toolkit/src/variables/colors\";\r\n\r\n@use \"~dso-toolkit/src/components/anchor\";\r\n@use \"~dso-toolkit/src/components/button/button.mixins\" as button-mixins;\r\n@use \"~dso-toolkit/src/components/insert\";\r\n@use \"~dso-toolkit/src/components/delete\";\r\n@use \"~dso-toolkit/src/components/rich-content\";\r\n\r\n@use \"~dso-toolkit/src/components/button/button\";\r\n@use \"~dso-toolkit/src/components/mark/mark\";\r\n@use \"~dso-toolkit/src/components/superscript/superscript\";\r\n@use \"~dso-toolkit/src/components/subscript/subscript\";\r\n@use \"~dso-toolkit/src/components/table/table\";\r\n\r\n:host(:not([inline])) {\r\n display: block;\r\n}\r\n\r\n:host([inline]) {\r\n display: inline;\r\n}\r\n\r\nbutton.toggle-note {\r\n @include button-mixins.tertiary($modifiers: false);\r\n}\r\n\r\nspan[role=\"section\"],\r\nspan[role=\"paragraph\"] {\r\n display: block;\r\n}\r\n\r\n:host(:not([inline])) .fallback {\r\n display: block;\r\n}\r\n\r\na {\r\n @include anchor.root();\r\n}\r\n\r\n// Styling below copied from DSO Viewer 20211011\r\n\r\n.od-Term {\r\n font-weight: 700;\r\n}\r\n\r\n.od-Definitie,\r\n.od-Tussenkop {\r\n font-style: italic;\r\n}\r\n\r\n.od-Inhoud,\r\n.od-Inhoud > .od-Lijst,\r\n.od-IntIoRef,\r\n.od-Lidnr,\r\n.od-LiNr,\r\n.od-Opschrift,\r\n.od-Tussenkop {\r\n display: inline;\r\n}\r\n\r\n.od-Al {\r\n margin-block-end: 0.75em;\r\n}\r\n\r\n.od-IntIoRef {\r\n border-block-end: 1px dotted;\r\n}\r\n\r\n.dso-ozon-bron {\r\n font-style: italic;\r\n font-size: 0.75rem;\r\n}\r\n\r\n.dso-ozon-figuur {\r\n margin-block-end: units.$u1;\r\n\r\n .figuur-bijschrift {\r\n display: block;\r\n font-size: 0.75rem;\r\n font-style: italic;\r\n }\r\n\r\n &.bijschrift-boven {\r\n .figuur-bijschrift {\r\n padding-block-end: 0.25rem;\r\n }\r\n }\r\n\r\n &.bijschrift-onder {\r\n .figuur-bijschrift {\r\n padding-block-start: 0.25rem;\r\n }\r\n }\r\n\r\n .figuur-titel {\r\n color: colors.$mauve;\r\n display: block;\r\n font-weight: 500;\r\n padding-block-end: 0.5rem;\r\n }\r\n}\r\n\r\n.dso-ozon-lijst {\r\n span.od-Lijstaanhef,\r\n span.od-Lijstsluiting {\r\n margin-block-end: units.$u1;\r\n }\r\n\r\n ul {\r\n margin-block-end: units.$u1 !important;\r\n margin-block-start: units.$u1;\r\n\r\n p {\r\n margin-block-end: units.$u1;\r\n }\r\n\r\n &.expliciet {\r\n list-style: none;\r\n\r\n > .od-Li {\r\n position: relative;\r\n\r\n > span.od-LiNummer {\r\n position: absolute;\r\n inset-inline-start: units.$u6 * -1 + 4;\r\n text-align: end;\r\n inline-size: units.$u5;\r\n }\r\n }\r\n }\r\n }\r\n\r\n p {\r\n margin: 0;\r\n }\r\n}\r\n\r\n.od-Tabel thead {\r\n font-weight: 600;\r\n}\r\n\r\n.od-Kadertekst {\r\n border: 1px solid #e5e5e5;\r\n margin-block-end: units.$u1;\r\n padding: units.$u1;\r\n}\r\n\r\np,\r\nspan[role=\"paragraph\"],\r\n.dso-ozon-lijst,\r\n.dso-ozon-lijst > ul > li,\r\ntable {\r\n &.editaction-add {\r\n @include insert.root();\r\n }\r\n\r\n &.editaction-remove {\r\n @include delete.root();\r\n }\r\n}\r\n\r\nins {\r\n @include insert.element();\r\n\r\n &.new-text {\r\n @include insert.root();\r\n }\r\n\r\n &.editaction-add {\r\n display: inline-block;\r\n margin-block-end: units.$u1;\r\n padding: units.$u1;\r\n\r\n @include insert.root();\r\n\r\n p:last-child {\r\n margin: 0;\r\n }\r\n }\r\n}\r\n\r\ndel {\r\n &.removed-text {\r\n @include delete.root();\r\n }\r\n\r\n &.editaction-remove {\r\n display: inline-block;\r\n margin-block-end: units.$u1;\r\n padding: units.$u1;\r\n @include delete.root();\r\n\r\n p:last-child {\r\n margin: 0;\r\n }\r\n }\r\n}\r\n\r\n.editaction-label {\r\n font-style: italic;\r\n}\r\n\r\n.dso-rich-content {\r\n @include rich-content.children();\r\n}\r\n\r\n.od-abbr {\r\n text-decoration: underline dotted;\r\n}\r\n","import {\r\n h,\r\n Component,\r\n ComponentInterface,\r\n Event,\r\n EventEmitter,\r\n Prop,\r\n State,\r\n Fragment,\r\n JSX,\r\n Watch,\r\n} from \"@stencil/core\";\r\n\r\nimport { Mapper } from \"./ozon-content-mapper\";\r\nimport { OzonContentContext } from \"./ozon-content-context.interface\";\r\nimport {\r\n OzonContentAnchorClickEvent,\r\n OzonContentInputType,\r\n OzonContentMarkFunction,\r\n OzonContentMarkItemHighlightEvent,\r\n} from \"./ozon-content.interfaces\";\r\nimport { OzonContentNodeState } from \"./ozon-content-node-state.interface\";\r\n\r\nconst mapper = new Mapper();\r\n\r\n@Component({\r\n tag: \"dso-ozon-content\",\r\n styleUrl: \"ozon-content.scss\",\r\n shadow: true,\r\n})\r\nexport class OzonContent implements ComponentInterface {\r\n /**\r\n * The XML to be rendered.\r\n */\r\n @Prop()\r\n content?: OzonContentInputType;\r\n\r\n /**\r\n * Setting this property creates dso-ozon-content as inline element instead of a block element.\r\n */\r\n @Prop({ reflect: true })\r\n inline = false;\r\n\r\n /**\r\n * Adds a non breaking space to the node element.\r\n */\r\n @Prop({ reflect: true })\r\n addSpaceBeforeNode = false;\r\n\r\n /**\r\n * To mark text.\r\n */\r\n @Prop()\r\n mark?: OzonContentMarkFunction;\r\n\r\n /**\r\n * Emitted when `<a>` is clicked.\r\n */\r\n @Event({ bubbles: false })\r\n dsoAnchorClick!: EventEmitter<OzonContentAnchorClickEvent>;\r\n\r\n /**\r\n * Emitted when a marked item is highlighted.\r\n */\r\n @Event({ bubbles: false })\r\n dsoOzonContentMarkItemHighlight!: EventEmitter<OzonContentMarkItemHighlightEvent>;\r\n\r\n @Watch(\"content\")\r\n contentWatcher() {\r\n this.state = {};\r\n }\r\n\r\n @State()\r\n state: OzonContentNodeState = {};\r\n\r\n private handleMarkItemHighlight = (text: string, elementRef: HTMLElement) => {\r\n this.dsoOzonContentMarkItemHighlight.emit({ text, elementRef });\r\n };\r\n\r\n render(): JSX.Element {\r\n const context: OzonContentContext = {\r\n state: this.state,\r\n addSpaceBeforeNode: this.addSpaceBeforeNode,\r\n inline: this.inline,\r\n mark: this.mark,\r\n setState: (state) => (this.state = state),\r\n emitMarkItemHighlight: this.handleMarkItemHighlight,\r\n emitAnchorClick: this.dsoAnchorClick.emit,\r\n };\r\n\r\n const transformed = mapper.transform(this.content, context);\r\n\r\n return <Fragment>{transformed}</Fragment>;\r\n }\r\n}\r\n\r\nconst dependencies = () => {\r\n dependencies();\r\n\r\n return (\r\n <>\r\n <dso-icon />\r\n <dso-image-overlay />\r\n <dso-tooltip />\r\n <dso-table />\r\n </>\r\n );\r\n};\r\n","import { Resource } from \"../../utils/i18n\";\r\n\r\nexport const translations: Resource = {\r\n en: {\r\n \"dso-panel\": {\r\n close: \"Close\",\r\n },\r\n },\r\n nl: {\r\n \"dso-panel\": {\r\n close: \"Sluiten\",\r\n },\r\n },\r\n};\r\n","@use \"~dso-toolkit/src/utilities\";\r\n@use \"~dso-toolkit/src/variables/units\";\r\n@use \"~dso-toolkit/src/variables/colors\";\r\n@use \"~dso-toolkit/src/di\";\r\n\r\n@use \"panel.variables\" as panel-variables;\r\n\r\n:host {\r\n display: block;\r\n\r\n border: 1px solid colors.$grijs-30;\r\n border-radius: units.$u1 * 0.5;\r\n\r\n overflow: hidden;\r\n}\r\n\r\n@include utilities.box-sizing();\r\n\r\n.panel-heading {\r\n display: flex;\r\n gap: units.$u2;\r\n justify-content: space-between;\r\n align-items: flex-start;\r\n\r\n padding-block: units.$u1;\r\n padding-inline-start: var(--panel-heading-padding-inline-start, panel-variables.$panel-heading-padding-inline-start);\r\n padding-inline-end: units.$u1;\r\n\r\n border-block-end: 1px solid colors.$grijs-30;\r\n\r\n border-start-start-radius: units.$u1 * 0.5;\r\n border-start-end-radius: units.$u1 * 0.5;\r\n\r\n background-color: colors.$grijs-10;\r\n\r\n .sr-only {\r\n @include utilities.sr-only();\r\n }\r\n}\r\n\r\n.emphasized .panel-heading {\r\n background-color: panel-variables.$background-color-emphasized;\r\n}\r\n\r\n::slotted([slot=\"heading\"]) {\r\n margin: 0 !important;\r\n font-size: 1rem !important;\r\n font-weight: 600 !important;\r\n line-height: 1.5 !important;\r\n color: colors.$zwart !important;\r\n}\r\n\r\n.panel-close {\r\n display: inline-block;\r\n\r\n inline-size: units.$u3;\r\n aspect-ratio: 1 / 1;\r\n\r\n padding: 0;\r\n\r\n border: 0;\r\n\r\n background-color: transparent;\r\n\r\n color: colors.$zwart;\r\n\r\n cursor: pointer;\r\n}\r\n\r\n.panel-body {\r\n padding-block: units.$u2;\r\n padding-inline: var(--panel-body-padding-inline, panel-variables.$panel-body-padding-inline);\r\n\r\n background-color: var(--_dso-panel-body-background-color, transparent);\r\n}\r\n","import { Component, ComponentInterface, Element, Event, EventEmitter, h, Prop } from \"@stencil/core\";\r\nimport clsx from \"clsx\";\r\nimport { i18n } from \"../../utils/i18n\";\r\n\r\nimport { translations } from \"./panel.i18n\";\r\n\r\nexport interface PanelCloseEvent {\r\n originalEvent: Event;\r\n}\r\n\r\n/**\r\n * @slot - The contents to be highlighted within the panel\r\n * @slot heading - The heading (h2 - h6) with the title of the panel\r\n */\r\n@Component({\r\n tag: \"dso-panel\",\r\n styleUrl: \"panel.scss\",\r\n shadow: true,\r\n})\r\nexport class Panel implements ComponentInterface {\r\n @Element()\r\n host!: HTMLDsoPanelElement;\r\n\r\n /**\r\n * The accessible name for the close button.\r\n */\r\n @Prop()\r\n closeButtonLabel?: string;\r\n\r\n /**\r\n * To display the panel as an emphasized panel.\r\n */\r\n @Prop()\r\n emphasized = false;\r\n\r\n /**\r\n * Emitted when the user click the close button.\r\n */\r\n @Event()\r\n dsoCloseClick!: EventEmitter<PanelCloseEvent>;\r\n\r\n private text = i18n(() => this.host, translations);\r\n\r\n render() {\r\n return (\r\n <div class={clsx([\"dso-panel\", { emphasized: this.emphasized }])}>\r\n <div class=\"panel-heading\">\r\n <slot name=\"heading\" />\r\n <button type=\"button\" class=\"panel-close\" onClick={(e) => this.dsoCloseClick.emit({ originalEvent: e })}>\r\n <dso-icon icon=\"times\"></dso-icon>\r\n <span class=\"sr-only\">{this.closeButtonLabel || this.text(\"close\")}</span>\r\n </button>\r\n </div>\r\n <div class=\"panel-body\">\r\n <slot></slot>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n","@use \"sass:color\";\r\n\r\n@use \"~dso-toolkit/src/components/grid/grid.variables\" as grid-variables;\r\n@use \"~dso-toolkit/src/components/modal/modal.variables\" as modal-variables;\r\n\r\n@use \"~dso-toolkit/src/variables/units\";\r\n@use \"~dso-toolkit/src/variables/media-query-breakpoints\";\r\n@use \"~dso-toolkit/src/variables/colors\";\r\n@use \"~dso-toolkit/src/variables/zindex\";\r\n@use \"~dso-toolkit/src/utilities\";\r\n\r\n@use \"~dso-toolkit/src/components/button/button\";\r\n@use \"~dso-toolkit/src/components/modal\";\r\n@use \"~dso-toolkit/src/components/rich-content\";\r\n@use \"~dso-toolkit/src/components/table\";\r\n\r\n:host {\r\n display: block;\r\n margin-block-end: units.$u3;\r\n}\r\n\r\n.dso-header {\r\n min-block-size: units.$u4;\r\n\r\n h2 {\r\n color: colors.$bosgroen;\r\n font-size: units.$font-size-h2;\r\n font-weight: 700;\r\n }\r\n\r\n .dso-close {\r\n color: colors.$bosgroen;\r\n }\r\n}\r\n\r\n:host .dso-modal {\r\n @include modal.root();\r\n\r\n inset: 0px;\r\n block-size: 100%;\r\n position: fixed;\r\n z-index: zindex.$modal;\r\n}\r\n\r\n.dso-modal .dso-dialog.dso-table-dialog {\r\n margin-block-start: 1rem;\r\n max-inline-size: calc(100% - 2rem);\r\n margin-inline-start: auto;\r\n margin-inline-end: auto;\r\n inline-size: auto;\r\n\r\n .dso-body {\r\n $dso-body-unavailable-height: (\r\n (2 * modal.$header-padding) + (modal.$footer-button-block-size + modal.$footer-padding)\r\n );\r\n max-block-size: calc(100vh - #{$dso-body-unavailable-height} - 1.5em - 2rem); // margin\r\n }\r\n\r\n @media screen and (max-width: media-query-breakpoints.$screen-xs-max) {\r\n max-inline-size: 100%;\r\n }\r\n}\r\n\r\n:host([is-responsive]) {\r\n .dso-table-body {\r\n border: 1px solid table.$border-color;\r\n margin-block-end: 0;\r\n overflow-y: auto;\r\n inline-size: 100%;\r\n\r\n &.dso-body {\r\n inline-size: calc(100% - modal.$body-padding * 2);\r\n }\r\n }\r\n}\r\n\r\n.dso-table-utilities {\r\n align-items: center;\r\n display: flex;\r\n justify-content: space-between;\r\n margin-block-end: units.$u1;\r\n\r\n .dso-responsive-message {\r\n margin-block-end: 0;\r\n\r\n &:only-child {\r\n inline-size: 100%;\r\n }\r\n }\r\n\r\n .open-modal-button {\r\n &:only-child {\r\n margin-inline-start: auto;\r\n }\r\n }\r\n}\r\n\r\n.dso-responsive-message {\r\n font-size: 0.8em;\r\n margin-block-end: units.$u1;\r\n position: relative;\r\n text-align: center;\r\n}\r\n\r\n.sr-only {\r\n @include utilities.sr-only();\r\n}\r\n\r\n.dso-modal-overlay {\r\n background-color: color.scale(modal-variables.$backdrop-bg, $alpha: modal-variables.$backdrop-opacity);\r\n display: block;\r\n position: fixed;\r\n inset: 0;\r\n z-index: zindex.$modal-background-overlay;\r\n}\r\n\r\n.dso-table-placeholder {\r\n box-shadow: inset 0 0 0 1px table.$border-color;\r\n display: grid;\r\n place-content: center;\r\n}\r\n","import { h, Component, ComponentInterface, Element, Host, Prop, State } from \"@stencil/core\";\r\nimport debounce from \"debounce\";\r\nimport { createFocusTrap, FocusTrap } from \"focus-trap\";\r\nimport { v4 } from \"uuid\";\r\n\r\n@Component({\r\n tag: \"dso-table\",\r\n styleUrl: \"table.scss\",\r\n shadow: true,\r\n})\r\nexport class Table implements ComponentInterface {\r\n private resizeObserver?: ResizeObserver;\r\n\r\n private focusTrapElement?: HTMLDivElement;\r\n\r\n private buttonElement?: HTMLButtonElement;\r\n\r\n private trap?: FocusTrap;\r\n\r\n private labelledbyId = v4();\r\n\r\n @Element()\r\n host!: HTMLDsoTableElement;\r\n\r\n /**\r\n * Prevents the table being opened in a modal.\r\n */\r\n @Prop({ reflect: true })\r\n noModal = false;\r\n\r\n /**\r\n * Indicates whether the table is currently horizontally scrollable.\r\n */\r\n @Prop({ reflect: true })\r\n isResponsive = false;\r\n\r\n @State()\r\n modalActive = false;\r\n\r\n @State()\r\n placeholderHeight?: number;\r\n\r\n private startResponsiveBehavior(): void {\r\n this.resizeObserver?.observe(this.host);\r\n }\r\n\r\n componentWillLoad(): void {\r\n this.resizeObserver = new ResizeObserver(debounce((entries) => this.setResponsiveTable(entries), 200));\r\n }\r\n\r\n componentDidLoad(): void {\r\n this.startResponsiveBehavior();\r\n }\r\n\r\n componentDidRender() {\r\n this.setFocusTrap();\r\n }\r\n\r\n disconnectedCallback() {\r\n this.resizeObserver?.disconnect();\r\n }\r\n\r\n render() {\r\n const caption = this.host.querySelector(\":scope > table > caption\")?.textContent?.trim();\r\n\r\n return (\r\n <Host>\r\n {this.modalActive && this.placeholderHeight && (\r\n <div class=\"dso-table-placeholder\" style={{ height: `${this.placeholderHeight}px` }} />\r\n )}\r\n\r\n {this.modalActive && <div class=\"dso-modal-overlay\"></div>}\r\n\r\n <div class={{ \"dso-modal\": this.modalActive }}>\r\n <div\r\n class={{ \"dso-dialog\": this.modalActive, \"dso-table-dialog\": true }}\r\n ref={(element) => (this.focusTrapElement = element)}\r\n {...(this.modalActive ? { [\"aria-labelledby\"]: this.labelledbyId, role: \"dialog\" } : {})}\r\n >\r\n {(this.isResponsive || !this.noModal) && (\r\n <div class=\"dso-table-utilities\" style={this.modalActive ? { display: \"none\" } : undefined}>\r\n {this.isResponsive && (\r\n <div class=\"dso-responsive-message\">\r\n <span>beweeg de tabel van links naar rechts</span>\r\n </div>\r\n )}\r\n\r\n {!this.noModal && (\r\n <button\r\n type=\"button\"\r\n class=\"dso-tertiary open-modal-button\"\r\n ref={(element) => (this.buttonElement = element)}\r\n onClick={() => this.openModal()}\r\n >\r\n <span class=\"sr-only\">tabel {caption ?? \"\"} </span>\r\n <span>vergroten</span>\r\n <dso-icon icon=\"external-link\"></dso-icon>\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n\r\n {this.modalActive && (\r\n <div class=\"dso-header\">\r\n <h2 id={this.labelledbyId} class={{ \"sr-only\": !caption }}>\r\n {caption || \"Uitvergrote tabel dialoog\"}\r\n </h2>\r\n <button type=\"button\" class=\"dso-close\" onClick={() => this.closeModal()}>\r\n <dso-icon icon=\"times\"></dso-icon>\r\n <span class=\"sr-only\">Sluiten</span>\r\n </button>\r\n </div>\r\n )}\r\n\r\n <div class={{ \"dso-body\": this.modalActive, \"dso-table-body\": true }}>\r\n <slot></slot>\r\n </div>\r\n </div>\r\n </div>\r\n </Host>\r\n );\r\n }\r\n\r\n private openModal() {\r\n this.placeholderHeight = this.host.clientHeight;\r\n this.modalActive = true;\r\n }\r\n\r\n private closeModal() {\r\n this.placeholderHeight = undefined;\r\n this.modalActive = false;\r\n }\r\n\r\n private setFocusTrap() {\r\n if (this.modalActive && this.focusTrapElement && !this.trap) {\r\n this.trap = createFocusTrap([this.host, this.focusTrapElement], {\r\n escapeDeactivates: true,\r\n clickOutsideDeactivates: (e) => {\r\n if (e instanceof MouseEvent && e.composedPath()[0] === this.focusTrapElement) {\r\n this.closeModal();\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n },\r\n setReturnFocus: this.buttonElement ?? false,\r\n onDeactivate: () => this.closeModal(),\r\n tabbableOptions: {\r\n getShadowRoot: true,\r\n },\r\n }).activate();\r\n } else if (!this.modalActive && this.trap) {\r\n this.trap?.deactivate();\r\n\r\n delete this.trap;\r\n }\r\n }\r\n\r\n private setResponsiveTable([dsoTable]: ResizeObserverEntry[]): void {\r\n if (!dsoTable) {\r\n throw new Error(\"No dsoTable found\");\r\n }\r\n\r\n const tableElement = dsoTable.target.querySelector(\"table\");\r\n\r\n if (dsoTable && tableElement instanceof HTMLTableElement) {\r\n this.isResponsive =\r\n Math.floor(tableElement.getBoundingClientRect().width) > Math.floor(dsoTable.contentRect.width);\r\n }\r\n }\r\n}\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as s,c as t,h as i,F as e,a as o}from"./p-abc59cdf.js";import{d as h}from"./p-16e112f1.js";import{i as n}from"./p-078b7eca.js";import{v as a}from"./p-82796232.js";function r(s){if(typeof s!=="string"){throw new TypeError("Expected a string")}return s.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}const u={en:{"dso-autosuggest":{notFound:"{{inputValue}} was not found."}},nl:{"dso-autosuggest":{notFound:"{{inputValue}} is niet gevonden."}}};const l=".sc-dso-autosuggest-h{display:block;position:relative}.listbox-container.sc-dso-autosuggest{inset-inline:0;inset-block-start:100%;block-size:auto;max-block-size:var(--max-block-size);min-block-size:50px;overflow-y:auto;position:absolute;z-index:200}.listbox.sc-dso-autosuggest,.autosuggest-progress-box.sc-dso-autosuggest{background-clip:padding-box;background-color:#fff;border:1px solid rgba(0, 0, 0, 0.15);border-radius:4px;box-shadow:0 6px 12px rgba(0, 0, 0, 0.175);list-style-type:none;margin-block:0}.autosuggest-progress-box.sc-dso-autosuggest{padding-block:12px;padding-inline:8px}.listbox.sc-dso-autosuggest{padding-block:8px;padding-inline:0}.listbox.sc-dso-autosuggest .group.sc-dso-autosuggest:not(:first-child) .group-label.sc-dso-autosuggest{border-block-start:1px solid #b2b2b2}.listbox.sc-dso-autosuggest .group-label.sc-dso-autosuggest{color:#275937;font-weight:700;padding-block:4px;margin-inline:16px}.listbox.sc-dso-autosuggest .option.sc-dso-autosuggest{padding-block:4px;padding-inline:16px}.listbox.sc-dso-autosuggest .option.sc-dso-autosuggest .suggestion-row.sc-dso-autosuggest{display:flex;justify-content:space-between}.listbox.sc-dso-autosuggest .option.sc-dso-autosuggest:active{background-color:#275937}.listbox.sc-dso-autosuggest .option.sc-dso-autosuggest:active,.listbox.sc-dso-autosuggest .option.sc-dso-autosuggest:active .type.sc-dso-autosuggest,.listbox.sc-dso-autosuggest .option.sc-dso-autosuggest:active .extra.sc-dso-autosuggest{color:#fff}.option[aria-selected=true].sc-dso-autosuggest{cursor:pointer;background-color:#d7e7ce}mark.sc-dso-autosuggest{font-weight:700;background-color:inherit;color:inherit;padding:0}.type.sc-dso-autosuggest,.extra.sc-dso-autosuggest{color:#666}.type.sc-dso-autosuggest{text-align:end}.extra.sc-dso-autosuggest{font-size:14px;line-height:21px}.extra.sc-dso-autosuggest:not(:first-child){text-align:end}";const d=l;const c=10;const g=8;const f=1;const p=({id:s,mouseEnter:t,mouseLeave:e,click:o,selected:h,suggestion:n,ref:a,markedSuggestion:r})=>i("div",{class:"option",role:"option",id:s,onMouseEnter:t,onMouseLeave:e,onClick:o,"aria-selected":h,"aria-label":n.value,ref:a},i("div",{class:"suggestion-row"},i("span",{class:"value"},r.value),r.type?i("span",{class:"type"},r.type):undefined),r.extras&&r.extras.map((s=>i("div",{class:"suggestion-row"},s.map((s=>i("span",{class:"extra"},s)))))));function v(s){return!!s&&s.length>0&&s.every((s=>s!==undefined&&"groupLabel"in s&&s.groupLabel!==undefined&&"suggestions"in s&&s.suggestions.length>0))}function b(s){return!!s&&s.length>0&&s.every((s=>s!==undefined&&"value"in s&&s.value!==undefined))}const x=class{constructor(i){s(this,i);this.dsoSelect=t(this,"dsoSelect",7);this.dsoChange=t(this,"dsoChange",7);this.dsoSearch=t(this,"dsoSearch",7);this.suggestions=null;this.loading=false;this.loadingLabel="Een moment geduld.";this.suggestOnFocus=false;this.showSuggestions=false;this.notFound=false;this.showLoading=false;this.listItemBlockSize=0;this.listboxContainerMaxBlockSize=0;this.listboxItems=[];this.listboxId=a();this.inputId=a();this.labelId=a();this.resizeObserver=new ResizeObserver(h((()=>this.setListboxContainerMaxBlockSize()),150));this.debouncedEmitValue=h((s=>{this.dsoChange.emit(s);this.debouncedShowLoading()}),200);this.debouncedShowLoading=h((()=>{if(this.inputValue){this.showLoading=true}}),this.loadingDelayed);this.inputValue="";this.onInput=s=>{if(!(s.target instanceof HTMLInputElement)){return}this.showLoading=!this.loadingDelayed;this.inputValue=s.target.value;this.debouncedEmitValue(s.target.value.match(/(\S+)/g)?s.target.value:"")};this.onFocusIn=()=>{if(this.suggestOnFocus){this.openSuggestions()}};this.text=n((()=>this.host),u);this.onWindowResize=h((()=>this.setListboxContainerMaxBlockSize()),150);this.onScrollend=()=>this.setListboxContainerMaxBlockSize();this.onKeyDown=s=>{if(s.defaultPrevented||this.loading){return}switch(s.key){case"ArrowDown":if(!this.showSuggestions){this.openSuggestions("first")}else{this.selectNextSuggestion()}break;case"ArrowUp":if(!this.showSuggestions){this.openSuggestions("last")}else{this.selectPreviousSuggestion()}break;case"Tab":this.closeSuggestions();return;case"Escape":this.closeSuggestions();break;case"Enter":this.pickSelectedValue();break;default:return}s.preventDefault()}}suggestionsWatcher(){this.resetSelectedSuggestion();if((!this.showSuggestions||!this.notFound)&&this.inputValue){this.openSuggestions()}else if((this.showSuggestions||this.notFound)&&!this.inputValue){this.closeSuggestions()}}onDocumentClick(s){if((this.showSuggestions||this.notFound)&&this.listbox&&s.target instanceof Node&&!this.listbox.contains(s.target)&&this.input!==s.target){this.closeSuggestions()}}componentDidRender(){this.setListboxContainerMaxBlockSize()}connectedCallback(){setTimeout((()=>{const s=this.host.querySelector('input[type="text"]');if(!(s instanceof HTMLInputElement)){return}this.input=s;if(s.id){this.inputId=s.id}else{s.id=this.inputId}if(!this.input.labels||this.input.labels.length<1){return}const t=this.input.labels[0];if(t===null||t===void 0?void 0:t.id){this.labelId=t.id}else if(t){t.id=this.labelId}this.input.setAttribute("role","combobox");this.input.setAttribute("aria-haspopup","listbox");this.input.setAttribute("aria-expanded","false");this.input.setAttribute("autocomplete","off");this.input.setAttribute("aria-autocomplete","list");this.input.setAttribute("aria-activedescendant","");this.input.addEventListener("input",this.onInput);this.input.addEventListener("keydown",this.onKeyDown);this.input.addEventListener("focusin",this.onFocusIn);window.addEventListener("resize",this.onWindowResize);document.addEventListener("scrollend",this.onScrollend);this.resizeObserver.observe(this.host);this.setListboxContainerMaxBlockSize()}))}disconnectedCallback(){var s,t,i;(s=this.input)===null||s===void 0?void 0:s.removeEventListener("input",this.onInput);(t=this.input)===null||t===void 0?void 0:t.removeEventListener("keydown",this.onKeyDown);(i=this.input)===null||i===void 0?void 0:i.removeEventListener("focusin",this.onFocusIn);window.removeEventListener("resize",this.onWindowResize);document.removeEventListener("scrollend",this.onScrollend);this.resizeObserver.disconnect()}setListboxContainerMaxBlockSize(){if(!this.listboxContainer||!this.showSuggestions){return}if(this.listboxItems[0]&&this.showSuggestions){this.listItemBlockSize=this.listboxItems[0].getBoundingClientRect().height}const s=window.innerHeight-this.host.getBoundingClientRect().bottom;const t=this.listItemBlockSize*c+2*g+2*f;if(s>this.listItemBlockSize){if(s<t){this.listboxContainerMaxBlockSize=s-2*g}else{this.listboxContainerMaxBlockSize=t}}}showInputValueNotFound(s){var t,i;return this.processAutosuggestMarkItems(this.markTerms((i=(t=this.input)===null||t===void 0?void 0:t.value.split(" ").filter((s=>s)))!==null&&i!==void 0?i:[],s))}handleMark(s,t,i,e){var o,h;if(this.mark&&i){return this.processAutosuggestMarkItems(this.mark(s,t,i,e))}return this.processAutosuggestMarkItems(this.markTerms((h=(o=this.input)===null||o===void 0?void 0:o.value.split(" ").filter((s=>s)))!==null&&h!==void 0?h:[],t))}markTerms(s,t){if(!t||!s||s.length===0||s[0]===undefined){return[""]}const i=new RegExp(`(${r(s[0])})`,"gi");return t.split(i).reduce(((t,e)=>{if(!e){t.push(e)}else if(i.test(e)){t.push({mark:e})}else if(s.length===1){t.push(e)}else{t.push(...this.markTerms(s.slice(1),e))}return t}),[])}processAutosuggestMarkItems(s){if(s.length===0){return[""]}return s.map((s=>{if(typeof s==="object"){return i("mark",null,s.mark)}return s}))}selectSuggestion(s,t){this.selectedSuggestion=s;this.selectedSuggestionGroup=t;this.setAriaActiveDescendant()}selectFirstSuggestion(){if(!this.suggestions){return}if(v(this.suggestions)&&this.selectedSuggestionGroup){this.selectedSuggestion=this.selectedSuggestionGroup.suggestions[0]}else{if(b(this.suggestions)){this.selectedSuggestion=this.suggestions[0]}}this.setAriaActiveDescendant(true)}selectLastSuggestion(){if(!this.suggestions){return}if(v(this.suggestions)&&this.selectedSuggestionGroup){this.selectedSuggestion=this.selectedSuggestionGroup.suggestions[this.selectedSuggestionGroup.suggestions.length-1]}else{if(b(this.suggestions)){this.selectedSuggestion=this.suggestions[this.suggestions.length-1]}}this.setAriaActiveDescendant(true)}selectNextSuggestion(){var s;if(!this.suggestions){return}if(v(this.suggestions)){this.selectNextGroupedSuggestion()}else{const t=this.selectedSuggestion?this.suggestions.indexOf(this.selectedSuggestion):-1;this.selectedSuggestion=(s=this.suggestions[t+1])!==null&&s!==void 0?s:this.suggestions[0]}this.setAriaActiveDescendant(true)}selectNextGroupedSuggestion(){var s;if(!this.suggestions){return}if(this.selectedSuggestionGroup){const t=this.selectedSuggestion?this.selectedSuggestionGroup.suggestions.indexOf(this.selectedSuggestion):-1;if(t===this.selectedSuggestionGroup.suggestions.length-1){const t=this.suggestionGroups.indexOf(this.selectedSuggestionGroup);this.selectedSuggestionGroup=(s=this.suggestionGroups[t+1])!==null&&s!==void 0?s:this.suggestionGroups[0];this.selectedSuggestion=this.selectedSuggestionGroup.suggestions[0]}else{this.selectedSuggestion=this.selectedSuggestionGroup.suggestions[t+1]}}else{this.selectedSuggestionGroup=this.suggestionGroups[0];this.selectedSuggestion=this.selectedSuggestionGroup.suggestions[0]}}selectPreviousSuggestion(){var s;if(!this.suggestions){return}if(v(this.suggestions)){this.selectPreviousGroupedSuggestion()}else{const t=this.selectedSuggestion?this.suggestions.indexOf(this.selectedSuggestion):0;this.selectedSuggestion=(s=this.suggestions[t-1])!==null&&s!==void 0?s:this.suggestions[this.suggestions.length-1]}this.setAriaActiveDescendant(true)}selectPreviousGroupedSuggestion(){var s;if(!this.suggestions){return}if(this.selectedSuggestionGroup){const t=this.selectedSuggestion?this.selectedSuggestionGroup.suggestions.indexOf(this.selectedSuggestion):-1;if(t===0){const t=this.suggestionGroups.indexOf(this.selectedSuggestionGroup);this.selectedSuggestionGroup=(s=this.suggestionGroups[t-1])!==null&&s!==void 0?s:this.suggestionGroups[this.suggestions.length-1];this.selectedSuggestion=this.selectedSuggestionGroup.suggestions[this.selectedSuggestionGroup.suggestions.length-1]}else{this.selectedSuggestion=this.selectedSuggestionGroup.suggestions[t-1]}}else{this.selectedSuggestionGroup=this.suggestionGroups[this.suggestions.length-1];this.selectedSuggestion=this.selectedSuggestionGroup.suggestions[this.selectedSuggestionGroup.suggestions.length-1]}}get suggestionGroups(){return v(this.suggestions)?this.suggestions:[]}setAriaActiveDescendant(s=false){var t,i;if(this.selectedSuggestion){const e=this.selectedSuggestionGroup?this.listboxGroupedItemId(this.selectedSuggestionGroup,this.selectedSuggestion):this.listboxItemId(this.selectedSuggestion);(t=this.input)===null||t===void 0?void 0:t.setAttribute("aria-activedescendant",e);if(s){(i=document.getElementById(e))===null||i===void 0?void 0:i.scrollIntoView({block:"nearest"})}}}resetSelectedSuggestion(){var s;this.showLoading=!this.loadingDelayed;this.notFound=false;this.selectedSuggestion=undefined;this.selectedSuggestionGroup=undefined;(s=this.input)===null||s===void 0?void 0:s.setAttribute("aria-activedescendant","")}openSuggestions(s){var t,i,e,o;this.showSuggestions=(t=this.suggestions&&this.suggestions.length>0)!==null&&t!==void 0?t:false;this.notFound=(e=this.suggestions&&((i=this.suggestions)===null||i===void 0?void 0:i.length)===0)!==null&&e!==void 0?e:false;(o=this.input)===null||o===void 0?void 0:o.setAttribute("aria-expanded",(this.showSuggestions||this.notFound).toString());if(this.showSuggestions&&s==="first"){this.selectFirstSuggestion()}else if(this.showSuggestions&&s==="last"){this.selectLastSuggestion()}}closeSuggestions(){var s;this.showSuggestions=false;this.notFound=false;(s=this.input)===null||s===void 0?void 0:s.setAttribute("aria-expanded","false");this.selectFirstSuggestion()}pickSelectedValue(){var s;if(this.selectedSuggestion&&this.showSuggestions){this.dsoSelect.emit(this.selectedSuggestion)}else{this.dsoSearch.emit((s=this.input)===null||s===void 0?void 0:s.value)}this.closeSuggestions()}listboxItemId(s){if(!this.suggestions){return""}return`${this.inputId}-${b(this.suggestions)&&this.suggestions.indexOf(s)+1}`}listboxGroupedItemId(s,t){if(!this.suggestions){return""}return`${this.inputId}-${this.suggestionGroups.indexOf(s)+1}-${s.suggestions.indexOf(t)+1}`}getMarkedChunkedExtras(s,t){const i=s.reduce(((s,t,i)=>{var e;const o=Math.floor(i/2);if(!s[o]){s[o]=[]}(e=s[o])===null||e===void 0?void 0:e.push(t);return s}),[]);return i.map(((s,i)=>s.map(((s,e)=>this.handleMark(t,s,"extra",i*2+e)))))}getMarkedSuggestions(s){return{value:this.handleMark(s,s.value,"value"),type:s.type?this.handleMark(s,s.type,"type"):undefined,extras:s.extras?this.getMarkedChunkedExtras(s.extras,s):undefined}}render(){this.listboxItems=[];const s=this.showSuggestions||this.notFound;const t=v(this.suggestions);const o=b(this.suggestions);if(s&&this.input){this.input.setAttribute("aria-controls",this.listboxId)}else if(this.input){this.input.removeAttribute("aria-controls")}return i(e,null,i("slot",{key:"557d829f9238c3fa9f6082beba78381472115ccd"}),this.loading&&this.showLoading?i("div",{class:"autosuggest-progress-box"},i("dso-progress-indicator",{label:this.loadingLabel})):s&&i("dso-scrollable",{class:"listbox-container",ref:s=>this.listboxContainer=s,style:{"--max-block-size":`${this.listboxContainerMaxBlockSize}px`}},i("div",{class:"listbox",role:"listbox","aria-live":"polite",id:this.listboxId,"aria-labelledby":this.labelId,ref:s=>this.listbox=s,tabindex:"0"},o&&this.showSuggestions&&this.suggestions&&this.suggestions.map((s=>i(p,{id:this.listboxItemId(s),mouseEnter:()=>this.selectSuggestion(s),mouseLeave:()=>this.resetSelectedSuggestion(),click:()=>this.pickSelectedValue(),selected:(s===this.selectedSuggestion).toString(),suggestion:s,ref:s=>s&&this.listboxItems.push(s),markedSuggestion:this.getMarkedSuggestions(s)})))||t&&this.showSuggestions&&this.suggestions&&this.suggestions.map((s=>{const t=a();return i("div",{role:"group",class:"group","aria-labelledby":t},i("div",{class:"group-label",role:"presentation",id:t},s.groupLabel),s.suggestions.map((t=>i(p,{id:this.listboxGroupedItemId(s,t),mouseEnter:()=>this.selectSuggestion(t,s),mouseLeave:()=>this.resetSelectedSuggestion(),click:()=>this.pickSelectedValue(),selected:(t===this.selectedSuggestion).toString(),suggestion:t,ref:s=>s&&this.listboxItems.push(s),markedSuggestion:this.getMarkedSuggestions(t)}))))}))||this.notFound&&i("div",{class:"option"},i("span",{class:"value"},this.notFoundLabel||this.showInputValueNotFound(this.text("notFound",{inputValue:this.inputValue})))))))}get host(){return o(this)}static get watchers(){return{suggestions:["suggestionsWatcher"]}}};x.style=d;export{x as dso_autosuggest};
2
+ //# sourceMappingURL=p-7949fc70.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["escapeStringRegexp","string","TypeError","replace","translations","en","notFound","nl","autosuggestCss","DsoAutosuggestStyle0","maxSuggestionsViewable","listboxPaddingBlock","listboxBorderWidth","Option","id","mouseEnter","mouseLeave","click","selected","suggestion","ref","markedSuggestion","h","class","role","onMouseEnter","onMouseLeave","onClick","value","type","undefined","extras","map","markedChunk","extra","isGrouped","suggestions","length","every","groupLabel","isFlat","Autosuggest","constructor","hostRef","this","loading","loadingLabel","suggestOnFocus","showSuggestions","showLoading","listItemBlockSize","listboxContainerMaxBlockSize","listboxItems","listboxId","v4","inputId","labelId","resizeObserver","ResizeObserver","debounce","setListboxContainerMaxBlockSize","debouncedEmitValue","dsoChange","emit","debouncedShowLoading","inputValue","loadingDelayed","onInput","event","target","HTMLInputElement","match","onFocusIn","openSuggestions","text","i18n","host","onWindowResize","onScrollend","onKeyDown","defaultPrevented","key","selectNextSuggestion","selectPreviousSuggestion","closeSuggestions","pickSelectedValue","preventDefault","suggestionsWatcher","resetSelectedSuggestion","onDocumentClick","listbox","Node","contains","input","componentDidRender","connectedCallback","setTimeout","querySelector","labels","label","setAttribute","addEventListener","window","document","observe","disconnectedCallback","_a","removeEventListener","_b","_c","disconnect","listboxContainer","getBoundingClientRect","height","availableBlockSize","innerHeight","bottom","listboxMaxBlockSize","showInputValueNotFound","processAutosuggestMarkItems","markTerms","split","filter","t","handleMark","extraIndex","mark","terms","suggestionValue","termRegex","RegExp","reduce","total","valuePart","push","test","slice","items","item","selectSuggestion","group","selectedSuggestion","selectedSuggestionGroup","setAriaActiveDescendant","selectFirstSuggestion","selectLastSuggestion","selectNextGroupedSuggestion","index","indexOf","indexInGroup","groupIndex","suggestionGroups","selectPreviousGroupedSuggestion","scroll","listboxGroupedItemId","listboxItemId","getElementById","scrollIntoView","block","_d","toString","dsoSelect","dsoSearch","suggestionGroup","getMarkedChunkedExtras","chunkedExtras","resultArray","chunkIndex","Math","floor","chunk","c","i","getMarkedSuggestions","render","showListbox","grouped","flat","removeAttribute","Fragment","element","style","tabindex","groupLabelId","notFoundLabel"],"sources":["../../node_modules/escape-string-regexp/index.js","src/components/autosuggest/autosuggest.i18n.ts","src/components/autosuggest/autosuggest.scss?tag=dso-autosuggest&encapsulation=scoped","src/components/autosuggest/autosuggest.tsx"],"sourcesContent":["export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","import { Resource } from \"../../utils/i18n\";\r\n\r\nexport const translations: Resource = {\r\n en: {\r\n \"dso-autosuggest\": {\r\n notFound: \"{{inputValue}} was not found.\",\r\n },\r\n },\r\n nl: {\r\n \"dso-autosuggest\": {\r\n notFound: \"{{inputValue}} is niet gevonden.\",\r\n },\r\n },\r\n};\r\n","@use \"~dso-toolkit/src/variables/units\";\r\n@use \"~dso-toolkit/src/variables/colors\";\r\n@use \"~dso-toolkit/src/variables/scaffolding\";\r\n@use \"~dso-toolkit/src/variables/typography\";\r\n@use \"~dso-toolkit/src/variables/zindex\";\r\n\r\n@use \"autosuggest.variables\" as core-autosuggest-variables;\r\n\r\n:host {\r\n display: block;\r\n position: relative;\r\n}\r\n\r\n.listbox-container {\r\n inset-inline: 0;\r\n inset-block-start: 100%;\r\n block-size: auto;\r\n max-block-size: var(--max-block-size);\r\n min-block-size: core-autosuggest-variables.$listbox-min-block-size;\r\n overflow-y: auto;\r\n position: absolute;\r\n z-index: zindex.$autosuggest;\r\n}\r\n\r\n.listbox,\r\n.autosuggest-progress-box {\r\n background-clip: padding-box;\r\n background-color: core-autosuggest-variables.$background-color;\r\n border: core-autosuggest-variables.$listbox-border-width solid core-autosuggest-variables.$border-color;\r\n border-radius: scaffolding.$border-radius-base;\r\n box-shadow: core-autosuggest-variables.$box-shadow;\r\n list-style-type: none;\r\n margin-block: 0;\r\n}\r\n\r\n.autosuggest-progress-box {\r\n padding-block: units.$u1 * 1.5;\r\n padding-inline: units.$u1;\r\n}\r\n\r\n.listbox {\r\n padding-block: core-autosuggest-variables.$listbox-padding-block;\r\n padding-inline: 0;\r\n\r\n .group:not(:first-child) {\r\n .group-label {\r\n border-block-start: 1px solid colors.$grijs-30;\r\n }\r\n }\r\n\r\n .group-label {\r\n color: colors.$bosgroen;\r\n font-weight: 700;\r\n padding-block: core-autosuggest-variables.$list-item-padding-block;\r\n margin-inline: units.$u2;\r\n }\r\n\r\n .option {\r\n padding-block: core-autosuggest-variables.$list-item-padding-block;\r\n padding-inline: units.$u2;\r\n\r\n .suggestion-row {\r\n display: flex;\r\n justify-content: space-between;\r\n }\r\n\r\n &:active {\r\n background-color: colors.$bosgroen;\r\n\r\n &,\r\n .type,\r\n .extra {\r\n color: colors.$wit;\r\n }\r\n }\r\n }\r\n}\r\n\r\n.option[aria-selected=\"true\"] {\r\n cursor: pointer;\r\n background-color: colors.$grasgroen-20;\r\n}\r\n\r\nmark {\r\n font-weight: 700;\r\n background-color: inherit;\r\n color: inherit;\r\n padding: 0;\r\n}\r\n\r\n.type,\r\n.extra {\r\n color: colors.$grijs-60;\r\n}\r\n\r\n.type {\r\n text-align: end;\r\n}\r\n\r\n.extra {\r\n font-size: typography.$root-font-size-small;\r\n line-height: typography.$root-font-size-small * typography.$line-height-base;\r\n\r\n &:not(:first-child) {\r\n text-align: end;\r\n }\r\n}\r\n","import {\r\n Component,\r\n Element,\r\n Event,\r\n EventEmitter,\r\n Fragment,\r\n FunctionalComponent,\r\n h,\r\n Listen,\r\n Prop,\r\n State,\r\n VNode,\r\n Watch,\r\n} from \"@stencil/core\";\r\n\r\nimport debounce from \"debounce\";\r\nimport escapeStringRegexp from \"escape-string-regexp\";\r\n\r\nimport { v4 } from \"uuid\";\r\n\r\nimport { i18n } from \"../../utils/i18n\";\r\n\r\nimport { AutosuggestMarkFunction, AutosuggestMarkItem, Suggestion, SuggestionGroup } from \"./autosuggest.interfaces\";\r\nimport { translations } from \"./autosuggest.i18n\";\r\n\r\ninterface MarkedSuggestion {\r\n value: (VNode | string)[];\r\n type?: (VNode | string)[];\r\n extras?: (VNode | string)[][][];\r\n}\r\n\r\nconst maxSuggestionsViewable = 10;\r\nconst listboxPaddingBlock = 8;\r\nconst listboxBorderWidth = 1;\r\n\r\nconst Option: FunctionalComponent<{\r\n id: string;\r\n mouseEnter: () => void;\r\n mouseLeave: () => void;\r\n click: () => void;\r\n selected: string;\r\n suggestion: Suggestion;\r\n markedSuggestion: MarkedSuggestion;\r\n ref: (element: HTMLDivElement | undefined) => void;\r\n}> = ({ id, mouseEnter, mouseLeave, click, selected, suggestion, ref, markedSuggestion }) => (\r\n <div\r\n class=\"option\"\r\n role=\"option\"\r\n id={id}\r\n onMouseEnter={mouseEnter}\r\n onMouseLeave={mouseLeave}\r\n onClick={click}\r\n aria-selected={selected}\r\n aria-label={suggestion.value}\r\n ref={ref}\r\n >\r\n <div class=\"suggestion-row\">\r\n <span class=\"value\">{markedSuggestion.value}</span>\r\n {markedSuggestion.type ? <span class=\"type\">{markedSuggestion.type}</span> : undefined}\r\n </div>\r\n {markedSuggestion.extras &&\r\n markedSuggestion.extras.map((markedChunk) => (\r\n <div class=\"suggestion-row\">\r\n {markedChunk.map((extra) => (\r\n <span class=\"extra\">{extra}</span>\r\n ))}\r\n </div>\r\n ))}\r\n </div>\r\n);\r\n\r\nfunction isGrouped(suggestions: Suggestion[] | SuggestionGroup[] | null): suggestions is SuggestionGroup[] {\r\n return (\r\n !!suggestions &&\r\n suggestions.length > 0 &&\r\n suggestions.every(\r\n (suggestion) =>\r\n suggestion !== undefined &&\r\n \"groupLabel\" in suggestion &&\r\n suggestion.groupLabel !== undefined &&\r\n \"suggestions\" in suggestion &&\r\n suggestion.suggestions.length > 0,\r\n )\r\n );\r\n}\r\n\r\nfunction isFlat(suggestions: Suggestion[] | SuggestionGroup[] | null): suggestions is Suggestion[] {\r\n return (\r\n !!suggestions &&\r\n suggestions.length > 0 &&\r\n suggestions.every(\r\n (suggestion) => suggestion !== undefined && \"value\" in suggestion && suggestion.value !== undefined,\r\n )\r\n );\r\n}\r\n\r\n@Component({\r\n tag: \"dso-autosuggest\",\r\n styleUrl: \"autosuggest.scss\",\r\n scoped: true,\r\n})\r\nexport class Autosuggest {\r\n /**\r\n * The suggestions for the value of the slotted input element.\r\n *\r\n * This can be an array of type Suggestion or an Array of type SuggestionGroup.\r\n *\r\n * A suggestionGroup must have a `groupLabel` and `suggestions`.\r\n *\r\n * A suggestion must have a `value` and can have a `type`, an `item` or `extras`.\r\n *\r\n * The `type` is used to style the suggestion. `item` can be use to reference the original object that was used to\r\n * create the suggestion. `extras` is an array of additional strings to further specify the suggestion.\r\n *\r\n * The value should be null when no suggestions have been fetched.\r\n */\r\n @Prop()\r\n readonly suggestions: Suggestion[] | SuggestionGroup[] | null = null;\r\n\r\n /**\r\n * Shows progress indicator when fetching results.\r\n */\r\n @Prop()\r\n loading = false;\r\n\r\n /**\r\n * To override progress indicator's default loading label.\r\n */\r\n @Prop()\r\n loadingLabel?: string = \"Een moment geduld.\";\r\n\r\n /**\r\n * To delay progress indicator showing (in ms).\r\n */\r\n @Prop()\r\n loadingDelayed?: number;\r\n\r\n /**\r\n * To show text when no results are found.\r\n */\r\n @Prop()\r\n notFoundLabel?: string;\r\n\r\n /**\r\n * Whether the previous suggestions will be presented when the input gets focus again.\r\n */\r\n @Prop()\r\n suggestOnFocus = false;\r\n\r\n /**\r\n * A function provided by the consumer of the autosuggest component, that returns an array of `AutosuggestMarkItem`s\r\n */\r\n @Prop()\r\n mark?: AutosuggestMarkFunction;\r\n\r\n /**\r\n * Emitted when a suggestion is selected.\r\n * The `detail` property of the `CustomEvent` will contain the selected suggestion.\r\n */\r\n @Event()\r\n dsoSelect!: EventEmitter<Suggestion>;\r\n\r\n /**\r\n * This is emitted debounced for every change for the slotted input type=text element.\r\n */\r\n @Event()\r\n dsoChange!: EventEmitter<string>;\r\n\r\n /**\r\n * Emitted when enter is pressed.\r\n * The `detail` property of the `CustomEvent` will contain the input text.\r\n */\r\n @Event()\r\n dsoSearch!: EventEmitter<string>;\r\n\r\n @Element()\r\n host!: HTMLDsoAutosuggestElement;\r\n\r\n @State()\r\n showSuggestions = false;\r\n\r\n @State()\r\n selectedSuggestion: Suggestion | undefined;\r\n\r\n @State()\r\n selectedSuggestionGroup: SuggestionGroup | undefined;\r\n\r\n @State()\r\n notFound = false;\r\n\r\n @State()\r\n showLoading = false;\r\n\r\n @State()\r\n listItemBlockSize = 0;\r\n\r\n @State()\r\n listboxContainerMaxBlockSize = 0;\r\n\r\n @Watch(\"suggestions\")\r\n suggestionsWatcher() {\r\n this.resetSelectedSuggestion();\r\n\r\n if ((!this.showSuggestions || !this.notFound) && this.inputValue) {\r\n this.openSuggestions();\r\n } else if ((this.showSuggestions || this.notFound) && !this.inputValue) {\r\n this.closeSuggestions();\r\n }\r\n }\r\n\r\n private input?: HTMLInputElement;\r\n\r\n private listboxContainer: HTMLDsoScrollableElement | undefined;\r\n\r\n private listbox: HTMLDivElement | undefined;\r\n\r\n private listboxItems: HTMLDivElement[] = [];\r\n\r\n private listboxId: string = v4();\r\n\r\n private inputId: string = v4();\r\n\r\n private labelId: string = v4();\r\n\r\n private resizeObserver = new ResizeObserver(debounce(() => this.setListboxContainerMaxBlockSize(), 150));\r\n\r\n private debouncedEmitValue = debounce((value: string) => {\r\n this.dsoChange.emit(value);\r\n this.debouncedShowLoading();\r\n }, 200);\r\n\r\n private debouncedShowLoading = debounce(() => {\r\n if (this.inputValue) {\r\n this.showLoading = true;\r\n }\r\n }, this.loadingDelayed);\r\n\r\n private inputValue = \"\";\r\n\r\n private onInput = (event: Event) => {\r\n if (!(event.target instanceof HTMLInputElement)) {\r\n return;\r\n // throw new Error(\"event.target is not instanceof HTMLInputElement\"); #2293\r\n }\r\n\r\n this.showLoading = !this.loadingDelayed;\r\n this.inputValue = event.target.value;\r\n this.debouncedEmitValue(event.target.value.match(/(\\S+)/g) ? event.target.value : \"\");\r\n };\r\n\r\n private onFocusIn = () => {\r\n if (this.suggestOnFocus) {\r\n this.openSuggestions();\r\n }\r\n };\r\n\r\n @Listen(\"click\", { target: \"document\" })\r\n onDocumentClick(event: MouseEvent) {\r\n if (\r\n (this.showSuggestions || this.notFound) &&\r\n this.listbox &&\r\n event.target instanceof Node &&\r\n !this.listbox.contains(event.target) &&\r\n this.input !== event.target\r\n ) {\r\n this.closeSuggestions();\r\n }\r\n }\r\n\r\n private text = i18n(() => this.host, translations);\r\n\r\n componentDidRender() {\r\n this.setListboxContainerMaxBlockSize();\r\n }\r\n\r\n connectedCallback() {\r\n setTimeout(() => {\r\n const input = this.host.querySelector('input[type=\"text\"]');\r\n if (!(input instanceof HTMLInputElement)) {\r\n return;\r\n // throw new ReferenceError(\"Mandatory text input not found\"); #2293\r\n }\r\n\r\n this.input = input;\r\n if (input.id) {\r\n this.inputId = input.id;\r\n } else {\r\n input.id = this.inputId;\r\n }\r\n\r\n if (!this.input.labels || this.input.labels.length < 1) {\r\n return;\r\n // throw new ReferenceError(\"Mandatory label for text input not found\"); #2293\r\n }\r\n\r\n const label = this.input.labels[0];\r\n if (label?.id) {\r\n this.labelId = label.id;\r\n } else if (label) {\r\n label.id = this.labelId;\r\n }\r\n\r\n this.input.setAttribute(\"role\", \"combobox\");\r\n this.input.setAttribute(\"aria-haspopup\", \"listbox\");\r\n this.input.setAttribute(\"aria-expanded\", \"false\");\r\n this.input.setAttribute(\"autocomplete\", \"off\");\r\n this.input.setAttribute(\"aria-autocomplete\", \"list\");\r\n this.input.setAttribute(\"aria-activedescendant\", \"\");\r\n this.input.addEventListener(\"input\", this.onInput);\r\n this.input.addEventListener(\"keydown\", this.onKeyDown);\r\n this.input.addEventListener(\"focusin\", this.onFocusIn);\r\n\r\n window.addEventListener(\"resize\", this.onWindowResize);\r\n\r\n document.addEventListener(\"scrollend\", this.onScrollend);\r\n\r\n this.resizeObserver.observe(this.host);\r\n\r\n this.setListboxContainerMaxBlockSize();\r\n });\r\n }\r\n\r\n disconnectedCallback() {\r\n this.input?.removeEventListener(\"input\", this.onInput);\r\n this.input?.removeEventListener(\"keydown\", this.onKeyDown);\r\n this.input?.removeEventListener(\"focusin\", this.onFocusIn);\r\n\r\n window.removeEventListener(\"resize\", this.onWindowResize);\r\n\r\n document.removeEventListener(\"scrollend\", this.onScrollend);\r\n\r\n this.resizeObserver.disconnect();\r\n }\r\n\r\n private onWindowResize = debounce(() => this.setListboxContainerMaxBlockSize(), 150);\r\n\r\n private onScrollend = () => this.setListboxContainerMaxBlockSize();\r\n\r\n private setListboxContainerMaxBlockSize(): void {\r\n if (!this.listboxContainer || !this.showSuggestions) {\r\n return;\r\n }\r\n\r\n if (this.listboxItems[0] && this.showSuggestions) {\r\n this.listItemBlockSize = this.listboxItems[0].getBoundingClientRect().height;\r\n }\r\n\r\n const availableBlockSize = window.innerHeight - this.host.getBoundingClientRect().bottom;\r\n const listboxMaxBlockSize =\r\n this.listItemBlockSize * maxSuggestionsViewable + 2 * listboxPaddingBlock + 2 * listboxBorderWidth;\r\n\r\n if (availableBlockSize > this.listItemBlockSize) {\r\n if (availableBlockSize < listboxMaxBlockSize) {\r\n this.listboxContainerMaxBlockSize = availableBlockSize - 2 * listboxPaddingBlock;\r\n } else {\r\n this.listboxContainerMaxBlockSize = listboxMaxBlockSize;\r\n }\r\n }\r\n }\r\n\r\n private showInputValueNotFound(text?: string) {\r\n return this.processAutosuggestMarkItems(this.markTerms(this.input?.value.split(\" \").filter((t) => t) ?? [], text));\r\n }\r\n\r\n private handleMark(\r\n suggestion: Suggestion,\r\n text: string,\r\n type?: \"value\" | \"type\" | \"extra\",\r\n extraIndex?: number,\r\n ): (VNode | string)[] {\r\n if (this.mark && type) {\r\n return this.processAutosuggestMarkItems(this.mark(suggestion, text, type, extraIndex));\r\n }\r\n return this.processAutosuggestMarkItems(this.markTerms(this.input?.value.split(\" \").filter((t) => t) ?? [], text));\r\n }\r\n\r\n private markTerms(terms: string[], suggestionValue?: string): AutosuggestMarkItem[] {\r\n if (!suggestionValue || !terms || terms.length === 0 || terms[0] === undefined) {\r\n return [\"\"];\r\n }\r\n\r\n const termRegex = new RegExp(`(${escapeStringRegexp(terms[0])})`, \"gi\");\r\n\r\n return suggestionValue.split(termRegex).reduce((total: AutosuggestMarkItem[], valuePart: string) => {\r\n if (!valuePart) {\r\n total.push(valuePart);\r\n } else if (termRegex.test(valuePart)) {\r\n total.push({ mark: valuePart });\r\n } else if (terms.length === 1) {\r\n total.push(valuePart);\r\n } else {\r\n total.push(...this.markTerms(terms.slice(1), valuePart));\r\n }\r\n\r\n return total;\r\n }, []);\r\n }\r\n\r\n private processAutosuggestMarkItems(items: AutosuggestMarkItem[]): (VNode | string)[] {\r\n if (items.length === 0) {\r\n return [\"\"];\r\n }\r\n\r\n return items.map((item) => {\r\n if (typeof item === \"object\") {\r\n return <mark>{item.mark}</mark>;\r\n }\r\n return item;\r\n });\r\n }\r\n\r\n private selectSuggestion(suggestion: Suggestion, group?: SuggestionGroup) {\r\n this.selectedSuggestion = suggestion;\r\n this.selectedSuggestionGroup = group;\r\n\r\n this.setAriaActiveDescendant();\r\n }\r\n\r\n private selectFirstSuggestion() {\r\n if (!this.suggestions) {\r\n return;\r\n }\r\n\r\n if (isGrouped(this.suggestions) && this.selectedSuggestionGroup) {\r\n this.selectedSuggestion = this.selectedSuggestionGroup.suggestions[0];\r\n } else {\r\n if (isFlat(this.suggestions)) {\r\n this.selectedSuggestion = this.suggestions[0];\r\n }\r\n }\r\n\r\n this.setAriaActiveDescendant(true);\r\n }\r\n\r\n private selectLastSuggestion() {\r\n if (!this.suggestions) {\r\n return;\r\n }\r\n\r\n if (isGrouped(this.suggestions) && this.selectedSuggestionGroup) {\r\n this.selectedSuggestion =\r\n this.selectedSuggestionGroup.suggestions[this.selectedSuggestionGroup.suggestions.length - 1];\r\n } else {\r\n if (isFlat(this.suggestions)) {\r\n this.selectedSuggestion = this.suggestions[this.suggestions.length - 1];\r\n }\r\n }\r\n this.setAriaActiveDescendant(true);\r\n }\r\n\r\n private selectNextSuggestion() {\r\n if (!this.suggestions) {\r\n return;\r\n }\r\n\r\n if (isGrouped(this.suggestions)) {\r\n this.selectNextGroupedSuggestion();\r\n } else {\r\n const index = this.selectedSuggestion ? this.suggestions.indexOf(this.selectedSuggestion) : -1;\r\n\r\n this.selectedSuggestion = this.suggestions[index + 1] ?? this.suggestions[0];\r\n }\r\n\r\n this.setAriaActiveDescendant(true);\r\n }\r\n\r\n private selectNextGroupedSuggestion() {\r\n if (!this.suggestions) {\r\n return;\r\n }\r\n\r\n if (this.selectedSuggestionGroup) {\r\n const indexInGroup = this.selectedSuggestion\r\n ? this.selectedSuggestionGroup.suggestions.indexOf(this.selectedSuggestion)\r\n : -1;\r\n\r\n if (indexInGroup === this.selectedSuggestionGroup.suggestions.length - 1) {\r\n // Move to first suggestion in next or first group\r\n const groupIndex = this.suggestionGroups.indexOf(this.selectedSuggestionGroup);\r\n this.selectedSuggestionGroup = this.suggestionGroups[groupIndex + 1] ?? this.suggestionGroups[0];\r\n this.selectedSuggestion = this.selectedSuggestionGroup!.suggestions[0];\r\n } else {\r\n // Within this group\r\n this.selectedSuggestion = this.selectedSuggestionGroup.suggestions[indexInGroup + 1];\r\n }\r\n } else {\r\n this.selectedSuggestionGroup = this.suggestionGroups[0];\r\n this.selectedSuggestion = this.selectedSuggestionGroup!.suggestions[0];\r\n }\r\n }\r\n\r\n private selectPreviousSuggestion() {\r\n if (!this.suggestions) {\r\n return;\r\n }\r\n\r\n if (isGrouped(this.suggestions)) {\r\n this.selectPreviousGroupedSuggestion();\r\n } else {\r\n const index = this.selectedSuggestion ? this.suggestions.indexOf(this.selectedSuggestion) : 0;\r\n\r\n this.selectedSuggestion = this.suggestions[index - 1] ?? this.suggestions[this.suggestions.length - 1];\r\n }\r\n\r\n this.setAriaActiveDescendant(true);\r\n }\r\n\r\n private selectPreviousGroupedSuggestion() {\r\n if (!this.suggestions) {\r\n return;\r\n }\r\n\r\n if (this.selectedSuggestionGroup) {\r\n const indexInGroup = this.selectedSuggestion\r\n ? this.selectedSuggestionGroup.suggestions.indexOf(this.selectedSuggestion)\r\n : -1;\r\n\r\n if (indexInGroup === 0) {\r\n // Move to last suggestion in previous or last group\r\n const groupIndex = this.suggestionGroups.indexOf(this.selectedSuggestionGroup);\r\n\r\n this.selectedSuggestionGroup =\r\n this.suggestionGroups[groupIndex - 1] ?? this.suggestionGroups[this.suggestions.length - 1];\r\n this.selectedSuggestion =\r\n this.selectedSuggestionGroup!.suggestions[this.selectedSuggestionGroup!.suggestions.length - 1];\r\n } else {\r\n // Within this group\r\n this.selectedSuggestion = this.selectedSuggestionGroup.suggestions[indexInGroup - 1];\r\n }\r\n } else {\r\n this.selectedSuggestionGroup = this.suggestionGroups[this.suggestions.length - 1];\r\n this.selectedSuggestion =\r\n this.selectedSuggestionGroup!.suggestions[this.selectedSuggestionGroup!.suggestions.length - 1];\r\n }\r\n }\r\n\r\n private get suggestionGroups(): SuggestionGroup[] {\r\n return isGrouped(this.suggestions) ? this.suggestions : [];\r\n }\r\n\r\n private setAriaActiveDescendant(scroll = false): void {\r\n if (this.selectedSuggestion) {\r\n const id = this.selectedSuggestionGroup\r\n ? this.listboxGroupedItemId(this.selectedSuggestionGroup, this.selectedSuggestion)\r\n : this.listboxItemId(this.selectedSuggestion);\r\n this.input?.setAttribute(\"aria-activedescendant\", id);\r\n if (scroll) {\r\n document.getElementById(id)?.scrollIntoView({ block: \"nearest\" });\r\n }\r\n }\r\n }\r\n\r\n private resetSelectedSuggestion() {\r\n this.showLoading = !this.loadingDelayed;\r\n this.notFound = false;\r\n this.selectedSuggestion = undefined;\r\n this.selectedSuggestionGroup = undefined;\r\n this.input?.setAttribute(\"aria-activedescendant\", \"\");\r\n }\r\n\r\n private openSuggestions(selectSuggestion?: \"first\" | \"last\") {\r\n this.showSuggestions = (this.suggestions && this.suggestions.length > 0) ?? false;\r\n this.notFound = (this.suggestions && this.suggestions?.length === 0) ?? false;\r\n this.input?.setAttribute(\"aria-expanded\", (this.showSuggestions || this.notFound).toString());\r\n\r\n if (this.showSuggestions && selectSuggestion === \"first\") {\r\n this.selectFirstSuggestion();\r\n } else if (this.showSuggestions && selectSuggestion === \"last\") {\r\n this.selectLastSuggestion();\r\n }\r\n }\r\n\r\n private closeSuggestions() {\r\n this.showSuggestions = false;\r\n this.notFound = false;\r\n this.input?.setAttribute(\"aria-expanded\", \"false\");\r\n this.selectFirstSuggestion();\r\n }\r\n\r\n private pickSelectedValue() {\r\n if (this.selectedSuggestion && this.showSuggestions) {\r\n this.dsoSelect.emit(this.selectedSuggestion);\r\n } else {\r\n this.dsoSearch.emit(this.input?.value);\r\n }\r\n\r\n this.closeSuggestions();\r\n }\r\n\r\n private onKeyDown = (event: KeyboardEvent) => {\r\n if (event.defaultPrevented || this.loading) {\r\n return;\r\n }\r\n\r\n switch (event.key) {\r\n case \"ArrowDown\":\r\n if (!this.showSuggestions) {\r\n this.openSuggestions(\"first\");\r\n } else {\r\n this.selectNextSuggestion();\r\n }\r\n\r\n break;\r\n\r\n case \"ArrowUp\":\r\n if (!this.showSuggestions) {\r\n this.openSuggestions(\"last\");\r\n } else {\r\n this.selectPreviousSuggestion();\r\n }\r\n\r\n break;\r\n\r\n case \"Tab\":\r\n this.closeSuggestions();\r\n return;\r\n\r\n case \"Escape\":\r\n this.closeSuggestions();\r\n break;\r\n\r\n case \"Enter\":\r\n this.pickSelectedValue();\r\n break;\r\n\r\n default:\r\n return;\r\n }\r\n\r\n event.preventDefault();\r\n };\r\n\r\n private listboxItemId(suggestion: Suggestion): string {\r\n if (!this.suggestions) {\r\n return \"\";\r\n }\r\n return `${this.inputId}-${isFlat(this.suggestions) && this.suggestions.indexOf(suggestion) + 1}`;\r\n }\r\n\r\n private listboxGroupedItemId(suggestionGroup: SuggestionGroup, suggestion: Suggestion): string {\r\n if (!this.suggestions) {\r\n return \"\";\r\n }\r\n\r\n return `${this.inputId}-${this.suggestionGroups.indexOf(suggestionGroup) + 1}-${suggestionGroup.suggestions.indexOf(suggestion) + 1}`;\r\n }\r\n\r\n private getMarkedChunkedExtras(extras: string[], suggestion: Suggestion): (string | VNode)[][][] {\r\n const chunkedExtras = extras.reduce((resultArray: string[][], extra, index) => {\r\n const chunkIndex = Math.floor(index / 2);\r\n\r\n if (!resultArray[chunkIndex]) {\r\n resultArray[chunkIndex] = [];\r\n }\r\n resultArray[chunkIndex]?.push(extra);\r\n return resultArray;\r\n }, []);\r\n\r\n return chunkedExtras.map((chunk, index) =>\r\n chunk.map((c, i) => this.handleMark(suggestion, c, \"extra\", index * 2 + i)),\r\n );\r\n }\r\n\r\n private getMarkedSuggestions(suggestion: Suggestion): MarkedSuggestion {\r\n return {\r\n value: this.handleMark(suggestion, suggestion.value, \"value\"),\r\n type: suggestion.type ? this.handleMark(suggestion, suggestion.type, \"type\") : undefined,\r\n extras: suggestion.extras ? this.getMarkedChunkedExtras(suggestion.extras, suggestion) : undefined,\r\n };\r\n }\r\n\r\n render() {\r\n this.listboxItems = [];\r\n\r\n const showListbox = this.showSuggestions || this.notFound;\r\n\r\n const grouped = isGrouped(this.suggestions);\r\n const flat = isFlat(this.suggestions);\r\n\r\n if (showListbox && this.input) {\r\n this.input.setAttribute(\"aria-controls\", this.listboxId);\r\n } else if (this.input) {\r\n this.input.removeAttribute(\"aria-controls\");\r\n }\r\n\r\n return (\r\n <>\r\n <slot />\r\n {this.loading && this.showLoading ? (\r\n <div class=\"autosuggest-progress-box\">\r\n <dso-progress-indicator label={this.loadingLabel}></dso-progress-indicator>\r\n </div>\r\n ) : (\r\n showListbox && (\r\n <dso-scrollable\r\n class=\"listbox-container\"\r\n ref={(element) => (this.listboxContainer = element)}\r\n style={{ \"--max-block-size\": `${this.listboxContainerMaxBlockSize}px` }}\r\n >\r\n <div\r\n class=\"listbox\"\r\n role=\"listbox\"\r\n aria-live=\"polite\"\r\n id={this.listboxId}\r\n aria-labelledby={this.labelId}\r\n ref={(element) => (this.listbox = element)}\r\n tabindex=\"0\"\r\n >\r\n {(flat &&\r\n this.showSuggestions &&\r\n this.suggestions &&\r\n this.suggestions.map((suggestion) => (\r\n <Option\r\n id={this.listboxItemId(suggestion)}\r\n mouseEnter={() => this.selectSuggestion(suggestion)}\r\n mouseLeave={() => this.resetSelectedSuggestion()}\r\n click={() => this.pickSelectedValue()}\r\n selected={(suggestion === this.selectedSuggestion).toString()}\r\n suggestion={suggestion}\r\n ref={(element) => element && this.listboxItems.push(element)}\r\n markedSuggestion={this.getMarkedSuggestions(suggestion)}\r\n />\r\n ))) ||\r\n (grouped &&\r\n this.showSuggestions &&\r\n this.suggestions &&\r\n this.suggestions.map((suggestionGroup) => {\r\n const groupLabelId = v4();\r\n return (\r\n <div role=\"group\" class=\"group\" aria-labelledby={groupLabelId}>\r\n <div class=\"group-label\" role=\"presentation\" id={groupLabelId}>\r\n {suggestionGroup.groupLabel}\r\n </div>\r\n {suggestionGroup.suggestions.map((suggestion) => (\r\n <Option\r\n id={this.listboxGroupedItemId(suggestionGroup, suggestion)}\r\n mouseEnter={() => this.selectSuggestion(suggestion, suggestionGroup)}\r\n mouseLeave={() => this.resetSelectedSuggestion()}\r\n click={() => this.pickSelectedValue()}\r\n selected={(suggestion === this.selectedSuggestion).toString()}\r\n suggestion={suggestion}\r\n ref={(element) => element && this.listboxItems.push(element)}\r\n markedSuggestion={this.getMarkedSuggestions(suggestion)}\r\n />\r\n ))}\r\n </div>\r\n );\r\n })) ||\r\n (this.notFound && (\r\n <div class=\"option\">\r\n <span class=\"value\">\r\n {this.notFoundLabel ||\r\n this.showInputValueNotFound(this.text(\"notFound\", { inputValue: this.inputValue }))}\r\n </span>\r\n </div>\r\n ))}\r\n </div>\r\n </dso-scrollable>\r\n )\r\n )}\r\n </>\r\n );\r\n }\r\n}\r\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as o,c as t,h as e,a as s}from"./p-abc59cdf.js";import{c as i}from"./p-8a1a6e56.js";import{d as r}from"./p-16e112f1.js";const n=':host{display:block;block-size:100%;overflow-y:hidden}*,*::after,*::before{box-sizing:border-box}.dso-shadow-container{block-size:100%;max-block-size:inherit;min-block-size:inherit;position:relative}.dso-shadow-container .dso-scroll-container{block-size:100%;max-block-size:inherit;min-block-size:inherit;overflow-y:auto}.dso-shadow-container .dso-scroll-container::before,.dso-shadow-container .dso-scroll-container::after{background-repeat:no-repeat;background-size:100% 24px;content:"";display:block;block-size:24px;inset-inline-start:0;opacity:0;overflow:visible;position:absolute;transition:opacity 150ms ease-in-out;inline-size:100%;pointer-events:none;z-index:1}.dso-shadow-container .dso-scroll-container::before{background-image:linear-gradient(to top, rgba(183, 183, 183, 0), rgba(183, 183, 183, 0.7));inset-block-start:0}.dso-shadow-container .dso-scroll-container::after{background-image:linear-gradient(to bottom, rgba(183, 183, 183, 0), rgba(183, 183, 183, 0.7));inset-block-end:0}.dso-shadow-container .dso-scroll-container.dso-scroll-bottom::before{opacity:1}.dso-shadow-container .dso-scroll-container.dso-scroll-top::after{opacity:1}.dso-shadow-container .dso-scroll-container.dso-scroll-middle::before,.dso-shadow-container .dso-scroll-container.dso-scroll-middle::after{opacity:1}';const a=n;const c=new ResizeObserver(r((o=>o.forEach((o=>{var t;return(t=l(o))===null||t===void 0?void 0:t._setScrollState()}))),50));function l({target:o}){if(o.parentNode instanceof ShadowRoot&&d(o.parentNode.host)){return o.parentNode.host}if(o.parentElement&&d(o.parentElement)){return o.parentElement}return undefined}function d(o){return o.tagName==="DSO-SCROLLABLE"}const h=class{constructor(e){o(this,e);this.dsoScrollEnd=t(this,"dsoScrollEnd",7);this.mutationObserver=new MutationObserver((o=>o.forEach((({target:o})=>{var t;const e=(t=o.parentElement)===null||t===void 0?void 0:t.closest("dso-scrollable");if(e!==this.host){return}this._setScrollState()}))));this.scrollPosition="noScroll"}async _setScrollState(){if(!this.host.isConnected){return}const o=this.getScrollPosition();if(this.scrollPosition!==o){this.scrollPosition=o;if(this.scrollPosition==="top"||this.scrollPosition==="bottom"){this.dsoScrollEnd.emit({scrollEnd:this.scrollPosition})}}}get slottedElements(){return Array.from(this.host.children)}getScrollPosition(){if(!this.scrollContainerDiv){return"noScroll"}const{scrollHeight:o,clientHeight:t,scrollTop:e}=this.scrollContainerDiv;if(o<=t){return"noScroll"}if(e===0){return"top"}if(o-e-t<1){return"bottom"}if(e>0){return"middle"}return"noScroll"}componentDidLoad(){this.mutationObserver.observe(this.host,{characterData:true,attributes:false,childList:false,subtree:true});if(this.shadowContainerDiv instanceof HTMLDivElement){c.observe(this.shadowContainerDiv)}this.slottedElements.forEach((o=>c.observe(o)))}disconnectedCallback(){if(this.shadowContainerDiv instanceof HTMLDivElement){c.unobserve(this.shadowContainerDiv)}this.mutationObserver.disconnect();this.slottedElements.forEach((o=>c.unobserve(o)))}render(){return e("div",{key:"70329cb775aa7b06be2e6fcb1e28670f735c2467",ref:o=>this.shadowContainerDiv=o,class:"dso-shadow-container"},e("div",{key:"ff50504d84fad62027ea67742b64ddae2be63f47",ref:o=>this.scrollContainerDiv=o,class:i("dso-scroll-container",{[`dso-scroll-${this.scrollPosition}`]:this.scrollPosition!=="noScroll"}),onScroll:()=>this._setScrollState()},e("slot",{key:"ab03fe8a94df6fd40037376a054c474d75197944"})))}get host(){return s(this)}};h.style=a;export{h as dso_scrollable};
2
+ //# sourceMappingURL=p-e26460b5.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["scrollableCss","DsoScrollableStyle0","resizeObserver","ResizeObserver","debounce","entries","forEach","entry","_a","getScrollableComponentFromResizeObserverEntry","_setScrollState","target","parentNode","ShadowRoot","isDsoScrollableComponent","host","parentElement","undefined","element","tagName","Scrollable","constructor","hostRef","this","mutationObserver","MutationObserver","closest","scrollPosition","isConnected","getScrollPosition","dsoScrollEnd","emit","scrollEnd","slottedElements","Array","from","children","scrollContainerDiv","scrollHeight","clientHeight","scrollTop","componentDidLoad","observe","characterData","attributes","childList","subtree","shadowContainerDiv","HTMLDivElement","disconnectedCallback","unobserve","disconnect","render","h","key","ref","el","class","clsx","onScroll"],"sources":["src/components/scrollable/scrollable.scss?tag=dso-scrollable&encapsulation=shadow","src/components/scrollable/scrollable.tsx"],"sourcesContent":["@use \"~dso-toolkit/src/utilities\";\r\n@use \"~dso-toolkit/src/variables/units\";\r\n\r\n:host {\r\n display: block;\r\n block-size: 100%;\r\n overflow-y: hidden;\r\n}\r\n\r\n@include utilities.box-sizing();\r\n\r\n.dso-shadow-container {\r\n block-size: 100%;\r\n max-block-size: inherit;\r\n min-block-size: inherit;\r\n position: relative;\r\n\r\n .dso-scroll-container {\r\n block-size: 100%;\r\n max-block-size: inherit;\r\n min-block-size: inherit;\r\n overflow-y: auto;\r\n\r\n &::before,\r\n &::after {\r\n background-repeat: no-repeat;\r\n background-size: 100% units.$u3;\r\n content: \"\";\r\n display: block;\r\n block-size: units.$u3;\r\n inset-inline-start: 0;\r\n opacity: 0;\r\n overflow: visible;\r\n position: absolute;\r\n transition: opacity 150ms ease-in-out;\r\n inline-size: 100%;\r\n pointer-events: none;\r\n z-index: 1;\r\n }\r\n\r\n &::before {\r\n background-image: linear-gradient(to top, rgba(183, 183, 183, 0), rgba(183, 183, 183, 0.7));\r\n inset-block-start: 0;\r\n }\r\n\r\n &::after {\r\n background-image: linear-gradient(to bottom, rgba(183, 183, 183, 0), rgba(183, 183, 183, 0.7));\r\n inset-block-end: 0;\r\n }\r\n\r\n &.dso-scroll-bottom {\r\n &::before {\r\n opacity: 1;\r\n }\r\n }\r\n\r\n &.dso-scroll-top {\r\n &::after {\r\n opacity: 1;\r\n }\r\n }\r\n\r\n &.dso-scroll-middle {\r\n &::before,\r\n &::after {\r\n opacity: 1;\r\n }\r\n }\r\n }\r\n}\r\n","import { Component, Element, Event, EventEmitter, h, Method, State } from \"@stencil/core\";\r\nimport clsx from \"clsx\";\r\nimport debounce from \"debounce\";\r\n\r\nimport { DsoScrollEndEvent, ScrollPosition } from \"./scrollable.interfaces\";\r\n\r\nconst resizeObserver = new ResizeObserver(\r\n debounce(\r\n (entries: ResizeObserverEntry[]) =>\r\n entries.forEach((entry) => getScrollableComponentFromResizeObserverEntry(entry)?._setScrollState()),\r\n 50,\r\n ),\r\n);\r\n\r\nfunction getScrollableComponentFromResizeObserverEntry({\r\n target,\r\n}: ResizeObserverEntry): HTMLDsoScrollableElement | undefined {\r\n if (target.parentNode instanceof ShadowRoot && isDsoScrollableComponent(target.parentNode.host)) {\r\n return target.parentNode.host;\r\n }\r\n\r\n if (target.parentElement && isDsoScrollableComponent(target.parentElement)) {\r\n return target.parentElement;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nfunction isDsoScrollableComponent(element: Element): element is HTMLDsoScrollableElement {\r\n return element.tagName === \"DSO-SCROLLABLE\";\r\n}\r\n\r\n@Component({\r\n tag: \"dso-scrollable\",\r\n styleUrl: \"scrollable.scss\",\r\n shadow: true,\r\n})\r\nexport class Scrollable {\r\n // One MutationObserver per instance because of https://github.com/whatwg/dom/issues/126\r\n private mutationObserver = new MutationObserver((entries) =>\r\n entries.forEach(({ target }) => {\r\n const element = target.parentElement?.closest(\"dso-scrollable\");\r\n if (element !== this.host) {\r\n return;\r\n }\r\n\r\n this._setScrollState();\r\n }),\r\n );\r\n\r\n private scrollContainerDiv?: HTMLDivElement;\r\n\r\n private shadowContainerDiv?: HTMLDivElement;\r\n\r\n @Element()\r\n host!: HTMLDsoScrollableElement;\r\n\r\n /**\r\n * Event emitted when the scrollbar has reached top or bottom.\r\n */\r\n @Event()\r\n dsoScrollEnd!: EventEmitter<DsoScrollEndEvent>;\r\n\r\n @State()\r\n scrollPosition: ScrollPosition = \"noScroll\";\r\n\r\n /**\r\n * @internal\r\n */\r\n @Method()\r\n async _setScrollState() {\r\n if (!this.host.isConnected) {\r\n return;\r\n }\r\n\r\n const scrollPosition = this.getScrollPosition();\r\n if (this.scrollPosition !== scrollPosition) {\r\n this.scrollPosition = scrollPosition;\r\n\r\n if (this.scrollPosition === \"top\" || this.scrollPosition === \"bottom\") {\r\n this.dsoScrollEnd.emit({ scrollEnd: this.scrollPosition });\r\n }\r\n }\r\n }\r\n\r\n private get slottedElements() {\r\n return Array.from(this.host.children);\r\n }\r\n\r\n private getScrollPosition(): ScrollPosition {\r\n if (!this.scrollContainerDiv) {\r\n return \"noScroll\";\r\n }\r\n\r\n const { scrollHeight, clientHeight, scrollTop } = this.scrollContainerDiv;\r\n\r\n if (scrollHeight <= clientHeight) {\r\n return \"noScroll\";\r\n }\r\n\r\n if (scrollTop === 0) {\r\n return \"top\";\r\n }\r\n\r\n if (scrollHeight - scrollTop - clientHeight < 1) {\r\n return \"bottom\";\r\n }\r\n\r\n if (scrollTop > 0) {\r\n return \"middle\";\r\n }\r\n\r\n return \"noScroll\";\r\n }\r\n\r\n componentDidLoad(): void {\r\n this.mutationObserver.observe(this.host, {\r\n characterData: true,\r\n attributes: false,\r\n childList: false,\r\n subtree: true,\r\n });\r\n\r\n if (this.shadowContainerDiv instanceof HTMLDivElement) {\r\n resizeObserver.observe(this.shadowContainerDiv);\r\n }\r\n\r\n this.slottedElements.forEach((element) => resizeObserver.observe(element));\r\n }\r\n\r\n disconnectedCallback(): void {\r\n if (this.shadowContainerDiv instanceof HTMLDivElement) {\r\n resizeObserver.unobserve(this.shadowContainerDiv);\r\n }\r\n\r\n this.mutationObserver.disconnect();\r\n\r\n this.slottedElements.forEach((element) => resizeObserver.unobserve(element));\r\n }\r\n\r\n render() {\r\n return (\r\n <div ref={(el) => (this.shadowContainerDiv = el)} class=\"dso-shadow-container\">\r\n <div\r\n ref={(el) => (this.scrollContainerDiv = el)}\r\n class={clsx(\"dso-scroll-container\", {\r\n [`dso-scroll-${this.scrollPosition}`]: this.scrollPosition !== \"noScroll\",\r\n })}\r\n onScroll={() => this._setScrollState()}\r\n >\r\n <slot></slot>\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n"],"mappings":"iIAAA,MAAMA,EAAgB,uxCACtB,MAAAC,EAAeD,ECKf,MAAME,EAAiB,IAAIC,eACzBC,GACGC,GACCA,EAAQC,SAASC,IAAK,IAAAC,EAAK,OAAAA,EAAAC,EAA8CF,MAAM,MAAAC,SAAA,SAAAA,EAAEE,iBAAiB,KACpG,KAIJ,SAASD,GAA8CE,OACrDA,IAEA,GAAIA,EAAOC,sBAAsBC,YAAcC,EAAyBH,EAAOC,WAAWG,MAAO,CAC/F,OAAOJ,EAAOC,WAAWG,I,CAG3B,GAAIJ,EAAOK,eAAiBF,EAAyBH,EAAOK,eAAgB,CAC1E,OAAOL,EAAOK,a,CAGhB,OAAOC,SACT,CAEA,SAASH,EAAyBI,GAChC,OAAOA,EAAQC,UAAY,gBAC7B,C,MAOaC,EAAU,MALvB,WAAAC,CAAAC,G,qDAOUC,KAAAC,iBAAmB,IAAIC,kBAAkBpB,GAC/CA,EAAQC,SAAQ,EAAGK,a,MACjB,MAAMO,GAAUV,EAAAG,EAAOK,iBAAa,MAAAR,SAAA,SAAAA,EAAEkB,QAAQ,kBAC9C,GAAIR,IAAYK,KAAKR,KAAM,CACzB,M,CAGFQ,KAAKb,iBAAiB,MAkB1Ba,KAAAI,eAAiC,U,CAMjC,qBAAMjB,GACJ,IAAKa,KAAKR,KAAKa,YAAa,CAC1B,M,CAGF,MAAMD,EAAiBJ,KAAKM,oBAC5B,GAAIN,KAAKI,iBAAmBA,EAAgB,CAC1CJ,KAAKI,eAAiBA,EAEtB,GAAIJ,KAAKI,iBAAmB,OAASJ,KAAKI,iBAAmB,SAAU,CACrEJ,KAAKO,aAAaC,KAAK,CAAEC,UAAWT,KAAKI,gB,GAK/C,mBAAYM,GACV,OAAOC,MAAMC,KAAKZ,KAAKR,KAAKqB,S,CAGtB,iBAAAP,GACN,IAAKN,KAAKc,mBAAoB,CAC5B,MAAO,U,CAGT,MAAMC,aAAEA,EAAYC,aAAEA,EAAYC,UAAEA,GAAcjB,KAAKc,mBAEvD,GAAIC,GAAgBC,EAAc,CAChC,MAAO,U,CAGT,GAAIC,IAAc,EAAG,CACnB,MAAO,K,CAGT,GAAIF,EAAeE,EAAYD,EAAe,EAAG,CAC/C,MAAO,Q,CAGT,GAAIC,EAAY,EAAG,CACjB,MAAO,Q,CAGT,MAAO,U,CAGT,gBAAAC,GACElB,KAAKC,iBAAiBkB,QAAQnB,KAAKR,KAAM,CACvC4B,cAAe,KACfC,WAAY,MACZC,UAAW,MACXC,QAAS,OAGX,GAAIvB,KAAKwB,8BAA8BC,eAAgB,CACrD9C,EAAewC,QAAQnB,KAAKwB,mB,CAG9BxB,KAAKU,gBAAgB3B,SAASY,GAAYhB,EAAewC,QAAQxB,I,CAGnE,oBAAA+B,GACE,GAAI1B,KAAKwB,8BAA8BC,eAAgB,CACrD9C,EAAegD,UAAU3B,KAAKwB,mB,CAGhCxB,KAAKC,iBAAiB2B,aAEtB5B,KAAKU,gBAAgB3B,SAASY,GAAYhB,EAAegD,UAAUhC,I,CAGrE,MAAAkC,GACE,OACEC,EAAA,OAAAC,IAAA,2CAAKC,IAAMC,GAAQjC,KAAKwB,mBAAqBS,EAAKC,MAAM,wBACtDJ,EAAA,OAAAC,IAAA,2CACEC,IAAMC,GAAQjC,KAAKc,mBAAqBmB,EACxCC,MAAOC,EAAK,uBAAwB,CAClC,CAAC,cAAcnC,KAAKI,kBAAmBJ,KAAKI,iBAAmB,aAEjEgC,SAAU,IAAMpC,KAAKb,mBAErB2C,EAAA,QAAAC,IAAA,8C","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ import{r as i,c as n,h as t,F as e,a}from"./p-abc59cdf.js";import{i as s}from"./p-2d694112.js";const o=':host{display:block}*,*::after,*::before{box-sizing:border-box}.pagination ul{padding-inline-start:initial;text-align:center}.pagination ul>li{display:inline-block;font-weight:bold;line-height:calc(2rem - 4px);text-align:center;vertical-align:middle}.pagination ul>li>a,.pagination ul>li>span{align-items:center;color:#39870c;display:flex;block-size:2rem;justify-content:center;position:relative;min-inline-size:2rem;padding:2px;padding-block:2px;padding-inline:2px}.pagination ul>li>a:active,.pagination ul>li>span:active{background-color:#ebf3e6}.pagination ul>li>span{border:2px solid transparent;border-radius:1rem}.pagination ul>li a{line-height:2rem;text-decoration:none}.pagination ul>li a:hover,.pagination ul>li a:focus{text-decoration:none}.pagination ul>li a:hover::after,.pagination ul>li a:focus::after{border-block-end-color:#39870c}.pagination ul>li a::after{border-block-end:3px solid transparent;inset-block-end:0;content:"";display:inline-block;inset-inline-start:0;position:absolute;inline-size:100%}.pagination ul>li.active span{background-color:#39870c;color:#fff}.pagination ul>li+li{margin-inline-start:8px}.dso-page-hidden{visibility:hidden}.sr-only.sr-only{position:absolute;inline-size:1px;block-size:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}';const l=o;const r=class{constructor(t){i(this,t);this.dsoSelectPage=n(this,"dsoSelectPage",7);this.sizePositionsMap={small:7,medium:9,large:11};this.formatHref=i=>"#"+i}sizeChangeHandler(i){this.availablePositions=this.getAvailablePositions(this.sizePositionsMap[i.detail])}clickHandler(i,n){this.dsoSelectPage.emit({originalEvent:i,page:n,isModifiedEvent:s(i)})}componentDidLoad(){var i;(i=this.responsiveElement)===null||i===void 0?void 0:i.getSize().then((i=>this.availablePositions=this.getAvailablePositions(this.sizePositionsMap[i])))}render(){var i;if(!this.totalPages&&!this.currentPage){return null}if(this.availablePositions===undefined){return t("dso-responsive-element",{ref:i=>this.responsiveElement=i})}const n=this.availablePositions;const a=(i=this.currentPage)!==null&&i!==void 0?i:0;const s=this.getPages(a,this.availablePositions,this.totalPages);return t("dso-responsive-element",{ref:i=>this.responsiveElement=i},t("nav",{class:"pagination","aria-label":"Paginering"},t("ul",null,t("li",{class:a<=1||!a?"dso-page-hidden":undefined},t("a",{href:this.formatHref(a-1),"aria-label":"Vorige",onClick:i=>a&&this.clickHandler(i,a-1)},t("dso-icon",{icon:"chevron-left"}))),s.map((i=>t(e,null,this.showEllipsisBeforeLast(s,i,n)&&t("li",null,t("span",null,"...")),t("li",{key:i,class:a===i?"active":undefined},a===i?t("span",{"aria-current":"page"},i):t("a",{href:this.formatHref(i),onClick:n=>this.clickHandler(n,i)},i),i===this.totalPages?t("span",{class:"sr-only"}," (laatste pagina)"):null),this.showEllipsisAfterFirst(s,i,n)&&t("li",null,t("span",null,"...")),this.showEllipsisLastWithoutTotal(s,i,this.totalPages)&&t("li",null,t("span",null,"..."))))),t("li",{class:this.totalPages&&a>=this.totalPages||!a?"dso-page-hidden":undefined},t("a",{href:this.formatHref(a+1),"aria-label":"Volgende",onClick:i=>a&&this.clickHandler(i,a+1)},t("dso-icon",{icon:"chevron-right"}))))))}getAvailablePositions(i){if(i%2===0){return i-1}if(i<=3){return 3}return i}getPages(i,n,t){if(t){if(t+2<=n){return Array.from({length:t},((i,n)=>n+1))}if(n===3){return[i]}if(n===5){return[1,i,t]}return[1,...this.getPageRange(i,n,t),t]}return this.getPageRangeWithoutTotalPages(i,n)}getPageRange(i,n,t){const e=[];const a=Math.floor(n/2);if(i<=a){for(let i=2;i<=n-4;i++){e.push(i)}}if(i>=a&&i<=t-a){if(a===1){if(i>t-2){e.push(t-2)}e.push(i);if(i<3){e.push(3)}}if(a>1){const n=a-3;for(let s=Math.min(i-n,t-a);s<=Math.max(i+n,a);s++){if(s>2&&s<t-1){e.push(s)}}}}if(i>t-a){for(let i=t-(n-5);i<=t-1;i++){e.push(i)}}return e.filter(((i,n,t)=>t.indexOf(i)===n))}showEllipsisAfterFirst(i,n,t){const e=i[i.length-1];if(!e){throw new Error("No totalPages")}const a=i.indexOf(n)===0;const s=e>t-(this.totalPages?2:6);const o=!i.includes(2);const l=t>=7;return a&&s&&o&&l}showEllipsisBeforeLast(i,n,t){const e=i[i.length-1];if(!e){throw new Error("No totalPages")}const a=i.indexOf(n)===i.length-1;const s=e>t-(this.totalPages?2:6);const o=!i.includes(e-1);const l=t>=7;return a&&s&&o&&l}showEllipsisLastWithoutTotal(i,n,t){return t?false:i.at(-1)===n}getPageRangeWithoutTotalPages(i,n){const t=n>=9?2:0;const e=Math.max(1,i-t);const a=Array.from({length:i-e+2},((i,n)=>e+n));if(e>=2)a.unshift(1);return a}get host(){return a(this)}};r.style=l;export{r as dso_pagination};
2
+ //# sourceMappingURL=p-eeca54c6.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["paginationCss","DsoPaginationStyle0","Pagination","constructor","hostRef","this","sizePositionsMap","small","medium","large","formatHref","page","sizeChangeHandler","event","availablePositions","getAvailablePositions","detail","clickHandler","e","dsoSelectPage","emit","originalEvent","isModifiedEvent","componentDidLoad","_a","responsiveElement","getSize","then","size","render","totalPages","currentPage","undefined","h","ref","element","pages","getPages","class","href","onClick","icon","map","Fragment","showEllipsisBeforeLast","key","showEllipsisAfterFirst","showEllipsisLastWithoutTotal","sizePositions","Array","from","length","_value","i","getPageRange","getPageRangeWithoutTotalPages","range","positionRange","Math","floor","push","pagesBeforeOrAfter","min","max","filter","v","a","indexOf","Error","isFirstPage","hasManyPages","isPageTwoMissing","includes","hasEnoughPositions","isLastPage","isSecondLastPageMissing","at","start","result","_","unshift"],"sources":["src/components/pagination/pagination.scss?tag=dso-pagination&encapsulation=shadow","src/components/pagination/pagination.tsx"],"sourcesContent":["@use \"~dso-toolkit/src/utilities\";\r\n@use \"~dso-toolkit/src/components/pagination\";\r\n\r\n:host {\r\n display: block;\r\n}\r\n\r\n@include utilities.box-sizing();\r\n\r\n.pagination {\r\n @include pagination.root();\r\n}\r\n\r\n.dso-page-hidden {\r\n visibility: hidden;\r\n}\r\n\r\n.sr-only.sr-only {\r\n // class daisy-chained to prevent overwrites by other more specific styling set on this element.\r\n @include utilities.sr-only();\r\n}\r\n","import {\r\n h,\r\n Component,\r\n ComponentInterface,\r\n Element,\r\n Event,\r\n EventEmitter,\r\n Fragment,\r\n Listen,\r\n Prop,\r\n State,\r\n} from \"@stencil/core\";\r\nimport { isModifiedEvent } from \"../../utils/is-modified-event\";\r\n\r\nimport { ResponsiveElementSize } from \"../responsive-element/responsive-element.interfaces\";\r\nimport { PaginationSelectPageEvent } from \"./pagination.interfaces\";\r\n\r\n@Component({\r\n tag: \"dso-pagination\",\r\n styleUrl: \"pagination.scss\",\r\n shadow: true,\r\n})\r\nexport class Pagination implements ComponentInterface {\r\n private sizePositionsMap: Record<ResponsiveElementSize, number> = {\r\n small: 7,\r\n medium: 9,\r\n large: 11,\r\n };\r\n\r\n private responsiveElement?: HTMLDsoResponsiveElementElement;\r\n\r\n @Element()\r\n host!: HTMLDsoPaginationElement;\r\n\r\n @State()\r\n availablePositions?: number;\r\n /**\r\n * Total pages\r\n */\r\n @Prop()\r\n totalPages?: number;\r\n\r\n /**\r\n * Current page\r\n */\r\n @Prop()\r\n currentPage?: number;\r\n\r\n /**\r\n * This function is called to format the href\r\n */\r\n @Prop()\r\n formatHref: (page: number) => string = (page) => \"#\" + page;\r\n\r\n /**\r\n * Emitted on page select\r\n */\r\n @Event()\r\n dsoSelectPage!: EventEmitter<PaginationSelectPageEvent>;\r\n\r\n /**\r\n * Listens to the dsoSizeChange event on Responsive Element\r\n */\r\n @Listen(\"dsoSizeChange\")\r\n sizeChangeHandler(event: CustomEvent<ResponsiveElementSize>) {\r\n this.availablePositions = this.getAvailablePositions(this.sizePositionsMap[event.detail]);\r\n }\r\n\r\n private clickHandler(e: MouseEvent, page: number) {\r\n this.dsoSelectPage.emit({\r\n originalEvent: e,\r\n page,\r\n isModifiedEvent: isModifiedEvent(e),\r\n });\r\n }\r\n\r\n componentDidLoad(): void {\r\n this.responsiveElement\r\n ?.getSize()\r\n .then(\r\n (size: ResponsiveElementSize) =>\r\n (this.availablePositions = this.getAvailablePositions(this.sizePositionsMap[size])),\r\n );\r\n }\r\n\r\n render() {\r\n if (!this.totalPages && !this.currentPage) {\r\n return null;\r\n }\r\n\r\n if (this.availablePositions === undefined) {\r\n return <dso-responsive-element ref={(element) => (this.responsiveElement = element)}></dso-responsive-element>;\r\n }\r\n\r\n const availablePositions = this.availablePositions;\r\n\r\n const currentPage = this.currentPage ?? 0;\r\n\r\n const pages: number[] = this.getPages(currentPage, this.availablePositions, this.totalPages);\r\n\r\n return (\r\n <dso-responsive-element ref={(element) => (this.responsiveElement = element)}>\r\n <nav class=\"pagination\" aria-label=\"Paginering\">\r\n <ul>\r\n <li class={currentPage <= 1 || !currentPage ? \"dso-page-hidden\" : undefined}>\r\n <a\r\n href={this.formatHref(currentPage - 1)}\r\n aria-label=\"Vorige\"\r\n onClick={(e) => currentPage && this.clickHandler(e, currentPage - 1)}\r\n >\r\n <dso-icon icon=\"chevron-left\"></dso-icon>\r\n </a>\r\n </li>\r\n {pages.map((page) => (\r\n <Fragment>\r\n {this.showEllipsisBeforeLast(pages, page, availablePositions) && (\r\n <li>\r\n <span>...</span>\r\n </li>\r\n )}\r\n\r\n <li key={page} class={currentPage === page ? \"active\" : undefined}>\r\n {currentPage === page ? (\r\n <span aria-current=\"page\">{page}</span>\r\n ) : (\r\n <a href={this.formatHref(page)} onClick={(e) => this.clickHandler(e, page)}>\r\n {page}\r\n </a>\r\n )}\r\n {page === this.totalPages ? <span class=\"sr-only\"> (laatste pagina)</span> : null}\r\n </li>\r\n\r\n {this.showEllipsisAfterFirst(pages, page, availablePositions) && (\r\n <li>\r\n <span>...</span>\r\n </li>\r\n )}\r\n\r\n {this.showEllipsisLastWithoutTotal(pages, page, this.totalPages) && (\r\n <li>\r\n <span>...</span>\r\n </li>\r\n )}\r\n </Fragment>\r\n ))}\r\n <li\r\n class={\r\n (this.totalPages && currentPage >= this.totalPages) || !currentPage ? \"dso-page-hidden\" : undefined\r\n }\r\n >\r\n <a\r\n href={this.formatHref(currentPage + 1)}\r\n aria-label=\"Volgende\"\r\n onClick={(e) => currentPage && this.clickHandler(e, currentPage + 1)}\r\n >\r\n <dso-icon icon=\"chevron-right\"></dso-icon>\r\n </a>\r\n </li>\r\n </ul>\r\n </nav>\r\n </dso-responsive-element>\r\n );\r\n }\r\n\r\n private getAvailablePositions(sizePositions: number) {\r\n if (sizePositions % 2 === 0) {\r\n // Even aantal posities zorgt voor een scheve pagination\r\n return sizePositions - 1;\r\n }\r\n if (sizePositions <= 3) {\r\n // Voor het kunnen tonen van de vorige knop, volgende knop en 1 pagina zijn minimaal 3 posities nodig.\r\n return 3;\r\n }\r\n\r\n return sizePositions;\r\n }\r\n\r\n private getPages(currentPage: number, availablePositions: number, totalPages?: number): number[] {\r\n if (totalPages) {\r\n if (totalPages + 2 <= availablePositions) {\r\n // + 2 voor de vorige en volgende knop\r\n return Array.from({ length: totalPages }, (_value, i) => i + 1);\r\n }\r\n\r\n if (availablePositions === 3) {\r\n return [currentPage];\r\n }\r\n\r\n if (availablePositions === 5) {\r\n return [1, currentPage, totalPages];\r\n }\r\n\r\n return [1, ...this.getPageRange(currentPage, availablePositions, totalPages), totalPages];\r\n }\r\n return this.getPageRangeWithoutTotalPages(currentPage, availablePositions);\r\n }\r\n\r\n private getPageRange(currentPage: number, availablePositions: number, totalPages: number): number[] {\r\n const range: number[] = [];\r\n\r\n const positionRange = Math.floor(availablePositions / 2);\r\n\r\n if (currentPage <= positionRange) {\r\n for (let i = 2; i <= availablePositions - 4; i++) {\r\n range.push(i);\r\n }\r\n }\r\n\r\n if (currentPage >= positionRange && currentPage <= totalPages - positionRange) {\r\n if (positionRange === 1) {\r\n if (currentPage > totalPages - 2) {\r\n range.push(totalPages - 2);\r\n }\r\n\r\n range.push(currentPage);\r\n\r\n if (currentPage < 3) {\r\n range.push(3);\r\n }\r\n }\r\n\r\n if (positionRange > 1) {\r\n const pagesBeforeOrAfter = positionRange - 3;\r\n\r\n for (\r\n let i = Math.min(currentPage - pagesBeforeOrAfter, totalPages - positionRange);\r\n i <= Math.max(currentPage + pagesBeforeOrAfter, positionRange);\r\n i++\r\n ) {\r\n if (i > 2 && i < totalPages - 1) {\r\n range.push(i);\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (currentPage > totalPages - positionRange) {\r\n for (let i = totalPages - (availablePositions - 5); i <= totalPages - 1; i++) {\r\n range.push(i);\r\n }\r\n }\r\n\r\n return range.filter((v, i, a) => a.indexOf(v) === i);\r\n }\r\n\r\n private showEllipsisAfterFirst(pages: number[], page: number, availablePositions: number): boolean {\r\n const totalPages = pages[pages.length - 1];\r\n\r\n if (!totalPages) {\r\n throw new Error(\"No totalPages\");\r\n }\r\n\r\n const isFirstPage = pages.indexOf(page) === 0;\r\n const hasManyPages = totalPages > availablePositions - (this.totalPages ? 2 : 6);\r\n const isPageTwoMissing = !pages.includes(2);\r\n const hasEnoughPositions = availablePositions >= 7;\r\n\r\n return isFirstPage && hasManyPages && isPageTwoMissing && hasEnoughPositions;\r\n }\r\n\r\n private showEllipsisBeforeLast(pages: number[], page: number, availablePositions: number): boolean {\r\n const totalPages = pages[pages.length - 1];\r\n\r\n if (!totalPages) {\r\n throw new Error(\"No totalPages\");\r\n }\r\n\r\n const isLastPage = pages.indexOf(page) === pages.length - 1;\r\n const hasManyPages = totalPages > availablePositions - (this.totalPages ? 2 : 6);\r\n const isSecondLastPageMissing = !pages.includes(totalPages - 1);\r\n const hasEnoughPositions = availablePositions >= 7;\r\n\r\n return isLastPage && hasManyPages && isSecondLastPageMissing && hasEnoughPositions;\r\n }\r\n\r\n private showEllipsisLastWithoutTotal(pages: number[], page: number, totalPages?: number) {\r\n return totalPages ? false : pages.at(-1) === page;\r\n }\r\n\r\n private getPageRangeWithoutTotalPages(currentPage: number, availablePositions: number): number[] {\r\n const positionRange = availablePositions >= 9 ? 2 : 0;\r\n const start = Math.max(1, currentPage - positionRange);\r\n\r\n // Creates an array of numbers from `start` to `currentPage + 1`\r\n const result = Array.from({ length: currentPage - start + 2 }, (_, i) => start + i);\r\n\r\n // Adds 1 to the start of the result array if `start` is >= 2\r\n if (start >= 2) result.unshift(1);\r\n\r\n return result;\r\n }\r\n}\r\n"],"mappings":"+FAAA,MAAMA,EAAgB,uxCACtB,MAAAC,EAAeD,E,MCqBFE,EAAU,MALvB,WAAAC,CAAAC,G,uDAMUC,KAAAC,iBAA0D,CAChEC,MAAO,EACPC,OAAQ,EACRC,MAAO,IA0BTJ,KAAAK,WAAwCC,GAAS,IAAMA,C,CAYvD,iBAAAC,CAAkBC,GAChBR,KAAKS,mBAAqBT,KAAKU,sBAAsBV,KAAKC,iBAAiBO,EAAMG,Q,CAG3E,YAAAC,CAAaC,EAAeP,GAClCN,KAAKc,cAAcC,KAAK,CACtBC,cAAeH,EACfP,OACAW,gBAAiBA,EAAgBJ,I,CAIrC,gBAAAK,G,OACEC,EAAAnB,KAAKoB,qBAAiB,MAAAD,SAAA,SAAAA,EAClBE,UACDC,MACEC,GACEvB,KAAKS,mBAAqBT,KAAKU,sBAAsBV,KAAKC,iBAAiBsB,K,CAIpF,MAAAC,G,MACE,IAAKxB,KAAKyB,aAAezB,KAAK0B,YAAa,CACzC,OAAO,I,CAGT,GAAI1B,KAAKS,qBAAuBkB,UAAW,CACzC,OAAOC,EAAA,0BAAwBC,IAAMC,GAAa9B,KAAKoB,kBAAoBU,G,CAG7E,MAAMrB,EAAqBT,KAAKS,mBAEhC,MAAMiB,GAAcP,EAAAnB,KAAK0B,eAAW,MAAAP,SAAA,EAAAA,EAAI,EAExC,MAAMY,EAAkB/B,KAAKgC,SAASN,EAAa1B,KAAKS,mBAAoBT,KAAKyB,YAEjF,OACEG,EAAA,0BAAwBC,IAAMC,GAAa9B,KAAKoB,kBAAoBU,GAClEF,EAAA,OAAKK,MAAM,aAAY,aAAY,cACjCL,EAAA,UACEA,EAAA,MAAIK,MAAOP,GAAe,IAAMA,EAAc,kBAAoBC,WAChEC,EAAA,KACEM,KAAMlC,KAAKK,WAAWqB,EAAc,GAAE,aAC3B,SACXS,QAAUtB,GAAMa,GAAe1B,KAAKY,aAAaC,EAAGa,EAAc,IAElEE,EAAA,YAAUQ,KAAK,mBAGlBL,EAAMM,KAAK/B,GACVsB,EAACU,EAAQ,KACNtC,KAAKuC,uBAAuBR,EAAOzB,EAAMG,IACxCmB,EAAA,UACEA,EAAA,oBAIJA,EAAA,MAAIY,IAAKlC,EAAM2B,MAAOP,IAAgBpB,EAAO,SAAWqB,WACrDD,IAAgBpB,EACfsB,EAAA,uBAAmB,QAAQtB,GAE3BsB,EAAA,KAAGM,KAAMlC,KAAKK,WAAWC,GAAO6B,QAAUtB,GAAMb,KAAKY,aAAaC,EAAGP,IAClEA,GAGJA,IAASN,KAAKyB,WAAaG,EAAA,QAAMK,MAAM,WAAS,qBAA4B,MAG9EjC,KAAKyC,uBAAuBV,EAAOzB,EAAMG,IACxCmB,EAAA,UACEA,EAAA,oBAIH5B,KAAK0C,6BAA6BX,EAAOzB,EAAMN,KAAKyB,aACnDG,EAAA,UACEA,EAAA,uBAKRA,EAAA,MACEK,MACGjC,KAAKyB,YAAcC,GAAe1B,KAAKyB,aAAgBC,EAAc,kBAAoBC,WAG5FC,EAAA,KACEM,KAAMlC,KAAKK,WAAWqB,EAAc,GAAE,aAC3B,WACXS,QAAUtB,GAAMa,GAAe1B,KAAKY,aAAaC,EAAGa,EAAc,IAElEE,EAAA,YAAUQ,KAAK,sB,CASrB,qBAAA1B,CAAsBiC,GAC5B,GAAIA,EAAgB,IAAM,EAAG,CAE3B,OAAOA,EAAgB,C,CAEzB,GAAIA,GAAiB,EAAG,CAEtB,OAAO,C,CAGT,OAAOA,C,CAGD,QAAAX,CAASN,EAAqBjB,EAA4BgB,GAChE,GAAIA,EAAY,CACd,GAAIA,EAAa,GAAKhB,EAAoB,CAExC,OAAOmC,MAAMC,KAAK,CAAEC,OAAQrB,IAAc,CAACsB,EAAQC,IAAMA,EAAI,G,CAG/D,GAAIvC,IAAuB,EAAG,CAC5B,MAAO,CAACiB,E,CAGV,GAAIjB,IAAuB,EAAG,CAC5B,MAAO,CAAC,EAAGiB,EAAaD,E,CAG1B,MAAO,CAAC,KAAMzB,KAAKiD,aAAavB,EAAajB,EAAoBgB,GAAaA,E,CAEhF,OAAOzB,KAAKkD,8BAA8BxB,EAAajB,E,CAGjD,YAAAwC,CAAavB,EAAqBjB,EAA4BgB,GACpE,MAAM0B,EAAkB,GAExB,MAAMC,EAAgBC,KAAKC,MAAM7C,EAAqB,GAEtD,GAAIiB,GAAe0B,EAAe,CAChC,IAAK,IAAIJ,EAAI,EAAGA,GAAKvC,EAAqB,EAAGuC,IAAK,CAChDG,EAAMI,KAAKP,E,EAIf,GAAItB,GAAe0B,GAAiB1B,GAAeD,EAAa2B,EAAe,CAC7E,GAAIA,IAAkB,EAAG,CACvB,GAAI1B,EAAcD,EAAa,EAAG,CAChC0B,EAAMI,KAAK9B,EAAa,E,CAG1B0B,EAAMI,KAAK7B,GAEX,GAAIA,EAAc,EAAG,CACnByB,EAAMI,KAAK,E,EAIf,GAAIH,EAAgB,EAAG,CACrB,MAAMI,EAAqBJ,EAAgB,EAE3C,IACE,IAAIJ,EAAIK,KAAKI,IAAI/B,EAAc8B,EAAoB/B,EAAa2B,GAChEJ,GAAKK,KAAKK,IAAIhC,EAAc8B,EAAoBJ,GAChDJ,IACA,CACA,GAAIA,EAAI,GAAKA,EAAIvB,EAAa,EAAG,CAC/B0B,EAAMI,KAAKP,E,IAMnB,GAAItB,EAAcD,EAAa2B,EAAe,CAC5C,IAAK,IAAIJ,EAAIvB,GAAchB,EAAqB,GAAIuC,GAAKvB,EAAa,EAAGuB,IAAK,CAC5EG,EAAMI,KAAKP,E,EAIf,OAAOG,EAAMQ,QAAO,CAACC,EAAGZ,EAAGa,IAAMA,EAAEC,QAAQF,KAAOZ,G,CAG5C,sBAAAP,CAAuBV,EAAiBzB,EAAcG,GAC5D,MAAMgB,EAAaM,EAAMA,EAAMe,OAAS,GAExC,IAAKrB,EAAY,CACf,MAAM,IAAIsC,MAAM,gB,CAGlB,MAAMC,EAAcjC,EAAM+B,QAAQxD,KAAU,EAC5C,MAAM2D,EAAexC,EAAahB,GAAsBT,KAAKyB,WAAa,EAAI,GAC9E,MAAMyC,GAAoBnC,EAAMoC,SAAS,GACzC,MAAMC,EAAqB3D,GAAsB,EAEjD,OAAOuD,GAAeC,GAAgBC,GAAoBE,C,CAGpD,sBAAA7B,CAAuBR,EAAiBzB,EAAcG,GAC5D,MAAMgB,EAAaM,EAAMA,EAAMe,OAAS,GAExC,IAAKrB,EAAY,CACf,MAAM,IAAIsC,MAAM,gB,CAGlB,MAAMM,EAAatC,EAAM+B,QAAQxD,KAAUyB,EAAMe,OAAS,EAC1D,MAAMmB,EAAexC,EAAahB,GAAsBT,KAAKyB,WAAa,EAAI,GAC9E,MAAM6C,GAA2BvC,EAAMoC,SAAS1C,EAAa,GAC7D,MAAM2C,EAAqB3D,GAAsB,EAEjD,OAAO4D,GAAcJ,GAAgBK,GAA2BF,C,CAG1D,4BAAA1B,CAA6BX,EAAiBzB,EAAcmB,GAClE,OAAOA,EAAa,MAAQM,EAAMwC,IAAI,KAAOjE,C,CAGvC,6BAAA4C,CAA8BxB,EAAqBjB,GACzD,MAAM2C,EAAgB3C,GAAsB,EAAI,EAAI,EACpD,MAAM+D,EAAQnB,KAAKK,IAAI,EAAGhC,EAAc0B,GAGxC,MAAMqB,EAAS7B,MAAMC,KAAK,CAAEC,OAAQpB,EAAc8C,EAAQ,IAAK,CAACE,EAAG1B,IAAMwB,EAAQxB,IAGjF,GAAIwB,GAAS,EAAGC,EAAOE,QAAQ,GAE/B,OAAOF,C","ignoreList":[]}