ccs-frontend_helpers 0.1.0.rc.1 → 0.1.0.rc.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (156) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +5 -1
  3. data/.ruby-version +1 -0
  4. data/CHANGELOG.md +4 -1
  5. data/Gemfile.lock +71 -71
  6. data/lib/ccs/components/base.rb +64 -0
  7. data/lib/ccs/components/ccs/dashboard_section/panel.rb +55 -0
  8. data/lib/ccs/components/ccs/dashboard_section.rb +71 -0
  9. data/lib/ccs/components/ccs/footer/link.rb +53 -0
  10. data/lib/ccs/components/ccs/footer/meta.rb +58 -0
  11. data/lib/ccs/components/ccs/footer/navigation.rb +59 -0
  12. data/lib/ccs/components/ccs/footer.rb +93 -0
  13. data/lib/ccs/components/ccs/header/link.rb +58 -0
  14. data/lib/ccs/components/ccs/header/navigation.rb +97 -0
  15. data/lib/ccs/components/ccs/header/service_authentication.rb +52 -0
  16. data/lib/ccs/components/ccs/header.rb +108 -0
  17. data/lib/ccs/components/ccs/logo.rb +45 -0
  18. data/lib/ccs/components/govuk/accordion/section/content.rb +53 -0
  19. data/lib/ccs/components/govuk/accordion/section/header.rb +57 -0
  20. data/lib/ccs/components/govuk/accordion/section.rb +60 -0
  21. data/lib/ccs/components/govuk/accordion.rb +56 -0
  22. data/lib/ccs/components/govuk/back_link.rb +49 -0
  23. data/lib/ccs/components/govuk/breadcrumbs/link.rb +55 -0
  24. data/lib/ccs/components/govuk/breadcrumbs.rb +53 -0
  25. data/lib/ccs/components/govuk/button.rb +105 -0
  26. data/lib/ccs/components/govuk/cookie_banner/action.rb +58 -0
  27. data/lib/ccs/components/govuk/cookie_banner/message.rb +78 -0
  28. data/lib/ccs/components/govuk/cookie_banner.rb +53 -0
  29. data/lib/ccs/components/govuk/details.rb +51 -0
  30. data/lib/ccs/components/govuk/error_message.rb +58 -0
  31. data/lib/ccs/components/govuk/error_summary/item.rb +52 -0
  32. data/lib/ccs/components/govuk/error_summary.rb +68 -0
  33. data/lib/ccs/components/govuk/field/input/character_count.rb +127 -0
  34. data/lib/ccs/components/govuk/field/input/file_upload.rb +42 -0
  35. data/lib/ccs/components/govuk/field/input/select.rb +80 -0
  36. data/lib/ccs/components/govuk/field/input/text_input/fix.rb +53 -0
  37. data/lib/ccs/components/govuk/field/input/text_input.rb +95 -0
  38. data/lib/ccs/components/govuk/field/input/textarea.rb +57 -0
  39. data/lib/ccs/components/govuk/field/input.rb +60 -0
  40. data/lib/ccs/components/govuk/field/inputs/checkboxes.rb +67 -0
  41. data/lib/ccs/components/govuk/field/inputs/date_input/item.rb +63 -0
  42. data/lib/ccs/components/govuk/field/inputs/date_input.rb +87 -0
  43. data/lib/ccs/components/govuk/field/inputs/item/checkbox/form.rb +45 -0
  44. data/lib/ccs/components/govuk/field/inputs/item/checkbox/tag.rb +41 -0
  45. data/lib/ccs/components/govuk/field/inputs/item/checkbox.rb +48 -0
  46. data/lib/ccs/components/govuk/field/inputs/item/divider.rb +48 -0
  47. data/lib/ccs/components/govuk/field/inputs/item/radio/form.rb +42 -0
  48. data/lib/ccs/components/govuk/field/inputs/item/radio/tag.rb +41 -0
  49. data/lib/ccs/components/govuk/field/inputs/item/radio.rb +48 -0
  50. data/lib/ccs/components/govuk/field/inputs/item.rb +109 -0
  51. data/lib/ccs/components/govuk/field/inputs/radios.rb +67 -0
  52. data/lib/ccs/components/govuk/field/inputs.rb +55 -0
  53. data/lib/ccs/components/govuk/field.rb +106 -0
  54. data/lib/ccs/components/govuk/fieldset/legend.rb +63 -0
  55. data/lib/ccs/components/govuk/fieldset.rb +52 -0
  56. data/lib/ccs/components/govuk/footer/link.rb +53 -0
  57. data/lib/ccs/components/govuk/footer/meta.rb +58 -0
  58. data/lib/ccs/components/govuk/footer/navigation.rb +59 -0
  59. data/lib/ccs/components/govuk/footer.rb +129 -0
  60. data/lib/ccs/components/govuk/form_group.rb +58 -0
  61. data/lib/ccs/components/govuk/header/link.rb +54 -0
  62. data/lib/ccs/components/govuk/header/navigation.rb +70 -0
  63. data/lib/ccs/components/govuk/header.rb +105 -0
  64. data/lib/ccs/components/govuk/hint.rb +47 -0
  65. data/lib/ccs/components/govuk/inset_text.rb +50 -0
  66. data/lib/ccs/components/govuk/label.rb +83 -0
  67. data/lib/ccs/components/govuk/notification_banner.rb +105 -0
  68. data/lib/ccs/components/govuk/pagination/increment/next.rb +42 -0
  69. data/lib/ccs/components/govuk/pagination/increment/previous.rb +41 -0
  70. data/lib/ccs/components/govuk/pagination/increment.rb +96 -0
  71. data/lib/ccs/components/govuk/pagination/item/ellipsis.rb +26 -0
  72. data/lib/ccs/components/govuk/pagination/item/form.rb +47 -0
  73. data/lib/ccs/components/govuk/pagination/item/tag.rb +45 -0
  74. data/lib/ccs/components/govuk/pagination/item.rb +62 -0
  75. data/lib/ccs/components/govuk/pagination.rb +94 -0
  76. data/lib/ccs/components/govuk/panel.rb +60 -0
  77. data/lib/ccs/components/govuk/phase_banner.rb +67 -0
  78. data/lib/ccs/components/govuk/skip_link.rb +49 -0
  79. data/lib/ccs/components/govuk/step_by_step_navigation/section/content/list/item.rb +51 -0
  80. data/lib/ccs/components/govuk/step_by_step_navigation/section/content/list.rb +48 -0
  81. data/lib/ccs/components/govuk/step_by_step_navigation/section/content/paragraph.rb +43 -0
  82. data/lib/ccs/components/govuk/step_by_step_navigation/section/content.rb +61 -0
  83. data/lib/ccs/components/govuk/step_by_step_navigation/section/heading.rb +67 -0
  84. data/lib/ccs/components/govuk/step_by_step_navigation/section.rb +54 -0
  85. data/lib/ccs/components/govuk/step_by_step_navigation.rb +57 -0
  86. data/lib/ccs/components/govuk/summary_list/action/link.rb +57 -0
  87. data/lib/ccs/components/govuk/summary_list/card/actions.rb +57 -0
  88. data/lib/ccs/components/govuk/summary_list/card/title.rb +49 -0
  89. data/lib/ccs/components/govuk/summary_list/card.rb +61 -0
  90. data/lib/ccs/components/govuk/summary_list/row/actions.rb +57 -0
  91. data/lib/ccs/components/govuk/summary_list/row/key.rb +45 -0
  92. data/lib/ccs/components/govuk/summary_list/row/value.rb +45 -0
  93. data/lib/ccs/components/govuk/summary_list/row.rb +63 -0
  94. data/lib/ccs/components/govuk/summary_list.rb +72 -0
  95. data/lib/ccs/components/govuk/table/body/data_cell.rb +51 -0
  96. data/lib/ccs/components/govuk/table/body/head_cell.rb +50 -0
  97. data/lib/ccs/components/govuk/table/header/head_cell.rb +52 -0
  98. data/lib/ccs/components/govuk/table.rb +109 -0
  99. data/lib/ccs/components/govuk/tabs/panel.rb +56 -0
  100. data/lib/ccs/components/govuk/tabs/tab.rb +54 -0
  101. data/lib/ccs/components/govuk/tabs.rb +64 -0
  102. data/lib/ccs/components/govuk/tag.rb +49 -0
  103. data/lib/ccs/components/govuk/warning_text.rb +59 -0
  104. data/lib/ccs/frontend_helpers/ccs_frontend/dashboard_section.rb +25 -0
  105. data/lib/ccs/frontend_helpers/ccs_frontend/footer.rb +16 -131
  106. data/lib/ccs/frontend_helpers/ccs_frontend/header.rb +16 -195
  107. data/lib/ccs/frontend_helpers/ccs_frontend.rb +2 -4
  108. data/lib/ccs/frontend_helpers/govuk_frontend/accordion.rb +16 -105
  109. data/lib/ccs/frontend_helpers/govuk_frontend/back_link.rb +16 -29
  110. data/lib/ccs/frontend_helpers/govuk_frontend/breadcrumbs.rb +16 -66
  111. data/lib/ccs/frontend_helpers/govuk_frontend/button.rb +16 -117
  112. data/lib/ccs/frontend_helpers/govuk_frontend/character_count.rb +26 -0
  113. data/lib/ccs/frontend_helpers/govuk_frontend/checkboxes.rb +26 -0
  114. data/lib/ccs/frontend_helpers/govuk_frontend/cookie_banner.rb +16 -126
  115. data/lib/ccs/frontend_helpers/govuk_frontend/date_input.rb +26 -0
  116. data/lib/ccs/frontend_helpers/govuk_frontend/details.rb +18 -36
  117. data/lib/ccs/frontend_helpers/govuk_frontend/error_message.rb +31 -54
  118. data/lib/ccs/frontend_helpers/govuk_frontend/error_summary.rb +32 -86
  119. data/lib/ccs/frontend_helpers/govuk_frontend/fieldset.rb +18 -61
  120. data/lib/ccs/frontend_helpers/govuk_frontend/file_upload.rb +26 -0
  121. data/lib/ccs/frontend_helpers/govuk_frontend/footer.rb +16 -173
  122. data/lib/ccs/frontend_helpers/govuk_frontend/form_group.rb +26 -39
  123. data/lib/ccs/frontend_helpers/govuk_frontend/header.rb +16 -151
  124. data/lib/ccs/frontend_helpers/govuk_frontend/hint.rb +17 -28
  125. data/lib/ccs/frontend_helpers/govuk_frontend/input.rb +26 -0
  126. data/lib/ccs/frontend_helpers/govuk_frontend/inset_text.rb +18 -34
  127. data/lib/ccs/frontend_helpers/govuk_frontend/label.rb +17 -82
  128. data/lib/ccs/frontend_helpers/govuk_frontend/notification_banner.rb +18 -126
  129. data/lib/ccs/frontend_helpers/govuk_frontend/pagination.rb +16 -326
  130. data/lib/ccs/frontend_helpers/govuk_frontend/panel.rb +18 -41
  131. data/lib/ccs/frontend_helpers/govuk_frontend/phase_banner.rb +18 -39
  132. data/lib/ccs/frontend_helpers/govuk_frontend/radios.rb +26 -0
  133. data/lib/ccs/frontend_helpers/govuk_frontend/select.rb +26 -0
  134. data/lib/ccs/frontend_helpers/govuk_frontend/skip_link.rb +16 -30
  135. data/lib/ccs/frontend_helpers/govuk_frontend/step_by_step_navigation.rb +23 -204
  136. data/lib/ccs/frontend_helpers/govuk_frontend/summary_list.rb +16 -216
  137. data/lib/ccs/frontend_helpers/govuk_frontend/table.rb +16 -114
  138. data/lib/ccs/frontend_helpers/govuk_frontend/tabs.rb +16 -85
  139. data/lib/ccs/frontend_helpers/govuk_frontend/tag.rb +16 -32
  140. data/lib/ccs/frontend_helpers/govuk_frontend/textarea.rb +26 -0
  141. data/lib/ccs/frontend_helpers/govuk_frontend/warning_text.rb +18 -43
  142. data/lib/ccs/frontend_helpers/govuk_frontend.rb +17 -19
  143. data/lib/ccs/frontend_helpers/version.rb +1 -1
  144. metadata +110 -14
  145. data/lib/ccs/frontend_helpers/ccs_frontend/dashboard_panels.rb +0 -79
  146. data/lib/ccs/frontend_helpers/ccs_frontend/logo.rb +0 -49
  147. data/lib/ccs/frontend_helpers/govuk_frontend/field/character_count.rb +0 -165
  148. data/lib/ccs/frontend_helpers/govuk_frontend/field/checkboxes.rb +0 -200
  149. data/lib/ccs/frontend_helpers/govuk_frontend/field/date_input.rb +0 -153
  150. data/lib/ccs/frontend_helpers/govuk_frontend/field/file_upload.rb +0 -83
  151. data/lib/ccs/frontend_helpers/govuk_frontend/field/input.rb +0 -153
  152. data/lib/ccs/frontend_helpers/govuk_frontend/field/radios.rb +0 -201
  153. data/lib/ccs/frontend_helpers/govuk_frontend/field/select.rb +0 -124
  154. data/lib/ccs/frontend_helpers/govuk_frontend/field/textarea.rb +0 -106
  155. data/lib/ccs/frontend_helpers/govuk_frontend/field.rb +0 -213
  156. data/lib/ccs/frontend_helpers/shared_methods.rb +0 -27
@@ -1,49 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'action_view'
4
-
5
- module CCS
6
- module FrontendHelpers
7
- module CCSFrontend
8
- # = CCS Logo
9
- #
10
- # This helper is used for generating the logo component from the
11
- # {https://github.com/tim-s-ccs/ts-ccs-frontend/tree/main/src/ccs/components/logo CCS - Components - Logo}
12
-
13
- module Logo
14
- include ActionView::Context
15
- include ActionView::Helpers::TagHelper
16
- include ActionView::Helpers::TextHelper
17
-
18
- # Generates the CCS logo used in {ccs_header} and {ccs_footer}
19
- #
20
- # @return [ActiveSupport::SafeBuffer] the HTML for the logo used in {ccs_header} and {ccs_footer}
21
-
22
- def ccs_logo
23
- tag.span(class: 'ccs-logo') do
24
- concat(tag.svg(class: 'ccs-logo__svg', xmlns: 'http://www.w3.org/2000/svg', height: '101', width: '121', aria: { hidden: 'true' }, focusable: 'false', viewBox: '0 0 121 101') do
25
- CCS_LOGO_PATHS.each { |ccs_logo_path_attributes| concat(tag.path(**ccs_logo_path_attributes)) }
26
- end)
27
- concat(tag.span('Crown Commercial Service', class: 'ccs-logo__text', hidden: true))
28
- end
29
- end
30
-
31
- # Array of the SVG paths for the CCS Logo
32
-
33
- CCS_LOGO_PATHS = [
34
- {
35
- fill: 'currentColor',
36
- 'fill-rule': 'evenodd',
37
- d: 'M1.9.4H0v99.8h1.9V.4zm20 43c-.4-2.2-2.1-3.3-4.3-3.3-3.7 0-5.3 3-5.3 6.3 0 3.6 1.6 6.6 5.3 6.6 2.7 0 4.3-2 4.5-4.5h2c-.3 3.9-2.8 6.2-6.7 6.2-4.8 0-7.2-3.5-7.2-8 0-4.6 2.6-8.3 7.4-8.3 3.3 0 6 1.8 6.4 5h-2zm4-.3h1.7v2.3c1-1.8 2.2-2.7 4.2-2.6v2c-3 0-4.1 1.7-4.1 4.5v5h-1.8zm11.6-.3c3.6 0 5.5 2.6 5.5 5.9s-2 5.9-5.5 5.9c-3.6 0-5.5-2.6-5.5-6 0-3.2 2-5.8 5.5-5.8zm0 10.1c2 0 3.5-1.5 3.5-4.3s-1.6-4.2-3.5-4.2c-2 0-3.5 1.5-3.5 4.2 0 2.8 1.6 4.3 3.5 4.3zm18 1.4h-2l-2.4-9-2.3 9h-2l-3.6-11.2h2l2.6 9.2 2.3-9.2h2l2.4 9.2L57 43h2zm4.8-11.2H62v1.8a4 4 0 0 1 3.7-2.1c3 0 4 1.7 4 4.1v7.4h-2v-7.6c0-1.4-.8-2.2-2.2-2.2-2.3 0-3.4 1.5-3.4 3.5v6.4h-1.8V43zM22 66.4c-.5-2.2-2.2-3.3-4.4-3.3-3.7 0-5.3 3-5.3 6.3 0 3.5 1.6 6.5 5.3 6.5 2.7 0 4.3-2 4.5-4.5h2c-.3 3.9-2.7 6.2-6.7 6.2-4.8 0-7.2-3.5-7.2-8 0-4.6 2.6-8.3 7.4-8.3 3.3 0 6 1.8 6.4 5.1h-2zm8.8-.7c3.6 0 5.5 2.6 5.5 6s-1.9 5.8-5.5 5.8-5.4-2.6-5.4-5.9 1.9-5.9 5.4-5.9zm0 10.1c2 0 3.6-1.5 3.6-4.2s-1.6-4.3-3.6-4.3-3.5 1.5-3.5 4.3c0 2.7 1.6 4.2 3.5 4.2zM38 66h1.7v1.6c1-1.2 2.2-1.9 3.8-1.9 1.3 0 2.6.5 3 2a4.2 4.2 0 0 1 3.6-2c2.2 0 3.7 1 3.7 3.3v8.2H52v-7.4c0-1.4-.4-2.5-2.2-2.5-1.8 0-3 1.2-3 2.9v7H45v-7.4c0-1.5-.4-2.5-2.1-2.5-2.2 0-3 2-3 2.9v7H38V66zm18 0h2v1.6a4.4 4.4 0 0 1 3.7-1.9c1.3 0 2.6.5 3 2a4.2 4.2 0 0 1 3.6-2c2.2 0 3.7 1 3.7 3.3v8.2h-1.8v-7.4c0-1.4-.4-2.5-2.2-2.5-1.8 0-3 1.2-3 2.9v7h-1.8v-7.4c0-1.5-.5-2.5-2.1-2.5-2.2 0-3 2-3 2.9v7H56V66zm27.7 7.6c-.5 2.5-2.3 3.9-4.8 3.9-3.6 0-5.3-2.5-5.4-6 0-3.4 2.2-5.8 5.3-5.8 4 0 5.2 3.7 5 6.4h-8.4c0 2 1 3.7 3.5 3.7 1.6 0 2.7-.7 3-2.2zm-1.8-3c0-1.9-1.4-3.3-3.2-3.3-2 0-3.1 1.5-3.2 3.2zm3.5-4.6h1.8v2.3c.9-1.8 2.2-2.6 4.1-2.6v2c-3 0-4 1.7-4 4.5v5h-2V66zm14.4 3.6c-.2-1.4-1.3-2.3-2.8-2.3-2.7 0-3.5 2.2-3.5 4.4 0 2.1 1 4.2 3.3 4.2 1.8 0 2.9-1 3.1-2.7h1.9c-.4 2.7-2.2 4.3-5 4.3-3.4 0-5.3-2.4-5.3-5.8s1.8-6 5.4-6c2.5 0 4.5 1.2 4.8 3.9H100zm5.5-5.7h-1.8v-2.2h1.8zm-1.8 2h1.8v11.3h-1.8V66zm14.1 11.3c-.3.2-.7.3-1.3.3-1 0-1.6-.5-1.6-1.7a5 5 0 0 1-4 1.7c-2 0-3.7-1-3.7-3.2 0-2.5 1.9-3 3.8-3.4 2.1-.4 3.8-.3 3.8-1.7 0-1.6-1.3-2-2.5-2-1.6 0-2.7.6-2.8 2.2h-1.9c.1-2.8 2.3-3.8 4.8-3.8 2 0 4.2.5 4.2 3.1v5.8c0 .9 0 1.3.6 1.3h.6v1.4zm-3-5.8c-.7.5-2 .5-3.3.7-1.3.3-2.3.7-2.3 2s1 1.7 2.2 1.7c2.5 0 3.5-1.5 3.5-2.5v-2zm4.4-9.8h1.9v15.6H119zM20 89.1c-.3-2.2-1.8-3.1-4-3.1-1.7 0-3.4.6-3.4 2.6s2.4 2.2 5 2.8c2.4.6 5 1.4 5 4.5 0 3.3-3.3 4.6-6.2 4.6-3.4 0-6.4-1.7-6.4-5.5h2c0 2.6 2.1 3.8 4.5 3.8 2 0 4-.6 4-2.9 0-2-2.5-2.5-5-3s-5-1.3-5-4.1c0-3.2 2.9-4.6 5.7-4.6 3.2 0 5.6 1.5 5.7 5zm14 7.5a4.8 4.8 0 0 1-4.9 3.8c-3.6 0-5.3-2.5-5.4-6 0-3.4 2.2-5.8 5.3-5.8 4 0 5.2 3.7 5 6.5h-8.4c0 2 1 3.7 3.5 3.7 1.6 0 2.6-.8 3-2.2H34zm-1.9-3.2c0-1.7-1.4-3.2-3.3-3.2s-3 1.5-3.2 3.2zm3.5-4.5h1.8v2.4c.9-1.8 2.2-2.7 4.1-2.7v2c-3 0-4 1.7-4 4.5v5h-2V89zm12.6 11.3h-2L42 88.9h2.1l3.2 9.4 3.1-9.4h2l-4.2 11.3zm7.2-13.3h-1.9v-2.3h1.9V87zm-1.9 2h1.9v11.3h-1.9V88.9zm12 3.6c-.3-1.4-1.3-2.3-2.8-2.3-2.7 0-3.6 2.2-3.6 4.5 0 2 1 4.1 3.4 4.1 1.8 0 2.8-1 3-2.7h2c-.5 2.7-2.2 4.3-5 4.3-3.5 0-5.3-2.4-5.3-5.7s1.7-6 5.3-6c2.6 0 4.6 1.1 4.8 3.8zm13.2 4c-.5 2.5-2.3 3.9-4.8 3.9-3.6 0-5.3-2.5-5.4-6 0-3.4 2.2-5.8 5.2-5.8 4 0 5.2 3.7 5.2 6.5h-8.5c0 2 1 3.7 3.5 3.7 1.6 0 2.6-.8 3-2.2h1.8zm-1.8-3c-.1-1.8-1.4-3.3-3.3-3.3-2 0-3 1.5-3.2 3.2zM25.6 5c-.2.3-.4.5-.3.8l.4.7.3-.8-.4-.7zm4.6 0c.1.3.3.5.3.8 0 .2-.3.4-.5.7 0-.3-.3-.6-.3-.8 0-.2.4-.6.5-.7zm-7.3-.2a.3.3 0 0 0 .3-.3.3.3 0 0 0-.3-.3.3.3 0 0 0-.3.3.3.3 0 0 0 .3.3zm.3.4a.3.3 0 0 0-.3-.3.3.3 0 0 0-.4.3c0 .2.2.3.4.3a.3.3 0 0 0 .3-.3zm0 .8a.3.3 0 0 0-.2-.3.3.3 0 0 0-.3.3c0 .2.1.3.3.3a.3.3 0 0 0 .3-.3zm1.5-2.7A.3.3 0 0 0 25 3a.3.3 0 0 0-.3-.3.3.3 0 0 0-.3.3c0 .2 0 .3.3.3zm-.8.3a.3.3 0 0 0 .3-.4.3.3 0 0 0-.3-.3.3.3 0 0 0-.3.3c0 .2.1.4.3.4zm-.6.5a.3.3 0 0 0 .3-.3.3.3 0 0 0-.3-.3.3.3 0 0 0-.3.3c0 .2.1.3.3.3zm2.2-.7a.3.3 0 0 0 .3-.3.3.3 0 0 0-.3-.3.3.3 0 0 0-.4.3c0 .1.2.3.4.3zm.7.2a.3.3 0 0 0 .4-.3.3.3 0 0 0-.4-.3.3.3 0 0 0-.3.3c0 .2.2.3.3.3zm.8.4a.3.3 0 0 0 .3-.4.3.3 0 0 0-.3-.3.3.3 0 0 0-.4.3c0 .2.2.4.4.4zm5.5.5c0 .2.1.3.3.3a.3.3 0 0 0 .3-.3.3.3 0 0 0-.3-.3.3.3 0 0 0-.3.3zm.4.4a.3.3 0 0 0-.3.3c0 .2 0 .3.3.3a.3.3 0 0 0 .3-.3.3.3 0 0 0-.3-.3zm-.2.8a.3.3 0 0 0-.3.3c0 .2.2.3.3.3A.3.3 0 0 0 33 6a.3.3 0 0 0-.3-.3zm-1.6-2.4a.3.3 0 0 0 .3-.3.3.3 0 0 0-.3-.3.3.3 0 0 0-.4.3c0 .2.2.3.4.3zm.8.3a.3.3 0 0 0 .3-.4.3.3 0 0 0-.4-.3.3.3 0 0 0-.3.3c0 .2.2.4.4.4zm.5.5a.3.3 0 0 0 .3-.3.3.3 0 0 0-.3-.3.3.3 0 0 0-.3.3c0 .2.2.3.3.3zm-2.1-.7a.3.3 0 0 0 .3-.3.3.3 0 0 0-.3-.3.3.3 0 0 0-.3.3c0 .1 0 .3.3.3zm-.8.2a.3.3 0 0 0 .3-.3.3.3 0 0 0-.3-.3.3.3 0 0 0-.3.3c0 .2.1.3.3.3zm-1 0c0 .2 0 .4.3.4a.3.3 0 0 0 .3-.4.3.3 0 0 0-.3-.3.3.3 0 0 0-.3.3zm-1.1 1.7h.3V4.1h-.3zm1-1.4a.8.8 0 0 1-.3 0v1.4h.3zm-.7-1.5v-.7a1 1 0 0 0-.8.8h.8zm.4 0h.7a1 1 0 0 0-.7-.8z'
38
- },
39
- { d: 'M27 3c0 .3.4.7.9.7a1 1 0 0 0 1-.8zm1.4-1.4a.8.8 0 0 1-.4-.7c.2 0 .5.2.7.5v-1l-.7.3c0-.2.1-.4.4-.7h-1c.2.3.3.5.3.8-.2 0-.5-.3-.7-.5v1l.7-.4c0 .3-.2.6-.4.7zm0 22.2a.4.4 0 0 1-.4-.4.4.4 0 1 1 .8 0c0 .2-.2.4-.4.4zm-1.8-.6a.4.4 0 0 1-.4-.4c0-.2.2-.4.4-.4s.4.2.4.4-.2.4-.4.4zm-.6-1.8l-.1-.1h-.5l-.3.2v.1c.3.3.3.4.2.5v.1h-.5l-.1-.1v.1l-.1.1a.7.7 0 0 0-.2.4 1 1 0 0 0 .2.3l.4.2a.6.6 0 0 1-.6 0l-.4-.6c0-.2 0-.5.3-.8v-.1l-.1-.3h.3c.2-.1.6-.5 1-.5a.7.7 0 0 1 .5.2l.2.4a.3.3 0 0 1-.2-.1zm3.6 1.4a23.8 23.8 0 0 1-3.3-1.1.8.8 0 0 0-.2-.7l-.6-.3h-.3c-.2 0-.3-.3-.5-.4a5.7 5.7 0 0 1-1-1.7 4.5 4.5 0 0 1-.2-1c0 .2-.4.7-1 .7V18c-.2.1-.4.3-1 .1 0 .5.2.9.3 1.3a6.6 6.6 0 0 0 1.4 2.4l.7.6v.1c0 .2.2.6.5.8l.8-.1a5 5 0 0 0 1.7.6 7 7 0 0 0 2 .3c.5 0 1.1-.2 1.7-.6l.7-.5a5 5 0 0 1-1.7-.3zm-.4 4l-.2-.2c-.4 0-.2 1-.7 1-.2 0-.3-.1-.3-.2V27l-.1-.2c-.1 0-.2 0-.2.2v.3c0 .1 0 .2-.2.2-.5 0-.3-1-.7-1-.1 0-.2 0-.3.2a.8.8 0 0 1-.1-.4c0-.2.1-.4.4-.4.6 0 .4.7.7.7l.2-.2c0-.2-.4-.4-.4-.7 0-.3.3-.6.6-.8.3.2.6.5.6.8 0 .3-.4.5-.4.7a.2.2 0 0 0 .2.2c.2 0 .1-.7.6-.7.3 0 .5.2.5.4l-.2.4zM28 28.2a.3.3 0 0 1-.3-.2c0-.1.1-.3.3-.3s.2.2.2.3a.3.3 0 0 1-.2.2zm1-2.5h-.1v-1.1a6.3 6.3 0 0 1-1.8-.3v1.4h-.2c-.4 0-.6.3-.6.7 0 .3.1.5.3.7 0-.2.1-.3.2-.3.3 0 .1 1 .7 1v.2c0 .3.2.5.5.5s.4-.3.4-.5c.5 0 .5-1.1.7-1.1 0 0 .2.1.2.3.2-.2.4-.4.4-.7 0-.4-.3-.7-.7-.7z' },
40
- { d: 'M42.6 27.1h-.1c-1.4.3-3-.8-4.7-1.9-1.4-1-2.7-1.8-3.8-1.8-.4 0-.8.1-1 .3a2 2 0 0 0-1 1l-.5 1-.3.8c0 .2 0 .4.3.6.1.2.3.4.7.5l.2.1.5.4a9.5 9.5 0 0 1-2 .5l-3 .3c-1 0-2-.1-2.9-.3a9.4 9.4 0 0 1-2-.5c0-.2.2-.3.5-.5h.2l.7-.5.3-.6-.4-.8a5.3 5.3 0 0 1-.5-1 2 2 0 0 0-.9-1c-.3-.2-.6-.3-1-.3-1.2 0-2.5 1-3.9 1.8-1.6 1.1-3.3 2.2-4.6 1.8l-.2.1.1.2 1.2.7c.5.4 1 .8 1.4.8.5 0 1-.2 1.7-.5a25.3 25.3 0 0 0 1.6-1 7 7 0 0 1 3.3-1.7c0 .2-.2.3-.3.4-.3.2-.6.5-.6 1 0 .4.1.6.3 1l.2.4.2.8.1.4c.1.3.2.7 1 1.1.9.5 2.4.7 4.6.7 2.1 0 3.7-.2 4.6-.7.7-.4.8-.9 1-1v-.5l.2-.8.3-.5c.1-.3.3-.5.3-.8 0-.5-.3-.8-.7-1.1l-.3-.3c1.1 0 2.2.8 3.3 1.6l1.7 1c.6.3 1.1.5 1.6.5s1-.3 1.5-.7l1.1-.8v-.2zM28.1 16.5v-5c.5 0 1 0 1.5.3s1 .6 1.4 1.1c.4.5.8 1 1 1.7a5.8 5.8 0 0 1 .3 2h-4.2zm-.2-7.2c-1.5 0-2.5.4-3 .8-.4-.2-.5-.4-.5-.6 0-.9 2.3-1 3.5-1s3.5.2 3.5 1c0 .2-.1.4-.5.6-.6-.4-1.6-.8-3-.8zm-.1 7.2h-4.4a5.8 5.8 0 0 1 1.3-3.6c.4-.5 1-.8 1.5-1a3.6 3.6 0 0 1 1.6-.5zm6.6-.3c-.1-.1-.4-.3-.5-.6l-1-1.9a.7.7 0 0 1 0-.3V13l.3-.3.1-.2c-.2-.4-.4-.7-.8-1a6.5 6.5 0 0 0-1.3-1.2c.3-.2.5-.4.5-.9a.7.7 0 0 0-.2-.5c.2-1 .7-2 1.1-2.4l-.8-.4c.2.4.2.8.1 1-.2-.2-.4-.4-.4-.7a4.1 4.1 0 0 1-.4 1c.3-.1.5-.2.7 0 0 .1-.5.4-1 .3-.4-.1-.7-.3-.7-.5l.3-.3c.2 0 .3.3.2.4.2-.1.5-.9.1-1-.3 0-.6.4-.7.7 0-.4-.2-.7-.5-.7-.4 0-.3.7-.2 1 0-.3.2-.5.3-.5.1 0 .3.1.3.3s-.4.4-.8.4c-.3 0-1-.1-1-.8.1 0 .5.2.7.5a5.4 5.4 0 0 1 0-1.2c-.2.3-.5.4-.7.5a1.6 1.6 0 0 1 .6-.9H27c.3.2.6.6.6.9-.2 0-.6-.2-.7-.5v1.2c.1-.2.5-.4.7-.5 0 .7-.7.9-1 .9-.5 0-.8-.2-.8-.4a.2.2 0 0 1 .2-.3c.1 0 .3.1.3.4.1-.2.2-1-.2-1-.3 0-.4.4-.5.8 0-.4-.4-.8-.7-.7-.4 0-.1.8.1 1 0-.2 0-.5.2-.5s.3.2.3.3c0 .2-.3.4-.6.5a1 1 0 0 1-1.1-.3c.2-.2.4 0 .7 0a4.1 4.1 0 0 1-.3-1l-.5.7c0-.2 0-.7.2-1l-1 .3c.5.5 1 1.5 1.3 2.4a.7.7 0 0 0-.3.6c0 .4.3.6.5.8-.5.3-1 .7-1.3 1.2-.6.6-1 1.4-1.4 2.3l.7.8c.3.3.4.6.4.8 0 .4 0 .6.3.8l.2.6h4.4v4.7c-.2 0-.4 0-.5.2l1.5.6c0-.3 0-.5.2-.7l-1-.1v-4.6h4.3c0 .7-.1 1.3-.4 1.8a4.9 4.9 0 0 1-2.3 2.8l-.2.1-.2.4-.1.5.5.1c1.5.4 1.8.3 1.9.2l1-.8c.5-.7 1-1.5 1.3-2.4a8 8 0 0 0 .6-2.8v-.5z' },
41
- { d: 'M30.4 13.5v.1l.1.1v.2h.2c.3.6.6 1.2.7 1.8h-.2v.1h-1v-.1H30a.3.3 0 0 0-.1-.1.3.3 0 0 0 0 .1h-.2l-.1.1h-1l.1-.2-.2.1v-1.4l.2-.1V14a.3.3 0 0 0 0-.1.3.3 0 0 0 0-.1v-.2h-.2v-1.3h.2v-.1l.8.4.8.8zm1.2 2.2c.1 0 0 .2 0 .2a4.8 4.8 0 0 0-.9-2.2c.1 0 .2 0 .2-.2l-.2.1-.1-.1-1-.9-1-.5h.2c0-.2 0-.2-.2-.2h-.2v.2h-.1l.1.3v-.1 1.6l-.2.1.3.1v1.8c-.1 0-.2-.1 0-.2-.2 0-.3.2-.3.2h.2l-.1.2h.2l.2-.1h-.2 1.3v.2c.2 0 .2-.2.2-.2h1.2l.2.2s.1 0 0-.2l.2.1v-.2c.2 0 .2-.2 0-.2z' },
42
- { d: 'M30.9 15.2h.1-.1V15c0-.1 0-.1-.1 0s-.4 0-.4-.3h.4l-.2-.4-.2-.1v-.4l-.1-.2v.6l.5.4-.1.1h-.1a.1.1 0 0 1-.1-.1l-.3-.4c-.2-.2-.1-.4 0-.5l-.2-.5v-.1l-.2-.1h-.2l-.1.2v.1h.2-.1v.1l.2.1c0 .2-.2.2-.2.3h-.1l-.2-.2-.1-.1v-.3H29v.1c0-.1-.1-.2-.2-.1h.2l-.1.1v.1c0 .1 0 .1 0 0a.1.1 0 0 0 0 .2l.1.1c.1 0 .2.3.4.3l-.2.2a.3.3 0 0 1-.2.1h-.2v.1s-.1.1 0 .2v-.1.1h.4c.1 0 0 0 0 0l.2-.1h.2v-.2c0 .2.4.2.5.4h-.3l-.3.1.2.3h-.2c-.1 0-.1-.2-.2-.1a.1.1 0 0 0-.1 0v.2c0 .1.1.2.2.1s0 0 .1 0h.1s0-.1 0 0h.2V15l.2-.1s.2.3.4.3h.2c0 .1 0 0-.1 0a.1.1 0 0 0-.2.2h.2v.2h.1v-.2.1h.1c.1-.1 0-.1 0-.2h.1a.1.1 0 0 0 .1-.1zm-4 2.4l-.2.1.1.1v.7l-.7-1 .7-.2c.1 0 .2.1.1.3zm-.2 1.6l-1-1.4.3-.1.7 1v.5zm-.1.7L25 17.8h.4l1.1 1.7v.4zm-1.7-2.1l1.6 2.3c-.8-.4-1.7-1.1-1.6-2.3zm2.4-.2c0-.3-.2-.5-.5-.5-.2 0-.7.3-1.3.3-.3 0-.7-.1-.9-.3v.2a.2.2 0 0 0-.3-.2.2.2 0 0 0-.1.2.2.2 0 0 0 .2.2v.1c0 1 .7 2.4 2 2.7.2 0 .4 0 .4.2 0 .1 0 .2-.2.2s0 0 0-.1v-.2c-.1 0-.3 0-.3.2a.3.3 0 0 0 .3.3c.2 0 .5-.1.4-.5h.2v-2.6h.2v-.2zm-1.1-4.8v-.1.1zm0-.2v-.1zm.8.4c.4 0 .5 0 .5-.2 0-.3-.8-.1-.8-.3v-.1c.5 0 .5-.4.8-.4-.4 0-.5.2-.6.3l.1-.2-.4.2v.2c0 .3.8 0 .8.3 0 .1 0 .2-.4.2-.1 0-.3-.2-.6 0l.1-.3v-.2h-.3v.5H26v-.4h-.3.1v.1c-.1 0-.1.1 0 .2 0 .1-.2 0-.1 0-.1.1 0 .1 0 .1h.1v.2h-.2s-.2.1-.2 0H25l.2.1H25c0 .1 0 .1 0 0v.1l.1.1v-.1h.8v-.1h.2l.2-.1c.1 0-.1-.2.2-.2l.1.2h.1-.3v.2h.2v-.2h.1c.2 0 0 0 0 0h.2c0 .1 0 0 0 0l-.1.2h.2V13h-.1.1zm-1.6 1.1V14h.1v.1h-.1zm.1-.2h-.1.1zm0 0h.2l-.1.1zm2 .3L27 14h-1c0-.2.2-.2.4-.2.4.2.9 0 1.1 0-.2-.2-.5 0-.8 0l.3-.1h-.6c-.3 0-.5 0-.5.2 0 .3.8.1 1.1.1h.3c0 .2-.3.2-.4.2-.2 0-.9-.2-1.3 0a.3.3 0 0 0 .1-.3v-.2h-.1l-.1-.1h-.2v.1l-.1.2v.2h-.1L25 14v-.3l-.1-.1v.1h-.1s0-.1-.1 0v.2c0 .1 0 .1 0 0-.2.1 0 .2 0 .2h.1l.2.1s0 .1.1 0v.2h-.5c0-.1-.1-.1-.1 0a.1.1 0 0 0-.1.1s0 .1.1 0v.2l.1-.2.1.1h.7l.2-.2c.4 0 .2-.2.6-.2h.1v.2h.1c-.1 0-.1-.1-.2 0a.1.1 0 0 0-.2 0h.1v.1c0 .1.1.2.2.1l.1-.1h.2v-.2h.5v.1H27a.1.1 0 0 0-.1.1h.1v.1h.3l-.1-.1v-.4h-.4.7zM25 15.5v-.2h.1v.2H25zm.1-.3zm0 0h.2v.1h-.1zm2.2.3l-.4-.1h-1.2c0-.2.3-.1.5-.1h1.1c-.2-.2-.5 0-.7 0l.3-.1h-.7l-.6.1c0 .3 1 .2 1.3.2h.3l-.4.1h-1.6s.2-.1.1-.2v-.2H25V15l-.1.1v.4h-.2l-.1-.2v-.2l-.2-.1v.4c0 .2-.1.1 0 0a.1.1 0 0 0 0 .2h.1l.2.2h.1v.2h-.4v-.1h-.2l.2.1-.2-.1H24c0 .1 0 .1.2 0 0 .1-.1.1 0 .1h.8l.1-.1.2-.1c.5 0 .2-.2.7-.2l.1.1c0 .1 0 0-.2 0a.1.1 0 0 0-.1 0h.1c0 .1-.1 0 0 .2l.1.1h.1v-.1h.3v-.2h-.1.7c0 .1 0 0 0 0h-.1a.1.1 0 0 0-.1.2h.1v.1h.1v-.1l.2.1-.1-.2v-.3h-.4.6zm1.9 2c0-.1 0-.1 0 0v-.2.2zm0-.4zm.1 0l.2.1h-.1zm2.2.6l-.1-.1H31l.5-.2-.4-.1h-1.2c0-.2.3-.1.5-.1h1.1c-.3-.1-.5 0-.8 0l.4-.1h-.7l-.6.1c0 .3 1 .2 1.2.2h.3l-.4.1h-1.5s.1-.1 0-.2h.1V17H29v.4h-.2l-.1-.1V17l-.1-.1v.1h-.1v.1c-.1 0-.1 0 0 .1 0 .2-.2.1-.1 0a.1.1 0 0 0 .1.2l.3.2.1.1h-.6l.2.1h-.2a.1.1 0 0 0-.1 0c0 .1 0 .2.2 0 0 .1-.1.2 0 .2h.6l.1-.1h.1v-.1c.6 0 .3-.2.8-.1l.1.1h.1-.2a.1.1 0 0 0-.2 0h.1v.2s0 .1.1 0 0 0 .1 0h.2v-.2h.4c0-.1 0 0 .1 0h-.1a.1.1 0 0 0 0 .1v.1h.3v-.2h.5zm-2.2.9h-.1v-.1.1zm0-.2h-.1zm.8 0v.1c.4.1.8-.2 1 0-.2-.2-.4 0-.7 0l.4-.2h-.6c-.2 0-.4 0-.4.2 0 .3.8.1 1 .1l.2.1-.4.1h-1.2s.1-.2 0-.2h.1v-.2h-.2v-.1h-.1l-.2.1v.4h-.2v-.3h-.2.1v.1c-.1 0-.1 0 0 .1 0 .1-.1 0-.1 0a.1.1 0 0 0 .1.2h.3v.2h-.5c0-.1 0-.1 0 0h-.1s-.1 0 0 .1c0 0 0 .1 0 0v.1l.1.1V19h.4l.1.1.2-.1.1-.1h.1c.3 0 0-.3.5-.2l.1.1h.1-.3a.1.1 0 0 0-.1 0h.1v.5h.2V19h.2v-.2H30h.6c0 .1-.1 0-.1 0a.1.1 0 0 0-.2.2h.2s-.1 0 0 0v.1l.1-.1.1.1v-.3h.1v-.2h-.5l.5-.2-.3-.1h-.9.5zm-1 1.6v-.1H29v-.1h.1v.2zm0-.3H29a.5.5 0 0 1 .1 0zm.1 0v.1zm.7 0c.4.2.8 0 1 0h-.7.3-.6c-.1 0-.3 0-.3.2s1 0 1 .1l-.4.1h-1l.2-.2v-.2H29v.5l-.2-.2v-.3h-.2v.3c-.1 0 0 .1 0 0l.1.1.1.2.2.1h-.2v.1h-.4v.1h-.1s-.1 0 0 0c0 .1 0 .2 0 0v.2h.1v-.1h.5l.1.1.2-.1.1-.3h.3v.2c-.2 0-.2-.2-.3-.1v.4h.3v-.2l-.1-.3h.3l.1.1h-.2v.4l.1-.1h.1v-.2h.1v-.1l-.1-.2.5-.1c0-.3-.9 0-.9-.2l.5-.2zM15 3.7s0-.2-.2-.2-.2.2-.2.2c0 .2 0 .3.2.3.1 0 .2-.1.2-.3zm0-.5c0-.2-.2-.2-.3-.2-.1 0-.2 0-.2.2s0 .2.2.2c.1 0 .2 0 .2-.2zm0-.3c.2 0 .3 0 .3-.2s-.1-.2-.3-.2c0 0-.2 0-.2.2s.1.2.2.2zm.6 0c.1 0 .2-.1.2-.3s0-.2-.2-.2l-.2.2.2.3zm2.6-.4h.3a.2.2 0 0 0 0-.3.2.2 0 0 0-.3 0 .2.2 0 0 0 0 .3zm0-.5a.2.2 0 0 0 0-.3.2.2 0 0 0-.4 0 .2.2 0 0 0 0 .3h.3zm-.7-.1a.2.2 0 0 0 0-.3.2.2 0 0 0-.3 0 .2.2 0 0 0 0 .3h.3zm-.5.3a.2.2 0 0 0 0-.3.2.2 0 0 0-.3 0 .2.2 0 0 0 0 .3.2.2 0 0 0 .3 0zM15.6 2l.2.4.2-.2.1.5c0 .1.1.2.3.2l.2-.2-.1-.3-.3-.3h.4l-.1-.4-.3.2v-.4l-.4.1.3.4z' },
43
- { d: 'M18.2 2.6l.1.4-.2-.3v.6l.2-.2c0 .3-.1.5-.3.5 0 0-.2 0-.2-.2 0-.1 0-.3.2-.1 0-.3-.2-.3-.4-.2.2-.3.1-.5-.1-.6-.2.2-.1.5.1.6-.2 0-.4.1-.2.3 0-.2.2-.1.2 0 0 .2 0 .3-.3.4-.3.1-.4 0-.4-.2h.3v-.4l-.4.3.1-.5-.6.3.4.3h-.5l.3.4c0-.3.1-.4.2-.4 0 .2.1.4-.2.5H16c0-.1 0-.3.2-.2 0-.3-.3-.3-.4 0 0-.4 0-.6-.4-.6 0 .3 0 .4.3.6-.1 0-.3.1 0 .3 0-.1 0-.2.2 0l-.1.3c-.1 0-.3 0-.5-.2h.2l-.3-.4v.3l-.1-.3-.3.2.9.8 1.3-.6a9.4 9.4 0 0 1 1.5-.5V2.6zm.7 3c-.3.3-.7 0-1-.3l1.3-.6c-.3.5 0 .7-.3.9zm-.1 3.2c-.4.2-.7-.2-.8-.4V8c.1-.2.2-.3 0-.5 0-.3-.3-.2-.6 0 .2-.3.2-.5 0-.5s-.2.4-.4.3V7c0-.2 0-.2.2-.3l1.2-.4h.3s.3.1.2.2c0 .2-.3-.1-.5 0 0 .1 0 .3.3.3-.3.2-.6.3-.5.5.1.2.2.3.5.3l.3.4c.2.3.2.7-.2 1zm-2.2-2.3c-.3 0-.3-.3-.9-.4l1.4-.5c0 .4-.1.8-.5.9zM23 16.8c0-.2-.4-.5-.4-.8 0-.4 0-.7-.4-1.1l-2.1-2.4s.3 0 .5.2l.7.7A7 7 0 0 1 23 11l.2-.3-.8.3c0-.4 0-.7-.2-1 0-.5 0-1.2-1.2-2 .6.1 1 .7 1.4.3-.4 0-.4-1-2-1.7.6 0 1.1.9 1.8.4-.7-.1-.9-1.3-2-1.6.4 0 .8.2 1.1-.3-.4.1-.6-.2-1-.3V3.7a1.4 1.4 0 0 0-1 .4c0-.3-.2-.4-.5-.3V4l-1.5.4-1.3.7c-.1.1-.2 0-.3-.1-.2.1-.3.3-.2.5a2 2 0 0 0-1 .3c0 .4.4.7.8 1-.7.6-.1 1.3-.7 2 .9 0 .7-1.3 1.2-1.5 0 1-.6 1-.6 2 0 .5.3 1 0 1.4.8-.2.6-1.9 1-2.3.2.2.1.5 0 .8-.2.7 0 1.8-.4 2.2.8-.1.9-1.3 1.5-1.8-.5 1.1-1 3.4-1.8 4.6-1.3 1.8-2.1 3.9-3.3 3.9-.5 0-1-.3-1-1 0-2 3.5-3.3 3.5-5.4 0-1-.8-1.4-1.3-1.4a2 2 0 0 0-1 .5l-.4-.1c-1.2 0-1 2.2-2 2.2.4.2 1.2-.3 1.6-.9-.2 1.4-2.2 1-2 2.8.2-1.4 3.5-1.2 3.5-3.2l-.3-.6.7-.2c.4 0 .7.3.7.9 0 1.7-3.4 3.2-3.4 5.4 0 .4.1.7.3 1-.2 0-.5 0-.7-.2 0 .6.8 1 1.3.6h.3c-.1.5-.7.6-1 .6 1 .7 2.4-.2 2.3-1 .7-.4 1-1.4 1.5-2v.5c-.5.8-1 1.6-1.1 2.8-.1 1-.6 1.8-1.3 1.8h-.5c-.2.1 0 .3 0 .5 0 .3-.6.6-.6 1.4 0 .4.3.9.2 1.1.2-.1.5-.5.6-1 .2 1.2-.5 1.2 0 2.1 0-.3.4-.5.7-.3s0 .2 0 .4c-.2.1-.4.9.3.8-.1 0-.1-.3.2-.3h1.1c.3 0 .4-.3.7-.3s.3.2.2.3c.4 0 .5-.3.5-.5s-.2-.3 0-.4c0-.1.5 0 .3.4.2 0 .4-.2.4-.5s-.4-.5-.7-.4c0-.2-.3-.3-.6-.3-.5 0-.5.5-.8.5-.6 0-1.2-.8-1.2-2.1 0-.8.8-1 1.3-1.2.6-.2 1.5-.8 2.1-1.8.4-.7.5-1.5.4-2.5.7.4.8 1 .8 1.5 0 .6-.3.9-.5 1-.3 0-.3 0-.3.2l.1.3c.3.1.2.4.3.7.1.3.4.7.8 1V21c.6.3.1 1.5 1.3 1.5-.3-.1-.2-.4 0-.5l.4.4c.2.3.2.3.7.3.5 0 .3-.2.6-.2s.2.4.1.6c.5-.2.6-.5.5-.9.4-.2.7 0 .7.3.5-.4 0-1-.3-1 0-.1-.2-.3-.4-.3h-.5c-.2 0-.3.3-.5.3-.7 0-2.2-1.3-2.2-1.9 0-.5 1.4-.9 1.4-1.7 0-1.2-1.1-1.6-2-2.3.3-.4 1.2-.5 1.8-.1 0-.4.3-.3.4-.8.2.4 0 .8.1 1 .2-.2.6-.2.6-.7.1.3-.2.9.1 1.2 0-.3.2-.4.4-.4s.2.1.2.3c0 .4-.6.2-.6.7 0 .2.3.3.3.5 0 .1-.2.3-.5.1l.5.1c.2 0 .5-.2.6-.4.1.3 0 .7-.2.7.2.2.8 0 .7-.7.4 0 .6.3.3.7.3-.1.6-.2.6-.5s-.3-.3-.1-.6zm22 5.5c0-.4.2-.8.6-.8.4 0 .8.4.8.8a.7.7 0 0 1-.8.7.7.7 0 0 1-.7-.7zm-.3 0c0 .5.5 1 1 1s1-.5 1-1a1 1 0 0 0-1.7-.7 1 1 0 0 0-.3.7zM41.6 24a.4.4 0 0 1-.4-.4l.1-.2.5-.1c.2 0 .4.2.4.4s-.2.4-.6.3zm-.4-.9l-.2.4a.5.5 0 0 0 .2.5l.4.2h.6a.6.6 0 0 0 .3-.4c0-.4-.2-.7-.6-.8l-.7.1zM36 10.3l.2-.4a.6.6 0 0 1 .4-.1h.2a.4.4 0 0 1 0 .3c0 .1 0 .2-.2.3H36v-.1zm0-.6c-.3.2-.3.6-.1.9.2.2.5.2.9 0a.8.8 0 0 0 .3-.5l-.1-.4-.4-.1-.5.1zm4.6 13a.3.3 0 0 1-.3-.1l-.1-.4c0-.2 0-.3.2-.4a.3.3 0 0 1 .2-.1c.2 0 .3.2.3.5l-.1.4h-.2zm-.4-1.2a.8.8 0 0 0-.2.6c0 .2 0 .5.2.6l.4.2a.5.5 0 0 0 .4-.2.8.8 0 0 0 .2-.6c0-.2 0-.4-.2-.5l-.4-.2-.4.1zm-4.5-6.7c-.3-.2-.4-.4-.3-.6l.2-.1a.5.5 0 0 1 .4 0l.3.3v.2l-.2.2h-.4zm-.2-1l-.3.3c-.1.3 0 .7.4.8.2.1.5.2.6 0 .2 0 .3 0 .3-.2 0-.1.1-.2 0-.4 0-.2-.2-.4-.4-.5a.9.9 0 0 0-.6 0z' },
44
- { d: 'M42.3 18.2c-.1.2-.4.3-.6.1v-.6c.2-.2.4-.3.6-.2.2.2.2.4 0 .7zm-1 1.8c-.2.2-.5.3-.7.1v-.6c.2-.2.4-.3.6-.2.2.2.2.4 0 .7zm-4-9.8l.5-1.3.4.2-.4.3a.4.4 0 0 0 .4 0l-.2.4a.8.8 0 0 0-.2-.2c-.1.3 0 .4.3.5.2.2.4.2.5 0 0 0 0-.3-.3-.2 0-.2 0-.3.3-.3 0 0 .2 0 .2.2 0-.3.2-.6.5-.7.1.3 0 .6-.3.9h.4l-.1.4c0-.2-.3-.3-.4 0l.2.4c.3.1.6 0 .7-.2h-.4l.3-.5c0 .1 0 .3.2.3V10l.6.4-.4.2h.3l-.4.5-.1-.4c-.2.3-.1.5.2.7.2.1.4.2.5 0 0-.1 0-.4-.3-.3 0-.2.1-.3.2-.3.2 0 .3.1.3.3 0-.4.2-.6.6-.7 0 .4-.1.6-.4.8h.3c.1.2 0 .4-.1.5 0-.2-.4-.3-.4-.1-.1 0 0 .2.3.4.1 0 .3.2.6 0a.6.6 0 0 0-.4-.2l.3-.3.2.3v-.5l.4.3-.9 1zm4.7 5.3l.1-.2.2-.1c.2 0 .3 0 .4.2l.2.4v.2h-.7l-.2-.5zm1.8 7.9a.7.7 0 0 1 .2-.4h.7a.5.5 0 0 1 0 .3.7.7 0 0 1-.2.4h-.7v-.3zm-8.2-11.9a.5.5 0 0 1-.1.4h-.2c-.2 0-.3-.1-.3-.4a.5.5 0 0 1 .2-.4h.3a.8.8 0 0 1 .1.4zm2.5-5.2c.1-.2 0-.6.5-.6l.7.3c-.4 0-.9.1-1.2.3zm7.4 6.5c.3.9 1 1.2 1.4 1-1-.2-.2-2-1.6-2h-.2c-.2-.2-.5-.3-.9-.3-.5 0-1.5.6-1.5 1.7 0 2.5 2.8 2.7 2.8 5 0 .6-.5 1-1 1s-.9-.6-1.3-1.4c-.1-.4-.6-1-1-1.6.1.1.3.2.4.1h.4a.6.6 0 0 0 .2-.5l-.2-.6a1 1 0 0 0-.7-.2l-.3.1a.6.6 0 0 0-.2.4v.3c-.6-.8-1.2-1.6-1.2-2 0-.4.3-.8.6-1.2h.2l.9-1 .1-.1-.3-.3.2-.6c.1.4.4.6.6.5-.2-.3.2-1 0-2 .2.5.6.6.8.6-.6-.6.2-1.4-.6-2.6h.5C43 7 43.2 6 42 5.6c.3 0 .5-.2.5-.4-.4.3-.7-.5-1.8-.4-.1-.5-.5-1-1-1.1.1.3 0 .6 0 .8L35.8 1l-.2-.1V1L39 5l-.8.3c-.2 0-.3.2-.3.4a7.4 7.4 0 0 0-1.3.9c-.2.1-.4.2-.2.6 0 .1-.1.5.3.2.3-.1 1-.5 1.1-.3 0 .2-.3.3-.5.4l-.5.4h.3l.1.3c.1 0 .3-.2.4-.1 0 0 0 .5-.2.6.4 0 .6-.4.6-.7l.2-.4v.5c.2 0 .4-.3.4-.7l.2-.2c.2 0 .4.4.7.4.7 0 1-.5 1-.8a.7.7 0 0 0 0-.5c.2.2.3.5.3.7 0 .9-1.6 1.3-2.3 2l-.8-.3V9l-.1.1c0 .3-.2.8-.4 1.1v.2c-.4.6-.7 1.2-.8 2a5 5 0 0 0-.5-.5v-.3c0-.2 0-.3-.2-.5l-.3-.2a.5.5 0 0 0-.4.2h-.1l-.7-.6a.4.4 0 0 0-.4-.1h-.3l-.3.1-.5.4.3.3.1.2.2-.1c.1-.2.2-.2.3-.2l.3.2 1.2 1.5H34c-.2 0-.2 0-.4.3l-.2.2v.5c.3.3.8 1.3 1 1.8.2.4.4.5.8.6l1 .6v-.3l-.5-.3c-.2 0-.2-.1 0-.1l.8.3c0-.4-.4-.7-.6-1h-.6l-.1.2c-.1 0-.2 0-.2-.2 0 0 .2-.1.2-.3s-.3-.2-.5-.2l-.5-1c-.2 0 0-.2 0-.3.2-.1.6.1 1.3.2h1c0 .9.4 1.7 1.6 2a2 2 0 0 1 1.5 1.2c-2.5 0-2.9.9-2.9 1.8 0 1 .9 1 .9 1.7s-2 1-2.7 1.1c-.5 0-.8.2-1.1.4l-1 1h.4l.4-.4.2-.2v.3l-.3.4c1.2.1 1.3-.3 1.3-.5s-.3-.3-.2-.5c.2-.1.3 0 .5.2s.2.3.5.1l3-1.2c.3-.1.2-.3 0-.4l-.2-.7c0-.8.5-1 1.4-1v.4c0 1.2 1.8 2.5 2.3 2.5.2 0 .5-.2.6.5 0 .6.1 1 0 1.6 0 .7-.3.8-.6 1s-.8 1.1-1 1.3c.2.1.4.1.5-.3l.4-.6-.3 1c.5.2 1.3-.3 1.3-.6 0-.4-.3-.3-.3-.5 0-.1.1-.3.3-.3.2 0 .3.2.3.3.2-.2.4-.4.4-.9v-.6c.1.2.3.3.5.3h.5a.9.9 0 0 0 .3-.6v-.1a.8.8 0 0 0 0-.4l-.4-.2a.8.8 0 0 0-.6.2c-.2 0-.3.2-.4.4a37 37 0 0 1 0-1.5l-.1-.7-.5.2c-.2 0-.7-.5-.7-1 0-.6.5-1.3.5-2 0-.2.2-.4.3-.2l.5 1c-.2.9.9 1.8 1.7 1-.4.1-.7-.2-.9-.6h.4c.3.4 1.2.4 1.4-.6-.1.2-.4.4-.7.3.3-.2.5-.7.5-1.1 0-2.4-2.8-2.7-2.8-4.8 0-.8.7-1.3 1.1-1.3l.5.1c-.2.2-.3.5-.3.8.1 1.7 2.8 1.7 2.9 2.5.3-1.4-1.7-1-1.8-2.7z' }
45
- ].freeze
46
- end
47
- end
48
- end
49
- end
@@ -1,165 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'textarea'
4
-
5
- module CCS
6
- module FrontendHelpers
7
- module GovUKFrontend
8
- module Field
9
- # = GOV.UK Character count
10
- #
11
- # This helper is used for generating the character count component from the
12
- # {https://design-system.service.gov.uk/components/character-count GDS - Components - Character count}
13
- #
14
- # This is a wrapper around a Textarea module and so makes use of the methods in {Textarea}
15
-
16
- module CharacterCount
17
- include Textarea
18
-
19
- # Generates the HTML for the GOV.UK character count component.
20
- # It works by warpping the govuk_textarea in HTML which will trigger the JavaScript to do the character count.
21
- #
22
- # @param attribute [String, Symbol] the attribute of the character count text area
23
- # @param govuk_character_count_options [Hash] options that will be used for the parts of the form group, label, hint, textarea and the character count
24
- #
25
- # @option govuk_character_count_options [String] :error_message (nil) the error message to be displayed
26
- # @option govuk_character_count_options [ActiveModel] :model (nil) optional model that can be used to find an error message
27
- # @option govuk_character_count_options [ActionView::Helpers::FormBuilder] :form (nil) optional form builder used to create
28
- # the textarea tag and find the error message
29
- # @option govuk_character_count_options [Hash] :form_group see {govuk_field}
30
- # @option govuk_character_count_options [Hash] :label see {govuk_field}
31
- # @option govuk_character_count_options [Hash] :hint see {govuk_field}
32
- # @option govuk_character_count_options [Hash] :textarea see {govuk_textarea}
33
- # @option govuk_character_count_options [Hash] :character_count ({}) the options that will be used when rendering the textarea.
34
- # See {_govuk_character_count} for more details.
35
- #
36
- # @return [ActiveSupport::SafeBuffer] the HTML for the GOV.UK chracter count
37
- # which can then be rendered on the page
38
-
39
- def govuk_character_count(attribute, **govuk_character_count_options)
40
- character_count_attribute = govuk_character_count_options[:form] ? "#{form.object_name}_#{attribute}" : attribute
41
-
42
- _govuk_character_count(character_count_attribute, **govuk_character_count_options) do |govuk_textarea_options|
43
- govuk_textarea(
44
- attribute,
45
- error_message: govuk_character_count_options[:error_message],
46
- model: govuk_character_count_options[:model],
47
- form: govuk_character_count_options[:form],
48
- **govuk_textarea_options
49
- )
50
- end
51
- end
52
-
53
- private
54
-
55
- # Wrapper method used by {govuk_character_count} to generate the character count HTML
56
- #
57
- # @param attribute [String, Symbol] the attribute of the character count
58
- # @param govuk_character_count_options [Hash] options that will be used in customising the HTML.
59
- # This includes everything described in {govuk_character_count}
60
- # with the addition of the +:character_count+ which are described below
61
- #
62
- # @option govuk_character_count_options [String] :maxlength (required) - if +maxwords+ is set, this is not required.
63
- # The maximum number of characters.
64
- # If +maxwords+ is provided, the +maxlength+ option will be ignored.
65
- # @option govuk_character_count_options [String] :maxwords (required) - if maxlength is set, this is not required.
66
- # The maximum number of words.
67
- # If +maxwords+ is provided, the +maxlength+ option will be ignored.
68
- # @option govuk_character_count_options [String] :threshold the percentage value of the limit at which point the count message is displayed.
69
- # If this attribute is set, the count message will be hidden by default.
70
- # @option govuk_textarea_options [Hash] :fallback_hint ({}) additional parameters that will be used to create the hint containing the character count text.
71
- # This includes all the options in {govuk_hint} plus +:count_message+.
72
- # This will replace the default text for the count message.
73
- # If you want the count number to appear, put %<count>s in the string and it will be replaced with the number
74
- #
75
- # @yield the textarea HTML generated by {govuk_character_count}
76
- #
77
- # @yieldparam govuk_textarea_options [Hash] the options used in the textarea called by {govuk_character_count}
78
- #
79
- # @return [ActiveSupport::SafeBuffer] the HTML for the chracter count which wrpas arround {govuk_character_count}
80
-
81
- def _govuk_character_count(attribute, **govuk_character_count_options)
82
- deep_init_hash(govuk_character_count_options, :textarea, :attributes, :aria)
83
- govuk_character_count_options[:textarea][:attributes][:aria][:describedby] = [govuk_character_count_options.dig(:textarea, :attributes, :aria, :describedby), "#{attribute}-info"].compact.join(' ')
84
-
85
- govuk_character_count_options[:textarea][:classes] = "#{govuk_character_count_options[:textarea][:classes]} govuk-js-character-count".lstrip
86
-
87
- tag.div(**get_character_count_attributes(**govuk_character_count_options)) do
88
- concat(yield(govuk_character_count_options))
89
- concat(character_count_hint(attribute, **govuk_character_count_options))
90
- end
91
- end
92
-
93
- # Generates the fallback hint HTML for {_govuk_character_count}
94
- #
95
- # @param (see _govuk_character_count)
96
- #
97
- # @option (see _govuk_character_count)
98
- #
99
- # @return [ActiveSupport::SafeBuffer] the HTML for the fullback hint used in {_govuk_character_count}
100
-
101
- def character_count_hint(attribute, **govuk_character_count_options)
102
- fallback_hint_length = govuk_character_count_options[:character_count][:maxwords] || govuk_character_count_options[:character_count][:maxlength]
103
- fallback_hint_default = "You can enter up to %<count>s #{govuk_character_count_options[:character_count][:maxwords] ? 'words' : 'characters'}"
104
-
105
- deep_init_hash(govuk_character_count_options, :character_count, :fallback_hint, :attributes)
106
-
107
- fallback_hint_text = format(govuk_character_count_options[:character_count][:fallback_hint][:count_message] || fallback_hint_default, count: fallback_hint_length)
108
-
109
- govuk_character_count_options[:character_count][:fallback_hint][:classes] = "#{govuk_character_count_options.dig(:character_count, :fallback_hint, :classes)} govuk-character-count__message".lstrip
110
- govuk_character_count_options[:character_count][:fallback_hint][:attributes].merge!(id: "#{attribute}-info")
111
-
112
- govuk_hint(fallback_hint_text, **govuk_character_count_options[:character_count][:fallback_hint])
113
- end
114
-
115
- # Generates a hash with the character count attributes used in {_govuk_character_count}
116
- #
117
- # @param govuk_character_count_options [Hash] options that will be used in customising the HTML.
118
- # This includes everything described in {govuk_character_count}
119
- # with the addition of the +:character_count+ which are described below
120
- #
121
- # @option (see _govuk_character_count)
122
- #
123
- # @return [Hash] contains the HTMl attributes used in {_govuk_character_count}
124
-
125
- def get_character_count_attributes(**govuk_character_count_options)
126
- govuk_character_count_attributes = { class: 'govuk-character-count', data: { module: 'govuk-character-count' } }
127
-
128
- %i[maxlength threshold maxwords].each do |data_attribute|
129
- govuk_character_count_attributes[:data][data_attribute] = govuk_character_count_options[:character_count][data_attribute].to_s if govuk_character_count_options[:character_count][data_attribute]
130
- end
131
-
132
- govuk_character_count_attributes
133
- end
134
-
135
- # Method to initialise hashes within hashes if it is not already initialised
136
- #
137
- # @param hash [Hash] the hash that is going to be initialised
138
- # @param keys [Array] the keys that are going to be initialised in the hash
139
- #
140
- # @example When the hash is completely empty
141
- # hash = { }
142
- # keys = [:a, :b, :c]
143
- #
144
- # deep_init_hash(hash, *keys)
145
- #
146
- # hash = { a: { b: { c: { } } } }
147
- #
148
- # @example When the hash has already been initialised
149
- # hash = { a: { b: { d: 'hello' } } }
150
- # keys = [:a, :b, :c]
151
- #
152
- # deep_init_hash(hash, *keys)
153
- #
154
- # hash = { a: { b: { d: 'hello', c: { } } } }
155
-
156
- def deep_init_hash(hash, *keys)
157
- current_hash = hash
158
-
159
- keys.each { |key| current_hash = (current_hash[key] ||= {}) }
160
- end
161
- end
162
- end
163
- end
164
- end
165
- end
@@ -1,200 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../field'
4
-
5
- module CCS
6
- module FrontendHelpers
7
- module GovUKFrontend
8
- module Field
9
- # = GOV.UK Checkboxes
10
- #
11
- # This helper is used for generating the checkboxes component from the
12
- # {https://design-system.service.gov.uk/components/checkboxes GDS - Components - Checkboxes}
13
- #
14
- # This is considered a Field module and so makes use of the methods in {CCS::FrontendHelpers::GovUKFrontend::Field}
15
-
16
- module Checkboxes
17
- include Field
18
-
19
- # Generates the HTML for the GOV.UK Checkboxes component
20
- #
21
- # @param attribute [String, Symbol] the attribute of the raido buttons
22
- # @param items [Array] array of checkbox items, see {_govuk_checkboxes_fields}
23
- # @param govuk_checkboxes_options [Hash] options that will be used for the parts of the fieldset, form group, hint and checkbox buttons
24
- #
25
- # @option govuk_checkboxes_options [String] :error_message (nil) the error message to be displayed
26
- # @option govuk_checkboxes_options [ActiveModel] :model (nil) optional model that can be used to find an error message
27
- # @option govuk_checkboxes_options [ActionView::Helpers::FormBuilder] :form (nil) optional form builder used to create
28
- # the checkbox tags and find the error message
29
- # @option govuk_checkboxes_options [Hash] :form_group see {govuk_fields}
30
- # @option govuk_checkboxes_options [Hash] :fieldset see {govuk_fields}
31
- # @option govuk_checkboxes_options [Hash] :hint see {govuk_field}
32
- # @option govuk_checkboxes_options [Hash] :checkboxes ({}) the options that will be used when rendering the checkbox buttons.
33
- # See {_govuk_checkboxes_fields} for more details.
34
- #
35
- # @return [ActiveSupport::SafeBuffer] the HTML for the GOV.UK Checkboxes
36
- # which can then be rendered on the page
37
-
38
- def govuk_checkboxes(attribute, items, **govuk_checkboxes_options)
39
- govuk_fields(:checkboxes, attribute, **govuk_checkboxes_options) do |govuk_field_options|
40
- if govuk_checkboxes_options[:model] || govuk_checkboxes_options[:form]
41
- values = (govuk_checkboxes_options[:model] || govuk_checkboxes_options[:form].object).send(attribute) || []
42
- items.each { |item| item[:checked] = values.include?(item[:value]) }
43
- end
44
-
45
- concat(
46
- if govuk_checkboxes_options[:form]
47
- govuk_checkbox_field_form(govuk_checkboxes_options[:form], attribute, items, **govuk_field_options)
48
- else
49
- govuk_checkbox_field_tag(attribute, items, **govuk_field_options)
50
- end
51
- )
52
- end
53
- end
54
-
55
- private
56
-
57
- # Generates the checkboxes HTML for {govuk_checkboxes}
58
- #
59
- # @param attribute [String, Symbol] the attribute of the raido buttons
60
- # @param items [Array] array of checkbox items, see {_govuk_checkboxes_fields}
61
- # @param govuk_checkboxes_options [Hash] options that will be used in customising the HTML
62
- #
63
- # @option (see _govuk_checkboxes_fields)
64
- #
65
- # @return [ActiveSupport::SafeBuffer] the HTML for the checkbox buttons which is used in {govuk_checkboxes}
66
-
67
- def govuk_checkbox_field_tag(attribute, items, **govuk_checkboxes_options)
68
- _govuk_checkboxes_fields(items, **govuk_checkboxes_options) do |checkbox_item|
69
- govuk_checkbox_item_tag(attribute, checkbox_item)
70
- end
71
- end
72
-
73
- # Generates the checkboxes HTML for {govuk_checkboxes} when there is a ActionView::Helpers::FormBuilder
74
- #
75
- # @param form [ActionView::Helpers::FormBuilder] the form builder used to create the checkbox buttons
76
- # @param (see govuk_checkbox_field_tag)
77
- #
78
- # @option (see _govuk_checkboxes_fields)
79
- #
80
- # @return (see govuk_checkbox_field_tag)
81
-
82
- def govuk_checkbox_field_form(form, attribute, items, **govuk_checkboxes_options)
83
- _govuk_checkboxes_fields(items, **govuk_checkboxes_options) do |checkbox_item|
84
- govuk_checkbox_item_form(form, attribute, checkbox_item)
85
- end
86
- end
87
-
88
- # Wrapper method used by {govuk_checkbox_field_tag} and {govuk_checkbox_field_form} to generate the checkboxes HTML
89
- #
90
- # @param items [Array] array of checkbox items.
91
- # Each item is a hash which can be:
92
- # - +:divider+ text to separate checkbox items
93
- # - checkbox item, see {_govuk_checkbox_item}
94
- # @param govuk_checkboxes_options [Hash] options that will be used in customising the HTML
95
- #
96
- # @option govuk_checkboxes_options [String] :classes additional CSS classes for the checkboxes HTML
97
- # @option govuk_checkboxes_options [Hash] :attributes ({ module: 'govuk-checkboxes' }) any additional attributes that will added as part of the HTML
98
- #
99
- # @yield the checkbox item HTML generated by {govuk_checkbox_field_tag} or {govuk_checkbox_field_form}
100
- #
101
- # @yieldparam checkbox_item [Hash] the current checkbox item to be rendered
102
- #
103
- # @return [ActiveSupport::SafeBuffer] the HTML for the checkbox buttons which is used in {govuk_checkbox_field_tag} or {govuk_checkbox_field_form}
104
-
105
- def _govuk_checkboxes_fields(items, **govuk_checkboxes_options)
106
- initialise_attributes_and_set_classes(govuk_checkboxes_options, 'govuk-checkboxes')
107
- set_data_module(govuk_checkboxes_options, 'govuk-checkboxes')
108
-
109
- tag.div(**govuk_checkboxes_options[:attributes]) do
110
- items.each do |checkbox_item|
111
- concat(
112
- if checkbox_item[:divider]
113
- tag.div(checkbox_item[:divider], class: 'govuk-checkboxes__divider')
114
- else
115
- tag.div(class: 'govuk-checkboxes__item') do
116
- yield(checkbox_item)
117
- end
118
- end
119
- )
120
- end
121
- end
122
- end
123
-
124
- # Generates the HTML for a checkbox button for {govuk_checkbox_field_form}
125
- #
126
- # @param (see _govuk_checkbox_item)
127
- #
128
- # @option (see _govuk_checkbox_item)
129
- #
130
- # @return (see _govuk_checkbox_item)
131
-
132
- def govuk_checkbox_item_tag(attribute, checkbox_item)
133
- _govuk_checkbox_item(attribute, checkbox_item) do
134
- checkbox_item[:attributes][:id] ||= "#{sanitize_to_id(attribute)}_#{sanitize_to_id(checkbox_item[:value])}"
135
-
136
- concat(check_box_tag("#{attribute}[]", checkbox_item[:value], checkbox_item[:checked], **checkbox_item[:attributes]))
137
- concat(govuk_label(checkbox_item[:attributes][:id], checkbox_item[:label][:text], **checkbox_item[:label]))
138
- end
139
- end
140
-
141
- # Generates the HTML for a checkbox button for {govuk_checkbox_field_tag}
142
- #
143
- # @param (see _govuk_checkbox_item)
144
- # @param form [ActionView::Helpers::FormBuilder] the form builder used to create the checkbox buttons
145
- #
146
- # @option (see _govuk_checkbox_item)
147
- #
148
- # @return (see _govuk_checkbox_item)
149
-
150
- def govuk_checkbox_item_form(form, attribute, checkbox_item)
151
- _govuk_checkbox_item(attribute, checkbox_item) do
152
- (checkbox_item[:label][:attributes] ||= {})[:value] = checkbox_item[:value]
153
- checkbox_item[:label][:attributes][:for] = checkbox_item[:attributes][:id] if checkbox_item[:attributes][:id]
154
-
155
- concat(form.check_box(attribute, checkbox_item[:attributes].merge({ multiple: true, include_hidden: false }), checkbox_item[:value]))
156
- concat(govuk_label(attribute, checkbox_item[:label][:text], form: form, **checkbox_item[:label]))
157
- end
158
- end
159
-
160
- # rubocop:disable Metrics/AbcSize
161
-
162
- # Wrapper method used by {govuk_checkbox_item_tag} and {govuk_checkbox_item_form} to generate the checkboxes HTML
163
- # including the label and hint, if there is one.
164
- #
165
- # @param attribute [String, Symbol] the attribute of the raido buttons
166
- # @param checkbox_item [Hash] the options for the checkbox item
167
- #
168
- # @option checkbox_item [String] :classes additional CSS classes for the checkbox button HTML
169
- # @option checkbox_item [Hash] :label the parameters that will be used to create the label for the checkbox button, see {govuk_label}
170
- # @option checkbox_item [Hash] :hint (nil) the parameters that will be used to create the hint for the checkbox button, see {govuk_hint}.
171
- # If no hint is given then no hint will be rendered
172
- # @option checkbox_item [Hash] :conditional (nil) content that will appear when the checkbox input is checked.
173
- # It can have the following options:
174
- # - +[:content]+ the content that will be shown
175
- # - +[:attributes][:id]+ the id of the conditional section
176
- # If no conditional is given then no conditional content will be rendered
177
- # @option checkbox_item [Hash] :attributes ({}) any additional attributes that will be added as part of the checkbox button HTML
178
- #
179
- # @return [ActiveSupport::SafeBuffer] the HTML for the checkbox buttons, label and hint
180
- # which is used in {govuk_checkbox_item_tag} and {govuk_checkbox_item_form}
181
-
182
- def _govuk_checkbox_item(attribute, checkbox_item)
183
- (checkbox_item[:attributes] ||= {})[:class] = 'govuk-checkboxes__input'
184
- checkbox_item[:label] ||= {}
185
- checkbox_item[:label][:classes] = "govuk-checkboxes__label #{checkbox_item[:label][:classes]}".rstrip
186
-
187
- set_item_options_for_hint('checkboxes', attribute, checkbox_item)
188
- set_conditional_item_options('checkboxes', attribute, checkbox_item)
189
-
190
- yield
191
- concat(govuk_hint(checkbox_item[:hint][:text], **checkbox_item[:hint])) if checkbox_item[:hint]
192
- concat(tag.div(checkbox_item[:conditional][:content], class: checkbox_item[:conditional][:attributes][:class], id: checkbox_item[:conditional][:attributes][:id])) if checkbox_item[:conditional]
193
- end
194
-
195
- # rubocop:enable Metrics/AbcSize
196
- end
197
- end
198
- end
199
- end
200
- end
@@ -1,153 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../field'
4
- require_relative 'input'
5
-
6
- module CCS
7
- module FrontendHelpers
8
- module GovUKFrontend
9
- module Field
10
- # = GOV.UK Date Input
11
- #
12
- # This helper is used for generating the date input component from the
13
- # {https://design-system.service.gov.uk/components/date-input GDS - Components - Date Input}
14
- #
15
- # This is considered a Field module and so makes use of the methods in {CCS::FrontendHelpers::GovUKFrontend::Field}
16
-
17
- module DateInput
18
- include Field
19
- include Input
20
-
21
- # Generates the HTML for the GOV.UK date input component
22
- #
23
- # @param attribute [String, Symbol] the attribute of the date input
24
- # @param govuk_date_input_options [Hash] options that will be used for the parts of the fieldset, form group, hint and date input
25
- #
26
- # @option govuk_date_input_options [String] :error_message (nil) the error message to be displayed
27
- # @option govuk_date_input_options [ActiveModel] :model (nil) optional model that can be used to find an error message
28
- # @option govuk_date_input_options [ActionView::Helpers::FormBuilder] :form (nil) optional form builder used to create
29
- # the date tag and find the error message
30
- # @option govuk_date_input_options [Hash] :form_group see {govuk_fields}
31
- # @option govuk_date_input_options [Hash] :fieldset see {govuk_fields}
32
- # @option govuk_date_input_options [Hash] :hint see {govuk_field}
33
- # @option govuk_date_input_options [Hash] :date_input_options ({}) the options that will be used when rendering the date input.
34
- # See {_govuk_date_input_fields} for more details.
35
- #
36
- # @return [ActiveSupport::SafeBuffer] the HTML for the GOV.UK Date Input
37
- # which can then be rendered on the page
38
-
39
- def govuk_date_input(attribute, **govuk_date_input_options)
40
- set_govuk_date_input_fieldset_options(**govuk_date_input_options)
41
-
42
- govuk_fields(:date_input, attribute, **govuk_date_input_options) do |govuk_field_options, error_message|
43
- concat(_govuk_date_input_fields(attribute, error_message, **govuk_field_options) do |date_item_attribute, date_item_input_options|
44
- govuk_input(
45
- date_item_attribute,
46
- model: govuk_date_input_options[:model],
47
- form: govuk_date_input_options[:form],
48
- **date_item_input_options
49
- )
50
- end)
51
- end
52
- end
53
-
54
- private
55
-
56
- # Sets the role for the fieldset to group
57
- #
58
- # @param govuk_date_input_options [Hash] options that will be used for the parts of the fieldset, form group, hint and date input
59
-
60
- def set_govuk_date_input_fieldset_options(**govuk_date_input_options)
61
- (govuk_date_input_options[:fieldset][:attributes] ||= {})[:role] = 'group'
62
- end
63
-
64
- # Wrapper method used by {govuk_date_input} to generate the date inputs HTML
65
- #
66
- # @param attribute [String, Symbol] the attribute of the date input
67
- # @param any_errors [Boolean] flag to indicate if the inputs need the error class
68
- # @param govuk_date_input_options [Hash] options that will be used in customising the HTML
69
- #
70
- # @option govuk_date_input_options [String] :classes additional CSS classes for the date inputs HTML
71
- # @option govuk_date_input_options[Array] :date_items an array of the date items that will be rendered.
72
- # Each date item hash must contain the +:name+ to add as suffix to attribute.
73
- # Anything else in the hash will be used as options in a {govuk_input}.
74
- # @option govuk_date_input_options [Hash] :attributes ({}) any additional attributes that will added as part of the HTML
75
- #
76
- # @yield the date input item HTML generated by the parent method
77
- #
78
- # @yieldparam date_item_attribute [String] the attribute for individual date input
79
- # @yieldparam date_item_input_options [Hash] the HTML options used for the date input item
80
- #
81
- # @return [ActiveSupport::SafeBuffer] the HTML for the date inputs which is used in {govuk_date_input}
82
-
83
- def _govuk_date_input_fields(attribute, any_errors, **govuk_date_input_options)
84
- initialise_attributes_and_set_classes(govuk_date_input_options, 'govuk-date-input')
85
-
86
- date_items = govuk_date_input_options[:date_items] || govuk_default_date_items
87
-
88
- tag.div(**govuk_date_input_options[:attributes]) do
89
- enumerate_and_set_date_input_options(date_items, any_errors) do |date_item_input_options|
90
- concat(tag.div(class: 'govuk-date-input__item') do
91
- concat(yield("#{attribute}_#{date_item_input_options[:name]}", date_item_input_options))
92
- end)
93
- end
94
- end
95
- end
96
-
97
- # rubocop:disable Metrics/CyclomaticComplexity
98
-
99
- # Enumerates and inititalises the attributes of each date input item and is used by {_govuk_date_input_fields}
100
- #
101
- # @param date_items [Array] an array of the date item hashes that will be inititalised
102
- # @param any_errors [Boolean] flag to indicate if the inputs need the error class
103
- #
104
- # @yield the date input item HTML generated by teach date input item
105
- #
106
- # @yieldparam date_item_input_options [Hash] the HTML options used for the date input item
107
-
108
- def enumerate_and_set_date_input_options(date_items, any_errors)
109
- date_items.each do |date_item_input_options|
110
- (date_item_input_options[:input] ||= {})[:attributes] ||= {}
111
-
112
- date_item_input_options[:input][:classes] = "govuk-date-input__input #{date_item_input_options[:input][:classes]} #{'govuk-input--error' if any_errors}".rstrip
113
-
114
- date_item_input_options[:input][:attributes][:inputmode] ||= 'numeric'
115
-
116
- date_item_input_options[:label] ||= {}
117
- date_item_input_options[:label][:text] ||= date_item_input_options[:name].capitalize
118
- date_item_input_options[:label][:classes] = 'govuk-date-input__label'
119
-
120
- yield(date_item_input_options)
121
- end
122
- end
123
- # rubocop:enable Metrics/CyclomaticComplexity
124
-
125
- # The default date items used in {_govuk_date_input_fields} if no date items are provided
126
-
127
- def govuk_default_date_items
128
- [
129
- {
130
- name: 'day',
131
- input: {
132
- classes: 'govuk-input--width-2'
133
- }
134
- },
135
- {
136
- name: 'month',
137
- input: {
138
- classes: 'govuk-input--width-2'
139
- }
140
- },
141
- {
142
- name: 'year',
143
- input: {
144
- classes: 'govuk-input--width-4'
145
- }
146
- }
147
- ]
148
- end
149
- end
150
- end
151
- end
152
- end
153
- end