@wix/patterns-fields 1.92.0 → 1.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/dist/cjs/components/address/input/address-input.st.css.js +3 -3
  2. package/dist/cjs/components/address/input/address-input.st.css.js.map +1 -1
  3. package/dist/cjs/components/audio/actions/actions-menu/actions-menu.st.css.js +3 -3
  4. package/dist/cjs/components/audio/actions/actions-menu/actions-menu.st.css.js.map +1 -1
  5. package/dist/cjs/components/audio/audio-field/form-audio-field.st.css.js +4 -4
  6. package/dist/cjs/components/audio/audio-field/form-audio-field.st.css.js.map +1 -1
  7. package/dist/cjs/components/audio/audio-player/audio-player.st.css.js +2 -2
  8. package/dist/cjs/components/audio/audio-player/audio-player.st.css.js.map +1 -1
  9. package/dist/cjs/components/color-view/cell-color-view.st.css.js +3 -3
  10. package/dist/cjs/components/color-view/cell-color-view.st.css.js.map +1 -1
  11. package/dist/cjs/components/color-view/color-view.st.css.js +4 -4
  12. package/dist/cjs/components/color-view/color-view.st.css.js.map +1 -1
  13. package/dist/cjs/components/delete-dialog/delete-dialog.st.css.js +3 -3
  14. package/dist/cjs/components/delete-dialog/delete-dialog.st.css.js.map +1 -1
  15. package/dist/cjs/components/document/form-document-field.st.css.js +7 -7
  16. package/dist/cjs/components/document/form-document-field.st.css.js.map +1 -1
  17. package/dist/cjs/components/exclamation/exclamation.st.css.js +5 -5
  18. package/dist/cjs/components/exclamation/exclamation.st.css.js.map +1 -1
  19. package/dist/cjs/components/field-validation-settings/field-validation-settings-input.js +9 -8
  20. package/dist/cjs/components/field-validation-settings/field-validation-settings-input.js.map +1 -1
  21. package/dist/cjs/components/highlighted-text/highlighted-text.st.css.js +5 -5
  22. package/dist/cjs/components/highlighted-text/highlighted-text.st.css.js.map +1 -1
  23. package/dist/cjs/components/image/thumbnail-replace-overlay.st.css.js +3 -3
  24. package/dist/cjs/components/image/thumbnail-replace-overlay.st.css.js.map +1 -1
  25. package/dist/cjs/components/media-control/cell-media-edit-shell.st.css.js +2 -2
  26. package/dist/cjs/components/media-control/cell-media-edit-shell.st.css.js.map +1 -1
  27. package/dist/cjs/components/media-control/paste-url-button.st.css.js +4 -4
  28. package/dist/cjs/components/media-control/paste-url-button.st.css.js.map +1 -1
  29. package/dist/cjs/components/media-gallery/form-media-gallery-field.st.css.js +10 -10
  30. package/dist/cjs/components/media-gallery/form-media-gallery-field.st.css.js.map +1 -1
  31. package/dist/cjs/components/media-image/media-image.st.css.js +4 -4
  32. package/dist/cjs/components/media-image/media-image.st.css.js.map +1 -1
  33. package/dist/cjs/components/media-image/overlays/overlay.st.css.js +3 -3
  34. package/dist/cjs/components/media-image/overlays/overlay.st.css.js.map +1 -1
  35. package/dist/cjs/components/media-loader/media-loader.st.css.js +3 -3
  36. package/dist/cjs/components/media-loader/media-loader.st.css.js.map +1 -1
  37. package/dist/cjs/components/media-tag/web-media-tag/media-tag.st.css.js +2 -2
  38. package/dist/cjs/components/media-tag/web-media-tag/media-tag.st.css.js.map +1 -1
  39. package/dist/cjs/components/multi-document/cell-multi-document-edit.st.css.js +3 -3
  40. package/dist/cjs/components/multi-document/cell-multi-document-edit.st.css.js.map +1 -1
  41. package/dist/cjs/components/multi-document/multi-document-input/form-multi-document.st.css.js +5 -5
  42. package/dist/cjs/components/multi-document/multi-document-input/form-multi-document.st.css.js.map +1 -1
  43. package/dist/cjs/components/reference/cell-multi-reference-input.st.css.js +2 -2
  44. package/dist/cjs/components/reference/cell-multi-reference-input.st.css.js.map +1 -1
  45. package/dist/cjs/components/reference/cell-reference-input.st.css.js +3 -3
  46. package/dist/cjs/components/reference/cell-reference-input.st.css.js.map +1 -1
  47. package/dist/cjs/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js +4 -4
  48. package/dist/cjs/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js.map +1 -1
  49. package/dist/cjs/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js +3 -3
  50. package/dist/cjs/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js.map +1 -1
  51. package/dist/cjs/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.js +2 -2
  52. package/dist/cjs/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.js.map +1 -1
  53. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.js +3 -3
  54. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.js.map +1 -1
  55. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js +3 -3
  56. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js.map +1 -1
  57. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.js +2 -2
  58. package/dist/cjs/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.js.map +1 -1
  59. package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.js +7 -7
  60. package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.js.map +1 -1
  61. package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.js +5 -5
  62. package/dist/cjs/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.js.map +1 -1
  63. package/dist/cjs/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js +4 -4
  64. package/dist/cjs/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js.map +1 -1
  65. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.js +18 -18
  66. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.js.map +1 -1
  67. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.js +4 -4
  68. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.js.map +1 -1
  69. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.js +18 -18
  70. package/dist/cjs/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.js.map +1 -1
  71. package/dist/cjs/components/text/form-long-text.js +14 -6
  72. package/dist/cjs/components/text/form-long-text.js.map +1 -1
  73. package/dist/cjs/components/text/form-short-text.js +15 -7
  74. package/dist/cjs/components/text/form-short-text.js.map +1 -1
  75. package/dist/cjs/components/text/text-view.st.css.js +3 -3
  76. package/dist/cjs/components/text/text-view.st.css.js.map +1 -1
  77. package/dist/cjs/components/url/form-url.js +20 -8
  78. package/dist/cjs/components/url/form-url.js.map +1 -1
  79. package/dist/cjs/styles.global.css +1 -1
  80. package/dist/cjs/types/validation.js.map +1 -1
  81. package/dist/cjs/validations/field-validation-settings.js +21 -11
  82. package/dist/cjs/validations/field-validation-settings.js.map +1 -1
  83. package/dist/cjs/validations/regex-safety.js +255 -0
  84. package/dist/cjs/validations/regex-safety.js.map +1 -0
  85. package/dist/esm/components/address/input/address-input.st.css.js +2 -2
  86. package/dist/esm/components/audio/actions/actions-menu/actions-menu.st.css.js +2 -2
  87. package/dist/esm/components/audio/audio-field/form-audio-field.st.css.js +2 -2
  88. package/dist/esm/components/audio/audio-player/audio-player.st.css.js +2 -2
  89. package/dist/esm/components/audio/audio-player/audio-player.st.css.js.map +1 -1
  90. package/dist/esm/components/color-view/cell-color-view.st.css.js +2 -2
  91. package/dist/esm/components/color-view/cell-color-view.st.css.js.map +1 -1
  92. package/dist/esm/components/color-view/color-view.st.css.js +2 -2
  93. package/dist/esm/components/color-view/color-view.st.css.js.map +1 -1
  94. package/dist/esm/components/delete-dialog/delete-dialog.st.css.js +2 -2
  95. package/dist/esm/components/document/form-document-field.st.css.js +2 -2
  96. package/dist/esm/components/exclamation/exclamation.st.css.js +2 -2
  97. package/dist/esm/components/field-validation-settings/field-validation-settings-input.js +8 -3
  98. package/dist/esm/components/field-validation-settings/field-validation-settings-input.js.map +1 -1
  99. package/dist/esm/components/highlighted-text/highlighted-text.st.css.js +3 -3
  100. package/dist/esm/components/highlighted-text/highlighted-text.st.css.js.map +1 -1
  101. package/dist/esm/components/image/thumbnail-replace-overlay.st.css.js +2 -2
  102. package/dist/esm/components/media-control/cell-media-edit-shell.st.css.js +2 -2
  103. package/dist/esm/components/media-control/paste-url-button.st.css.js +2 -2
  104. package/dist/esm/components/media-gallery/form-media-gallery-field.st.css.js +2 -2
  105. package/dist/esm/components/media-image/media-image.st.css.js +3 -3
  106. package/dist/esm/components/media-image/media-image.st.css.js.map +1 -1
  107. package/dist/esm/components/media-image/overlays/overlay.st.css.js +2 -2
  108. package/dist/esm/components/media-image/overlays/overlay.st.css.js.map +1 -1
  109. package/dist/esm/components/media-loader/media-loader.st.css.js +2 -2
  110. package/dist/esm/components/media-loader/media-loader.st.css.js.map +1 -1
  111. package/dist/esm/components/media-tag/web-media-tag/media-tag.st.css.js +2 -2
  112. package/dist/esm/components/media-tag/web-media-tag/media-tag.st.css.js.map +1 -1
  113. package/dist/esm/components/multi-document/cell-multi-document-edit.st.css.js +2 -2
  114. package/dist/esm/components/multi-document/multi-document-input/form-multi-document.st.css.js +2 -2
  115. package/dist/esm/components/reference/cell-multi-reference-input.st.css.js +2 -2
  116. package/dist/esm/components/reference/cell-reference-input.st.css.js +2 -2
  117. package/dist/esm/components/reference/cell-reference-input.st.css.js.map +1 -1
  118. package/dist/esm/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js +2 -2
  119. package/dist/esm/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js +2 -2
  120. package/dist/esm/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.js +2 -2
  121. package/dist/esm/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.js.map +1 -1
  122. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.js +2 -2
  123. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js +2 -2
  124. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js.map +1 -1
  125. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.js +2 -2
  126. package/dist/esm/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.js +2 -2
  127. package/dist/esm/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.js.map +1 -1
  128. package/dist/esm/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.js +2 -2
  129. package/dist/esm/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js +2 -2
  130. package/dist/esm/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.js.map +1 -1
  131. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.js +2 -2
  132. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.js +2 -2
  133. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.js.map +1 -1
  134. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.js +2 -2
  135. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.js.map +1 -1
  136. package/dist/esm/components/text/form-long-text.js +5 -0
  137. package/dist/esm/components/text/form-long-text.js.map +1 -1
  138. package/dist/esm/components/text/form-short-text.js +5 -0
  139. package/dist/esm/components/text/form-short-text.js.map +1 -1
  140. package/dist/esm/components/text/text-view.st.css.js +2 -2
  141. package/dist/esm/components/url/form-url.js +10 -2
  142. package/dist/esm/components/url/form-url.js.map +1 -1
  143. package/dist/esm/styles.global.css +1 -1
  144. package/dist/esm/validations/field-validation-settings.js +17 -11
  145. package/dist/esm/validations/field-validation-settings.js.map +1 -1
  146. package/dist/esm/validations/regex-safety.js +241 -0
  147. package/dist/esm/validations/regex-safety.js.map +1 -0
  148. package/dist/types/components/audio/audio-player/audio-player.st.css.d.ts.map +1 -1
  149. package/dist/types/components/color-view/cell-color-view.st.css.d.ts.map +1 -1
  150. package/dist/types/components/color-view/color-view.st.css.d.ts.map +1 -1
  151. package/dist/types/components/field-validation-settings/field-validation-settings-input.d.ts.map +1 -1
  152. package/dist/types/components/highlighted-text/highlighted-text.st.css.d.ts.map +1 -1
  153. package/dist/types/components/media-image/media-image.st.css.d.ts.map +1 -1
  154. package/dist/types/components/media-image/overlays/overlay.st.css.d.ts.map +1 -1
  155. package/dist/types/components/media-loader/media-loader.st.css.d.ts.map +1 -1
  156. package/dist/types/components/media-tag/web-media-tag/media-tag.st.css.d.ts.map +1 -1
  157. package/dist/types/components/reference/cell-reference-input.st.css.d.ts.map +1 -1
  158. package/dist/types/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.d.ts.map +1 -1
  159. package/dist/types/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.d.ts.map +1 -1
  160. package/dist/types/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.d.ts.map +1 -1
  161. package/dist/types/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.d.ts.map +1 -1
  162. package/dist/types/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.d.ts.map +1 -1
  163. package/dist/types/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.d.ts.map +1 -1
  164. package/dist/types/components/text/form-long-text.d.ts.map +1 -1
  165. package/dist/types/components/text/form-short-text.d.ts.map +1 -1
  166. package/dist/types/components/url/form-url.d.ts.map +1 -1
  167. package/dist/types/types/validation.d.ts +4 -1
  168. package/dist/types/types/validation.d.ts.map +1 -1
  169. package/dist/types/validations/field-validation-settings.d.ts +2 -0
  170. package/dist/types/validations/field-validation-settings.d.ts.map +1 -1
  171. package/dist/types/validations/regex-safety.d.ts +17 -0
  172. package/dist/types/validations/regex-safety.d.ts.map +1 -0
  173. package/package.json +4 -4
  174. package/src/__tests__/components/field-validation-settings/field-validation-settings-input.spec.tsx +42 -1
  175. package/src/__tests__/components/field-validation-settings/pattern-round-trip.spec.tsx +37 -0
  176. package/src/__tests__/components/text/form-long-text.spec.tsx +55 -0
  177. package/src/__tests__/components/text/form-short-text.spec.tsx +85 -0
  178. package/src/__tests__/components/url/form-url.spec.tsx +44 -0
  179. package/src/__tests__/validations/field-validation-settings-pattern.spec.ts +87 -0
  180. package/src/__tests__/validations/regex-safety.spec.ts +71 -0
  181. package/src/components/address/input/address-input.st.css.ts +2 -2
  182. package/src/components/audio/actions/actions-menu/actions-menu.st.css.ts +2 -2
  183. package/src/components/audio/audio-field/form-audio-field.st.css.ts +2 -2
  184. package/src/components/audio/audio-player/audio-player.st.css.ts +2 -2
  185. package/src/components/color-view/cell-color-view.st.css.ts +2 -2
  186. package/src/components/color-view/color-view.st.css.ts +2 -2
  187. package/src/components/delete-dialog/delete-dialog.st.css.ts +2 -2
  188. package/src/components/document/form-document-field.st.css.ts +2 -2
  189. package/src/components/exclamation/exclamation.st.css.ts +2 -2
  190. package/src/components/field-validation-settings/field-validation-settings-input.tsx +10 -6
  191. package/src/components/highlighted-text/highlighted-text.st.css.ts +3 -3
  192. package/src/components/image/thumbnail-replace-overlay.st.css.ts +2 -2
  193. package/src/components/media-control/cell-media-edit-shell.st.css.ts +2 -2
  194. package/src/components/media-control/paste-url-button.st.css.ts +2 -2
  195. package/src/components/media-gallery/form-media-gallery-field.st.css.ts +2 -2
  196. package/src/components/media-image/media-image.st.css.ts +3 -3
  197. package/src/components/media-image/overlays/overlay.st.css.ts +2 -2
  198. package/src/components/media-loader/media-loader.st.css.ts +2 -2
  199. package/src/components/media-tag/web-media-tag/media-tag.st.css.ts +2 -2
  200. package/src/components/multi-document/cell-multi-document-edit.st.css.ts +2 -2
  201. package/src/components/multi-document/multi-document-input/form-multi-document.st.css.ts +2 -2
  202. package/src/components/reference/cell-multi-reference-input.st.css.ts +2 -2
  203. package/src/components/reference/cell-reference-input.st.css.ts +2 -2
  204. package/src/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.ts +2 -2
  205. package/src/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.ts +2 -2
  206. package/src/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.ts +2 -2
  207. package/src/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.ts +2 -2
  208. package/src/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.ts +2 -2
  209. package/src/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.ts +2 -2
  210. package/src/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.ts +2 -2
  211. package/src/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.ts +2 -2
  212. package/src/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.ts +2 -2
  213. package/src/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.ts +2 -2
  214. package/src/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.ts +2 -2
  215. package/src/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.ts +2 -2
  216. package/src/components/text/form-long-text.tsx +9 -0
  217. package/src/components/text/form-short-text.tsx +9 -0
  218. package/src/components/text/text-view.st.css.ts +2 -2
  219. package/src/components/url/form-url.tsx +18 -2
  220. package/src/styles.global.css +1 -1
  221. package/src/types/validation.ts +4 -1
  222. package/src/validations/field-validation-settings.ts +30 -12
  223. package/src/validations/regex-safety.ts +297 -0
@@ -6,6 +6,7 @@ import { useController } from '@wix/bex-core/form';
6
6
 
7
7
  import { BaseInputProps } from '../../types/base-input';
8
8
  import { isEmpty } from '../../validations/string';
9
+ import { compilePattern } from '../../validations/field-validation-settings';
9
10
 
10
11
  export interface FormLongTextProps extends BaseInputProps<string> {}
11
12
 
@@ -13,6 +14,10 @@ const _FormLongText = (props: FormLongTextProps) => {
13
14
  const { field, dataHook, formControl, data } = props;
14
15
 
15
16
  const { translate: t } = useWixPatternsContainer();
17
+ const patternRegex = React.useMemo(
18
+ () => compilePattern(field.validation?.pattern),
19
+ [field.validation?.pattern],
20
+ );
16
21
 
17
22
  const controller = useController({
18
23
  name: field.id,
@@ -24,6 +29,10 @@ const _FormLongText = (props: FormLongTextProps) => {
24
29
  return t('cairo.fieldValidation.requiredField');
25
30
  }
26
31
 
32
+ if (value && patternRegex && !patternRegex.test(value)) {
33
+ return t('cairo.fieldValidation.patternMismatch');
34
+ }
35
+
27
36
  return true;
28
37
  },
29
38
  },
@@ -6,6 +6,7 @@ import { useController } from '@wix/bex-core/form';
6
6
 
7
7
  import { BaseInputProps } from '../../types/base-input';
8
8
  import { isEmpty, isLongerThan, isShorterThan } from '../../validations/string';
9
+ import { compilePattern } from '../../validations/field-validation-settings';
9
10
  import { useTranslations } from '../../hooks/use-translations';
10
11
  import { FormShortTextInput } from './form-short-text-input';
11
12
 
@@ -24,6 +25,10 @@ const _FormShortText = (props: FormShortTextProps) => {
24
25
  const minLength = stringLengthRange?.minLength;
25
26
  const maxLength = stringLengthRange?.maxLength;
26
27
  const specificValues = field.validation?.specificValues;
28
+ const patternRegex = React.useMemo(
29
+ () => compilePattern(field.validation?.pattern),
30
+ [field.validation?.pattern],
31
+ );
27
32
 
28
33
  const controller = useController({
29
34
  name: field.id,
@@ -55,6 +60,10 @@ const _FormShortText = (props: FormShortTextProps) => {
55
60
  return specificValuesMessage(field.displayName);
56
61
  }
57
62
 
63
+ if (value && patternRegex && !patternRegex.test(value)) {
64
+ return t('cairo.fieldValidation.patternMismatch');
65
+ }
66
+
58
67
  return true;
59
68
  },
60
69
  },
@@ -5,7 +5,7 @@ import { classesRuntime, statesRuntime } from "../../stylable-esm-runtime.js";
5
5
 
6
6
 
7
7
 
8
- var _namespace_ = "textview2693583994";
8
+ var _namespace_ = "textview3095721063";
9
9
  var _style_ = classesRuntime.bind(null, _namespace_);
10
10
 
11
11
  export var cssStates = statesRuntime.bind(null, _namespace_);
@@ -13,7 +13,7 @@ export var style: import("@stylable/runtime").STFunction = _style_;
13
13
  export var st: import("@stylable/runtime").STFunction = _style_;
14
14
 
15
15
  export var namespace = _namespace_;
16
- export var classes = {"root":"textview2693583994__root","textView":"textview2693583994__textView"};
16
+ export var classes = {"root":"textview3095721063__root","textView":"textview3095721063__textView"};
17
17
  export var keyframes = {};
18
18
  export var layers = {};
19
19
  export var containers = {};
@@ -6,6 +6,7 @@ import { useController } from '@wix/bex-core/form';
6
6
 
7
7
  import { BaseInputProps } from '../../types/base-input';
8
8
  import { isEmpty } from '../../validations/string';
9
+ import { compilePattern } from '../../validations/field-validation-settings';
9
10
  import { isValidUri } from '../../validations/url';
10
11
  import { FormUrlInput } from './form-url-input';
11
12
 
@@ -14,6 +15,10 @@ export interface FormUrlProps extends BaseInputProps<string> {}
14
15
  const _FormUrl = (props: FormUrlProps) => {
15
16
  const { field, dataHook, formControl, data } = props;
16
17
  const { translate: t } = useWixPatternsContainer();
18
+ const patternRegex = React.useMemo(
19
+ () => compilePattern(field.validation?.pattern),
20
+ [field.validation?.pattern],
21
+ );
17
22
 
18
23
  const controller = useController({
19
24
  name: field.id,
@@ -23,9 +28,20 @@ const _FormUrl = (props: FormUrlProps) => {
23
28
  validate: (value: string | null | undefined) => {
24
29
  if (field.validation?.required && isEmpty(value)) {
25
30
  return t('cairo.fieldValidation.requiredField');
26
- } else if (value) {
27
- return isValidUri(value) || t('cairo.customFields.url-input.error');
28
31
  }
32
+
33
+ if (!value) {
34
+ return true;
35
+ }
36
+
37
+ if (!isValidUri(value)) {
38
+ return t('cairo.customFields.url-input.error');
39
+ }
40
+
41
+ if (patternRegex && !patternRegex.test(value)) {
42
+ return t('cairo.fieldValidation.patternMismatch');
43
+ }
44
+
29
45
  return true;
30
46
  },
31
47
  },
@@ -1 +1 @@
1
- .addressinput895093225__tableAddressInput{height:36px!important;margin-left:-1px;display:flex!important;align-items:center;width:100%}.addressinput895093225__tableAddressInput>div{padding:0!important;width:100%}.addressinput895093225__tableAddressInput:focus-within{margin-left:2px}.actionsmenu1124873622__action{margin-left:calc(var(--wds-space-100, 6px)*-1)}.formaudiofield2796832566__addItem{height:120px!important;box-sizing:border-box}.formaudiofield2796832566__addItem:focus-within{box-shadow:var(--wds-input-shadow-focus-standard, 0 0 0 3px var(--wds-color-blue-300, var(--wsr-color-B30)));border-radius:var(--wds-border-radius-400, 8px)}.formaudiofield2796832566__addItem.formaudiofield2796832566--disabled{pointer-events:auto!important}.formaudiofield2796832566__addItem.formaudiofield2796832566--error{border:1px solid var(--wds-color-red-100, var(--wsr-color-R10))!important}.formaudiofield2796832566__mediaTitle{line-height:18px!important}.audioplayer2314821566__root{width:fit-content;z-index:1000;position:fixed!important;bottom:42px;right:48px;box-sizing:border-box;display:flex;align-items:center;justify-content:center}.cellcolorview3726532357__hashPrefix{color:var(--wsr-color-D40, #868aa5);font-size:14px;font-weight:300;line-height:1}.colorview2752136020__view{width:100%}.colorview2752136020__fillPreview{flex-shrink:0}.colorview2752136020__view .colorview2752136020__fillPreview{width:18px;height:18px;min-width:18px!important;min-height:18px!important}.deletedialog4001571140__layout{max-width:510px!important}.formdocumentfield4287416404__viewWrapper{border-radius:var(--wds-border-radius-300, calc(2px * 3));border:1px solid var(--wds-color-blue-300, var(--wsr-color-B30))}.formdocumentfield4287416404__viewWrapper:hover{background:var(--wds-color-blue-500, var(--wsr-color-B50));cursor:pointer}.formdocumentfield4287416404__textWidth{max-width:calc(100% - 196px)}.formdocumentfield4287416404__documentLoader{padding-top:21px;padding-bottom:21px}.formdocumentfield4287416404__addDocument{padding-top:17px!important;padding-bottom:17px!important}.formdocumentfield4287416404__addDocument.formdocumentfield4287416404--error{border:1px solid var(--wds-color-red-100, var(--wsr-color-R10))!important}.formdocumentfield4287416404__addItemWrapper:focus-within{box-shadow:var(--wds-input-shadow-focus-standard, 0 0 0 3px var(--wds-color-blue-300, var(--wsr-color-B30)));border-radius:var(--wds-border-radius-400, calc(2px * 4))}.exclamation1635117531__exclamation{display:flex;justify-content:center;align-items:center;box-sizing:border-box;border-radius:3px;cursor:pointer}.exclamation1635117531__exclamation.exclamation1635117531---type-7-warning:not(.exclamation1635117531--customSize),.exclamation1635117531__exclamation.exclamation1635117531---type-5-error:not(.exclamation1635117531--customSize){width:24px;height:24px}.exclamation1635117531__exclamation.exclamation1635117531---type-7-warning{color:var(--wds-color-fill-warning-primary)}.exclamation1635117531__exclamation.exclamation1635117531---type-5-error{color:var(--wds-color-fill-destructive-primary)}.exclamation1635117531__actions{display:flex;flex-direction:column}.exclamation1635117531__action{white-space:normal!important;height:auto!important;text-align:left;gap:6px}.exclamation1635117531__action+.exclamation1635117531__action{margin-top:6px}.exclamation1635117531__action.exclamation1635117531--accented{color:var(--wds-color-blue-100)}.exclamation1635117531__action.exclamation1635117531--accented:hover{color:var(--wds-color-blue-200)}.highlightedtext2576463911__root.highlightedtext2576463911--highlightedBackground{animation:highlightedtext2576463911__highlighted 150ms ease-out 1 forwards}.highlightedtext2576463911__substring.highlightedtext2576463911--isHighlighted{animation:highlightedtext2576463911__highlighted-match 150ms ease-out 50ms 1 forwards}@keyframes highlightedtext2576463911__highlighted{0%{background-color:transparent}to{background-color:var(--wds-color-yellow-400, var(--wsr-color-Y40))}}@keyframes highlightedtext2576463911__highlighted-match{0%{background-color:transparent}to{background-color:var(--wds-color-yellow-200, var(--wsr-color-Y20))}}.thumbnailreplaceoverlay1803038003__root{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.4);border-radius:3px}.thumbnailreplaceoverlay1803038003__icon{color:#fff;width:18px;height:18px}.cellmediaeditshell3943410809__root{width:100%;height:100%}.pasteurlbutton1571372213__root{margin-top:6px}.pasteurlbutton1571372213__iconButtonTooltip{height:max-content}.pasteurlbutton1571372213__iconButton{width:24px;height:24px}.formmediagalleryfield1062205643__container{display:flex;min-height:128px;max-height:259px}.formmediagalleryfield1062205643__viewBox{display:flex;height:100%;width:100%;flex-wrap:wrap}.formmediagalleryfield1062205643__addItemWrapper{height:128px;width:100%;box-sizing:border-box}.formmediagalleryfield1062205643__addItem{box-sizing:border-box}.formmediagalleryfield1062205643__overlay{width:initial!important;min-width:382px!important}.formmediagalleryfield1062205643__image.formmediagalleryfield1062205643--withMarginRight{margin-right:3px}.formmediagalleryfield1062205643__image.formmediagalleryfield1062205643--withMarginTop{margin-top:3px}.formmediagalleryfield1062205643__previewImage{max-height:calc(100% - 12px)!important}.formmediagalleryfield1062205643__previewVideo{border-radius:8px;max-width:100%;max-height:calc(100% - 12px)!important}.mediaimage13032201__root{display:flex;align-items:center;flex-shrink:0;position:relative;box-sizing:border-box}.mediaimage13032201__root.mediaimage13032201--error{--mediaimage13032201-from:calc(50% - 0.5px);--mediaimage13032201-to:calc(50% + 0.5px);background-image:linear-gradient(to bottom right,transparent var(--mediaimage13032201-from),var(--wds-color-red-200, var(--wsr-color-R20)) var(--mediaimage13032201-from),var(--wds-color-red-200, var(--wsr-color-R20)) var(--mediaimage13032201-to),transparent var(--mediaimage13032201-to))}.mediaimage13032201__root.mediaimage13032201--error>*{opacity:0}.overlay11203936__iconOverlay{position:absolute;color:var(--wds-color-white, var(--wsr-color-D80, #FFFFFF));background-color:transparent;filter:drop-shadow(0 1px 1px rgba(22,45,61,.6));-webkit-filter:drop-shadow(0 1px 1px rgba(22,45,61,.6))}.overlay11203936__iconOverlay.overlay11203936---size-5-small{width:20px;height:20px}.overlay11203936__iconOverlay.overlay11203936---size-6-medium{width:24px;height:24px}.overlay11203936__iconOverlay.overlay11203936---size-5-large{width:28px;height:28px}.overlay11203936__iconOverlay.overlay11203936---placement-7-topLeft{top:2px;left:2px}.overlay11203936__iconOverlay.overlay11203936---placement-10-bottomLeft{bottom:2px;left:2px}.medialoader3297659240__loader{border-radius:6px}.medialoader3297659240__loader.medialoader3297659240--isDashed{border:dashed 1px var(--wds-color-blue-300, var(--wsr-color-B30))}.medialoader3297659240__loader.medialoader3297659240--isSolid{border:solid 1px var(--wds-color-blue-300, var(--wsr-color-B30))}.mediatag535023836__root{box-sizing:border-box;padding:3px 6px 3px 3px;border-radius:3px;max-height:24px;min-width:54px;max-width:100%;background-color:var(--wds-color-blue-400, var(--wsr-color-B40))}.cellmultidocumentedit4202162288__chipTrigger{display:flex;align-items:center;min-width:0;max-width:100%;margin:0;padding:0;border:0;background:0 0;font:inherit;color:inherit;text-align:inherit;cursor:pointer}.formmultidocument3376104653__viewRoot{border-radius:var(--wds-border-radius-300, calc(2px * 3));border:1px solid var(--wds-color-blue-300, var(--wsr-color-B30))}.formmultidocument3376104653__singleViewWrapper{border-radius:0;border-bottom:1px solid var(--wds-color-neutral-600, var(--wsr-color-D60));background-color:transparent!important}.formmultidocument3376104653__viewRoot>div:first-child .formmultidocument3376104653__singleViewWrapper{border-top-left-radius:var(--wds-border-radius-300, calc(2px * 3));border-top-right-radius:var(--wds-border-radius-300, calc(2px * 3))}.formmultidocument3376104653__singleViewWrapper:hover{background-color:var(--wds-color-blue-500, var(--wsr-color-B50))!important}.formmultidocument3376104653__singleViewWrapper:focus-visible{border-bottom:1px solid transparent;position:relative;z-index:1}.formmultidocument3376104653__addDocumentButton{border-bottom-left-radius:var(--wds-border-radius-300, calc(2px * 3));border-bottom-right-radius:var(--wds-border-radius-300, calc(2px * 3))}.formmultidocument3376104653__addDocumentButton:focus-within{border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:var(--wds-border-radius-300, calc(2px * 3));border-bottom-right-radius:var(--wds-border-radius-300, calc(2px * 3))}.cellmultireferenceinput2402420917__root{width:100%;box-sizing:border-box;--wds-input-border-color:transparent;--wds-input-border-color-hover:transparent;--wds-input-border-color-focus:transparent;--wds-input-background-fill-default:transparent;--wds-input-background-fill-hover:transparent;--wds-input-shadow-focus-standard:0 0 0 0 transparent}.cellreferenceinput387050255__root{width:100%;height:100%;display:flex;align-items:center}.cellreferenceinput387050255__autocomplete{width:100%}.richcontentdefaultvalueinput1607913093__richContentEditorContainer .richcontentdefaultvalueinput1607913093__editor{max-height:calc(40vh - var(--topToolbarHeight) - var(--bottomToolbarHeight))}.richcontentforminput3986345257__root{outline:0;box-sizing:border-box;border:1px solid var(--wds-input-border-color, var(--wsr-color-B40, #D6E6FE));border-radius:var(--wds-input-border-radius-default-medium, var(--wsr-border-radius-06, 6px))}.richcontentforminput3986345257__root:focus-within{border:1px solid var(--wds-input-border-color-focus, var(--wsr-color-B10, #116DFF));box-shadow:var(--wds-input-shadow-focus-standard, 0 0 0 3px var(--wsr-color-F00, #A6D0FF))}.richcontentforminput3986345257__root .richcontentforminput3986345257__editor{overflow-y:auto;max-height:calc(80vh - var(--topToolbarHeight) - var(--bottomToolbarHeight))}.richcontentformreadonlyinput580578301__root{outline:0;box-sizing:border-box;border:1px solid var(--wds-color-black-600);border-radius:var(--wds-border-radius-300)}.richcontentformreadonlyinput580578301__root:focus-within{border:1px solid var(--wds-color-blue-100);box-shadow:var(--wds-input-shadow-focus-standard)}.fullscreenmodal3853373179__modalContent{display:flex;flex-direction:column;position:relative;height:100%;width:782px;background-color:var(--wds-color-white, var(--wsr-color-D80, #ffffff));border-radius:var(--wds-border-radius-300, var(--wsr-border-radius-06, 6px));margin-top:24px}.publishloader917710904__publishLoader{position:absolute;top:0;left:0;width:100%;height:100%;background:var(--wds-color-white);z-index:5000;border-radius:inherit}.togglefullscreenbutton2569657262__root{z-index:5;box-sizing:border-box;position:absolute;right:0;top:calc(50% - 16px)!important;padding-right:3px}.togglefullscreenbutton2569657262__root button{border-radius:6px!important}.richcontenteditor464613332__root{position:relative;font-family:var(--wds-font-family-default, Madefor, Helvetica Neue, Helvetica, Arial, sans-serif)}.richcontenteditor464613332__root,.richcontenteditor464613332__toolbarContainer,.richcontenteditor464613332__footerToolbarContainer{width:100%;box-sizing:border-box}.richcontenteditor464613332__toolbarContainer div{box-sizing:border-box}.richcontenteditor464613332__toolbarAndFullScreenButtonWrapper{display:flex;position:relative}.richcontenteditor464613332__editor{box-sizing:border-box;padding:36px 24px 36px 55px}.richcontenteditor464613332__modalEditor{display:flex;flex-direction:column;flex:1;height:100%}.richcontenteditor464613332__modalEditor .richcontenteditor464613332__editor{overflow-y:auto;flex:1;min-width:592px;box-sizing:border-box}.richcontenteditor464613332__modalEditor .richcontenteditor464613332__footerToolbarContainer{margin-top:9px}.richcontenteditor464613332__toolbarContainer button[data-hook~=text-button-headings]>span{display:inline-flex;padding-inline-end:3px!important}.richcontenteditor464613332__toolbarContainer button[data-hook~=text-button-ai]>span{padding-inline-end:9px!important}.richcontenttoolbar3755811011__toolbar{border-top:1px solid rgba(51,51,51,.1);z-index:2;margin-right:auto;padding-left:6px;margin-left:auto;position:relative;height:40px;display:flex;align-items:center;justify-content:flex-start;box-sizing:border-box}.richcontenttoolbar3755811011__toolbarButton{line-height:40px;background:0 0;border:0;cursor:pointer;display:flex;align-items:center;justify-content:center;margin:0 5px 0 0}.richcontenttoolbar3755811011__toolbarButton:disabled{color:graytext}.richcontenttoolbar3755811011__separator{width:1px;height:20px;margin:0 8px 0 3px;background:rgba(51,51,51,.1)}.richcontenttoolbar3755811011__toolbar label{padding:0 8px}.richcontentviewer333893354__root{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;width:100%;min-height:36px}.richcontentviewer333893354__root.richcontentviewer333893354--isFullScreen{padding:12px 24px}.richcontentviewer333893354__root:not(.richcontentviewer333893354--isFullScreen){padding:6px 24px 6px 12px}.richcontentviewer333893354__root ToggleButton{margin:0;padding:0;border:0;position:absolute;top:2px!important;right:2px;width:30px;height:30px}.richcontentviewer333893354__viewer{height:calc(100% - 36px);width:100%}.richcontentviewer333893354__modalViewer{min-width:592px;overflow:auto}.richtexteditor2583474094__root{width:100%;box-sizing:border-box;outline:0;overflow:hidden;border-radius:var(--wds-input-border-radius-default-medium, var(--wsr-border-radius-06, 6px))}.richtexteditor2583474094__root.richtexteditor2583474094---border-4-none{border:0}.richtexteditor2583474094__root.richtexteditor2583474094---border-8-standard{border:1px solid var(--wds-input-border-color, var(--wsr-color-B40, #D6E6FE))}.richtexteditor2583474094__root.richtexteditor2583474094---border-8-standard:focus,.richtexteditor2583474094__root.richtexteditor2583474094---border-8-standard:focus-within{border:1px solid var(--wds-input-border-color-focus, var(--wsr-color-B10, #116DFF));box-shadow:var(--wds-input-shadow-focus-standard, 0 0 0 3px var(--wsr-color-F00, #A6D0FF))}.richtexteditor2583474094__root.richtexteditor2583474094---border-8-standard.richtexteditor2583474094---status-5-error{border:1px solid var(--wds-color-border-destructive-secondary-active, var(--wsr-color-R10, #E62214))}.richtexteditor2583474094__root.richtexteditor2583474094---border-8-standard.richtexteditor2583474094---status-5-error:focus,.richtexteditor2583474094__root.richtexteditor2583474094---border-8-standard.richtexteditor2583474094---status-5-error:focus-within{border:1px solid var(--wds-color-border-destructive-secondary-active, var(--wsr-color-R10, #E62214));box-shadow:var(--wds-input-shadow-focus-destructive, 0 0 0 3px var(--wsr-color-R40, #FBD0CD))}.richtexteditor2583474094__root.richtexteditor2583474094---border-8-standard.richtexteditor2583474094---status-7-warning{border:1px solid var(--wds-color-border-warning-secondary-active, var(--wsr-color-Y10, #FFB700))}.richtexteditor2583474094__root.richtexteditor2583474094---border-8-standard.richtexteditor2583474094---status-7-warning:focus,.richtexteditor2583474094__root.richtexteditor2583474094---border-8-standard.richtexteditor2583474094---status-7-warning:focus-within{border:1px solid var(--wds-color-border-warning-secondary-active, var(--wsr-color-Y10, #FFB700));box-shadow:var(--wds-input-shadow-focus-warning, 0 0 0 3px var(--wsr-color-Y40, #FFE2A5))}.richtexteditor2583474094__nativeInput{position:absolute;opacity:0;padding:0;margin:0;border:0;width:0;height:0}.richtexteditor2583474094__editor{height:auto;line-height:auto;display:flex;width:100%;height:100%;min-height:234px;overflow:hidden;box-sizing:border-box;flex-direction:row;border-radius:var(--wds-input-border-radius-default-medium, var(--wsr-border-radius-06, 6px))}.richtexteditor2583474094__editor.richtexteditor2583474094--isFullScreen{max-width:782px;min-width:582px;background:var(--wds-color-black-700)}.richtexteditor2583474094__editor:not(.richtexteditor2583474094--isFullScreen){max-height:80vh}.richtexteditor2583474094__editor>div{flex:1;max-width:100%}.toolbar332331519__root{padding:12px 18px;display:flex;border-bottom:1px solid var(--wds-color-blue-400, var(--wsr-color-B40, #d6dcff));background:var(--wds-color-white, var(--wsr-color-D80, #ffffff));align-items:center}.toolbar332331519__item{display:flex;margin-right:12px}.toolbar332331519__item svg,.toolbar332331519__item svg path,.toolbar332331519__item svg text{color:inherit;fill:currentColor}.toolbar332331519__separator{display:inline-flex;margin-right:12px;border-left:1px solid #ddd;align-self:stretch}.toolbar332331519__clearFormatting{margin-left:auto}.toolbar332331519__fullScreen{margin-right:0}.toolbar332331519__dropdownItemContent{height:36px;width:100%;display:flex;gap:12px;justify-content:space-between;align-items:center}.toolbar332331519__dropdownItemContent.toolbar332331519--selected .toolbar332331519__dropdownItemTitle,.toolbar332331519__dropdownItemContent.toolbar332331519--selected .toolbar332331519__dropdownItemSubtitle{color:var(--wds-color-white)!important}.toolbar332331519__dropdownItemSubtitle{color:var(--wds-color-black-400)!important;padding-right:12px;flex-shrink:0}.toolbar332331519__dropdownHeaderOne{font-weight:var(--wds-font-weight-bold)!important;font-size:36px!important;line-height:1.2!important;font-family:var(--wds-font-family-default, var(--wsr-font-family, Madefor))!important}.toolbar332331519__dropdownHeaderTwo{font-weight:var(--wds-font-weight-bold)!important;font-size:32px!important;line-height:1.2!important;font-family:var(--wds-font-family-default, Madefor, Helvetica Neue, Helvetica, Arial, sans-serif)!important}.toolbar332331519__dropdownHeaderThree{font-weight:var(--wds-font-weight-medium)!important;font-size:28px!important;line-height:1.2!important;font-family:var(--wds-font-family-default, Madefor, Helvetica Neue, Helvetica, Arial, sans-serif)!important}.toolbar332331519__dropdownHeaderFour{font-weight:var(--wds-font-weight-bold)!important;font-size:24px!important;line-height:1.2!important;font-family:var(--wds-font-family-default, Madefor, Helvetica Neue, Helvetica, Arial, sans-serif)!important}.toolbar332331519__dropdownHeaderFive{font-weight:var(--wds-font-weight-bold)!important;font-size:22px!important;line-height:1.2!important;font-family:var(--wds-font-family-default, Madefor, Helvetica Neue, Helvetica, Arial, sans-serif)!important}.toolbar332331519__dropdownHeaderSix{font-weight:var(--wds-font-weight-medium)!important;font-size:20px!important;line-height:1.2!important;font-family:var(--wds-font-family-default, Madefor, Helvetica Neue, Helvetica, Arial, sans-serif)!important}.toolbar332331519__dropdownParagraphOne{font-weight:var(--wds-font-weight-medium)!important;font-size:18px!important;line-height:1.33!important;font-family:var(--wds-font-family-default, Madefor, Helvetica Neue, Helvetica, Arial, sans-serif)!important}.toolbar332331519__dropdownNormalText{font-weight:var(--wds-font-weight-medium)!important;font-size:var(--wds-font-size-500)!important;line-height:var(--wds-font-line-height-300)!important;font-family:var(--wds-font-family-default, Madefor, Helvetica Neue, Helvetica, Arial, sans-serif)!important}.toolbar332331519__dropdownParagraphThree{font-weight:var(--wds-font-weight-medium)!important;font-size:14px!important;line-height:1.29!important;font-family:var(--wds-font-family-default, Madefor, Helvetica Neue, Helvetica, Arial, sans-serif)!important}.textview2693583994__textView::after{content:"";display:block}.richeditor3246204544__root{display:flex;flex-direction:column;font-weight:var(--wds-font-weight-medium, 500);font-size:var(--wds-font-size-500);line-height:var(--wds-font-line-height-300);font-family:var(--wds-font-family-default, var(--wsr-font-family, Madefor))}.richeditor3246204544__editor{box-sizing:border-box;overflow:auto;display:flex;flex-direction:column;flex:1;cursor:text;color:var(--wds-color-black-100, var(--wsr-color-D10, #131720));background:var(--wds-color-black-700, var(--wsr-color-D70, #edeef2))}.richeditor3246204544__editor .DraftEditor-root{width:100%;height:100%}.richeditor3246204544__editor .DraftEditor-root [data-contents]{overflow:auto}.richeditor3246204544__editor .DraftEditor-editorContainer{display:flex;min-height:100%;background:#fff}.richeditor3246204544__editor .public-DraftEditor-content{padding:12px 24px 24px;min-height:100%;width:100%;box-sizing:border-box}.richeditor3246204544__editor .public-DraftEditor-content ol,.richeditor3246204544__editor .public-DraftEditor-content ul{display:flex;flex-direction:column;padding:0}.richeditor3246204544__editor .public-DraftEditor-content a,.richeditor3246204544__editor .public-DraftEditor-content a:visited{color:inherit;text-decoration:none}.richeditor3246204544__header-one:not(li),.richeditor3246204544__header-two:not(li),.richeditor3246204544__header-three:not(li),.richeditor3246204544__header-four:not(li),.richeditor3246204544__header-five:not(li),.richeditor3246204544__header-six:not(li){margin-block:0;margin:0}.richeditor3246204544__header-one,.richeditor3246204544__editor li.richeditor3246204544__header-one .public-DraftStyleDefault-block{font:var(--rt-h1-fontStyle, normal) var(--rt-h1-fontWeight, var(--wds-font-weight-bold, 700)) var(--rt-h1-fontSize, 72px)/var(--rt-h1-lineHeight, 1.33) var(--rt-h1-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor3246204544__header-two,.richeditor3246204544__editor li.richeditor3246204544__header-two .public-DraftStyleDefault-block{font:var(--rt-h2-fontStyle, normal) var(--rt-h2-fontWeight, var(--wds-font-weight-bold, 700)) var(--rt-h2-fontSize, 42px)/var(--rt-h2-lineHeight, 1.2) var(--rt-h2-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor3246204544__header-three,.richeditor3246204544__editor li.richeditor3246204544__header-three .public-DraftStyleDefault-block{font:var(--rt-h3-fontStyle, normal) var(--rt-h3-fontWeight, var(--wds-font-weight-medium, 500)) var(--rt-h3-fontSize, 38px)/var(--rt-h3-lineHeight, 1.2) var(--rt-h3-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor3246204544__header-four,.richeditor3246204544__editor li.richeditor3246204544__header-four .public-DraftStyleDefault-block{font:var(--rt-h4-fontStyle, normal) var(--rt-h4-fontWeight, var(--wds-font-weight-bold, 700)) var(--rt-h4-fontSize, 34px)/var(--rt-h4-lineHeight, 1.2) var(--rt-h4-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor3246204544__header-five,.richeditor3246204544__editor li.richeditor3246204544__header-five .public-DraftStyleDefault-block{font:var(--rt-h5-fontStyle, normal) var(--rt-h5-fontWeight, var(--wds-font-weight-bold, 700)) var(--rt-h5-fontSize, 28px)/var(--rt-h5-lineHeight, 1.2) var(--rt-h5-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor3246204544__header-six,.richeditor3246204544__editor li.richeditor3246204544__header-six .public-DraftStyleDefault-block{font:var(--rt-h6-fontStyle, normal) var(--rt-h6-fontWeight, var(--wds-font-weight-medium, 500)) var(--rt-h6-fontSize, 22px)/var(--rt-h6-lineHeight, 1.2) var(--rt-h6-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor3246204544__paragraph-one,.richeditor3246204544__editor li.richeditor3246204544__paragraph-one .public-DraftStyleDefault-block{font:var(--rt-p1-fontStyle, normal) var(--rt-p1-fontWeight, var(--wds-font-weight-medium, 500)) var(--rt-p1-fontSize, 18px)/var(--rt-p1-lineHeight, 24px) var(--rt-p1-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor3246204544__unstyled,.richeditor3246204544__editor li.richeditor3246204544__unstyled .public-DraftStyleDefault-block{font:var(--rt-unstyled-fontStyle, normal) var(--rt-unstyled-fontWeight, var(--wds-font-weight-medium, 500)) var(--rt-unstyled-fontSize, 16px)/var(--rt-unstyled-lineHeight, 24px) var(--rt-unstyled-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor3246204544__paragraph-three,.richeditor3246204544__editor li.richeditor3246204544__paragraph-three .public-DraftStyleDefault-block{font:var(--rt-p3-fontStyle, normal) var(--rt-p3-fontWeight, var(--wds-font-weight-medium, 500)) var(--rt-p3-fontSize, 14px)/var(--rt-p3-lineHeight, 18px) var(--rt-p3-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor3246204544__editor li.richeditor3246204544__header-one:first-child~li{font:var(--rt-h1-fontStyle, normal) var(--rt-h1-fontWeight, var(--wds-font-weight-bold, 700)) var(--rt-h1-fontSize, 72px)/var(--rt-h1-lineHeight, 1.33) var(--rt-h1-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor3246204544__editor li.richeditor3246204544__header-one:first-child~li::marker{line-height:var(--rt-h1-fontSize, 72px)}.richeditor3246204544__editor li.richeditor3246204544__header-two:first-child~li{font:var(--rt-h2-fontStyle, normal) var(--rt-h2-fontWeight, var(--wds-font-weight-bold, 700)) var(--rt-h2-fontSize, 42px)/var(--rt-h2-lineHeight, 1.2) var(--rt-h2-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor3246204544__editor li.richeditor3246204544__header-two:first-child~li::marker{line-height:var(--rt-h2-fontSize, 42px)}.richeditor3246204544__editor li.richeditor3246204544__header-three:first-child~li{font:var(--rt-h3-fontStyle, normal) var(--rt-h3-fontWeight, var(--wds-font-weight-medium, 500)) var(--rt-h3-fontSize, 38px)/var(--rt-h3-lineHeight, 1.2) var(--rt-h3-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor3246204544__editor li.richeditor3246204544__header-three:first-child~li::marker{line-height:var(--rt-h3-fontSize, 38px)}.richeditor3246204544__editor li.richeditor3246204544__header-four:first-child~li{font:var(--rt-h4-fontStyle, normal) var(--rt-h4-fontWeight, var(--wds-font-weight-bold, 700)) var(--rt-h4-fontSize, 34px)/var(--rt-h4-lineHeight, 1.2) var(--rt-h4-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor3246204544__editor li.richeditor3246204544__header-four:first-child~li::marker{line-height:var(--rt-h4-fontSize, 34px)}.richeditor3246204544__editor li.richeditor3246204544__header-five:first-child~li{font:var(--rt-h5-fontStyle, normal) var(--rt-h5-fontWeight, var(--wds-font-weight-bold, 700)) var(--rt-h5-fontSize, 28px)/var(--rt-h5-lineHeight, 1.2) var(--rt-h5-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor3246204544__editor li.richeditor3246204544__header-five:first-child~li::marker{line-height:var(--rt-h5-fontSize, 28px)}.richeditor3246204544__editor li.richeditor3246204544__header-six:first-child~li{font:var(--rt-h6-fontStyle, normal) var(--rt-h6-fontWeight, var(--wds-font-weight-medium, 500)) var(--rt-h6-fontSize, 22px)/var(--rt-h6-lineHeight, 1.2) var(--rt-h6-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor3246204544__editor li.richeditor3246204544__header-six:first-child~li::marker{line-height:var(--rt-h6-fontSize, 22px)}.richeditor3246204544__editor li.richeditor3246204544__paragraph-one:first-child~li{font:var(--rt-p1-fontStyle, normal) var(--rt-p1-fontWeight, var(--wds-font-weight-medium, 500)) var(--rt-p1-fontSize, 18px)/var(--rt-p1-lineHeight, 24px) var(--rt-p1-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor3246204544__editor li.richeditor3246204544__unstyled:first-child~li{font:var(--rt-unstyled-fontStyle, normal) var(--rt-unstyled-fontWeight, var(--wds-font-weight-medium, 500)) var(--rt-unstyled-fontSize, 16px)/var(--rt-unstyled-lineHeight, 24px) var(--rt-unstyled-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor3246204544__editor li.richeditor3246204544__paragraph-three:first-child~li{font:var(--rt-p3-fontStyle, normal) var(--rt-p3-fontWeight, var(--wds-font-weight-medium, 500)) var(--rt-p3-fontSize, 14px)/var(--rt-p3-lineHeight, 18px) var(--rt-p3-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.public-DraftStyleDefault-ul .public-DraftStyleDefault-depth0{margin-inline-start:2ch}.public-DraftStyleDefault-ul .public-DraftStyleDefault-depth1{margin-inline-start:4ch}.public-DraftStyleDefault-ul .public-DraftStyleDefault-depth2{margin-inline-start:6ch}.public-DraftStyleDefault-ul .public-DraftStyleDefault-depth3{margin-inline-start:8ch}.public-DraftStyleDefault-ul .public-DraftStyleDefault-depth4{margin-inline-start:10ch}.public-DraftStyleDefault-ol li.public-DraftStyleDefault-depth0:first-child{margin-inline-start:2ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth0{margin-inline-start:2ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth0:nth-child(n+10){margin-inline-start:3ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth0:nth-child(n+100){margin-inline-start:4ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth0:nth-child(n+1000){margin-inline-start:5ch}.public-DraftStyleDefault-ol li.public-DraftStyleDefault-depth1:first-child{margin-inline-start:4ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth1{margin-inline-start:4ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth1:nth-child(n+10){margin-inline-start:5ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth1:nth-child(n+100){margin-inline-start:6ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth1:nth-child(n+1000){margin-inline-start:7ch}.public-DraftStyleDefault-ol li.public-DraftStyleDefault-depth2:first-child{margin-inline-start:6ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth2{margin-inline-start:6ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth2:nth-child(n+10){margin-inline-start:7ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth2:nth-child(n+100){margin-inline-start:8ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth2:nth-child(n+1000){margin-inline-start:9ch}.public-DraftStyleDefault-ol li.public-DraftStyleDefault-depth3:first-child{margin-inline-start:8ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth3{margin-inline-start:8ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth3:nth-child(n+10){margin-inline-start:9ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth3:nth-child(n+100){margin-inline-start:10ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth3:nth-child(n+1000){margin-inline-start:11ch}.public-DraftStyleDefault-ol li.public-DraftStyleDefault-depth4:first-child{margin-inline-start:10ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth4{margin-inline-start:10ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth4:nth-child(n+10){margin-inline-start:11ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth4:nth-child(n+100){margin-inline-start:12ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth4:nth-child(n+1000){margin-inline-start:13ch}.richeditor3246204544__align-left{text-align:left;align-self:flex-start}.richeditor3246204544__align-right{text-align:right;align-self:flex-end}.richeditor3246204544__align-center{text-align:center;align-self:center}.richeditor3246204544__align-justify{text-align:justify;align-self:stretch}.richeditor3246204544__withMargin{display:inline-block}.richeditor3246204544__dir-rtl,.richeditor3246204544__editor .public-DraftStyleDefault-rtl{direction:rtl}.richeditor3246204544__editor .public-DraftStyleDefault-listRTL{direction:rtl;text-align:right;max-width:100%}
1
+ .addressinput135427117__tableAddressInput{height:36px!important;margin-left:-1px;display:flex!important;align-items:center;width:100%}.addressinput135427117__tableAddressInput>div{padding:0!important;width:100%}.addressinput135427117__tableAddressInput:focus-within{margin-left:2px}.actionsmenu2358938485__action{margin-left:calc(var(--wds-space-100, 6px)*-1)}.formaudiofield1123005832__addItem{height:120px!important;box-sizing:border-box}.formaudiofield1123005832__addItem:focus-within{box-shadow:var(--wds-input-shadow-focus-standard, 0 0 0 3px var(--wds-color-blue-300, var(--wsr-color-B30)));border-radius:var(--wds-border-radius-400, 8px)}.formaudiofield1123005832__addItem.formaudiofield1123005832--disabled{pointer-events:auto!important}.formaudiofield1123005832__addItem.formaudiofield1123005832--error{border:1px solid var(--wds-color-red-100, var(--wsr-color-R10))!important}.formaudiofield1123005832__mediaTitle{line-height:18px!important}.audioplayer905439661__root{width:fit-content;z-index:1000;position:fixed!important;bottom:42px;right:48px;box-sizing:border-box;display:flex;align-items:center;justify-content:center}.cellcolorview614177914__hashPrefix{color:var(--wsr-color-D40, #868aa5);font-size:14px;font-weight:300;line-height:1}.colorview434636090__view{width:100%}.colorview434636090__fillPreview{flex-shrink:0}.colorview434636090__view .colorview434636090__fillPreview{width:18px;height:18px;min-width:18px!important;min-height:18px!important}.deletedialog3489034795__layout{max-width:510px!important}.formdocumentfield1976509087__viewWrapper{border-radius:var(--wds-border-radius-300, calc(2px * 3));border:1px solid var(--wds-color-blue-300, var(--wsr-color-B30))}.formdocumentfield1976509087__viewWrapper:hover{background:var(--wds-color-blue-500, var(--wsr-color-B50));cursor:pointer}.formdocumentfield1976509087__textWidth{max-width:calc(100% - 196px)}.formdocumentfield1976509087__documentLoader{padding-top:21px;padding-bottom:21px}.formdocumentfield1976509087__addDocument{padding-top:17px!important;padding-bottom:17px!important}.formdocumentfield1976509087__addDocument.formdocumentfield1976509087--error{border:1px solid var(--wds-color-red-100, var(--wsr-color-R10))!important}.formdocumentfield1976509087__addItemWrapper:focus-within{box-shadow:var(--wds-input-shadow-focus-standard, 0 0 0 3px var(--wds-color-blue-300, var(--wsr-color-B30)));border-radius:var(--wds-border-radius-400, calc(2px * 4))}.exclamation3877731892__exclamation{display:flex;justify-content:center;align-items:center;box-sizing:border-box;border-radius:3px;cursor:pointer}.exclamation3877731892__exclamation.exclamation3877731892---type-7-warning:not(.exclamation3877731892--customSize),.exclamation3877731892__exclamation.exclamation3877731892---type-5-error:not(.exclamation3877731892--customSize){width:24px;height:24px}.exclamation3877731892__exclamation.exclamation3877731892---type-7-warning{color:var(--wds-color-fill-warning-primary)}.exclamation3877731892__exclamation.exclamation3877731892---type-5-error{color:var(--wds-color-fill-destructive-primary)}.exclamation3877731892__actions{display:flex;flex-direction:column}.exclamation3877731892__action{white-space:normal!important;height:auto!important;text-align:left;gap:6px}.exclamation3877731892__action+.exclamation3877731892__action{margin-top:6px}.exclamation3877731892__action.exclamation3877731892--accented{color:var(--wds-color-blue-100)}.exclamation3877731892__action.exclamation3877731892--accented:hover{color:var(--wds-color-blue-200)}.highlightedtext336599750__root.highlightedtext336599750--highlightedBackground{animation:highlightedtext336599750__highlighted 150ms ease-out 1 forwards}.highlightedtext336599750__substring.highlightedtext336599750--isHighlighted{animation:highlightedtext336599750__highlighted-match 150ms ease-out 50ms 1 forwards}@keyframes highlightedtext336599750__highlighted{0%{background-color:transparent}to{background-color:var(--wds-color-yellow-400, var(--wsr-color-Y40))}}@keyframes highlightedtext336599750__highlighted-match{0%{background-color:transparent}to{background-color:var(--wds-color-yellow-200, var(--wsr-color-Y20))}}.thumbnailreplaceoverlay4087281964__root{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.4);border-radius:3px}.thumbnailreplaceoverlay4087281964__icon{color:#fff;width:18px;height:18px}.cellmediaeditshell2326789165__root{width:100%;height:100%}.pasteurlbutton1933392353__root{margin-top:6px}.pasteurlbutton1933392353__iconButtonTooltip{height:max-content}.pasteurlbutton1933392353__iconButton{width:24px;height:24px}.formmediagalleryfield3998473428__container{display:flex;min-height:128px;max-height:259px}.formmediagalleryfield3998473428__viewBox{display:flex;height:100%;width:100%;flex-wrap:wrap}.formmediagalleryfield3998473428__addItemWrapper{height:128px;width:100%;box-sizing:border-box}.formmediagalleryfield3998473428__addItem{box-sizing:border-box}.formmediagalleryfield3998473428__overlay{width:initial!important;min-width:382px!important}.formmediagalleryfield3998473428__image.formmediagalleryfield3998473428--withMarginRight{margin-right:3px}.formmediagalleryfield3998473428__image.formmediagalleryfield3998473428--withMarginTop{margin-top:3px}.formmediagalleryfield3998473428__previewImage{max-height:calc(100% - 12px)!important}.formmediagalleryfield3998473428__previewVideo{border-radius:8px;max-width:100%;max-height:calc(100% - 12px)!important}.mediaimage3148041009__root{display:flex;align-items:center;flex-shrink:0;position:relative;box-sizing:border-box}.mediaimage3148041009__root.mediaimage3148041009--error{--mediaimage3148041009-from:calc(50% - 0.5px);--mediaimage3148041009-to:calc(50% + 0.5px);background-image:linear-gradient(to bottom right,transparent var(--mediaimage3148041009-from),var(--wds-color-red-200, var(--wsr-color-R20)) var(--mediaimage3148041009-from),var(--wds-color-red-200, var(--wsr-color-R20)) var(--mediaimage3148041009-to),transparent var(--mediaimage3148041009-to))}.mediaimage3148041009__root.mediaimage3148041009--error>*{opacity:0}.overlay2129544777__iconOverlay{position:absolute;color:var(--wds-color-white, var(--wsr-color-D80, #FFFFFF));background-color:transparent;filter:drop-shadow(0 1px 1px rgba(22,45,61,.6));-webkit-filter:drop-shadow(0 1px 1px rgba(22,45,61,.6))}.overlay2129544777__iconOverlay.overlay2129544777---size-5-small{width:20px;height:20px}.overlay2129544777__iconOverlay.overlay2129544777---size-6-medium{width:24px;height:24px}.overlay2129544777__iconOverlay.overlay2129544777---size-5-large{width:28px;height:28px}.overlay2129544777__iconOverlay.overlay2129544777---placement-7-topLeft{top:2px;left:2px}.overlay2129544777__iconOverlay.overlay2129544777---placement-10-bottomLeft{bottom:2px;left:2px}.medialoader598775488__loader{border-radius:6px}.medialoader598775488__loader.medialoader598775488--isDashed{border:dashed 1px var(--wds-color-blue-300, var(--wsr-color-B30))}.medialoader598775488__loader.medialoader598775488--isSolid{border:solid 1px var(--wds-color-blue-300, var(--wsr-color-B30))}.mediatag1682102498__root{box-sizing:border-box;padding:3px 6px 3px 3px;border-radius:3px;max-height:24px;min-width:54px;max-width:100%;background-color:var(--wds-color-blue-400, var(--wsr-color-B40))}.cellmultidocumentedit1914587532__chipTrigger{display:flex;align-items:center;min-width:0;max-width:100%;margin:0;padding:0;border:0;background:0 0;font:inherit;color:inherit;text-align:inherit;cursor:pointer}.formmultidocument3094149956__viewRoot{border-radius:var(--wds-border-radius-300, calc(2px * 3));border:1px solid var(--wds-color-blue-300, var(--wsr-color-B30))}.formmultidocument3094149956__singleViewWrapper{border-radius:0;border-bottom:1px solid var(--wds-color-neutral-600, var(--wsr-color-D60));background-color:transparent!important}.formmultidocument3094149956__viewRoot>div:first-child .formmultidocument3094149956__singleViewWrapper{border-top-left-radius:var(--wds-border-radius-300, calc(2px * 3));border-top-right-radius:var(--wds-border-radius-300, calc(2px * 3))}.formmultidocument3094149956__singleViewWrapper:hover{background-color:var(--wds-color-blue-500, var(--wsr-color-B50))!important}.formmultidocument3094149956__singleViewWrapper:focus-visible{border-bottom:1px solid transparent;position:relative;z-index:1}.formmultidocument3094149956__addDocumentButton{border-bottom-left-radius:var(--wds-border-radius-300, calc(2px * 3));border-bottom-right-radius:var(--wds-border-radius-300, calc(2px * 3))}.formmultidocument3094149956__addDocumentButton:focus-within{border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:var(--wds-border-radius-300, calc(2px * 3));border-bottom-right-radius:var(--wds-border-radius-300, calc(2px * 3))}.cellmultireferenceinput3144614699__root{width:100%;box-sizing:border-box;--wds-input-border-color:transparent;--wds-input-border-color-hover:transparent;--wds-input-border-color-focus:transparent;--wds-input-background-fill-default:transparent;--wds-input-background-fill-hover:transparent;--wds-input-shadow-focus-standard:0 0 0 0 transparent}.cellreferenceinput3062114626__root{width:100%;height:100%;display:flex;align-items:center}.cellreferenceinput3062114626__autocomplete{width:100%}.richcontentdefaultvalueinput2404149612__richContentEditorContainer .richcontentdefaultvalueinput2404149612__editor{max-height:calc(40vh - var(--topToolbarHeight) - var(--bottomToolbarHeight))}.richcontentforminput1162537413__root{outline:0;box-sizing:border-box;border:1px solid var(--wds-input-border-color, var(--wsr-color-B40, #D6E6FE));border-radius:var(--wds-input-border-radius-default-medium, var(--wsr-border-radius-06, 6px))}.richcontentforminput1162537413__root:focus-within{border:1px solid var(--wds-input-border-color-focus, var(--wsr-color-B10, #116DFF));box-shadow:var(--wds-input-shadow-focus-standard, 0 0 0 3px var(--wsr-color-F00, #A6D0FF))}.richcontentforminput1162537413__root .richcontentforminput1162537413__editor{overflow-y:auto;max-height:calc(80vh - var(--topToolbarHeight) - var(--bottomToolbarHeight))}.richcontentformreadonlyinput1239757923__root{outline:0;box-sizing:border-box;border:1px solid var(--wds-color-black-600);border-radius:var(--wds-border-radius-300)}.richcontentformreadonlyinput1239757923__root:focus-within{border:1px solid var(--wds-color-blue-100);box-shadow:var(--wds-input-shadow-focus-standard)}.fullscreenmodal3071761638__modalContent{display:flex;flex-direction:column;position:relative;height:100%;width:782px;background-color:var(--wds-color-white, var(--wsr-color-D80, #ffffff));border-radius:var(--wds-border-radius-300, var(--wsr-border-radius-06, 6px));margin-top:24px}.publishloader2836839240__publishLoader{position:absolute;top:0;left:0;width:100%;height:100%;background:var(--wds-color-white);z-index:5000;border-radius:inherit}.togglefullscreenbutton2223387734__root{z-index:5;box-sizing:border-box;position:absolute;right:0;top:calc(50% - 16px)!important;padding-right:3px}.togglefullscreenbutton2223387734__root button{border-radius:6px!important}.richcontenteditor2863737128__root{position:relative;font-family:var(--wds-font-family-default, Madefor, Helvetica Neue, Helvetica, Arial, sans-serif)}.richcontenteditor2863737128__root,.richcontenteditor2863737128__toolbarContainer,.richcontenteditor2863737128__footerToolbarContainer{width:100%;box-sizing:border-box}.richcontenteditor2863737128__toolbarContainer div{box-sizing:border-box}.richcontenteditor2863737128__toolbarAndFullScreenButtonWrapper{display:flex;position:relative}.richcontenteditor2863737128__editor{box-sizing:border-box;padding:36px 24px 36px 55px}.richcontenteditor2863737128__modalEditor{display:flex;flex-direction:column;flex:1;height:100%}.richcontenteditor2863737128__modalEditor .richcontenteditor2863737128__editor{overflow-y:auto;flex:1;min-width:592px;box-sizing:border-box}.richcontenteditor2863737128__modalEditor .richcontenteditor2863737128__footerToolbarContainer{margin-top:9px}.richcontenteditor2863737128__toolbarContainer button[data-hook~=text-button-headings]>span{display:inline-flex;padding-inline-end:3px!important}.richcontenteditor2863737128__toolbarContainer button[data-hook~=text-button-ai]>span{padding-inline-end:9px!important}.richcontenttoolbar2262554924__toolbar{border-top:1px solid rgba(51,51,51,.1);z-index:2;margin-right:auto;padding-left:6px;margin-left:auto;position:relative;height:40px;display:flex;align-items:center;justify-content:flex-start;box-sizing:border-box}.richcontenttoolbar2262554924__toolbarButton{line-height:40px;background:0 0;border:0;cursor:pointer;display:flex;align-items:center;justify-content:center;margin:0 5px 0 0}.richcontenttoolbar2262554924__toolbarButton:disabled{color:graytext}.richcontenttoolbar2262554924__separator{width:1px;height:20px;margin:0 8px 0 3px;background:rgba(51,51,51,.1)}.richcontenttoolbar2262554924__toolbar label{padding:0 8px}.richcontentviewer3183431663__root{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;width:100%;min-height:36px}.richcontentviewer3183431663__root.richcontentviewer3183431663--isFullScreen{padding:12px 24px}.richcontentviewer3183431663__root:not(.richcontentviewer3183431663--isFullScreen){padding:6px 24px 6px 12px}.richcontentviewer3183431663__root ToggleButton{margin:0;padding:0;border:0;position:absolute;top:2px!important;right:2px;width:30px;height:30px}.richcontentviewer3183431663__viewer{height:calc(100% - 36px);width:100%}.richcontentviewer3183431663__modalViewer{min-width:592px;overflow:auto}.richtexteditor667105446__root{width:100%;box-sizing:border-box;outline:0;overflow:hidden;border-radius:var(--wds-input-border-radius-default-medium, var(--wsr-border-radius-06, 6px))}.richtexteditor667105446__root.richtexteditor667105446---border-4-none{border:0}.richtexteditor667105446__root.richtexteditor667105446---border-8-standard{border:1px solid var(--wds-input-border-color, var(--wsr-color-B40, #D6E6FE))}.richtexteditor667105446__root.richtexteditor667105446---border-8-standard:focus,.richtexteditor667105446__root.richtexteditor667105446---border-8-standard:focus-within{border:1px solid var(--wds-input-border-color-focus, var(--wsr-color-B10, #116DFF));box-shadow:var(--wds-input-shadow-focus-standard, 0 0 0 3px var(--wsr-color-F00, #A6D0FF))}.richtexteditor667105446__root.richtexteditor667105446---border-8-standard.richtexteditor667105446---status-5-error{border:1px solid var(--wds-color-border-destructive-secondary-active, var(--wsr-color-R10, #E62214))}.richtexteditor667105446__root.richtexteditor667105446---border-8-standard.richtexteditor667105446---status-5-error:focus,.richtexteditor667105446__root.richtexteditor667105446---border-8-standard.richtexteditor667105446---status-5-error:focus-within{border:1px solid var(--wds-color-border-destructive-secondary-active, var(--wsr-color-R10, #E62214));box-shadow:var(--wds-input-shadow-focus-destructive, 0 0 0 3px var(--wsr-color-R40, #FBD0CD))}.richtexteditor667105446__root.richtexteditor667105446---border-8-standard.richtexteditor667105446---status-7-warning{border:1px solid var(--wds-color-border-warning-secondary-active, var(--wsr-color-Y10, #FFB700))}.richtexteditor667105446__root.richtexteditor667105446---border-8-standard.richtexteditor667105446---status-7-warning:focus,.richtexteditor667105446__root.richtexteditor667105446---border-8-standard.richtexteditor667105446---status-7-warning:focus-within{border:1px solid var(--wds-color-border-warning-secondary-active, var(--wsr-color-Y10, #FFB700));box-shadow:var(--wds-input-shadow-focus-warning, 0 0 0 3px var(--wsr-color-Y40, #FFE2A5))}.richtexteditor667105446__nativeInput{position:absolute;opacity:0;padding:0;margin:0;border:0;width:0;height:0}.richtexteditor667105446__editor{height:auto;line-height:auto;display:flex;width:100%;height:100%;min-height:234px;overflow:hidden;box-sizing:border-box;flex-direction:row;border-radius:var(--wds-input-border-radius-default-medium, var(--wsr-border-radius-06, 6px))}.richtexteditor667105446__editor.richtexteditor667105446--isFullScreen{max-width:782px;min-width:582px;background:var(--wds-color-black-700)}.richtexteditor667105446__editor:not(.richtexteditor667105446--isFullScreen){max-height:80vh}.richtexteditor667105446__editor>div{flex:1;max-width:100%}.toolbar3247736524__root{padding:12px 18px;display:flex;border-bottom:1px solid var(--wds-color-blue-400, var(--wsr-color-B40, #d6dcff));background:var(--wds-color-white, var(--wsr-color-D80, #ffffff));align-items:center}.toolbar3247736524__item{display:flex;margin-right:12px}.toolbar3247736524__item svg,.toolbar3247736524__item svg path,.toolbar3247736524__item svg text{color:inherit;fill:currentColor}.toolbar3247736524__separator{display:inline-flex;margin-right:12px;border-left:1px solid #ddd;align-self:stretch}.toolbar3247736524__clearFormatting{margin-left:auto}.toolbar3247736524__fullScreen{margin-right:0}.toolbar3247736524__dropdownItemContent{height:36px;width:100%;display:flex;gap:12px;justify-content:space-between;align-items:center}.toolbar3247736524__dropdownItemContent.toolbar3247736524--selected .toolbar3247736524__dropdownItemTitle,.toolbar3247736524__dropdownItemContent.toolbar3247736524--selected .toolbar3247736524__dropdownItemSubtitle{color:var(--wds-color-white)!important}.toolbar3247736524__dropdownItemSubtitle{color:var(--wds-color-black-400)!important;padding-right:12px;flex-shrink:0}.toolbar3247736524__dropdownHeaderOne{font-weight:var(--wds-font-weight-bold)!important;font-size:36px!important;line-height:1.2!important;font-family:var(--wds-font-family-default, var(--wsr-font-family, Madefor))!important}.toolbar3247736524__dropdownHeaderTwo{font-weight:var(--wds-font-weight-bold)!important;font-size:32px!important;line-height:1.2!important;font-family:var(--wds-font-family-default, Madefor, Helvetica Neue, Helvetica, Arial, sans-serif)!important}.toolbar3247736524__dropdownHeaderThree{font-weight:var(--wds-font-weight-medium)!important;font-size:28px!important;line-height:1.2!important;font-family:var(--wds-font-family-default, Madefor, Helvetica Neue, Helvetica, Arial, sans-serif)!important}.toolbar3247736524__dropdownHeaderFour{font-weight:var(--wds-font-weight-bold)!important;font-size:24px!important;line-height:1.2!important;font-family:var(--wds-font-family-default, Madefor, Helvetica Neue, Helvetica, Arial, sans-serif)!important}.toolbar3247736524__dropdownHeaderFive{font-weight:var(--wds-font-weight-bold)!important;font-size:22px!important;line-height:1.2!important;font-family:var(--wds-font-family-default, Madefor, Helvetica Neue, Helvetica, Arial, sans-serif)!important}.toolbar3247736524__dropdownHeaderSix{font-weight:var(--wds-font-weight-medium)!important;font-size:20px!important;line-height:1.2!important;font-family:var(--wds-font-family-default, Madefor, Helvetica Neue, Helvetica, Arial, sans-serif)!important}.toolbar3247736524__dropdownParagraphOne{font-weight:var(--wds-font-weight-medium)!important;font-size:18px!important;line-height:1.33!important;font-family:var(--wds-font-family-default, Madefor, Helvetica Neue, Helvetica, Arial, sans-serif)!important}.toolbar3247736524__dropdownNormalText{font-weight:var(--wds-font-weight-medium)!important;font-size:var(--wds-font-size-500)!important;line-height:var(--wds-font-line-height-300)!important;font-family:var(--wds-font-family-default, Madefor, Helvetica Neue, Helvetica, Arial, sans-serif)!important}.toolbar3247736524__dropdownParagraphThree{font-weight:var(--wds-font-weight-medium)!important;font-size:14px!important;line-height:1.29!important;font-family:var(--wds-font-family-default, Madefor, Helvetica Neue, Helvetica, Arial, sans-serif)!important}.textview3095721063__textView::after{content:"";display:block}.richeditor1940630501__root{display:flex;flex-direction:column;font-weight:var(--wds-font-weight-medium, 500);font-size:var(--wds-font-size-500);line-height:var(--wds-font-line-height-300);font-family:var(--wds-font-family-default, var(--wsr-font-family, Madefor))}.richeditor1940630501__editor{box-sizing:border-box;overflow:auto;display:flex;flex-direction:column;flex:1;cursor:text;color:var(--wds-color-black-100, var(--wsr-color-D10, #131720));background:var(--wds-color-black-700, var(--wsr-color-D70, #edeef2))}.richeditor1940630501__editor .DraftEditor-root{width:100%;height:100%}.richeditor1940630501__editor .DraftEditor-root [data-contents]{overflow:auto}.richeditor1940630501__editor .DraftEditor-editorContainer{display:flex;min-height:100%;background:#fff}.richeditor1940630501__editor .public-DraftEditor-content{padding:12px 24px 24px;min-height:100%;width:100%;box-sizing:border-box}.richeditor1940630501__editor .public-DraftEditor-content ol,.richeditor1940630501__editor .public-DraftEditor-content ul{display:flex;flex-direction:column;padding:0}.richeditor1940630501__editor .public-DraftEditor-content a,.richeditor1940630501__editor .public-DraftEditor-content a:visited{color:inherit;text-decoration:none}.richeditor1940630501__header-one:not(li),.richeditor1940630501__header-two:not(li),.richeditor1940630501__header-three:not(li),.richeditor1940630501__header-four:not(li),.richeditor1940630501__header-five:not(li),.richeditor1940630501__header-six:not(li){margin-block:0;margin:0}.richeditor1940630501__header-one,.richeditor1940630501__editor li.richeditor1940630501__header-one .public-DraftStyleDefault-block{font:var(--rt-h1-fontStyle, normal) var(--rt-h1-fontWeight, var(--wds-font-weight-bold, 700)) var(--rt-h1-fontSize, 72px)/var(--rt-h1-lineHeight, 1.33) var(--rt-h1-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor1940630501__header-two,.richeditor1940630501__editor li.richeditor1940630501__header-two .public-DraftStyleDefault-block{font:var(--rt-h2-fontStyle, normal) var(--rt-h2-fontWeight, var(--wds-font-weight-bold, 700)) var(--rt-h2-fontSize, 42px)/var(--rt-h2-lineHeight, 1.2) var(--rt-h2-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor1940630501__header-three,.richeditor1940630501__editor li.richeditor1940630501__header-three .public-DraftStyleDefault-block{font:var(--rt-h3-fontStyle, normal) var(--rt-h3-fontWeight, var(--wds-font-weight-medium, 500)) var(--rt-h3-fontSize, 38px)/var(--rt-h3-lineHeight, 1.2) var(--rt-h3-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor1940630501__header-four,.richeditor1940630501__editor li.richeditor1940630501__header-four .public-DraftStyleDefault-block{font:var(--rt-h4-fontStyle, normal) var(--rt-h4-fontWeight, var(--wds-font-weight-bold, 700)) var(--rt-h4-fontSize, 34px)/var(--rt-h4-lineHeight, 1.2) var(--rt-h4-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor1940630501__header-five,.richeditor1940630501__editor li.richeditor1940630501__header-five .public-DraftStyleDefault-block{font:var(--rt-h5-fontStyle, normal) var(--rt-h5-fontWeight, var(--wds-font-weight-bold, 700)) var(--rt-h5-fontSize, 28px)/var(--rt-h5-lineHeight, 1.2) var(--rt-h5-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor1940630501__header-six,.richeditor1940630501__editor li.richeditor1940630501__header-six .public-DraftStyleDefault-block{font:var(--rt-h6-fontStyle, normal) var(--rt-h6-fontWeight, var(--wds-font-weight-medium, 500)) var(--rt-h6-fontSize, 22px)/var(--rt-h6-lineHeight, 1.2) var(--rt-h6-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor1940630501__paragraph-one,.richeditor1940630501__editor li.richeditor1940630501__paragraph-one .public-DraftStyleDefault-block{font:var(--rt-p1-fontStyle, normal) var(--rt-p1-fontWeight, var(--wds-font-weight-medium, 500)) var(--rt-p1-fontSize, 18px)/var(--rt-p1-lineHeight, 24px) var(--rt-p1-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor1940630501__unstyled,.richeditor1940630501__editor li.richeditor1940630501__unstyled .public-DraftStyleDefault-block{font:var(--rt-unstyled-fontStyle, normal) var(--rt-unstyled-fontWeight, var(--wds-font-weight-medium, 500)) var(--rt-unstyled-fontSize, 16px)/var(--rt-unstyled-lineHeight, 24px) var(--rt-unstyled-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor1940630501__paragraph-three,.richeditor1940630501__editor li.richeditor1940630501__paragraph-three .public-DraftStyleDefault-block{font:var(--rt-p3-fontStyle, normal) var(--rt-p3-fontWeight, var(--wds-font-weight-medium, 500)) var(--rt-p3-fontSize, 14px)/var(--rt-p3-lineHeight, 18px) var(--rt-p3-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor1940630501__editor li.richeditor1940630501__header-one:first-child~li{font:var(--rt-h1-fontStyle, normal) var(--rt-h1-fontWeight, var(--wds-font-weight-bold, 700)) var(--rt-h1-fontSize, 72px)/var(--rt-h1-lineHeight, 1.33) var(--rt-h1-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor1940630501__editor li.richeditor1940630501__header-one:first-child~li::marker{line-height:var(--rt-h1-fontSize, 72px)}.richeditor1940630501__editor li.richeditor1940630501__header-two:first-child~li{font:var(--rt-h2-fontStyle, normal) var(--rt-h2-fontWeight, var(--wds-font-weight-bold, 700)) var(--rt-h2-fontSize, 42px)/var(--rt-h2-lineHeight, 1.2) var(--rt-h2-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor1940630501__editor li.richeditor1940630501__header-two:first-child~li::marker{line-height:var(--rt-h2-fontSize, 42px)}.richeditor1940630501__editor li.richeditor1940630501__header-three:first-child~li{font:var(--rt-h3-fontStyle, normal) var(--rt-h3-fontWeight, var(--wds-font-weight-medium, 500)) var(--rt-h3-fontSize, 38px)/var(--rt-h3-lineHeight, 1.2) var(--rt-h3-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor1940630501__editor li.richeditor1940630501__header-three:first-child~li::marker{line-height:var(--rt-h3-fontSize, 38px)}.richeditor1940630501__editor li.richeditor1940630501__header-four:first-child~li{font:var(--rt-h4-fontStyle, normal) var(--rt-h4-fontWeight, var(--wds-font-weight-bold, 700)) var(--rt-h4-fontSize, 34px)/var(--rt-h4-lineHeight, 1.2) var(--rt-h4-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor1940630501__editor li.richeditor1940630501__header-four:first-child~li::marker{line-height:var(--rt-h4-fontSize, 34px)}.richeditor1940630501__editor li.richeditor1940630501__header-five:first-child~li{font:var(--rt-h5-fontStyle, normal) var(--rt-h5-fontWeight, var(--wds-font-weight-bold, 700)) var(--rt-h5-fontSize, 28px)/var(--rt-h5-lineHeight, 1.2) var(--rt-h5-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor1940630501__editor li.richeditor1940630501__header-five:first-child~li::marker{line-height:var(--rt-h5-fontSize, 28px)}.richeditor1940630501__editor li.richeditor1940630501__header-six:first-child~li{font:var(--rt-h6-fontStyle, normal) var(--rt-h6-fontWeight, var(--wds-font-weight-medium, 500)) var(--rt-h6-fontSize, 22px)/var(--rt-h6-lineHeight, 1.2) var(--rt-h6-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor1940630501__editor li.richeditor1940630501__header-six:first-child~li::marker{line-height:var(--rt-h6-fontSize, 22px)}.richeditor1940630501__editor li.richeditor1940630501__paragraph-one:first-child~li{font:var(--rt-p1-fontStyle, normal) var(--rt-p1-fontWeight, var(--wds-font-weight-medium, 500)) var(--rt-p1-fontSize, 18px)/var(--rt-p1-lineHeight, 24px) var(--rt-p1-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor1940630501__editor li.richeditor1940630501__unstyled:first-child~li{font:var(--rt-unstyled-fontStyle, normal) var(--rt-unstyled-fontWeight, var(--wds-font-weight-medium, 500)) var(--rt-unstyled-fontSize, 16px)/var(--rt-unstyled-lineHeight, 24px) var(--rt-unstyled-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.richeditor1940630501__editor li.richeditor1940630501__paragraph-three:first-child~li{font:var(--rt-p3-fontStyle, normal) var(--rt-p3-fontWeight, var(--wds-font-weight-medium, 500)) var(--rt-p3-fontSize, 14px)/var(--rt-p3-lineHeight, 18px) var(--rt-p3-fontFamily, var(--wds-font-family-default, var(--wsr-font-family, Madefor)))}.public-DraftStyleDefault-ul .public-DraftStyleDefault-depth0{margin-inline-start:2ch}.public-DraftStyleDefault-ul .public-DraftStyleDefault-depth1{margin-inline-start:4ch}.public-DraftStyleDefault-ul .public-DraftStyleDefault-depth2{margin-inline-start:6ch}.public-DraftStyleDefault-ul .public-DraftStyleDefault-depth3{margin-inline-start:8ch}.public-DraftStyleDefault-ul .public-DraftStyleDefault-depth4{margin-inline-start:10ch}.public-DraftStyleDefault-ol li.public-DraftStyleDefault-depth0:first-child{margin-inline-start:2ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth0{margin-inline-start:2ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth0:nth-child(n+10){margin-inline-start:3ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth0:nth-child(n+100){margin-inline-start:4ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth0:nth-child(n+1000){margin-inline-start:5ch}.public-DraftStyleDefault-ol li.public-DraftStyleDefault-depth1:first-child{margin-inline-start:4ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth1{margin-inline-start:4ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth1:nth-child(n+10){margin-inline-start:5ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth1:nth-child(n+100){margin-inline-start:6ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth1:nth-child(n+1000){margin-inline-start:7ch}.public-DraftStyleDefault-ol li.public-DraftStyleDefault-depth2:first-child{margin-inline-start:6ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth2{margin-inline-start:6ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth2:nth-child(n+10){margin-inline-start:7ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth2:nth-child(n+100){margin-inline-start:8ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth2:nth-child(n+1000){margin-inline-start:9ch}.public-DraftStyleDefault-ol li.public-DraftStyleDefault-depth3:first-child{margin-inline-start:8ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth3{margin-inline-start:8ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth3:nth-child(n+10){margin-inline-start:9ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth3:nth-child(n+100){margin-inline-start:10ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth3:nth-child(n+1000){margin-inline-start:11ch}.public-DraftStyleDefault-ol li.public-DraftStyleDefault-depth4:first-child{margin-inline-start:10ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth4{margin-inline-start:10ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth4:nth-child(n+10){margin-inline-start:11ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth4:nth-child(n+100){margin-inline-start:12ch}.public-DraftStyleDefault-ol li:first-child~li.public-DraftStyleDefault-depth4:nth-child(n+1000){margin-inline-start:13ch}.richeditor1940630501__align-left{text-align:left;align-self:flex-start}.richeditor1940630501__align-right{text-align:right;align-self:flex-end}.richeditor1940630501__align-center{text-align:center;align-self:center}.richeditor1940630501__align-justify{text-align:justify;align-self:stretch}.richeditor1940630501__withMargin{display:inline-block}.richeditor1940630501__dir-rtl,.richeditor1940630501__editor .public-DraftStyleDefault-rtl{direction:rtl}.richeditor1940630501__editor .public-DraftStyleDefault-listRTL{direction:rtl;text-align:right;max-width:100%}
@@ -50,6 +50,9 @@ export interface PatternFieldValidationRuleConfig {
50
50
  tooltip: string;
51
51
  inputLabel: string;
52
52
  invalidError: string;
53
+ /** Shown for a pattern that compiles but is refused because matching it
54
+ * could hang the page. Falls back to `invalidError`. */
55
+ unsafeError?: string;
53
56
  }
54
57
 
55
58
  export type FieldValidationRuleConfig =
@@ -85,7 +88,7 @@ export type FieldValidationViolation =
85
88
  rule: 'specificValues' | 'charactersLimit' | 'pattern';
86
89
  type: 'exclusiveRules';
87
90
  }
88
- | { rule: 'pattern'; type: 'invalidPattern' };
91
+ | { rule: 'pattern'; type: 'invalidPattern' | 'unsafePattern' };
89
92
 
90
93
  export type DataValidationRules = Partial<
91
94
  RequiredValidationRule &
@@ -3,6 +3,7 @@ import type {
3
3
  FieldValidationSettingsValue,
4
4
  FieldValidationViolation,
5
5
  } from '../types/validation';
6
+ import { hasNestedQuantifier } from './regex-safety';
6
7
 
7
8
  const CHARACTERS_CEILING = 256_000;
8
9
  const MIN_CHARACTERS_FLOOR = 0;
@@ -13,23 +14,35 @@ const MAX_PATTERN_LENGTH = 500;
13
14
  const isOutOfBounds = (value: number, min: number, max: number) =>
14
15
  !Number.isFinite(value) || value < min || value > max;
15
16
 
16
- const hasInvalidPattern = (pattern: string | undefined) => {
17
- if (pattern === undefined) {
18
- return false;
19
- }
20
-
21
- if (pattern.length > MAX_PATTERN_LENGTH) {
22
- return true;
17
+ const patternProblem = (
18
+ pattern: string | undefined,
19
+ ): 'invalidPattern' | 'unsafePattern' | undefined => {
20
+ if (!pattern || pattern.length > MAX_PATTERN_LENGTH) {
21
+ return pattern ? 'invalidPattern' : undefined;
23
22
  }
24
23
 
25
24
  try {
26
25
  new RegExp(pattern);
27
- return false;
28
26
  } catch {
29
- return true;
27
+ return 'invalidPattern';
30
28
  }
29
+
30
+ return hasNestedQuantifier(pattern) ? 'unsafePattern' : undefined;
31
31
  };
32
32
 
33
+ export const compilePattern = (
34
+ pattern: string | undefined,
35
+ ): RegExp | undefined =>
36
+ pattern && !patternProblem(pattern) ? new RegExp(pattern) : undefined;
37
+
38
+ // An unusable pattern enforces nothing rather than rejecting every value: the
39
+ // settings editor already surfaces `invalidPattern` to whoever authored it, and
40
+ // blocking data entry over it would strand the person typing.
41
+ export const matchesPattern = (
42
+ value: string,
43
+ pattern: string | undefined,
44
+ ): boolean => compilePattern(pattern)?.test(value) ?? true;
45
+
33
46
  export interface FieldValidationSettingsOptions {
34
47
  /** Whether `specificValues` rejects `charactersLimit`/`pattern` on the same
35
48
  * field. Callers that let a field carry both (e.g. a stored
@@ -118,7 +131,11 @@ export const getFieldValidationSettingsViolations = (
118
131
  const hasCharactersLimit = charactersLimit !== undefined;
119
132
  const hasPattern = pattern !== undefined;
120
133
 
121
- if (exclusiveSpecificValues && hasSpecificValues && (hasCharactersLimit || hasPattern)) {
134
+ if (
135
+ exclusiveSpecificValues &&
136
+ hasSpecificValues &&
137
+ (hasCharactersLimit || hasPattern)
138
+ ) {
122
139
  violations.push({ rule: 'specificValues', type: 'exclusiveRules' });
123
140
  if (hasCharactersLimit) {
124
141
  violations.push({ rule: 'charactersLimit', type: 'exclusiveRules' });
@@ -128,8 +145,9 @@ export const getFieldValidationSettingsViolations = (
128
145
  }
129
146
  }
130
147
 
131
- if (hasInvalidPattern(pattern)) {
132
- violations.push({ rule: 'pattern', type: 'invalidPattern' });
148
+ const problem = patternProblem(pattern);
149
+ if (problem) {
150
+ violations.push({ rule: 'pattern', type: problem });
133
151
  }
134
152
 
135
153
  return violations;
@@ -0,0 +1,297 @@
1
+ const CLASS_ESCAPES: Record<string, string> = {
2
+ d: '0123456789',
3
+ w: '0123456789_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
4
+ s: ' \t\n\r\f\v',
5
+ };
6
+
7
+ /** Characters an atom can match. `undefined` means "could be anything". */
8
+ type CharSet = Set<string> | undefined;
9
+
10
+ const overlaps = (a: CharSet, b: CharSet) =>
11
+ !a || !b || [...a].some((char) => b.has(char));
12
+
13
+ const union = (a: CharSet, b: CharSet): CharSet =>
14
+ a && b ? new Set([...a, ...b]) : undefined;
15
+
16
+ const expandCharacterClass = (body: string): CharSet => {
17
+ if (body.startsWith('^')) {
18
+ return undefined;
19
+ }
20
+
21
+ const chars = new Set<string>();
22
+ let i = 0;
23
+
24
+ while (i < body.length) {
25
+ if (body[i] === '\\') {
26
+ const escaped = CLASS_ESCAPES[body[i + 1]];
27
+ if (!escaped) {
28
+ return undefined;
29
+ }
30
+ [...escaped].forEach((char) => chars.add(char));
31
+ i += 2;
32
+ } else if (body[i + 1] === '-' && i + 2 < body.length) {
33
+ for (let c = body.charCodeAt(i); c <= body.charCodeAt(i + 2); c += 1) {
34
+ chars.add(String.fromCharCode(c));
35
+ }
36
+ i += 3;
37
+ } else {
38
+ chars.add(body[i]);
39
+ i += 1;
40
+ }
41
+ }
42
+
43
+ return chars;
44
+ };
45
+
46
+ interface Quantifier {
47
+ length: number;
48
+ /** No upper bound, so the atom can drive an outer group's backtracking. */
49
+ unbounded: boolean;
50
+ /** Can match a varying number of times, so it splits the input ambiguously. */
51
+ variable: boolean;
52
+ /** Can match zero times. */
53
+ optional: boolean;
54
+ }
55
+
56
+ const NO_QUANTIFIER: Quantifier = {
57
+ length: 0,
58
+ unbounded: false,
59
+ variable: false,
60
+ optional: false,
61
+ };
62
+
63
+ // The quantifier at `index`, if there is one. Only `{n}` matches a fixed number
64
+ // of times; every other form varies, which is what lets an outer quantifier
65
+ // divide the same input many ways.
66
+ const readQuantifier = (pattern: string, index: number): Quantifier => {
67
+ const char = pattern[index];
68
+ let length = 0;
69
+ let unbounded = false;
70
+ let variable = false;
71
+ let optional = false;
72
+
73
+ if (char === '*') {
74
+ length = 1;
75
+ unbounded = variable = optional = true;
76
+ } else if (char === '+') {
77
+ length = 1;
78
+ unbounded = variable = true;
79
+ } else if (char === '?') {
80
+ length = 1;
81
+ variable = optional = true;
82
+ } else if (char === '{') {
83
+ const close = pattern.indexOf('}', index);
84
+ const body = close === -1 ? '' : pattern.slice(index + 1, close);
85
+ const counted = /^(\d*)(,?)(\d*)$/.exec(body);
86
+
87
+ if (counted && body !== '' && body !== ',') {
88
+ const [, rawMin, comma, rawMax] = counted;
89
+ const min = rawMin === '' ? 0 : Number(rawMin);
90
+ length = close - index + 1;
91
+ unbounded = comma === ',' && rawMax === '';
92
+ variable = unbounded || (comma === ',' && Number(rawMax) !== min);
93
+ optional = min === 0;
94
+ }
95
+ }
96
+
97
+ if (!length) {
98
+ return NO_QUANTIFIER;
99
+ }
100
+
101
+ // A lazy or possessive marker backtracks the same way the greedy form does.
102
+ const next = pattern[index + length];
103
+ return {
104
+ length: next === '?' || next === '+' ? length + 1 : length,
105
+ unbounded,
106
+ variable,
107
+ optional,
108
+ };
109
+ };
110
+
111
+ const skipCharacterClass = (pattern: string, index: number) => {
112
+ let i = index + 1;
113
+
114
+ if (pattern[i] === '^') {
115
+ i += 1;
116
+ }
117
+ // A `]` in first position is a literal, not the end of the class.
118
+ if (pattern[i] === ']') {
119
+ i += 1;
120
+ }
121
+ while (i < pattern.length && pattern[i] !== ']') {
122
+ i += pattern[i] === '\\' ? 2 : 1;
123
+ }
124
+
125
+ return i + 1;
126
+ };
127
+
128
+ const skipGroupPrefix = (pattern: string, index: number) => {
129
+ if (pattern[index] !== '?') {
130
+ return index;
131
+ }
132
+ // `?:`, `?=`, `?!`, `?<=`, `?<!`, `?<name>`
133
+ if (pattern[index + 1] === '<' && !'=!'.includes(pattern[index + 2])) {
134
+ const close = pattern.indexOf('>', index);
135
+ return close === -1 ? index + 2 : close + 1;
136
+ }
137
+ return index + (pattern[index + 1] === '<' ? 3 : 2);
138
+ };
139
+
140
+ interface Atom {
141
+ quantifier: Quantifier;
142
+ /** Characters the atom can begin with. */
143
+ first: CharSet;
144
+ /** Every character the atom can consume; wider than `first` for a group. */
145
+ all: CharSet;
146
+ /** The atom is a group holding a varying repeat. */
147
+ variesInside: boolean;
148
+ }
149
+
150
+ /**
151
+ * One nesting level: what the current alternation branch has seen, and the
152
+ * verdict rolled up across branches already closed by `|`.
153
+ */
154
+ class Level {
155
+ anyBranchElastic = false;
156
+ anyBranchVaries = false;
157
+ allBranchesAnchored = true;
158
+ /** First-character sets of the branches, one entry per `|` separated branch. */
159
+ readonly branchStarts: CharSet[] = [];
160
+ /** Every character this level can consume, across all its branches. */
161
+ chars: CharSet = new Set();
162
+ /** Characters matched by atoms that can repeat a varying number of times. */
163
+ private variableChars: CharSet = new Set();
164
+ private branchVaries = false;
165
+ /** Character sets of atoms every iteration must match a fixed number of. */
166
+ private anchors: CharSet[] = [];
167
+ private branchStart: CharSet = new Set();
168
+ /** Whether every atom so far could be skipped, so the next one still leads. */
169
+ private stillLeading = true;
170
+
171
+ endBranch() {
172
+ // An atom only pins the iterations apart if the varying atoms cannot eat
173
+ // what it eats. In `(a+a)`, the mandatory `a` is also a candidate for `a+`,
174
+ // so the split between them stays ambiguous and the group is still elastic.
175
+ const anchored = this.anchors.some(
176
+ (anchor) => !overlaps(anchor, this.variableChars),
177
+ );
178
+
179
+ this.anyBranchElastic ||= this.branchVaries && !anchored;
180
+ this.anyBranchVaries ||= this.branchVaries;
181
+ this.allBranchesAnchored &&= anchored;
182
+ this.branchStarts.push(this.branchStart);
183
+
184
+ this.variableChars = new Set();
185
+ this.branchVaries = false;
186
+ this.anchors = [];
187
+ this.branchStart = new Set();
188
+ this.stillLeading = true;
189
+ }
190
+
191
+ addAtom({ quantifier, first, all, variesInside }: Atom) {
192
+ this.chars = union(this.chars, all);
193
+
194
+ if (quantifier.variable || variesInside) {
195
+ this.branchVaries = true;
196
+ this.variableChars = union(this.variableChars, all);
197
+ } else {
198
+ this.anchors.push(all);
199
+ }
200
+
201
+ if (this.stillLeading) {
202
+ this.branchStart = union(this.branchStart, first);
203
+ // A mandatory atom ends the run of possible leaders.
204
+ this.stillLeading = quantifier.optional;
205
+ }
206
+ }
207
+ }
208
+
209
+ /** Whether an unbounded quantifier over these branches can match ambiguously. */
210
+ const branchesOverlap = (starts: CharSet[]) =>
211
+ starts.length > 1 &&
212
+ starts.some((start, index) =>
213
+ starts.slice(index + 1).some((other) => overlaps(start, other)),
214
+ );
215
+
216
+ /**
217
+ * Whether `pattern` can backtrack catastrophically — an unbounded quantifier
218
+ * applied to a group that can divide the same input more than one way, as in
219
+ * `(a+)+`. That is the shape whose match time grows exponentially with input
220
+ * length, so a 7-character pattern can hang the tab on a 28-character value.
221
+ *
222
+ * A group is safe to repeat when each iteration must consume something fixed
223
+ * that the varying parts cannot also consume: `(?:-[a-z0-9]+)*` has to eat a
224
+ * literal `-` every time round, which pins the iterations apart and keeps
225
+ * matching linear. A mandatory atom the varying part could eat instead — the
226
+ * second `a` in `(a+a)+` — pins nothing.
227
+ *
228
+ * Conservative on purpose: it proves nothing about linearity, and rejects some
229
+ * patterns that would in fact have run fine.
230
+ */
231
+ export const hasNestedQuantifier = (pattern: string): boolean => {
232
+ const stack: Level[] = [];
233
+ let level = new Level();
234
+ let i = 0;
235
+
236
+ while (i < pattern.length) {
237
+ const char = pattern[i];
238
+ let atomEnd: number;
239
+
240
+ if (char === '|') {
241
+ level.endBranch();
242
+ i += 1;
243
+ continue;
244
+ }
245
+
246
+ if (char === '(') {
247
+ stack.push(level);
248
+ level = new Level();
249
+ i = skipGroupPrefix(pattern, i + 1);
250
+ continue;
251
+ }
252
+
253
+ if (char === ')') {
254
+ level.endBranch();
255
+ const group = level;
256
+ const quantifier = readQuantifier(pattern, i + 1);
257
+
258
+ if (
259
+ quantifier.unbounded &&
260
+ (group.anyBranchElastic || branchesOverlap(group.branchStarts))
261
+ ) {
262
+ return true;
263
+ }
264
+
265
+ level = stack.pop() ?? new Level();
266
+ level.addAtom({
267
+ quantifier,
268
+ first: group.branchStarts.reduce<CharSet>(union, new Set()),
269
+ all: group.chars,
270
+ variesInside: group.anyBranchVaries && !group.allBranchesAnchored,
271
+ });
272
+ i += 1 + quantifier.length;
273
+ continue;
274
+ }
275
+
276
+ let first: CharSet;
277
+
278
+ if (char === '\\') {
279
+ atomEnd = i + 2;
280
+ const escaped = CLASS_ESCAPES[pattern[i + 1]];
281
+ first = escaped ? new Set([...escaped]) : new Set([pattern[i + 1]]);
282
+ } else if (char === '[') {
283
+ atomEnd = skipCharacterClass(pattern, i);
284
+ first = expandCharacterClass(pattern.slice(i + 1, atomEnd - 1));
285
+ } else {
286
+ atomEnd = i + 1;
287
+ // `.` matches almost anything; `^` and `$` consume nothing.
288
+ first = char === '.' ? undefined : new Set([char]);
289
+ }
290
+
291
+ const quantifier = readQuantifier(pattern, atomEnd);
292
+ level.addAtom({ quantifier, first, all: first, variesInside: false });
293
+ i = atomEnd + quantifier.length;
294
+ }
295
+
296
+ return false;
297
+ };