govuk_publishing_components 44.1.0 → 44.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/govuk_publishing_components/components/_share-links.scss +32 -0
  3. data/app/views/govuk_publishing_components/components/_share_links.html.erb +4 -1
  4. data/app/views/govuk_publishing_components/components/docs/share_links.yml +36 -0
  5. data/lib/govuk_publishing_components/version.rb +1 -1
  6. data/node_modules/govuk-frontend/dist/govuk/all.bundle.js +336 -225
  7. data/node_modules/govuk-frontend/dist/govuk/all.bundle.js.map +1 -1
  8. data/node_modules/govuk-frontend/dist/govuk/all.bundle.mjs +334 -226
  9. data/node_modules/govuk-frontend/dist/govuk/all.bundle.mjs.map +1 -1
  10. data/node_modules/govuk-frontend/dist/govuk/all.mjs +3 -0
  11. data/node_modules/govuk-frontend/dist/govuk/all.mjs.map +1 -1
  12. data/node_modules/govuk-frontend/dist/govuk/assets/images/govuk-crest.svg +1 -0
  13. data/node_modules/govuk-frontend/dist/govuk/common/govuk-frontend-version.mjs +1 -1
  14. data/node_modules/govuk-frontend/dist/govuk/common/index.mjs +21 -1
  15. data/node_modules/govuk-frontend/dist/govuk/common/index.mjs.map +1 -1
  16. data/node_modules/govuk-frontend/dist/govuk/components/_index.scss +1 -0
  17. data/node_modules/govuk-frontend/dist/govuk/components/_index.scss.map +1 -1
  18. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.js +92 -26
  19. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.js.map +1 -1
  20. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.mjs +92 -26
  21. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.bundle.mjs.map +1 -1
  22. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.mjs +12 -21
  23. data/node_modules/govuk-frontend/dist/govuk/components/accordion/accordion.mjs.map +1 -1
  24. data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.js +86 -20
  25. data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.js.map +1 -1
  26. data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.mjs +86 -20
  27. data/node_modules/govuk-frontend/dist/govuk/components/button/button.bundle.mjs.map +1 -1
  28. data/node_modules/govuk-frontend/dist/govuk/components/button/button.mjs +6 -16
  29. data/node_modules/govuk-frontend/dist/govuk/components/button/button.mjs.map +1 -1
  30. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.js +89 -23
  31. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.js.map +1 -1
  32. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.mjs +89 -23
  33. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.bundle.mjs.map +1 -1
  34. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.mjs +10 -19
  35. data/node_modules/govuk-frontend/dist/govuk/components/character-count/character-count.mjs.map +1 -1
  36. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.js +113 -47
  37. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.js.map +1 -1
  38. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.mjs +113 -47
  39. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.bundle.mjs.map +1 -1
  40. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.mjs +7 -16
  41. data/node_modules/govuk-frontend/dist/govuk/components/checkboxes/checkboxes.mjs.map +1 -1
  42. data/node_modules/govuk-frontend/dist/govuk/components/details/_index.scss +7 -2
  43. data/node_modules/govuk-frontend/dist/govuk/components/details/_index.scss.map +1 -1
  44. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.js +86 -20
  45. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.js.map +1 -1
  46. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.mjs +86 -20
  47. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.bundle.mjs.map +1 -1
  48. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.mjs +6 -16
  49. data/node_modules/govuk-frontend/dist/govuk/components/error-summary/error-summary.mjs.map +1 -1
  50. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.js +87 -21
  51. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.js.map +1 -1
  52. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.mjs +87 -21
  53. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.bundle.mjs.map +1 -1
  54. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.mjs +7 -16
  55. data/node_modules/govuk-frontend/dist/govuk/components/exit-this-page/exit-this-page.mjs.map +1 -1
  56. data/node_modules/govuk-frontend/dist/govuk/components/footer/_index.scss +8 -10
  57. data/node_modules/govuk-frontend/dist/govuk/components/footer/_index.scss.map +1 -1
  58. data/node_modules/govuk-frontend/dist/govuk/components/header/_index.scss +8 -0
  59. data/node_modules/govuk-frontend/dist/govuk/components/header/_index.scss.map +1 -1
  60. data/node_modules/govuk-frontend/dist/govuk/components/header/fixtures.json +12 -0
  61. data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.js +87 -21
  62. data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.js.map +1 -1
  63. data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.mjs +87 -21
  64. data/node_modules/govuk-frontend/dist/govuk/components/header/header.bundle.mjs.map +1 -1
  65. data/node_modules/govuk-frontend/dist/govuk/components/header/header.mjs +7 -16
  66. data/node_modules/govuk-frontend/dist/govuk/components/header/header.mjs.map +1 -1
  67. data/node_modules/govuk-frontend/dist/govuk/components/header/template-with-full-width-border.html +24 -0
  68. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.js +86 -20
  69. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.js.map +1 -1
  70. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.mjs +86 -20
  71. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.bundle.mjs.map +1 -1
  72. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.mjs +6 -16
  73. data/node_modules/govuk-frontend/dist/govuk/components/notification-banner/notification-banner.mjs.map +1 -1
  74. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.js +89 -23
  75. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.js.map +1 -1
  76. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.mjs +89 -23
  77. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.bundle.mjs.map +1 -1
  78. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.mjs +9 -18
  79. data/node_modules/govuk-frontend/dist/govuk/components/password-input/password-input.mjs.map +1 -1
  80. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.js +113 -47
  81. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.js.map +1 -1
  82. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.mjs +113 -47
  83. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.bundle.mjs.map +1 -1
  84. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.mjs +7 -16
  85. data/node_modules/govuk-frontend/dist/govuk/components/radios/radios.mjs.map +1 -1
  86. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/README.md +15 -0
  87. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/_index.scss +168 -0
  88. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/_index.scss.map +1 -0
  89. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/_service-navigation.scss +4 -0
  90. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/_service-navigation.scss.map +1 -0
  91. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/fixtures.json +464 -0
  92. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/macro-options.json +138 -0
  93. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/macro.njk +3 -0
  94. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.js +249 -0
  95. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.js.map +1 -0
  96. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.mjs +241 -0
  97. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.bundle.mjs.map +1 -0
  98. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.mjs +85 -0
  99. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/service-navigation.mjs.map +1 -0
  100. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-default.html +57 -0
  101. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-html-navigation-items.html +49 -0
  102. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-large-navigation.html +153 -0
  103. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-long-service-name.html +20 -0
  104. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-navigation-with-a-current-item.html +58 -0
  105. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-navigation-with-an-active-item.html +58 -0
  106. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-non-link-navigation-items.html +49 -0
  107. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-service-link.html +20 -0
  108. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-service-name-and-navigation.html +63 -0
  109. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template-with-service-name.html +18 -0
  110. data/node_modules/govuk-frontend/dist/govuk/components/service-navigation/template.njk +102 -0
  111. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.js +93 -26
  112. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.js.map +1 -1
  113. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.mjs +93 -26
  114. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.bundle.mjs.map +1 -1
  115. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.mjs +13 -21
  116. data/node_modules/govuk-frontend/dist/govuk/components/skip-link/skip-link.mjs.map +1 -1
  117. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.js +93 -27
  118. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.js.map +1 -1
  119. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.mjs +93 -27
  120. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.bundle.mjs.map +1 -1
  121. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.mjs +13 -22
  122. data/node_modules/govuk-frontend/dist/govuk/components/tabs/tabs.mjs.map +1 -1
  123. data/node_modules/govuk-frontend/dist/govuk/components/warning-text/_index.scss +4 -3
  124. data/node_modules/govuk-frontend/dist/govuk/components/warning-text/_index.scss.map +1 -1
  125. data/node_modules/govuk-frontend/dist/govuk/core/_govuk-frontend-properties.scss +1 -1
  126. data/node_modules/govuk-frontend/dist/govuk/errors/index.mjs +16 -3
  127. data/node_modules/govuk-frontend/dist/govuk/errors/index.mjs.map +1 -1
  128. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend-component.mjs +49 -5
  129. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend-component.mjs.map +1 -1
  130. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend.min.css +2 -2
  131. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend.min.css.map +1 -1
  132. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend.min.js +1 -1
  133. data/node_modules/govuk-frontend/dist/govuk/govuk-frontend.min.js.map +1 -1
  134. data/node_modules/govuk-frontend/dist/govuk/init.mjs +72 -10
  135. data/node_modules/govuk-frontend/dist/govuk/init.mjs.map +1 -1
  136. data/node_modules/govuk-frontend/dist/govuk/settings/_colours-organisations.scss +3 -0
  137. data/node_modules/govuk-frontend/dist/govuk/settings/_colours-organisations.scss.map +1 -1
  138. data/node_modules/govuk-frontend/govuk-prototype-kit.config.json +5 -1
  139. data/node_modules/govuk-frontend/package.json +8 -8
  140. metadata +29 -4
  141. data/node_modules/govuk-frontend/dist/govuk/assets/images/govuk-crest-2x.png +0 -0
  142. data/node_modules/govuk-frontend/dist/govuk/assets/images/govuk-crest.png +0 -0
@@ -9,7 +9,10 @@ export { Header } from './components/header/header.mjs';
9
9
  export { NotificationBanner } from './components/notification-banner/notification-banner.mjs';
10
10
  export { PasswordInput } from './components/password-input/password-input.mjs';
11
11
  export { Radios } from './components/radios/radios.mjs';
12
+ export { ServiceNavigation } from './components/service-navigation/service-navigation.mjs';
12
13
  export { SkipLink } from './components/skip-link/skip-link.mjs';
13
14
  export { Tabs } from './components/tabs/tabs.mjs';
14
15
  export { createAll, initAll } from './init.mjs';
16
+ export { isSupported } from './common/index.mjs';
17
+ export { GOVUKFrontendComponent as Component } from './govuk-frontend-component.mjs';
15
18
  //# sourceMappingURL=all.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"all.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;"}
1
+ {"version":3,"file":"all.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="125" height="102" fill="#6E777A"><path d="m108.76 55.62-.27-.03-.74-1.97c.35-.44.53-1.14 0-1.49-.72-.28-2.74-2.56-3.34-1.08-.26.09-1.86.18-1.98.47a17.72 17.72 0 0 1-1.9-3.9c.31-1.64 4.72-3.7 4.72-3.7s-1.25-1.78-1.75-2.79c-.22.5-.42.29-.9.5 2.44-4.3 2.96-9.97-.28-14.04-.33-.7-.18-1.63-.5-2.33-.56-.73-.95-2.18-1.95-2.33 0 1.28-.13 2.53.5 3.72.66.82-.92 1.53-1.4.87.93-.1 1.1-.29.77-.82-4.05-.9-6.3 1.92-10.17 2.36-.34 0-.64.12-.83.42-2.38 3.17 2.96 1.01 3.42 3.11-.89.73-1.01.25-1.85.04-1.2.05-2.36.42-.86 1.42-.92 1.43-.87 1.93-2.74 2.05.81 1.13.64 2.76.85 4.04-1.33.24-2.23.87-2.26 2.28-.6.13-1.24-.18-1.66.46-.84-.69-1.8-.81-2.8-.83-.48-.36-1.66-1.2-2.93-1.84l.71-2.62 2.06-1.3-1.08-2.15c2.39-8.11 3.16-8.57 4.37-8.74l.06-.23-4.4-1.4-.08.3c1.1.8 1.47 2.12.96 3.68-1.17-.5-1.84-1.61-1.72-2.6l-.29-.08-1.47 4.85.23.07c.58-.83 1.6-1.3 2.76-1.1-1.36 4.29-7.5 2.95-6.4-.7.78-1.5 2.27-.54 1.55 1.04 3.45-1.2 1.41-6.1-1.53-3.17.97-1.98 1.52-3.53.3-5.44-1.59 1.01-2 2.84-1.69 5.27-1.94-4.4-5.33.13-2.58 2.43-.5-3.27 3.58-1.11.82 1.52-2.63 1.84-5.86-.27-5.95-3.52 1.52.13 2.67 1.02 2.83 2.14h.28l.19-5.54-.35-.01c-.23 1.12-1.47 2.07-3.02 2.1.1-1.7 1.1-3.04 2.37-3.26v-.31h-6.46v.31c1.28.22 2.27 1.55 2.38 3.26-1.56-.03-2.8-.98-3.03-2.1l-.34.01.18 5.55.28-.01c.16-1.12 1.32-2.01 2.83-2.14-.09 3.24-3.32 5.36-5.95 3.52-2.75-2.63 1.32-4.79.82-1.52 2.76-2.3-.64-6.83-2.58-2.43.3-2.43-.1-4.26-1.69-5.27-1.22 1.91-.67 3.46.3 5.44-2.94-2.93-4.97 1.98-1.53 3.17-.71-1.58.77-2.54 1.55-1.04 1.1 3.65-5.04 4.99-6.4.7 1.17-.2 2.18.27 2.76 1.1l.24-.07-1.48-4.85-.3.08c.14.99-.53 2.1-1.71 2.6-.5-1.56-.15-2.89.97-3.69l-.08-.28-4.41 1.4.06.22c1.21.17 1.98.63 4.37 8.74l-1.08 2.15 2.06 1.3.65 2.37.02-.01c0 .03-.01.04-.02.01-5.94 2.75-4.59 4.61-9.15 4.08-.41.93-.8 1.86-1.72 2.5a6.64 6.64 0 0 0-1.67-3.56c-.42-.49-1 .05-1.63.1-1.24 2.67-2.1.26-4.28 1.65.09 1.25.28 2.49.97 3.64a7.83 7.83 0 0 1-4.04-1.3c-4.85 5.36-9.92 10.51-14.07 16.42-2.21 2.9-8.14 1.2-6.58-2.79.72-2.91 4.97-2.29 4.7.6 2.1-2.31.76-4.61-2.46-4.1 2.95-1.26 4.72 1.13 7.38-2.15-2.03.04-3.75-.6-5.78-.13 2.57-1.52 6.09.74 8.27-3.45-1.9.2-3.63.99-5.6 1.28 11.84-11.18.45-11.73 1.9-16.56-.93.78-1.46 1.56-1.03 2.6-2.66-1.1-6.59-.77-7.66-3.96-.26 4.54 1.75 4.22 5.22 5.15-1.6-.19-3.18-.2-4.68-.75.31 2.04 1.87 2.47 3.71 2.28-1.8.98-1.39 3.52.44 4.39-1.17-6.57 8.78-4.32 4.24 1.72-2.11 3.1-5.16 5.42-7.72 8.13-.49-.83-1-1.66-2.11-1.54 1.95 2.23-.25 4.66-.77 6.96-.75 2.84 1.79 5.26 4.5 5.6-1.08 1.27-1.16 2.4-.33 3.44.82-4.18 6.94-3.24 7.52-7.76.1-.53.36-.95.96-1.19-2.76 3.09 3.87 9.62-2.36 10.38-.89.03-1.1.95-.62 1.61-2.57-.13-3.28.84-3.67 3.25l3.25-.84c-1.12 2.9-3.66-.17-3.24 5 1.04-.49 2.02-1.01 2.97-1.6.92 2.9-4.67 1.65-.47 6.28a8.57 8.57 0 0 1 1.95-3.03c-.51 1.46-.4 3.15 1.26 3.8l.22-1.07h.13c.24.96.28 2.3 1.22 2.86.31.12.48.3.59.62.17.54.67.68 1.16.74.62.13.78-.56 1.23-.84.13.76 1.04.89 1.5 1.54.33-3.77-4.72-2.4-3.56-4.9.45 1.52 1.88 1.2 2.88 1.81.4.63 1.34 1.16 1.82.28l1.31.97c-.98-4.47-3.33-1.7-4.8-4.05 1.02.04 2.12 1.55 3.23.52.6.61 1.06 1.32 1.51 2.04a3.29 3.29 0 0 0-1.5-3.32c-1.28-.77-3.02.6-4.12-.95-1.5-1.83-1.45-4.4-.67-6.52.71-1.63 2.7-2.24 3.63-3.78-.26 1.36-.13 3.73 1.43 4.17-.38-2.53 1.44-4.81 1.81-7.26.48-.62.5-1.1.07-1.77-.78-1.26-.99-2.77-1.84-4.01-1.33-1.85-2.97-1.9-.26-3.84-1.64 2.53-.3 1.6 1.12 3.99.26-.8 1.47-1.85-.04-1.85-2.39-1.16 3.1-4.18 4.35-4.25 1.23-.1 2.94.04 3.87-1.16C32.56 55 32 54.83 33 53.7c-.67-.39-1.26-.85-1.38-1.71l-1.85.63c.6-.67 2.37-2.03 2.56-.52.04.84.89 1 1.55 1.2-.48.7-1.28 1.4-.55 2.2.5.54.82 1.54 1.61 1.67l.63-2.31c1.74 1.8-1.75 2.8 3.03 4.43a9.56 9.56 0 0 1-.2-2.93c2.3 1.9-1 3.1 4.3 3.72-.58-.7-.72-1.46-.94-2.24.89.15 1.6.98 2.17 1.61.55.83.95 1.28 2.2.47.06.15.07.34.18.43.56.42.33.93.32 1.49h.15c.74-.74.8-1.58.56-2.5-.5-1.74-2.65-.36-3.4-2.13 1 .68 2.02 1.08 3.13.5.62.59.88 1.01 1.18 1.83.5-1.87-.08-3.78-2.07-3.22-.62.22-.88.17-1.5-.37.92.32 1.54-.15 2.13-.57.13.17.2.35.29.36.56.03.92.36 1.27.77.19-1.6-1.42-2.9-3.04-2.49-.4 1.97-2.07.86-3.4.6-2.04-1.2-3.12-3.47-4.93-4.95a3.6 3.6 0 0 0-3.9-3.83c2-.87 4.39.84 4.54 2.91.08.85.6 1.39 1.14 2.02 6.79-13.5 28.69-17.04 41.26-8.47 1.07.98 2.23 1.77 3.34 2.8.44-1.3.18-2.83 2.12-2.05l.37-.24a1.84 1.84 0 0 1 1.58-2.4v.84c-.5.09-.9.57-.82 1.1.39-.09.74.42.53.75a1 1 0 0 0 1.16-.18l.96.08c-.44 1.04-1.97 1.4-2.84.63.17.23-.58 2.53-.6 2.8a.73.73 0 0 1-.75.54l.38.61c.55-.3 1.32-.28 1.25-1.05.1-.44-.18-2.46.45-2.28.25.77-.23 1.65.34 2.4 1.82-.44 1.02-2.06 3.22-2.48.88-.08 2.72-.5 3.19.36-1.92-.5-4.4.02-4.83 2.19-2 .46-3.68 1.88-5.8 1.88-1.7.09-2.15 2.1-2.22 3.48-.29 1.58-.37 3.22-1.08 4.69-.35.56-.06 1.2.13 1.72.65.34 1.11 2.56 1.2 3.36 0 1.45 2.51 1.93 3.54 2.84.28-1.82-3.2-1.3-2.71-3.85.62 1.69 1.97 2.03 3.45 2.86-.46-1.7-.6-4.53-3-4.18-.93-1.27.42-1.34-.01-2.86.69.21 1.01.45 1.2.87l-.7-.22c.08 1.08 1.02 1.33 1.75 2.07-.12-1.76-.28-2.87-1.94-3.73-.94-.85.14-2.81.08-3.99-.03-.34 2.22-1.45 2.56-1.35 1.67.21 3.41-.05 5.02.36 1.61.5.23-2.95 2.83-1.13-1.88-.55-.74 1.48-2.1 1.59-.94 0-1.75-.08-2.74-.12 3.42 7.52 10.99 5.32 13.07 12.03 1.74-1.52.56-1.5.07-3.09 3.94 2.6-3.66 5.6-.8 10.16-.19-.52 1.6-2.65 1.8-3.08.32-.48.88-.5 1.23-.16l.57-1.17c-1.06-.57.86-3.03 1-3.73.2-.42.65-.62 1-.45l.53-1.46c-1-.27-.25-2.67-.33-3.34-1.4-1.26-2.56-2.84-3.65-4.3l.67-.1c-.07.32.05.68.33.87.48.19 2.33 1.96 2.91 1.54l.3.78c-.47.12-.55.77-.56 1.21.25.2.52.4.76.62.03-.16.01-.87.15-.98.22.29.62.3.87.06.22.12-.06 1.67-.03 1.87.27.3.53.6.77.9-.1-.7.78-3.43-.44-3.57ZM88.93 30.25l.76-.08c-.5-.35-.02-.84.4-.5.98.76-1 2-1.16.58Zm-39.44 7.11-2.07-1.3 1.1-2.2 2.98 1.06-2 2.44Zm6.78-1.7c-3.25.66-3.93-2.88-.67-3.47 3.24-.65 3.93 2.89.67 3.47Zm7.34-.27-3.2-2.24 3.2-2.23 3.2 2.23-3.2 2.24Zm10.19-.99c-.38 2.27-5.5 1.29-5.01-.95.38-2.26 5.5-1.29 5 .95Zm1.92.52 3-1.05 1.09 2.18-2.08 1.31-2.01-2.44Zm24.64-10.39c.6.65.85 1.35.85 2.14-.57-.19-.81-.8-.85-2.14Zm-2.69 4.2c-.79.53-1.5 1.32-2.3.25l-.54.1c1.2-1.83 1.1-1.51 2.84-.36Zm-6.61 6.64c.53.19 1.03.46 1.56-.06-.51 0-.67-.36-.81-.7-.25-1.73 2.6-1.12 3.66-1 2.68 1.62 7.23.6 5.65-3.24 1.24.75.81 2.86-.13 3.68-2.47 1.32-4.82.32-7.29 2.92-.37-1.19-1.8-1.12-2.3.18l-1.05.05c-.08-.68.49-1.18.71-1.83Zm9.33 11.35-.33.42c-2.06-2.32-9-4.99-12-4.56l.05-.53-.02.02 1.14-.72-.98-.8c.01-.11-.62-4.02-.62-4.02l1.72-.05s-.61.7-.64 1.27c.1.07.18.17.24.29.34-.15.71-.86.71-.86l.16 2.32s-.47-.67-.82-.79a.56.56 0 0 1-.13.23c.5 1.53 2.76 1.62 2.77.3-.08-.67-.84-.56-.8.16-1.24-.98.44-2.53 1.12-.97-.08-.9 0-1.41.7-1.85.47.58.4 1.13-.1 2 1.52-1.4 2.1.98.67 1.33.7-1.25-1.31-.86-.57.45.67 1.02 2.3.87 2.88-.24a.62.62 0 0 1-.08-.21c-.58-.1-1.43.37-1.43.37l.8-2.13s.33.91.8 1.2c.1-.08.2-.14.32-.17.09-.56-.48-1.44-.48-1.44l2.64 1.01s-1.05.26-1.38.73c.06.1.1.21.11.33.55.1 1.44-.34 1.44-.34l-.94 2.07s-.28-.9-.77-1.2a.68.68 0 0 1-.21.1 1.64 1.64 0 0 0 1.92 2.07c1.46-.44.3-2.08-.1-.7-.78-1.21 1.34-2.54 1.44-.52.26-.97.6-1.41 1.36-1.53.2.79-.1 1.21-.82 1.8 1.64-.67 1.71 1.57.13 1.45.55-.5.07-1.08-.47-.63-.94.97.82 2.37 2.2 1.67 0-.08.03-.17.07-.25-.35-.23-1.16-.26-1.16-.26l1.7-1.24s-.21.75-.05 1.15c.13-.02.25 0 .37.04.37-.37.39-1.34.39-1.34l1.26 1.56s-3.17 1.45-3.73 1.87l-.88-.1.43 1.24h-.03Zm6.83 6.38c-.4-.03-.73.31-.6.74a.25.25 0 0 1-.11-.04l-1.86-1.26a.3.3 0 0 1-.09-.38c.35-.01.73-.2.68-.61.14.18 2.14 1.23 1.98 1.55Z"/><path d="M84.8 44.17c-.14-.17-.17-.4-.05-.59-.22-.04-.6 2.03-.67 2.15.15.14.28.28.4.43.2.05.53.16.6-.12l.48-1.83c-.22.2-.58.22-.75-.04ZM56.86 95.9c-5.24-2.05-9.06 2.98-4.78 3.83-4.7.2-3.79-6.35-5.73-5.96 1.7 1.81 1.7 5.2 3.27 6.13 3.16 1.33 6.44 1.54 9.83 1.39-1.7-1.5-2.12-3.39-2.59-5.39ZM72.9 99.66c4.27-.84.48-5.89-4.78-3.83-.47 2-.88 3.9-2.59 5.39 3.39.16 6.67-.06 9.83-1.4 1.57-.93 1.57-4.3 3.27-6.12-1.94-.4-1.03 6.16-5.73 5.96ZM107.3 59.02c0 .1.04.2.1.26.24-.2.62-.12.79.12.27-.08.18-.92.24-1.12-.31-.33-.64-.65-.98-.94l-.14 1.68ZM106 65.25c.02-.24 1.34-2.4 1-2.59a.58.58 0 0 1-.62-.3c-.32-.14-1.16 2.22-1.3 2.37.41-.26.95.17.8.65a.3.3 0 0 0 .11-.13Z"/><path d="M121 55.27c-1.1.33-1.55 1.24-1.96 2.26-2.76-4.26-8.01-7.2-8.81-12.41.61-4.17 6.2-3.22 5.06 1.13 2.9-1.54 1.5-4.4-1.23-4.91 2.97.23 4.58 2.7 6.6-1.41-1.74.63-4.41.18-5.33.05 3.69-.5 5.7-.47 5.58-5-1.25 2.72-4.73 2.77-7.26 3.65.16-1.2-.22-1.95-1.2-2.34 1 6.63-11.7 4.47 2.25 18.77-1.7-.94-3.7-.62-5.36-1.66 1.3 3.44 3.48 2.84 6.33 4.04-3.06-.01-4.01 2.94-1.75 4.36-.59-2.28 2.58-3.85 4.17-2.07 3.62 4.6-3 11-8.89-.54.05.64-.4 1.21-1.03 1.02l-.66 1.82c1.34.5-.72 3.07-.87 3.81-.23.5-.75.64-1.14.37l-.65 1.34c.81.74-1.38 2.83-1.63 3.49-.25.37-.7.5-1.03.3l-.23.48.08.1c1.49 1.74 2.17 3.08 1.77 4.93 1.2-1.02 1.75-3.86.78-5.4 1.1 1.12 2.67 1.93 3.3 3.37a7.94 7.94 0 0 1-1.65 7.28c-.76.75-.56 1.15-.66 2.08-.5 1.48-2.28 1.6-2.96 2.85-.47 1.1-1.25 2-1.59 3.14 2.03-.31 1.68-3.1 3.6-3.68-.78 1.18-1.53 2.24-2.06 3.6 1.6-.41 4.61-.84 4.1-3.07-.37-1.03.64-1.71.59-2.7 1.26-.44.97-.95 1.58-1.93.28.6.29 1.1.26 1.74l-.37-.76c-.9 1.2-.15 2.38-.27 3.67 4.41-3.92-1.45-3.89 3.13-12.56 1.05-1.73-3-1.54-3.3-5.44-.28-1.69 1.22-3.07 1.53-4.68 1.77 3.1 7.93 3 7.1 6.97 1.23-.93 1.18-2.62.69-3.9 6.36-2.26 1.34-8.05 3.39-12.16Z"/><path d="M102.07 70.19c.14.06.26.16.31.3a.3.3 0 0 0 .29-.13c.05-.15 1.62-2.19 1.44-2.33-.17-.05-.33-.17-.39-.35-.15-.14-.36-.21-.51 0-.06.26-1.8 2.22-1.36 2.46.08 0 .15.02.22.05ZM101.15 70.6l.08.13.02-.06-.1-.08ZM39.6 79.41c.64.12 1.34.24 1.96-.04l-2.89-4.86c-1.7 2.08-4.67.81-6.54-.47-1.51-1.1 1.76-2.83.71-6.52 1.46 2.33-1.2 4.34 2.9 5.65-1.18-1.74-1.02-4-1.46-5.99-.06-.34-.23-.68.05-1.03.14-.48.17-1.12-.48-1.2-4.58-2.6-3.66-1.33-8.11-1.93-1.1 1.9 1.23 3.61.86 5.48-.33.92 1.08.88 1.06 1.77.31 1.4.16 3.34-1.45 3.88-.8.48-.16 1.49.54 1.72-1.42 2.53-.33 2.94 1.84 4.2.01-.97.03-1.83.44-2.66 3 1.97-1.47 2.3 4.46 4.68-.6-.98-.58-2.05-.67-3.03l1.66.38c.65 2.72 2.13 2.96 4.75 2.72-.94-.92-1.2-2.12-1.88-3.08.79.27 1.57-.27 2.25.33ZM93.03 64.27c-.8.13-1 .47-.84 1.26-.91 1.93-.93 4.28-2.48 5.91 3.33-.93 2.6-2.17 3.4-4.67-.17 3.39.01 3.34 1.25 5.67-2.56 1.78-6.75.28-8.15 3.74.39.45.9 0 1.41.12-.33.4-.47.87-1 1.22l.26-.75c-.96-.32-1.75 1.85-2.47 2.55 6.85-1.36-.82-3.35 12.67-4.9 2.38-1.12-2.25-2.86 2.43-5.8.41-1.6.66-3.25 1.55-4.7.2-.47-.13-1.14-.56-1.47-2.06 1.43-3.03-.88-7.47 1.82ZM23.91 36.42l.1-1.36-1.52-.26a2.1 2.1 0 0 1 1.98-.34c-.52 2.18.41 3.72 2.78 3.85.72-1.07 1.36-1.23 2.07-.48-3.12-.32-.8 2.94.79 1.84.42-.6 1.77-1.14 1.38-2-2.48-1.78-2.3.86-2.77-3.56l-.31-.03c-.23.84-1.07 1.5-1.75.7-.24-.27-.44-.51-.83-.58 1.7-1.34 3.71.6 3.59-2.55 1.89 2.34 2.05-.26 3.92-.3-.09 1.86-.47 1.71-2.09 1.6.53.4 2.54 2.4 1.37 2.58-.49-1.24-1.31-2.45-2.7-2.7-1.13 1.11-.58 2.36-.4 3.64 1-.34 1.85-.98 2.9-.9.36 1.03-1.3 1.6-.36 2.6 1.61.27 3.36.28 2.85-1.98-.53-.31-1.05-.52-1.6.05.03-.88.9-1.03 1.58-.86 1.48-1.57.99-3.64-.61-4.9.42-.61.87-1.04 1.63-1.19-.25.53-.8.73-.92 1.21L36 31.73c.86-.37 1.08-1.7.48-3.06-1.06.27-2.92 1.14-2.92 1.14-.9-.34-.52.1-.39.54-2.9.52-5.76 1.28-8.07 3.19-.41.3-.6.12-.74-.46-.27-.42-.4.3-.44.48 0 0-1.75.42-2.5 1.06.53.88 1.29 2.26 2.5 1.8Z"/><path d="M35.32 35.55c.27 1.3-.1 2.39-.96 3.41 1.29 2.3 3.48 4.03 4.45 6.5 2.16-3.99-.15-5.33-3.12-7.52 1.9.68 3.83 1.33 4.89 3.12.22-3.42-1.31-5.13-4.67-5.66l.03-.14c1.4-.07 2.8-.06 4.1.78-.34-1.06-1.21-2.63-2.48-2.5.45-.94.45-1.56-.01-2.13-.22.66-.64 1.07-1.33 1.1a4.09 4.09 0 0 1-.9 3.04ZM24.64 43.35c.4.96.99 2.07 1.97 2.47-.5-1.89.78-3.53 1.38-5.24.01 3.94-2.24 6.07 3.2 7.51-1.45-2.31-.49-5.12-1.4-7.5-.88-.5-1.87-.62-2.46-1.35-.16-.34-.46-.47-.78-.53-1.02-.22-1.97-.56-2.48-1.4-.75.23-1.2.2-1.89-.08-.06.84.66 1.68 1.61 1.36-.76 1.1-.34 2.09-.06 3.22a5.64 5.64 0 0 1 2.32-2.39c-.72 1.21-2 2.43-1.41 3.94ZM46.52 83.51c.74-.68-.26-1.07-.65-1.6-6.58-6.05-9.03-13.92-8.45-22.67l-.69-.34a27.66 27.66 0 0 0 9.8 24.61ZM105.23 33.13c-.62 1.19 1.19 1.68 1.2 2.81l-1.33-1.05c-.57 2.2 2.06 2.92 2.87 4.66 1.06-3.22.49-5.18-2.73-6.42ZM32.99 42.63c-1.75.1-1.5-2.07-2-3.28l-.86.97 1.1 3.69.8-.56c1.2.85 2.32.27 2.72-1.06.36.09.69.24.95-.02l-1.68-3.43c-.35.07-.68-.42-1.1-.03.4 1.07 1.84 3.22.07 3.72ZM104.9 27.73l-.03.14-1.67-.09c.62 1.95 2.9 1.01 4.35 1.9-.83-1.57-1.43-3.1-3.35-3.4.2-.92-.05-1.8-.63-2.15 0 .82-.33 1.41-1.09 1.72-.37 1.62 1.34 1.54 2.42 1.88ZM104.4 38.96l-.13.02c-.4 1.73.81 3.24 1.57 4.7 1.31-2.3 1.26-4.93-.84-6.76-.64 1.22.25 2.4.57 3.56l-.13.05-1.04-1.57ZM103.92 29.24c.75 1.77 1.95 1.35 2.73 2.5-.66-.2-1.23-.4-1.8-.58-.03 1.89 2.36 2.08 3.69 2.8-.22-3.04-1.71-4.2-4.62-4.72ZM97.01 26.05c.82 0 2 .52 2.68.05.01-2.57-3.16-2.23-4.96-2.29.54.97 1.22 1.92 2.28 2.24ZM88 62.7l-2.05-.15.07.91c.41.1.76.2 1.14.28.11 2.12-1.07 2.16-2.66 1.27-.48 2.69 3.9 2.42 3.5-2.3ZM86.49 54.14c-2.42 2.92-2.44 3.35 1.24 4.6l-.08-.8a7.35 7.35 0 0 1-2.07-.9l1.34-1.64-.43-1.26ZM75.24 43.48l1.11-.09c.39-1.43-.43-1.58-1.42-2.35-.4 1.18-1.45 1.76-2.05 2.76a2.5 2.5 0 0 0 2.08-1.12l.28.8ZM80.8 49.96c.34-.94 2.16-3.26 1.18-3.99-.45.27-1.4.16-1.3.86-.02 1.03-.01 2.06-.01 3.09l.12.04ZM98.87 23.63l.11-.16c-1.02-1.44-1.46-1.73-3.26-1.74.03 1.74 1.86 1.75 3.15 1.9ZM94.26 19.3c-.07 1.24.98 1.95 2.7 1.86-.44-1.25-1.34-1.92-2.7-1.85ZM90.2 32.13c-1.4-.65-2.55.17-3.97-.13.4 1.94 2.74.53 3.98.13ZM92.9 17.34c.36 1.24.85 1.5 2.14 1.33-.41-1.02-1.08-1.43-2.15-1.33ZM93.59 16.7c-.5-1.06-.76-1.2-1.82-1.09.44 1.05 1.07 1.44 1.82 1.09ZM87.13 51.13l1 1.69c1.3 0 .2-1.07-.1-1.53-.17-.18-.54-.18-.81-.27l-.09.11ZM83.4 52.62c.66-.38 1.34-.67 1.94-1.14l-.4-.56c-.57.55-1.9.73-1.55 1.7ZM92.01 14.98c.19-.67-.78-1.57-1.47-1.3.09.75.88 1.4 1.47 1.3ZM77.16 52.33ZM26.88 26.49c.36-.34-.19-.88-.53-.54-.36.33.18.88.53.54ZM27.35 27.47c.36-.33-.18-.88-.53-.54-.36.34.18.88.53.54Z"/><path d="m24.87 23.04-.86.06.45 1.12.6-.7.12.05.08 1.49c.16 1.3 2.16.5 1.36-.55l-.96-1.13a.43.43 0 0 0 .05-.11l.92.1-.45-1.12-.66.54a.5.5 0 0 0-.11-.05l-.08-1.07-1.1.43.69.83a.48.48 0 0 0-.05.11ZM22.42 28.86c.55.01.56-.85.01-.85-.55-.01-.56.85-.01.85ZM22.33 29.96c.55.02.56-.85 0-.84-.54-.02-.55.84 0 .84ZM24.1 26.2c.56 0 .57-.85.02-.85-.55-.01-.56.84-.01.84ZM22.77 27.85c.56.02.57-.84.01-.84-.54-.01-.56.85 0 .84ZM27.95 28.9c-.03-.42.28-1.25.28-1.25l-1.75.69s.8.4 1.08.72c-.37.13-.73.2-1.24-.04l.68 1.34c.15-.6.46-.94.7-.99.73 1.12-1.1 2.35-1.9 1.4-.22-.4.05-.84.52-.5-.07-.83-.8-.83-1.02-.22.02-.85-.2-1.36-1.1-1.61-.23.85.06 1.36.92 1.72-.5-.06-1.02.41-.36 1.01 0-.53.46-.6.7-.23.4.99-.78 1.37-1.75.37.22-.08.44-.05.75.02l-.92-1.15c.05.4.02.7-.07.88-.2-.23-.26-.43-.34-.87l-.7.61a8.22 8.22 0 0 1 2.34 2.38c1.22-1.2 6.16-3.23 8.06-3.17a8.09 8.09 0 0 1 .05-3.33l-.93.04c.25.38.34.56.35.86a1.78 1.78 0 0 1-.66-.6l.13 1.47c.18-.26.32-.44.53-.53 0 1.39-1.12 1.91-1.53.93-.07-.43.3-.7.67-.31.07-.89-.64-.87-.95-.5.37-.84.22-1.41-.54-1.87-.48.8-.28 1.32.33 1.92-.6-.3-1.12.2-.6.85.11-.56.61-.43.72.01.1 1.24-2.1 1.58-2.33.27.2-.12.67-.08 1.18.26l-.43-1.44c-.21.52-.51.71-.87.87ZM51.05 74.28l2.07 1.17c-1.65 1.99 1.31 2.84 1.15.91 1.1.47 5.45 1.79 3.7-.78-5.7.19-8.6-5.73-5.45-10.26 1.92.87 8.66-2.37 8.1.93.35.36.45.4 1.25.4 1.95-4.44-4.76-3.12-7.17-2.6-2.15.63-4.12-2.48-6.02-.77-.75.66-.26 2.13.76 2.18.9.02 1.17-1.22.36-1.6 1.77-.6.92 2.22.28 2.94-2.03-1.04-2.37 2.2-.36 1.35.09.58.12 1.15-.02 1.7-2.2-.47-1.61 2.65.03 1.4.47.44.7 1.13.75 1.8-2.2.3-.44 3.1.58 1.23Z"/><path d="m57.42 77.66-.3-.1c-.16.4-.4 1.16-.03 1.41l1.85.79L61.3 78l.64-9.41-.7.05c-.19.02-1.48 10.88-2.15 10.24.13-.72 1.7-10.24 1.7-10.24l-.7-.1-.08.5-2.62-3.4-.34.16 2.8 3.65-.18.65c-.26-.17-2.96-3.88-3.23-4.23l-.55-.04 3.64 4.7-.2.63-4.08-5.31h-.52l4.42 5.76-.23.83-4.86-6.53-.64.01 5.37 7.02-.2.65-5.92-7.67-.1.6s5.51 7.18 5.85 7.65c-.28.88-.06.96.33 1.69.2.82-.36 2.09-1.34 1.79Z"/><path d="m57.98 74.67-5.68-7.45s-.1.36-.16.51l5.44 7.13.4-.19ZM52.29 69.74c1.3 1.64 2.6 3.32 3.87 4.98.2.02.55.1.55.1l-4.63-6.08s-.08.62.2 1ZM62.18 66.97c-.63-.05-1.3-.18-1.9-.24-1.2 1.03.14 1.62 1.03 1.54.77.2 1.79-.8.87-1.3ZM61.99 93.54c-.19.84 1.15 1.11 1.31.26.19-.84-1.15-1.1-1.31-.26ZM63.2 88.49c.22-1.04-1.44-1.38-1.64-.33-.23 1.04 1.43 1.38 1.63.33ZM57.53 85.7c.23-1.03-1.43-1.37-1.63-.32-.23 1.04 1.43 1.38 1.63.33ZM66.64 95.91c-.67 3.76-2.48 5.46-4.1 5.46-1.6 0-3.42-1.7-4.1-5.46.21.19.41.44.64.74l.35.45.5-.3c.2-.13.41-.24.6-.31-.21.43-.29.95-.18 1.48a2.28 2.28 0 0 0 2.2 1.93c1.08 0 1.98-.8 2.2-1.93.1-.53.02-1.05-.2-1.48.2.07.4.18.61.3l.5.31.35-.45c.23-.3.42-.55.63-.74m.79-1.02c-.95.1-1.43.72-1.93 1.37a3.22 3.22 0 0 0-1.57-.54c-.3 0-.57.08-.82.27 1.73.68 1.11 3.27-.57 3.27-1.68 0-2.3-2.59-.57-3.27-.24-.2-.52-.27-.82-.27a3.2 3.2 0 0 0-1.57.54c-.5-.65-.98-1.28-1.93-1.37.52 4.74 2.7 7.11 4.89 7.11 2.18 0 4.37-2.37 4.89-7.11ZM51.8 82.46c.73-.86-1.81-1.98-2.18-2.46-.3-.18-.68-.14-.88.12-.72.82 1.77 1.96 2.11 2.42.31.24.74.2.96-.08Z"/><path d="M51.48 84.3c2.8 0 2.44-4.4-.32-3.93 1.28.69 2.4 2.5.4 3.03-.75.15-1.52-.65-2.07-1.04.02 1.07.9 1.94 2 1.94Z"/><path d="M47.5 85.03c.61 1.16 4.22 4.31 5.2 2.82-1.76-.88-4.74-3.05-3.6-5.82-2.59-1.57-.3-4.08 1.72-1.95 2.14-1.31 4.53-.37 6.65 1.08.76-1.62-2.94-2.75-3.8-3.23-1.08-.36-4.51.4-5.66.46-.78.1-1.34.79-1.27 1.56.17.83.14 4.42.76 5.08ZM79.27 22.87l1.6.5a19.58 19.58 0 0 0-12.7-10.61c-.14.36-.26.76-.37 1.17 4.88 1.22 9 4.5 11.47 8.94ZM46.36 23.38l1.6-.5a18.3 18.3 0 0 1 11.47-8.95c-.12-.41-.24-.8-.38-1.17a19.58 19.58 0 0 0-12.7 10.62ZM75.62 14.87c1.14.02 1.14-1.75 0-1.74-1.14-.01-1.14 1.76 0 1.74ZM71.6 12.6c1.13.02 1.13-1.75 0-1.74-1.15-.01-1.15 1.76 0 1.74ZM69.4 11.82c1.15.01 1.15-1.76 0-1.74-1.13-.02-1.13 1.75 0 1.74ZM73.67 13.62c1.14.02 1.14-1.75 0-1.73-1.14-.02-1.14 1.75 0 1.73ZM77.42 16.32c1.14.02 1.14-1.76 0-1.74-1.13-.02-1.13 1.76 0 1.74ZM81.98 22.85c-.02 1.13 1.78 1.13 1.76 0 .02-1.12-1.78-1.12-1.76 0ZM80.92 20.81c-.02 1.13 1.77 1.13 1.76 0 .01-1.13-1.78-1.13-1.76 0ZM79.06 17.95c1.14.01 1.14-1.76 0-1.74-1.14-.02-1.14 1.75 0 1.74ZM79.65 18.87c-.02 1.13 1.77 1.13 1.76 0 .01-1.12-1.78-1.12-1.76 0ZM51.6 14.87c1.14.02 1.14-1.75 0-1.74-1.14-.01-1.14 1.76 0 1.74ZM49.8 16.32c1.14.02 1.14-1.76 0-1.74-1.14-.02-1.14 1.76 0 1.74ZM44.36 23.72c1.14.02 1.14-1.75 0-1.73-1.14-.02-1.14 1.75 0 1.73ZM53.55 13.62c1.14.02 1.14-1.75 0-1.73-1.13-.02-1.13 1.75 0 1.73ZM46.7 19.74c1.14.02 1.14-1.75 0-1.73-1.14-.02-1.14 1.75 0 1.73ZM45.43 21.68c1.14.02 1.14-1.76 0-1.74-1.14-.02-1.14 1.76 0 1.74ZM57.82 11.82c1.14.01 1.14-1.76 0-1.74-1.14-.02-1.14 1.75 0 1.74ZM48.16 17.95c1.14.01 1.14-1.76 0-1.74-1.14-.02-1.14 1.75 0 1.74ZM55.63 12.6c1.14.02 1.14-1.75 0-1.74-1.14-.01-1.14 1.76 0 1.74ZM65.12 20.68h1.17c0-3.67.54-6.85 1.5-8.95.33-.67-.75-1.17-1.06-.48-1.4 3.03-1.6 7.2-1.6 9.43ZM60.93 20.68h1.17c0-2.23-.21-6.4-1.61-9.43-.31-.69-1.4-.2-1.07.48.97 2.1 1.5 5.28 1.5 8.95ZM63.61 20.66c1.24.02 1.24-1.9 0-1.88-1.23-.02-1.23 1.9 0 1.88ZM63.61 18.3c1.24.02 1.24-1.9 0-1.88-1.23-.02-1.23 1.9 0 1.88ZM63.61 15.94c1.24.02 1.24-1.9 0-1.88-1.23-.02-1.23 1.9 0 1.88ZM62.94 13.64c.4-.21.94-.21 1.35 0 1.36-2.08-2.72-2.08-1.35 0Z"/><path d="M64.37 11.66c1.06-1.96-2.58-1.95-1.51 0a1.52 1.52 0 0 1 1.5 0Z"/><path d="M63.04 3.73c-.16 1.2-.8 2.13-1.59 2.28v.3H63a1.1 1.1 0 0 0-.2.2c-2.75.6-3.03 4.76-.4 5.74-1.03-.99-.24-2.87 1.21-2.82 1.45-.05 2.24 1.83 1.21 2.82 2.64-.98 2.35-5.14-.4-5.75a.97.97 0 0 0-.2-.19h1.55v-.3c-.8-.15-1.43-1.08-1.58-2.28 1.21.15 2.16.78 2.3 1.56h.31V1.02h-.3c-.15.78-1.1 1.41-2.31 1.57.15-1.2.79-2.14 1.58-2.28V0h-4.32v.3c.8.15 1.43 1.08 1.59 2.29-1.22-.16-2.16-.79-2.3-1.57h-.32v4.27h.31c.15-.78 1.09-1.41 2.3-1.56ZM101.14 70.59h.01l-.28-.49c.03.2.12.38.27.49ZM100.42 72.4c-1.22-.76-1.9 2.59-2.35 3.16-.22.49-.03 1.02.42 1.17l-.9 1.85c-.48-.08-.9.29-.9.84.18.72-.55 3.85.74 3.89v.86c-3.1.56-2.64 5.39.55 5.31 3.17.08 3.66-4.71.6-5.3v-.83c.48.08.9-.28.9-.84-.17-.7.49-3.71-.65-3.87l.69-1.41c1.16.62 1.84-2.64 2.28-3.2.2-.45.05-.97-.36-1.14l.52-1.06c-.14-.2-.44-.64-.73-1.1l-.81 1.67Zm-.58 14.4c-.75 4.3-6.34.04-2.34-1.78.19.42.82.44 1 .02.78.22 1.34.93 1.34 1.76Zm-1.27-4.4c.08-.62-.73-.96-1.05-.44.09-.23-.22-2.57.22-2.57.18.13.42.16.62.01.14.03.24.16.24.32v2.53l-.03.15Zm2.36-8.53c-.14.15-1 2.6-1.3 2.5-.11-.2-.38-.33-.61-.26-.13-.06-.18-.24-.11-.4.16-.17.97-2.67 1.34-2.5.1.24.4.4.64.33.07.08.09.21.03.33ZM38.28 66.98l.27 1.05 4.85-.6-.24-.94c-.24-.05-3.26.5-3.26.5s2.87-3.32 2.8-3.71l-4.9.55.1.83 2.88-.4s-2.39 2.67-2.5 2.72ZM40 73.13c2.35 2.22 6.03-1.33 3.6-3.61-2.34-2.25-6.08 1.33-3.6 3.61Zm.28-2.47c1.03-1.85 4.45-.75 3.03 1.35-1.06 1.79-4.42.78-3.03-1.35ZM43.26 78.37l.82 1.12a11.23 11.23 0 0 1 3.94-2.83l-.82-1.12a5.73 5.73 0 0 1-1.55 1.4l-1.26-1.72c.53-.4 1.23-.9 1.82-1.03l-.82-1.12a11.23 11.23 0 0 1-3.94 2.82l.82 1.12a5.7 5.7 0 0 1 1.55-1.38l1.25 1.72c-.53.39-1.22.88-1.81 1.02ZM42.8 61.64l.06-1.02c-1.38.26-3.61.25-4.99-.01l-.07 1.02c1.39-.25 3.62-.25 5 .01ZM77.96 82.36c2.97-1.29 2.3-4.2-1.04-2.87-1.4-.4.37-1.8 1.3-1.5l.02-.01-.7-.82c-1.05.45-2.73 1.85-1.84 3.04.62.78 1.87-.05 2.69-.04 1.36.24-.1 1.64-.94 1.56l-.02.02M86.09 72.17l.84-2.82c-.43.03-4.28-1.08-4.62-1.33l-.8 2.68.8.68.02-.01c-.06-.62.03-1.32.25-2.09l1.47.42c-.15.42-.4 1.38-.6 1.63l.72.1.47-1.56 1.4.4c-.17.52-.4.93-.7 1.22l.75.68ZM84.14 75.93l.46-.87-3.8-2.52-.42.79c.15.18 2.62 1.63 2.62 1.63s-4.08.53-4.27.84l3.8 2.58.44-.64-2.28-1.46s3.34-.38 3.45-.35ZM73.66 85.15l2.64-1.52c-.34-.25-2.4-3.58-2.47-3.99l-2.5 1.44.1 1.02h.02c.4-.5.96-.94 1.68-1.36l.78 1.27c-.41.2-1.28.74-1.61.79l.46.56 1.46-.84.75 1.2c-.5.28-.95.42-1.38.44l.07.99ZM44.19 52.1c-.8-.62-1.8.48-2.6.66-1.38.08-.3-1.61.54-1.73V51l-.66-.49c-1.24.63-2.19 3.3-.18 3.36.43.02 1.52-.73 1.88-.81.94-.18.64 1.08.08 1.38.28-.02.57-.05.84.02.53-.73.86-1.8.1-2.37ZM45.16 50.66c-2.2-.14-2.66-3.9 0-3.34v-.91c-3.45-.2-3.4 5.22 0 5.1v-.85ZM50.64 43.99h1.52l-1.04-1.64c.53-.3 1.65-.75 2.15-.72l-1.2-.9-3.67 2.17.42 1.4h.02c.3-.57.74-1.04 1.23-1.3l.56.99ZM61.37 43.36l.01.02c-.73.58-1.67.34-2.45-.07-2.3 1.27-4.76-1.71-2.93-3.62 1.94-2.28 5.77.3 3.92 2.82.6.46 1.09.74 1.45.85Zm-2.8-.73c1.84-.71.24-3.53-1.39-2.86-1.82.69-.25 3.53 1.39 2.86ZM62.06 41.34c-.01-.78.1-2.16-.24-2.83h1.64c-.27.72-.74 4.06.66 3.9.55 0 1.1-.38 1.08-.95-.02-.8.1-2.27-.24-2.96h1.64a9.8 9.8 0 0 0 0 4.72H65.2c.03-.1.05-.25.05-.47-1.42 1-3.33.5-3.2-1.41ZM68.99 43.66c.29-1.16.7-3.13 1.35-4.11l-1.27-.42c.01 1.24-.66 3.18-1.09 4.37l1.01.16ZM76.74 59.37h.8V46.62h-11.9v12.75h11.1ZM72.19 59ZM71 59Zm6.15-6.56Zm-11.1 1.12v.12c.02-.24.41-.06.22.1l.06.06c.4.05.45-.54.05-.56v-.01l.48-.2v-.15l-.48-.2v-.02c.4-.02.34-.6-.05-.56l-.06.06c.2.17-.2.34-.22.1v.15-5.07h.4V47h4.42c.25.04.04.37-.12.2l-.06.06c-.05.38.6.4.6.02l.24.47h.15l.22-.47c0 .39.65.36.6-.02l-.05-.06c-.16.17-.37-.16-.12-.2h4.42v.38h.4c-.04-.09.16 6.22-.21 4.82l-.06-.06c-.4-.04-.45.54-.05.57l-.48.22v.14l.48.2v.01c-.4.02-.34.6.05.56l.06-.06c.37-1.43.17 5.02.21 4.84h-.4V59h-4.42c-.25-.04-.05-.38.12-.2l.06-.06c.05-.38-.59-.42-.6-.04h-.01l-.23-.45h-.15l-.22.45h-.01c-.02-.38-.64-.34-.6.04l.06.05c.17-.17.37.17.11.2h-4.4v-.37h-.41v-5.06Z"/><path d="M79.3 59.86c.01-.26-.29-.46-.54-.37v.06c-.48 2.1-.25-6.56-.29-6.24l.44.18v-1.01l-.44.18v-6.39c.07-.32.57-.04.3.16v.06c.59.19.76-.75.12-.76l.4-.68-.1-.1s-.7.4-.71.39c-.01-.58-1-.44-.82.13h.06c.21-.26.52.2.18.26h-5.95l.18-.4h-1.08l.19.4H65.3c-.36-.05-.06-.52.16-.27h.06c.2-.56-.81-.7-.82-.12l-.72-.38-.1.09.4.68c-.63 0-.46.95.14.76v-.06c.46-2.1.24 6.52.28 6.22l-.42-.17v1l.42-.16c-.04-.16.18 8.28-.28 6.23v-.06c-.6-.18-.77.75-.14.76l-.4.68.1.1c.01 0 .71-.4.72-.39 0 .59 1.01.44.82-.12h-.06c-.1.13-.34.06-.34-.1 0-.09.07-.16.16-.17h5.96l-.19.4h1.08l-.19-.4h5.95c.09.01.16.08.16.17 0 .16-.24.23-.34.1h-.06c-.19.56.81.7.82.12l.71.38.1-.09-.4-.68c.23 0 .42-.17.42-.39Zm-7.2-13.74h5.96v13.75H65.12V46.13h6.98ZM77.13 53.68v.01ZM77.13 52.3ZM66.06 53.7v-.02.01ZM66.06 52.3ZM23.05 29.52l.28-.23a3.93 3.93 0 0 1 1.58-2.87 3.77 3.77 0 0 0-.18-.23 4.24 4.24 0 0 0-1.68 3.33ZM25.84 27.87l.27-.1a5.81 5.81 0 0 0-1.15-2c-.13-.13-.34.07-.21.2.4.4.79 1.07 1.09 1.9ZM23.35 26.94c.55.01.56-.85 0-.85-.54 0-.56.85 0 .85ZM31.47 25.12c-.38.4-1.01-.19-.62-.58.37-.4 1 .2.62.58ZM32.32 25.83c-.38.4-1-.2-.61-.59.37-.4 1 .2.61.59ZM28.36 24.45c-.38.4-1-.2-.62-.59.38-.4 1 .2.62.59ZM30.5 24.67c-.38.4-1.01-.2-.62-.59.37-.4 1 .2.62.59ZM31.5 26.03l-.36.04a4 4 0 0 0-3.18-.9l-.04-.29c1.26-.2 2.57.23 3.59 1.15ZM28.28 26.84l-.25.14a5.8 5.8 0 0 1-.64-2.22c0-.19.29-.2.29-.02 0 .56.22 1.31.6 2.1ZM29.43 24.43c-.38.4-1-.19-.62-.58.38-.4 1.01.2.62.58ZM75.3 69.76c1.23-.02 4.1-1.36 2.02-2.48-1.17-.2-2.33.37-3.45.63-4.52 1.78-1.87-.4-4.67-.16.94 2.37 3.33 1.15 5.12.6.06.26-.27.32-.23.58l1.74-.36c.25-1.16 2.4-1.17 1.41 0-2.47 1.06-5.39.86-7.97 1.59-1.73 4.48-4.74 1.43-4.71 2.72-.68.06-.67.7.02.65.02 1.3 3.35-.2 3.97-.6l.43-.9c1.01.48 1.73-.96 2.6-1.22.88-.17 2.02-1.02 2.77-.24.83.91 2.07-.47 2.8.44-.27.71.09.4.21.84 0 .4.66.4.67 0 0-.18.02-.29.2-.36.37-.56-.42-1.17-.7-1.64-.6-.58-1.62.53-2.23-.09Z"/><path d="M64.13 67.79c.2.07.13.3.22.42 1.07.07 2.13-.2 3.2-.34.8 0 .78-.7 1.37-.8 1.41.08 2.3-1.16 3.63-1.36 1.07-.3 2.51-.7 3.46.05.23.25.56.3.9.24.45-.08 1-.18 1.23.34l-.26.27.16.32c.22-.01.25.16.34.3.12.2.4.2.45 0 .05-.25.31-.12.4-.34.03-.64-.1-1.45-.76-1.77-.32-.3-1.6.31-1.63-.31.95.21 2.76-1.01 1.51-1.8-2.11-.5-4.43.52-6.58.76-.84.19-.42-1.18-2.29-.8 1.2 2.47 3.8.72 5.8.7.02.22-.38.2-.28.48.58-.18 1.58.13 1.91-.45.18-.7 1.68-.53 1.24.28-1.12.7-2.8.38-4.12.53-1.61.13-3.37.17-4.89.73-.3.93-.71 1.88-1.8 2.1-.75-.72-1.85.14-2.66-.6-.26.05-.31.2-.42.4-.4.16-.53.38-.12.65ZM76.04 74.3c-2.12-.26-1.8 1.18-2.84.84.19-.23.7-.36.54-.7-1.55.66-3.18 1.14-4.72 1.83-.79.83-.53 2.47-2.3 2.62-.06.86-1.28 1.44-2.03 1.05-.3.28-.17.36-.12.62-.26.23-.6.75-.05.75.17-.04.3-.3.48-.21l-.04.35c.15 0 .35.04.4-.02.24-.3.59-.05.86-.29.91-.6 2.21-1.16 2.14-2.42 1.6-.7 2.54-3.27 4.63-2.37 1.04.56 1.32-1.1 2.25-1.14.26.61.38.56.72.36.58.44.48-.26.71-.58.03-.32-.3-.69-.63-.68Z"/><path d="M66.48 64.23c-.34.95 0 2.21.9 2.74a2.48 2.48 0 0 0 1.32-2.88c.24-.2.54-.3.45-.65-.16-.38-.77-.1-.92-.54-.39-.52-.9-.1-1.2.25-.24.03-.47-.09-.69.02-.22.4.4.65.14 1.06ZM66.21 77.55c1 2.36 2.5-.64 2.12-1.91.69-.56.5-.9-.33-.95-.3-.62-.93-.68-1.36-.16-.16.19-.38.12-.58.14-.43.2-.2.66.18.76-.2.72-.31 1.43-.03 2.13ZM68.95 68.81c-.2-.11-.44-.12-.65-.1-.36-.91-1-.57-1.51-.02-.77-.3-.66.38-.25.75-.38.93-.12 2.32.88 2.72 1.06-.44 1.35-1.7 1.28-2.73.33-.05.6-.42.25-.62ZM76.52 71.9c-1.9-.63-4.87 3.44-6.13 2.24-.3-.66-1.24-.58-1.83-.4.7.5 1.1 1.62 2.18 1.25 1.21-.23 2.17-1.2 3.22-1.65.03.35-.33.5-.48.83.72-.23 1.37-.43 1.9-.88-.09-1.97 2.76-.6.03.62.49.01.82.23 1.15-.17.63-.55.66-1.35-.04-1.85ZM72.22 76.46c-.56.13-1.11.18-1.46.74l.42.55c-.27.68-.95.57-1.6.6l.14.47c-.27.15-.38.39-.32.72l.24.08c.18-.22.5-.44.58-.03a4.57 4.57 0 0 0 2.76-2.15 2.03 2.03 0 0 1-.76-.98Z"/><path d="M70.69 72.4c-.25 0-.3.31-.13.46.16.18.33-.02.52.03l.01.28c1.02.06 2.55-.84 3.1-1.65l-.64-.97c-.55.18-1.18.16-1.5.66l.56.59c-.38.2-.8.55-1.21.22-.17-.15-.63-.08-.51.2.01.05-.01.1-.02.16l-.18.02ZM66.37 78.52c-.38-.73-.97-1.39-1.24-2.15.33-.47.18-1.06-.45-.68-.15-.32-.39-.38-.68-.3-.08.2-.13.4.1.55l-.01.1-.2.06c-.16.4.24.63.38.94.44.7 1.09 2.35 2.1 1.48ZM66.37 66.55c-.06-1-1.23-1.65-.88-2.66.1-.19.07-.41-.13-.56a.73.73 0 0 1-.6-.08c-.44-.21-.5.27-.46.58l-.29.13c.3.86 1.22 3.03 2.36 2.59ZM64.1 69.96c.43.65.55 1.69 1.29 2.06.33 0 .85.3 1.05-.09-.22-.77-1.19-1.22-1.05-2.1.05-.21-.03-.42-.2-.6-.38.1-1.16-.73-.88.27-.23.08-.37.24-.2.46ZM47.32 49.85c.16.01.32-.17.49 0l-.05.25c1.03.45 2.17-.05 3.2-.33.4-.12.63-.53 1.07-.52 1.06.08 1.66-.8 2.57-1.05 1.12-.22 2.26-.4 3.4-.37 1.32 1.78 1.56.27 2.74.87l-.1.53.3.1c-.11.44.55.7.64.14.02-.07-.02-.15.08-.17.7-.37-.38-2.21-1.12-1.73-.38.18-.88.35-1.18-.1.66-.26 1.47-.2 1.91-.8.34-.4.3-1.2-.33-1.42-1.65-.45-3.4.37-5.06.52-3.13.84-.9-.67-3.38-.65.89 2.51 3.56.9 5.41.71-.13.3-.44.4-.56.67.66-.12 1.52.12 2-.38.26-.69 1.92-.77 1.52.17-1.56 1.51-6.45.1-8.63 1.06-.33.99-.9 1.64-1.86 1.91-.77-.48-1.13.07-1.9-.15-.22-.23-.44-.5-.78-.24v.36c-.36-.1-.78.4-.38.63Z"/><path d="M50.03 46.02c-.58 1.04-.4 1.99.28 2.87 1.28.04 1.8-1.7 1.6-2.74l.39-.27-.1-.38-.65-.03c-.47-.6-.75-.6-1.3-.07-.25-.1-.46-.03-.63.19.09.19.21.33.41.43ZM56.3 48.27c-.06.29.2.42.26.64-.35.22-.72.24-1.09.28-.19-.19-.27-.53-.6-.43-.2.04-.09.24-.23.32-.25-.02-.39.1-.43.35l.35.2c-.28 1.31 3.34-.05 3.87-.44-.17-.3-.4-.5-.47-.84-.15-.58-1.22-.1-1.66-.09ZM49.53 48.43c-.04-.46-.16-1-.52-1.32-.41-.42-.55-1-.13-1.44-.2-.2-.49-.04-.7-.32-.25-.3-.41.05-.47.36-.74.1-.32.35-.15.73.24.68 1.11 2.3 1.97 1.99ZM60.45 53.33c-.38.18-.89.35-1.18-.1.65-.26 1.47-.2 1.92-.8.34-.41.3-1.22-.34-1.44-1.66-.46-3.42.38-5.1.52-3.15.85-.9-.67-3.4-.66.9 2.54 3.58.91 5.45.73-.13.3-.44.4-.57.68.66-.13 1.53.12 2.03-.39.25-.7 1.92-.78 1.53.17-1.58 1.52-6.51.1-8.7 1.07-.34 1-.92 1.65-1.88 1.92-.67-.4-1.02-.07-1.6-.1.03.2.09.37.13.55.05.19.07.37.08.56.67-.07 1.34-.32 1.96-.49.41-.12.64-.53 1.1-.52 1.06.07 1.67-.81 2.58-1.07a16.9 16.9 0 0 1 3.44-.37c1.32 1.8 1.56.27 2.75.88l-.1.53.3.1c-.1.45.56.71.65.15.01-.07-.02-.16.08-.17.71-.38-.38-2.23-1.13-1.75Z"/><path d="M49.86 51.76c-.59 1.06-.42 2.01.28 2.9 1.29.04 1.82-1.7 1.6-2.77.14-.09.27-.17.4-.27l-.1-.38-.66-.03c-.46-.6-.75-.6-1.3-.07-.26-.1-.47-.03-.64.2.1.18.21.33.41.42ZM56.17 54.03c-.05.3.22.42.27.66-.35.22-.73.23-1.1.28-.19-.2-.27-.54-.6-.44-.2.05-.1.25-.24.33-.25-.02-.4.1-.43.34l.35.21c-.28 1.32 3.37-.05 3.9-.45-.17-.3-.4-.5-.47-.84-.15-.58-1.23-.1-1.68-.09ZM49.35 54.2c-.04-.47-.16-1.01-.53-1.33-.41-.43-.54-1-.12-1.46-.21-.2-.5-.04-.7-.32-.27-.3-.42.05-.49.36-.74.11-.31.35-.14.74.24.68 1.12 2.3 1.98 2ZM60.58 58.73c-.38.18-.88.35-1.18-.1.65-.27 1.47-.2 1.92-.81.33-.4.3-1.21-.34-1.43-1.66-.45-3.41.38-5.1.52-3.14.85-.9-.67-3.4-.65.9 2.53 3.59.9 5.45.72-.13.3-.44.4-.56.67.66-.12 1.53.12 2.02-.38.25-.7 1.92-.78 1.53.17-1.57 1.52-6.5.1-8.7 1.07-.32.99-.9 1.65-1.86 1.92-.79-.48-1.14.06-1.93-.15l-.23-.24a.15.15 0 0 1-.06-.04.48.48 0 0 0-.1-.05l.02.04c.01.45-.1.9-.28 1.31 1.02.4 2.14-.09 3.15-.36.4-.12.64-.53 1.09-.52 1.06.08 1.67-.8 2.58-1.06 1.13-.21 2.28-.39 3.43-.37 1.32 1.79 1.56.27 2.75.88l-.1.52.3.11c-.1.45.56.7.65.14.01-.07-.02-.16.08-.17.7-.38-.38-2.23-1.13-1.74Z"/><path d="M50 57.16c-.58 1.06-.41 2 .28 2.9 1.3.04 1.82-1.7 1.6-2.77.14-.09.27-.17.4-.27l-.1-.38-.65-.03c-.47-.6-.75-.6-1.31-.07-.26-.1-.47-.03-.64.2.1.18.22.33.42.42ZM56.3 59.43c-.05.3.22.42.27.65-.35.22-.72.24-1.09.28-.2-.19-.27-.53-.61-.43-.2.04-.09.24-.23.32-.25-.02-.4.1-.43.35l.35.2c-.28 1.32 3.36-.05 3.9-.44-.18-.3-.4-.5-.47-.85-.15-.58-1.23-.1-1.68-.08ZM48.97 58.26a1.56 1.56 0 0 1-.2-.25c-.03.24.1.51.06.74-.04.19-.09.46-.14.63.3.3.47.33.8.21-.04-.46-.15-1-.52-1.33ZM67.88 48.96c.28.18.5 1 .67 1.12.32.42 1 1.55 1.66 1.32v-.02c.2-.08.38-.65.4-.73-.01-.02-.12-.12-.25-.22-.62-.53-1-1.06-1-1.55-.04-.16.35-.38.32-.53-.02-.56-.49.07-.67-.02-.1-.16-.45-.62-.67-.4-.13.06.03.4-.07.47-.05.07-.08.08-.23.07-.5 0-.57.3-.16.5Z"/><path d="M70.54 52.75c.17-.17.67-.65.73-.76.05-.11.07-.11.42-.14.97-.14 1.46-.53 1.74-1.56.13-.31-.04-.98-.24-1.13-.08-.05-.11-.15-.06-.19.18-.02.55-.17.62-.38-.1-.2-.36-.05-.7-.16-.25-.11-.92-.32-1.2-.17-.18.23-1.32.25-1.11.59l.12.4.52.07v.37l-.48.1c-.31.45.73.48 1 .14.19-.22.48-.25.47-.01-.14.3-.64.44-.93.59-.44.07-.55.92-.89 1.2-.95.17-1.29.15-2.23-.6-.34-.4-.61-.1-.35.2-.17.06-1.04-.43-.65.4l.06.08c-.43.61.21.4.57.6.77.3 1.6.52 2.6.36Z"/><path d="m73.59 52.15.4.83s.86.38.98.5c.49.35.4 1.32-.03 1.21-.72-.29-1.15-1.3-1.65-1.92-.13-.1-.47-1.11-.7-.85-2.96.65.54 1.4 0 2.5-.1.15-.43.9-.3 1.02.25.3.8.53 1.1.91.48.47.05 1-.55.57-.34-.25-.74.11-.4.45.03.06-.2.16-.24.19-.35.48.23.45.54.21.17-.08 0 .42.29.34.54-.12 1.37-.39 1.52-1.23.34-.76-.44-.64-.63-1.31-.2-.28-.21-1.29.21-.92.4.5.92.77 1.4.34.44-.42.04-1.42-.19-1.86-.43-.89-.92-1.74-.89-2.8.6-.7 1.3.56 1.72-1.4-1.4.09-2.78 1.02-2.09 2.58.43.88.34.81-.5.65Z"/><path d="M71.33 53.82c-.74-.04-1.3-.1-1.1.77.04.21.12.85.25 1 .05.08.04.17-.03.22-.3.17-1.43-.29-1.3-.67 0-.31-.31-.39-.4-.16-.06.1-.14.1-.25-.03-.21-.3-.5.1-.38.33.04.09-.01.18-.12.2-.31.13-.3.55.14.56.94.44 1.76.88 2.86.73h-.02c1.2-.09.59-.31.53-1.14-.2-.88 1.33-1.47-.18-1.81ZM72.46 66.5c-.08-.07-.28 0-.3.06 0 .4-.42.28-.55.56.08.16.2.3.39.28.23-.02.2.26.42.27.98-.44 2.16-.33 3-1.1-.32-.26-.4-.62-.46-1-.57.04-1.13-.04-1.62.22-.05.26.13.4.26.62-.4.17-.76.26-1.14.09Z"/><path d="M88.26 55.51c-.4-.82-1.3-5.44-2.6-4.44 5.96 11.02 1.98 25.52-8.37 32.5-3.03 1.81-6.8 4.83-10.4 2.82 2.32-8.95 13.44-5.17 15.85-22.22-.3-.14-.4-.23-.68-.28a29.17 29.17 0 0 1-1.85 6.87c.96-2.54.35-10.48.53-10.92-.1-.13-.2-.18-.53-.58.06.96 0 1.3 0 2.58H63.35V44.43H79.9v9.82a6 6 0 0 0 .1.7c.24-.37.26-.35.42-.47V43.92H45.7l-.03 8.9h.51v-8.4h16.66v17.42H46.77c-.05.05.01-.28-.04-.23 0-.05-.11.27-.11.23h-.45V60.5l-.5-.02c-.38 1.3.72 12.23 2.53 14.15-3.62-3.48-4.76-9.65-4.08-14.3 0 0-.34-.26-.71-.6-1.14 6.56 1.36 13.02 6 17.7.4.44.85-.02 1.34-.15-.1-.1-.31-.27-.46-.47l.46.47-.25-.7c-3.65-2.76-4.25-10.63-4.32-14.23h16.65s0 21.83-.02 21.88c-3.54-.17-5.94-3.98-9.36-4.02 4.92 2.88 13.9 9.83 19.58 6.78l.08.1c-.6.74-2.7 2.14-3.64 1.78-1.54-.92-3.93.76-2.83 2.47.14.2.22.37.06.64-6.14-.57-11.66-4.2-16.83-7.31l-.09.1c1.98 2.65 9.06 5.94 9.06 5.94v3.94l.75.5v-4.27c1.86.63 5.62 1.8 5.62 1.8l.01 2.66.72-.45-.04-2 1-.27a1.3 1.3 0 0 0 .97-1.41.75.75 0 0 1-.42-.87c.15-.78 1.1-.8 1.49-.33.77.34 1.52-.57 2.28-.79 1.07-.64 2.38-1.2 2.88-2.42.1-.3.26-.5.52-.64a27.42 27.42 0 0 0 6-4.3c7.52-6.29 10.14-17.1 7.64-26.35Zm-24.91 6.83H80.2c1.38 12.76-6.18 17.03-16.86 21.48V62.34Zm.3 22.8a6.99 6.99 0 0 1 3.56-1.79l-1.26 2.8-2.3-1.02ZM26.02 92.14c-.38-.23-.86-.3-1.42-.21.12.84.43 2.41.67 3.23 1.6-.23 2.07-2.2.75-3.02Z"/><path d="M47.7 86.35c-9.55.01-19.06 4.05-28.6 4.05-1.15 0-2.3-.06-3.45-.2 2.96 2.32 2.76 6.96 7.06 6.96l.58-.03c5.85-.62 11.66-2.25 17.42-3.15.99-.15 5.75-1.3 8.54-1.3 1 0 1.76.14 1.98.55.3.54-1.6 2.12-1.6 2.18-.01.02 0 .03.02.03.18 0 1.23-.6 2.02-1.11 3.11-2.22-3.41-7.98-3.97-7.98Zm-20.1 7.84c-.52 1.22-2.07 1.5-3.29 1.71.06-.38-.68-3.91-.9-4.24 2.1-.89 5.1-.02 4.19 2.53Zm1.23.74a9.99 9.99 0 0 0-.91-4.24l1.22-.26a10 10 0 0 0 .9 4.24l-1.21.26Zm4.69-1-2.5.54c.05-.37-.76-3.84-.97-4.16l2.63-.57-.21.87c-.37-.1-.8-.1-1.28 0l.3 1.25 1.45-.32.23.62c-.29-.05-1.16.17-1.56.23l.3 1.32c.72-.16 1.31-.4 1.78-.71h.01l-.18.92Zm2.56-.4c-1.82.05-2.09-2.53-2.51-3.8l.88-.16c.42 1.1.3 3.7 2.18 3.35 1.36-.6.26-2.73.12-3.76l.87-.12c.33 1.7 1.11 4.67-1.54 4.5Zm7.24-1.28-2.5.57c.05-.37-.79-3.83-1-4.15l2.63-.6-.2.88c-.37-.1-.8-.1-1.29 0l.3 1.26 1.46-.33.24.6c-.29-.04-1.16.18-1.56.26l.31 1.3c.72-.15 1.31-.4 1.78-.72l.01.01-.18.92Zm2.63-4.2.72 3.58-.84.15-.73-3.57c-.52.09-.8.09-1.5.39l-.02-.8 3.6-.46.25.68a5.68 5.68 0 0 0-1.48.02ZM91.93 90.33c-.2.8-.52 2.28-.62 3.08 1.87.4 2.45-2.7.62-3.08ZM99.27 91.6c-1.43-.36-1.9 2.6-.7 3.07 1.45.34 1.9-2.6.7-3.08ZM95.52 91.04l-.44 1.57c1.22.22 1.75-1.37.44-1.57ZM84.04 88.8c-1.5-.4-2.07 2.65-.82 3.17 1.53.4 2.08-2.64.82-3.17Z"/><path d="M105.4 90.38c-1.19 0-2.33-.02-2.88-.07-6.3-.6-12.52-2.38-18.8-3.37-1.81-.28-3.3-.55-4.58-.55-2.67 0-4.48 1.15-6.63 5.67-.91 1.73 2.15 3.37 2.83 3.44-2.52-2.13-1.64-2.76.34-2.76 2.75 0 7.62 1.2 8.57 1.33 5.75.9 11.57 2.53 17.42 3.15l.59.03c4.3 0 4.09-4.64 7.05-6.95-.53.04-2.27.08-3.9.08Zm-23.67-2.5c-.14.13-.65 3.67-.62 4.01l-.96-.18c.17-.3.4-2.77.4-2.77l-1.65 2.53-.97-2.86s-.39 2.06-.4 2.72l-.95-.13c.3-.48.9-4.12.9-4.12l.97.18c.03.2.76 2.66.76 2.66s1.3-2.15 1.38-2.26l1.14.2v.02Zm3.53 3.13c-.86 2.9-4.24 1.31-3.24-1.27.86-2.81 4.24-1.33 3.24 1.27Zm3.33 2.54c-.3-.07-1.89-3.28-1.89-3.28s-.39 2.5-.49 2.67l-.72-.1.83-3.93.8.1c0 .11 1.27 2.76 1.27 2.76l.46-2.34.62.17-.88 3.95Zm3.77.34c-.57.2-1.39-.02-1.98-.14l.8-4.04c2.65-.17 3.74 3.22 1.18 4.18Zm4.7-1.86c-.12.46-.46.77-1.02.94.24.8.39 1.06.8 1.93v.02l-.65-.1a7.54 7.54 0 0 1-1.18-1.8c-.14.5-.28 1.13-.22 1.58l-1.1-.16c.2-.31 1.06-3.62 1.03-3.97.94.12 2.64.29 2.34 1.56Zm2.1 3.2c-2.44.45-2.43-3.6-.48-4.17 2.43-.51 2.44 3.61.47 4.17Zm2.52-2.37c-.1.71-.43 2.18-.3 2.86l-.95-.14c.42-1.06.7-2.85.64-3.98l.95.13c-.16.32-.27.7-.34 1.13Zm2.25-.18s-.56 3.11-.53 3.38l-.94-.17c-.02.02.58-2.73.73-3.33a2 2 0 0 0-1.1.1h-.01l.38-.78 2.56.45.18.87a3.4 3.4 0 0 0-1.27-.52Z"/></svg>
@@ -1,4 +1,4 @@
1
- const version = '5.5.0';
1
+ const version = '5.7.0';
2
2
 
3
3
  export { version };
4
4
  //# sourceMappingURL=govuk-frontend-version.mjs.map
@@ -79,6 +79,19 @@ function setFocus($element, options = {}) {
79
79
  (_options$onBeforeFocu = options.onBeforeFocus) == null || _options$onBeforeFocu.call($element);
80
80
  $element.focus();
81
81
  }
82
+ function isInitialised($root, moduleName) {
83
+ return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);
84
+ }
85
+
86
+ /**
87
+ * Checks if GOV.UK Frontend is supported on this page
88
+ *
89
+ * Some browsers will load and run our JavaScript but GOV.UK Frontend
90
+ * won't be supported.
91
+ *
92
+ * @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support
93
+ * @returns {boolean} Whether GOV.UK Frontend is supported on this page
94
+ */
82
95
  function isSupported($scope = document.body) {
83
96
  if (!$scope) {
84
97
  return false;
@@ -111,6 +124,9 @@ function isArray(option) {
111
124
  function isObject(option) {
112
125
  return !!option && typeof option === 'object' && !isArray(option);
113
126
  }
127
+ function formatErrorMessage(Component, message) {
128
+ return `${Component.moduleName}: ${message}`;
129
+ }
114
130
 
115
131
  /**
116
132
  * Schema for component config
@@ -134,6 +150,10 @@ function isObject(option) {
134
150
  * @property {string[]} required - List of required config fields
135
151
  * @property {string} errorMessage - Error message when required config fields not provided
136
152
  */
153
+ /**
154
+ * @typedef ComponentWithModuleName
155
+ * @property {string} moduleName - Name of the component
156
+ */
137
157
 
138
- export { extractConfigByNamespace, getBreakpoint, getFragmentFromUrl, isSupported, mergeConfigs, setFocus, validateConfig };
158
+ export { extractConfigByNamespace, formatErrorMessage, getBreakpoint, getFragmentFromUrl, isInitialised, isSupported, mergeConfigs, setFocus, validateConfig };
139
159
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/govuk/common/index.mjs"],"sourcesContent":["import { normaliseString } from './normalise-string.mjs'\n\n/**\n * Common helpers which do not require polyfill.\n *\n * IMPORTANT: If a helper require a polyfill, please isolate it in its own module\n * so that the polyfill can be properly tree-shaken and does not burden\n * the components that do not need that helper\n */\n\n/**\n * Config merging function\n *\n * Takes any number of objects and combines them together, with\n * greatest priority on the LAST item passed in.\n *\n * @internal\n * @param {...{ [key: string]: unknown }} configObjects - Config objects to merge\n * @returns {{ [key: string]: unknown }} A merged config object\n */\nexport function mergeConfigs(...configObjects) {\n // Start with an empty object as our base\n /** @type {{ [key: string]: unknown }} */\n const formattedConfigObject = {}\n\n // Loop through each of the passed objects\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\n // Push their keys one-by-one into formattedConfigObject. Any duplicate\n // keys with object values will be merged, otherwise the new value will\n // override the existing value.\n if (isObject(option) && isObject(override)) {\n // @ts-expect-error Index signature for type 'string' is missing\n formattedConfigObject[key] = mergeConfigs(option, override)\n } else {\n // Apply override\n formattedConfigObject[key] = override\n }\n }\n }\n\n return formattedConfigObject\n}\n\n/**\n * Extracts keys starting with a particular namespace from dataset ('data-*')\n * object, removing the namespace in the process, normalising all values\n *\n * @internal\n * @param {{ schema: Schema }} Component - Component class\n * @param {DOMStringMap} dataset - The object to extract key-value pairs from\n * @param {string} namespace - The namespace to filter keys with\n * @returns {ObjectNested | undefined} Nested object with dot-separated key namespace removed\n */\nexport function extractConfigByNamespace(Component, dataset, namespace) {\n const property = Component.schema.properties[namespace]\n\n // Only extract configs for object schema properties\n if (property?.type !== 'object') {\n return\n }\n\n // Add default empty config\n const newObject = {\n [namespace]: /** @type {ObjectNested} */ ({})\n }\n\n for (const [key, value] of Object.entries(dataset)) {\n /** @type {ObjectNested | ObjectNested[NestedKey]} */\n let current = newObject\n\n // Split the key into parts, using . as our namespace separator\n const keyParts = key.split('.')\n\n /**\n * Create new level per part\n *\n * e.g. 'i18n.textareaDescription.other' becomes\n * `{ i18n: { textareaDescription: { other } } }`\n */\n for (const [index, name] of keyParts.entries()) {\n if (typeof current === 'object') {\n // Drop down to nested object until the last part\n if (index < keyParts.length - 1) {\n // New nested object (optionally) replaces existing value\n if (!isObject(current[name])) {\n current[name] = {}\n }\n\n // Drop down into new or existing nested object\n current = current[name]\n } else if (key !== namespace) {\n // Normalised value (optionally) replaces existing value\n current[name] = normaliseString(value)\n }\n }\n }\n }\n\n return newObject[namespace]\n}\n\n/**\n * Get hash fragment from URL\n *\n * Extract the hash fragment (everything after the hash) from a URL,\n * but not including the hash symbol\n *\n * @private\n * @param {string} url - URL\n * @returns {string | undefined} Fragment from URL, without the hash\n */\nexport function getFragmentFromUrl(url) {\n if (!url.includes('#')) {\n return undefined\n }\n\n return url.split('#').pop()\n}\n\n/**\n * Get GOV.UK Frontend breakpoint value from CSS custom property\n *\n * @private\n * @param {string} name - Breakpoint name\n * @returns {{ property: string, value?: string }} Breakpoint object\n */\nexport function getBreakpoint(name) {\n const property = `--govuk-frontend-breakpoint-${name}`\n\n // Get value from `<html>` with breakpoints on CSS :root\n const value = window\n .getComputedStyle(document.documentElement)\n .getPropertyValue(property)\n\n return {\n property,\n value: value || undefined\n }\n}\n\n/**\n * Move focus to element\n *\n * Sets tabindex to -1 to make the element programmatically focusable,\n * but removes it on blur as the element doesn't need to be focused again.\n *\n * @private\n * @template {HTMLElement} FocusElement\n * @param {FocusElement} $element - HTML element\n * @param {object} [options] - Handler options\n * @param {function(this: FocusElement): void} [options.onBeforeFocus] - Callback before focus\n * @param {function(this: FocusElement): void} [options.onBlur] - Callback on blur\n */\nexport function setFocus($element, options = {}) {\n const isFocusable = $element.getAttribute('tabindex')\n\n if (!isFocusable) {\n $element.setAttribute('tabindex', '-1')\n }\n\n /**\n * Handle element focus\n */\n function onFocus() {\n $element.addEventListener('blur', onBlur, { once: true })\n }\n\n /**\n * Handle element blur\n */\n function onBlur() {\n options.onBlur?.call($element)\n\n if (!isFocusable) {\n $element.removeAttribute('tabindex')\n }\n }\n\n // Add listener to reset element on blur, after focus\n $element.addEventListener('focus', onFocus, { once: true })\n\n // Focus element\n options.onBeforeFocus?.call($element)\n $element.focus()\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 * @internal\n * @param {HTMLElement | null} [$scope] - HTML element `<body>` checked for browser support\n * @returns {boolean} Whether GOV.UK Frontend is supported on this page\n */\nexport function isSupported($scope = document.body) {\n if (!$scope) {\n return false\n }\n\n return $scope.classList.contains('govuk-frontend-supported')\n}\n\n/**\n * Validate component config by schema\n *\n * Follows limited examples in JSON schema for wider support in future\n *\n * {@link https://ajv.js.org/json-schema.html#compound-keywords}\n * {@link https://ajv.js.org/packages/ajv-errors.html#single-message}\n *\n * @internal\n * @param {Schema} schema - Config schema\n * @param {{ [key: string]: unknown }} config - Component config\n * @returns {string[]} List of validation errors\n */\nexport function validateConfig(schema, config) {\n const validationErrors = []\n\n // Check errors for each schema\n for (const [name, conditions] of Object.entries(schema)) {\n const errors = []\n\n // Check errors for each schema condition\n if (Array.isArray(conditions)) {\n for (const { required, errorMessage } of conditions) {\n if (!required.every((key) => !!config[key])) {\n errors.push(errorMessage) // Missing config key value\n }\n }\n\n // Check one condition passes or add errors\n if (name === 'anyOf' && !(conditions.length - errors.length >= 1)) {\n validationErrors.push(...errors)\n }\n }\n }\n\n return validationErrors\n}\n\n/**\n * Check for an array\n *\n * @internal\n * @param {unknown} option - Option to check\n * @returns {boolean} Whether the option is an array\n */\nfunction isArray(option) {\n return Array.isArray(option)\n}\n\n/**\n * Check for an object\n *\n * @internal\n * @param {unknown} option - Option to check\n * @returns {boolean} Whether the option is an object\n */\nfunction isObject(option) {\n return !!option && typeof option === 'object' && !isArray(option)\n}\n\n/**\n * Schema for component config\n *\n * @typedef {object} Schema\n * @property {{ [field: string]: SchemaProperty | undefined }} properties - Schema properties\n * @property {SchemaCondition[]} [anyOf] - List of schema conditions\n */\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/**\n * Schema condition for component config\n *\n * @typedef {object} SchemaCondition\n * @property {string[]} required - List of required config fields\n * @property {string} errorMessage - Error message when required config fields not provided\n */\n\n/**\n * @internal\n * @typedef {keyof ObjectNested} NestedKey\n * @typedef {{ [key: string]: string | boolean | number | ObjectNested | undefined }} ObjectNested\n */\n"],"names":["mergeConfigs","configObjects","formattedConfigObject","configObject","key","Object","keys","option","override","isObject","extractConfigByNamespace","Component","dataset","namespace","property","schema","properties","type","newObject","value","entries","current","keyParts","split","index","name","length","normaliseString","getFragmentFromUrl","url","includes","undefined","pop","getBreakpoint","window","getComputedStyle","document","documentElement","getPropertyValue","setFocus","$element","options","_options$onBeforeFocu","isFocusable","getAttribute","setAttribute","onFocus","addEventListener","onBlur","once","_options$onBlur","call","removeAttribute","onBeforeFocus","focus","isSupported","$scope","body","classList","contains","validateConfig","config","validationErrors","conditions","errors","Array","isArray","required","errorMessage","every","push"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/govuk/common/index.mjs"],"sourcesContent":["import { normaliseString } from './normalise-string.mjs'\n\n/**\n * Common helpers which do not require polyfill.\n *\n * IMPORTANT: If a helper require a polyfill, please isolate it in its own module\n * so that the polyfill can be properly tree-shaken and does not burden\n * the components that do not need that helper\n */\n\n/**\n * Config merging function\n *\n * Takes any number of objects and combines them together, with\n * greatest priority on the LAST item passed in.\n *\n * @internal\n * @param {...{ [key: string]: unknown }} configObjects - Config objects to merge\n * @returns {{ [key: string]: unknown }} A merged config object\n */\nexport function mergeConfigs(...configObjects) {\n // Start with an empty object as our base\n /** @type {{ [key: string]: unknown }} */\n const formattedConfigObject = {}\n\n // Loop through each of the passed objects\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\n // Push their keys one-by-one into formattedConfigObject. Any duplicate\n // keys with object values will be merged, otherwise the new value will\n // override the existing value.\n if (isObject(option) && isObject(override)) {\n // @ts-expect-error Index signature for type 'string' is missing\n formattedConfigObject[key] = mergeConfigs(option, override)\n } else {\n // Apply override\n formattedConfigObject[key] = override\n }\n }\n }\n\n return formattedConfigObject\n}\n\n/**\n * Extracts keys starting with a particular namespace from dataset ('data-*')\n * object, removing the namespace in the process, normalising all values\n *\n * @internal\n * @param {{ schema: Schema }} Component - Component class\n * @param {DOMStringMap} dataset - The object to extract key-value pairs from\n * @param {string} namespace - The namespace to filter keys with\n * @returns {ObjectNested | undefined} Nested object with dot-separated key namespace removed\n */\nexport function extractConfigByNamespace(Component, dataset, namespace) {\n const property = Component.schema.properties[namespace]\n\n // Only extract configs for object schema properties\n if (property?.type !== 'object') {\n return\n }\n\n // Add default empty config\n const newObject = {\n [namespace]: /** @type {ObjectNested} */ ({})\n }\n\n for (const [key, value] of Object.entries(dataset)) {\n /** @type {ObjectNested | ObjectNested[NestedKey]} */\n let current = newObject\n\n // Split the key into parts, using . as our namespace separator\n const keyParts = key.split('.')\n\n /**\n * Create new level per part\n *\n * e.g. 'i18n.textareaDescription.other' becomes\n * `{ i18n: { textareaDescription: { other } } }`\n */\n for (const [index, name] of keyParts.entries()) {\n if (typeof current === 'object') {\n // Drop down to nested object until the last part\n if (index < keyParts.length - 1) {\n // New nested object (optionally) replaces existing value\n if (!isObject(current[name])) {\n current[name] = {}\n }\n\n // Drop down into new or existing nested object\n current = current[name]\n } else if (key !== namespace) {\n // Normalised value (optionally) replaces existing value\n current[name] = normaliseString(value)\n }\n }\n }\n }\n\n return newObject[namespace]\n}\n\n/**\n * Get hash fragment from URL\n *\n * Extract the hash fragment (everything after the hash) from a URL,\n * but not including the hash symbol\n *\n * @private\n * @param {string} url - URL\n * @returns {string | undefined} Fragment from URL, without the hash\n */\nexport function getFragmentFromUrl(url) {\n if (!url.includes('#')) {\n return undefined\n }\n\n return url.split('#').pop()\n}\n\n/**\n * Get GOV.UK Frontend breakpoint value from CSS custom property\n *\n * @private\n * @param {string} name - Breakpoint name\n * @returns {{ property: string, value?: string }} Breakpoint object\n */\nexport function getBreakpoint(name) {\n const property = `--govuk-frontend-breakpoint-${name}`\n\n // Get value from `<html>` with breakpoints on CSS :root\n const value = window\n .getComputedStyle(document.documentElement)\n .getPropertyValue(property)\n\n return {\n property,\n value: value || undefined\n }\n}\n\n/**\n * Move focus to element\n *\n * Sets tabindex to -1 to make the element programmatically focusable,\n * but removes it on blur as the element doesn't need to be focused again.\n *\n * @private\n * @template {HTMLElement} FocusElement\n * @param {FocusElement} $element - HTML element\n * @param {object} [options] - Handler options\n * @param {function(this: FocusElement): void} [options.onBeforeFocus] - Callback before focus\n * @param {function(this: FocusElement): void} [options.onBlur] - Callback on blur\n */\nexport function setFocus($element, options = {}) {\n const isFocusable = $element.getAttribute('tabindex')\n\n if (!isFocusable) {\n $element.setAttribute('tabindex', '-1')\n }\n\n /**\n * Handle element focus\n */\n function onFocus() {\n $element.addEventListener('blur', onBlur, { once: true })\n }\n\n /**\n * Handle element blur\n */\n function onBlur() {\n options.onBlur?.call($element)\n\n if (!isFocusable) {\n $element.removeAttribute('tabindex')\n }\n }\n\n // Add listener to reset element on blur, after focus\n $element.addEventListener('focus', onFocus, { once: true })\n\n // Focus element\n options.onBeforeFocus?.call($element)\n $element.focus()\n}\n\n/**\n * Checks if component is already initialised\n *\n * @internal\n * @param {Element} $root - HTML element to be checked\n * @param {string} moduleName - name of component module\n * @returns {boolean} Whether component is already initialised\n */\nexport function isInitialised($root, moduleName) {\n return (\n $root instanceof HTMLElement &&\n $root.hasAttribute(`data-${moduleName}-init`)\n )\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 */\nexport function isSupported($scope = document.body) {\n if (!$scope) {\n return false\n }\n\n return $scope.classList.contains('govuk-frontend-supported')\n}\n\n/**\n * Validate component config by schema\n *\n * Follows limited examples in JSON schema for wider support in future\n *\n * {@link https://ajv.js.org/json-schema.html#compound-keywords}\n * {@link https://ajv.js.org/packages/ajv-errors.html#single-message}\n *\n * @internal\n * @param {Schema} schema - Config schema\n * @param {{ [key: string]: unknown }} config - Component config\n * @returns {string[]} List of validation errors\n */\nexport function validateConfig(schema, config) {\n const validationErrors = []\n\n // Check errors for each schema\n for (const [name, conditions] of Object.entries(schema)) {\n const errors = []\n\n // Check errors for each schema condition\n if (Array.isArray(conditions)) {\n for (const { required, errorMessage } of conditions) {\n if (!required.every((key) => !!config[key])) {\n errors.push(errorMessage) // Missing config key value\n }\n }\n\n // Check one condition passes or add errors\n if (name === 'anyOf' && !(conditions.length - errors.length >= 1)) {\n validationErrors.push(...errors)\n }\n }\n }\n\n return validationErrors\n}\n\n/**\n * Check for an array\n *\n * @internal\n * @param {unknown} option - Option to check\n * @returns {boolean} Whether the option is an array\n */\nfunction isArray(option) {\n return Array.isArray(option)\n}\n\n/**\n * Check for an object\n *\n * @internal\n * @param {unknown} option - Option to check\n * @returns {boolean} Whether the option is an object\n */\nfunction isObject(option) {\n return !!option && typeof option === 'object' && !isArray(option)\n}\n\n/**\n * Format error message\n *\n * @internal\n * @param {ComponentWithModuleName} Component - Component that threw the error\n * @param {string} message - Error message\n * @returns {string} - Formatted error message\n */\nexport function formatErrorMessage(Component, message) {\n return `${Component.moduleName}: ${message}`\n}\n\n/**\n * Schema for component config\n *\n * @typedef {object} Schema\n * @property {{ [field: string]: SchemaProperty | undefined }} properties - Schema properties\n * @property {SchemaCondition[]} [anyOf] - List of schema conditions\n */\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/**\n * Schema condition for component config\n *\n * @typedef {object} SchemaCondition\n * @property {string[]} required - List of required config fields\n * @property {string} errorMessage - Error message when required config fields not provided\n */\n\n/**\n * @internal\n * @typedef {keyof ObjectNested} NestedKey\n * @typedef {{ [key: string]: string | boolean | number | ObjectNested | undefined }} ObjectNested\n */\n\n/* eslint-disable jsdoc/valid-types --\n * `{new(...args: any[] ): object}` is not recognised as valid\n * https://github.com/gajus/eslint-plugin-jsdoc/issues/145#issuecomment-1308722878\n * https://github.com/jsdoc-type-pratt-parser/jsdoc-type-pratt-parser/issues/131\n **/\n\n/**\n * @typedef ComponentWithModuleName\n * @property {string} moduleName - Name of the component\n */\n\n/* eslint-enable jsdoc/valid-types */\n"],"names":["mergeConfigs","configObjects","formattedConfigObject","configObject","key","Object","keys","option","override","isObject","extractConfigByNamespace","Component","dataset","namespace","property","schema","properties","type","newObject","value","entries","current","keyParts","split","index","name","length","normaliseString","getFragmentFromUrl","url","includes","undefined","pop","getBreakpoint","window","getComputedStyle","document","documentElement","getPropertyValue","setFocus","$element","options","_options$onBeforeFocu","isFocusable","getAttribute","setAttribute","onFocus","addEventListener","onBlur","once","_options$onBlur","call","removeAttribute","onBeforeFocus","focus","isInitialised","$root","moduleName","HTMLElement","hasAttribute","isSupported","$scope","body","classList","contains","validateConfig","config","validationErrors","conditions","errors","Array","isArray","required","errorMessage","every","push","formatErrorMessage","message"],"mappings":"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"}
@@ -27,6 +27,7 @@
27
27
  @import "phase-banner/index";
28
28
  @import "radios/index";
29
29
  @import "select/index";
30
+ @import "service-navigation/index";
30
31
  @import "skip-link/index";
31
32
  @import "summary-list/index";
32
33
  @import "table/index";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/govuk/components/_index.scss"],"names":[],"mappings":"AAAA,iBAAiB;;AAEjB,yBAAyB;AACzB,yBAAyB;AACzB,2BAA2B;AAC3B,sBAAsB;AACtB,+BAA+B;AAC/B,0BAA0B;AAC1B,6BAA6B;AAC7B,0BAA0B;AAC1B,uBAAuB;AACvB,6BAA6B;AAC7B,6BAA6B;AAC7B,8BAA8B;AAC9B,wBAAwB;AACxB,2BAA2B;AAC3B,sBAAsB;AACtB,sBAAsB;AACtB,oBAAoB;AACpB,qBAAqB;AACrB,0BAA0B;AAC1B,qBAAqB;AACrB,mCAAmC;AACnC,0BAA0B;AAC1B,qBAAqB;AACrB,8BAA8B;AAC9B,4BAA4B;AAC5B,sBAAsB;AACtB,sBAAsB;AACtB,yBAAyB;AACzB,4BAA4B;AAC5B,qBAAqB;AACrB,oBAAoB;AACpB,mBAAmB;AACnB,yBAAyB;AACzB,wBAAwB;AACxB,4BAA4B","file":"_index.scss","sourcesContent":["@import \"../base\";\n\n@import \"accordion/index\";\n@import \"back-link/index\";\n@import \"breadcrumbs/index\";\n@import \"button/index\";\n@import \"character-count/index\";\n@import \"checkboxes/index\";\n@import \"cookie-banner/index\";\n@import \"date-input/index\";\n@import \"details/index\";\n@import \"error-message/index\";\n@import \"error-summary/index\";\n@import \"exit-this-page/index\";\n@import \"fieldset/index\";\n@import \"file-upload/index\";\n@import \"footer/index\";\n@import \"header/index\";\n@import \"hint/index\";\n@import \"input/index\";\n@import \"inset-text/index\";\n@import \"label/index\";\n@import \"notification-banner/index\";\n@import \"pagination/index\";\n@import \"panel/index\";\n@import \"password-input/index\";\n@import \"phase-banner/index\";\n@import \"radios/index\";\n@import \"select/index\";\n@import \"skip-link/index\";\n@import \"summary-list/index\";\n@import \"table/index\";\n@import \"tabs/index\";\n@import \"tag/index\";\n@import \"task-list/index\";\n@import \"textarea/index\";\n@import \"warning-text/index\";\n"]}
1
+ {"version":3,"sources":["../../../src/govuk/components/_index.scss"],"names":[],"mappings":"AAAA,iBAAiB;;AAEjB,yBAAyB;AACzB,yBAAyB;AACzB,2BAA2B;AAC3B,sBAAsB;AACtB,+BAA+B;AAC/B,0BAA0B;AAC1B,6BAA6B;AAC7B,0BAA0B;AAC1B,uBAAuB;AACvB,6BAA6B;AAC7B,6BAA6B;AAC7B,8BAA8B;AAC9B,wBAAwB;AACxB,2BAA2B;AAC3B,sBAAsB;AACtB,sBAAsB;AACtB,oBAAoB;AACpB,qBAAqB;AACrB,0BAA0B;AAC1B,qBAAqB;AACrB,mCAAmC;AACnC,0BAA0B;AAC1B,qBAAqB;AACrB,8BAA8B;AAC9B,4BAA4B;AAC5B,sBAAsB;AACtB,sBAAsB;AACtB,kCAAkC;AAClC,yBAAyB;AACzB,4BAA4B;AAC5B,qBAAqB;AACrB,oBAAoB;AACpB,mBAAmB;AACnB,yBAAyB;AACzB,wBAAwB;AACxB,4BAA4B","file":"_index.scss","sourcesContent":["@import \"../base\";\n\n@import \"accordion/index\";\n@import \"back-link/index\";\n@import \"breadcrumbs/index\";\n@import \"button/index\";\n@import \"character-count/index\";\n@import \"checkboxes/index\";\n@import \"cookie-banner/index\";\n@import \"date-input/index\";\n@import \"details/index\";\n@import \"error-message/index\";\n@import \"error-summary/index\";\n@import \"exit-this-page/index\";\n@import \"fieldset/index\";\n@import \"file-upload/index\";\n@import \"footer/index\";\n@import \"header/index\";\n@import \"hint/index\";\n@import \"input/index\";\n@import \"inset-text/index\";\n@import \"label/index\";\n@import \"notification-banner/index\";\n@import \"pagination/index\";\n@import \"panel/index\";\n@import \"password-input/index\";\n@import \"phase-banner/index\";\n@import \"radios/index\";\n@import \"select/index\";\n@import \"service-navigation/index\";\n@import \"skip-link/index\";\n@import \"summary-list/index\";\n@import \"table/index\";\n@import \"tabs/index\";\n@import \"tag/index\";\n@import \"task-list/index\";\n@import \"textarea/index\";\n@import \"warning-text/index\";\n"]}
@@ -74,6 +74,19 @@
74
74
  }
75
75
  return newObject[namespace];
76
76
  }
77
+ function isInitialised($root, moduleName) {
78
+ return $root instanceof HTMLElement && $root.hasAttribute(`data-${moduleName}-init`);
79
+ }
80
+
81
+ /**
82
+ * Checks if GOV.UK Frontend is supported on this page
83
+ *
84
+ * Some browsers will load and run our JavaScript but GOV.UK Frontend
85
+ * won't be supported.
86
+ *
87
+ * @param {HTMLElement | null} [$scope] - (internal) `<body>` HTML element checked for browser support
88
+ * @returns {boolean} Whether GOV.UK Frontend is supported on this page
89
+ */
77
90
  function isSupported($scope = document.body) {
78
91
  if (!$scope) {
79
92
  return false;
@@ -86,6 +99,9 @@
86
99
  function isObject(option) {
87
100
  return !!option && typeof option === 'object' && !isArray(option);
88
101
  }
102
+ function formatErrorMessage(Component, message) {
103
+ return `${Component.moduleName}: ${message}`;
104
+ }
89
105
 
90
106
  /**
91
107
  * Schema for component config
@@ -109,6 +125,10 @@
109
125
  * @property {string[]} required - List of required config fields
110
126
  * @property {string} errorMessage - Error message when required config fields not provided
111
127
  */
128
+ /**
129
+ * @typedef ComponentWithModuleName
130
+ * @property {string} moduleName - Name of the component
131
+ */
112
132
 
113
133
  function normaliseDataset(Component, dataset) {
114
134
  const out = {};
@@ -146,30 +166,85 @@
146
166
  let message = typeof messageOrOptions === 'string' ? messageOrOptions : '';
147
167
  if (typeof messageOrOptions === 'object') {
148
168
  const {
149
- componentName,
169
+ component,
150
170
  identifier,
151
171
  element,
152
172
  expectedType
153
173
  } = messageOrOptions;
154
- message = `${componentName}: ${identifier}`;
174
+ message = identifier;
155
175
  message += element ? ` is not of type ${expectedType != null ? expectedType : 'HTMLElement'}` : ' not found';
176
+ message = formatErrorMessage(component, message);
156
177
  }
157
178
  super(message);
158
179
  this.name = 'ElementError';
159
180
  }
160
181
  }
182
+ class InitError extends GOVUKFrontendError {
183
+ constructor(componentOrMessage) {
184
+ const message = typeof componentOrMessage === 'string' ? componentOrMessage : formatErrorMessage(componentOrMessage, `Root element (\`$root\`) already initialised`);
185
+ super(message);
186
+ this.name = 'InitError';
187
+ }
188
+ }
189
+ /**
190
+ * @typedef {import('../common/index.mjs').ComponentWithModuleName} ComponentWithModuleName
191
+ */
161
192
 
162
193
  class GOVUKFrontendComponent {
163
- constructor() {
164
- this.checkSupport();
194
+ /**
195
+ * Returns the root element of the component
196
+ *
197
+ * @protected
198
+ * @returns {RootElementType} - the root element of component
199
+ */
200
+ get $root() {
201
+ return this._$root;
165
202
  }
166
- checkSupport() {
203
+ constructor($root) {
204
+ this._$root = void 0;
205
+ const childConstructor = this.constructor;
206
+ if (typeof childConstructor.moduleName !== 'string') {
207
+ throw new InitError(`\`moduleName\` not defined in component`);
208
+ }
209
+ if (!($root instanceof childConstructor.elementType)) {
210
+ throw new ElementError({
211
+ element: $root,
212
+ component: childConstructor,
213
+ identifier: 'Root element (`$root`)',
214
+ expectedType: childConstructor.elementType.name
215
+ });
216
+ } else {
217
+ this._$root = $root;
218
+ }
219
+ childConstructor.checkSupport();
220
+ this.checkInitialised();
221
+ const moduleName = childConstructor.moduleName;
222
+ this.$root.setAttribute(`data-${moduleName}-init`, '');
223
+ }
224
+ checkInitialised() {
225
+ const constructor = this.constructor;
226
+ const moduleName = constructor.moduleName;
227
+ if (moduleName && isInitialised(this.$root, moduleName)) {
228
+ throw new InitError(constructor);
229
+ }
230
+ }
231
+ static checkSupport() {
167
232
  if (!isSupported()) {
168
233
  throw new SupportError();
169
234
  }
170
235
  }
171
236
  }
172
237
 
238
+ /**
239
+ * @typedef ChildClass
240
+ * @property {string} moduleName - The module name that'll be looked for in the DOM when initialising the component
241
+ */
242
+
243
+ /**
244
+ * @typedef {typeof GOVUKFrontendComponent & ChildClass} ChildClassConstructor
245
+ */
246
+ GOVUKFrontendComponent.elementType = HTMLElement;
247
+
173
248
  class I18n {
174
249
  constructor(translations = {}, config = {}) {
175
250
  var _config$locale;
@@ -379,12 +454,11 @@
379
454
  */
380
455
  class Accordion extends GOVUKFrontendComponent {
381
456
  /**
382
- * @param {Element | null} $module - HTML element to use for accordion
457
+ * @param {Element | null} $root - HTML element to use for accordion
383
458
  * @param {AccordionConfig} [config] - Accordion config
384
459
  */
385
- constructor($module, config = {}) {
386
- super();
387
- this.$module = void 0;
460
+ constructor($root, config = {}) {
461
+ super($root);
388
462
  this.config = void 0;
389
463
  this.i18n = void 0;
390
464
  this.controlsClass = 'govuk-accordion__controls';
@@ -410,20 +484,12 @@
410
484
  this.$showAllButton = null;
411
485
  this.$showAllIcon = null;
412
486
  this.$showAllText = null;
413
- if (!($module instanceof HTMLElement)) {
414
- throw new ElementError({
415
- componentName: 'Accordion',
416
- element: $module,
417
- identifier: 'Root element (`$module`)'
418
- });
419
- }
420
- this.$module = $module;
421
- this.config = mergeConfigs(Accordion.defaults, config, normaliseDataset(Accordion, $module.dataset));
487
+ this.config = mergeConfigs(Accordion.defaults, config, normaliseDataset(Accordion, this.$root.dataset));
422
488
  this.i18n = new I18n(this.config.i18n);
423
- const $sections = this.$module.querySelectorAll(`.${this.sectionClass}`);
489
+ const $sections = this.$root.querySelectorAll(`.${this.sectionClass}`);
424
490
  if (!$sections.length) {
425
491
  throw new ElementError({
426
- componentName: 'Accordion',
492
+ component: Accordion,
427
493
  identifier: `Sections (\`<div class="${this.sectionClass}">\`)`
428
494
  });
429
495
  }
@@ -443,7 +509,7 @@
443
509
  const $accordionControls = document.createElement('div');
444
510
  $accordionControls.setAttribute('class', this.controlsClass);
445
511
  $accordionControls.appendChild(this.$showAllButton);
446
- this.$module.insertBefore($accordionControls, this.$module.firstChild);
512
+ this.$root.insertBefore($accordionControls, this.$root.firstChild);
447
513
  this.$showAllText = document.createElement('span');
448
514
  this.$showAllText.classList.add(this.showAllTextClass);
449
515
  this.$showAllButton.appendChild(this.$showAllText);
@@ -457,7 +523,7 @@
457
523
  const $header = $section.querySelector(`.${this.sectionHeaderClass}`);
458
524
  if (!$header) {
459
525
  throw new ElementError({
460
- componentName: 'Accordion',
526
+ component: Accordion,
461
527
  identifier: `Section headers (\`<div class="${this.sectionHeaderClass}">\`)`
462
528
  });
463
529
  }
@@ -473,19 +539,19 @@
473
539
  const $summary = $header.querySelector(`.${this.sectionSummaryClass}`);
474
540
  if (!$heading) {
475
541
  throw new ElementError({
476
- componentName: 'Accordion',
542
+ component: Accordion,
477
543
  identifier: `Section heading (\`.${this.sectionHeadingClass}\`)`
478
544
  });
479
545
  }
480
546
  if (!$span) {
481
547
  throw new ElementError({
482
- componentName: 'Accordion',
548
+ component: Accordion,
483
549
  identifier: `Section button placeholder (\`<span class="${this.sectionButtonClass}">\`)`
484
550
  });
485
551
  }
486
552
  const $button = document.createElement('button');
487
553
  $button.setAttribute('type', 'button');
488
- $button.setAttribute('aria-controls', `${this.$module.id}-content-${index + 1}`);
554
+ $button.setAttribute('aria-controls', `${this.$root.id}-content-${index + 1}`);
489
555
  for (const attr of Array.from($span.attributes)) {
490
556
  if (attr.name !== 'id') {
491
557
  $button.setAttribute(attr.name, attr.value);
@@ -559,7 +625,7 @@
559
625
  const $content = $section.querySelector(`.${this.sectionContentClass}`);
560
626
  if (!$content) {
561
627
  throw new ElementError({
562
- componentName: 'Accordion',
628
+ component: Accordion,
563
629
  identifier: `Section content (\`<div class="${this.sectionContentClass}">\`)`
564
630
  });
565
631
  }