@wix/patterns-fields 1.93.0 → 1.95.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 (221) 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-field/form-audio-field.st.css.js.map +1 -1
  89. package/dist/esm/components/audio/audio-player/audio-player.st.css.js +2 -2
  90. package/dist/esm/components/audio/audio-player/audio-player.st.css.js.map +1 -1
  91. package/dist/esm/components/color-view/cell-color-view.st.css.js +2 -2
  92. package/dist/esm/components/color-view/cell-color-view.st.css.js.map +1 -1
  93. package/dist/esm/components/color-view/color-view.st.css.js +2 -2
  94. package/dist/esm/components/color-view/color-view.st.css.js.map +1 -1
  95. package/dist/esm/components/delete-dialog/delete-dialog.st.css.js +2 -2
  96. package/dist/esm/components/delete-dialog/delete-dialog.st.css.js.map +1 -1
  97. package/dist/esm/components/document/form-document-field.st.css.js +2 -2
  98. package/dist/esm/components/document/form-document-field.st.css.js.map +1 -1
  99. package/dist/esm/components/exclamation/exclamation.st.css.js +2 -2
  100. package/dist/esm/components/field-validation-settings/field-validation-settings-input.js +8 -3
  101. package/dist/esm/components/field-validation-settings/field-validation-settings-input.js.map +1 -1
  102. package/dist/esm/components/highlighted-text/highlighted-text.st.css.js +3 -3
  103. package/dist/esm/components/image/thumbnail-replace-overlay.st.css.js +2 -2
  104. package/dist/esm/components/media-control/cell-media-edit-shell.st.css.js +2 -2
  105. package/dist/esm/components/media-control/paste-url-button.st.css.js +2 -2
  106. package/dist/esm/components/media-gallery/form-media-gallery-field.st.css.js +2 -2
  107. package/dist/esm/components/media-image/media-image.st.css.js +3 -3
  108. package/dist/esm/components/media-image/media-image.st.css.js.map +1 -1
  109. package/dist/esm/components/media-image/overlays/overlay.st.css.js +2 -2
  110. package/dist/esm/components/media-loader/media-loader.st.css.js +2 -2
  111. package/dist/esm/components/media-tag/web-media-tag/media-tag.st.css.js +2 -2
  112. package/dist/esm/components/multi-document/cell-multi-document-edit.st.css.js +2 -2
  113. package/dist/esm/components/multi-document/cell-multi-document-edit.st.css.js.map +1 -1
  114. package/dist/esm/components/multi-document/multi-document-input/form-multi-document.st.css.js +2 -2
  115. package/dist/esm/components/multi-document/multi-document-input/form-multi-document.st.css.js.map +1 -1
  116. package/dist/esm/components/reference/cell-multi-reference-input.st.css.js +2 -2
  117. package/dist/esm/components/reference/cell-multi-reference-input.st.css.js.map +1 -1
  118. package/dist/esm/components/reference/cell-reference-input.st.css.js +2 -2
  119. package/dist/esm/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js +2 -2
  120. package/dist/esm/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.js.map +1 -1
  121. package/dist/esm/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js +2 -2
  122. package/dist/esm/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.js.map +1 -1
  123. package/dist/esm/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.js +2 -2
  124. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.js +2 -2
  125. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.js +2 -2
  126. package/dist/esm/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.js +2 -2
  127. package/dist/esm/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.js +2 -2
  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-text/rich-text-input/rich-text-editor/rich-editor.st.css.js +2 -2
  131. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.js +2 -2
  132. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.js +2 -2
  133. package/dist/esm/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.js.map +1 -1
  134. package/dist/esm/components/text/form-long-text.js +5 -0
  135. package/dist/esm/components/text/form-long-text.js.map +1 -1
  136. package/dist/esm/components/text/form-short-text.js +5 -0
  137. package/dist/esm/components/text/form-short-text.js.map +1 -1
  138. package/dist/esm/components/text/text-view.st.css.js +2 -2
  139. package/dist/esm/components/text/text-view.st.css.js.map +1 -1
  140. package/dist/esm/components/url/form-url.js +10 -2
  141. package/dist/esm/components/url/form-url.js.map +1 -1
  142. package/dist/esm/styles.global.css +1 -1
  143. package/dist/esm/validations/field-validation-settings.js +17 -11
  144. package/dist/esm/validations/field-validation-settings.js.map +1 -1
  145. package/dist/esm/validations/regex-safety.js +241 -0
  146. package/dist/esm/validations/regex-safety.js.map +1 -0
  147. package/dist/types/components/audio/audio-field/form-audio-field.st.css.d.ts.map +1 -1
  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/delete-dialog/delete-dialog.st.css.d.ts.map +1 -1
  152. package/dist/types/components/document/form-document-field.st.css.d.ts.map +1 -1
  153. package/dist/types/components/field-validation-settings/field-validation-settings-input.d.ts.map +1 -1
  154. package/dist/types/components/media-image/media-image.st.css.d.ts.map +1 -1
  155. package/dist/types/components/multi-document/cell-multi-document-edit.st.css.d.ts.map +1 -1
  156. package/dist/types/components/multi-document/multi-document-input/form-multi-document.st.css.d.ts.map +1 -1
  157. package/dist/types/components/reference/cell-multi-reference-input.st.css.d.ts.map +1 -1
  158. package/dist/types/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.d.ts.map +1 -1
  159. package/dist/types/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.d.ts.map +1 -1
  160. package/dist/types/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.d.ts.map +1 -1
  161. package/dist/types/components/text/form-long-text.d.ts.map +1 -1
  162. package/dist/types/components/text/form-short-text.d.ts.map +1 -1
  163. package/dist/types/components/text/text-view.st.css.d.ts.map +1 -1
  164. package/dist/types/components/url/form-url.d.ts.map +1 -1
  165. package/dist/types/types/validation.d.ts +4 -1
  166. package/dist/types/types/validation.d.ts.map +1 -1
  167. package/dist/types/validations/field-validation-settings.d.ts +2 -0
  168. package/dist/types/validations/field-validation-settings.d.ts.map +1 -1
  169. package/dist/types/validations/regex-safety.d.ts +17 -0
  170. package/dist/types/validations/regex-safety.d.ts.map +1 -0
  171. package/package.json +4 -4
  172. package/src/__tests__/components/field-validation-settings/field-validation-settings-input.spec.tsx +42 -1
  173. package/src/__tests__/components/field-validation-settings/pattern-round-trip.spec.tsx +37 -0
  174. package/src/__tests__/components/text/form-long-text.spec.tsx +55 -0
  175. package/src/__tests__/components/text/form-short-text.spec.tsx +85 -0
  176. package/src/__tests__/components/url/form-url.spec.tsx +44 -0
  177. package/src/__tests__/validations/field-validation-settings-pattern.spec.ts +87 -0
  178. package/src/__tests__/validations/regex-safety.spec.ts +71 -0
  179. package/src/components/address/input/address-input.st.css.ts +2 -2
  180. package/src/components/audio/actions/actions-menu/actions-menu.st.css.ts +2 -2
  181. package/src/components/audio/audio-field/form-audio-field.st.css.ts +2 -2
  182. package/src/components/audio/audio-player/audio-player.st.css.ts +2 -2
  183. package/src/components/color-view/cell-color-view.st.css.ts +2 -2
  184. package/src/components/color-view/color-view.st.css.ts +2 -2
  185. package/src/components/delete-dialog/delete-dialog.st.css.ts +2 -2
  186. package/src/components/document/form-document-field.st.css.ts +2 -2
  187. package/src/components/exclamation/exclamation.st.css.ts +2 -2
  188. package/src/components/field-validation-settings/field-validation-settings-input.tsx +10 -6
  189. package/src/components/highlighted-text/highlighted-text.st.css.ts +3 -3
  190. package/src/components/image/thumbnail-replace-overlay.st.css.ts +2 -2
  191. package/src/components/media-control/cell-media-edit-shell.st.css.ts +2 -2
  192. package/src/components/media-control/paste-url-button.st.css.ts +2 -2
  193. package/src/components/media-gallery/form-media-gallery-field.st.css.ts +2 -2
  194. package/src/components/media-image/media-image.st.css.ts +3 -3
  195. package/src/components/media-image/overlays/overlay.st.css.ts +2 -2
  196. package/src/components/media-loader/media-loader.st.css.ts +2 -2
  197. package/src/components/media-tag/web-media-tag/media-tag.st.css.ts +2 -2
  198. package/src/components/multi-document/cell-multi-document-edit.st.css.ts +2 -2
  199. package/src/components/multi-document/multi-document-input/form-multi-document.st.css.ts +2 -2
  200. package/src/components/reference/cell-multi-reference-input.st.css.ts +2 -2
  201. package/src/components/reference/cell-reference-input.st.css.ts +2 -2
  202. package/src/components/rich-content/rich-content-input/default-value-input/rich-content-default-value-input.st.css.ts +2 -2
  203. package/src/components/rich-content/rich-content-input/form-input/rich-content-form-input.st.css.ts +2 -2
  204. package/src/components/rich-content/rich-content-input/form-read-only-input/rich-content-form-read-only-input.st.css.ts +2 -2
  205. package/src/components/rich-content/rich-content-input/rich-content-common/fullscreen-modal/fullscreen-modal.st.css.ts +2 -2
  206. package/src/components/rich-content/rich-content-input/rich-content-common/publish-loader/publish-loader.st.css.ts +2 -2
  207. package/src/components/rich-content/rich-content-input/rich-content-common/toggle-fullscreen-button/toggle-fullscreen-button.st.css.ts +2 -2
  208. package/src/components/rich-content/rich-content-input/rich-content-editor/rich-content-editor.st.css.ts +2 -2
  209. package/src/components/rich-content/rich-content-input/rich-content-editor/rich-content-toolbar.st.css.ts +2 -2
  210. package/src/components/rich-content/rich-content-input/rich-content-viewer/rich-content-viewer.st.css.ts +2 -2
  211. package/src/components/rich-text/rich-text-input/rich-text-editor/rich-editor.st.css.ts +2 -2
  212. package/src/components/rich-text/rich-text-input/rich-text-editor/rich-text-editor.st.css.ts +2 -2
  213. package/src/components/rich-text/rich-text-input/rich-text-editor/toolbar/toolbar.st.css.ts +2 -2
  214. package/src/components/text/form-long-text.tsx +9 -0
  215. package/src/components/text/form-short-text.tsx +9 -0
  216. package/src/components/text/text-view.st.css.ts +2 -2
  217. package/src/components/url/form-url.tsx +18 -2
  218. package/src/styles.global.css +1 -1
  219. package/src/types/validation.ts +4 -1
  220. package/src/validations/field-validation-settings.ts +30 -12
  221. 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_ = "textview397419245";
8
+ var _namespace_ = "textview3876692621";
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":"textview397419245__root","textView":"textview397419245__textView"};
16
+ export var classes = {"root":"textview3876692621__root","textView":"textview3876692621__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
- .addressinput2303580790__tableAddressInput{height:36px!important;margin-left:-1px;display:flex!important;align-items:center;width:100%}.addressinput2303580790__tableAddressInput>div{padding:0!important;width:100%}.addressinput2303580790__tableAddressInput:focus-within{margin-left:2px}.actionsmenu2999519234__action{margin-left:calc(var(--wds-space-100, 6px)*-1)}.formaudiofield884720453__addItem{height:120px!important;box-sizing:border-box}.formaudiofield884720453__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)}.formaudiofield884720453__addItem.formaudiofield884720453--disabled{pointer-events:auto!important}.formaudiofield884720453__addItem.formaudiofield884720453--error{border:1px solid var(--wds-color-red-100, var(--wsr-color-R10))!important}.formaudiofield884720453__mediaTitle{line-height:18px!important}.audioplayer109331119__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}.cellcolorview837033563__hashPrefix{color:var(--wsr-color-D40, #868aa5);font-size:14px;font-weight:300;line-height:1}.colorview321055583__view{width:100%}.colorview321055583__fillPreview{flex-shrink:0}.colorview321055583__view .colorview321055583__fillPreview{width:18px;height:18px;min-width:18px!important;min-height:18px!important}.deletedialog622320274__layout{max-width:510px!important}.formdocumentfield804310977__viewWrapper{border-radius:var(--wds-border-radius-300, calc(2px * 3));border:1px solid var(--wds-color-blue-300, var(--wsr-color-B30))}.formdocumentfield804310977__viewWrapper:hover{background:var(--wds-color-blue-500, var(--wsr-color-B50));cursor:pointer}.formdocumentfield804310977__textWidth{max-width:calc(100% - 196px)}.formdocumentfield804310977__documentLoader{padding-top:21px;padding-bottom:21px}.formdocumentfield804310977__addDocument{padding-top:17px!important;padding-bottom:17px!important}.formdocumentfield804310977__addDocument.formdocumentfield804310977--error{border:1px solid var(--wds-color-red-100, var(--wsr-color-R10))!important}.formdocumentfield804310977__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))}.exclamation1896828739__exclamation{display:flex;justify-content:center;align-items:center;box-sizing:border-box;border-radius:3px;cursor:pointer}.exclamation1896828739__exclamation.exclamation1896828739---type-7-warning:not(.exclamation1896828739--customSize),.exclamation1896828739__exclamation.exclamation1896828739---type-5-error:not(.exclamation1896828739--customSize){width:24px;height:24px}.exclamation1896828739__exclamation.exclamation1896828739---type-7-warning{color:var(--wds-color-fill-warning-primary)}.exclamation1896828739__exclamation.exclamation1896828739---type-5-error{color:var(--wds-color-fill-destructive-primary)}.exclamation1896828739__actions{display:flex;flex-direction:column}.exclamation1896828739__action{white-space:normal!important;height:auto!important;text-align:left;gap:6px}.exclamation1896828739__action+.exclamation1896828739__action{margin-top:6px}.exclamation1896828739__action.exclamation1896828739--accented{color:var(--wds-color-blue-100)}.exclamation1896828739__action.exclamation1896828739--accented:hover{color:var(--wds-color-blue-200)}.highlightedtext1731226782__root.highlightedtext1731226782--highlightedBackground{animation:highlightedtext1731226782__highlighted 150ms ease-out 1 forwards}.highlightedtext1731226782__substring.highlightedtext1731226782--isHighlighted{animation:highlightedtext1731226782__highlighted-match 150ms ease-out 50ms 1 forwards}@keyframes highlightedtext1731226782__highlighted{0%{background-color:transparent}to{background-color:var(--wds-color-yellow-400, var(--wsr-color-Y40))}}@keyframes highlightedtext1731226782__highlighted-match{0%{background-color:transparent}to{background-color:var(--wds-color-yellow-200, var(--wsr-color-Y20))}}.thumbnailreplaceoverlay2969543324__root{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.4);border-radius:3px}.thumbnailreplaceoverlay2969543324__icon{color:#fff;width:18px;height:18px}.cellmediaeditshell2246956053__root{width:100%;height:100%}.pasteurlbutton3033417606__root{margin-top:6px}.pasteurlbutton3033417606__iconButtonTooltip{height:max-content}.pasteurlbutton3033417606__iconButton{width:24px;height:24px}.formmediagalleryfield2856102327__container{display:flex;min-height:128px;max-height:259px}.formmediagalleryfield2856102327__viewBox{display:flex;height:100%;width:100%;flex-wrap:wrap}.formmediagalleryfield2856102327__addItemWrapper{height:128px;width:100%;box-sizing:border-box}.formmediagalleryfield2856102327__addItem{box-sizing:border-box}.formmediagalleryfield2856102327__overlay{width:initial!important;min-width:382px!important}.formmediagalleryfield2856102327__image.formmediagalleryfield2856102327--withMarginRight{margin-right:3px}.formmediagalleryfield2856102327__image.formmediagalleryfield2856102327--withMarginTop{margin-top:3px}.formmediagalleryfield2856102327__previewImage{max-height:calc(100% - 12px)!important}.formmediagalleryfield2856102327__previewVideo{border-radius:8px;max-width:100%;max-height:calc(100% - 12px)!important}.mediaimage575688067__root{display:flex;align-items:center;flex-shrink:0;position:relative;box-sizing:border-box}.mediaimage575688067__root.mediaimage575688067--error{--mediaimage575688067-from:calc(50% - 0.5px);--mediaimage575688067-to:calc(50% + 0.5px);background-image:linear-gradient(to bottom right,transparent var(--mediaimage575688067-from),var(--wds-color-red-200, var(--wsr-color-R20)) var(--mediaimage575688067-from),var(--wds-color-red-200, var(--wsr-color-R20)) var(--mediaimage575688067-to),transparent var(--mediaimage575688067-to))}.mediaimage575688067__root.mediaimage575688067--error>*{opacity:0}.overlay3237573833__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))}.overlay3237573833__iconOverlay.overlay3237573833---size-5-small{width:20px;height:20px}.overlay3237573833__iconOverlay.overlay3237573833---size-6-medium{width:24px;height:24px}.overlay3237573833__iconOverlay.overlay3237573833---size-5-large{width:28px;height:28px}.overlay3237573833__iconOverlay.overlay3237573833---placement-7-topLeft{top:2px;left:2px}.overlay3237573833__iconOverlay.overlay3237573833---placement-10-bottomLeft{bottom:2px;left:2px}.medialoader3150794118__loader{border-radius:6px}.medialoader3150794118__loader.medialoader3150794118--isDashed{border:dashed 1px var(--wds-color-blue-300, var(--wsr-color-B30))}.medialoader3150794118__loader.medialoader3150794118--isSolid{border:solid 1px var(--wds-color-blue-300, var(--wsr-color-B30))}.mediatag4017133899__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))}.cellmultidocumentedit3280386035__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}.formmultidocument4041194483__viewRoot{border-radius:var(--wds-border-radius-300, calc(2px * 3));border:1px solid var(--wds-color-blue-300, var(--wsr-color-B30))}.formmultidocument4041194483__singleViewWrapper{border-radius:0;border-bottom:1px solid var(--wds-color-neutral-600, var(--wsr-color-D60));background-color:transparent!important}.formmultidocument4041194483__viewRoot>div:first-child .formmultidocument4041194483__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))}.formmultidocument4041194483__singleViewWrapper:hover{background-color:var(--wds-color-blue-500, var(--wsr-color-B50))!important}.formmultidocument4041194483__singleViewWrapper:focus-visible{border-bottom:1px solid transparent;position:relative;z-index:1}.formmultidocument4041194483__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))}.formmultidocument4041194483__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))}.cellmultireferenceinput741540104__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}.cellreferenceinput1420854928__root{width:100%;height:100%;display:flex;align-items:center}.cellreferenceinput1420854928__autocomplete{width:100%}.richcontentdefaultvalueinput619135962__richContentEditorContainer .richcontentdefaultvalueinput619135962__editor{max-height:calc(40vh - var(--topToolbarHeight) - var(--bottomToolbarHeight))}.richcontentforminput4180188257__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))}.richcontentforminput4180188257__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))}.richcontentforminput4180188257__root .richcontentforminput4180188257__editor{overflow-y:auto;max-height:calc(80vh - var(--topToolbarHeight) - var(--bottomToolbarHeight))}.richcontentformreadonlyinput1140181712__root{outline:0;box-sizing:border-box;border:1px solid var(--wds-color-black-600);border-radius:var(--wds-border-radius-300)}.richcontentformreadonlyinput1140181712__root:focus-within{border:1px solid var(--wds-color-blue-100);box-shadow:var(--wds-input-shadow-focus-standard)}.fullscreenmodal2151045318__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}.publishloader1390420435__publishLoader{position:absolute;top:0;left:0;width:100%;height:100%;background:var(--wds-color-white);z-index:5000;border-radius:inherit}.togglefullscreenbutton3027331515__root{z-index:5;box-sizing:border-box;position:absolute;right:0;top:calc(50% - 16px)!important;padding-right:3px}.togglefullscreenbutton3027331515__root button{border-radius:6px!important}.richcontenteditor3930503777__root{position:relative;font-family:var(--wds-font-family-default, Madefor, Helvetica Neue, Helvetica, Arial, sans-serif)}.richcontenteditor3930503777__root,.richcontenteditor3930503777__toolbarContainer,.richcontenteditor3930503777__footerToolbarContainer{width:100%;box-sizing:border-box}.richcontenteditor3930503777__toolbarContainer div{box-sizing:border-box}.richcontenteditor3930503777__toolbarAndFullScreenButtonWrapper{display:flex;position:relative}.richcontenteditor3930503777__editor{box-sizing:border-box;padding:36px 24px 36px 55px}.richcontenteditor3930503777__modalEditor{display:flex;flex-direction:column;flex:1;height:100%}.richcontenteditor3930503777__modalEditor .richcontenteditor3930503777__editor{overflow-y:auto;flex:1;min-width:592px;box-sizing:border-box}.richcontenteditor3930503777__modalEditor .richcontenteditor3930503777__footerToolbarContainer{margin-top:9px}.richcontenteditor3930503777__toolbarContainer button[data-hook~=text-button-headings]>span{display:inline-flex;padding-inline-end:3px!important}.richcontenteditor3930503777__toolbarContainer button[data-hook~=text-button-ai]>span{padding-inline-end:9px!important}.richcontenttoolbar2503951607__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}.richcontenttoolbar2503951607__toolbarButton{line-height:40px;background:0 0;border:0;cursor:pointer;display:flex;align-items:center;justify-content:center;margin:0 5px 0 0}.richcontenttoolbar2503951607__toolbarButton:disabled{color:graytext}.richcontenttoolbar2503951607__separator{width:1px;height:20px;margin:0 8px 0 3px;background:rgba(51,51,51,.1)}.richcontenttoolbar2503951607__toolbar label{padding:0 8px}.richcontentviewer1643674328__root{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;width:100%;min-height:36px}.richcontentviewer1643674328__root.richcontentviewer1643674328--isFullScreen{padding:12px 24px}.richcontentviewer1643674328__root:not(.richcontentviewer1643674328--isFullScreen){padding:6px 24px 6px 12px}.richcontentviewer1643674328__root ToggleButton{margin:0;padding:0;border:0;position:absolute;top:2px!important;right:2px;width:30px;height:30px}.richcontentviewer1643674328__viewer{height:calc(100% - 36px);width:100%}.richcontentviewer1643674328__modalViewer{min-width:592px;overflow:auto}.richtexteditor3970979290__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))}.richtexteditor3970979290__root.richtexteditor3970979290---border-4-none{border:0}.richtexteditor3970979290__root.richtexteditor3970979290---border-8-standard{border:1px solid var(--wds-input-border-color, var(--wsr-color-B40, #D6E6FE))}.richtexteditor3970979290__root.richtexteditor3970979290---border-8-standard:focus,.richtexteditor3970979290__root.richtexteditor3970979290---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))}.richtexteditor3970979290__root.richtexteditor3970979290---border-8-standard.richtexteditor3970979290---status-5-error{border:1px solid var(--wds-color-border-destructive-secondary-active, var(--wsr-color-R10, #E62214))}.richtexteditor3970979290__root.richtexteditor3970979290---border-8-standard.richtexteditor3970979290---status-5-error:focus,.richtexteditor3970979290__root.richtexteditor3970979290---border-8-standard.richtexteditor3970979290---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))}.richtexteditor3970979290__root.richtexteditor3970979290---border-8-standard.richtexteditor3970979290---status-7-warning{border:1px solid var(--wds-color-border-warning-secondary-active, var(--wsr-color-Y10, #FFB700))}.richtexteditor3970979290__root.richtexteditor3970979290---border-8-standard.richtexteditor3970979290---status-7-warning:focus,.richtexteditor3970979290__root.richtexteditor3970979290---border-8-standard.richtexteditor3970979290---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))}.richtexteditor3970979290__nativeInput{position:absolute;opacity:0;padding:0;margin:0;border:0;width:0;height:0}.richtexteditor3970979290__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))}.richtexteditor3970979290__editor.richtexteditor3970979290--isFullScreen{max-width:782px;min-width:582px;background:var(--wds-color-black-700)}.richtexteditor3970979290__editor:not(.richtexteditor3970979290--isFullScreen){max-height:80vh}.richtexteditor3970979290__editor>div{flex:1;max-width:100%}.toolbar1380510888__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}.toolbar1380510888__item{display:flex;margin-right:12px}.toolbar1380510888__item svg,.toolbar1380510888__item svg path,.toolbar1380510888__item svg text{color:inherit;fill:currentColor}.toolbar1380510888__separator{display:inline-flex;margin-right:12px;border-left:1px solid #ddd;align-self:stretch}.toolbar1380510888__clearFormatting{margin-left:auto}.toolbar1380510888__fullScreen{margin-right:0}.toolbar1380510888__dropdownItemContent{height:36px;width:100%;display:flex;gap:12px;justify-content:space-between;align-items:center}.toolbar1380510888__dropdownItemContent.toolbar1380510888--selected .toolbar1380510888__dropdownItemTitle,.toolbar1380510888__dropdownItemContent.toolbar1380510888--selected .toolbar1380510888__dropdownItemSubtitle{color:var(--wds-color-white)!important}.toolbar1380510888__dropdownItemSubtitle{color:var(--wds-color-black-400)!important;padding-right:12px;flex-shrink:0}.toolbar1380510888__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}.toolbar1380510888__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}.toolbar1380510888__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}.toolbar1380510888__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}.toolbar1380510888__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}.toolbar1380510888__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}.toolbar1380510888__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}.toolbar1380510888__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}.toolbar1380510888__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}.textview397419245__textView::after{content:"";display:block}.richeditor2184311873__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))}.richeditor2184311873__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))}.richeditor2184311873__editor .DraftEditor-root{width:100%;height:100%}.richeditor2184311873__editor .DraftEditor-root [data-contents]{overflow:auto}.richeditor2184311873__editor .DraftEditor-editorContainer{display:flex;min-height:100%;background:#fff}.richeditor2184311873__editor .public-DraftEditor-content{padding:12px 24px 24px;min-height:100%;width:100%;box-sizing:border-box}.richeditor2184311873__editor .public-DraftEditor-content ol,.richeditor2184311873__editor .public-DraftEditor-content ul{display:flex;flex-direction:column;padding:0}.richeditor2184311873__editor .public-DraftEditor-content a,.richeditor2184311873__editor .public-DraftEditor-content a:visited{color:inherit;text-decoration:none}.richeditor2184311873__header-one:not(li),.richeditor2184311873__header-two:not(li),.richeditor2184311873__header-three:not(li),.richeditor2184311873__header-four:not(li),.richeditor2184311873__header-five:not(li),.richeditor2184311873__header-six:not(li){margin-block:0;margin:0}.richeditor2184311873__header-one,.richeditor2184311873__editor li.richeditor2184311873__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)))}.richeditor2184311873__header-two,.richeditor2184311873__editor li.richeditor2184311873__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)))}.richeditor2184311873__header-three,.richeditor2184311873__editor li.richeditor2184311873__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)))}.richeditor2184311873__header-four,.richeditor2184311873__editor li.richeditor2184311873__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)))}.richeditor2184311873__header-five,.richeditor2184311873__editor li.richeditor2184311873__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)))}.richeditor2184311873__header-six,.richeditor2184311873__editor li.richeditor2184311873__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)))}.richeditor2184311873__paragraph-one,.richeditor2184311873__editor li.richeditor2184311873__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)))}.richeditor2184311873__unstyled,.richeditor2184311873__editor li.richeditor2184311873__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)))}.richeditor2184311873__paragraph-three,.richeditor2184311873__editor li.richeditor2184311873__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)))}.richeditor2184311873__editor li.richeditor2184311873__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)))}.richeditor2184311873__editor li.richeditor2184311873__header-one:first-child~li::marker{line-height:var(--rt-h1-fontSize, 72px)}.richeditor2184311873__editor li.richeditor2184311873__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)))}.richeditor2184311873__editor li.richeditor2184311873__header-two:first-child~li::marker{line-height:var(--rt-h2-fontSize, 42px)}.richeditor2184311873__editor li.richeditor2184311873__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)))}.richeditor2184311873__editor li.richeditor2184311873__header-three:first-child~li::marker{line-height:var(--rt-h3-fontSize, 38px)}.richeditor2184311873__editor li.richeditor2184311873__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)))}.richeditor2184311873__editor li.richeditor2184311873__header-four:first-child~li::marker{line-height:var(--rt-h4-fontSize, 34px)}.richeditor2184311873__editor li.richeditor2184311873__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)))}.richeditor2184311873__editor li.richeditor2184311873__header-five:first-child~li::marker{line-height:var(--rt-h5-fontSize, 28px)}.richeditor2184311873__editor li.richeditor2184311873__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)))}.richeditor2184311873__editor li.richeditor2184311873__header-six:first-child~li::marker{line-height:var(--rt-h6-fontSize, 22px)}.richeditor2184311873__editor li.richeditor2184311873__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)))}.richeditor2184311873__editor li.richeditor2184311873__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)))}.richeditor2184311873__editor li.richeditor2184311873__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}.richeditor2184311873__align-left{text-align:left;align-self:flex-start}.richeditor2184311873__align-right{text-align:right;align-self:flex-end}.richeditor2184311873__align-center{text-align:center;align-self:center}.richeditor2184311873__align-justify{text-align:justify;align-self:stretch}.richeditor2184311873__withMargin{display:inline-block}.richeditor2184311873__dir-rtl,.richeditor2184311873__editor .public-DraftStyleDefault-rtl{direction:rtl}.richeditor2184311873__editor .public-DraftStyleDefault-listRTL{direction:rtl;text-align:right;max-width:100%}
1
+ .addressinput2635111141__tableAddressInput{height:36px!important;margin-left:-1px;display:flex!important;align-items:center;width:100%}.addressinput2635111141__tableAddressInput>div{padding:0!important;width:100%}.addressinput2635111141__tableAddressInput:focus-within{margin-left:2px}.actionsmenu2195877707__action{margin-left:calc(var(--wds-space-100, 6px)*-1)}.formaudiofield2679064113__addItem{height:120px!important;box-sizing:border-box}.formaudiofield2679064113__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)}.formaudiofield2679064113__addItem.formaudiofield2679064113--disabled{pointer-events:auto!important}.formaudiofield2679064113__addItem.formaudiofield2679064113--error{border:1px solid var(--wds-color-red-100, var(--wsr-color-R10))!important}.formaudiofield2679064113__mediaTitle{line-height:18px!important}.audioplayer1268238730__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}.cellcolorview3095201269__hashPrefix{color:var(--wsr-color-D40, #868aa5);font-size:14px;font-weight:300;line-height:1}.colorview1449056233__view{width:100%}.colorview1449056233__fillPreview{flex-shrink:0}.colorview1449056233__view .colorview1449056233__fillPreview{width:18px;height:18px;min-width:18px!important;min-height:18px!important}.deletedialog1632627202__layout{max-width:510px!important}.formdocumentfield4015660021__viewWrapper{border-radius:var(--wds-border-radius-300, calc(2px * 3));border:1px solid var(--wds-color-blue-300, var(--wsr-color-B30))}.formdocumentfield4015660021__viewWrapper:hover{background:var(--wds-color-blue-500, var(--wsr-color-B50));cursor:pointer}.formdocumentfield4015660021__textWidth{max-width:calc(100% - 196px)}.formdocumentfield4015660021__documentLoader{padding-top:21px;padding-bottom:21px}.formdocumentfield4015660021__addDocument{padding-top:17px!important;padding-bottom:17px!important}.formdocumentfield4015660021__addDocument.formdocumentfield4015660021--error{border:1px solid var(--wds-color-red-100, var(--wsr-color-R10))!important}.formdocumentfield4015660021__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))}.exclamation2530856917__exclamation{display:flex;justify-content:center;align-items:center;box-sizing:border-box;border-radius:3px;cursor:pointer}.exclamation2530856917__exclamation.exclamation2530856917---type-7-warning:not(.exclamation2530856917--customSize),.exclamation2530856917__exclamation.exclamation2530856917---type-5-error:not(.exclamation2530856917--customSize){width:24px;height:24px}.exclamation2530856917__exclamation.exclamation2530856917---type-7-warning{color:var(--wds-color-fill-warning-primary)}.exclamation2530856917__exclamation.exclamation2530856917---type-5-error{color:var(--wds-color-fill-destructive-primary)}.exclamation2530856917__actions{display:flex;flex-direction:column}.exclamation2530856917__action{white-space:normal!important;height:auto!important;text-align:left;gap:6px}.exclamation2530856917__action+.exclamation2530856917__action{margin-top:6px}.exclamation2530856917__action.exclamation2530856917--accented{color:var(--wds-color-blue-100)}.exclamation2530856917__action.exclamation2530856917--accented:hover{color:var(--wds-color-blue-200)}.highlightedtext2556507628__root.highlightedtext2556507628--highlightedBackground{animation:highlightedtext2556507628__highlighted 150ms ease-out 1 forwards}.highlightedtext2556507628__substring.highlightedtext2556507628--isHighlighted{animation:highlightedtext2556507628__highlighted-match 150ms ease-out 50ms 1 forwards}@keyframes highlightedtext2556507628__highlighted{0%{background-color:transparent}to{background-color:var(--wds-color-yellow-400, var(--wsr-color-Y40))}}@keyframes highlightedtext2556507628__highlighted-match{0%{background-color:transparent}to{background-color:var(--wds-color-yellow-200, var(--wsr-color-Y20))}}.thumbnailreplaceoverlay2702031271__root{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.4);border-radius:3px}.thumbnailreplaceoverlay2702031271__icon{color:#fff;width:18px;height:18px}.cellmediaeditshell2544007675__root{width:100%;height:100%}.pasteurlbutton3035244380__root{margin-top:6px}.pasteurlbutton3035244380__iconButtonTooltip{height:max-content}.pasteurlbutton3035244380__iconButton{width:24px;height:24px}.formmediagalleryfield1873848574__container{display:flex;min-height:128px;max-height:259px}.formmediagalleryfield1873848574__viewBox{display:flex;height:100%;width:100%;flex-wrap:wrap}.formmediagalleryfield1873848574__addItemWrapper{height:128px;width:100%;box-sizing:border-box}.formmediagalleryfield1873848574__addItem{box-sizing:border-box}.formmediagalleryfield1873848574__overlay{width:initial!important;min-width:382px!important}.formmediagalleryfield1873848574__image.formmediagalleryfield1873848574--withMarginRight{margin-right:3px}.formmediagalleryfield1873848574__image.formmediagalleryfield1873848574--withMarginTop{margin-top:3px}.formmediagalleryfield1873848574__previewImage{max-height:calc(100% - 12px)!important}.formmediagalleryfield1873848574__previewVideo{border-radius:8px;max-width:100%;max-height:calc(100% - 12px)!important}.mediaimage3359962544__root{display:flex;align-items:center;flex-shrink:0;position:relative;box-sizing:border-box}.mediaimage3359962544__root.mediaimage3359962544--error{--mediaimage3359962544-from:calc(50% - 0.5px);--mediaimage3359962544-to:calc(50% + 0.5px);background-image:linear-gradient(to bottom right,transparent var(--mediaimage3359962544-from),var(--wds-color-red-200, var(--wsr-color-R20)) var(--mediaimage3359962544-from),var(--wds-color-red-200, var(--wsr-color-R20)) var(--mediaimage3359962544-to),transparent var(--mediaimage3359962544-to))}.mediaimage3359962544__root.mediaimage3359962544--error>*{opacity:0}.overlay4194563916__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))}.overlay4194563916__iconOverlay.overlay4194563916---size-5-small{width:20px;height:20px}.overlay4194563916__iconOverlay.overlay4194563916---size-6-medium{width:24px;height:24px}.overlay4194563916__iconOverlay.overlay4194563916---size-5-large{width:28px;height:28px}.overlay4194563916__iconOverlay.overlay4194563916---placement-7-topLeft{top:2px;left:2px}.overlay4194563916__iconOverlay.overlay4194563916---placement-10-bottomLeft{bottom:2px;left:2px}.medialoader4147698989__loader{border-radius:6px}.medialoader4147698989__loader.medialoader4147698989--isDashed{border:dashed 1px var(--wds-color-blue-300, var(--wsr-color-B30))}.medialoader4147698989__loader.medialoader4147698989--isSolid{border:solid 1px var(--wds-color-blue-300, var(--wsr-color-B30))}.mediatag4013359346__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))}.cellmultidocumentedit765450385__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}.formmultidocument947287774__viewRoot{border-radius:var(--wds-border-radius-300, calc(2px * 3));border:1px solid var(--wds-color-blue-300, var(--wsr-color-B30))}.formmultidocument947287774__singleViewWrapper{border-radius:0;border-bottom:1px solid var(--wds-color-neutral-600, var(--wsr-color-D60));background-color:transparent!important}.formmultidocument947287774__viewRoot>div:first-child .formmultidocument947287774__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))}.formmultidocument947287774__singleViewWrapper:hover{background-color:var(--wds-color-blue-500, var(--wsr-color-B50))!important}.formmultidocument947287774__singleViewWrapper:focus-visible{border-bottom:1px solid transparent;position:relative;z-index:1}.formmultidocument947287774__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))}.formmultidocument947287774__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))}.cellmultireferenceinput3144474220__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}.cellreferenceinput2058322555__root{width:100%;height:100%;display:flex;align-items:center}.cellreferenceinput2058322555__autocomplete{width:100%}.richcontentdefaultvalueinput2476823092__richContentEditorContainer .richcontentdefaultvalueinput2476823092__editor{max-height:calc(40vh - var(--topToolbarHeight) - var(--bottomToolbarHeight))}.richcontentforminput983643365__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))}.richcontentforminput983643365__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))}.richcontentforminput983643365__root .richcontentforminput983643365__editor{overflow-y:auto;max-height:calc(80vh - var(--topToolbarHeight) - var(--bottomToolbarHeight))}.richcontentformreadonlyinput2062214037__root{outline:0;box-sizing:border-box;border:1px solid var(--wds-color-black-600);border-radius:var(--wds-border-radius-300)}.richcontentformreadonlyinput2062214037__root:focus-within{border:1px solid var(--wds-color-blue-100);box-shadow:var(--wds-input-shadow-focus-standard)}.fullscreenmodal2650765642__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}.publishloader1621890228__publishLoader{position:absolute;top:0;left:0;width:100%;height:100%;background:var(--wds-color-white);z-index:5000;border-radius:inherit}.togglefullscreenbutton3465920086__root{z-index:5;box-sizing:border-box;position:absolute;right:0;top:calc(50% - 16px)!important;padding-right:3px}.togglefullscreenbutton3465920086__root button{border-radius:6px!important}.richcontenteditor3270542356__root{position:relative;font-family:var(--wds-font-family-default, Madefor, Helvetica Neue, Helvetica, Arial, sans-serif)}.richcontenteditor3270542356__root,.richcontenteditor3270542356__toolbarContainer,.richcontenteditor3270542356__footerToolbarContainer{width:100%;box-sizing:border-box}.richcontenteditor3270542356__toolbarContainer div{box-sizing:border-box}.richcontenteditor3270542356__toolbarAndFullScreenButtonWrapper{display:flex;position:relative}.richcontenteditor3270542356__editor{box-sizing:border-box;padding:36px 24px 36px 55px}.richcontenteditor3270542356__modalEditor{display:flex;flex-direction:column;flex:1;height:100%}.richcontenteditor3270542356__modalEditor .richcontenteditor3270542356__editor{overflow-y:auto;flex:1;min-width:592px;box-sizing:border-box}.richcontenteditor3270542356__modalEditor .richcontenteditor3270542356__footerToolbarContainer{margin-top:9px}.richcontenteditor3270542356__toolbarContainer button[data-hook~=text-button-headings]>span{display:inline-flex;padding-inline-end:3px!important}.richcontenteditor3270542356__toolbarContainer button[data-hook~=text-button-ai]>span{padding-inline-end:9px!important}.richcontenttoolbar4022405848__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}.richcontenttoolbar4022405848__toolbarButton{line-height:40px;background:0 0;border:0;cursor:pointer;display:flex;align-items:center;justify-content:center;margin:0 5px 0 0}.richcontenttoolbar4022405848__toolbarButton:disabled{color:graytext}.richcontenttoolbar4022405848__separator{width:1px;height:20px;margin:0 8px 0 3px;background:rgba(51,51,51,.1)}.richcontenttoolbar4022405848__toolbar label{padding:0 8px}.richcontentviewer2116721712__root{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;width:100%;min-height:36px}.richcontentviewer2116721712__root.richcontentviewer2116721712--isFullScreen{padding:12px 24px}.richcontentviewer2116721712__root:not(.richcontentviewer2116721712--isFullScreen){padding:6px 24px 6px 12px}.richcontentviewer2116721712__root ToggleButton{margin:0;padding:0;border:0;position:absolute;top:2px!important;right:2px;width:30px;height:30px}.richcontentviewer2116721712__viewer{height:calc(100% - 36px);width:100%}.richcontentviewer2116721712__modalViewer{min-width:592px;overflow:auto}.richtexteditor3216298027__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))}.richtexteditor3216298027__root.richtexteditor3216298027---border-4-none{border:0}.richtexteditor3216298027__root.richtexteditor3216298027---border-8-standard{border:1px solid var(--wds-input-border-color, var(--wsr-color-B40, #D6E6FE))}.richtexteditor3216298027__root.richtexteditor3216298027---border-8-standard:focus,.richtexteditor3216298027__root.richtexteditor3216298027---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))}.richtexteditor3216298027__root.richtexteditor3216298027---border-8-standard.richtexteditor3216298027---status-5-error{border:1px solid var(--wds-color-border-destructive-secondary-active, var(--wsr-color-R10, #E62214))}.richtexteditor3216298027__root.richtexteditor3216298027---border-8-standard.richtexteditor3216298027---status-5-error:focus,.richtexteditor3216298027__root.richtexteditor3216298027---border-8-standard.richtexteditor3216298027---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))}.richtexteditor3216298027__root.richtexteditor3216298027---border-8-standard.richtexteditor3216298027---status-7-warning{border:1px solid var(--wds-color-border-warning-secondary-active, var(--wsr-color-Y10, #FFB700))}.richtexteditor3216298027__root.richtexteditor3216298027---border-8-standard.richtexteditor3216298027---status-7-warning:focus,.richtexteditor3216298027__root.richtexteditor3216298027---border-8-standard.richtexteditor3216298027---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))}.richtexteditor3216298027__nativeInput{position:absolute;opacity:0;padding:0;margin:0;border:0;width:0;height:0}.richtexteditor3216298027__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))}.richtexteditor3216298027__editor.richtexteditor3216298027--isFullScreen{max-width:782px;min-width:582px;background:var(--wds-color-black-700)}.richtexteditor3216298027__editor:not(.richtexteditor3216298027--isFullScreen){max-height:80vh}.richtexteditor3216298027__editor>div{flex:1;max-width:100%}.toolbar378096095__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}.toolbar378096095__item{display:flex;margin-right:12px}.toolbar378096095__item svg,.toolbar378096095__item svg path,.toolbar378096095__item svg text{color:inherit;fill:currentColor}.toolbar378096095__separator{display:inline-flex;margin-right:12px;border-left:1px solid #ddd;align-self:stretch}.toolbar378096095__clearFormatting{margin-left:auto}.toolbar378096095__fullScreen{margin-right:0}.toolbar378096095__dropdownItemContent{height:36px;width:100%;display:flex;gap:12px;justify-content:space-between;align-items:center}.toolbar378096095__dropdownItemContent.toolbar378096095--selected .toolbar378096095__dropdownItemTitle,.toolbar378096095__dropdownItemContent.toolbar378096095--selected .toolbar378096095__dropdownItemSubtitle{color:var(--wds-color-white)!important}.toolbar378096095__dropdownItemSubtitle{color:var(--wds-color-black-400)!important;padding-right:12px;flex-shrink:0}.toolbar378096095__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}.toolbar378096095__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}.toolbar378096095__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}.toolbar378096095__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}.toolbar378096095__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}.toolbar378096095__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}.toolbar378096095__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}.toolbar378096095__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}.toolbar378096095__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}.textview3876692621__textView::after{content:"";display:block}.richeditor1552528958__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))}.richeditor1552528958__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))}.richeditor1552528958__editor .DraftEditor-root{width:100%;height:100%}.richeditor1552528958__editor .DraftEditor-root [data-contents]{overflow:auto}.richeditor1552528958__editor .DraftEditor-editorContainer{display:flex;min-height:100%;background:#fff}.richeditor1552528958__editor .public-DraftEditor-content{padding:12px 24px 24px;min-height:100%;width:100%;box-sizing:border-box}.richeditor1552528958__editor .public-DraftEditor-content ol,.richeditor1552528958__editor .public-DraftEditor-content ul{display:flex;flex-direction:column;padding:0}.richeditor1552528958__editor .public-DraftEditor-content a,.richeditor1552528958__editor .public-DraftEditor-content a:visited{color:inherit;text-decoration:none}.richeditor1552528958__header-one:not(li),.richeditor1552528958__header-two:not(li),.richeditor1552528958__header-three:not(li),.richeditor1552528958__header-four:not(li),.richeditor1552528958__header-five:not(li),.richeditor1552528958__header-six:not(li){margin-block:0;margin:0}.richeditor1552528958__header-one,.richeditor1552528958__editor li.richeditor1552528958__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)))}.richeditor1552528958__header-two,.richeditor1552528958__editor li.richeditor1552528958__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)))}.richeditor1552528958__header-three,.richeditor1552528958__editor li.richeditor1552528958__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)))}.richeditor1552528958__header-four,.richeditor1552528958__editor li.richeditor1552528958__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)))}.richeditor1552528958__header-five,.richeditor1552528958__editor li.richeditor1552528958__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)))}.richeditor1552528958__header-six,.richeditor1552528958__editor li.richeditor1552528958__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)))}.richeditor1552528958__paragraph-one,.richeditor1552528958__editor li.richeditor1552528958__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)))}.richeditor1552528958__unstyled,.richeditor1552528958__editor li.richeditor1552528958__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)))}.richeditor1552528958__paragraph-three,.richeditor1552528958__editor li.richeditor1552528958__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)))}.richeditor1552528958__editor li.richeditor1552528958__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)))}.richeditor1552528958__editor li.richeditor1552528958__header-one:first-child~li::marker{line-height:var(--rt-h1-fontSize, 72px)}.richeditor1552528958__editor li.richeditor1552528958__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)))}.richeditor1552528958__editor li.richeditor1552528958__header-two:first-child~li::marker{line-height:var(--rt-h2-fontSize, 42px)}.richeditor1552528958__editor li.richeditor1552528958__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)))}.richeditor1552528958__editor li.richeditor1552528958__header-three:first-child~li::marker{line-height:var(--rt-h3-fontSize, 38px)}.richeditor1552528958__editor li.richeditor1552528958__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)))}.richeditor1552528958__editor li.richeditor1552528958__header-four:first-child~li::marker{line-height:var(--rt-h4-fontSize, 34px)}.richeditor1552528958__editor li.richeditor1552528958__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)))}.richeditor1552528958__editor li.richeditor1552528958__header-five:first-child~li::marker{line-height:var(--rt-h5-fontSize, 28px)}.richeditor1552528958__editor li.richeditor1552528958__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)))}.richeditor1552528958__editor li.richeditor1552528958__header-six:first-child~li::marker{line-height:var(--rt-h6-fontSize, 22px)}.richeditor1552528958__editor li.richeditor1552528958__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)))}.richeditor1552528958__editor li.richeditor1552528958__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)))}.richeditor1552528958__editor li.richeditor1552528958__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}.richeditor1552528958__align-left{text-align:left;align-self:flex-start}.richeditor1552528958__align-right{text-align:right;align-self:flex-end}.richeditor1552528958__align-center{text-align:center;align-self:center}.richeditor1552528958__align-justify{text-align:justify;align-self:stretch}.richeditor1552528958__withMargin{display:inline-block}.richeditor1552528958__dir-rtl,.richeditor1552528958__editor .public-DraftStyleDefault-rtl{direction:rtl}.richeditor1552528958__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
+ };