katalyst-koi 4.18.1 → 5.0.0.alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (218) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/koi/icons/add.svg +3 -0
  3. data/app/assets/images/koi/icons/close.svg +1 -0
  4. data/app/assets/images/koi/koi.png +0 -0
  5. data/app/assets/javascripts/koi/controllers/file_field_controller.js +2 -2
  6. data/app/assets/javascripts/koi/controllers/index.js +0 -3
  7. data/app/assets/javascripts/koi/controllers/koi/modal_controller.js +40 -0
  8. data/app/assets/javascripts/koi/controllers/navigation_controller.js +14 -21
  9. data/app/assets/javascripts/koi/controllers/webauthn_registration_controller.js +4 -1
  10. data/app/assets/stylesheets/koi/blocks/actions.css +8 -0
  11. data/app/assets/stylesheets/koi/blocks/application-header.css +15 -0
  12. data/app/assets/stylesheets/koi/blocks/application-navigation.css +54 -0
  13. data/app/assets/stylesheets/koi/blocks/button.css +90 -0
  14. data/app/assets/stylesheets/koi/blocks/flash.css +19 -0
  15. data/app/assets/stylesheets/koi/blocks/icon.css +15 -0
  16. data/app/assets/stylesheets/koi/blocks/index.css +13 -0
  17. data/app/assets/stylesheets/koi/blocks/modal.css +26 -0
  18. data/app/assets/stylesheets/koi/blocks/navigation.css +23 -0
  19. data/app/assets/stylesheets/koi/blocks/page-header.css +31 -0
  20. data/app/assets/stylesheets/koi/blocks/pagy.css +82 -0
  21. data/app/assets/stylesheets/koi/blocks/prose.css +37 -0
  22. data/app/assets/stylesheets/koi/blocks/tables/index.css +4 -0
  23. data/app/assets/stylesheets/koi/{components/_query.scss → blocks/tables/query.css} +13 -13
  24. data/app/assets/stylesheets/koi/{base/_tables.scss → blocks/tables/table.css} +11 -59
  25. data/app/assets/stylesheets/koi/compositions/cover.css +17 -0
  26. data/app/assets/stylesheets/koi/{base/_flow.scss → compositions/flow.css} +1 -1
  27. data/app/assets/stylesheets/koi/compositions/index.css +4 -0
  28. data/app/assets/stylesheets/koi/compositions/wrapper.css +11 -0
  29. data/app/assets/stylesheets/koi/forms/caption.css +22 -0
  30. data/app/assets/stylesheets/koi/forms/checkboxes.css +153 -0
  31. data/app/assets/stylesheets/koi/forms/date-input.css +12 -0
  32. data/app/assets/stylesheets/koi/{components/_document-field.scss → forms/document-field.css} +20 -15
  33. data/app/assets/stylesheets/koi/forms/errors.css +38 -0
  34. data/app/assets/stylesheets/koi/forms/fieldset.css +73 -0
  35. data/app/assets/stylesheets/koi/forms/file-upload.css +20 -0
  36. data/app/assets/stylesheets/koi/forms/form-group.css +19 -0
  37. data/app/assets/stylesheets/koi/forms/hint.css +11 -0
  38. data/app/assets/stylesheets/koi/forms/image-field.css +96 -0
  39. data/app/assets/stylesheets/koi/forms/index.css +44 -0
  40. data/app/assets/stylesheets/koi/forms/input.css +194 -0
  41. data/app/assets/stylesheets/koi/forms/label.css +43 -0
  42. data/app/assets/stylesheets/koi/forms/password.css +18 -0
  43. data/app/assets/stylesheets/koi/forms/radios.css +162 -0
  44. data/app/assets/stylesheets/koi/forms/select.css +18 -0
  45. data/app/assets/stylesheets/koi/forms/textarea.css +3 -0
  46. data/app/assets/stylesheets/koi/forms/trix.css +33 -0
  47. data/app/assets/stylesheets/koi/global/fonts.css +22 -0
  48. data/app/assets/stylesheets/koi/global/global-styles.css +297 -0
  49. data/app/assets/stylesheets/koi/global/reset.css +98 -0
  50. data/app/assets/stylesheets/koi/global/variables.css +97 -0
  51. data/app/assets/stylesheets/koi/icons.css +14 -0
  52. data/app/assets/stylesheets/koi/{admin.scss → index.css} +16 -7
  53. data/app/assets/stylesheets/koi/login.css +26 -0
  54. data/app/assets/stylesheets/koi/themes/_index.scss +0 -1
  55. data/app/assets/stylesheets/koi/utilities/index.css +1 -0
  56. data/app/assets/stylesheets/koi/utilities/visually-hidden.css +18 -0
  57. data/app/components/concerns/koi/tables/cells.rb +3 -3
  58. data/app/components/koi/header_component.html.erb +12 -11
  59. data/app/components/koi/header_component.rb +2 -0
  60. data/app/components/koi/table_component.rb +8 -0
  61. data/app/controllers/admin/admin_users_controller.rb +24 -18
  62. data/app/controllers/admin/application_controller.rb +1 -3
  63. data/app/controllers/admin/credentials_controller.rb +18 -14
  64. data/app/controllers/admin/otps_controller.rb +15 -13
  65. data/app/controllers/admin/sessions_controller.rb +12 -1
  66. data/app/controllers/admin/url_rewrites_controller.rb +19 -17
  67. data/app/controllers/admin/well_knowns_controller.rb +20 -18
  68. data/app/controllers/concerns/koi/controller.rb +37 -0
  69. data/app/helpers/koi/form_helper.rb +18 -0
  70. data/app/helpers/koi/header_helper.rb +122 -0
  71. data/app/helpers/koi/index_actions_helper.rb +3 -2
  72. data/app/helpers/koi/modal_helper.rb +71 -0
  73. data/app/models/admin/user.rb +7 -1
  74. data/app/models/url_rewrite.rb +1 -9
  75. data/app/views/admin/admin_users/_form.html+self.erb +8 -0
  76. data/app/views/admin/admin_users/_form.html.erb +8 -0
  77. data/app/views/admin/admin_users/archived.html.erb +7 -4
  78. data/app/views/admin/admin_users/edit.html+self.erb +12 -0
  79. data/app/views/admin/admin_users/edit.html.erb +13 -8
  80. data/app/views/admin/admin_users/index.html.erb +10 -5
  81. data/app/views/admin/admin_users/new.html.erb +8 -8
  82. data/app/views/admin/admin_users/show.html+self.erb +26 -14
  83. data/app/views/admin/admin_users/show.html.erb +22 -20
  84. data/app/views/admin/credentials/_credentials.html+self.erb +8 -6
  85. data/app/views/admin/credentials/_credentials.html.erb +3 -1
  86. data/app/views/admin/credentials/create.turbo_stream.erb +4 -3
  87. data/app/views/admin/credentials/destroy.turbo_stream.erb +4 -2
  88. data/app/views/admin/credentials/new.html.erb +42 -36
  89. data/app/views/admin/dashboards/show.html.erb +13 -1
  90. data/app/views/admin/otps/_form.html.erb +7 -7
  91. data/app/views/admin/otps/create.turbo_stream.erb +3 -3
  92. data/app/views/admin/otps/new.html.erb +5 -3
  93. data/app/views/admin/sessions/new.html.erb +2 -3
  94. data/app/views/admin/sessions/otp.html.erb +1 -3
  95. data/app/views/admin/sessions/password.html.erb +1 -3
  96. data/app/views/admin/tokens/show.html.erb +4 -6
  97. data/app/views/admin/url_rewrites/_form.html.erb +9 -0
  98. data/app/views/admin/url_rewrites/edit.html.erb +13 -9
  99. data/app/views/admin/url_rewrites/index.html.erb +10 -7
  100. data/app/views/admin/url_rewrites/new.html.erb +8 -8
  101. data/app/views/admin/url_rewrites/show.html.erb +17 -12
  102. data/app/views/admin/well_knowns/_form.html.erb +9 -0
  103. data/app/views/admin/well_knowns/edit.html.erb +13 -9
  104. data/app/views/admin/well_knowns/index.html.erb +8 -5
  105. data/app/views/admin/well_knowns/new.html.erb +8 -8
  106. data/app/views/admin/well_knowns/show.html.erb +14 -13
  107. data/app/views/katalyst/content/asides/_aside.html+form.erb +6 -4
  108. data/app/views/katalyst/content/columns/_column.html+form.erb +5 -3
  109. data/app/views/katalyst/content/contents/_content.html+form.erb +8 -6
  110. data/app/views/katalyst/content/figures/_figure.html+form.erb +8 -5
  111. data/app/views/katalyst/content/groups/_group.html+form.erb +5 -3
  112. data/app/views/katalyst/content/items/_item.html+form.erb +5 -3
  113. data/app/views/katalyst/content/sections/_section.html+form.erb +5 -3
  114. data/app/views/katalyst/content/tables/_table.html+form.erb +16 -11
  115. data/app/views/katalyst/navigation/items/_button.html.erb +6 -12
  116. data/app/views/katalyst/navigation/items/_heading.html.erb +3 -10
  117. data/app/views/katalyst/navigation/items/_link.html.erb +6 -11
  118. data/app/views/katalyst/navigation/menus/edit.html.erb +10 -6
  119. data/app/views/katalyst/navigation/menus/index.html.erb +4 -2
  120. data/app/views/katalyst/navigation/menus/new.html.erb +5 -3
  121. data/app/views/katalyst/navigation/menus/show.html.erb +8 -7
  122. data/app/views/layouts/koi/_application_header.html.erb +20 -0
  123. data/app/views/layouts/koi/_application_navigation.html.erb +34 -0
  124. data/app/views/layouts/koi/_flash.html.erb +6 -3
  125. data/app/views/layouts/koi/_navigation_header.html.erb +0 -2
  126. data/app/views/layouts/koi/application.html.erb +22 -27
  127. data/app/views/layouts/koi/frame.html.erb +1 -3
  128. data/app/views/layouts/koi/login.html.erb +12 -5
  129. data/config/locales/koi.en.yml +9 -1
  130. data/config/routes.rb +1 -1
  131. data/lib/generators/koi/admin/admin_generator.rb +3 -12
  132. data/lib/generators/koi/admin_controller/admin_controller_generator.rb +6 -16
  133. data/lib/generators/koi/admin_controller/templates/controller.rb.tt +82 -18
  134. data/lib/generators/koi/admin_controller/templates/controller_spec.rb.tt +113 -47
  135. data/lib/generators/koi/admin_route/admin_route_generator.rb +60 -6
  136. data/lib/generators/koi/admin_views/USAGE +18 -7
  137. data/lib/generators/koi/admin_views/admin_views_generator.rb +19 -11
  138. data/lib/generators/koi/admin_views/templates/_form.html.erb.tt +8 -0
  139. data/lib/generators/koi/admin_views/templates/archived.html.erb.tt +33 -0
  140. data/lib/generators/koi/admin_views/templates/edit.html.erb.tt +17 -9
  141. data/lib/generators/koi/admin_views/templates/index.html.erb.tt +31 -3
  142. data/lib/generators/koi/admin_views/templates/new.html.erb.tt +8 -8
  143. data/lib/generators/koi/admin_views/templates/show.html.erb.tt +15 -18
  144. data/lib/generators/koi/helpers/attribute_helpers.rb +147 -0
  145. data/lib/generators/koi/helpers/attribute_types.rb +218 -0
  146. data/lib/generators/koi/helpers/resource_helpers.rb +121 -0
  147. data/lib/generators/koi/{active_record/active_record_generator.rb → model/model_generator.rb} +1 -1
  148. data/lib/koi/config.rb +3 -1
  149. data/lib/koi/engine.rb +0 -9
  150. data/lib/koi/form/builder.rb +4 -4
  151. data/lib/koi/form/content.rb +55 -0
  152. data/lib/koi/form/elements/document.rb +1 -1
  153. data/lib/koi/form/elements/image.rb +1 -1
  154. data/lib/koi/form_builder.rb +1 -0
  155. data/lib/koi/menu.rb +14 -1
  156. data/spec/factories/admins.rb +1 -1
  157. metadata +90 -99
  158. data/app/assets/builds/koi/admin.css +0 -1
  159. data/app/assets/stylesheets/koi/base/_button.scss +0 -122
  160. data/app/assets/stylesheets/koi/base/_icon.scss +0 -29
  161. data/app/assets/stylesheets/koi/base/_index.scss +0 -21
  162. data/app/assets/stylesheets/koi/base/_input.scss +0 -19
  163. data/app/assets/stylesheets/koi/base/_link.scss +0 -26
  164. data/app/assets/stylesheets/koi/base/_list.scss +0 -11
  165. data/app/assets/stylesheets/koi/base/_typography.scss +0 -160
  166. data/app/assets/stylesheets/koi/components/_actions-group.scss +0 -7
  167. data/app/assets/stylesheets/koi/components/_image-field.scss +0 -95
  168. data/app/assets/stylesheets/koi/components/_index.scss +0 -9
  169. data/app/assets/stylesheets/koi/components/_pagy.scss +0 -29
  170. data/app/assets/stylesheets/koi/components/_summary-list.scss +0 -40
  171. data/app/assets/stylesheets/koi/layouts/_banner.scss +0 -7
  172. data/app/assets/stylesheets/koi/layouts/_content.scss +0 -40
  173. data/app/assets/stylesheets/koi/layouts/_flash.scss +0 -41
  174. data/app/assets/stylesheets/koi/layouts/_header.scss +0 -61
  175. data/app/assets/stylesheets/koi/layouts/_index.scss +0 -48
  176. data/app/assets/stylesheets/koi/layouts/_main.scss +0 -23
  177. data/app/assets/stylesheets/koi/layouts/_navigation.scss +0 -180
  178. data/app/assets/stylesheets/koi/layouts/_stack.scss +0 -13
  179. data/app/assets/stylesheets/koi/pages/_index.scss +0 -1
  180. data/app/assets/stylesheets/koi/pages/_login.scss +0 -46
  181. data/app/assets/stylesheets/koi/themes/_govuk.scss +0 -56
  182. data/app/assets/stylesheets/koi/themes/_kpop.scss +0 -5
  183. data/app/assets/stylesheets/koi/utils/_breakpoints.scss +0 -13
  184. data/app/assets/stylesheets/koi/utils/_hide.scss +0 -11
  185. data/app/assets/stylesheets/koi/utils/_index.scss +0 -2
  186. data/app/assets/stylesheets/koi/utils/_typography.scss +0 -42
  187. data/app/components/koi/content/editor/item_form_component.html.erb +0 -11
  188. data/app/components/koi/content/editor/item_form_component.rb +0 -94
  189. data/app/components/koi/summary_list/attachment_component.rb +0 -47
  190. data/app/components/koi/summary_list/base.rb +0 -59
  191. data/app/components/koi/summary_list/boolean_component.rb +0 -15
  192. data/app/components/koi/summary_list/date_component.rb +0 -17
  193. data/app/components/koi/summary_list/datetime_component.rb +0 -17
  194. data/app/components/koi/summary_list/item_component.rb +0 -26
  195. data/app/components/koi/summary_list/number_component.rb +0 -21
  196. data/app/components/koi/summary_list/rich_text_component.rb +0 -8
  197. data/app/components/koi/summary_list/text_component.rb +0 -8
  198. data/app/components/koi/summary_list_component.html.erb +0 -5
  199. data/app/components/koi/summary_list_component.rb +0 -75
  200. data/app/controllers/concerns/koi/controller/is_admin_controller.rb +0 -66
  201. data/app/helpers/koi/application_helper.rb +0 -7
  202. data/app/helpers/koi/date_helper.rb +0 -26
  203. data/app/helpers/koi/definition_list_helper.rb +0 -10
  204. data/app/views/admin/admin_users/_fields.html+self.erb +0 -3
  205. data/app/views/admin/admin_users/_fields.html.erb +0 -3
  206. data/app/views/admin/url_rewrites/_fields.html.erb +0 -4
  207. data/app/views/admin/well_knowns/_fields.html.erb +0 -6
  208. data/app/views/layouts/koi/_environment.html.erb +0 -4
  209. data/app/views/layouts/koi/_header.html.erb +0 -11
  210. data/app/views/layouts/koi/_navigation.html.erb +0 -23
  211. data/app/views/layouts/koi/_navigation_collapse.html.erb +0 -3
  212. data/lib/generators/koi/admin_views/templates/_fields.html.erb.tt +0 -3
  213. data/lib/generators/koi/helpers/admin_generator_attributes.rb +0 -66
  214. data/lib/koi/extensions/dartsass.rb +0 -23
  215. /data/app/assets/stylesheets/koi/{components/_clipboard.scss → blocks/clipboard.css} +0 -0
  216. /data/app/assets/stylesheets/koi/{components/_index-actions.scss → blocks/index-actions.css} +0 -0
  217. /data/app/assets/stylesheets/koi/{components/_toolbar.scss → blocks/toolbar.css} +0 -0
  218. /data/app/assets/stylesheets/koi/{base/_repel.scss → compositions/repel.css} +0 -0
@@ -0,0 +1,194 @@
1
+ :is(
2
+ input:not([type="checkbox"], [type="radio"], [type="color"], [type="button"]),
3
+ select,
4
+ textarea,
5
+ trix-editor
6
+ ) {
7
+ background: var(--color-light);
8
+ border-radius: var(--input-radius);
9
+ border: var(--stroke-input);
10
+ color: var(--color-dark);
11
+ padding: var(--space-3xs);
12
+ width: 100%;
13
+ min-height: var(--input-size);
14
+
15
+ &::placeholder {
16
+ color: var(--color-mid);
17
+ opacity: 1;
18
+ }
19
+
20
+ &:disabled {
21
+ opacity: 0.5;
22
+ color: inherit;
23
+ background-color: transparent;
24
+ cursor: not-allowed;
25
+ }
26
+
27
+ &:focus-visible {
28
+ outline: var(--focus-outline);
29
+ outline-offset: 0;
30
+ box-shadow: var(--focus-shadow);
31
+ }
32
+ }
33
+
34
+ :is(input, select, textarea) {
35
+ accent-color: var(--color-primary);
36
+ }
37
+
38
+ :is(textarea, trix-editor) {
39
+ resize: vertical;
40
+ line-height: var(--leading-fine);
41
+ }
42
+
43
+ .govuk-input {
44
+ -webkit-appearance: none;
45
+ appearance: none;
46
+ }
47
+
48
+ .govuk-input::-webkit-outer-spin-button,
49
+ .govuk-input::-webkit-inner-spin-button {
50
+ margin: 0;
51
+ -webkit-appearance: none;
52
+ }
53
+
54
+ .govuk-input[type="number"] {
55
+ -moz-appearance: textfield;
56
+ }
57
+
58
+ .govuk-input--error:not(:focus-visible) {
59
+ border-color: var(--govuk-error-color);
60
+ }
61
+
62
+ .govuk-input--extra-letter-spacing {
63
+ font-variant-numeric: tabular-nums;
64
+ letter-spacing: 0.05em;
65
+ }
66
+
67
+ .govuk-input--width-30 {
68
+ max-width: 29.5em;
69
+ }
70
+
71
+ .govuk-input--width-20 {
72
+ max-width: 20.5em;
73
+ }
74
+
75
+ .govuk-input--width-10 {
76
+ max-width: 11.5em;
77
+ }
78
+
79
+ .govuk-input--width-5 {
80
+ max-width: 5.5em;
81
+ }
82
+
83
+ .govuk-input--width-4 {
84
+ max-width: 4.5em;
85
+ }
86
+
87
+ .govuk-input--width-3 {
88
+ max-width: 3.75em;
89
+ }
90
+
91
+ .govuk-input--width-2 {
92
+ max-width: 2.75em;
93
+ }
94
+
95
+ .govuk-input__wrapper {
96
+ display: flex;
97
+ align-items: stretch;
98
+ }
99
+
100
+ .govuk-input__wrapper .govuk-input {
101
+ flex: 0 1 auto;
102
+ }
103
+
104
+ .govuk-input__wrapper .govuk-input:focus {
105
+ z-index: 1;
106
+ }
107
+
108
+ @container (max-width: 19.99em) {
109
+ .govuk-input__wrapper {
110
+ display: block;
111
+ }
112
+ .govuk-input__wrapper .govuk-input {
113
+ max-width: 100%;
114
+ }
115
+ }
116
+
117
+ .govuk-input__prefix,
118
+ .govuk-input__suffix {
119
+ font-weight: var(--font-regular);
120
+ font-size: var(--size-step-0);
121
+ line-height: var(--leading-fine);
122
+ display: flex;
123
+ align-items: center;
124
+ justify-content: center;
125
+ min-width: var(--input-size);
126
+ padding: var(--space-3xs);
127
+ border: var(--stroke-input);
128
+ background-color: var(--color-tint);
129
+ text-align: center;
130
+ white-space: nowrap;
131
+ cursor: default;
132
+ flex: 0 0 auto;
133
+ }
134
+
135
+ @container (max-width: 19.99em) {
136
+ .govuk-input__prefix,
137
+ .govuk-input__suffix {
138
+ display: block;
139
+ height: 100%;
140
+ white-space: normal;
141
+ }
142
+ }
143
+
144
+ @container (max-width: 19.99em) {
145
+ .govuk-input__prefix {
146
+ border-bottom: 0;
147
+ border-top-left-radius: var(--input-radius);
148
+ border-top-right-radius: var(--input-radius);
149
+ }
150
+
151
+ .govuk-input__prefix + .govuk-input {
152
+ border-top-left-radius: unset;
153
+ border-top-right-radius: unset;
154
+ }
155
+ }
156
+
157
+ @container (min-width: 20em) {
158
+ .govuk-input__prefix {
159
+ border-right: 0;
160
+ border-top-left-radius: var(--input-radius);
161
+ border-bottom-left-radius: var(--input-radius);
162
+ }
163
+
164
+ .govuk-input__prefix + .govuk-input {
165
+ border-top-left-radius: unset;
166
+ border-bottom-left-radius: unset;
167
+ }
168
+ }
169
+
170
+ @container (max-width: 19.99em) {
171
+ .govuk-input__suffix {
172
+ border-top: 0;
173
+ border-bottom-left-radius: var(--input-radius);
174
+ border-bottom-right-radius: var(--input-radius);
175
+ }
176
+
177
+ .govuk-input:has(+ .govuk-input__suffix) {
178
+ border-bottom-left-radius: unset;
179
+ border-bottom-right-radius: unset;
180
+ }
181
+ }
182
+
183
+ @container (min-width: 20em) {
184
+ .govuk-input__suffix {
185
+ border-left: 0;
186
+ border-top-right-radius: var(--input-radius);
187
+ border-bottom-right-radius: var(--input-radius);
188
+ }
189
+
190
+ .govuk-input:has(+ .govuk-input__suffix) {
191
+ border-top-right-radius: unset;
192
+ border-bottom-right-radius: unset;
193
+ }
194
+ }
@@ -0,0 +1,43 @@
1
+ label {
2
+ font-weight: var(--font-medium);
3
+ line-height: var(--leading-fine);
4
+ }
5
+
6
+ label::after {
7
+ content: "\A";
8
+ white-space: pre;
9
+ }
10
+
11
+ .govuk-label {
12
+ font-weight: var(--font-regular);
13
+ font-size: var(--size-step-0);
14
+ display: block;
15
+ margin-block-end: var(--space-3xs);
16
+ }
17
+
18
+ .govuk-label--xl,
19
+ .govuk-label--l,
20
+ .govuk-label--m {
21
+ font-weight: var(--font-bold);
22
+ margin-block-end: var(--space-xs);
23
+ }
24
+
25
+ .govuk-label--xl {
26
+ font-size: var(--size-step-3);
27
+ }
28
+
29
+ .govuk-label--l {
30
+ font-size: var(--size-step-2);
31
+ }
32
+
33
+ .govuk-label--m {
34
+ font-size: var(--size-step-1);
35
+ }
36
+
37
+ .govuk-label--s {
38
+ font-weight: var(--font-bold);
39
+ }
40
+
41
+ .govuk-label-wrapper {
42
+ margin: 0;
43
+ }
@@ -0,0 +1,18 @@
1
+ [data-govuk-password-input-init] {
2
+ .govuk-password-input__wrapper {
3
+ gap: var(--space-3xs);
4
+ }
5
+
6
+ .govuk-button {
7
+ min-width: 4em;
8
+ background: none;
9
+ cursor: pointer;
10
+ border: var(--stroke-input);
11
+ }
12
+
13
+ .govuk-button:focus-visible,
14
+ .govuk-button:hover {
15
+ color: var(--color-dark-glare);
16
+ border-color: var(--color-dark-glare);
17
+ }
18
+ }
@@ -0,0 +1,162 @@
1
+ .govuk-radios--small {
2
+ --input-size: var(--small-input-size);
3
+ }
4
+
5
+ .govuk-radios__item {
6
+ display: grid;
7
+ grid-template-areas: "input label" "input hint";
8
+ grid-template-columns: var(--input-size) 1fr;
9
+ grid-column-gap: var(--space-xs);
10
+ align-items: baseline;
11
+ }
12
+
13
+ .govuk-radios__input {
14
+ cursor: pointer;
15
+ grid-area: input;
16
+ height: var(--input-size);
17
+ margin-block-start: calc(-0.5 * var(--input-size));
18
+ margin: 0;
19
+ opacity: 0;
20
+ translate: 0 calc(var(--stroke-input-width) + 0.25 * var(--input-size));
21
+ width: var(--input-size);
22
+ z-index: 1;
23
+ }
24
+
25
+ .govuk-radios__item::before {
26
+ aspect-ratio: 1;
27
+ background: transparent;
28
+ border-radius: 50%;
29
+ border: var(--stroke-input);
30
+ content: "";
31
+ display: inline-block;
32
+ grid-area: input;
33
+ margin-block-start: calc(-0.5 * var(--input-size));
34
+ translate: 0 calc(var(--stroke-input-width) + 0.25 * var(--input-size));
35
+ }
36
+
37
+ .govuk-radios__item::after {
38
+ content: "";
39
+ aspect-ratio: 1;
40
+ background: currentcolor;
41
+ border-radius: 50%;
42
+ border: calc(0.25 * var(--input-size)) solid currentcolor;
43
+ display: inline-block;
44
+ grid-area: input;
45
+ margin-block-start: calc(-0.5 * var(--input-size));
46
+ margin-inline: calc(0.25 * var(--input-size));
47
+ opacity: 0;
48
+ translate: 0 var(--stroke-input-width);
49
+ }
50
+
51
+ .govuk-radios__label {
52
+ grid-area: label;
53
+ padding-block: calc(
54
+ var(--input-size) * 0.5 + var(--stroke-input-width) - 0.5em
55
+ );
56
+ cursor: pointer;
57
+ touch-action: manipulation;
58
+ margin-block-end: 0;
59
+ min-height: var(--input-size);
60
+ }
61
+
62
+ .govuk-radios__hint {
63
+ grid-area: hint;
64
+ }
65
+
66
+ .govuk-radios__label:has(+ .govuk-radios__hint) {
67
+ padding-block-end: 0;
68
+ }
69
+
70
+ .govuk-radios__item:has(.govuk-radios__input:focus)::before {
71
+ border-width: calc(var(--stroke-input-width) + 1px);
72
+ outline: var(--focus-outline);
73
+ outline-offset: 0;
74
+ }
75
+
76
+ @media screen and (forced-colors: active), (-ms-high-contrast: active) {
77
+ .govuk-radios__item:has(.govuk-radios__input:focus)::before {
78
+ outline-color: Highlight;
79
+ }
80
+ }
81
+
82
+ .govuk-radios__item:has(.govuk-radios__input:checked)::after {
83
+ opacity: 1;
84
+ }
85
+
86
+ .govuk-radios__input:disabled,
87
+ .govuk-radios__input:disabled + .govuk-radios__label {
88
+ cursor: not-allowed;
89
+ }
90
+
91
+ .govuk-radios__input:disabled + .govuk-radios__label,
92
+ .govuk-radios__input:disabled ~ .govuk-hint {
93
+ opacity: 0.5;
94
+ }
95
+
96
+ @media (min-width: 40.0625em) {
97
+ .govuk-radios--inline {
98
+ display: flex;
99
+ flex-wrap: wrap;
100
+ align-items: flex-start;
101
+ }
102
+
103
+ .govuk-radios--inline .govuk-radios__item {
104
+ margin-right: var(--space-s);
105
+ }
106
+ }
107
+
108
+ .govuk-radios__divider {
109
+ width: var(--input-size);
110
+ text-align: center;
111
+ }
112
+
113
+ .govuk-radios__conditional {
114
+ margin-bottom: var(--space-s);
115
+ margin-left: calc(var(--input-size) * 0.5 - var(--stroke-input-width) * 0.5);
116
+ padding-left: calc(
117
+ var(--input-size) * 0.5 - var(--stroke-input-width) * 0.5 + var(--space-xs)
118
+ );
119
+ border-left: calc(2 * var(--stroke-input-width)) solid var(--color-mid);
120
+
121
+ > :not([type="hidden"]) + * {
122
+ margin-top: var(--flow-space, var(--space-xs));
123
+ }
124
+ }
125
+
126
+ .govuk-frontend-supported .govuk-radios__conditional--hidden {
127
+ display: none;
128
+ }
129
+
130
+ .govuk-radios--small {
131
+ .govuk-radios__item:hover:has(.govuk-radios__input:not(:disabled))::before {
132
+ outline: var(--focus-width) 1px dashed transparent;
133
+ outline-offset: 1px;
134
+ box-shadow: 0 0 0 var(--space-3xs) var(--color-mid);
135
+ }
136
+
137
+ .govuk-radios__item:hover:has(.govuk-radios__input:focus)::before {
138
+ box-shadow:
139
+ 0 0 0 var(--focus-width) var(--focus-color),
140
+ 0 0 0 var(--space-3xs) var(--color-mid);
141
+ }
142
+ }
143
+
144
+ @media screen and (forced-colors: active), (-ms-high-contrast: active) {
145
+ .govuk-radios--small {
146
+ .govuk-radios__item:hover:has(.govuk-radios__input:focus)::before {
147
+ outline-color: Highlight;
148
+ }
149
+ }
150
+ }
151
+
152
+ @media (hover: none), (pointer: coarse) {
153
+ .govuk-radios--small {
154
+ .govuk-radios__item:hover:has(.govuk-radios__input:not(:disabled))::before {
155
+ box-shadow: initial;
156
+ }
157
+
158
+ .govuk-radios__item:hover:has(.govuk-radios__input:focus)::before {
159
+ box-shadow: 0 0 0 var(--focus-width) var(--focus-color);
160
+ }
161
+ }
162
+ }
@@ -0,0 +1,18 @@
1
+ select {
2
+ line-height: var(--leading-fine);
3
+ min-width: 11.5em;
4
+ max-width: 100%;
5
+ height: var(--input-size);
6
+ background-color: var(--color-light);
7
+ }
8
+
9
+ select option:active,
10
+ select option:checked,
11
+ select:focus::-ms-value {
12
+ color: var(--color-light);
13
+ background-color: var(--color-dark-glare);
14
+ }
15
+
16
+ .govuk-select--error:not(:focus-visible) {
17
+ border-color: var(--govuk-error-color);
18
+ }
@@ -0,0 +1,3 @@
1
+ .govuk-textarea--error:not(:focus-visible) {
2
+ border-color: var(--govuk-error-color);
3
+ }
@@ -0,0 +1,33 @@
1
+ @import url("/trix.css");
2
+
3
+ trix-toolbar {
4
+ margin-block-end: var(--flow-space, var(--space-2xs));
5
+
6
+ .trix-button-group {
7
+ border: var(--stroke-input);
8
+ border-radius: var(--input-radius);
9
+ margin-block-end: 0;
10
+ }
11
+
12
+ .trix-button {
13
+ color: var(--color-dark);
14
+ border-bottom: none;
15
+ }
16
+
17
+ .trix-button--dialog {
18
+ min-height: 2.2rem;
19
+ }
20
+
21
+ .trix-button:not(:first-child) {
22
+ border-left: var(--stroke-input);
23
+ }
24
+
25
+ .trix-button.trix-active {
26
+ background-color: var(--color-mid);
27
+ border-bottom: none;
28
+ }
29
+ }
30
+
31
+ .govuk-richtextarea--error:not(:focus-visible) {
32
+ border-color: var(--govuk-error-color);
33
+ }
@@ -0,0 +1,22 @@
1
+ @import url("https://rsms.me/inter/inter.css");
2
+ @import url("https://fonts.googleapis.com/css2?family=Inconsolata:wght@200..900&display=swap");
3
+
4
+ :root {
5
+ --font-base: "Inter", sans-serif;
6
+ --font-mono: "Inconsolata", monospace;
7
+ --leading-micro: 0.85;
8
+ --leading-flat: 1;
9
+ --leading-fine: 1.2;
10
+ --leading-standard: 1.4;
11
+ --leading-loose: 1.7;
12
+ --font-regular: 400;
13
+ --font-medium: 500;
14
+ --font-bold: 700;
15
+ --font-black: 900;
16
+ }
17
+
18
+ @supports (font-variation-settings: normal) {
19
+ :root {
20
+ --font-base: "Inter var", sans-serif;
21
+ }
22
+ }