@noctuatech/uswds 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +25 -0
  3. package/package.json +89 -0
  4. package/src/lib/alert/alert-types.ts +33 -0
  5. package/src/lib/alert/alert.element.ts +105 -0
  6. package/src/lib/alert/alert.stories.ts +63 -0
  7. package/src/lib/alert/alert.test.ts +23 -0
  8. package/src/lib/button/button.element.ts +224 -0
  9. package/src/lib/button/button.stories.ts +34 -0
  10. package/src/lib/button/button.test.ts +17 -0
  11. package/src/lib/checkbox/checkbox.element.ts +166 -0
  12. package/src/lib/checkbox/checkbox.stories.ts +57 -0
  13. package/src/lib/checkbox/checkbox.test.ts +47 -0
  14. package/src/lib/config/config.element.ts +31 -0
  15. package/src/lib/config/config.test.ts +15 -0
  16. package/src/lib/define.ts +14 -0
  17. package/src/lib/description/description.element.ts +22 -0
  18. package/src/lib/description/description.test.ts +15 -0
  19. package/src/lib/file-input/file-input-preview.element.ts +121 -0
  20. package/src/lib/file-input/file-input-preview.test.ts +95 -0
  21. package/src/lib/file-input/file-input.element.ts +140 -0
  22. package/src/lib/file-input/file-input.stories.ts +46 -0
  23. package/src/lib/file-input/file-input.test.ts +47 -0
  24. package/src/lib/icon/icon-types.ts +263 -0
  25. package/src/lib/icon/icon.element.ts +65 -0
  26. package/src/lib/icon/icon.stories.ts +50 -0
  27. package/src/lib/input/input.element.ts +138 -0
  28. package/src/lib/input/input.stories.ts +30 -0
  29. package/src/lib/input/input.test.ts +48 -0
  30. package/src/lib/input-mask/format.ts +56 -0
  31. package/src/lib/input-mask/input-mask.element.ts +93 -0
  32. package/src/lib/input-mask/input-mask.stories.ts +38 -0
  33. package/src/lib/input-mask/input-mask.test.ts +106 -0
  34. package/src/lib/input-mask/maskable.element.ts +5 -0
  35. package/src/lib/link/link.element.ts +62 -0
  36. package/src/lib/link/link.stories.ts +30 -0
  37. package/src/lib/radio/radio-option.element.ts +46 -0
  38. package/src/lib/radio/radio-option.test.ts +20 -0
  39. package/src/lib/radio/radio.element.ts +152 -0
  40. package/src/lib/radio/radio.stories.ts +47 -0
  41. package/src/lib/radio/radio.test.ts +174 -0
  42. package/src/lib/select/select-option.element.ts +40 -0
  43. package/src/lib/select/select.element.ts +121 -0
  44. package/src/lib/select/select.stories.ts +33 -0
  45. package/src/lib/select/select.test.ts +113 -0
  46. package/src/lib/tag/tag.element.ts +46 -0
  47. package/src/lib/tag/tag.stories.ts +31 -0
  48. package/src/lib/tag/tag.test.ts +15 -0
  49. package/src/lib.ts +13 -0
  50. package/target/lib/alert/alert-types.d.ts +7 -0
  51. package/target/lib/alert/alert-types.js +25 -0
  52. package/target/lib/alert/alert-types.js.map +1 -0
  53. package/target/lib/alert/alert.element.d.ts +11 -0
  54. package/target/lib/alert/alert.element.js +124 -0
  55. package/target/lib/alert/alert.element.js.map +1 -0
  56. package/target/lib/alert/alert.stories.d.ts +11 -0
  57. package/target/lib/alert/alert.stories.js +56 -0
  58. package/target/lib/alert/alert.stories.js.map +1 -0
  59. package/target/lib/alert/alert.test.d.ts +1 -0
  60. package/target/lib/alert/alert.test.js +20 -0
  61. package/target/lib/alert/alert.test.js.map +1 -0
  62. package/target/lib/button/button.element.d.ts +17 -0
  63. package/target/lib/button/button.element.js +259 -0
  64. package/target/lib/button/button.element.js.map +1 -0
  65. package/target/lib/button/button.stories.d.ts +12 -0
  66. package/target/lib/button/button.stories.js +25 -0
  67. package/target/lib/button/button.stories.js.map +1 -0
  68. package/target/lib/button/button.test.d.ts +1 -0
  69. package/target/lib/button/button.test.js +14 -0
  70. package/target/lib/button/button.test.js.map +1 -0
  71. package/target/lib/checkbox/checkbox.element.d.ts +16 -0
  72. package/target/lib/checkbox/checkbox.element.js +205 -0
  73. package/target/lib/checkbox/checkbox.element.js.map +1 -0
  74. package/target/lib/checkbox/checkbox.stories.d.ts +31 -0
  75. package/target/lib/checkbox/checkbox.stories.js +46 -0
  76. package/target/lib/checkbox/checkbox.stories.js.map +1 -0
  77. package/target/lib/checkbox/checkbox.test.d.ts +1 -0
  78. package/target/lib/checkbox/checkbox.test.js +38 -0
  79. package/target/lib/checkbox/checkbox.test.js.map +1 -0
  80. package/target/lib/config/config.element.d.ts +8 -0
  81. package/target/lib/config/config.element.js +57 -0
  82. package/target/lib/config/config.element.js.map +1 -0
  83. package/target/lib/config/config.test.d.ts +1 -0
  84. package/target/lib/config/config.test.js +11 -0
  85. package/target/lib/config/config.test.js.map +1 -0
  86. package/target/lib/define.d.ts +14 -0
  87. package/target/lib/define.js +15 -0
  88. package/target/lib/define.js.map +1 -0
  89. package/target/lib/description/description.element.d.ts +7 -0
  90. package/target/lib/description/description.element.js +34 -0
  91. package/target/lib/description/description.element.js.map +1 -0
  92. package/target/lib/description/description.test.d.ts +1 -0
  93. package/target/lib/description/description.test.js +11 -0
  94. package/target/lib/description/description.test.js.map +1 -0
  95. package/target/lib/file-input/file-input-preview.element.d.ts +11 -0
  96. package/target/lib/file-input/file-input-preview.element.js +136 -0
  97. package/target/lib/file-input/file-input-preview.element.js.map +1 -0
  98. package/target/lib/file-input/file-input-preview.test.d.ts +2 -0
  99. package/target/lib/file-input/file-input-preview.test.js +67 -0
  100. package/target/lib/file-input/file-input-preview.test.js.map +1 -0
  101. package/target/lib/file-input/file-input.element.d.ts +18 -0
  102. package/target/lib/file-input/file-input.element.js +180 -0
  103. package/target/lib/file-input/file-input.element.js.map +1 -0
  104. package/target/lib/file-input/file-input.stories.d.ts +12 -0
  105. package/target/lib/file-input/file-input.stories.js +36 -0
  106. package/target/lib/file-input/file-input.stories.js.map +1 -0
  107. package/target/lib/file-input/file-input.test.d.ts +1 -0
  108. package/target/lib/file-input/file-input.test.js +37 -0
  109. package/target/lib/file-input/file-input.test.js.map +1 -0
  110. package/target/lib/icon/icon-types.d.ts +2 -0
  111. package/target/lib/icon/icon-types.js +262 -0
  112. package/target/lib/icon/icon-types.js.map +1 -0
  113. package/target/lib/icon/icon.element.d.ts +12 -0
  114. package/target/lib/icon/icon.element.js +84 -0
  115. package/target/lib/icon/icon.element.js.map +1 -0
  116. package/target/lib/icon/icon.stories.d.ts +12 -0
  117. package/target/lib/icon/icon.stories.js +39 -0
  118. package/target/lib/icon/icon.stories.js.map +1 -0
  119. package/target/lib/input/input.element.d.ts +19 -0
  120. package/target/lib/input/input.element.js +166 -0
  121. package/target/lib/input/input.element.js.map +1 -0
  122. package/target/lib/input/input.stories.d.ts +12 -0
  123. package/target/lib/input/input.stories.js +23 -0
  124. package/target/lib/input/input.stories.js.map +1 -0
  125. package/target/lib/input/input.test.d.ts +1 -0
  126. package/target/lib/input/input.test.js +38 -0
  127. package/target/lib/input/input.test.js.map +1 -0
  128. package/target/lib/input-mask/format.d.ts +15 -0
  129. package/target/lib/input-mask/format.js +47 -0
  130. package/target/lib/input-mask/format.js.map +1 -0
  131. package/target/lib/input-mask/input-mask.element.d.ts +12 -0
  132. package/target/lib/input-mask/input-mask.element.js +111 -0
  133. package/target/lib/input-mask/input-mask.element.js.map +1 -0
  134. package/target/lib/input-mask/input-mask.stories.d.ts +14 -0
  135. package/target/lib/input-mask/input-mask.stories.js +31 -0
  136. package/target/lib/input-mask/input-mask.stories.js.map +1 -0
  137. package/target/lib/input-mask/input-mask.test.d.ts +2 -0
  138. package/target/lib/input-mask/input-mask.test.js +85 -0
  139. package/target/lib/input-mask/input-mask.test.js.map +1 -0
  140. package/target/lib/input-mask/maskable.element.d.ts +5 -0
  141. package/target/lib/input-mask/maskable.element.js +2 -0
  142. package/target/lib/input-mask/maskable.element.js.map +1 -0
  143. package/target/lib/link/link.element.d.ts +13 -0
  144. package/target/lib/link/link.element.js +98 -0
  145. package/target/lib/link/link.element.js.map +1 -0
  146. package/target/lib/link/link.stories.d.ts +16 -0
  147. package/target/lib/link/link.stories.js +23 -0
  148. package/target/lib/link/link.stories.js.map +1 -0
  149. package/target/lib/radio/radio-option.element.d.ts +13 -0
  150. package/target/lib/radio/radio-option.element.js +63 -0
  151. package/target/lib/radio/radio-option.element.js.map +1 -0
  152. package/target/lib/radio/radio-option.test.d.ts +2 -0
  153. package/target/lib/radio/radio-option.test.js +15 -0
  154. package/target/lib/radio/radio-option.test.js.map +1 -0
  155. package/target/lib/radio/radio.element.d.ts +18 -0
  156. package/target/lib/radio/radio.element.js +177 -0
  157. package/target/lib/radio/radio.element.js.map +1 -0
  158. package/target/lib/radio/radio.stories.d.ts +12 -0
  159. package/target/lib/radio/radio.stories.js +40 -0
  160. package/target/lib/radio/radio.stories.js.map +1 -0
  161. package/target/lib/radio/radio.test.d.ts +2 -0
  162. package/target/lib/radio/radio.test.js +147 -0
  163. package/target/lib/radio/radio.test.js.map +1 -0
  164. package/target/lib/select/select-option.element.d.ts +11 -0
  165. package/target/lib/select/select-option.element.js +58 -0
  166. package/target/lib/select/select-option.element.js.map +1 -0
  167. package/target/lib/select/select.element.d.ts +16 -0
  168. package/target/lib/select/select.element.js +144 -0
  169. package/target/lib/select/select.element.js.map +1 -0
  170. package/target/lib/select/select.stories.d.ts +12 -0
  171. package/target/lib/select/select.stories.js +26 -0
  172. package/target/lib/select/select.stories.js.map +1 -0
  173. package/target/lib/select/select.test.d.ts +2 -0
  174. package/target/lib/select/select.test.js +89 -0
  175. package/target/lib/select/select.test.js.map +1 -0
  176. package/target/lib/tag/tag.element.d.ts +10 -0
  177. package/target/lib/tag/tag.element.js +66 -0
  178. package/target/lib/tag/tag.element.js.map +1 -0
  179. package/target/lib/tag/tag.stories.d.ts +19 -0
  180. package/target/lib/tag/tag.stories.js +25 -0
  181. package/target/lib/tag/tag.stories.js.map +1 -0
  182. package/target/lib/tag/tag.test.d.ts +1 -0
  183. package/target/lib/tag/tag.test.js +11 -0
  184. package/target/lib/tag/tag.test.js.map +1 -0
  185. package/target/lib.d.ts +13 -0
  186. package/target/lib.js +14 -0
  187. package/target/lib.js.map +1 -0
@@ -0,0 +1,38 @@
1
+ import "./input.element.js";
2
+ import { fixture, html, assert } from "@open-wc/testing";
3
+ import { fireEvent } from "@noctuatech-uswds/testing";
4
+ describe("usa-input", () => {
5
+ it("should be accessible", async () => {
6
+ const form = await fixture(html `
7
+ <usa-input name="fname" value="Foo">Hello World</usa-input>
8
+ `);
9
+ return assert.isAccessible(form);
10
+ });
11
+ it("should submit form with default values", async () => {
12
+ const form = await fixture(html `
13
+ <form>
14
+ <usa-input name="fname" value="Foo">Hello World</usa-input>
15
+
16
+ <button>Submit</button>
17
+ </form>
18
+ `);
19
+ const value = new FormData(form);
20
+ assert.equal(value.get("fname"), "Foo");
21
+ });
22
+ it("should update form value as input value changed", async () => {
23
+ const form = await fixture(html `
24
+ <form>
25
+ <usa-input name="fname">Hello World</usa-input>
26
+
27
+ <button>Submit</button>
28
+ </form>
29
+ `);
30
+ const input = form.querySelector("usa-input");
31
+ const nativeInput = input.shadowRoot.querySelector("input");
32
+ nativeInput.value = "Bar";
33
+ await fireEvent.input(nativeInput, { bubbles: true });
34
+ const value = new FormData(form);
35
+ assert.equal(value.get("fname"), "Bar");
36
+ });
37
+ });
38
+ //# sourceMappingURL=input.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.test.js","sourceRoot":"","sources":["../../../src/lib/input/input.test.ts"],"names":[],"mappings":"AAAA,OAAO,oBAAoB,CAAC;AAE5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAkB,IAAI,CAAA;;KAE/C,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAkB,IAAI,CAAA;;;;;;KAM/C,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEjC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAkB,IAAI,CAAA;;;;;;KAM/C,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAE,CAAC;QAC/C,MAAM,WAAW,GAAG,KAAK,CAAC,UAAW,CAAC,aAAa,CAAC,OAAO,CAAE,CAAC;QAC9D,WAAW,CAAC,KAAK,GAAG,KAAK,CAAC;QAE1B,MAAM,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtD,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEjC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,15 @@
1
+ export declare enum PatternChar {
2
+ Any = "*",
3
+ Number = "9",
4
+ Letter = "A"
5
+ }
6
+ export declare const PATTERN_CHARS: PatternChar[];
7
+ export declare const REG_EXPS: {
8
+ Letters: RegExp;
9
+ Numbers: RegExp;
10
+ };
11
+ export interface FormattedResult {
12
+ raw: string;
13
+ formatted: string;
14
+ }
15
+ export declare function format(value: string, pattern: string): FormattedResult;
@@ -0,0 +1,47 @@
1
+ export var PatternChar;
2
+ (function (PatternChar) {
3
+ PatternChar["Any"] = "*";
4
+ PatternChar["Number"] = "9";
5
+ PatternChar["Letter"] = "A";
6
+ })(PatternChar || (PatternChar = {}));
7
+ export const PATTERN_CHARS = Object.values(PatternChar);
8
+ export const REG_EXPS = {
9
+ Letters: /^[a-z]/i,
10
+ Numbers: /^[0-9]/i,
11
+ };
12
+ export function format(value, pattern) {
13
+ const raw = value.replace(/[^a-z0-9]/gi, ""); // remove all special chars
14
+ const chars = raw.split("");
15
+ let count = 0;
16
+ let formatted = "";
17
+ for (var i = 0; i < pattern.length; i++) {
18
+ const patternChar = pattern[i];
19
+ const char = chars[count];
20
+ if (char && patternChar) {
21
+ if (patternChar === PatternChar.Any) {
22
+ // Any letter or number
23
+ formatted += char;
24
+ count++;
25
+ }
26
+ else if (patternChar === PatternChar.Number) {
27
+ // Numbers only
28
+ if (/^[0-9]/i.test(char)) {
29
+ formatted += char;
30
+ }
31
+ count++;
32
+ }
33
+ else if (patternChar === PatternChar.Letter) {
34
+ // Letters only
35
+ if (/^[a-z]/i.test(char)) {
36
+ formatted += char;
37
+ }
38
+ count++;
39
+ }
40
+ else {
41
+ formatted += patternChar;
42
+ }
43
+ }
44
+ }
45
+ return { raw, formatted };
46
+ }
47
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/lib/input-mask/format.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,wBAAS,CAAA;IACT,2BAAY,CAAA;IACZ,2BAAY,CAAA;AACd,CAAC,EAJW,WAAW,KAAX,WAAW,QAItB;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAExD,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;CACnB,CAAC;AAOF,MAAM,UAAU,MAAM,CAAC,KAAa,EAAE,OAAe;IACnD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,2BAA2B;IACzE,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAE5B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,SAAS,GAAG,EAAE,CAAC;IAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;QAE1B,IAAI,IAAI,IAAI,WAAW,EAAE,CAAC;YACxB,IAAI,WAAW,KAAK,WAAW,CAAC,GAAG,EAAE,CAAC;gBACpC,uBAAuB;gBACvB,SAAS,IAAI,IAAI,CAAC;gBAClB,KAAK,EAAE,CAAC;YACV,CAAC;iBAAM,IAAI,WAAW,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;gBAC9C,eAAe;gBACf,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzB,SAAS,IAAI,IAAI,CAAC;gBACpB,CAAC;gBAED,KAAK,EAAE,CAAC;YACV,CAAC;iBAAM,IAAI,WAAW,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;gBAC9C,eAAe;gBACf,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzB,SAAS,IAAI,IAAI,CAAC;gBACpB,CAAC;gBAED,KAAK,EAAE,CAAC;YACV,CAAC;iBAAM,CAAC;gBACN,SAAS,IAAI,WAAW,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,12 @@
1
+ declare global {
2
+ interface HTMLElementTagNameMap {
3
+ "usa-input-mask": USAInputMaskElement;
4
+ }
5
+ }
6
+ export declare class USAInputMaskElement extends HTMLElement {
7
+ #private;
8
+ accessor mask: string;
9
+ connectedCallback(): void;
10
+ onInput(e: Event): Promise<void>;
11
+ onKeyDown(e: KeyboardEvent): void;
12
+ }
@@ -0,0 +1,111 @@
1
+ import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers, __setFunctionName } from "tslib";
2
+ import { attr, css, element, html, listen } from "@joist/element";
3
+ import { format, PATTERN_CHARS, PatternChar, REG_EXPS } from "./format.js";
4
+ let USAInputMaskElement = (() => {
5
+ var _USAInputMaskElement_instances, _USAInputMaskElement_getMaskFor, _USAInputMaskElement_mask_accessor_storage;
6
+ let _classDecorators = [element({
7
+ tagName: "usa-input-mask",
8
+ shadowDom: [
9
+ css `
10
+ :host {
11
+ display: contents;
12
+ }
13
+ `,
14
+ html `<slot></slot>`,
15
+ ],
16
+ })];
17
+ let _classDescriptor;
18
+ let _classExtraInitializers = [];
19
+ let _classThis;
20
+ let _classSuper = HTMLElement;
21
+ let _instanceExtraInitializers = [];
22
+ let _mask_decorators;
23
+ let _mask_initializers = [];
24
+ let _mask_extraInitializers = [];
25
+ let _onInput_decorators;
26
+ let _onKeyDown_decorators;
27
+ var USAInputMaskElement = _classThis = class extends _classSuper {
28
+ get mask() { return __classPrivateFieldGet(this, _USAInputMaskElement_mask_accessor_storage, "f"); }
29
+ set mask(value) { __classPrivateFieldSet(this, _USAInputMaskElement_mask_accessor_storage, value, "f"); }
30
+ connectedCallback() {
31
+ for (let input of this.querySelectorAll("[mask]")) {
32
+ const { formatted } = format(input.value, __classPrivateFieldGet(this, _USAInputMaskElement_instances, "m", _USAInputMaskElement_getMaskFor).call(this, input));
33
+ input.value = formatted;
34
+ }
35
+ }
36
+ async onInput(e) {
37
+ const input = e.target;
38
+ const selectionStart = input.selectionStart || 0;
39
+ const prev = input.value;
40
+ const mask = __classPrivateFieldGet(this, _USAInputMaskElement_instances, "m", _USAInputMaskElement_getMaskFor).call(this, input);
41
+ const { formatted } = format(input.value, mask);
42
+ input.value = formatted;
43
+ const offset = input.value.length - prev.length;
44
+ const maskChar = mask[selectionStart - 1];
45
+ // This is a hack to make sure that changes are propagated appropriately
46
+ await Promise.resolve();
47
+ // check if the current value is not a space for characters and has an offset greater then 0
48
+ if (maskChar && !PATTERN_CHARS.includes(maskChar) && offset > 0) {
49
+ input.setSelectionRange(selectionStart + offset, selectionStart + offset);
50
+ }
51
+ else {
52
+ input.setSelectionRange(selectionStart, selectionStart);
53
+ }
54
+ if (prev !== input.value) {
55
+ input.dispatchEvent(new Event("input", { bubbles: true }));
56
+ }
57
+ }
58
+ onKeyDown(e) {
59
+ const input = e.target;
60
+ const mask = __classPrivateFieldGet(this, _USAInputMaskElement_instances, "m", _USAInputMaskElement_getMaskFor).call(this, input);
61
+ const patternChar = mask[input.selectionStart || 0];
62
+ if (e.key.length === 1 && /^[a-z0-9]/i.test(e.key)) {
63
+ // check that the key is a single character and that it is a letter or number
64
+ if (input.value.length >= mask.length) {
65
+ // prevent default once value is the same as the mask length
66
+ e.preventDefault();
67
+ }
68
+ else if (patternChar === PatternChar.Number) {
69
+ if (!REG_EXPS.Numbers.test(e.key)) {
70
+ // if pattern char specifies number and is not
71
+ e.preventDefault();
72
+ }
73
+ }
74
+ else if (patternChar === PatternChar.Letter) {
75
+ if (!REG_EXPS.Letters.test(e.key)) {
76
+ // if pattern char specifies letter and is not
77
+ e.preventDefault();
78
+ }
79
+ }
80
+ }
81
+ }
82
+ constructor() {
83
+ super(...arguments);
84
+ _USAInputMaskElement_instances.add(this);
85
+ _USAInputMaskElement_mask_accessor_storage.set(this, (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _mask_initializers, "")));
86
+ __runInitializers(this, _mask_extraInitializers);
87
+ }
88
+ };
89
+ _USAInputMaskElement_instances = new WeakSet();
90
+ _USAInputMaskElement_mask_accessor_storage = new WeakMap();
91
+ _USAInputMaskElement_getMaskFor = function _USAInputMaskElement_getMaskFor(input) {
92
+ return this.mask || input.getAttribute("mask") || "";
93
+ };
94
+ __setFunctionName(_classThis, "USAInputMaskElement");
95
+ (() => {
96
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
97
+ _mask_decorators = [attr()];
98
+ _onInput_decorators = [listen("input")];
99
+ _onKeyDown_decorators = [listen("keydown")];
100
+ __esDecorate(_classThis, null, _mask_decorators, { kind: "accessor", name: "mask", static: false, private: false, access: { has: obj => "mask" in obj, get: obj => obj.mask, set: (obj, value) => { obj.mask = value; } }, metadata: _metadata }, _mask_initializers, _mask_extraInitializers);
101
+ __esDecorate(_classThis, null, _onInput_decorators, { kind: "method", name: "onInput", static: false, private: false, access: { has: obj => "onInput" in obj, get: obj => obj.onInput }, metadata: _metadata }, null, _instanceExtraInitializers);
102
+ __esDecorate(_classThis, null, _onKeyDown_decorators, { kind: "method", name: "onKeyDown", static: false, private: false, access: { has: obj => "onKeyDown" in obj, get: obj => obj.onKeyDown }, metadata: _metadata }, null, _instanceExtraInitializers);
103
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
104
+ USAInputMaskElement = _classThis = _classDescriptor.value;
105
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
106
+ __runInitializers(_classThis, _classExtraInitializers);
107
+ })();
108
+ return USAInputMaskElement = _classThis;
109
+ })();
110
+ export { USAInputMaskElement };
111
+ //# sourceMappingURL=input-mask.element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-mask.element.js","sourceRoot":"","sources":["../../../src/lib/input-mask/input-mask.element.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { StoryObj } from "@storybook/web-components";
2
+ import type { USAInputMaskElement } from "./input-mask.element.js";
3
+ declare const meta: {
4
+ title: string;
5
+ tags: string[];
6
+ render(args: USAInputMaskElement): import("lit-html").TemplateResult<1>;
7
+ argTypes: {};
8
+ args: {
9
+ mask: string;
10
+ };
11
+ };
12
+ export default meta;
13
+ type Story = StoryObj<USAInputMaskElement>;
14
+ export declare const Primary: Story;
@@ -0,0 +1,31 @@
1
+ import { html } from "lit";
2
+ // More on how to set up stories at: https://storybook.js.org/docs/writing-stories
3
+ const meta = {
4
+ title: "input-mask",
5
+ tags: ["autodocs"],
6
+ render(args) {
7
+ return html `
8
+ <usa-input-mask>
9
+ <usa-input
10
+ name="phone"
11
+ placeholder=${args.mask}
12
+ autocomplete="off"
13
+ mask=${args.mask}
14
+ value="3042616138"
15
+ >
16
+ Phone:
17
+ </usa-input>
18
+ </usa-input-mask>
19
+ `;
20
+ },
21
+ argTypes: {},
22
+ args: {
23
+ mask: "(999) 999-9999",
24
+ },
25
+ };
26
+ export default meta;
27
+ // More on writing stories with args: https://storybook.js.org/docs/writing-stories/args
28
+ export const Primary = {
29
+ args: {},
30
+ };
31
+ //# sourceMappingURL=input-mask.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-mask.stories.js","sourceRoot":"","sources":["../../../src/lib/input-mask/input-mask.stories.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAI3B,kFAAkF;AAClF,MAAM,IAAI,GAAG;IACX,KAAK,EAAE,YAAY;IACnB,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,MAAM,CAAC,IAAI;QACT,OAAO,IAAI,CAAA;;;;wBAIS,IAAI,CAAC,IAAI;;iBAEhB,IAAI,CAAC,IAAI;;;;;;KAMrB,CAAC;IACJ,CAAC;IACD,QAAQ,EAAE,EAAE;IACZ,IAAI,EAAE;QACJ,IAAI,EAAE,gBAAgB;KACvB;CACkC,CAAC;AAEtC,eAAe,IAAI,CAAC;AAIpB,wFAAwF;AACxF,MAAM,CAAC,MAAM,OAAO,GAAU;IAC5B,IAAI,EAAE,EAAE;CACT,CAAC"}
@@ -0,0 +1,2 @@
1
+ import "./input-mask.element.js";
2
+ import "../input/input.element.js";
@@ -0,0 +1,85 @@
1
+ import "./input-mask.element.js";
2
+ import "../input/input.element.js";
3
+ import { assert, fixture, html } from "@open-wc/testing";
4
+ import { format } from "./format.js";
5
+ describe("format", () => {
6
+ it("should retrn the correct raw value", () => {
7
+ assert.deepEqual(format("(123) 456 7890", "(***) ***-****"), {
8
+ raw: "1234567890",
9
+ formatted: "(123) 456-7890",
10
+ });
11
+ });
12
+ it("should return a formatted phone number (***) ***-****", () => {
13
+ assert.deepEqual(format("1234567890", "(***) ***-****"), {
14
+ raw: "1234567890",
15
+ formatted: "(123) 456-7890",
16
+ });
17
+ });
18
+ it("should return a formatted phone number ***-***-****", () => {
19
+ assert.deepEqual(format("1234567890", "***-***-****"), {
20
+ raw: "1234567890",
21
+ formatted: "123-456-7890",
22
+ });
23
+ });
24
+ it("should only allow numbers", () => {
25
+ assert.deepEqual(format("304213abcd", "999-999-9999"), {
26
+ raw: "304213abcd",
27
+ formatted: "304-213-",
28
+ });
29
+ });
30
+ it("should only allow a mix of letters and numbers", () => {
31
+ assert.deepEqual(format("C94749", "A-99999"), {
32
+ raw: "C94749",
33
+ formatted: "C-94749",
34
+ });
35
+ });
36
+ });
37
+ describe("usa-input-mask", () => {
38
+ it("should format default value", async () => {
39
+ const el = await fixture(html `
40
+ <usa-input-mask mask="(999) 999-9999">
41
+ <input name="phone" value="1234567890" mask />
42
+ </usa-input-mask>
43
+ `);
44
+ const input = el.querySelector("input");
45
+ assert.equal(input.value, "(123) 456-7890");
46
+ });
47
+ it("should update value when on input event", async () => {
48
+ const el = await fixture(html `
49
+ <usa-input-mask>
50
+ <input name="phone" mask="(999) 999-9999" />
51
+ </usa-input-mask>
52
+ `);
53
+ const input = el.querySelector("input");
54
+ input.value = "8888888888";
55
+ input.dispatchEvent(new Event("input", { bubbles: true }));
56
+ assert.equal(input.value, "(888) 888-8888");
57
+ });
58
+ });
59
+ describe("usa-input-mask with usa-input", () => {
60
+ it("should format default value", async () => {
61
+ const el = await fixture(html `
62
+ <usa-input-mask mask="(999) 999-9999">
63
+ <usa-input name="phone" value="1234567890" id="TEST" mask></usa-input>
64
+ </usa-input-mask>
65
+ `);
66
+ const input = el.querySelector("usa-input");
67
+ assert.equal(input.value, "(123) 456-7890");
68
+ });
69
+ it("should update value when on input event", async () => {
70
+ const el = await fixture(html `
71
+ <usa-input-mask>
72
+ <usa-input
73
+ name="phone"
74
+ value="1234567890"
75
+ mask="(999) 999-9999"
76
+ ></usa-input>
77
+ </usa-input-mask>
78
+ `);
79
+ const input = el.querySelector("usa-input");
80
+ input.value = "8888888888";
81
+ input.dispatchEvent(new Event("input", { bubbles: true }));
82
+ assert.equal(input.value, "(888) 888-8888");
83
+ });
84
+ });
85
+ //# sourceMappingURL=input-mask.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-mask.test.js","sourceRoot":"","sources":["../../../src/lib/input-mask/input-mask.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface MaskableElement extends HTMLElement {
2
+ value: string;
3
+ selectionStart: number | null;
4
+ setSelectionRange(start: number, end: number): void;
5
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=maskable.element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maskable.element.js","sourceRoot":"","sources":["../../../src/lib/input-mask/maskable.element.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ declare global {
2
+ interface HTMLElementTagNameMap {
3
+ "usa-link": USALinkElement;
4
+ }
5
+ }
6
+ export declare class USALinkElement extends HTMLElement {
7
+ #private;
8
+ accessor href: string;
9
+ accessor target: "_blank" | "_parent" | "_self" | "_top" | "";
10
+ accessor title: string;
11
+ accessor disabled: boolean;
12
+ attributeChangedCallback(attr: string): void;
13
+ }
@@ -0,0 +1,98 @@
1
+ import { __classPrivateFieldGet, __classPrivateFieldSet, __esDecorate, __runInitializers, __setFunctionName } from "tslib";
2
+ import { attr, css, element, html, query } from "@joist/element";
3
+ let USALinkElement = (() => {
4
+ var _USALinkElement_anchor, _USALinkElement_href_accessor_storage, _USALinkElement_target_accessor_storage, _USALinkElement_title_accessor_storage, _USALinkElement_disabled_accessor_storage;
5
+ let _classDecorators = [element({
6
+ tagName: "usa-link",
7
+ shadowDom: [
8
+ css `
9
+ :host {
10
+ display: inline;
11
+ color: #005ea2;
12
+ text-decoration: underline;
13
+ }
14
+
15
+ a {
16
+ color: inherit;
17
+ }
18
+ `,
19
+ html `
20
+ <a>
21
+ <slot></slot>
22
+ </a>
23
+ `,
24
+ ],
25
+ })];
26
+ let _classDescriptor;
27
+ let _classExtraInitializers = [];
28
+ let _classThis;
29
+ let _classSuper = HTMLElement;
30
+ let _href_decorators;
31
+ let _href_initializers = [];
32
+ let _href_extraInitializers = [];
33
+ let _target_decorators;
34
+ let _target_initializers = [];
35
+ let _target_extraInitializers = [];
36
+ let _title_decorators;
37
+ let _title_initializers = [];
38
+ let _title_extraInitializers = [];
39
+ let _disabled_decorators;
40
+ let _disabled_initializers = [];
41
+ let _disabled_extraInitializers = [];
42
+ var USALinkElement = _classThis = class extends _classSuper {
43
+ constructor() {
44
+ super(...arguments);
45
+ _USALinkElement_href_accessor_storage.set(this, __runInitializers(this, _href_initializers, ""));
46
+ _USALinkElement_target_accessor_storage.set(this, (__runInitializers(this, _href_extraInitializers), __runInitializers(this, _target_initializers, "")));
47
+ _USALinkElement_title_accessor_storage.set(this, (__runInitializers(this, _target_extraInitializers), __runInitializers(this, _title_initializers, "")));
48
+ _USALinkElement_disabled_accessor_storage.set(this, (__runInitializers(this, _title_extraInitializers), __runInitializers(this, _disabled_initializers, false)));
49
+ _USALinkElement_anchor.set(this, (__runInitializers(this, _disabled_extraInitializers), query("a")));
50
+ }
51
+ get href() { return __classPrivateFieldGet(this, _USALinkElement_href_accessor_storage, "f"); }
52
+ set href(value) { __classPrivateFieldSet(this, _USALinkElement_href_accessor_storage, value, "f"); }
53
+ get target() { return __classPrivateFieldGet(this, _USALinkElement_target_accessor_storage, "f"); }
54
+ set target(value) { __classPrivateFieldSet(this, _USALinkElement_target_accessor_storage, value, "f"); }
55
+ get title() { return __classPrivateFieldGet(this, _USALinkElement_title_accessor_storage, "f"); }
56
+ set title(value) { __classPrivateFieldSet(this, _USALinkElement_title_accessor_storage, value, "f"); }
57
+ get disabled() { return __classPrivateFieldGet(this, _USALinkElement_disabled_accessor_storage, "f"); }
58
+ set disabled(value) { __classPrivateFieldSet(this, _USALinkElement_disabled_accessor_storage, value, "f"); }
59
+ attributeChangedCallback(attr) {
60
+ const anchor = __classPrivateFieldGet(this, _USALinkElement_anchor, "f").call(this);
61
+ switch (attr) {
62
+ case "href":
63
+ anchor.href = this.href;
64
+ break;
65
+ case "target":
66
+ anchor.target = this.target;
67
+ break;
68
+ case "title":
69
+ anchor.target = this.title;
70
+ break;
71
+ }
72
+ }
73
+ };
74
+ _USALinkElement_anchor = new WeakMap();
75
+ _USALinkElement_href_accessor_storage = new WeakMap();
76
+ _USALinkElement_target_accessor_storage = new WeakMap();
77
+ _USALinkElement_title_accessor_storage = new WeakMap();
78
+ _USALinkElement_disabled_accessor_storage = new WeakMap();
79
+ __setFunctionName(_classThis, "USALinkElement");
80
+ (() => {
81
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
82
+ _href_decorators = [attr()];
83
+ _target_decorators = [attr()];
84
+ _title_decorators = [attr()];
85
+ _disabled_decorators = [attr()];
86
+ __esDecorate(_classThis, null, _href_decorators, { kind: "accessor", name: "href", static: false, private: false, access: { has: obj => "href" in obj, get: obj => obj.href, set: (obj, value) => { obj.href = value; } }, metadata: _metadata }, _href_initializers, _href_extraInitializers);
87
+ __esDecorate(_classThis, null, _target_decorators, { kind: "accessor", name: "target", static: false, private: false, access: { has: obj => "target" in obj, get: obj => obj.target, set: (obj, value) => { obj.target = value; } }, metadata: _metadata }, _target_initializers, _target_extraInitializers);
88
+ __esDecorate(_classThis, null, _title_decorators, { kind: "accessor", name: "title", static: false, private: false, access: { has: obj => "title" in obj, get: obj => obj.title, set: (obj, value) => { obj.title = value; } }, metadata: _metadata }, _title_initializers, _title_extraInitializers);
89
+ __esDecorate(_classThis, null, _disabled_decorators, { kind: "accessor", name: "disabled", static: false, private: false, access: { has: obj => "disabled" in obj, get: obj => obj.disabled, set: (obj, value) => { obj.disabled = value; } }, metadata: _metadata }, _disabled_initializers, _disabled_extraInitializers);
90
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
91
+ USALinkElement = _classThis = _classDescriptor.value;
92
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
93
+ __runInitializers(_classThis, _classExtraInitializers);
94
+ })();
95
+ return USALinkElement = _classThis;
96
+ })();
97
+ export { USALinkElement };
98
+ //# sourceMappingURL=link.element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.element.js","sourceRoot":"","sources":["../../../src/lib/link/link.element.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;IA6BpD,cAAc;;4BArB1B,OAAO,CAAC;YACP,OAAO,EAAE,UAAU;YACnB,SAAS,EAAE;gBACT,GAAG,CAAA;;;;;;;;;;KAUF;gBACD,IAAI,CAAA;;;;KAIH;aACF;SACF,CAAC;;;;sBACkC,WAAW;;;;;;;;;;;;;2CAAnB,SAAQ,WAAW;;;YAEpC,4FAAO,EAAE,GAAC;YAGV,mJAAuD,EAAE,IAAC;YAG1D,mJAAQ,EAAE,IAAC;YAGX,wJAAW,KAAK,IAAC;YAE1B,wFAAU,KAAK,CAAC,GAAG,CAAC,GAAC;QAmBvB,CAAC;QA9BC,IAAS,IAAI,uFAAM;QAAnB,IAAS,IAAI,4FAAM;QAGnB,IAAS,MAAM,yFAAoD;QAAnE,IAAS,MAAM,8FAAoD;QAGnE,IAAS,KAAK,wFAAM;QAApB,IAAS,KAAK,6FAAM;QAGpB,IAAS,QAAQ,2FAAS;QAA1B,IAAS,QAAQ,gGAAS;QAI1B,wBAAwB,CAAC,IAAY;YACnC,MAAM,MAAM,GAAG,uBAAA,IAAI,8BAAQ,MAAZ,IAAI,CAAU,CAAC;YAE9B,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,MAAM;oBACT,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;oBACxB,MAAM;gBAER,KAAK,QAAQ;oBACX,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;oBAC5B,MAAM;gBAER,KAAK,OAAO;oBACV,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;oBAC3B,MAAM;YACV,CAAC;QACH,CAAC;;;;;;;;;;4BA9BA,IAAI,EAAE;8BAGN,IAAI,EAAE;6BAGN,IAAI,EAAE;gCAGN,IAAI,EAAE;QARP,uKAAS,IAAI,6BAAJ,IAAI,mFAAM;QAGnB,6KAAS,MAAM,6BAAN,MAAM,uFAAoD;QAGnE,0KAAS,KAAK,6BAAL,KAAK,qFAAM;QAGpB,mLAAS,QAAQ,6BAAR,QAAQ,2FAAS;QAX5B,6KAgCC;;;QAhCY,uDAAc;;;;SAAd,cAAc"}
@@ -0,0 +1,16 @@
1
+ import type { StoryObj } from "@storybook/web-components";
2
+ import type { USALinkElement } from "./link.element.js";
3
+ declare const meta: {
4
+ title: string;
5
+ tags: string[];
6
+ render(args: USALinkElement): import("lit-html").TemplateResult<1>;
7
+ argTypes: {
8
+ href: {
9
+ type: "string";
10
+ };
11
+ };
12
+ args: {};
13
+ };
14
+ export default meta;
15
+ type Story = StoryObj<USALinkElement>;
16
+ export declare const Primary: Story;
@@ -0,0 +1,23 @@
1
+ import { html } from "lit";
2
+ // More on how to set up stories at: https://storybook.js.org/docs/writing-stories
3
+ const meta = {
4
+ title: "usa-link",
5
+ tags: ["autodocs"],
6
+ render(args) {
7
+ return html `<usa-link href="${args.href}">Hello World</usa-link>`;
8
+ },
9
+ argTypes: {
10
+ href: {
11
+ type: "string",
12
+ },
13
+ },
14
+ args: {},
15
+ };
16
+ export default meta;
17
+ // More on writing stories with args: https://storybook.js.org/docs/writing-stories/args
18
+ export const Primary = {
19
+ args: {
20
+ href: "www.google.com",
21
+ },
22
+ };
23
+ //# sourceMappingURL=link.stories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link.stories.js","sourceRoot":"","sources":["../../../src/lib/link/link.stories.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAI3B,kFAAkF;AAClF,MAAM,IAAI,GAAG;IACX,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,MAAM,CAAC,IAAI;QACT,OAAO,IAAI,CAAA,mBAAmB,IAAI,CAAC,IAAI,0BAA0B,CAAC;IACpE,CAAC;IACD,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,IAAI,EAAE,QAAQ;SACf;KACF;IACD,IAAI,EAAE,EAAE;CACsB,CAAC;AAEjC,eAAe,IAAI,CAAC;AAIpB,wFAAwF;AACxF,MAAM,CAAC,MAAM,OAAO,GAAU;IAC5B,IAAI,EAAE;QACJ,IAAI,EAAE,gBAAgB;KACvB;CACF,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { USARadioElement } from "./radio.element.js";
2
+ declare global {
3
+ interface HTMLElementTagNameMap {
4
+ "usa-radio-option": USARadioElement;
5
+ }
6
+ }
7
+ export declare class USARadioOptionElement extends HTMLElement {
8
+ #private;
9
+ accessor value: string;
10
+ attributeChangedCallback(): void;
11
+ connectedCallback(): void;
12
+ disconnectedCallback(): void;
13
+ }