@ministryofjustice/frontend 4.0.1 → 5.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 (256) hide show
  1. package/govuk-prototype-kit.config.json +19 -4
  2. package/moj/_base.scss +2 -0
  3. package/moj/_base.scss.map +1 -0
  4. package/moj/all.bundle.js +3010 -0
  5. package/moj/all.bundle.js.map +1 -0
  6. package/moj/all.bundle.mjs +3293 -0
  7. package/moj/all.bundle.mjs.map +1 -0
  8. package/moj/all.mjs +17 -110
  9. package/moj/all.mjs.map +1 -1
  10. package/moj/all.scss +3 -0
  11. package/moj/all.scss.map +1 -0
  12. package/moj/common/index.mjs +57 -0
  13. package/moj/common/index.mjs.map +1 -0
  14. package/moj/common/moj-frontend-version.mjs +14 -0
  15. package/moj/common/moj-frontend-version.mjs.map +1 -0
  16. package/moj/components/_all.scss +2 -0
  17. package/moj/components/_all.scss.map +1 -0
  18. package/moj/components/action-bar/_action-bar.scss +2 -0
  19. package/moj/components/action-bar/_action-bar.scss.map +1 -0
  20. package/moj/components/add-another/_add-another.scss +2 -0
  21. package/moj/components/add-another/_add-another.scss.map +1 -0
  22. package/moj/components/add-another/add-another.bundle.js +157 -0
  23. package/moj/components/add-another/add-another.bundle.js.map +1 -0
  24. package/moj/components/add-another/add-another.bundle.mjs +271 -0
  25. package/moj/components/add-another/add-another.bundle.mjs.map +1 -0
  26. package/moj/components/add-another/add-another.mjs +135 -91
  27. package/moj/components/add-another/add-another.mjs.map +1 -1
  28. package/moj/components/alert/_alert.scss +4 -0
  29. package/moj/components/alert/_alert.scss.map +1 -0
  30. package/moj/components/alert/alert.bundle.js +254 -0
  31. package/moj/components/alert/alert.bundle.js.map +1 -0
  32. package/moj/components/alert/alert.bundle.mjs +490 -0
  33. package/moj/components/alert/alert.bundle.mjs.map +1 -0
  34. package/moj/components/alert/alert.mjs +97 -218
  35. package/moj/components/alert/alert.mjs.map +1 -1
  36. package/moj/components/alert/{alert.spec.helper.js → alert.spec.helper.bundle.js} +1 -1
  37. package/moj/components/alert/alert.spec.helper.bundle.js.map +1 -0
  38. package/moj/components/alert/alert.spec.helper.bundle.mjs +67 -0
  39. package/moj/components/alert/alert.spec.helper.bundle.mjs.map +1 -0
  40. package/moj/components/alert/alert.spec.helper.mjs.map +1 -1
  41. package/moj/components/badge/_badge.scss +2 -0
  42. package/moj/components/badge/_badge.scss.map +1 -0
  43. package/moj/components/banner/_banner.scss +2 -0
  44. package/moj/components/banner/_banner.scss.map +1 -0
  45. package/moj/components/button-menu/README.md +12 -6
  46. package/moj/components/button-menu/_button-menu.scss +4 -1
  47. package/moj/components/button-menu/_button-menu.scss.map +1 -0
  48. package/moj/components/button-menu/button-menu.bundle.js +270 -0
  49. package/moj/components/button-menu/button-menu.bundle.js.map +1 -0
  50. package/moj/components/button-menu/button-menu.bundle.mjs +506 -0
  51. package/moj/components/button-menu/button-menu.bundle.mjs.map +1 -0
  52. package/moj/components/button-menu/button-menu.mjs +214 -280
  53. package/moj/components/button-menu/button-menu.mjs.map +1 -1
  54. package/moj/components/cookie-banner/_cookie-banner.scss +2 -0
  55. package/moj/components/cookie-banner/_cookie-banner.scss.map +1 -0
  56. package/moj/components/currency-input/_currency-input.scss +2 -0
  57. package/moj/components/currency-input/_currency-input.scss.map +1 -0
  58. package/moj/components/date-picker/_date-picker.scss +2 -0
  59. package/moj/components/date-picker/_date-picker.scss.map +1 -0
  60. package/moj/components/date-picker/date-picker.bundle.js +804 -0
  61. package/moj/components/date-picker/date-picker.bundle.js.map +1 -0
  62. package/moj/components/date-picker/date-picker.bundle.mjs +1040 -0
  63. package/moj/components/date-picker/date-picker.bundle.mjs.map +1 -0
  64. package/moj/components/date-picker/date-picker.mjs +663 -827
  65. package/moj/components/date-picker/date-picker.mjs.map +1 -1
  66. package/moj/components/filter/_filter.scss +2 -0
  67. package/moj/components/filter/_filter.scss.map +1 -0
  68. package/moj/components/filter/template.njk +1 -1
  69. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.js +185 -0
  70. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.js.map +1 -0
  71. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.mjs +421 -0
  72. package/moj/components/filter-toggle-button/filter-toggle-button.bundle.mjs.map +1 -0
  73. package/moj/components/filter-toggle-button/filter-toggle-button.mjs +166 -81
  74. package/moj/components/filter-toggle-button/filter-toggle-button.mjs.map +1 -1
  75. package/moj/components/form-validator/form-validator.bundle.js +288 -0
  76. package/moj/components/form-validator/form-validator.bundle.js.map +1 -0
  77. package/moj/components/form-validator/form-validator.bundle.mjs +524 -0
  78. package/moj/components/form-validator/form-validator.bundle.mjs.map +1 -0
  79. package/moj/components/form-validator/form-validator.mjs +226 -149
  80. package/moj/components/form-validator/form-validator.mjs.map +1 -1
  81. package/moj/components/header/_header.scss +2 -0
  82. package/moj/components/header/_header.scss.map +1 -0
  83. package/moj/components/identity-bar/_identity-bar.scss +2 -0
  84. package/moj/components/identity-bar/_identity-bar.scss.map +1 -0
  85. package/moj/components/interruption-card/_interruption-card.scss +2 -0
  86. package/moj/components/interruption-card/_interruption-card.scss.map +1 -0
  87. package/moj/components/messages/_messages.scss +2 -0
  88. package/moj/components/messages/_messages.scss.map +1 -0
  89. package/moj/components/multi-file-upload/_multi-file-upload.scss +2 -0
  90. package/moj/components/multi-file-upload/_multi-file-upload.scss.map +1 -0
  91. package/moj/components/multi-file-upload/multi-file-upload.bundle.js +397 -0
  92. package/moj/components/multi-file-upload/multi-file-upload.bundle.js.map +1 -0
  93. package/moj/components/multi-file-upload/multi-file-upload.bundle.mjs +633 -0
  94. package/moj/components/multi-file-upload/multi-file-upload.bundle.mjs.map +1 -0
  95. package/moj/components/multi-file-upload/multi-file-upload.mjs +384 -213
  96. package/moj/components/multi-file-upload/multi-file-upload.mjs.map +1 -1
  97. package/moj/components/multi-file-upload/template.njk +1 -1
  98. package/moj/components/multi-select/_multi-select.scss +2 -0
  99. package/moj/components/multi-select/_multi-select.scss.map +1 -0
  100. package/moj/components/multi-select/multi-select.bundle.js +143 -0
  101. package/moj/components/multi-select/multi-select.bundle.js.map +1 -0
  102. package/moj/components/multi-select/multi-select.bundle.mjs +379 -0
  103. package/moj/components/multi-select/multi-select.bundle.mjs.map +1 -0
  104. package/moj/components/multi-select/multi-select.mjs +123 -64
  105. package/moj/components/multi-select/multi-select.mjs.map +1 -1
  106. package/moj/components/notification-badge/_notification-badge.scss +2 -0
  107. package/moj/components/notification-badge/_notification-badge.scss.map +1 -0
  108. package/moj/components/organisation-switcher/_organisation-switcher.scss +2 -0
  109. package/moj/components/organisation-switcher/_organisation-switcher.scss.map +1 -0
  110. package/moj/components/page-header-actions/_page-header-actions.scss +2 -0
  111. package/moj/components/page-header-actions/_page-header-actions.scss.map +1 -0
  112. package/moj/components/pagination/_pagination.scss +2 -2
  113. package/moj/components/pagination/_pagination.scss.map +1 -0
  114. package/moj/components/password-reveal/_password-reveal.scss +5 -1
  115. package/moj/components/password-reveal/_password-reveal.scss.map +1 -0
  116. package/moj/components/password-reveal/password-reveal.bundle.js +52 -0
  117. package/moj/components/password-reveal/password-reveal.bundle.js.map +1 -0
  118. package/moj/components/password-reveal/password-reveal.bundle.mjs +166 -0
  119. package/moj/components/password-reveal/password-reveal.bundle.mjs.map +1 -0
  120. package/moj/components/password-reveal/password-reveal.mjs +39 -29
  121. package/moj/components/password-reveal/password-reveal.mjs.map +1 -1
  122. package/moj/components/primary-navigation/_primary-navigation.scss +2 -0
  123. package/moj/components/primary-navigation/_primary-navigation.scss.map +1 -0
  124. package/moj/components/progress-bar/_progress-bar.scss +2 -0
  125. package/moj/components/progress-bar/_progress-bar.scss.map +1 -0
  126. package/moj/components/rich-text-editor/README.md +16 -9
  127. package/moj/components/rich-text-editor/_rich-text-editor.scss +2 -0
  128. package/moj/components/rich-text-editor/_rich-text-editor.scss.map +1 -0
  129. package/moj/components/rich-text-editor/rich-text-editor.bundle.js +210 -0
  130. package/moj/components/rich-text-editor/rich-text-editor.bundle.js.map +1 -0
  131. package/moj/components/rich-text-editor/rich-text-editor.bundle.mjs +446 -0
  132. package/moj/components/rich-text-editor/rich-text-editor.bundle.mjs.map +1 -0
  133. package/moj/components/rich-text-editor/rich-text-editor.mjs +186 -140
  134. package/moj/components/rich-text-editor/rich-text-editor.mjs.map +1 -1
  135. package/moj/components/search/_search.scss +2 -0
  136. package/moj/components/search/_search.scss.map +1 -0
  137. package/moj/components/search-toggle/{search-toggle.scss → _search-toggle.scss} +2 -0
  138. package/moj/components/search-toggle/_search-toggle.scss.map +1 -0
  139. package/moj/components/search-toggle/search-toggle.bundle.js +122 -0
  140. package/moj/components/search-toggle/search-toggle.bundle.js.map +1 -0
  141. package/moj/components/search-toggle/search-toggle.bundle.mjs +358 -0
  142. package/moj/components/search-toggle/search-toggle.bundle.mjs.map +1 -0
  143. package/moj/components/search-toggle/search-toggle.mjs +104 -43
  144. package/moj/components/search-toggle/search-toggle.mjs.map +1 -1
  145. package/moj/components/side-navigation/_side-navigation.scss +2 -0
  146. package/moj/components/side-navigation/_side-navigation.scss.map +1 -0
  147. package/moj/components/sortable-table/_sortable-table.scss +2 -2
  148. package/moj/components/sortable-table/_sortable-table.scss.map +1 -0
  149. package/moj/components/sortable-table/sortable-table.bundle.js +202 -0
  150. package/moj/components/sortable-table/sortable-table.bundle.js.map +1 -0
  151. package/moj/components/sortable-table/sortable-table.bundle.mjs +438 -0
  152. package/moj/components/sortable-table/sortable-table.bundle.mjs.map +1 -0
  153. package/moj/components/sortable-table/sortable-table.mjs +179 -122
  154. package/moj/components/sortable-table/sortable-table.mjs.map +1 -1
  155. package/moj/components/sub-navigation/_sub-navigation.scss +2 -0
  156. package/moj/components/sub-navigation/_sub-navigation.scss.map +1 -0
  157. package/moj/components/tag/_tag.scss +2 -0
  158. package/moj/components/tag/_tag.scss.map +1 -0
  159. package/moj/components/task-list/_task-list.scss +2 -0
  160. package/moj/components/task-list/_task-list.scss.map +1 -0
  161. package/moj/components/ticket-panel/_ticket-panel.scss +2 -0
  162. package/moj/components/ticket-panel/_ticket-panel.scss.map +1 -0
  163. package/moj/components/timeline/_timeline.scss +2 -0
  164. package/moj/components/timeline/_timeline.scss.map +1 -0
  165. package/moj/core/_all.scss +3 -0
  166. package/moj/core/_all.scss.map +1 -0
  167. package/moj/core/_moj-frontend-properties.scss +7 -0
  168. package/moj/core/_moj-frontend-properties.scss.map +1 -0
  169. package/moj/filters/all.js +44 -22
  170. package/moj/filters/prototype-kit-13-filters.js +4 -3
  171. package/moj/helpers/_all.scss +2 -0
  172. package/moj/helpers/_all.scss.map +1 -0
  173. package/moj/helpers/_hidden.scss +2 -0
  174. package/moj/helpers/_hidden.scss.map +1 -0
  175. package/moj/helpers/_links.scss +2 -0
  176. package/moj/helpers/_links.scss.map +1 -0
  177. package/moj/helpers.bundle.js +140 -0
  178. package/moj/helpers.bundle.js.map +1 -0
  179. package/moj/helpers.bundle.mjs +128 -0
  180. package/moj/helpers.bundle.mjs.map +1 -0
  181. package/moj/helpers.mjs +50 -77
  182. package/moj/helpers.mjs.map +1 -1
  183. package/moj/init.js +11 -2
  184. package/moj/moj-frontend.min.css +1 -1
  185. package/moj/moj-frontend.min.css.map +1 -1
  186. package/moj/moj-frontend.min.js +1 -1
  187. package/moj/moj-frontend.min.js.map +1 -1
  188. package/moj/objects/_all.scss +2 -0
  189. package/moj/objects/_all.scss.map +1 -0
  190. package/moj/objects/_button-group.scss +2 -0
  191. package/moj/objects/_button-group.scss.map +1 -0
  192. package/moj/objects/_filter-layout.scss +2 -0
  193. package/moj/objects/_filter-layout.scss.map +1 -0
  194. package/moj/objects/_scrollable-pane.scss +2 -0
  195. package/moj/objects/_scrollable-pane.scss.map +1 -0
  196. package/moj/objects/_width-container.scss +2 -0
  197. package/moj/objects/_width-container.scss.map +1 -0
  198. package/moj/settings/_all.scss +2 -0
  199. package/moj/settings/_all.scss.map +1 -0
  200. package/moj/settings/_assets.scss +2 -0
  201. package/moj/settings/_assets.scss.map +1 -0
  202. package/moj/settings/_colours.scss +2 -0
  203. package/moj/settings/_colours.scss.map +1 -0
  204. package/moj/settings/_measurements.scss +2 -0
  205. package/moj/settings/_measurements.scss.map +1 -0
  206. package/moj/settings/_typography.scss +2 -0
  207. package/moj/settings/_typography.scss.map +1 -0
  208. package/moj/template.njk +13 -0
  209. package/moj/utilities/_all.scss +2 -0
  210. package/moj/utilities/_all.scss.map +1 -0
  211. package/moj/utilities/_hidden.scss +2 -0
  212. package/moj/utilities/_hidden.scss.map +1 -0
  213. package/moj/utilities/_width-container.scss +2 -0
  214. package/moj/utilities/_width-container.scss.map +1 -0
  215. package/moj/vendor/govuk-frontend/_base.scss +2 -0
  216. package/moj/vendor/govuk-frontend/_base.scss.map +1 -0
  217. package/moj/vendor/govuk-frontend/_index.scss +2 -0
  218. package/moj/vendor/govuk-frontend/_index.scss.map +1 -0
  219. package/package.json +5 -6
  220. package/moj/all.jquery.min.js +0 -1
  221. package/moj/all.jquery.min.js.map +0 -1
  222. package/moj/all.js +0 -2662
  223. package/moj/all.js.map +0 -1
  224. package/moj/components/add-another/add-another.js +0 -115
  225. package/moj/components/add-another/add-another.js.map +0 -1
  226. package/moj/components/alert/alert.js +0 -356
  227. package/moj/components/alert/alert.js.map +0 -1
  228. package/moj/components/alert/alert.spec.helper.js.map +0 -1
  229. package/moj/components/button-menu/button-menu.js +0 -338
  230. package/moj/components/button-menu/button-menu.js.map +0 -1
  231. package/moj/components/date-picker/date-picker.js +0 -970
  232. package/moj/components/date-picker/date-picker.js.map +0 -1
  233. package/moj/components/filter-toggle-button/filter-toggle-button.js +0 -102
  234. package/moj/components/filter-toggle-button/filter-toggle-button.js.map +0 -1
  235. package/moj/components/form-validator/form-validator.js +0 -205
  236. package/moj/components/form-validator/form-validator.js.map +0 -1
  237. package/moj/components/multi-file-upload/multi-file-upload.js +0 -241
  238. package/moj/components/multi-file-upload/multi-file-upload.js.map +0 -1
  239. package/moj/components/multi-select/multi-select.js +0 -86
  240. package/moj/components/multi-select/multi-select.js.map +0 -1
  241. package/moj/components/password-reveal/password-reveal.js +0 -44
  242. package/moj/components/password-reveal/password-reveal.js.map +0 -1
  243. package/moj/components/rich-text-editor/rich-text-editor.js +0 -166
  244. package/moj/components/rich-text-editor/rich-text-editor.js.map +0 -1
  245. package/moj/components/search-toggle/search-toggle.js +0 -63
  246. package/moj/components/search-toggle/search-toggle.js.map +0 -1
  247. package/moj/components/sortable-table/sortable-table.js +0 -147
  248. package/moj/components/sortable-table/sortable-table.js.map +0 -1
  249. package/moj/helpers.js +0 -200
  250. package/moj/helpers.js.map +0 -1
  251. package/moj/vendor/html5shiv.js +0 -326
  252. package/moj/vendor/jquery.js +0 -9300
  253. package/moj/version.js +0 -12
  254. package/moj/version.js.map +0 -1
  255. package/moj/version.mjs +0 -4
  256. package/moj/version.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-select.bundle.mjs","sources":["../../../../node_modules/govuk-frontend/dist/govuk/common/index.mjs","../../../../node_modules/govuk-frontend/dist/govuk/errors/index.mjs","../../../../node_modules/govuk-frontend/dist/govuk/component.mjs","../../../../node_modules/govuk-frontend/dist/govuk/common/configuration.mjs","../../../../src/moj/components/multi-select/multi-select.mjs"],"sourcesContent":["function getFragmentFromUrl(url) {\n if (!url.includes('#')) {\n return undefined;\n }\n return url.split('#').pop();\n}\nfunction getBreakpoint(name) {\n const property = `--govuk-frontend-breakpoint-${name}`;\n const value = window.getComputedStyle(document.documentElement).getPropertyValue(property);\n return {\n property,\n value: value || undefined\n };\n}\nfunction setFocus($element, options = {}) {\n var _options$onBeforeFocu;\n const isFocusable = $element.getAttribute('tabindex');\n if (!isFocusable) {\n $element.setAttribute('tabindex', '-1');\n }\n function onFocus() {\n $element.addEventListener('blur', onBlur, {\n once: true\n });\n }\n function onBlur() {\n var _options$onBlur;\n (_options$onBlur = options.onBlur) == null || _options$onBlur.call($element);\n if (!isFocusable) {\n $element.removeAttribute('tabindex');\n }\n }\n $element.addEventListener('focus', onFocus, {\n once: true\n });\n (_options$onBeforeFocu = options.onBeforeFocus) == null || _options$onBeforeFocu.call($element);\n $element.focus();\n}\nfunction isInitialised($root, moduleName) {\n return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);\n}\n\n/**\n * Checks if GOV.UK Frontend is supported on this page\n *\n * Some browsers will load and run our JavaScript but GOV.UK Frontend\n * won't be supported.\n *\n * @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support\n * @returns {boolean} Whether GOV.UK Frontend is supported on this page\n */\nfunction isSupported($scope = document.body) {\n if (!$scope) {\n return false;\n }\n return $scope.classList.contains('govuk-frontend-supported');\n}\nfunction isArray(option) {\n return Array.isArray(option);\n}\nfunction isObject(option) {\n return !!option && typeof option === 'object' && !isArray(option);\n}\nfunction formatErrorMessage(Component, message) {\n return `${Component.moduleName}: ${message}`;\n}\n/**\n * @typedef ComponentWithModuleName\n * @property {string} moduleName - Name of the component\n */\n/**\n * @import { ObjectNested } from './configuration.mjs'\n */\n\nexport { formatErrorMessage, getBreakpoint, getFragmentFromUrl, isInitialised, isObject, isSupported, setFocus };\n//# sourceMappingURL=index.mjs.map\n","import { formatErrorMessage } from '../common/index.mjs';\n\nclass GOVUKFrontendError extends Error {\n constructor(...args) {\n super(...args);\n this.name = 'GOVUKFrontendError';\n }\n}\nclass SupportError extends GOVUKFrontendError {\n /**\n * Checks if GOV.UK Frontend is supported on this page\n *\n * @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support\n */\n constructor($scope = document.body) {\n const supportMessage = 'noModule' in HTMLScriptElement.prototype ? 'GOV.UK Frontend initialised without `<body class=\"govuk-frontend-supported\">` from template `<script>` snippet' : 'GOV.UK Frontend is not supported in this browser';\n super($scope ? supportMessage : 'GOV.UK Frontend initialised without `<script type=\"module\">`');\n this.name = 'SupportError';\n }\n}\nclass ConfigError extends GOVUKFrontendError {\n constructor(...args) {\n super(...args);\n this.name = 'ConfigError';\n }\n}\nclass ElementError extends GOVUKFrontendError {\n constructor(messageOrOptions) {\n let message = typeof messageOrOptions === 'string' ? messageOrOptions : '';\n if (typeof messageOrOptions === 'object') {\n const {\n component,\n identifier,\n element,\n expectedType\n } = messageOrOptions;\n message = identifier;\n message += element ? ` is not of type ${expectedType != null ? expectedType : 'HTMLElement'}` : ' not found';\n message = formatErrorMessage(component, message);\n }\n super(message);\n this.name = 'ElementError';\n }\n}\nclass InitError extends GOVUKFrontendError {\n constructor(componentOrMessage) {\n const message = typeof componentOrMessage === 'string' ? componentOrMessage : formatErrorMessage(componentOrMessage, `Root element (\\`$root\\`) already initialised`);\n super(message);\n this.name = 'InitError';\n }\n}\n/**\n * @import { ComponentWithModuleName } from '../common/index.mjs'\n */\n\nexport { ConfigError, ElementError, GOVUKFrontendError, InitError, SupportError };\n//# sourceMappingURL=index.mjs.map\n","import { isInitialised, isSupported } from './common/index.mjs';\nimport { InitError, ElementError, SupportError } from './errors/index.mjs';\n\nclass Component {\n /**\n * Returns the root element of the component\n *\n * @protected\n * @returns {RootElementType} - the root element of component\n */\n get $root() {\n return this._$root;\n }\n constructor($root) {\n this._$root = void 0;\n const childConstructor = this.constructor;\n if (typeof childConstructor.moduleName !== 'string') {\n throw new InitError(`\\`moduleName\\` not defined in component`);\n }\n if (!($root instanceof childConstructor.elementType)) {\n throw new ElementError({\n element: $root,\n component: childConstructor,\n identifier: 'Root element (`$root`)',\n expectedType: childConstructor.elementType.name\n });\n } else {\n this._$root = $root;\n }\n childConstructor.checkSupport();\n this.checkInitialised();\n const moduleName = childConstructor.moduleName;\n this.$root.setAttribute(`data-${moduleName}-init`, '');\n }\n checkInitialised() {\n const constructor = this.constructor;\n const moduleName = constructor.moduleName;\n if (moduleName && isInitialised(this.$root, moduleName)) {\n throw new InitError(constructor);\n }\n }\n static checkSupport() {\n if (!isSupported()) {\n throw new SupportError();\n }\n }\n}\n\n/**\n * @typedef ChildClass\n * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component\n */\n\n/**\n * @typedef {typeof Component & ChildClass} ChildClassConstructor\n */\nComponent.elementType = HTMLElement;\n\nexport { Component };\n//# sourceMappingURL=component.mjs.map\n","import { Component } from '../component.mjs';\nimport { ConfigError } from '../errors/index.mjs';\nimport { isObject, formatErrorMessage } from './index.mjs';\n\nconst configOverride = Symbol.for('configOverride');\nclass ConfigurableComponent extends Component {\n [configOverride](param) {\n return {};\n }\n\n /**\n * Returns the root element of the component\n *\n * @protected\n * @returns {ConfigurationType} - the root element of component\n */\n get config() {\n return this._config;\n }\n constructor($root, config) {\n super($root);\n this._config = void 0;\n const childConstructor = this.constructor;\n if (!isObject(childConstructor.defaults)) {\n throw new ConfigError(formatErrorMessage(childConstructor, 'Config passed as parameter into constructor but no defaults defined'));\n }\n const datasetConfig = normaliseDataset(childConstructor, this._$root.dataset);\n this._config = mergeConfigs(childConstructor.defaults, config != null ? config : {}, this[configOverride](datasetConfig), datasetConfig);\n }\n}\nfunction normaliseString(value, property) {\n const trimmedValue = value ? value.trim() : '';\n let output;\n let outputType = property == null ? void 0 : property.type;\n if (!outputType) {\n if (['true', 'false'].includes(trimmedValue)) {\n outputType = 'boolean';\n }\n if (trimmedValue.length > 0 && isFinite(Number(trimmedValue))) {\n outputType = 'number';\n }\n }\n switch (outputType) {\n case 'boolean':\n output = trimmedValue === 'true';\n break;\n case 'number':\n output = Number(trimmedValue);\n break;\n default:\n output = value;\n }\n return output;\n}\nfunction normaliseDataset(Component, dataset) {\n if (!isObject(Component.schema)) {\n throw new ConfigError(formatErrorMessage(Component, 'Config passed as parameter into constructor but no schema defined'));\n }\n const out = {};\n const entries = Object.entries(Component.schema.properties);\n for (const entry of entries) {\n const [namespace, property] = entry;\n const field = namespace.toString();\n if (field in dataset) {\n out[field] = normaliseString(dataset[field], property);\n }\n if ((property == null ? void 0 : property.type) === 'object') {\n out[field] = extractConfigByNamespace(Component.schema, dataset, namespace);\n }\n }\n return out;\n}\nfunction mergeConfigs(...configObjects) {\n const formattedConfigObject = {};\n for (const configObject of configObjects) {\n for (const key of Object.keys(configObject)) {\n const option = formattedConfigObject[key];\n const override = configObject[key];\n if (isObject(option) && isObject(override)) {\n formattedConfigObject[key] = mergeConfigs(option, override);\n } else {\n formattedConfigObject[key] = override;\n }\n }\n }\n return formattedConfigObject;\n}\nfunction validateConfig(schema, config) {\n const validationErrors = [];\n for (const [name, conditions] of Object.entries(schema)) {\n const errors = [];\n if (Array.isArray(conditions)) {\n for (const {\n required,\n errorMessage\n } of conditions) {\n if (!required.every(key => !!config[key])) {\n errors.push(errorMessage);\n }\n }\n if (name === 'anyOf' && !(conditions.length - errors.length >= 1)) {\n validationErrors.push(...errors);\n }\n }\n }\n return validationErrors;\n}\nfunction extractConfigByNamespace(schema, dataset, namespace) {\n const property = schema.properties[namespace];\n if ((property == null ? void 0 : property.type) !== 'object') {\n return;\n }\n const newObject = {\n [namespace]: {}\n };\n for (const [key, value] of Object.entries(dataset)) {\n let current = newObject;\n const keyParts = key.split('.');\n for (const [index, name] of keyParts.entries()) {\n if (isObject(current)) {\n if (index < keyParts.length - 1) {\n if (!isObject(current[name])) {\n current[name] = {};\n }\n current = current[name];\n } else if (key !== namespace) {\n current[name] = normaliseString(value);\n }\n }\n }\n }\n return newObject[namespace];\n}\n/**\n * Schema for component config\n *\n * @template {Partial<Record<keyof ConfigurationType, unknown>>} ConfigurationType\n * @typedef {object} Schema\n * @property {Record<keyof ConfigurationType, SchemaProperty | undefined>} properties - Schema properties\n * @property {SchemaCondition<ConfigurationType>[]} [anyOf] - List of schema conditions\n */\n/**\n * Schema property for component config\n *\n * @typedef {object} SchemaProperty\n * @property {'string' | 'boolean' | 'number' | 'object'} type - Property type\n */\n/**\n * Schema condition for component config\n *\n * @template {Partial<Record<keyof ConfigurationType, unknown>>} ConfigurationType\n * @typedef {object} SchemaCondition\n * @property {(keyof ConfigurationType)[]} required - List of required config fields\n * @property {string} errorMessage - Error message when required config fields not provided\n */\n/**\n * @template {Partial<Record<keyof ConfigurationType, unknown>>} [ConfigurationType=ObjectNested]\n * @typedef ChildClass\n * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component\n * @property {Schema<ConfigurationType>} [schema] - The schema of the component configuration\n * @property {ConfigurationType} [defaults] - The default values of the configuration of the component\n */\n/**\n * @template {Partial<Record<keyof ConfigurationType, unknown>>} [ConfigurationType=ObjectNested]\n * @typedef {typeof Component & ChildClass<ConfigurationType>} ChildClassConstructor<ConfigurationType>\n */\n\nexport { ConfigurableComponent, configOverride, extractConfigByNamespace, mergeConfigs, normaliseDataset, normaliseString, validateConfig };\n//# sourceMappingURL=configuration.mjs.map\n","import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<MultiSelectConfig>}\n */\nexport class MultiSelect extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for multi select\n * @param {MultiSelectConfig} [config] - Multi select config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $container = this.$root.querySelector(\n `#${this.config.idPrefix}select-all`\n )\n\n const $checkboxes = /** @type {NodeListOf<HTMLInputElement>} */ (\n this.config.checkboxes.items ??\n this.$root.querySelectorAll(this.config.checkboxes.selector)\n )\n\n if (\n !$container ||\n !($container instanceof HTMLElement) ||\n !$checkboxes.length\n ) {\n return this\n }\n\n this.setupToggle(this.config.idPrefix)\n\n this.$toggleButton = this.$toggle.querySelector('input')\n this.$toggleButton.addEventListener('click', this.onButtonClick.bind(this))\n\n this.$container = $container\n this.$container.append(this.$toggle)\n\n this.$checkboxes = Array.from($checkboxes)\n this.$checkboxes.forEach(($input) =>\n $input.addEventListener('click', this.onCheckboxClick.bind(this))\n )\n\n this.checked = config.checked || false\n }\n\n setupToggle(idPrefix = '') {\n const id = `${idPrefix}checkboxes-all`\n\n const $toggle = document.createElement('div')\n const $label = document.createElement('label')\n const $input = document.createElement('input')\n const $span = document.createElement('span')\n\n $toggle.classList.add(\n 'govuk-checkboxes__item',\n 'govuk-checkboxes--small',\n 'moj-multi-select__checkbox'\n )\n\n $input.id = id\n $input.type = 'checkbox'\n $input.classList.add('govuk-checkboxes__input')\n\n $label.setAttribute('for', id)\n $label.classList.add(\n 'govuk-label',\n 'govuk-checkboxes__label',\n 'moj-multi-select__toggle-label'\n )\n\n $span.classList.add('govuk-visually-hidden')\n $span.textContent = 'Select all'\n\n $label.append($span)\n $toggle.append($input, $label)\n\n this.$toggle = $toggle\n }\n\n onButtonClick() {\n if (this.checked) {\n this.uncheckAll()\n this.$toggleButton.checked = false\n } else {\n this.checkAll()\n this.$toggleButton.checked = true\n }\n }\n\n checkAll() {\n this.$checkboxes.forEach(($input) => {\n $input.checked = true\n })\n\n this.checked = true\n }\n\n uncheckAll() {\n this.$checkboxes.forEach(($input) => {\n $input.checked = false\n })\n\n this.checked = false\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onCheckboxClick(event) {\n if (!(event.target instanceof HTMLInputElement)) {\n return\n }\n\n if (!event.target.checked) {\n this.$toggleButton.checked = false\n this.checked = false\n } else {\n if (\n this.$checkboxes.filter(($input) => $input.checked).length ===\n this.$checkboxes.length\n ) {\n this.$toggleButton.checked = true\n this.checked = true\n }\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-multi-select'\n\n /**\n * Multi select config\n *\n * @type {MultiSelectConfig}\n */\n static defaults = Object.freeze({\n idPrefix: '',\n checkboxes: {\n selector: 'tbody input.govuk-checkboxes__input'\n }\n })\n\n /**\n * Multi select config schema\n *\n * @satisfies {Schema<MultiSelectConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n idPrefix: { type: 'string' },\n checked: { type: 'boolean' },\n checkboxes: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * Multi select config\n *\n * @typedef {object} MultiSelectConfig\n * @property {string} [idPrefix] - Prefix for the Select all\" checkbox `id` attribute\n * @property {boolean} [checked] - Whether the \"Select all\" checkbox is checked\n * @property {object} [checkboxes] - Checkboxes config\n * @property {string} [checkboxes.selector] - Checkboxes query selector\n * @property {NodeListOf<HTMLInputElement>} [checkboxes.items] - Checkboxes query selector results\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n"],"names":["isInitialised","$root","moduleName","HTMLElement","hasAttribute","isSupported","$scope","document","body","classList","contains","isArray","option","Array","isObject","formatErrorMessage","Component","message","GOVUKFrontendError","Error","constructor","args","name","SupportError","supportMessage","HTMLScriptElement","prototype","ConfigError","ElementError","messageOrOptions","component","identifier","element","expectedType","InitError","componentOrMessage","_$root","childConstructor","elementType","checkSupport","checkInitialised","setAttribute","configOverride","Symbol","for","ConfigurableComponent","param","config","_config","defaults","datasetConfig","normaliseDataset","dataset","mergeConfigs","normaliseString","value","property","trimmedValue","trim","output","outputType","type","includes","length","isFinite","Number","schema","out","entries","Object","properties","entry","namespace","field","toString","extractConfigByNamespace","configObjects","formattedConfigObject","configObject","key","keys","override","newObject","current","keyParts","split","index","MultiSelect","_this$config$checkbox","$container","querySelector","idPrefix","$checkboxes","checkboxes","items","querySelectorAll","selector","setupToggle","$toggleButton","$toggle","addEventListener","onButtonClick","bind","append","from","forEach","$input","onCheckboxClick","checked","id","createElement","$label","$span","add","textContent","uncheckAll","checkAll","event","target","HTMLInputElement","filter","freeze"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}
@@ -1,78 +1,137 @@
1
- function MultiSelect(options) {
2
- this.container = $(options.container);
1
+ import { ConfigurableComponent } from 'govuk-frontend';
3
2
 
4
- if (this.container.data('moj-multi-select-initialised')) {
5
- return
3
+ /**
4
+ * @augments {ConfigurableComponent<MultiSelectConfig>}
5
+ */
6
+ class MultiSelect extends ConfigurableComponent {
7
+ /**
8
+ * @param {Element | null} $root - HTML element to use for multi select
9
+ * @param {MultiSelectConfig} [config] - Multi select config
10
+ */
11
+ constructor($root, config = {}) {
12
+ var _this$config$checkbox;
13
+ super($root, config);
14
+ const $container = this.$root.querySelector(`#${this.config.idPrefix}select-all`);
15
+ const $checkboxes = /** @type {NodeListOf<HTMLInputElement>} */(_this$config$checkbox = this.config.checkboxes.items) != null ? _this$config$checkbox : this.$root.querySelectorAll(this.config.checkboxes.selector);
16
+ if (!$container || !($container instanceof HTMLElement) || !$checkboxes.length) {
17
+ return this;
18
+ }
19
+ this.setupToggle(this.config.idPrefix);
20
+ this.$toggleButton = this.$toggle.querySelector('input');
21
+ this.$toggleButton.addEventListener('click', this.onButtonClick.bind(this));
22
+ this.$container = $container;
23
+ this.$container.append(this.$toggle);
24
+ this.$checkboxes = Array.from($checkboxes);
25
+ this.$checkboxes.forEach($input => $input.addEventListener('click', this.onCheckboxClick.bind(this)));
26
+ this.checked = config.checked || false;
27
+ }
28
+ setupToggle(idPrefix = '') {
29
+ const id = `${idPrefix}checkboxes-all`;
30
+ const $toggle = document.createElement('div');
31
+ const $label = document.createElement('label');
32
+ const $input = document.createElement('input');
33
+ const $span = document.createElement('span');
34
+ $toggle.classList.add('govuk-checkboxes__item', 'govuk-checkboxes--small', 'moj-multi-select__checkbox');
35
+ $input.id = id;
36
+ $input.type = 'checkbox';
37
+ $input.classList.add('govuk-checkboxes__input');
38
+ $label.setAttribute('for', id);
39
+ $label.classList.add('govuk-label', 'govuk-checkboxes__label', 'moj-multi-select__toggle-label');
40
+ $span.classList.add('govuk-visually-hidden');
41
+ $span.textContent = 'Select all';
42
+ $label.append($span);
43
+ $toggle.append($input, $label);
44
+ this.$toggle = $toggle;
45
+ }
46
+ onButtonClick() {
47
+ if (this.checked) {
48
+ this.uncheckAll();
49
+ this.$toggleButton.checked = false;
50
+ } else {
51
+ this.checkAll();
52
+ this.$toggleButton.checked = true;
53
+ }
54
+ }
55
+ checkAll() {
56
+ this.$checkboxes.forEach($input => {
57
+ $input.checked = true;
58
+ });
59
+ this.checked = true;
60
+ }
61
+ uncheckAll() {
62
+ this.$checkboxes.forEach($input => {
63
+ $input.checked = false;
64
+ });
65
+ this.checked = false;
6
66
  }
7
67
 
8
- this.container.data('moj-multi-select-initialised', true);
9
-
10
- const idPrefix = options.id_prefix;
11
- let allId = 'checkboxes-all';
12
- if (typeof idPrefix !== 'undefined') {
13
- allId = `${idPrefix}checkboxes-all`;
68
+ /**
69
+ * @param {MouseEvent} event - Click event
70
+ */
71
+ onCheckboxClick(event) {
72
+ if (!(event.target instanceof HTMLInputElement)) {
73
+ return;
74
+ }
75
+ if (!event.target.checked) {
76
+ this.$toggleButton.checked = false;
77
+ this.checked = false;
78
+ } else {
79
+ if (this.$checkboxes.filter($input => $input.checked).length === this.$checkboxes.length) {
80
+ this.$toggleButton.checked = true;
81
+ this.checked = true;
82
+ }
83
+ }
14
84
  }
15
85
 
16
- this.toggle = $(this.getToggleHtml(allId));
17
- this.toggleButton = this.toggle.find('input');
18
- this.toggleButton.on('click', $.proxy(this, 'onButtonClick'));
19
- this.container.append(this.toggle);
20
- this.checkboxes = $(options.checkboxes);
21
- this.checkboxes.on('click', $.proxy(this, 'onCheckboxClick'));
22
- this.checked = options.checked || false;
86
+ /**
87
+ * Name for the component used when initialising using data-module attributes.
88
+ */
23
89
  }
24
90
 
25
- MultiSelect.prototype.getToggleHtml = function (allId) {
26
- let html = '';
27
- html +=
28
- '<div class="govuk-checkboxes__item govuk-checkboxes--small moj-multi-select__checkbox">';
29
- html += ` <input type="checkbox" class="govuk-checkboxes__input" id="${allId}">`;
30
- html += ` <label class="govuk-label govuk-checkboxes__label moj-multi-select__toggle-label" for="${allId}">`;
31
- html += ' <span class="govuk-visually-hidden">Select all</span>';
32
- html += ' </label>';
33
- html += '</div>';
34
- return html
35
- };
91
+ /**
92
+ * Multi select config
93
+ *
94
+ * @typedef {object} MultiSelectConfig
95
+ * @property {string} [idPrefix] - Prefix for the Select all" checkbox `id` attribute
96
+ * @property {boolean} [checked] - Whether the "Select all" checkbox is checked
97
+ * @property {object} [checkboxes] - Checkboxes config
98
+ * @property {string} [checkboxes.selector] - Checkboxes query selector
99
+ * @property {NodeListOf<HTMLInputElement>} [checkboxes.items] - Checkboxes query selector results
100
+ */
36
101
 
37
- MultiSelect.prototype.onButtonClick = function (e) {
38
- if (this.checked) {
39
- this.uncheckAll();
40
- this.toggleButton[0].checked = false;
41
- } else {
42
- this.checkAll();
43
- this.toggleButton[0].checked = true;
102
+ /**
103
+ * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'
104
+ */
105
+ MultiSelect.moduleName = 'moj-multi-select';
106
+ /**
107
+ * Multi select config
108
+ *
109
+ * @type {MultiSelectConfig}
110
+ */
111
+ MultiSelect.defaults = Object.freeze({
112
+ idPrefix: '',
113
+ checkboxes: {
114
+ selector: 'tbody input.govuk-checkboxes__input'
44
115
  }
45
- };
46
-
47
- MultiSelect.prototype.checkAll = function () {
48
- this.checkboxes.each(
49
- $.proxy(function (index, el) {
50
- el.checked = true;
51
- }, this)
52
- );
53
- this.checked = true;
54
- };
55
-
56
- MultiSelect.prototype.uncheckAll = function () {
57
- this.checkboxes.each(
58
- $.proxy(function (index, el) {
59
- el.checked = false;
60
- }, this)
61
- );
62
- this.checked = false;
63
- };
64
-
65
- MultiSelect.prototype.onCheckboxClick = function (e) {
66
- if (!e.target.checked) {
67
- this.toggleButton[0].checked = false;
68
- this.checked = false;
69
- } else {
70
- if (this.checkboxes.filter(':checked').length === this.checkboxes.length) {
71
- this.toggleButton[0].checked = true;
72
- this.checked = true;
116
+ });
117
+ /**
118
+ * Multi select config schema
119
+ *
120
+ * @satisfies {Schema<MultiSelectConfig>}
121
+ */
122
+ MultiSelect.schema = Object.freeze(/** @type {const} */{
123
+ properties: {
124
+ idPrefix: {
125
+ type: 'string'
126
+ },
127
+ checked: {
128
+ type: 'boolean'
129
+ },
130
+ checkboxes: {
131
+ type: 'object'
73
132
  }
74
133
  }
75
- };
134
+ });
76
135
 
77
136
  export { MultiSelect };
78
137
  //# sourceMappingURL=multi-select.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"multi-select.mjs","sources":["../../../../src/moj/components/multi-select/multi-select.mjs"],"sourcesContent":["import $ from 'jquery'\n\nexport function MultiSelect(options) {\n this.container = $(options.container)\n\n if (this.container.data('moj-multi-select-initialised')) {\n return\n }\n\n this.container.data('moj-multi-select-initialised', true)\n\n const idPrefix = options.id_prefix\n let allId = 'checkboxes-all'\n if (typeof idPrefix !== 'undefined') {\n allId = `${idPrefix}checkboxes-all`\n }\n\n this.toggle = $(this.getToggleHtml(allId))\n this.toggleButton = this.toggle.find('input')\n this.toggleButton.on('click', $.proxy(this, 'onButtonClick'))\n this.container.append(this.toggle)\n this.checkboxes = $(options.checkboxes)\n this.checkboxes.on('click', $.proxy(this, 'onCheckboxClick'))\n this.checked = options.checked || false\n}\n\nMultiSelect.prototype.getToggleHtml = function (allId) {\n let html = ''\n html +=\n '<div class=\"govuk-checkboxes__item govuk-checkboxes--small moj-multi-select__checkbox\">'\n html += ` <input type=\"checkbox\" class=\"govuk-checkboxes__input\" id=\"${allId}\">`\n html += ` <label class=\"govuk-label govuk-checkboxes__label moj-multi-select__toggle-label\" for=\"${allId}\">`\n html += ' <span class=\"govuk-visually-hidden\">Select all</span>'\n html += ' </label>'\n html += '</div>'\n return html\n}\n\nMultiSelect.prototype.onButtonClick = function (e) {\n if (this.checked) {\n this.uncheckAll()\n this.toggleButton[0].checked = false\n } else {\n this.checkAll()\n this.toggleButton[0].checked = true\n }\n}\n\nMultiSelect.prototype.checkAll = function () {\n this.checkboxes.each(\n $.proxy(function (index, el) {\n el.checked = true\n }, this)\n )\n this.checked = true\n}\n\nMultiSelect.prototype.uncheckAll = function () {\n this.checkboxes.each(\n $.proxy(function (index, el) {\n el.checked = false\n }, this)\n )\n this.checked = false\n}\n\nMultiSelect.prototype.onCheckboxClick = function (e) {\n if (!e.target.checked) {\n this.toggleButton[0].checked = false\n this.checked = false\n } else {\n if (this.checkboxes.filter(':checked').length === this.checkboxes.length) {\n this.toggleButton[0].checked = true\n this.checked = true\n }\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"multi-select.mjs","sources":["../../../../src/moj/components/multi-select/multi-select.mjs"],"sourcesContent":["import { ConfigurableComponent } from 'govuk-frontend'\n\n/**\n * @augments {ConfigurableComponent<MultiSelectConfig>}\n */\nexport class MultiSelect extends ConfigurableComponent {\n /**\n * @param {Element | null} $root - HTML element to use for multi select\n * @param {MultiSelectConfig} [config] - Multi select config\n */\n constructor($root, config = {}) {\n super($root, config)\n\n const $container = this.$root.querySelector(\n `#${this.config.idPrefix}select-all`\n )\n\n const $checkboxes = /** @type {NodeListOf<HTMLInputElement>} */ (\n this.config.checkboxes.items ??\n this.$root.querySelectorAll(this.config.checkboxes.selector)\n )\n\n if (\n !$container ||\n !($container instanceof HTMLElement) ||\n !$checkboxes.length\n ) {\n return this\n }\n\n this.setupToggle(this.config.idPrefix)\n\n this.$toggleButton = this.$toggle.querySelector('input')\n this.$toggleButton.addEventListener('click', this.onButtonClick.bind(this))\n\n this.$container = $container\n this.$container.append(this.$toggle)\n\n this.$checkboxes = Array.from($checkboxes)\n this.$checkboxes.forEach(($input) =>\n $input.addEventListener('click', this.onCheckboxClick.bind(this))\n )\n\n this.checked = config.checked || false\n }\n\n setupToggle(idPrefix = '') {\n const id = `${idPrefix}checkboxes-all`\n\n const $toggle = document.createElement('div')\n const $label = document.createElement('label')\n const $input = document.createElement('input')\n const $span = document.createElement('span')\n\n $toggle.classList.add(\n 'govuk-checkboxes__item',\n 'govuk-checkboxes--small',\n 'moj-multi-select__checkbox'\n )\n\n $input.id = id\n $input.type = 'checkbox'\n $input.classList.add('govuk-checkboxes__input')\n\n $label.setAttribute('for', id)\n $label.classList.add(\n 'govuk-label',\n 'govuk-checkboxes__label',\n 'moj-multi-select__toggle-label'\n )\n\n $span.classList.add('govuk-visually-hidden')\n $span.textContent = 'Select all'\n\n $label.append($span)\n $toggle.append($input, $label)\n\n this.$toggle = $toggle\n }\n\n onButtonClick() {\n if (this.checked) {\n this.uncheckAll()\n this.$toggleButton.checked = false\n } else {\n this.checkAll()\n this.$toggleButton.checked = true\n }\n }\n\n checkAll() {\n this.$checkboxes.forEach(($input) => {\n $input.checked = true\n })\n\n this.checked = true\n }\n\n uncheckAll() {\n this.$checkboxes.forEach(($input) => {\n $input.checked = false\n })\n\n this.checked = false\n }\n\n /**\n * @param {MouseEvent} event - Click event\n */\n onCheckboxClick(event) {\n if (!(event.target instanceof HTMLInputElement)) {\n return\n }\n\n if (!event.target.checked) {\n this.$toggleButton.checked = false\n this.checked = false\n } else {\n if (\n this.$checkboxes.filter(($input) => $input.checked).length ===\n this.$checkboxes.length\n ) {\n this.$toggleButton.checked = true\n this.checked = true\n }\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-multi-select'\n\n /**\n * Multi select config\n *\n * @type {MultiSelectConfig}\n */\n static defaults = Object.freeze({\n idPrefix: '',\n checkboxes: {\n selector: 'tbody input.govuk-checkboxes__input'\n }\n })\n\n /**\n * Multi select config schema\n *\n * @satisfies {Schema<MultiSelectConfig>}\n */\n static schema = Object.freeze(\n /** @type {const} */ ({\n properties: {\n idPrefix: { type: 'string' },\n checked: { type: 'boolean' },\n checkboxes: { type: 'object' }\n }\n })\n )\n}\n\n/**\n * Multi select config\n *\n * @typedef {object} MultiSelectConfig\n * @property {string} [idPrefix] - Prefix for the Select all\" checkbox `id` attribute\n * @property {boolean} [checked] - Whether the \"Select all\" checkbox is checked\n * @property {object} [checkboxes] - Checkboxes config\n * @property {string} [checkboxes.selector] - Checkboxes query selector\n * @property {NodeListOf<HTMLInputElement>} [checkboxes.items] - Checkboxes query selector results\n */\n\n/**\n * @import { Schema } from 'govuk-frontend/dist/govuk/common/configuration.mjs'\n */\n"],"names":["MultiSelect","ConfigurableComponent","constructor","$root","config","_this$config$checkbox","$container","querySelector","idPrefix","$checkboxes","checkboxes","items","querySelectorAll","selector","HTMLElement","length","setupToggle","$toggleButton","$toggle","addEventListener","onButtonClick","bind","append","Array","from","forEach","$input","onCheckboxClick","checked","id","document","createElement","$label","$span","classList","add","type","setAttribute","textContent","uncheckAll","checkAll","event","target","HTMLInputElement","filter","moduleName","defaults","Object","freeze","schema","properties"],"mappings":"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"}
@@ -16,3 +16,5 @@
16
16
  white-space: nowrap;
17
17
  @include govuk-font($size: 16, $weight: "bold");
18
18
  }
19
+
20
+ /*# sourceMappingURL=_notification-badge.scss.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/moj/components/notification-badge/_notification-badge.scss"],"names":[],"mappings":"AAAA,uCAAuC;;AAEvC;;+EAE+E;;AAE/E;EACE,qBAAqB;EACrB,eAAe;EACf,oBAAoB;EACpB,mBAAmB;EACnB,4BAA4B;EAC5B,qCAAqC;EACrC,gBAAgB;EAChB,kBAAkB;EAClB,mBAAmB;EACnB,+CAA+C;AACjD","file":"_notification-badge.scss","sourcesContent":["@use \"../../vendor/govuk-frontend\" as *;\n\n/* ==========================================================================\n #NOTIFICATION BADGE\n ========================================================================== */\n\n.moj-notification-badge {\n display: inline-block;\n min-width: 15px;\n padding: 5px 8px 2px;\n border-radius: 75px;\n color: govuk-colour(\"white\");\n background-color: govuk-colour(\"red\");\n font-weight: 600;\n text-align: center;\n white-space: nowrap;\n @include govuk-font($size: 16, $weight: \"bold\");\n}\n"]}
@@ -28,3 +28,5 @@
28
28
  float: right;
29
29
  }
30
30
  }
31
+
32
+ /*# sourceMappingURL=_organisation-switcher.scss.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/moj/components/organisation-switcher/_organisation-switcher.scss"],"names":[],"mappings":"AAAA,uCAAuC;;AAEvC;;+EAE+E;;AAE/E;EACE,4BAA4B;EAC5B,+BAA+B;EAC/B,gCAAgC;EAChC,6CAA6C;EAC7C,uBAAuB;AACzB;;AAEA;EACE,+CAA+C;EAC/C;IACE,UAAU;IACV,WAAW;EACb;AACF;;AAEA;EACE,0BAA0B;EAC1B,iCAAiC;EACjC,kCAAkC;EAClC;IACE,YAAY;EACd;AACF","file":"_organisation-switcher.scss","sourcesContent":["@use \"../../vendor/govuk-frontend\" as *;\n\n/* ==========================================================================\n #ORGANISATION SWITCHER\n ========================================================================== */\n\n.moj-organisation-nav {\n margin-top: govuk-spacing(2);\n margin-bottom: govuk-spacing(3);\n padding-bottom: govuk-spacing(1);\n border-bottom: 1px solid $govuk-border-colour;\n @include govuk-clearfix;\n}\n\n.moj-organisation-nav__title {\n @include govuk-font($size: 19, $weight: \"bold\");\n @include govuk-media-query($from: tablet) {\n width: 75%;\n float: left;\n }\n}\n\n.moj-organisation-nav__link {\n @include govuk-link-common;\n @include govuk-link-style-default;\n @include govuk-link-print-friendly;\n @include govuk-media-query($from: tablet) {\n float: right;\n }\n}\n"]}
@@ -25,3 +25,5 @@
25
25
  margin-bottom: 0;
26
26
  }
27
27
  }
28
+
29
+ /*# sourceMappingURL=_page-header-actions.scss.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/moj/components/page-header-actions/_page-header-actions.scss"],"names":[],"mappings":"AAAA,uCAAuC;;AAEvC;EACE,aAAa;EACb,4BAA4B,EAAE,qBAAqB;EACnD,+BAA+B;EAC/B,eAAe;EACf,8BAA8B;EAC9B,mBAAmB;EACnB,qBAAqB;AACvB;;AAEA;EACE;IACE,gBAAgB;EAClB;AACF;;AAEA;EACE;IACE,gBAAgB;EAClB;;EAEA;IACE,gBAAgB;EAClB;AACF","file":"_page-header-actions.scss","sourcesContent":["@use \"../../vendor/govuk-frontend\" as *;\n\n.moj-page-header-actions {\n display: flex;\n min-height: govuk-spacing(7); // Match button height\n margin-bottom: govuk-spacing(7);\n flex-wrap: wrap;\n justify-content: space-between;\n align-items: center;\n gap: govuk-spacing(2);\n}\n\n.moj-page-header-actions__title {\n [class^=\"govuk-heading-\"] {\n margin-bottom: 0;\n }\n}\n\n.moj-page-header-actions__actions {\n .moj-button-group {\n margin-bottom: 0;\n }\n\n .govuk-button {\n margin-bottom: 0;\n }\n}\n"]}
@@ -69,8 +69,6 @@
69
69
  display: inline-block;
70
70
  width: 10px;
71
71
  height: 10px;
72
- -webkit-transform: rotate(-45deg);
73
- -ms-transform: rotate(-45deg);
74
72
  transform: rotate(-45deg);
75
73
  border-style: solid;
76
74
  color: govuk-colour("black");
@@ -115,3 +113,5 @@
115
113
  color: govuk-colour("black");
116
114
  }
117
115
  }
116
+
117
+ /*# sourceMappingURL=_pagination.scss.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/moj/components/pagination/_pagination.scss"],"names":[],"mappings":"AAAA,uCAAuC;;AAEvC;EACE,qBAAqB;;EAErB;IACE,gCAAgC;;IAEhC,uBAAuB;IACvB,+BAA+B;;IAE/B,kCAAkC;IAClC,YAAY;;IAEZ,qCAAqC;IACrC,mBAAmB;;IAEnB;MACE,WAAW;MACX,qBAAqB;MACrB,WAAW;IACb;EACF;AACF;;AAEA;EACE,SAAS;EACT,UAAU;EACV,gBAAgB;EAChB;IACE,qBAAqB;IACrB,gBAAgB;IAChB,sBAAsB;EACxB;AACF;;AAEA;EACE,aAAa;EACb,yBAAyB;EACzB,uBAAuB;EACvB;IACE,qBAAqB;IACrB,gBAAgB;IAChB,sBAAsB;EACxB;AACF;;AAEA;EACE,qBAAqB;EACrB,uBAAuB;AACzB;;AAEA;;EAEE,YAAY;EACZ,0CAA0C;EAC1C,iBAAiB;EACjB,kBAAkB;AACpB;;AAEA;EACE,gBAAgB;EAChB,eAAe;AACjB;;AAEA;;EAEE,WAAW;EACX,qBAAqB;EACrB,WAAW;EACX,YAAY;EAGZ,yBAAyB;EACzB,mBAAmB;EACnB,4BAA4B;EAC5B,uBAAuB;AACzB;;AAEA;EACE,8BAA8B;EAC9B,yBAAyB;AAC3B;;AAEA;EACE,6BAA6B;EAC7B,yBAAyB;AAC3B;;AAEA;EACE,cAAc;EACd,eAAe;EACf,yBAAyB;EACzB,kBAAkB;EAClB,0BAA0B;EAC1B,iCAAiC;;EAEjC;;;;IAIE,qBAAqB;EACvB;;EAEA;;IAEE,yBAAyB;EAC3B;;EAEA;IACE,yCAAyC;EAC3C;;EAEA;IACE,4BAA4B;EAC9B;AACF","file":"_pagination.scss","sourcesContent":["@use \"../../vendor/govuk-frontend\" as *;\n\n.moj-pagination {\n // text-align: center;\n\n @include govuk-media-query($from: desktop) {\n margin-right: - govuk-spacing(1);\n\n // Alignment adjustments\n margin-left: - govuk-spacing(1);\n\n // Hide whitespace between elements\n font-size: 0;\n\n // Trick to remove the need for floats\n text-align: justify;\n\n &::after {\n content: \"\";\n display: inline-block;\n width: 100%;\n }\n }\n}\n\n.moj-pagination__list {\n margin: 0;\n padding: 0;\n list-style: none;\n @include govuk-media-query($from: desktop) {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n}\n\n.moj-pagination__results {\n margin-top: 0;\n padding: govuk-spacing(1);\n @include govuk-font(19);\n @include govuk-media-query($from: desktop) {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n}\n\n.moj-pagination__item {\n display: inline-block;\n @include govuk-font(19);\n}\n\n.moj-pagination__item--active,\n.moj-pagination__item--dots {\n height: 25px;\n padding: govuk-spacing(1) govuk-spacing(2);\n font-weight: bold;\n text-align: center;\n}\n\n.moj-pagination__item--dots {\n padding-right: 0;\n padding-left: 0;\n}\n\n.moj-pagination__item--prev .moj-pagination__link::before,\n.moj-pagination__item--next .moj-pagination__link::after {\n content: \"\";\n display: inline-block;\n width: 10px;\n height: 10px;\n -webkit-transform: rotate(-45deg);\n -ms-transform: rotate(-45deg);\n transform: rotate(-45deg);\n border-style: solid;\n color: govuk-colour(\"black\");\n background: transparent;\n}\n\n.moj-pagination__item--prev .moj-pagination__link::before {\n margin-right: govuk-spacing(1);\n border-width: 3px 0 0 3px;\n}\n\n.moj-pagination__item--next .moj-pagination__link::after {\n margin-left: govuk-spacing(1);\n border-width: 0 3px 3px 0;\n}\n\n.moj-pagination__link {\n display: block;\n min-width: 25px;\n padding: govuk-spacing(1);\n text-align: center;\n @include govuk-link-common;\n @include govuk-link-style-default;\n\n &:link,\n &:visited,\n &:hover,\n &:active {\n text-decoration: none;\n }\n\n &:link,\n &:visited {\n color: $govuk-link-colour;\n }\n\n &:hover {\n color: govuk-tint($govuk-link-colour, 25);\n }\n\n &:focus {\n color: govuk-colour(\"black\");\n }\n}\n"]}
@@ -5,7 +5,9 @@
5
5
  ========================================================================== */
6
6
 
7
7
  .moj-password-reveal {
8
- display: flex;
8
+ &__wrapper {
9
+ display: flex;
10
+ }
9
11
 
10
12
  &__input {
11
13
  margin-right: govuk-spacing(1);
@@ -15,3 +17,5 @@
15
17
  width: 80px;
16
18
  }
17
19
  }
20
+
21
+ /*# sourceMappingURL=_password-reveal.scss.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/moj/components/password-reveal/_password-reveal.scss"],"names":[],"mappings":"AAAA,uCAAuC;;AAEvC;;+EAE+E;;AAE/E;EACE;IACE,aAAa;EACf;;EAEA;IACE,8BAA8B;EAChC;;EAEA;IACE,WAAW;EACb;AACF","file":"_password-reveal.scss","sourcesContent":["@use \"../../vendor/govuk-frontend\" as *;\n\n/* ==========================================================================\n #PASSWORD SHOW/HIDE\n ========================================================================== */\n\n.moj-password-reveal {\n &__wrapper {\n display: flex;\n }\n\n &__input {\n margin-right: govuk-spacing(1);\n }\n\n &__button {\n width: 80px;\n }\n}\n"]}
@@ -0,0 +1,52 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('govuk-frontend')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', 'govuk-frontend'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.MOJFrontend = global.MOJFrontend || {}, global.GOVUKFrontend));
5
+ })(this, (function (exports, govukFrontend) { 'use strict';
6
+
7
+ class PasswordReveal extends govukFrontend.Component {
8
+ /**
9
+ * @param {Element | null} $root - HTML element to use for password reveal
10
+ */
11
+ constructor($root) {
12
+ super($root);
13
+ const $input = this.$root.querySelector('.govuk-input');
14
+ if (!$input || !($input instanceof HTMLInputElement)) {
15
+ return this;
16
+ }
17
+ this.$input = $input;
18
+ this.$input.setAttribute('spellcheck', 'false');
19
+ this.createButton();
20
+ }
21
+ createButton() {
22
+ this.$group = document.createElement('div');
23
+ this.$button = document.createElement('button');
24
+ this.$button.setAttribute('type', 'button');
25
+ this.$root.classList.add('moj-password-reveal');
26
+ this.$group.classList.add('moj-password-reveal__wrapper');
27
+ this.$button.classList.add('govuk-button', 'govuk-button--secondary', 'moj-password-reveal__button');
28
+ this.$button.innerHTML = 'Show <span class="govuk-visually-hidden">password</span>';
29
+ this.$button.addEventListener('click', this.onButtonClick.bind(this));
30
+ this.$group.append(this.$input, this.$button);
31
+ this.$root.append(this.$group);
32
+ }
33
+ onButtonClick() {
34
+ if (this.$input.type === 'password') {
35
+ this.$input.type = 'text';
36
+ this.$button.innerHTML = 'Hide <span class="govuk-visually-hidden">password</span>';
37
+ } else {
38
+ this.$input.type = 'password';
39
+ this.$button.innerHTML = 'Show <span class="govuk-visually-hidden">password</span>';
40
+ }
41
+ }
42
+
43
+ /**
44
+ * Name for the component used when initialising using data-module attributes.
45
+ */
46
+ }
47
+ PasswordReveal.moduleName = 'moj-password-reveal';
48
+
49
+ exports.PasswordReveal = PasswordReveal;
50
+
51
+ }));
52
+ //# sourceMappingURL=password-reveal.bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"password-reveal.bundle.js","sources":["../../../../src/moj/components/password-reveal/password-reveal.mjs"],"sourcesContent":["import { Component } from 'govuk-frontend'\n\nexport class PasswordReveal extends Component {\n /**\n * @param {Element | null} $root - HTML element to use for password reveal\n */\n constructor($root) {\n super($root)\n\n const $input = this.$root.querySelector('.govuk-input')\n if (!$input || !($input instanceof HTMLInputElement)) {\n return this\n }\n\n this.$input = $input\n this.$input.setAttribute('spellcheck', 'false')\n\n this.createButton()\n }\n\n createButton() {\n this.$group = document.createElement('div')\n this.$button = document.createElement('button')\n\n this.$button.setAttribute('type', 'button')\n\n this.$root.classList.add('moj-password-reveal')\n this.$group.classList.add('moj-password-reveal__wrapper')\n this.$button.classList.add(\n 'govuk-button',\n 'govuk-button--secondary',\n 'moj-password-reveal__button'\n )\n\n this.$button.innerHTML =\n 'Show <span class=\"govuk-visually-hidden\">password</span>'\n\n this.$button.addEventListener('click', this.onButtonClick.bind(this))\n\n this.$group.append(this.$input, this.$button)\n this.$root.append(this.$group)\n }\n\n onButtonClick() {\n if (this.$input.type === 'password') {\n this.$input.type = 'text'\n this.$button.innerHTML =\n 'Hide <span class=\"govuk-visually-hidden\">password</span>'\n } else {\n this.$input.type = 'password'\n this.$button.innerHTML =\n 'Show <span class=\"govuk-visually-hidden\">password</span>'\n }\n }\n\n /**\n * Name for the component used when initialising using data-module attributes.\n */\n static moduleName = 'moj-password-reveal'\n}\n"],"names":["PasswordReveal","Component","constructor","$root","$input","querySelector","HTMLInputElement","setAttribute","createButton","$group","document","createElement","$button","classList","add","innerHTML","addEventListener","onButtonClick","bind","append","type","moduleName"],"mappings":";;;;;;EAEO,MAAMA,cAAc,SAASC,uBAAS,CAAC;EAC5C;EACF;EACA;IACEC,WAAWA,CAACC,KAAK,EAAE;MACjB,KAAK,CAACA,KAAK,CAAC;MAEZ,MAAMC,MAAM,GAAG,IAAI,CAACD,KAAK,CAACE,aAAa,CAAC,cAAc,CAAC;MACvD,IAAI,CAACD,MAAM,IAAI,EAAEA,MAAM,YAAYE,gBAAgB,CAAC,EAAE;EACpD,MAAA,OAAO,IAAI;EACb;MAEA,IAAI,CAACF,MAAM,GAAGA,MAAM;MACpB,IAAI,CAACA,MAAM,CAACG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC;MAE/C,IAAI,CAACC,YAAY,EAAE;EACrB;EAEAA,EAAAA,YAAYA,GAAG;MACb,IAAI,CAACC,MAAM,GAAGC,QAAQ,CAACC,aAAa,CAAC,KAAK,CAAC;MAC3C,IAAI,CAACC,OAAO,GAAGF,QAAQ,CAACC,aAAa,CAAC,QAAQ,CAAC;MAE/C,IAAI,CAACC,OAAO,CAACL,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC;MAE3C,IAAI,CAACJ,KAAK,CAACU,SAAS,CAACC,GAAG,CAAC,qBAAqB,CAAC;MAC/C,IAAI,CAACL,MAAM,CAACI,SAAS,CAACC,GAAG,CAAC,8BAA8B,CAAC;EACzD,IAAA,IAAI,CAACF,OAAO,CAACC,SAAS,CAACC,GAAG,CACxB,cAAc,EACd,yBAAyB,EACzB,6BACF,CAAC;EAED,IAAA,IAAI,CAACF,OAAO,CAACG,SAAS,GACpB,0DAA0D;EAE5D,IAAA,IAAI,CAACH,OAAO,CAACI,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAACC,aAAa,CAACC,IAAI,CAAC,IAAI,CAAC,CAAC;EAErE,IAAA,IAAI,CAACT,MAAM,CAACU,MAAM,CAAC,IAAI,CAACf,MAAM,EAAE,IAAI,CAACQ,OAAO,CAAC;MAC7C,IAAI,CAACT,KAAK,CAACgB,MAAM,CAAC,IAAI,CAACV,MAAM,CAAC;EAChC;EAEAQ,EAAAA,aAAaA,GAAG;EACd,IAAA,IAAI,IAAI,CAACb,MAAM,CAACgB,IAAI,KAAK,UAAU,EAAE;EACnC,MAAA,IAAI,CAAChB,MAAM,CAACgB,IAAI,GAAG,MAAM;EACzB,MAAA,IAAI,CAACR,OAAO,CAACG,SAAS,GACpB,0DAA0D;EAC9D,KAAC,MAAM;EACL,MAAA,IAAI,CAACX,MAAM,CAACgB,IAAI,GAAG,UAAU;EAC7B,MAAA,IAAI,CAACR,OAAO,CAACG,SAAS,GACpB,0DAA0D;EAC9D;EACF;;EAEA;EACF;EACA;EAEA;EAzDaf,cAAc,CAwDlBqB,UAAU,GAAG,qBAAqB;;;;;;;;"}