@transferwise/components 0.0.0-experimental-369191f → 0.0.0-experimental-77bcd0d

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 (54) hide show
  1. package/build/field/Field.js +63 -32
  2. package/build/field/Field.js.map +1 -1
  3. package/build/field/Field.messages.js +14 -0
  4. package/build/field/Field.messages.js.map +1 -0
  5. package/build/field/Field.messages.mjs +10 -0
  6. package/build/field/Field.messages.mjs.map +1 -0
  7. package/build/field/Field.mjs +65 -34
  8. package/build/field/Field.mjs.map +1 -1
  9. package/build/i18n/en.json +1 -0
  10. package/build/i18n/en.json.js +1 -0
  11. package/build/i18n/en.json.js.map +1 -1
  12. package/build/i18n/en.json.mjs +1 -0
  13. package/build/i18n/en.json.mjs.map +1 -1
  14. package/build/inputs/TextArea.js +43 -0
  15. package/build/inputs/TextArea.js.map +1 -1
  16. package/build/inputs/TextArea.mjs +45 -2
  17. package/build/inputs/TextArea.mjs.map +1 -1
  18. package/build/inputs/contexts.js +16 -0
  19. package/build/inputs/contexts.js.map +1 -1
  20. package/build/inputs/contexts.mjs +16 -2
  21. package/build/inputs/contexts.mjs.map +1 -1
  22. package/build/main.css +74 -61
  23. package/build/styles/css/neptune.css +53 -58
  24. package/build/styles/field/Field.css +19 -3
  25. package/build/styles/less/neptune-tokens.less +2 -2
  26. package/build/styles/main.css +74 -61
  27. package/build/styles/props/neptune-tokens.css +1 -1
  28. package/build/styles/styles/less/core/viewport-themes.css +42 -46
  29. package/build/styles/styles/less/neptune.css +53 -58
  30. package/build/types/field/Field.d.ts.map +1 -1
  31. package/build/types/field/Field.messages.d.ts +8 -0
  32. package/build/types/field/Field.messages.d.ts.map +1 -0
  33. package/build/types/inputs/TextArea.d.ts.map +1 -1
  34. package/build/types/inputs/contexts.d.ts +6 -0
  35. package/build/types/inputs/contexts.d.ts.map +1 -1
  36. package/build/types/test-utils/index.d.ts +2 -0
  37. package/build/types/test-utils/index.d.ts.map +1 -1
  38. package/package.json +4 -4
  39. package/src/field/Field.css +19 -3
  40. package/src/field/Field.less +17 -3
  41. package/src/field/Field.messages.ts +8 -0
  42. package/src/field/Field.story.tsx +5 -1
  43. package/src/field/Field.test.tsx +90 -0
  44. package/src/field/Field.tsx +84 -37
  45. package/src/i18n/en.json +1 -0
  46. package/src/inputs/TextArea.story.tsx +56 -0
  47. package/src/inputs/TextArea.test.story.tsx +129 -0
  48. package/src/inputs/TextArea.tsx +54 -3
  49. package/src/inputs/contexts.tsx +18 -1
  50. package/src/main.css +74 -61
  51. package/src/styles/less/core/viewport-themes.css +42 -46
  52. package/src/styles/less/core/viewport-themes.less +45 -2
  53. package/src/styles/less/neptune.css +53 -58
  54. package/src/textareaWithDisplayFormat/TextareaWithDisplayFormat.story.tsx +1 -0
@@ -25,6 +25,20 @@ function useInputAttributes({
25
25
  function useFieldLabelRef() {
26
26
  return React.useContext(FieldLabelContext)?.ref;
27
27
  }
28
+ const TextareaCharacterCountContext = /*#__PURE__*/React.createContext(undefined);
29
+ const TextareaCharacterCountProvider = TextareaCharacterCountContext.Provider;
30
+ function useTextareaCharacterCount(current, max) {
31
+ const setCharacterCount = React.useContext(TextareaCharacterCountContext);
32
+ React.useEffect(() => {
33
+ if (setCharacterCount && max != null) {
34
+ setCharacterCount({
35
+ current,
36
+ max
37
+ });
38
+ return () => setCharacterCount(null);
39
+ }
40
+ }, [setCharacterCount, current, max]);
41
+ }
28
42
  function withInputAttributes(Component, args) {
29
43
  function ComponentWithInputAttributes(props) {
30
44
  return /*#__PURE__*/jsxRuntime.jsx(Component, {
@@ -40,7 +54,9 @@ exports.FieldLabelContextProvider = FieldLabelContextProvider;
40
54
  exports.InputDescribedByProvider = InputDescribedByProvider;
41
55
  exports.InputIdContextProvider = InputIdContextProvider;
42
56
  exports.InputInvalidProvider = InputInvalidProvider;
57
+ exports.TextareaCharacterCountProvider = TextareaCharacterCountProvider;
43
58
  exports.useFieldLabelRef = useFieldLabelRef;
44
59
  exports.useInputAttributes = useInputAttributes;
60
+ exports.useTextareaCharacterCount = useTextareaCharacterCount;
45
61
  exports.withInputAttributes = withInputAttributes;
46
62
  //# sourceMappingURL=contexts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contexts.js","sources":["../../src/inputs/contexts.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\ntype FieldLabelContextType = {\n id?: string;\n ref?: React.RefObject<HTMLLabelElement>;\n};\n\nconst FieldLabelContext = createContext<FieldLabelContextType | undefined>(undefined);\nexport const FieldLabelContextProvider = FieldLabelContext.Provider;\n\nconst InputIdContext = createContext<string | undefined>(undefined);\nexport const InputIdContextProvider = InputIdContext.Provider;\n\nconst InputDescribedByContext = createContext<string | undefined>(undefined);\nexport const InputDescribedByProvider = InputDescribedByContext.Provider;\n\nconst InputInvalidContext = createContext<boolean | undefined>(undefined);\nexport const InputInvalidProvider = InputInvalidContext.Provider;\n\ninterface UseInputAttributesArgs {\n /** Set this to `true` if the underlying element is not directly [labelable as per the HTML specification](https://html.spec.whatwg.org/multipage/forms.html#category-label). */\n nonLabelable?: boolean;\n}\n\nexport function useInputAttributes({ nonLabelable }: UseInputAttributesArgs = {}) {\n const labelId = useContext(FieldLabelContext)?.id;\n return {\n id: useContext(InputIdContext),\n 'aria-labelledby': nonLabelable ? labelId : undefined,\n 'aria-describedby': useContext(InputDescribedByContext),\n 'aria-invalid': useContext(InputInvalidContext),\n } satisfies React.HTMLAttributes<HTMLElement>;\n}\n\nexport function useFieldLabelRef() {\n return useContext(FieldLabelContext)?.ref;\n}\n\nexport interface WithInputAttributesProps {\n inputAttributes: ReturnType<typeof useInputAttributes>;\n}\n\nexport function withInputAttributes<T extends Partial<WithInputAttributesProps>>(\n Component: React.ComponentType<T>,\n args?: UseInputAttributesArgs,\n) {\n function ComponentWithInputAttributes(props: Omit<T, keyof WithInputAttributesProps>) {\n return <Component inputAttributes={useInputAttributes(args)} {...(props as T)} />;\n }\n\n ComponentWithInputAttributes.displayName = `withInputAttributes(${Component.displayName || Component.name || 'Component'})`;\n\n return ComponentWithInputAttributes;\n}\n"],"names":["FieldLabelContext","createContext","undefined","FieldLabelContextProvider","Provider","InputIdContext","InputIdContextProvider","InputDescribedByContext","InputDescribedByProvider","InputInvalidContext","InputInvalidProvider","useInputAttributes","nonLabelable","labelId","useContext","id","useFieldLabelRef","ref","withInputAttributes","Component","args","ComponentWithInputAttributes","props","_jsx","inputAttributes","displayName","name"],"mappings":";;;;;AAOA,MAAMA,iBAAiB,gBAAGC,mBAAa,CAAoCC,SAAS,CAAC;AAC9E,MAAMC,yBAAyB,GAAGH,iBAAiB,CAACI;AAE3D,MAAMC,cAAc,gBAAGJ,mBAAa,CAAqBC,SAAS,CAAC;AAC5D,MAAMI,sBAAsB,GAAGD,cAAc,CAACD;AAErD,MAAMG,uBAAuB,gBAAGN,mBAAa,CAAqBC,SAAS,CAAC;AACrE,MAAMM,wBAAwB,GAAGD,uBAAuB,CAACH;AAEhE,MAAMK,mBAAmB,gBAAGR,mBAAa,CAAsBC,SAAS,CAAC;AAClE,MAAMQ,oBAAoB,GAAGD,mBAAmB,CAACL;SAOxCO,kBAAkBA,CAAC;AAAEC,EAAAA;IAAyC,EAAE,EAAA;AAC9E,EAAA,MAAMC,OAAO,GAAGC,gBAAU,CAACd,iBAAiB,CAAC,EAAEe,EAAE;EACjD,OAAO;AACLA,IAAAA,EAAE,EAAED,gBAAU,CAACT,cAAc,CAAC;AAC9B,IAAA,iBAAiB,EAAEO,YAAY,GAAGC,OAAO,GAAGX,SAAS;AACrD,IAAA,kBAAkB,EAAEY,gBAAU,CAACP,uBAAuB,CAAC;IACvD,cAAc,EAAEO,gBAAU,CAACL,mBAAmB;GACH;AAC/C;SAEgBO,gBAAgBA,GAAA;AAC9B,EAAA,OAAOF,gBAAU,CAACd,iBAAiB,CAAC,EAAEiB,GAAG;AAC3C;AAMM,SAAUC,mBAAmBA,CACjCC,SAAiC,EACjCC,IAA6B,EAAA;EAE7B,SAASC,4BAA4BA,CAACC,KAA8C,EAAA;IAClF,oBAAOC,cAAA,CAACJ,SAAS,EAAA;AAACK,MAAAA,eAAe,EAAEb,kBAAkB,CAACS,IAAI,CAAE;MAAA,GAAME;AAAW,MAAI;AACnF,EAAA;AAEAD,EAAAA,4BAA4B,CAACI,WAAW,GAAG,CAAA,oBAAA,EAAuBN,SAAS,CAACM,WAAW,IAAIN,SAAS,CAACO,IAAI,IAAI,WAAW,CAAA,CAAA,CAAG;AAE3H,EAAA,OAAOL,4BAA4B;AACrC;;;;;;;;;;"}
1
+ {"version":3,"file":"contexts.js","sources":["../../src/inputs/contexts.tsx"],"sourcesContent":["import { createContext, useContext, useEffect } from 'react';\n\ntype FieldLabelContextType = {\n id?: string;\n ref?: React.RefObject<HTMLLabelElement>;\n};\n\nconst FieldLabelContext = createContext<FieldLabelContextType | undefined>(undefined);\nexport const FieldLabelContextProvider = FieldLabelContext.Provider;\n\nconst InputIdContext = createContext<string | undefined>(undefined);\nexport const InputIdContextProvider = InputIdContext.Provider;\n\nconst InputDescribedByContext = createContext<string | undefined>(undefined);\nexport const InputDescribedByProvider = InputDescribedByContext.Provider;\n\nconst InputInvalidContext = createContext<boolean | undefined>(undefined);\nexport const InputInvalidProvider = InputInvalidContext.Provider;\n\ninterface UseInputAttributesArgs {\n /** Set this to `true` if the underlying element is not directly [labelable as per the HTML specification](https://html.spec.whatwg.org/multipage/forms.html#category-label). */\n nonLabelable?: boolean;\n}\n\nexport function useInputAttributes({ nonLabelable }: UseInputAttributesArgs = {}) {\n const labelId = useContext(FieldLabelContext)?.id;\n return {\n id: useContext(InputIdContext),\n 'aria-labelledby': nonLabelable ? labelId : undefined,\n 'aria-describedby': useContext(InputDescribedByContext),\n 'aria-invalid': useContext(InputInvalidContext),\n } satisfies React.HTMLAttributes<HTMLElement>;\n}\n\nexport function useFieldLabelRef() {\n return useContext(FieldLabelContext)?.ref;\n}\n\nexport type TextareaCharacterCountState = { current: number; max: number } | null;\n\nconst TextareaCharacterCountContext = createContext<\n ((state: TextareaCharacterCountState) => void) | undefined\n>(undefined);\nexport const TextareaCharacterCountProvider = TextareaCharacterCountContext.Provider;\n\nexport function useTextareaCharacterCount(current: number, max: number | undefined) {\n const setCharacterCount = useContext(TextareaCharacterCountContext);\n useEffect(() => {\n if (setCharacterCount && max != null) {\n setCharacterCount({ current, max });\n return () => setCharacterCount(null);\n }\n }, [setCharacterCount, current, max]);\n}\n\nexport interface WithInputAttributesProps {\n inputAttributes: ReturnType<typeof useInputAttributes>;\n}\n\nexport function withInputAttributes<T extends Partial<WithInputAttributesProps>>(\n Component: React.ComponentType<T>,\n args?: UseInputAttributesArgs,\n) {\n function ComponentWithInputAttributes(props: Omit<T, keyof WithInputAttributesProps>) {\n return <Component inputAttributes={useInputAttributes(args)} {...(props as T)} />;\n }\n\n ComponentWithInputAttributes.displayName = `withInputAttributes(${Component.displayName || Component.name || 'Component'})`;\n\n return ComponentWithInputAttributes;\n}\n"],"names":["FieldLabelContext","createContext","undefined","FieldLabelContextProvider","Provider","InputIdContext","InputIdContextProvider","InputDescribedByContext","InputDescribedByProvider","InputInvalidContext","InputInvalidProvider","useInputAttributes","nonLabelable","labelId","useContext","id","useFieldLabelRef","ref","TextareaCharacterCountContext","TextareaCharacterCountProvider","useTextareaCharacterCount","current","max","setCharacterCount","useEffect","withInputAttributes","Component","args","ComponentWithInputAttributes","props","_jsx","inputAttributes","displayName","name"],"mappings":";;;;;AAOA,MAAMA,iBAAiB,gBAAGC,mBAAa,CAAoCC,SAAS,CAAC;AAC9E,MAAMC,yBAAyB,GAAGH,iBAAiB,CAACI;AAE3D,MAAMC,cAAc,gBAAGJ,mBAAa,CAAqBC,SAAS,CAAC;AAC5D,MAAMI,sBAAsB,GAAGD,cAAc,CAACD;AAErD,MAAMG,uBAAuB,gBAAGN,mBAAa,CAAqBC,SAAS,CAAC;AACrE,MAAMM,wBAAwB,GAAGD,uBAAuB,CAACH;AAEhE,MAAMK,mBAAmB,gBAAGR,mBAAa,CAAsBC,SAAS,CAAC;AAClE,MAAMQ,oBAAoB,GAAGD,mBAAmB,CAACL;SAOxCO,kBAAkBA,CAAC;AAAEC,EAAAA;IAAyC,EAAE,EAAA;AAC9E,EAAA,MAAMC,OAAO,GAAGC,gBAAU,CAACd,iBAAiB,CAAC,EAAEe,EAAE;EACjD,OAAO;AACLA,IAAAA,EAAE,EAAED,gBAAU,CAACT,cAAc,CAAC;AAC9B,IAAA,iBAAiB,EAAEO,YAAY,GAAGC,OAAO,GAAGX,SAAS;AACrD,IAAA,kBAAkB,EAAEY,gBAAU,CAACP,uBAAuB,CAAC;IACvD,cAAc,EAAEO,gBAAU,CAACL,mBAAmB;GACH;AAC/C;SAEgBO,gBAAgBA,GAAA;AAC9B,EAAA,OAAOF,gBAAU,CAACd,iBAAiB,CAAC,EAAEiB,GAAG;AAC3C;AAIA,MAAMC,6BAA6B,gBAAGjB,mBAAa,CAEjDC,SAAS,CAAC;AACL,MAAMiB,8BAA8B,GAAGD,6BAA6B,CAACd;AAEtE,SAAUgB,yBAAyBA,CAACC,OAAe,EAAEC,GAAuB,EAAA;AAChF,EAAA,MAAMC,iBAAiB,GAAGT,gBAAU,CAACI,6BAA6B,CAAC;AACnEM,EAAAA,eAAS,CAAC,MAAK;AACb,IAAA,IAAID,iBAAiB,IAAID,GAAG,IAAI,IAAI,EAAE;AACpCC,MAAAA,iBAAiB,CAAC;QAAEF,OAAO;AAAEC,QAAAA;AAAG,OAAE,CAAC;AACnC,MAAA,OAAO,MAAMC,iBAAiB,CAAC,IAAI,CAAC;AACtC,IAAA;EACF,CAAC,EAAE,CAACA,iBAAiB,EAAEF,OAAO,EAAEC,GAAG,CAAC,CAAC;AACvC;AAMM,SAAUG,mBAAmBA,CACjCC,SAAiC,EACjCC,IAA6B,EAAA;EAE7B,SAASC,4BAA4BA,CAACC,KAA8C,EAAA;IAClF,oBAAOC,cAAA,CAACJ,SAAS,EAAA;AAACK,MAAAA,eAAe,EAAEpB,kBAAkB,CAACgB,IAAI,CAAE;MAAA,GAAME;AAAW,MAAI;AACnF,EAAA;AAEAD,EAAAA,4BAA4B,CAACI,WAAW,GAAG,CAAA,oBAAA,EAAuBN,SAAS,CAACM,WAAW,IAAIN,SAAS,CAACO,IAAI,IAAI,WAAW,CAAA,CAAA,CAAG;AAE3H,EAAA,OAAOL,4BAA4B;AACrC;;;;;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { createContext, useContext } from 'react';
1
+ import { createContext, useContext, useEffect } from 'react';
2
2
  import { jsx } from 'react/jsx-runtime';
3
3
 
4
4
  const FieldLabelContext = /*#__PURE__*/createContext(undefined);
@@ -23,6 +23,20 @@ function useInputAttributes({
23
23
  function useFieldLabelRef() {
24
24
  return useContext(FieldLabelContext)?.ref;
25
25
  }
26
+ const TextareaCharacterCountContext = /*#__PURE__*/createContext(undefined);
27
+ const TextareaCharacterCountProvider = TextareaCharacterCountContext.Provider;
28
+ function useTextareaCharacterCount(current, max) {
29
+ const setCharacterCount = useContext(TextareaCharacterCountContext);
30
+ useEffect(() => {
31
+ if (setCharacterCount && max != null) {
32
+ setCharacterCount({
33
+ current,
34
+ max
35
+ });
36
+ return () => setCharacterCount(null);
37
+ }
38
+ }, [setCharacterCount, current, max]);
39
+ }
26
40
  function withInputAttributes(Component, args) {
27
41
  function ComponentWithInputAttributes(props) {
28
42
  return /*#__PURE__*/jsx(Component, {
@@ -34,5 +48,5 @@ function withInputAttributes(Component, args) {
34
48
  return ComponentWithInputAttributes;
35
49
  }
36
50
 
37
- export { FieldLabelContextProvider, InputDescribedByProvider, InputIdContextProvider, InputInvalidProvider, useFieldLabelRef, useInputAttributes, withInputAttributes };
51
+ export { FieldLabelContextProvider, InputDescribedByProvider, InputIdContextProvider, InputInvalidProvider, TextareaCharacterCountProvider, useFieldLabelRef, useInputAttributes, useTextareaCharacterCount, withInputAttributes };
38
52
  //# sourceMappingURL=contexts.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"contexts.mjs","sources":["../../src/inputs/contexts.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\n\ntype FieldLabelContextType = {\n id?: string;\n ref?: React.RefObject<HTMLLabelElement>;\n};\n\nconst FieldLabelContext = createContext<FieldLabelContextType | undefined>(undefined);\nexport const FieldLabelContextProvider = FieldLabelContext.Provider;\n\nconst InputIdContext = createContext<string | undefined>(undefined);\nexport const InputIdContextProvider = InputIdContext.Provider;\n\nconst InputDescribedByContext = createContext<string | undefined>(undefined);\nexport const InputDescribedByProvider = InputDescribedByContext.Provider;\n\nconst InputInvalidContext = createContext<boolean | undefined>(undefined);\nexport const InputInvalidProvider = InputInvalidContext.Provider;\n\ninterface UseInputAttributesArgs {\n /** Set this to `true` if the underlying element is not directly [labelable as per the HTML specification](https://html.spec.whatwg.org/multipage/forms.html#category-label). */\n nonLabelable?: boolean;\n}\n\nexport function useInputAttributes({ nonLabelable }: UseInputAttributesArgs = {}) {\n const labelId = useContext(FieldLabelContext)?.id;\n return {\n id: useContext(InputIdContext),\n 'aria-labelledby': nonLabelable ? labelId : undefined,\n 'aria-describedby': useContext(InputDescribedByContext),\n 'aria-invalid': useContext(InputInvalidContext),\n } satisfies React.HTMLAttributes<HTMLElement>;\n}\n\nexport function useFieldLabelRef() {\n return useContext(FieldLabelContext)?.ref;\n}\n\nexport interface WithInputAttributesProps {\n inputAttributes: ReturnType<typeof useInputAttributes>;\n}\n\nexport function withInputAttributes<T extends Partial<WithInputAttributesProps>>(\n Component: React.ComponentType<T>,\n args?: UseInputAttributesArgs,\n) {\n function ComponentWithInputAttributes(props: Omit<T, keyof WithInputAttributesProps>) {\n return <Component inputAttributes={useInputAttributes(args)} {...(props as T)} />;\n }\n\n ComponentWithInputAttributes.displayName = `withInputAttributes(${Component.displayName || Component.name || 'Component'})`;\n\n return ComponentWithInputAttributes;\n}\n"],"names":["FieldLabelContext","createContext","undefined","FieldLabelContextProvider","Provider","InputIdContext","InputIdContextProvider","InputDescribedByContext","InputDescribedByProvider","InputInvalidContext","InputInvalidProvider","useInputAttributes","nonLabelable","labelId","useContext","id","useFieldLabelRef","ref","withInputAttributes","Component","args","ComponentWithInputAttributes","props","_jsx","inputAttributes","displayName","name"],"mappings":";;;AAOA,MAAMA,iBAAiB,gBAAGC,aAAa,CAAoCC,SAAS,CAAC;AAC9E,MAAMC,yBAAyB,GAAGH,iBAAiB,CAACI;AAE3D,MAAMC,cAAc,gBAAGJ,aAAa,CAAqBC,SAAS,CAAC;AAC5D,MAAMI,sBAAsB,GAAGD,cAAc,CAACD;AAErD,MAAMG,uBAAuB,gBAAGN,aAAa,CAAqBC,SAAS,CAAC;AACrE,MAAMM,wBAAwB,GAAGD,uBAAuB,CAACH;AAEhE,MAAMK,mBAAmB,gBAAGR,aAAa,CAAsBC,SAAS,CAAC;AAClE,MAAMQ,oBAAoB,GAAGD,mBAAmB,CAACL;SAOxCO,kBAAkBA,CAAC;AAAEC,EAAAA;IAAyC,EAAE,EAAA;AAC9E,EAAA,MAAMC,OAAO,GAAGC,UAAU,CAACd,iBAAiB,CAAC,EAAEe,EAAE;EACjD,OAAO;AACLA,IAAAA,EAAE,EAAED,UAAU,CAACT,cAAc,CAAC;AAC9B,IAAA,iBAAiB,EAAEO,YAAY,GAAGC,OAAO,GAAGX,SAAS;AACrD,IAAA,kBAAkB,EAAEY,UAAU,CAACP,uBAAuB,CAAC;IACvD,cAAc,EAAEO,UAAU,CAACL,mBAAmB;GACH;AAC/C;SAEgBO,gBAAgBA,GAAA;AAC9B,EAAA,OAAOF,UAAU,CAACd,iBAAiB,CAAC,EAAEiB,GAAG;AAC3C;AAMM,SAAUC,mBAAmBA,CACjCC,SAAiC,EACjCC,IAA6B,EAAA;EAE7B,SAASC,4BAA4BA,CAACC,KAA8C,EAAA;IAClF,oBAAOC,GAAA,CAACJ,SAAS,EAAA;AAACK,MAAAA,eAAe,EAAEb,kBAAkB,CAACS,IAAI,CAAE;MAAA,GAAME;AAAW,MAAI;AACnF,EAAA;AAEAD,EAAAA,4BAA4B,CAACI,WAAW,GAAG,CAAA,oBAAA,EAAuBN,SAAS,CAACM,WAAW,IAAIN,SAAS,CAACO,IAAI,IAAI,WAAW,CAAA,CAAA,CAAG;AAE3H,EAAA,OAAOL,4BAA4B;AACrC;;;;"}
1
+ {"version":3,"file":"contexts.mjs","sources":["../../src/inputs/contexts.tsx"],"sourcesContent":["import { createContext, useContext, useEffect } from 'react';\n\ntype FieldLabelContextType = {\n id?: string;\n ref?: React.RefObject<HTMLLabelElement>;\n};\n\nconst FieldLabelContext = createContext<FieldLabelContextType | undefined>(undefined);\nexport const FieldLabelContextProvider = FieldLabelContext.Provider;\n\nconst InputIdContext = createContext<string | undefined>(undefined);\nexport const InputIdContextProvider = InputIdContext.Provider;\n\nconst InputDescribedByContext = createContext<string | undefined>(undefined);\nexport const InputDescribedByProvider = InputDescribedByContext.Provider;\n\nconst InputInvalidContext = createContext<boolean | undefined>(undefined);\nexport const InputInvalidProvider = InputInvalidContext.Provider;\n\ninterface UseInputAttributesArgs {\n /** Set this to `true` if the underlying element is not directly [labelable as per the HTML specification](https://html.spec.whatwg.org/multipage/forms.html#category-label). */\n nonLabelable?: boolean;\n}\n\nexport function useInputAttributes({ nonLabelable }: UseInputAttributesArgs = {}) {\n const labelId = useContext(FieldLabelContext)?.id;\n return {\n id: useContext(InputIdContext),\n 'aria-labelledby': nonLabelable ? labelId : undefined,\n 'aria-describedby': useContext(InputDescribedByContext),\n 'aria-invalid': useContext(InputInvalidContext),\n } satisfies React.HTMLAttributes<HTMLElement>;\n}\n\nexport function useFieldLabelRef() {\n return useContext(FieldLabelContext)?.ref;\n}\n\nexport type TextareaCharacterCountState = { current: number; max: number } | null;\n\nconst TextareaCharacterCountContext = createContext<\n ((state: TextareaCharacterCountState) => void) | undefined\n>(undefined);\nexport const TextareaCharacterCountProvider = TextareaCharacterCountContext.Provider;\n\nexport function useTextareaCharacterCount(current: number, max: number | undefined) {\n const setCharacterCount = useContext(TextareaCharacterCountContext);\n useEffect(() => {\n if (setCharacterCount && max != null) {\n setCharacterCount({ current, max });\n return () => setCharacterCount(null);\n }\n }, [setCharacterCount, current, max]);\n}\n\nexport interface WithInputAttributesProps {\n inputAttributes: ReturnType<typeof useInputAttributes>;\n}\n\nexport function withInputAttributes<T extends Partial<WithInputAttributesProps>>(\n Component: React.ComponentType<T>,\n args?: UseInputAttributesArgs,\n) {\n function ComponentWithInputAttributes(props: Omit<T, keyof WithInputAttributesProps>) {\n return <Component inputAttributes={useInputAttributes(args)} {...(props as T)} />;\n }\n\n ComponentWithInputAttributes.displayName = `withInputAttributes(${Component.displayName || Component.name || 'Component'})`;\n\n return ComponentWithInputAttributes;\n}\n"],"names":["FieldLabelContext","createContext","undefined","FieldLabelContextProvider","Provider","InputIdContext","InputIdContextProvider","InputDescribedByContext","InputDescribedByProvider","InputInvalidContext","InputInvalidProvider","useInputAttributes","nonLabelable","labelId","useContext","id","useFieldLabelRef","ref","TextareaCharacterCountContext","TextareaCharacterCountProvider","useTextareaCharacterCount","current","max","setCharacterCount","useEffect","withInputAttributes","Component","args","ComponentWithInputAttributes","props","_jsx","inputAttributes","displayName","name"],"mappings":";;;AAOA,MAAMA,iBAAiB,gBAAGC,aAAa,CAAoCC,SAAS,CAAC;AAC9E,MAAMC,yBAAyB,GAAGH,iBAAiB,CAACI;AAE3D,MAAMC,cAAc,gBAAGJ,aAAa,CAAqBC,SAAS,CAAC;AAC5D,MAAMI,sBAAsB,GAAGD,cAAc,CAACD;AAErD,MAAMG,uBAAuB,gBAAGN,aAAa,CAAqBC,SAAS,CAAC;AACrE,MAAMM,wBAAwB,GAAGD,uBAAuB,CAACH;AAEhE,MAAMK,mBAAmB,gBAAGR,aAAa,CAAsBC,SAAS,CAAC;AAClE,MAAMQ,oBAAoB,GAAGD,mBAAmB,CAACL;SAOxCO,kBAAkBA,CAAC;AAAEC,EAAAA;IAAyC,EAAE,EAAA;AAC9E,EAAA,MAAMC,OAAO,GAAGC,UAAU,CAACd,iBAAiB,CAAC,EAAEe,EAAE;EACjD,OAAO;AACLA,IAAAA,EAAE,EAAED,UAAU,CAACT,cAAc,CAAC;AAC9B,IAAA,iBAAiB,EAAEO,YAAY,GAAGC,OAAO,GAAGX,SAAS;AACrD,IAAA,kBAAkB,EAAEY,UAAU,CAACP,uBAAuB,CAAC;IACvD,cAAc,EAAEO,UAAU,CAACL,mBAAmB;GACH;AAC/C;SAEgBO,gBAAgBA,GAAA;AAC9B,EAAA,OAAOF,UAAU,CAACd,iBAAiB,CAAC,EAAEiB,GAAG;AAC3C;AAIA,MAAMC,6BAA6B,gBAAGjB,aAAa,CAEjDC,SAAS,CAAC;AACL,MAAMiB,8BAA8B,GAAGD,6BAA6B,CAACd;AAEtE,SAAUgB,yBAAyBA,CAACC,OAAe,EAAEC,GAAuB,EAAA;AAChF,EAAA,MAAMC,iBAAiB,GAAGT,UAAU,CAACI,6BAA6B,CAAC;AACnEM,EAAAA,SAAS,CAAC,MAAK;AACb,IAAA,IAAID,iBAAiB,IAAID,GAAG,IAAI,IAAI,EAAE;AACpCC,MAAAA,iBAAiB,CAAC;QAAEF,OAAO;AAAEC,QAAAA;AAAG,OAAE,CAAC;AACnC,MAAA,OAAO,MAAMC,iBAAiB,CAAC,IAAI,CAAC;AACtC,IAAA;EACF,CAAC,EAAE,CAACA,iBAAiB,EAAEF,OAAO,EAAEC,GAAG,CAAC,CAAC;AACvC;AAMM,SAAUG,mBAAmBA,CACjCC,SAAiC,EACjCC,IAA6B,EAAA;EAE7B,SAASC,4BAA4BA,CAACC,KAA8C,EAAA;IAClF,oBAAOC,GAAA,CAACJ,SAAS,EAAA;AAACK,MAAAA,eAAe,EAAEpB,kBAAkB,CAACgB,IAAI,CAAE;MAAA,GAAME;AAAW,MAAI;AACnF,EAAA;AAEAD,EAAAA,4BAA4B,CAACI,WAAW,GAAG,CAAA,oBAAA,EAAuBN,SAAS,CAACM,WAAW,IAAIN,SAAS,CAACO,IAAI,IAAI,WAAW,CAAA,CAAA,CAAG;AAE3H,EAAA,OAAOL,4BAA4B;AACrC;;;;"}
package/build/main.css CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Do not edit directly, this file was auto-generated.
3
- * Generated on Wed, 13 May 2026 23:15:55 GMT
3
+ * Generated on Wed, 13 May 2026 12:45:11 GMT
4
4
  */
5
5
 
6
6
  :root {
@@ -144,7 +144,7 @@
144
144
 
145
145
  /**
146
146
  * Do not edit directly, this file was auto-generated.
147
- * Generated on Wed, 13 May 2026 23:15:55 GMT
147
+ * Generated on Wed, 13 May 2026 12:45:12 GMT
148
148
  */
149
149
 
150
150
  .np-theme-personal {
@@ -328,7 +328,7 @@
328
328
 
329
329
  /**
330
330
  * Do not edit directly, this file was auto-generated.
331
- * Generated on Wed, 13 May 2026 23:15:55 GMT
331
+ * Generated on Wed, 13 May 2026 12:45:12 GMT
332
332
  */
333
333
 
334
334
  .np-theme-personal--forest-green {
@@ -512,7 +512,7 @@
512
512
 
513
513
  /**
514
514
  * Do not edit directly, this file was auto-generated.
515
- * Generated on Wed, 13 May 2026 23:15:55 GMT
515
+ * Generated on Wed, 13 May 2026 12:45:12 GMT
516
516
  */
517
517
 
518
518
  .np-theme-personal--bright-green {
@@ -696,7 +696,7 @@
696
696
 
697
697
  /**
698
698
  * Do not edit directly, this file was auto-generated.
699
- * Generated on Wed, 13 May 2026 23:15:55 GMT
699
+ * Generated on Wed, 13 May 2026 12:45:12 GMT
700
700
  */
701
701
 
702
702
  .np-theme-personal--dark {
@@ -880,7 +880,7 @@
880
880
 
881
881
  /**
882
882
  * Do not edit directly, this file was auto-generated.
883
- * Generated on Wed, 13 May 2026 23:15:55 GMT
883
+ * Generated on Wed, 13 May 2026 12:45:12 GMT
884
884
  */
885
885
 
886
886
  .np-theme-platform {
@@ -1064,7 +1064,7 @@
1064
1064
 
1065
1065
  /**
1066
1066
  * Do not edit directly, this file was auto-generated.
1067
- * Generated on Wed, 13 May 2026 23:15:55 GMT
1067
+ * Generated on Wed, 13 May 2026 12:45:12 GMT
1068
1068
  */
1069
1069
 
1070
1070
  .np-theme-platform--forest-green {
@@ -1248,7 +1248,7 @@
1248
1248
 
1249
1249
  /**
1250
1250
  * Do not edit directly, this file was auto-generated.
1251
- * Generated on Wed, 13 May 2026 23:15:55 GMT
1251
+ * Generated on Wed, 13 May 2026 12:45:12 GMT
1252
1252
  */
1253
1253
 
1254
1254
  .np-theme-business {
@@ -1433,7 +1433,7 @@
1433
1433
 
1434
1434
  /**
1435
1435
  * Do not edit directly, this file was auto-generated.
1436
- * Generated on Wed, 13 May 2026 23:15:55 GMT
1436
+ * Generated on Wed, 13 May 2026 12:45:12 GMT
1437
1437
  */
1438
1438
 
1439
1439
  .np-theme-business--dark {
@@ -1618,7 +1618,7 @@
1618
1618
 
1619
1619
  /**
1620
1620
  * Do not edit directly, this file was auto-generated.
1621
- * Generated on Wed, 13 May 2026 23:15:55 GMT
1621
+ * Generated on Wed, 13 May 2026 12:45:12 GMT
1622
1622
  */
1623
1623
 
1624
1624
  .np-theme-business--forest-green {
@@ -1803,7 +1803,7 @@
1803
1803
 
1804
1804
  /**
1805
1805
  * Do not edit directly, this file was auto-generated.
1806
- * Generated on Wed, 13 May 2026 23:15:55 GMT
1806
+ * Generated on Wed, 13 May 2026 12:45:12 GMT
1807
1807
  */
1808
1808
 
1809
1809
  .np-theme-business--bright-green {
@@ -4351,53 +4351,48 @@ a.text-inverse:focus {
4351
4351
 
4352
4352
  @media (max-width: 320px) {
4353
4353
  .np-theme-personal {
4354
- --padding-x-small: 4px;
4355
- --padding-small: 8px;
4356
- --padding-medium: 12px;
4357
- --padding-large: 16px;
4358
- --size-4: 2px;
4359
- --size-5: 2.5px;
4360
- --size-8: 4px;
4361
- --size-10: 5px;
4362
- --size-12: 6px;
4363
- --size-14: 7px;
4364
- --size-16: 8px;
4365
- --size-24: 12px;
4366
- --size-32: 16px;
4367
- --size-40: 20px;
4368
- --size-48: 24px;
4369
- --size-52: 26px;
4370
- --size-56: 28px;
4371
- --size-60: 30px;
4372
- --size-64: 32px;
4373
- --size-72: 36px;
4374
- --size-80: 40px;
4375
- --size-88: 44px;
4376
- --size-96: 48px;
4377
- --size-104: 52px;
4378
- --size-112: 56px;
4379
- --size-120: 60px;
4380
- --size-126: 63px;
4381
- --size-128: 64px;
4382
- --size-146: 73px;
4383
- --size-154: 77px;
4384
- --size-160: 80px;
4385
- --size-x-small: 12px;
4386
- --size-small: 16px;
4387
- --size-medium: 20px;
4388
- --size-large: 24px;
4389
- --size-x-large: 28px;
4390
- --size-2x-large: 36px;
4391
- --space-content-horizontal: 8px;
4392
- --space-small: 8px;
4393
- --space-medium: 16px;
4394
- --space-large: 20px;
4395
- --space-x-large: 28px;
4396
- }
4397
- }
4398
-
4399
- @media (max-width: 320px) {
4400
- .np-theme-personal {
4354
+ --delta: 2;
4355
+ --size-4: calc(4px / var(--delta));
4356
+ --size-5: calc(5px / var(--delta));
4357
+ --size-8: calc(8px / var(--delta));
4358
+ --size-10: calc(10px / var(--delta));
4359
+ --size-12: calc(12px / var(--delta));
4360
+ --size-14: calc(14px / var(--delta));
4361
+ --size-16: calc(16px / var(--delta));
4362
+ --size-24: calc(24px / var(--delta));
4363
+ --size-32: calc(32px / var(--delta));
4364
+ --size-40: calc(40px / var(--delta));
4365
+ --size-48: calc(48px / var(--delta));
4366
+ --size-52: calc(52px / var(--delta));
4367
+ --size-56: calc(56px / var(--delta));
4368
+ --size-60: calc(60px / var(--delta));
4369
+ --size-64: calc(64px / var(--delta));
4370
+ --size-72: calc(72px / var(--delta));
4371
+ --size-80: calc(80px / var(--delta));
4372
+ --size-88: calc(88px / var(--delta));
4373
+ --size-96: calc(96px / var(--delta));
4374
+ --size-104: calc(104px / var(--delta));
4375
+ --size-112: calc(112px / var(--delta));
4376
+ --size-120: calc(120px / var(--delta));
4377
+ --size-126: calc(126px / var(--delta));
4378
+ --size-128: calc(128px / var(--delta));
4379
+ --size-146: calc(146px / var(--delta));
4380
+ --size-154: calc(154px / var(--delta));
4381
+ --size-x-small: calc(24px / var(--delta));
4382
+ --size-small: calc(32px / var(--delta));
4383
+ --size-medium: calc(40px / var(--delta));
4384
+ --size-large: calc(48px / var(--delta));
4385
+ --size-x-large: calc(56px / var(--delta));
4386
+ --size-2x-large: calc(72px / var(--delta));
4387
+ --space-content-horizontal: calc(16px / var(--delta));
4388
+ --space-small: calc(16px / var(--delta));
4389
+ --space-medium: calc(32px / var(--delta));
4390
+ --space-large: calc(40px / var(--delta));
4391
+ --space-x-large: calc(56px / var(--delta));
4392
+ --padding-x-small: var(--size-8);
4393
+ --padding-small: var(--size-16);
4394
+ --padding-medium: var(--size-24);
4395
+ --padding-large: var(--size-32);
4401
4396
  --input-height-base: var(--size-32);
4402
4397
  --input-height-large: var(--input-height-small);
4403
4398
  --input-padding: var(--input-padding-small);
@@ -29935,10 +29930,28 @@ html:not([dir="rtl"]) .np-flow-navigation--sm .np-flow-navigation__stepper {
29935
29930
  stroke-dasharray: var(--wds-list-item-spotlight-strokeDashSize) var(--wds-list-item-spotlight-strokeDashSize);
29936
29931
  }
29937
29932
 
29938
- .np-field-control,
29939
- .np-field__prompt {
29933
+ .np-field-control {
29934
+ margin-top: 4px;
29935
+ margin-top: var(--size-4);
29936
+ }
29937
+
29938
+ .np-field-validation {
29939
+ display: flex;
29940
+ align-items: flex-start;
29940
29941
  margin-top: 4px;
29941
29942
  margin-top: var(--size-4);
29943
+ gap: 8px;
29944
+ gap: var(--size-8);
29945
+ }
29946
+
29947
+ .np-field-textarea-char-counter {
29948
+ min-width: 55px;
29949
+ text-align: right;
29950
+ margin-left: auto;
29951
+ padding: 4px 0;
29952
+ padding: var(--size-4) 0;
29953
+ color: #768e9c;
29954
+ color: var(--color-content-tertiary);
29942
29955
  }
29943
29956
 
29944
29957
  .np-field .form-group--typeahead[class],
@@ -29946,7 +29959,7 @@ html:not([dir="rtl"]) .np-flow-navigation--sm .np-flow-navigation__stepper {
29946
29959
  margin-bottom: 0;
29947
29960
  }
29948
29961
 
29949
- .np-field:has(.wds-radio-group) .np-field__prompt {
29962
+ .np-field:has(.wds-radio-group) .np-field-validation {
29950
29963
  margin-top: 12px;
29951
29964
  margin-top: var(--size-12);
29952
29965
  }
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Do not edit directly, this file was auto-generated.
3
- * Generated on Wed, 13 May 2026 23:15:55 GMT
3
+ * Generated on Wed, 13 May 2026 12:45:11 GMT
4
4
  */
5
5
 
6
6
  :root {
@@ -144,7 +144,7 @@
144
144
 
145
145
  /**
146
146
  * Do not edit directly, this file was auto-generated.
147
- * Generated on Wed, 13 May 2026 23:15:55 GMT
147
+ * Generated on Wed, 13 May 2026 12:45:12 GMT
148
148
  */
149
149
 
150
150
  .np-theme-personal {
@@ -328,7 +328,7 @@
328
328
 
329
329
  /**
330
330
  * Do not edit directly, this file was auto-generated.
331
- * Generated on Wed, 13 May 2026 23:15:55 GMT
331
+ * Generated on Wed, 13 May 2026 12:45:12 GMT
332
332
  */
333
333
 
334
334
  .np-theme-personal--forest-green {
@@ -512,7 +512,7 @@
512
512
 
513
513
  /**
514
514
  * Do not edit directly, this file was auto-generated.
515
- * Generated on Wed, 13 May 2026 23:15:55 GMT
515
+ * Generated on Wed, 13 May 2026 12:45:12 GMT
516
516
  */
517
517
 
518
518
  .np-theme-personal--bright-green {
@@ -696,7 +696,7 @@
696
696
 
697
697
  /**
698
698
  * Do not edit directly, this file was auto-generated.
699
- * Generated on Wed, 13 May 2026 23:15:55 GMT
699
+ * Generated on Wed, 13 May 2026 12:45:12 GMT
700
700
  */
701
701
 
702
702
  .np-theme-personal--dark {
@@ -880,7 +880,7 @@
880
880
 
881
881
  /**
882
882
  * Do not edit directly, this file was auto-generated.
883
- * Generated on Wed, 13 May 2026 23:15:55 GMT
883
+ * Generated on Wed, 13 May 2026 12:45:12 GMT
884
884
  */
885
885
 
886
886
  .np-theme-platform {
@@ -1064,7 +1064,7 @@
1064
1064
 
1065
1065
  /**
1066
1066
  * Do not edit directly, this file was auto-generated.
1067
- * Generated on Wed, 13 May 2026 23:15:55 GMT
1067
+ * Generated on Wed, 13 May 2026 12:45:12 GMT
1068
1068
  */
1069
1069
 
1070
1070
  .np-theme-platform--forest-green {
@@ -1248,7 +1248,7 @@
1248
1248
 
1249
1249
  /**
1250
1250
  * Do not edit directly, this file was auto-generated.
1251
- * Generated on Wed, 13 May 2026 23:15:55 GMT
1251
+ * Generated on Wed, 13 May 2026 12:45:12 GMT
1252
1252
  */
1253
1253
 
1254
1254
  .np-theme-business {
@@ -1433,7 +1433,7 @@
1433
1433
 
1434
1434
  /**
1435
1435
  * Do not edit directly, this file was auto-generated.
1436
- * Generated on Wed, 13 May 2026 23:15:55 GMT
1436
+ * Generated on Wed, 13 May 2026 12:45:12 GMT
1437
1437
  */
1438
1438
 
1439
1439
  .np-theme-business--dark {
@@ -1618,7 +1618,7 @@
1618
1618
 
1619
1619
  /**
1620
1620
  * Do not edit directly, this file was auto-generated.
1621
- * Generated on Wed, 13 May 2026 23:15:55 GMT
1621
+ * Generated on Wed, 13 May 2026 12:45:12 GMT
1622
1622
  */
1623
1623
 
1624
1624
  .np-theme-business--forest-green {
@@ -1803,7 +1803,7 @@
1803
1803
 
1804
1804
  /**
1805
1805
  * Do not edit directly, this file was auto-generated.
1806
- * Generated on Wed, 13 May 2026 23:15:55 GMT
1806
+ * Generated on Wed, 13 May 2026 12:45:12 GMT
1807
1807
  */
1808
1808
 
1809
1809
  .np-theme-business--bright-green {
@@ -4351,53 +4351,48 @@ a.text-inverse:focus {
4351
4351
 
4352
4352
  @media (max-width: 320px) {
4353
4353
  .np-theme-personal {
4354
- --padding-x-small: 4px;
4355
- --padding-small: 8px;
4356
- --padding-medium: 12px;
4357
- --padding-large: 16px;
4358
- --size-4: 2px;
4359
- --size-5: 2.5px;
4360
- --size-8: 4px;
4361
- --size-10: 5px;
4362
- --size-12: 6px;
4363
- --size-14: 7px;
4364
- --size-16: 8px;
4365
- --size-24: 12px;
4366
- --size-32: 16px;
4367
- --size-40: 20px;
4368
- --size-48: 24px;
4369
- --size-52: 26px;
4370
- --size-56: 28px;
4371
- --size-60: 30px;
4372
- --size-64: 32px;
4373
- --size-72: 36px;
4374
- --size-80: 40px;
4375
- --size-88: 44px;
4376
- --size-96: 48px;
4377
- --size-104: 52px;
4378
- --size-112: 56px;
4379
- --size-120: 60px;
4380
- --size-126: 63px;
4381
- --size-128: 64px;
4382
- --size-146: 73px;
4383
- --size-154: 77px;
4384
- --size-160: 80px;
4385
- --size-x-small: 12px;
4386
- --size-small: 16px;
4387
- --size-medium: 20px;
4388
- --size-large: 24px;
4389
- --size-x-large: 28px;
4390
- --size-2x-large: 36px;
4391
- --space-content-horizontal: 8px;
4392
- --space-small: 8px;
4393
- --space-medium: 16px;
4394
- --space-large: 20px;
4395
- --space-x-large: 28px;
4396
- }
4397
- }
4398
-
4399
- @media (max-width: 320px) {
4400
- .np-theme-personal {
4354
+ --delta: 2;
4355
+ --size-4: calc(4px / var(--delta));
4356
+ --size-5: calc(5px / var(--delta));
4357
+ --size-8: calc(8px / var(--delta));
4358
+ --size-10: calc(10px / var(--delta));
4359
+ --size-12: calc(12px / var(--delta));
4360
+ --size-14: calc(14px / var(--delta));
4361
+ --size-16: calc(16px / var(--delta));
4362
+ --size-24: calc(24px / var(--delta));
4363
+ --size-32: calc(32px / var(--delta));
4364
+ --size-40: calc(40px / var(--delta));
4365
+ --size-48: calc(48px / var(--delta));
4366
+ --size-52: calc(52px / var(--delta));
4367
+ --size-56: calc(56px / var(--delta));
4368
+ --size-60: calc(60px / var(--delta));
4369
+ --size-64: calc(64px / var(--delta));
4370
+ --size-72: calc(72px / var(--delta));
4371
+ --size-80: calc(80px / var(--delta));
4372
+ --size-88: calc(88px / var(--delta));
4373
+ --size-96: calc(96px / var(--delta));
4374
+ --size-104: calc(104px / var(--delta));
4375
+ --size-112: calc(112px / var(--delta));
4376
+ --size-120: calc(120px / var(--delta));
4377
+ --size-126: calc(126px / var(--delta));
4378
+ --size-128: calc(128px / var(--delta));
4379
+ --size-146: calc(146px / var(--delta));
4380
+ --size-154: calc(154px / var(--delta));
4381
+ --size-x-small: calc(24px / var(--delta));
4382
+ --size-small: calc(32px / var(--delta));
4383
+ --size-medium: calc(40px / var(--delta));
4384
+ --size-large: calc(48px / var(--delta));
4385
+ --size-x-large: calc(56px / var(--delta));
4386
+ --size-2x-large: calc(72px / var(--delta));
4387
+ --space-content-horizontal: calc(16px / var(--delta));
4388
+ --space-small: calc(16px / var(--delta));
4389
+ --space-medium: calc(32px / var(--delta));
4390
+ --space-large: calc(40px / var(--delta));
4391
+ --space-x-large: calc(56px / var(--delta));
4392
+ --padding-x-small: var(--size-8);
4393
+ --padding-small: var(--size-16);
4394
+ --padding-medium: var(--size-24);
4395
+ --padding-large: var(--size-32);
4401
4396
  --input-height-base: var(--size-32);
4402
4397
  --input-height-large: var(--input-height-small);
4403
4398
  --input-padding: var(--input-padding-small);
@@ -1,13 +1,29 @@
1
- .np-field-control,
2
- .np-field__prompt {
1
+ .np-field-control {
3
2
  margin-top: 4px;
4
3
  margin-top: var(--size-4);
5
4
  }
5
+ .np-field-validation {
6
+ display: flex;
7
+ align-items: flex-start;
8
+ margin-top: 4px;
9
+ margin-top: var(--size-4);
10
+ gap: 8px;
11
+ gap: var(--size-8);
12
+ }
13
+ .np-field-textarea-char-counter {
14
+ min-width: 55px;
15
+ text-align: right;
16
+ margin-left: auto;
17
+ padding: 4px 0;
18
+ padding: var(--size-4) 0;
19
+ color: #768e9c;
20
+ color: var(--color-content-tertiary);
21
+ }
6
22
  .np-field .form-group--typeahead[class],
7
23
  .np-field .np-checkbox-label[class] {
8
24
  margin-bottom: 0;
9
25
  }
10
- .np-field:has(.wds-radio-group) .np-field__prompt {
26
+ .np-field:has(.wds-radio-group) .np-field-validation {
11
27
  margin-top: 12px;
12
28
  margin-top: var(--size-12);
13
29
  }
@@ -1,6 +1,6 @@
1
1
 
2
2
  // Do not edit directly, this file was auto-generated.
3
- // Generated on Wed, 13 May 2026 23:15:55 GMT
3
+ // Generated on Wed, 13 May 2026 12:45:11 GMT
4
4
 
5
5
  @color-dark-content-primary: #e2e6e8;
6
6
  @color-dark-content-secondary: #c9cbce;
@@ -222,7 +222,7 @@
222
222
  @font-family-display: 'Wise Sans', 'Inter', sans-serif;
223
223
 
224
224
  // Do not edit directly, this file was auto-generated.
225
- // Generated on Wed, 13 May 2026 23:15:54 GMT
225
+ // Generated on Wed, 13 May 2026 12:45:11 GMT
226
226
 
227
227
  @color-base-blue-light: #00b9ff;
228
228
  @color-base-blue-mid: #00a2dd;