@ministryofjustice/frontend 5.2.1 → 7.0.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 (84) hide show
  1. package/moj/all.bundle.js +30 -12
  2. package/moj/all.bundle.js.map +1 -1
  3. package/moj/all.bundle.mjs +85 -38
  4. package/moj/all.bundle.mjs.map +1 -1
  5. package/moj/all.mjs +13 -5
  6. package/moj/all.mjs.map +1 -1
  7. package/moj/common/index.mjs.map +1 -1
  8. package/moj/common/moj-frontend-version.mjs +2 -2
  9. package/moj/common/moj-frontend-version.mjs.map +1 -1
  10. package/moj/components/add-another/add-another.bundle.js.map +1 -1
  11. package/moj/components/add-another/add-another.bundle.mjs +10 -2
  12. package/moj/components/add-another/add-another.bundle.mjs.map +1 -1
  13. package/moj/components/add-another/add-another.mjs.map +1 -1
  14. package/moj/components/alert/alert.bundle.js +1 -1
  15. package/moj/components/alert/alert.bundle.js.map +1 -1
  16. package/moj/components/alert/alert.bundle.mjs +5 -3
  17. package/moj/components/alert/alert.bundle.mjs.map +1 -1
  18. package/moj/components/alert/alert.mjs.map +1 -1
  19. package/moj/components/button-menu/button-menu.bundle.js.map +1 -1
  20. package/moj/components/button-menu/button-menu.bundle.mjs +4 -2
  21. package/moj/components/button-menu/button-menu.bundle.mjs.map +1 -1
  22. package/moj/components/button-menu/button-menu.mjs.map +1 -1
  23. package/moj/components/date-picker/date-picker.bundle.js +11 -1
  24. package/moj/components/date-picker/date-picker.bundle.js.map +1 -1
  25. package/moj/components/date-picker/date-picker.bundle.mjs +15 -3
  26. package/moj/components/date-picker/date-picker.bundle.mjs.map +1 -1
  27. package/moj/components/date-picker/date-picker.mjs +11 -1
  28. package/moj/components/date-picker/date-picker.mjs.map +1 -1
  29. package/moj/components/domain-specific/probation/header/header.bundle.js.map +1 -1
  30. package/moj/components/domain-specific/probation/header/header.bundle.mjs +10 -2
  31. package/moj/components/domain-specific/probation/header/header.bundle.mjs.map +1 -1
  32. package/moj/components/domain-specific/probation/header/header.mjs.map +1 -1
  33. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.js.map +1 -1
  34. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.mjs +4 -2
  35. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.mjs.map +1 -1
  36. package/moj/components/filter-toggle-button/filter-toggle-button.mjs.map +1 -1
  37. package/moj/components/form-validator/form-validator.bundle.js.map +1 -1
  38. package/moj/components/form-validator/form-validator.bundle.mjs +4 -2
  39. package/moj/components/form-validator/form-validator.bundle.mjs.map +1 -1
  40. package/moj/components/form-validator/form-validator.mjs.map +1 -1
  41. package/moj/components/messages/README.md +1 -1
  42. package/moj/components/multi-file-upload/multi-file-upload.bundle.js +3 -3
  43. package/moj/components/multi-file-upload/multi-file-upload.bundle.js.map +1 -1
  44. package/moj/components/multi-file-upload/multi-file-upload.bundle.mjs +7 -5
  45. package/moj/components/multi-file-upload/multi-file-upload.bundle.mjs.map +1 -1
  46. package/moj/components/multi-file-upload/multi-file-upload.mjs +3 -3
  47. package/moj/components/multi-file-upload/multi-file-upload.mjs.map +1 -1
  48. package/moj/components/multi-select/multi-select.bundle.js.map +1 -1
  49. package/moj/components/multi-select/multi-select.bundle.mjs +4 -2
  50. package/moj/components/multi-select/multi-select.bundle.mjs.map +1 -1
  51. package/moj/components/multi-select/multi-select.mjs.map +1 -1
  52. package/moj/components/notification-badge/_notification-badge.scss +10 -6
  53. package/moj/components/notification-badge/_notification-badge.scss.map +1 -1
  54. package/moj/components/notification-badge/template.njk +11 -5
  55. package/moj/components/pagination/template.njk +2 -2
  56. package/moj/components/password-reveal/password-reveal.bundle.js.map +1 -1
  57. package/moj/components/password-reveal/password-reveal.bundle.mjs +10 -2
  58. package/moj/components/password-reveal/password-reveal.bundle.mjs.map +1 -1
  59. package/moj/components/password-reveal/password-reveal.mjs.map +1 -1
  60. package/moj/components/rich-text-editor/rich-text-editor.bundle.js.map +1 -1
  61. package/moj/components/rich-text-editor/rich-text-editor.bundle.mjs +4 -2
  62. package/moj/components/rich-text-editor/rich-text-editor.bundle.mjs.map +1 -1
  63. package/moj/components/rich-text-editor/rich-text-editor.mjs.map +1 -1
  64. package/moj/components/search-toggle/search-toggle.bundle.js.map +1 -1
  65. package/moj/components/search-toggle/search-toggle.bundle.mjs +4 -2
  66. package/moj/components/search-toggle/search-toggle.bundle.mjs.map +1 -1
  67. package/moj/components/search-toggle/search-toggle.mjs.map +1 -1
  68. package/moj/components/sortable-table/sortable-table.bundle.js.map +1 -1
  69. package/moj/components/sortable-table/sortable-table.bundle.mjs +4 -2
  70. package/moj/components/sortable-table/sortable-table.bundle.mjs.map +1 -1
  71. package/moj/components/sortable-table/sortable-table.mjs.map +1 -1
  72. package/moj/components/timeline/README.md +1 -1
  73. package/moj/core/_moj-frontend-properties.scss +1 -1
  74. package/moj/helpers.bundle.js.map +1 -1
  75. package/moj/helpers.bundle.mjs.map +1 -1
  76. package/moj/helpers.mjs +1 -1
  77. package/moj/helpers.mjs.map +1 -1
  78. package/moj/moj-frontend.min.css +1 -1
  79. package/moj/moj-frontend.min.css.map +1 -1
  80. package/moj/moj-frontend.min.js +1 -1
  81. package/moj/moj-frontend.min.js.map +1 -1
  82. package/moj/objects/_scrollable-pane.scss +2 -2
  83. package/moj/objects/_scrollable-pane.scss.map +1 -1
  84. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"sortable-table.mjs","sources":["../../../../src/moj/components/sortable-table/sortable-table.mjs"],"sourcesContent":["import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<SortableTableConfig>}\n */\nexport class SortableTable extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for sortable table\n * @param {SortableTableConfig} [config] - Sortable table config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $head = $root?.querySelector('thead')\n const $body = $root?.querySelector('tbody')\n\n if (!$head || !$body) {\n return this\n }\n\n this.$head = $head\n this.$body = $body\n this.$caption = this.$root.querySelector('caption')\n\n this.$upArrow = `<svg width=\"22\" height=\"22\" focusable=\"false\" aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M6.5625 15.5L11 6.63125L15.4375 15.5H6.5625Z\" fill=\"currentColor\"/>\n</svg>`\n this.$downArrow = `<svg width=\"22\" height=\"22\" focusable=\"false\" aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M15.4375 7L11 15.8687L6.5625 7L15.4375 7Z\" fill=\"currentColor\"/>\n</svg>`\n this.$upDownArrow = `<svg width=\"22\" height=\"22\" focusable=\"false\" aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M8.1875 9.5L10.9609 3.95703L13.7344 9.5H8.1875Z\" fill=\"currentColor\"/>\n<path d=\"M13.7344 12.0781L10.9609 17.6211L8.1875 12.0781H13.7344Z\" fill=\"currentColor\"/>\n</svg>`\n\n this.$headings = this.$head\n ? Array.from(this.$head.querySelectorAll('th'))\n : []\n\n this.createHeadingButtons()\n this.updateCaption()\n this.updateDirectionIndicators()\n this.createStatusBox()\n this.initialiseSortedColumn()\n\n this.$head.addEventListener('click', this.onSortButtonClick.bind(this))\n }\n\n createHeadingButtons() {\n for (const $heading of this.$headings) {\n if ($heading.hasAttribute('aria-sort')) {\n this.createHeadingButton($heading)\n }\n }\n }\n\n /**\n * @param {HTMLTableCellElement} $heading\n */\n createHeadingButton($heading) {\n const index = this.$headings.indexOf($heading)\n const $button = document.createElement('button')\n\n $button.setAttribute('type', 'button')\n $button.setAttribute('data-index', `${index}`)\n $button.textContent = $heading.textContent\n\n $heading.textContent = ''\n $heading.appendChild($button)\n }\n\n createStatusBox() {\n this.$status = document.createElement('div')\n\n this.$status.setAttribute('aria-atomic', 'true')\n this.$status.setAttribute('aria-live', 'polite')\n this.$status.setAttribute('class', 'govuk-visually-hidden')\n this.$status.setAttribute('role', 'status')\n\n this.$root.insertAdjacentElement('afterend', this.$status)\n }\n\n initialiseSortedColumn() {\n const $rows = this.getTableRowsArray()\n\n const $heading = this.$root.querySelector(\n 'th[aria-sort=\"ascending\"], th[aria-sort=\"descending\"]'\n )\n const $sortButton = $heading?.querySelector('button')\n const sortDirection = $heading?.getAttribute('aria-sort')\n\n const columnNumber = Number.parseInt(\n $sortButton?.getAttribute('data-index') ?? '0',\n 10\n )\n\n if (\n !$heading ||\n !$sortButton ||\n !(sortDirection === 'ascending' || sortDirection === 'descending')\n ) {\n return\n }\n\n const $sortedRows = this.sort($rows, columnNumber, sortDirection)\n this.addRows($sortedRows)\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onSortButtonClick(event) {\n const $target = /** @type {HTMLElement} */ (event.target)\n const $button = $target.closest('button')\n\n if (\n !$button ||\n !($button instanceof HTMLButtonElement) ||\n !$button.parentElement\n ) {\n return\n }\n\n const $heading = $button.parentElement\n const sortDirection = $heading.getAttribute('aria-sort')\n\n const columnNumber = Number.parseInt(\n $button?.getAttribute('data-index') ?? '0',\n 10\n )\n\n const newSortDirection =\n sortDirection === 'none' || sortDirection === 'descending'\n ? 'ascending'\n : 'descending'\n\n const $rows = this.getTableRowsArray()\n const $sortedRows = this.sort($rows, columnNumber, newSortDirection)\n\n this.addRows($sortedRows)\n this.removeButtonStates()\n this.updateButtonState($button, newSortDirection)\n this.updateDirectionIndicators()\n }\n\n updateCaption() {\n if (!this.$caption) {\n return\n }\n\n let assistiveText = this.$caption.querySelector('.govuk-visually-hidden')\n if (assistiveText) {\n return\n }\n\n assistiveText = document.createElement('span')\n assistiveText.classList.add('govuk-visually-hidden')\n assistiveText.textContent = ' (column headers with buttons are sortable).'\n\n this.$caption.appendChild(assistiveText)\n }\n\n /**\n * @param {HTMLButtonElement} $button\n * @param {string} direction\n */\n updateButtonState($button, direction) {\n if (!(direction === 'ascending' || direction === 'descending')) {\n return\n }\n\n $button.parentElement.setAttribute('aria-sort', direction)\n let message = this.config.statusMessage\n message = message.replace(/%heading%/, $button.textContent)\n message = message.replace(/%direction%/, this.config[`${direction}Text`])\n this.$status.textContent = message\n }\n\n updateDirectionIndicators() {\n for (const $heading of this.$headings) {\n const $button = /** @type {HTMLButtonElement} */ (\n $heading.querySelector('button')\n )\n if ($heading.hasAttribute('aria-sort') && $button) {\n const direction = $heading.getAttribute('aria-sort')\n $button.querySelector('svg')?.remove()\n\n switch (direction) {\n case 'ascending':\n $button.insertAdjacentHTML('beforeend', this.$upArrow)\n break\n case 'descending':\n $button.insertAdjacentHTML('beforeend', this.$downArrow)\n break\n default:\n $button.insertAdjacentHTML('beforeend', this.$upDownArrow)\n }\n }\n }\n }\n\n removeButtonStates() {\n for (const $heading of this.$headings) {\n $heading.setAttribute('aria-sort', 'none')\n }\n }\n\n /**\n * @param {HTMLTableRowElement[]} $rows\n */\n addRows($rows) {\n for (const $row of $rows) {\n this.$body.append($row)\n }\n }\n\n getTableRowsArray() {\n return Array.from(this.$body.querySelectorAll('tr'))\n }\n\n /**\n * @param {HTMLTableRowElement[]} $rows\n * @param {number} columnNumber\n * @param {string} sortDirection\n */\n sort($rows, columnNumber, sortDirection) {\n return $rows.sort(($rowA, $rowB) => {\n const $tdA = $rowA.querySelectorAll('td, th')[columnNumber]\n const $tdB = $rowB.querySelectorAll('td, th')[columnNumber]\n\n if (\n !$tdA ||\n !$tdB ||\n !($tdA instanceof HTMLElement) ||\n !($tdB instanceof HTMLElement)\n ) {\n return 0\n }\n\n const valueA =\n sortDirection === 'ascending'\n ? this.getCellValue($tdA)\n : this.getCellValue($tdB)\n\n const valueB =\n sortDirection === 'ascending'\n ? this.getCellValue($tdB)\n : this.getCellValue($tdA)\n\n return !(typeof valueA === 'number' && typeof valueB === 'number')\n ? valueA.toString().localeCompare(valueB.toString())\n : valueA - valueB\n })\n }\n\n /**\n * @param {HTMLElement} $cell\n */\n getCellValue($cell) {\n const val = $cell.getAttribute('data-sort-value') || $cell.innerHTML\n const valAsNumber = Number(val)\n\n return Number.isFinite(valAsNumber)\n ? valAsNumber // Exclude invalid numbers, infinity etc\n : val\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-sortable-table'\n\n /**\n * Sortable table config\n *\n * @type {SortableTableConfig}\n */\n static defaults = Object.freeze({\n statusMessage: 'Sort by %heading% (%direction%)',\n ascendingText: 'ascending',\n descendingText: 'descending'\n })\n\n /**\n * Sortable table config schema\n *\n * @satisfies {Schema<SortableTableConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n statusMessage: { type: 'string' },\n ascendingText: { type: 'string' },\n descendingText: { type: 'string' }\n }\n })\n )\n}\n\n/**\n * Sortable table config\n *\n * @typedef {object} SortableTableConfig\n * @property {string} [statusMessage] - Status message\n * @property {string} [ascendingText] - Ascending text\n * @property {string} [descendingText] - Descending text\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n"],"names":["SortableTable","ConfigurableComponent","constructor","$root","config","$head","querySelector","$body","$caption","$upArrow","$downArrow","$upDownArrow","$headings","Array","from","querySelectorAll","createHeadingButtons","updateCaption","updateDirectionIndicators","createStatusBox","initialiseSortedColumn","addEventListener","onSortButtonClick","bind","$heading","hasAttribute","createHeadingButton","index","indexOf","$button","document","createElement","setAttribute","textContent","appendChild","$status","insertAdjacentElement","_$sortButton$getAttri","$rows","getTableRowsArray","$sortButton","sortDirection","getAttribute","columnNumber","Number","parseInt","$sortedRows","sort","addRows","event","_$button$getAttribute","$target","target","closest","HTMLButtonElement","parentElement","newSortDirection","removeButtonStates","updateButtonState","assistiveText","classList","add","direction","message","statusMessage","replace","_$button$querySelecto","remove","insertAdjacentHTML","$row","append","$rowA","$rowB","$tdA","$tdB","HTMLElement","valueA","getCellValue","valueB","toString","localeCompare","$cell","val","innerHTML","valAsNumber","isFinite","moduleName","defaults","Object","freeze","ascendingText","descendingText","schema","properties","type"],"mappings":"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"}
1
+ {"version":3,"file":"sortable-table.mjs","sources":["../../../../src/moj/components/sortable-table/sortable-table.mjs"],"sourcesContent":["import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<SortableTableConfig>}\n */\nexport class SortableTable extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for sortable table\n * @param {SortableTableConfig} [config] - Sortable table config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $head = $root?.querySelector('thead')\n const $body = $root?.querySelector('tbody')\n\n if (!$head || !$body) {\n return this\n }\n\n this.$head = $head\n this.$body = $body\n this.$caption = this.$root.querySelector('caption')\n\n this.$upArrow = `<svg width=\"22\" height=\"22\" focusable=\"false\" aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M6.5625 15.5L11 6.63125L15.4375 15.5H6.5625Z\" fill=\"currentColor\"/>\n</svg>`\n this.$downArrow = `<svg width=\"22\" height=\"22\" focusable=\"false\" aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M15.4375 7L11 15.8687L6.5625 7L15.4375 7Z\" fill=\"currentColor\"/>\n</svg>`\n this.$upDownArrow = `<svg width=\"22\" height=\"22\" focusable=\"false\" aria-hidden=\"true\" role=\"img\" viewBox=\"0 0 22 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n<path d=\"M8.1875 9.5L10.9609 3.95703L13.7344 9.5H8.1875Z\" fill=\"currentColor\"/>\n<path d=\"M13.7344 12.0781L10.9609 17.6211L8.1875 12.0781H13.7344Z\" fill=\"currentColor\"/>\n</svg>`\n\n this.$headings = this.$head\n ? Array.from(this.$head.querySelectorAll('th'))\n : []\n\n this.createHeadingButtons()\n this.updateCaption()\n this.updateDirectionIndicators()\n this.createStatusBox()\n this.initialiseSortedColumn()\n\n this.$head.addEventListener('click', this.onSortButtonClick.bind(this))\n }\n\n createHeadingButtons() {\n for (const $heading of this.$headings) {\n if ($heading.hasAttribute('aria-sort')) {\n this.createHeadingButton($heading)\n }\n }\n }\n\n /**\n * @param {HTMLTableCellElement} $heading\n */\n createHeadingButton($heading) {\n const index = this.$headings.indexOf($heading)\n const $button = document.createElement('button')\n\n $button.setAttribute('type', 'button')\n $button.setAttribute('data-index', `${index}`)\n $button.textContent = $heading.textContent\n\n $heading.textContent = ''\n $heading.appendChild($button)\n }\n\n createStatusBox() {\n this.$status = document.createElement('div')\n\n this.$status.setAttribute('aria-atomic', 'true')\n this.$status.setAttribute('aria-live', 'polite')\n this.$status.setAttribute('class', 'govuk-visually-hidden')\n this.$status.setAttribute('role', 'status')\n\n this.$root.insertAdjacentElement('afterend', this.$status)\n }\n\n initialiseSortedColumn() {\n const $rows = this.getTableRowsArray()\n\n const $heading = this.$root.querySelector(\n 'th[aria-sort=\"ascending\"], th[aria-sort=\"descending\"]'\n )\n const $sortButton = $heading?.querySelector('button')\n const sortDirection = $heading?.getAttribute('aria-sort')\n\n const columnNumber = Number.parseInt(\n $sortButton?.getAttribute('data-index') ?? '0',\n 10\n )\n\n if (\n !$heading ||\n !$sortButton ||\n !(sortDirection === 'ascending' || sortDirection === 'descending')\n ) {\n return\n }\n\n const $sortedRows = this.sort($rows, columnNumber, sortDirection)\n this.addRows($sortedRows)\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onSortButtonClick(event) {\n const $target = /** @type {HTMLElement} */ (event.target)\n const $button = $target.closest('button')\n\n if (\n !$button ||\n !($button instanceof HTMLButtonElement) ||\n !$button.parentElement\n ) {\n return\n }\n\n const $heading = $button.parentElement\n const sortDirection = $heading.getAttribute('aria-sort')\n\n const columnNumber = Number.parseInt(\n $button?.getAttribute('data-index') ?? '0',\n 10\n )\n\n const newSortDirection =\n sortDirection === 'none' || sortDirection === 'descending'\n ? 'ascending'\n : 'descending'\n\n const $rows = this.getTableRowsArray()\n const $sortedRows = this.sort($rows, columnNumber, newSortDirection)\n\n this.addRows($sortedRows)\n this.removeButtonStates()\n this.updateButtonState($button, newSortDirection)\n this.updateDirectionIndicators()\n }\n\n updateCaption() {\n if (!this.$caption) {\n return\n }\n\n let assistiveText = this.$caption.querySelector('.govuk-visually-hidden')\n if (assistiveText) {\n return\n }\n\n assistiveText = document.createElement('span')\n assistiveText.classList.add('govuk-visually-hidden')\n assistiveText.textContent = ' (column headers with buttons are sortable).'\n\n this.$caption.appendChild(assistiveText)\n }\n\n /**\n * @param {HTMLButtonElement} $button\n * @param {string} direction\n */\n updateButtonState($button, direction) {\n if (!(direction === 'ascending' || direction === 'descending')) {\n return\n }\n\n $button.parentElement.setAttribute('aria-sort', direction)\n let message = this.config.statusMessage\n message = message.replace(/%heading%/, $button.textContent)\n message = message.replace(/%direction%/, this.config[`${direction}Text`])\n this.$status.textContent = message\n }\n\n updateDirectionIndicators() {\n for (const $heading of this.$headings) {\n const $button = /** @type {HTMLButtonElement} */ (\n $heading.querySelector('button')\n )\n if ($heading.hasAttribute('aria-sort') && $button) {\n const direction = $heading.getAttribute('aria-sort')\n $button.querySelector('svg')?.remove()\n\n switch (direction) {\n case 'ascending':\n $button.insertAdjacentHTML('beforeend', this.$upArrow)\n break\n case 'descending':\n $button.insertAdjacentHTML('beforeend', this.$downArrow)\n break\n default:\n $button.insertAdjacentHTML('beforeend', this.$upDownArrow)\n }\n }\n }\n }\n\n removeButtonStates() {\n for (const $heading of this.$headings) {\n $heading.setAttribute('aria-sort', 'none')\n }\n }\n\n /**\n * @param {HTMLTableRowElement[]} $rows\n */\n addRows($rows) {\n for (const $row of $rows) {\n this.$body.append($row)\n }\n }\n\n getTableRowsArray() {\n return Array.from(this.$body.querySelectorAll('tr'))\n }\n\n /**\n * @param {HTMLTableRowElement[]} $rows\n * @param {number} columnNumber\n * @param {string} sortDirection\n */\n sort($rows, columnNumber, sortDirection) {\n return $rows.sort(($rowA, $rowB) => {\n const $tdA = $rowA.querySelectorAll('td, th')[columnNumber]\n const $tdB = $rowB.querySelectorAll('td, th')[columnNumber]\n\n if (\n !$tdA ||\n !$tdB ||\n !($tdA instanceof HTMLElement) ||\n !($tdB instanceof HTMLElement)\n ) {\n return 0\n }\n\n const valueA =\n sortDirection === 'ascending'\n ? this.getCellValue($tdA)\n : this.getCellValue($tdB)\n\n const valueB =\n sortDirection === 'ascending'\n ? this.getCellValue($tdB)\n : this.getCellValue($tdA)\n\n return !(typeof valueA === 'number' && typeof valueB === 'number')\n ? valueA.toString().localeCompare(valueB.toString())\n : valueA - valueB\n })\n }\n\n /**\n * @param {HTMLElement} $cell\n */\n getCellValue($cell) {\n const val = $cell.getAttribute('data-sort-value') || $cell.innerHTML\n const valAsNumber = Number(val)\n\n return Number.isFinite(valAsNumber)\n ? valAsNumber // Exclude invalid numbers, infinity etc\n : val\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-sortable-table'\n\n /**\n * Sortable table config\n *\n * @type {SortableTableConfig}\n */\n static defaults = Object.freeze({\n statusMessage: 'Sort by %heading% (%direction%)',\n ascendingText: 'ascending',\n descendingText: 'descending'\n })\n\n /**\n * Sortable table config schema\n *\n * @satisfies {Schema<SortableTableConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n statusMessage: { type: 'string' },\n ascendingText: { type: 'string' },\n descendingText: { type: 'string' }\n }\n })\n )\n}\n\n/**\n * Sortable table config\n *\n * @typedef {object} SortableTableConfig\n * @property {string} [statusMessage] - Status message\n * @property {string} [ascendingText] - Ascending text\n * @property {string} [descendingText] - Descending text\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n"],"names":["SortableTable","ConfigurableComponent","constructor","$root","config","$head","querySelector","$body","$caption","$upArrow","$downArrow","$upDownArrow","$headings","Array","from","querySelectorAll","createHeadingButtons","updateCaption","updateDirectionIndicators","createStatusBox","initialiseSortedColumn","addEventListener","onSortButtonClick","bind","$heading","hasAttribute","createHeadingButton","index","indexOf","$button","document","createElement","setAttribute","textContent","appendChild","$status","insertAdjacentElement","_$sortButton$getAttri","$rows","getTableRowsArray","$sortButton","sortDirection","getAttribute","columnNumber","Number","parseInt","$sortedRows","sort","addRows","event","_$button$getAttribute","$target","target","closest","HTMLButtonElement","parentElement","newSortDirection","removeButtonStates","updateButtonState","assistiveText","classList","add","direction","message","statusMessage","replace","_$button$querySelecto","remove","insertAdjacentHTML","$row","append","$rowA","$rowB","$tdA","$tdB","HTMLElement","valueA","getCellValue","valueB","toString","localeCompare","$cell","val","innerHTML","valAsNumber","isFinite","moduleName","defaults","Object","freeze","ascendingText","descendingText","schema","properties","type"],"mappings":";;AAEA;AACA;AACA;AACO,MAAMA,aAAa,SAASC,qBAAqB,CAAC;AACvD;AACF;AACA;AACA;AACEC,EAAAA,WAAWA,CAACC,KAAK,EAAEC,MAAM,GAAG,EAAE,EAAE;AAC9B,IAAA,KAAK,CAACD,KAAK,EAAEC,MAAM,CAAC;IAEpB,MAAMC,KAAK,GAAGF,KAAK,IAAA,IAAA,GAAA,MAAA,GAALA,KAAK,CAAEG,aAAa,CAAC,OAAO,CAAC;IAC3C,MAAMC,KAAK,GAAGJ,KAAK,IAAA,IAAA,GAAA,MAAA,GAALA,KAAK,CAAEG,aAAa,CAAC,OAAO,CAAC;AAE3C,IAAA,IAAI,CAACD,KAAK,IAAI,CAACE,KAAK,EAAE;AACpB,MAAA,OAAO,IAAI;AACb,IAAA;IAEA,IAAI,CAACF,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACE,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,QAAQ,GAAG,IAAI,CAACL,KAAK,CAACG,aAAa,CAAC,SAAS,CAAC;IAEnD,IAAI,CAACG,QAAQ,GAAG,CAAA;AACpB;AACA,MAAA,CAAO;IACH,IAAI,CAACC,UAAU,GAAG,CAAA;AACtB;AACA,MAAA,CAAO;IACH,IAAI,CAACC,YAAY,GAAG,CAAA;AACxB;AACA;AACA,MAAA,CAAO;IAEH,IAAI,CAACC,SAAS,GAAG,IAAI,CAACP,KAAK,GACvBQ,KAAK,CAACC,IAAI,CAAC,IAAI,CAACT,KAAK,CAACU,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAC7C,EAAE;IAEN,IAAI,CAACC,oBAAoB,EAAE;IAC3B,IAAI,CAACC,aAAa,EAAE;IACpB,IAAI,CAACC,yBAAyB,EAAE;IAChC,IAAI,CAACC,eAAe,EAAE;IACtB,IAAI,CAACC,sBAAsB,EAAE;AAE7B,IAAA,IAAI,CAACf,KAAK,CAACgB,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAACC,iBAAiB,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzE,EAAA;AAEAP,EAAAA,oBAAoBA,GAAG;AACrB,IAAA,KAAK,MAAMQ,QAAQ,IAAI,IAAI,CAACZ,SAAS,EAAE;AACrC,MAAA,IAAIY,QAAQ,CAACC,YAAY,CAAC,WAAW,CAAC,EAAE;AACtC,QAAA,IAAI,CAACC,mBAAmB,CAACF,QAAQ,CAAC;AACpC,MAAA;AACF,IAAA;AACF,EAAA;;AAEA;AACF;AACA;EACEE,mBAAmBA,CAACF,QAAQ,EAAE;IAC5B,MAAMG,KAAK,GAAG,IAAI,CAACf,SAAS,CAACgB,OAAO,CAACJ,QAAQ,CAAC;AAC9C,IAAA,MAAMK,OAAO,GAAGC,QAAQ,CAACC,aAAa,CAAC,QAAQ,CAAC;AAEhDF,IAAAA,OAAO,CAACG,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;IACtCH,OAAO,CAACG,YAAY,CAAC,YAAY,EAAE,CAAA,EAAGL,KAAK,EAAE,CAAC;AAC9CE,IAAAA,OAAO,CAACI,WAAW,GAAGT,QAAQ,CAACS,WAAW;IAE1CT,QAAQ,CAACS,WAAW,GAAG,EAAE;AACzBT,IAAAA,QAAQ,CAACU,WAAW,CAACL,OAAO,CAAC;AAC/B,EAAA;AAEAV,EAAAA,eAAeA,GAAG;IAChB,IAAI,CAACgB,OAAO,GAAGL,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;IAE5C,IAAI,CAACI,OAAO,CAACH,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;IAChD,IAAI,CAACG,OAAO,CAACH,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC;IAChD,IAAI,CAACG,OAAO,CAACH,YAAY,CAAC,OAAO,EAAE,uBAAuB,CAAC;IAC3D,IAAI,CAACG,OAAO,CAACH,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;IAE3C,IAAI,CAAC7B,KAAK,CAACiC,qBAAqB,CAAC,UAAU,EAAE,IAAI,CAACD,OAAO,CAAC;AAC5D,EAAA;AAEAf,EAAAA,sBAAsBA,GAAG;AAAA,IAAA,IAAAiB,qBAAA;AACvB,IAAA,MAAMC,KAAK,GAAG,IAAI,CAACC,iBAAiB,EAAE;IAEtC,MAAMf,QAAQ,GAAG,IAAI,CAACrB,KAAK,CAACG,aAAa,CACvC,uDACF,CAAC;IACD,MAAMkC,WAAW,GAAGhB,QAAQ,IAAA,IAAA,GAAA,MAAA,GAARA,QAAQ,CAAElB,aAAa,CAAC,QAAQ,CAAC;IACrD,MAAMmC,aAAa,GAAGjB,QAAQ,IAAA,IAAA,GAAA,MAAA,GAARA,QAAQ,CAAEkB,YAAY,CAAC,WAAW,CAAC;IAEzD,MAAMC,YAAY,GAAGC,MAAM,CAACC,QAAQ,CAAA,CAAAR,qBAAA,GAClCG,WAAW,IAAA,IAAA,GAAA,MAAA,GAAXA,WAAW,CAAEE,YAAY,CAAC,YAAY,CAAC,KAAA,IAAA,GAAAL,qBAAA,GAAI,GAAG,EAC9C,EACF,CAAC;AAED,IAAA,IACE,CAACb,QAAQ,IACT,CAACgB,WAAW,IACZ,EAAEC,aAAa,KAAK,WAAW,IAAIA,aAAa,KAAK,YAAY,CAAC,EAClE;AACA,MAAA;AACF,IAAA;IAEA,MAAMK,WAAW,GAAG,IAAI,CAACC,IAAI,CAACT,KAAK,EAAEK,YAAY,EAAEF,aAAa,CAAC;AACjE,IAAA,IAAI,CAACO,OAAO,CAACF,WAAW,CAAC;AAC3B,EAAA;;AAEA;AACF;AACA;EACExB,iBAAiBA,CAAC2B,KAAK,EAAE;AAAA,IAAA,IAAAC,qBAAA;AACvB,IAAA,MAAMC,OAAO,6BAA+BF,KAAK,CAACG,MAAO;AACzD,IAAA,MAAMvB,OAAO,GAAGsB,OAAO,CAACE,OAAO,CAAC,QAAQ,CAAC;AAEzC,IAAA,IACE,CAACxB,OAAO,IACR,EAAEA,OAAO,YAAYyB,iBAAiB,CAAC,IACvC,CAACzB,OAAO,CAAC0B,aAAa,EACtB;AACA,MAAA;AACF,IAAA;AAEA,IAAA,MAAM/B,QAAQ,GAAGK,OAAO,CAAC0B,aAAa;AACtC,IAAA,MAAMd,aAAa,GAAGjB,QAAQ,CAACkB,YAAY,CAAC,WAAW,CAAC;IAExD,MAAMC,YAAY,GAAGC,MAAM,CAACC,QAAQ,CAAA,CAAAK,qBAAA,GAClCrB,OAAO,IAAA,IAAA,GAAA,MAAA,GAAPA,OAAO,CAAEa,YAAY,CAAC,YAAY,CAAC,KAAA,IAAA,GAAAQ,qBAAA,GAAI,GAAG,EAC1C,EACF,CAAC;AAED,IAAA,MAAMM,gBAAgB,GACpBf,aAAa,KAAK,MAAM,IAAIA,aAAa,KAAK,YAAY,GACtD,WAAW,GACX,YAAY;AAElB,IAAA,MAAMH,KAAK,GAAG,IAAI,CAACC,iBAAiB,EAAE;IACtC,MAAMO,WAAW,GAAG,IAAI,CAACC,IAAI,CAACT,KAAK,EAAEK,YAAY,EAAEa,gBAAgB,CAAC;AAEpE,IAAA,IAAI,CAACR,OAAO,CAACF,WAAW,CAAC;IACzB,IAAI,CAACW,kBAAkB,EAAE;AACzB,IAAA,IAAI,CAACC,iBAAiB,CAAC7B,OAAO,EAAE2B,gBAAgB,CAAC;IACjD,IAAI,CAACtC,yBAAyB,EAAE;AAClC,EAAA;AAEAD,EAAAA,aAAaA,GAAG;AACd,IAAA,IAAI,CAAC,IAAI,CAACT,QAAQ,EAAE;AAClB,MAAA;AACF,IAAA;IAEA,IAAImD,aAAa,GAAG,IAAI,CAACnD,QAAQ,CAACF,aAAa,CAAC,wBAAwB,CAAC;AACzE,IAAA,IAAIqD,aAAa,EAAE;AACjB,MAAA;AACF,IAAA;AAEAA,IAAAA,aAAa,GAAG7B,QAAQ,CAACC,aAAa,CAAC,MAAM,CAAC;AAC9C4B,IAAAA,aAAa,CAACC,SAAS,CAACC,GAAG,CAAC,uBAAuB,CAAC;IACpDF,aAAa,CAAC1B,WAAW,GAAG,8CAA8C;AAE1E,IAAA,IAAI,CAACzB,QAAQ,CAAC0B,WAAW,CAACyB,aAAa,CAAC;AAC1C,EAAA;;AAEA;AACF;AACA;AACA;AACED,EAAAA,iBAAiBA,CAAC7B,OAAO,EAAEiC,SAAS,EAAE;IACpC,IAAI,EAAEA,SAAS,KAAK,WAAW,IAAIA,SAAS,KAAK,YAAY,CAAC,EAAE;AAC9D,MAAA;AACF,IAAA;IAEAjC,OAAO,CAAC0B,aAAa,CAACvB,YAAY,CAAC,WAAW,EAAE8B,SAAS,CAAC;AAC1D,IAAA,IAAIC,OAAO,GAAG,IAAI,CAAC3D,MAAM,CAAC4D,aAAa;IACvCD,OAAO,GAAGA,OAAO,CAACE,OAAO,CAAC,WAAW,EAAEpC,OAAO,CAACI,WAAW,CAAC;AAC3D8B,IAAAA,OAAO,GAAGA,OAAO,CAACE,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC7D,MAAM,CAAC,CAAA,EAAG0D,SAAS,CAAA,IAAA,CAAM,CAAC,CAAC;AACzE,IAAA,IAAI,CAAC3B,OAAO,CAACF,WAAW,GAAG8B,OAAO;AACpC,EAAA;AAEA7C,EAAAA,yBAAyBA,GAAG;AAC1B,IAAA,KAAK,MAAMM,QAAQ,IAAI,IAAI,CAACZ,SAAS,EAAE;AACrC,MAAA,MAAMiB,OAAO;AACXL,MAAAA,QAAQ,CAAClB,aAAa,CAAC,QAAQ,CAChC;MACD,IAAIkB,QAAQ,CAACC,YAAY,CAAC,WAAW,CAAC,IAAII,OAAO,EAAE;AAAA,QAAA,IAAAqC,qBAAA;AACjD,QAAA,MAAMJ,SAAS,GAAGtC,QAAQ,CAACkB,YAAY,CAAC,WAAW,CAAC;AACpD,QAAA,CAAAwB,qBAAA,GAAArC,OAAO,CAACvB,aAAa,CAAC,KAAK,CAAC,KAAA,IAAA,IAA5B4D,qBAAA,CAA8BC,MAAM,EAAE;AAEtC,QAAA,QAAQL,SAAS;AACf,UAAA,KAAK,WAAW;YACdjC,OAAO,CAACuC,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC3D,QAAQ,CAAC;AACtD,YAAA;AACF,UAAA,KAAK,YAAY;YACfoB,OAAO,CAACuC,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAAC1D,UAAU,CAAC;AACxD,YAAA;AACF,UAAA;YACEmB,OAAO,CAACuC,kBAAkB,CAAC,WAAW,EAAE,IAAI,CAACzD,YAAY,CAAC;AAC9D;AACF,MAAA;AACF,IAAA;AACF,EAAA;AAEA8C,EAAAA,kBAAkBA,GAAG;AACnB,IAAA,KAAK,MAAMjC,QAAQ,IAAI,IAAI,CAACZ,SAAS,EAAE;AACrCY,MAAAA,QAAQ,CAACQ,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC;AAC5C,IAAA;AACF,EAAA;;AAEA;AACF;AACA;EACEgB,OAAOA,CAACV,KAAK,EAAE;AACb,IAAA,KAAK,MAAM+B,IAAI,IAAI/B,KAAK,EAAE;AACxB,MAAA,IAAI,CAAC/B,KAAK,CAAC+D,MAAM,CAACD,IAAI,CAAC;AACzB,IAAA;AACF,EAAA;AAEA9B,EAAAA,iBAAiBA,GAAG;AAClB,IAAA,OAAO1B,KAAK,CAACC,IAAI,CAAC,IAAI,CAACP,KAAK,CAACQ,gBAAgB,CAAC,IAAI,CAAC,CAAC;AACtD,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACEgC,EAAAA,IAAIA,CAACT,KAAK,EAAEK,YAAY,EAAEF,aAAa,EAAE;IACvC,OAAOH,KAAK,CAACS,IAAI,CAAC,CAACwB,KAAK,EAAEC,KAAK,KAAK;MAClC,MAAMC,IAAI,GAAGF,KAAK,CAACxD,gBAAgB,CAAC,QAAQ,CAAC,CAAC4B,YAAY,CAAC;MAC3D,MAAM+B,IAAI,GAAGF,KAAK,CAACzD,gBAAgB,CAAC,QAAQ,CAAC,CAAC4B,YAAY,CAAC;AAE3D,MAAA,IACE,CAAC8B,IAAI,IACL,CAACC,IAAI,IACL,EAAED,IAAI,YAAYE,WAAW,CAAC,IAC9B,EAAED,IAAI,YAAYC,WAAW,CAAC,EAC9B;AACA,QAAA,OAAO,CAAC;AACV,MAAA;AAEA,MAAA,MAAMC,MAAM,GACVnC,aAAa,KAAK,WAAW,GACzB,IAAI,CAACoC,YAAY,CAACJ,IAAI,CAAC,GACvB,IAAI,CAACI,YAAY,CAACH,IAAI,CAAC;AAE7B,MAAA,MAAMI,MAAM,GACVrC,aAAa,KAAK,WAAW,GACzB,IAAI,CAACoC,YAAY,CAACH,IAAI,CAAC,GACvB,IAAI,CAACG,YAAY,CAACJ,IAAI,CAAC;AAE7B,MAAA,OAAO,EAAE,OAAOG,MAAM,KAAK,QAAQ,IAAI,OAAOE,MAAM,KAAK,QAAQ,CAAC,GAC9DF,MAAM,CAACG,QAAQ,EAAE,CAACC,aAAa,CAACF,MAAM,CAACC,QAAQ,EAAE,CAAC,GAClDH,MAAM,GAAGE,MAAM;AACrB,IAAA,CAAC,CAAC;AACJ,EAAA;;AAEA;AACF;AACA;EACED,YAAYA,CAACI,KAAK,EAAE;IAClB,MAAMC,GAAG,GAAGD,KAAK,CAACvC,YAAY,CAAC,iBAAiB,CAAC,IAAIuC,KAAK,CAACE,SAAS;AACpE,IAAA,MAAMC,WAAW,GAAGxC,MAAM,CAACsC,GAAG,CAAC;IAE/B,OAAOtC,MAAM,CAACyC,QAAQ,CAACD,WAAW,CAAC,GAC/BA,WAAW;AAAC,MACZF,GAAG;AACT,EAAA;;AAEA;AACF;AACA;AA4BA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AAjTalF,aAAa,CAyQjBsF,UAAU,GAAG,oBAAoB;AAExC;AACF;AACA;AACA;AACA;AA/QatF,aAAa,CAgRjBuF,QAAQ,GAAGC,MAAM,CAACC,MAAM,CAAC;AAC9BzB,EAAAA,aAAa,EAAE,iCAAiC;AAChD0B,EAAAA,aAAa,EAAE,WAAW;AAC1BC,EAAAA,cAAc,EAAE;AAClB,CAAC,CAAC;AAEF;AACF;AACA;AACA;AACA;AA1Ra3F,aAAa,CA2RjB4F,MAAM,GAAGJ,MAAM,CAACC,MAAM,qBACL;AACpBI,EAAAA,UAAU,EAAE;AACV7B,IAAAA,aAAa,EAAE;AAAE8B,MAAAA,IAAI,EAAE;KAAU;AACjCJ,IAAAA,aAAa,EAAE;AAAEI,MAAAA,IAAI,EAAE;KAAU;AACjCH,IAAAA,cAAc,EAAE;AAAEG,MAAAA,IAAI,EAAE;AAAS;AACnC;AACF,CACF,CAAC;;;;"}
@@ -4,7 +4,7 @@
4
4
 
5
5
  ### Installation
6
6
 
7
- You will need to install the MoJ Frontend Nunjucks filters to use the `mojTimeline()` Nunjucks macro:
7
+ You will need to install the MOJ Frontend Nunjucks filters to use the `mojTimeline()` Nunjucks macro:
8
8
 
9
9
  1. Import the filters
10
10
 
@@ -1,7 +1,7 @@
1
1
  :root {
2
2
  // This variable is automatically overwritten during builds and releases.
3
3
  // It doesn't need to be updated manually.
4
- --moj-frontend-version: "5.2.1";
4
+ --moj-frontend-version: "7.0.0";
5
5
  }
6
6
 
7
7
  /*# sourceMappingURL=_moj-frontend-properties.scss.map */
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.bundle.js","sources":["../../src/moj/helpers.mjs"],"sourcesContent":["/**\n * @param {Element} $element - Element to remove attribute value from\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function removeAttributeValue($element, attr, value) {\n let re, m\n if ($element.getAttribute(attr)) {\n if ($element.getAttribute(attr) === value) {\n $element.removeAttribute(attr)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n m = $element.getAttribute(attr).match(re)\n if (m && m.length === 3) {\n $element.setAttribute(\n attr,\n $element.getAttribute(attr).replace(re, m[1] && m[2] ? ' ' : '')\n )\n }\n }\n }\n}\n\n/**\n * @param {Element} $element - Element to add attribute value to\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function addAttributeValue($element, attr, value) {\n let re\n if (!$element.getAttribute(attr)) {\n $element.setAttribute(attr, value)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n if (!re.test($element.getAttribute(attr))) {\n $element.setAttribute(attr, `${$element.getAttribute(attr)} ${value}`)\n }\n }\n}\n\n/**\n * Find an elements next sibling\n *\n * Utility function to find an elements next sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getNextSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the next sibling element\n let $sibling = $element.nextElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.nextElementSibling\n }\n}\n\n/**\n * Find an elements preceding sibling\n *\n * Utility function to find an elements previous sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getPreviousSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the previous sibling element\n let $sibling = $element.previousElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.previousElementSibling\n }\n}\n\n/**\n * @param {Element | null} $element\n * @param {string} [selector]\n */\nexport function findNearestMatchingElement($element, selector) {\n // If no element or selector is provided, return\n if (!$element || !($element instanceof HTMLElement) || !selector) {\n return\n }\n\n // Start with the current element\n let $currentElement = $element\n\n while ($currentElement) {\n // First check the current element\n if ($currentElement.matches(selector)) {\n return $currentElement\n }\n\n // Check all previous siblings\n let $sibling = $currentElement.previousElementSibling\n while ($sibling) {\n // Check if the sibling itself is a heading\n if ($sibling.matches(selector)) {\n return $sibling\n }\n $sibling = $sibling.previousElementSibling\n }\n\n // If no match found in siblings, move up to parent\n $currentElement = $currentElement.parentElement\n }\n}\n"],"names":["removeAttributeValue","$element","attr","value","re","m","getAttribute","removeAttribute","RegExp","match","length","setAttribute","replace","addAttributeValue","test","getNextSibling","selector","HTMLElement","$sibling","nextElementSibling","matches","getPreviousSibling","previousElementSibling","findNearestMatchingElement","$currentElement","parentElement"],"mappings":"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"}
1
+ {"version":3,"file":"helpers.bundle.js","sources":["../../src/moj/helpers.mjs"],"sourcesContent":["/**\n * @param {Element} $element - Element to remove attribute value from\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function removeAttributeValue($element, attr, value) {\n let re, m\n if ($element.getAttribute(attr)) {\n if ($element.getAttribute(attr) === value) {\n $element.removeAttribute(attr)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n m = $element.getAttribute(attr).match(re)\n if (m && m.length === 3) {\n $element.setAttribute(\n attr,\n $element.getAttribute(attr).replace(re, m[1] && m[2] ? ' ' : '')\n )\n }\n }\n }\n}\n\n/**\n * @param {Element} $element - Element to add attribute value to\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function addAttributeValue($element, attr, value) {\n let re\n if (!$element.getAttribute(attr)) {\n $element.setAttribute(attr, value)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n if (!re.test($element.getAttribute(attr))) {\n $element.setAttribute(attr, `${$element.getAttribute(attr)} ${value}`)\n }\n }\n}\n\n/**\n * Find an elements next sibling\n *\n * Utility function to find an elements next sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getNextSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the next sibling element\n let $sibling = $element.nextElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.nextElementSibling\n }\n}\n\n/**\n * Find an elements preceding sibling\n *\n * Utility function to find an elements previous sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getPreviousSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the previous sibling element\n let $sibling = $element.previousElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.previousElementSibling\n }\n}\n\n/**\n * @param {Element | null} $element\n * @param {string} [selector]\n */\nexport function findNearestMatchingElement($element, selector) {\n // If no element or selector is provided, return\n if (!$element || !($element instanceof HTMLElement) || !selector) {\n return\n }\n\n // Start with the current element\n let $currentElement = $element\n\n while ($currentElement) {\n // First check the current element\n if ($currentElement.matches(selector)) {\n return $currentElement\n }\n\n // Check all previous siblings\n let $sibling = $currentElement.previousElementSibling\n while ($sibling) {\n // Check if the sibling itself is a heading\n if ($sibling.matches(selector)) {\n return $sibling\n }\n $sibling = $sibling.previousElementSibling\n }\n\n // If no match found in siblings, move up to parent\n $currentElement = $currentElement.parentElement\n }\n}\n"],"names":["removeAttributeValue","$element","attr","value","re","m","getAttribute","removeAttribute","RegExp","match","length","setAttribute","replace","addAttributeValue","test","getNextSibling","selector","HTMLElement","$sibling","nextElementSibling","matches","getPreviousSibling","previousElementSibling","findNearestMatchingElement","$currentElement","parentElement"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.bundle.mjs","sources":["../../src/moj/helpers.mjs"],"sourcesContent":["/**\n * @param {Element} $element - Element to remove attribute value from\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function removeAttributeValue($element, attr, value) {\n let re, m\n if ($element.getAttribute(attr)) {\n if ($element.getAttribute(attr) === value) {\n $element.removeAttribute(attr)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n m = $element.getAttribute(attr).match(re)\n if (m && m.length === 3) {\n $element.setAttribute(\n attr,\n $element.getAttribute(attr).replace(re, m[1] && m[2] ? ' ' : '')\n )\n }\n }\n }\n}\n\n/**\n * @param {Element} $element - Element to add attribute value to\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function addAttributeValue($element, attr, value) {\n let re\n if (!$element.getAttribute(attr)) {\n $element.setAttribute(attr, value)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n if (!re.test($element.getAttribute(attr))) {\n $element.setAttribute(attr, `${$element.getAttribute(attr)} ${value}`)\n }\n }\n}\n\n/**\n * Find an elements next sibling\n *\n * Utility function to find an elements next sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getNextSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the next sibling element\n let $sibling = $element.nextElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.nextElementSibling\n }\n}\n\n/**\n * Find an elements preceding sibling\n *\n * Utility function to find an elements previous sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getPreviousSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the previous sibling element\n let $sibling = $element.previousElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.previousElementSibling\n }\n}\n\n/**\n * @param {Element | null} $element\n * @param {string} [selector]\n */\nexport function findNearestMatchingElement($element, selector) {\n // If no element or selector is provided, return\n if (!$element || !($element instanceof HTMLElement) || !selector) {\n return\n }\n\n // Start with the current element\n let $currentElement = $element\n\n while ($currentElement) {\n // First check the current element\n if ($currentElement.matches(selector)) {\n return $currentElement\n }\n\n // Check all previous siblings\n let $sibling = $currentElement.previousElementSibling\n while ($sibling) {\n // Check if the sibling itself is a heading\n if ($sibling.matches(selector)) {\n return $sibling\n }\n $sibling = $sibling.previousElementSibling\n }\n\n // If no match found in siblings, move up to parent\n $currentElement = $currentElement.parentElement\n }\n}\n"],"names":["removeAttributeValue","$element","attr","value","re","m","getAttribute","removeAttribute","RegExp","match","length","setAttribute","replace","addAttributeValue","test","getNextSibling","selector","HTMLElement","$sibling","nextElementSibling","matches","getPreviousSibling","previousElementSibling","findNearestMatchingElement","$currentElement","parentElement"],"mappings":"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"}
1
+ {"version":3,"file":"helpers.bundle.mjs","sources":["../../src/moj/helpers.mjs"],"sourcesContent":["/**\n * @param {Element} $element - Element to remove attribute value from\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function removeAttributeValue($element, attr, value) {\n let re, m\n if ($element.getAttribute(attr)) {\n if ($element.getAttribute(attr) === value) {\n $element.removeAttribute(attr)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n m = $element.getAttribute(attr).match(re)\n if (m && m.length === 3) {\n $element.setAttribute(\n attr,\n $element.getAttribute(attr).replace(re, m[1] && m[2] ? ' ' : '')\n )\n }\n }\n }\n}\n\n/**\n * @param {Element} $element - Element to add attribute value to\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function addAttributeValue($element, attr, value) {\n let re\n if (!$element.getAttribute(attr)) {\n $element.setAttribute(attr, value)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n if (!re.test($element.getAttribute(attr))) {\n $element.setAttribute(attr, `${$element.getAttribute(attr)} ${value}`)\n }\n }\n}\n\n/**\n * Find an elements next sibling\n *\n * Utility function to find an elements next sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getNextSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the next sibling element\n let $sibling = $element.nextElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.nextElementSibling\n }\n}\n\n/**\n * Find an elements preceding sibling\n *\n * Utility function to find an elements previous sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getPreviousSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the previous sibling element\n let $sibling = $element.previousElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.previousElementSibling\n }\n}\n\n/**\n * @param {Element | null} $element\n * @param {string} [selector]\n */\nexport function findNearestMatchingElement($element, selector) {\n // If no element or selector is provided, return\n if (!$element || !($element instanceof HTMLElement) || !selector) {\n return\n }\n\n // Start with the current element\n let $currentElement = $element\n\n while ($currentElement) {\n // First check the current element\n if ($currentElement.matches(selector)) {\n return $currentElement\n }\n\n // Check all previous siblings\n let $sibling = $currentElement.previousElementSibling\n while ($sibling) {\n // Check if the sibling itself is a heading\n if ($sibling.matches(selector)) {\n return $sibling\n }\n $sibling = $sibling.previousElementSibling\n }\n\n // If no match found in siblings, move up to parent\n $currentElement = $currentElement.parentElement\n }\n}\n"],"names":["removeAttributeValue","$element","attr","value","re","m","getAttribute","removeAttribute","RegExp","match","length","setAttribute","replace","addAttributeValue","test","getNextSibling","selector","HTMLElement","$sibling","nextElementSibling","matches","getPreviousSibling","previousElementSibling","findNearestMatchingElement","$currentElement","parentElement"],"mappings":"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"}
package/moj/helpers.mjs CHANGED
@@ -66,7 +66,7 @@ function getPreviousSibling($element, selector) {
66
66
  */
67
67
  function findNearestMatchingElement($element, selector) {
68
68
  // If no element or selector is provided, return
69
- if (!$element || !($element instanceof HTMLElement) || false) {
69
+ if (!$element || !($element instanceof HTMLElement) || !selector) {
70
70
  return;
71
71
  }
72
72
 
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.mjs","sources":["../../src/moj/helpers.mjs"],"sourcesContent":["/**\n * @param {Element} $element - Element to remove attribute value from\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function removeAttributeValue($element, attr, value) {\n let re, m\n if ($element.getAttribute(attr)) {\n if ($element.getAttribute(attr) === value) {\n $element.removeAttribute(attr)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n m = $element.getAttribute(attr).match(re)\n if (m && m.length === 3) {\n $element.setAttribute(\n attr,\n $element.getAttribute(attr).replace(re, m[1] && m[2] ? ' ' : '')\n )\n }\n }\n }\n}\n\n/**\n * @param {Element} $element - Element to add attribute value to\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function addAttributeValue($element, attr, value) {\n let re\n if (!$element.getAttribute(attr)) {\n $element.setAttribute(attr, value)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n if (!re.test($element.getAttribute(attr))) {\n $element.setAttribute(attr, `${$element.getAttribute(attr)} ${value}`)\n }\n }\n}\n\n/**\n * Find an elements next sibling\n *\n * Utility function to find an elements next sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getNextSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the next sibling element\n let $sibling = $element.nextElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.nextElementSibling\n }\n}\n\n/**\n * Find an elements preceding sibling\n *\n * Utility function to find an elements previous sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getPreviousSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the previous sibling element\n let $sibling = $element.previousElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.previousElementSibling\n }\n}\n\n/**\n * @param {Element | null} $element\n * @param {string} [selector]\n */\nexport function findNearestMatchingElement($element, selector) {\n // If no element or selector is provided, return\n if (!$element || !($element instanceof HTMLElement) || !selector) {\n return\n }\n\n // Start with the current element\n let $currentElement = $element\n\n while ($currentElement) {\n // First check the current element\n if ($currentElement.matches(selector)) {\n return $currentElement\n }\n\n // Check all previous siblings\n let $sibling = $currentElement.previousElementSibling\n while ($sibling) {\n // Check if the sibling itself is a heading\n if ($sibling.matches(selector)) {\n return $sibling\n }\n $sibling = $sibling.previousElementSibling\n }\n\n // If no match found in siblings, move up to parent\n $currentElement = $currentElement.parentElement\n }\n}\n"],"names":["removeAttributeValue","$element","attr","value","re","m","getAttribute","removeAttribute","RegExp","match","length","setAttribute","replace","addAttributeValue","test","getPreviousSibling","selector","HTMLElement","$sibling","previousElementSibling","matches","findNearestMatchingElement","$currentElement","parentElement"],"mappings":"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"}
1
+ {"version":3,"file":"helpers.mjs","sources":["../../src/moj/helpers.mjs"],"sourcesContent":["/**\n * @param {Element} $element - Element to remove attribute value from\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function removeAttributeValue($element, attr, value) {\n let re, m\n if ($element.getAttribute(attr)) {\n if ($element.getAttribute(attr) === value) {\n $element.removeAttribute(attr)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n m = $element.getAttribute(attr).match(re)\n if (m && m.length === 3) {\n $element.setAttribute(\n attr,\n $element.getAttribute(attr).replace(re, m[1] && m[2] ? ' ' : '')\n )\n }\n }\n }\n}\n\n/**\n * @param {Element} $element - Element to add attribute value to\n * @param {string} attr - Attribute name\n * @param {string} value - Attribute value\n */\nexport function addAttributeValue($element, attr, value) {\n let re\n if (!$element.getAttribute(attr)) {\n $element.setAttribute(attr, value)\n } else {\n re = new RegExp(`(^|\\\\s)${value}(\\\\s|$)`)\n if (!re.test($element.getAttribute(attr))) {\n $element.setAttribute(attr, `${$element.getAttribute(attr)} ${value}`)\n }\n }\n}\n\n/**\n * Find an elements next sibling\n *\n * Utility function to find an elements next sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getNextSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the next sibling element\n let $sibling = $element.nextElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.nextElementSibling\n }\n}\n\n/**\n * Find an elements preceding sibling\n *\n * Utility function to find an elements previous sibling matching the provided\n * selector.\n *\n * @param {Element | null} $element - Element to find siblings for\n * @param {string} [selector] - selector for required sibling\n */\nexport function getPreviousSibling($element, selector) {\n if (!$element || !($element instanceof HTMLElement)) {\n return\n }\n\n // Get the previous sibling element\n let $sibling = $element.previousElementSibling\n\n // If there's no selector, return the first sibling\n if (!selector) return $sibling\n\n // If the sibling matches our selector, use it\n // If not, jump to the next sibling and continue the loop\n while ($sibling) {\n if ($sibling.matches(selector)) return $sibling\n $sibling = $sibling.previousElementSibling\n }\n}\n\n/**\n * @param {Element | null} $element\n * @param {string} [selector]\n */\nexport function findNearestMatchingElement($element, selector) {\n // If no element or selector is provided, return\n if (!$element || !($element instanceof HTMLElement) || !selector) {\n return\n }\n\n // Start with the current element\n let $currentElement = $element\n\n while ($currentElement) {\n // First check the current element\n if ($currentElement.matches(selector)) {\n return $currentElement\n }\n\n // Check all previous siblings\n let $sibling = $currentElement.previousElementSibling\n while ($sibling) {\n // Check if the sibling itself is a heading\n if ($sibling.matches(selector)) {\n return $sibling\n }\n $sibling = $sibling.previousElementSibling\n }\n\n // If no match found in siblings, move up to parent\n $currentElement = $currentElement.parentElement\n }\n}\n"],"names":["removeAttributeValue","$element","attr","value","re","m","getAttribute","removeAttribute","RegExp","match","length","setAttribute","replace","addAttributeValue","test","getPreviousSibling","selector","HTMLElement","$sibling","previousElementSibling","matches","findNearestMatchingElement","$currentElement","parentElement"],"mappings":"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"}