@cfpb/cfpb-design-system 4.4.0 → 5.0.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 (155) hide show
  1. package/CHANGELOG.md +32 -1
  2. package/dist/index.css +1 -3
  3. package/dist/index.js +3812 -53
  4. package/package.json +5 -2
  5. package/src/components/cfpb-buttons/button-link.scss +0 -1
  6. package/src/components/cfpb-forms/multiselect-model.js +2 -5
  7. package/src/components/cfpb-forms/multiselect.js +1 -1
  8. package/src/components/cfpb-layout/email-signup.scss +4 -1
  9. package/src/components/cfpb-layout/featured-content-module.scss +10 -5
  10. package/src/components/cfpb-tables/table.scss +1 -1
  11. package/src/elements/abstracts/custom-props.css +1 -1
  12. package/src/elements/abstracts/sizing-vars.scss +25 -24
  13. package/src/elements/cfpb-button/cfpb-button.scss +2 -1
  14. package/src/elements/cfpb-button/index.js +2 -4
  15. package/src/elements/cfpb-checkbox-icon/index.js +2 -4
  16. package/src/elements/cfpb-expandable/cfpb-expandable.component.scss +6 -0
  17. package/src/elements/cfpb-expandable/index.js +4 -6
  18. package/src/elements/cfpb-file-upload/cfpb-file-upload.component.scss +0 -4
  19. package/src/elements/cfpb-file-upload/index.js +2 -4
  20. package/src/elements/cfpb-flag-usa/cfpb-flag-usa.component.scss +12 -0
  21. package/src/elements/cfpb-flag-usa/index.js +14 -0
  22. package/src/elements/cfpb-form-alert/index.js +5 -7
  23. package/src/elements/cfpb-form-choice/index.js +2 -4
  24. package/src/elements/cfpb-form-search/index.js +11 -8
  25. package/src/elements/cfpb-form-search-input/index.js +16 -6
  26. package/src/elements/cfpb-icon-text/index.js +2 -4
  27. package/src/elements/cfpb-label/index.js +2 -4
  28. package/src/elements/cfpb-list/index.js +3 -4
  29. package/src/elements/cfpb-list/index.spec.js +2 -0
  30. package/src/elements/cfpb-list-item/index.js +2 -4
  31. package/src/elements/cfpb-pagination/index.js +4 -6
  32. package/src/elements/cfpb-select/cfpb-select.component.scss +12 -12
  33. package/src/elements/cfpb-select/index.js +4 -6
  34. package/src/elements/cfpb-tag-filter/index.js +3 -5
  35. package/src/elements/cfpb-tag-group/index.js +19 -19
  36. package/src/elements/cfpb-tag-topic/index.js +2 -4
  37. package/src/elements/cfpb-tagline/cfpb-tagline.component.scss +33 -0
  38. package/src/elements/cfpb-tagline/index.js +51 -0
  39. package/src/elements/cfpb-utilities/parse-child-data.js +4 -1
  40. package/src/elements/index.js +1 -0
  41. package/src/index.scss +1 -2
  42. package/src/utilities/atomic-helpers.js +2 -2
  43. package/src/utilities/behavior/behavior.js +9 -2
  44. package/src/utilities/behavior/flyout-menu.js +5 -7
  45. package/src/utilities/event-observer.js +7 -3
  46. package/src/utilities/transition/alpha-transition.js +1 -1
  47. package/src/utilities/transition/base-transition.js +1 -1
  48. package/src/utilities/transition/max-height-transition.js +1 -1
  49. package/src/utilities/transition/move-transition.js +1 -1
  50. package/src/utilities/type-checkers.js +9 -9
  51. package/src/utilities/type-checkers.spec.js +2 -3
  52. package/dist/abstracts/index.js +0 -2
  53. package/dist/abstracts/index.js.map +0 -7
  54. package/dist/base/index.css +0 -3
  55. package/dist/base/index.css.map +0 -7
  56. package/dist/base/index.js +0 -2
  57. package/dist/base/index.js.map +0 -7
  58. package/dist/components/cfpb-buttons/index.css +0 -2
  59. package/dist/components/cfpb-buttons/index.css.map +0 -7
  60. package/dist/components/cfpb-buttons/index.js +0 -2
  61. package/dist/components/cfpb-buttons/index.js.map +0 -7
  62. package/dist/components/cfpb-expandables/index.css +0 -2
  63. package/dist/components/cfpb-expandables/index.css.map +0 -7
  64. package/dist/components/cfpb-expandables/index.js +0 -2
  65. package/dist/components/cfpb-expandables/index.js.map +0 -7
  66. package/dist/components/cfpb-forms/index.css +0 -2
  67. package/dist/components/cfpb-forms/index.css.map +0 -7
  68. package/dist/components/cfpb-forms/index.js +0 -2
  69. package/dist/components/cfpb-forms/index.js.map +0 -7
  70. package/dist/components/cfpb-icons/index.css +0 -2
  71. package/dist/components/cfpb-icons/index.css.map +0 -7
  72. package/dist/components/cfpb-icons/index.js +0 -2
  73. package/dist/components/cfpb-icons/index.js.map +0 -7
  74. package/dist/components/cfpb-layout/index.css +0 -2
  75. package/dist/components/cfpb-layout/index.css.map +0 -7
  76. package/dist/components/cfpb-layout/index.js +0 -2
  77. package/dist/components/cfpb-layout/index.js.map +0 -7
  78. package/dist/components/cfpb-notifications/index.css +0 -2
  79. package/dist/components/cfpb-notifications/index.css.map +0 -7
  80. package/dist/components/cfpb-notifications/index.js +0 -2
  81. package/dist/components/cfpb-notifications/index.js.map +0 -7
  82. package/dist/components/cfpb-pagination/index.css +0 -2
  83. package/dist/components/cfpb-pagination/index.css.map +0 -7
  84. package/dist/components/cfpb-pagination/index.js +0 -2
  85. package/dist/components/cfpb-pagination/index.js.map +0 -7
  86. package/dist/components/cfpb-tables/index.css +0 -2
  87. package/dist/components/cfpb-tables/index.css.map +0 -7
  88. package/dist/components/cfpb-tables/index.js +0 -2
  89. package/dist/components/cfpb-tables/index.js.map +0 -7
  90. package/dist/components/cfpb-tooltips/index.css +0 -2
  91. package/dist/components/cfpb-tooltips/index.css.map +0 -7
  92. package/dist/components/cfpb-tooltips/index.js +0 -2
  93. package/dist/components/cfpb-tooltips/index.js.map +0 -7
  94. package/dist/components/cfpb-typography/index.css +0 -2
  95. package/dist/components/cfpb-typography/index.css.map +0 -7
  96. package/dist/components/cfpb-typography/index.js +0 -2
  97. package/dist/components/cfpb-typography/index.js.map +0 -7
  98. package/dist/elements/abstracts/index.js +0 -2
  99. package/dist/elements/abstracts/index.js.map +0 -7
  100. package/dist/elements/base/index.css +0 -3
  101. package/dist/elements/base/index.css.map +0 -7
  102. package/dist/elements/base/index.js +0 -2
  103. package/dist/elements/base/index.js.map +0 -7
  104. package/dist/elements/cfpb-button/index.js +0 -47
  105. package/dist/elements/cfpb-button/index.js.map +0 -7
  106. package/dist/elements/cfpb-checkbox-icon/index.js +0 -29
  107. package/dist/elements/cfpb-checkbox-icon/index.js.map +0 -7
  108. package/dist/elements/cfpb-expandable/index.css +0 -2
  109. package/dist/elements/cfpb-expandable/index.css.map +0 -7
  110. package/dist/elements/cfpb-expandable/index.js +0 -33
  111. package/dist/elements/cfpb-expandable/index.js.map +0 -7
  112. package/dist/elements/cfpb-file-upload/index.js +0 -47
  113. package/dist/elements/cfpb-file-upload/index.js.map +0 -7
  114. package/dist/elements/cfpb-form-alert/index.js +0 -32
  115. package/dist/elements/cfpb-form-alert/index.js.map +0 -7
  116. package/dist/elements/cfpb-form-choice/index.js +0 -46
  117. package/dist/elements/cfpb-form-choice/index.js.map +0 -7
  118. package/dist/elements/cfpb-form-search/index.js +0 -41
  119. package/dist/elements/cfpb-form-search/index.js.map +0 -7
  120. package/dist/elements/cfpb-form-search-input/index.js +0 -41
  121. package/dist/elements/cfpb-form-search-input/index.js.map +0 -7
  122. package/dist/elements/cfpb-icon-text/index.js +0 -29
  123. package/dist/elements/cfpb-icon-text/index.js.map +0 -7
  124. package/dist/elements/cfpb-label/index.js +0 -36
  125. package/dist/elements/cfpb-label/index.js.map +0 -7
  126. package/dist/elements/cfpb-list/index.js +0 -39
  127. package/dist/elements/cfpb-list/index.js.map +0 -7
  128. package/dist/elements/cfpb-list-item/index.js +0 -39
  129. package/dist/elements/cfpb-list-item/index.js.map +0 -7
  130. package/dist/elements/cfpb-multiselect/index.js +0 -48
  131. package/dist/elements/cfpb-multiselect/index.js.map +0 -7
  132. package/dist/elements/cfpb-pagination/index.js +0 -32
  133. package/dist/elements/cfpb-pagination/index.js.map +0 -7
  134. package/dist/elements/cfpb-select/index.css +0 -2
  135. package/dist/elements/cfpb-select/index.css.map +0 -7
  136. package/dist/elements/cfpb-select/index.js +0 -42
  137. package/dist/elements/cfpb-select/index.js.map +0 -7
  138. package/dist/elements/cfpb-tag-filter/index.js +0 -31
  139. package/dist/elements/cfpb-tag-filter/index.js.map +0 -7
  140. package/dist/elements/cfpb-tag-group/index.js +0 -29
  141. package/dist/elements/cfpb-tag-group/index.js.map +0 -7
  142. package/dist/elements/cfpb-tag-topic/index.js +0 -30
  143. package/dist/elements/cfpb-tag-topic/index.js.map +0 -7
  144. package/dist/elements/cfpb-utilities/index.js +0 -2
  145. package/dist/elements/cfpb-utilities/index.js.map +0 -7
  146. package/dist/elements/index.css +0 -2
  147. package/dist/elements/index.css.map +0 -7
  148. package/dist/elements/index.js +0 -53
  149. package/dist/elements/index.js.map +0 -7
  150. package/dist/index.css.map +0 -7
  151. package/dist/index.js.map +0 -7
  152. package/dist/utilities/index.css +0 -2
  153. package/dist/utilities/index.css.map +0 -7
  154. package/dist/utilities/index.js +0 -2
  155. package/dist/utilities/index.js.map +0 -7
@@ -1,9 +1,9 @@
1
- import { html, LitElement, css, unsafeCSS, nothing } from 'lit';
1
+ import { html, LitElement, nothing } from 'lit';
2
2
  import { ref, createRef } from 'lit/directives/ref.js';
3
3
  import { unsafeSVG } from 'lit/directives/unsafe-svg.js';
4
4
  import styles from './cfpb-select.component.scss';
5
- import expandIcon from '../../components/cfpb-icons/icons/down.svg';
6
- import collapseIcon from '../../components/cfpb-icons/icons/up.svg';
5
+ import expandIcon from '../../components/cfpb-icons/icons/down.svg?raw';
6
+ import collapseIcon from '../../components/cfpb-icons/icons/up.svg?raw';
7
7
  import { CfpbFormSearchInput } from '../cfpb-form-search-input';
8
8
  import { SearchService } from '../cfpb-utilities/search-service.js';
9
9
  import { MaxHeightTransition } from '../../utilities/transition/max-height-transition';
@@ -20,9 +20,7 @@ import { MultipleSelectEventProxy } from './multiple-select-event-proxy.js';
20
20
  * @slot - The main content for the select.
21
21
  */
22
22
  export class CfpbSelect extends LitElement {
23
- static styles = css`
24
- ${unsafeCSS(styles)}
25
- `;
23
+ static styles = styles;
26
24
 
27
25
  #eventProxy;
28
26
  #flyoutMenu;
@@ -1,7 +1,7 @@
1
- import { html, LitElement, css, unsafeCSS } from 'lit';
1
+ import { html, LitElement } from 'lit';
2
2
  import { unsafeHTML } from 'lit/directives/unsafe-html.js';
3
3
  import styles from './cfpb-tag-filter.component.scss';
4
- import icon from '../../components/cfpb-icons/icons/error.svg';
4
+ import icon from '../../components/cfpb-icons/icons/error.svg?raw';
5
5
 
6
6
  /**
7
7
  *
@@ -9,9 +9,7 @@ import icon from '../../components/cfpb-icons/icons/error.svg';
9
9
  * @slot - The content for the filter tag.
10
10
  */
11
11
  export class CfpbTagFilter extends LitElement {
12
- static styles = css`
13
- ${unsafeCSS(styles)}
14
- `;
12
+ static styles = styles;
15
13
 
16
14
  /**
17
15
  * @property {string} for - Associate the label with an ID elsewhere.
@@ -1,4 +1,4 @@
1
- import { html, LitElement, css, unsafeCSS } from 'lit';
1
+ import { html, LitElement } from 'lit';
2
2
  import styles from './cfpb-tag-group.component.scss';
3
3
  import { parseChildData } from '../cfpb-utilities/parse-child-data';
4
4
 
@@ -12,14 +12,12 @@ const SUPPORTED_TAG_LIST = ['CFPB-TAG-FILTER', 'CFPB-TAG-TOPIC'];
12
12
  * The tag group has a list of tags in the lightDOM that gets re-written
13
13
  * inside an unordered list in the shadowDOM so that it is read out
14
14
  * as a list of items in VoiceOver.
15
- * @attribute {string} lang - The element's language.
16
- * @fires addtag - A tag was added to the group.
17
- * @fires removetag - A tag was removed from the group.
15
+ * @fires CfpbTagGroup#event:"tag-added" - A tag was added to the group.
16
+ * @fires CfpbTagGroup#event:"tag-click" - A tag was clicked.
17
+ * @fires CfpbTagGroup#event:"tag-removed" - A tag was removed to the group.
18
18
  */
19
19
  export class CfpbTagGroup extends LitElement {
20
- static styles = css`
21
- ${unsafeCSS(styles)}
22
- `;
20
+ static styles = styles;
23
21
 
24
22
  /**
25
23
  * @property {string} childData - Structure data to create child components.
@@ -200,7 +198,7 @@ export class CfpbTagGroup extends LitElement {
200
198
 
201
199
  /**
202
200
  * Add a tag to the light and dark DOM.
203
- * @param {*} tag - The tag to add.
201
+ * @param {HTMLElement} tag - The tag to add.
204
202
  * @param {number} index - The position at which to add the tag.
205
203
  * @returns {boolean} false if the tag is already in the light DOM.
206
204
  */
@@ -215,11 +213,12 @@ export class CfpbTagGroup extends LitElement {
215
213
  this.#insertIntoShadowDom(tag, index);
216
214
 
217
215
  this.#refreshTagList();
216
+ return true;
218
217
  }
219
218
 
220
219
  /**
221
220
  * Add a tag to the light DOM.
222
- * @param {*} tag - The tag to add.
221
+ * @param {HTMLElement} tag - The tag to add.
223
222
  * @param {number} index - The position at which to add the tag.
224
223
  */
225
224
  #insertIntoLightDom(tag, index) {
@@ -232,7 +231,7 @@ export class CfpbTagGroup extends LitElement {
232
231
 
233
232
  /**
234
233
  * Add a tag to the shadow DOM.
235
- * @param {*} tag - The tag to add.
234
+ * @param {HTMLElement} tag - The tag to add.
236
235
  * @param {number} index - The position at which to add the tag.
237
236
  */
238
237
  #insertIntoShadowDom(tag, index) {
@@ -275,7 +274,7 @@ export class CfpbTagGroup extends LitElement {
275
274
  }
276
275
 
277
276
  /**
278
- * @param {*} tag - The tag to add.
277
+ * @param {HTMLElement} tag - The tag to add.
279
278
  * @returns {string} A unique ID.
280
279
  */
281
280
  #tagIdentifier(tag) {
@@ -285,7 +284,7 @@ export class CfpbTagGroup extends LitElement {
285
284
  /**
286
285
  * Remove a filter tag from the light DOM.
287
286
  * This is private because it's called by the mutation observer.
288
- * @param {*} tag - The tag to remove.
287
+ * @param {HTMLElement} tag - The tag to remove.
289
288
  * @returns {boolean} false if the wrapped tag was not found.
290
289
  */
291
290
  #removeTagNode(tag) {
@@ -324,11 +323,12 @@ export class CfpbTagGroup extends LitElement {
324
323
 
325
324
  this.#refreshTagList();
326
325
  this.focus();
326
+ return true;
327
327
  }
328
328
 
329
329
  /**
330
330
  * Remove a filter tag from the light and dark DOM.
331
- * @param {*} tag - The tag to remove.
331
+ * @param {HTMLElement} tag - The tag to remove.
332
332
  */
333
333
  removeTag(tag) {
334
334
  // Support passing in either light DOM <tag> or shadow DOM <li> if needed
@@ -341,18 +341,18 @@ export class CfpbTagGroup extends LitElement {
341
341
 
342
342
  /**
343
343
  * Get light and dark DOM.
344
- * @param {Node} node - The tag to remove.
345
- * @returns {Node|null} The tag node.
344
+ * @param {HTMLElement} tag - The tag to remove.
345
+ * @returns {HTMLElement|null} The tag node.
346
346
  */
347
- #getLightDomTag(node) {
347
+ #getLightDomTag(tag) {
348
348
  // If node is a wrapped shadow DOM <li>, get the orignal tag inside it.
349
- if (node.tagName === 'LI' && node.shadowRoot) {
349
+ if (tag.tagName === 'LI' && tag.shadowRoot) {
350
350
  // unlikely scenario if you don't expose shadow nodes externally.
351
- return node.querySelector('cfpb-tag-filter');
351
+ return tag.querySelector('cfpb-tag-filter');
352
352
  }
353
353
 
354
354
  // If node is already a light DOM tag or child <cfpb-tag-group>, return it.
355
- if (this.contains(node)) return node;
355
+ if (this.contains(tag)) return tag;
356
356
 
357
357
  return null;
358
358
  }
@@ -1,4 +1,4 @@
1
- import { html, LitElement, css, unsafeCSS } from 'lit';
1
+ import { html, LitElement } from 'lit';
2
2
  import styles from './cfpb-tag-topic.component.scss';
3
3
 
4
4
  /**
@@ -7,9 +7,7 @@ import styles from './cfpb-tag-topic.component.scss';
7
7
  * @slot - The content for the topic tag.
8
8
  */
9
9
  export class CfpbTagTopic extends LitElement {
10
- static styles = css`
11
- ${unsafeCSS(styles)}
12
- `;
10
+ static styles = styles;
13
11
 
14
12
  /**
15
13
  * @property {string} href - href attribute, if this is a topic link.
@@ -0,0 +1,33 @@
1
+ @use 'sass:math';
2
+ @use '@cfpb/cfpb-design-system/src/elements/abstracts' as *;
3
+
4
+ :host {
5
+ .a-tagline {
6
+ font-size: math.div(12px, $base-font-size-px) + rem;
7
+
8
+ display: grid;
9
+ grid-template-columns: 22px 1fr;
10
+ column-gap: 10px;
11
+
12
+ &__text {
13
+ // Needed for browsers with legacy/no grid support (e.g. IE11).
14
+ display: inline-block;
15
+ }
16
+
17
+ & cfpb-flag-usa {
18
+ margin-top: 1px;
19
+ }
20
+
21
+ &--large {
22
+ font-size: math.div(16px, $base-font-size-px) + rem;
23
+
24
+ & cfpb-flag-usa {
25
+ margin-top: 4px;
26
+ }
27
+ }
28
+ }
29
+
30
+ .u-nowrap {
31
+ white-space: nowrap;
32
+ }
33
+ }
@@ -0,0 +1,51 @@
1
+ import { html, LitElement } from 'lit';
2
+ import { CfpbFlagUsa } from '../cfpb-flag-usa';
3
+ import styles from './cfpb-tagline.component.scss';
4
+
5
+ /**
6
+ * @element cfpb-icon-text
7
+ * @slot - The main content for the tagline.
8
+ */
9
+ export class CfpbTagline extends LitElement {
10
+ static styles = styles;
11
+
12
+ /**
13
+ * @property {boolean} isLarge - Whether to use the larger tagline appearance.
14
+ * @returns {object} The map of properties.
15
+ */
16
+ static properties = {
17
+ isLarge: { type: Boolean, reflect: true },
18
+ };
19
+
20
+ constructor() {
21
+ super();
22
+ this.isLarge = false;
23
+ }
24
+
25
+ render() {
26
+ const baseClasses = ['a-tagline'];
27
+ if (this.isLarge) baseClasses.push('a-tagline--large');
28
+
29
+ return html`
30
+ <div
31
+ class="${baseClasses.join(' ')}"
32
+ aria-label="Official website of the United States government"
33
+ >
34
+ <cfpb-flag-usa></cfpb-flag-usa>
35
+ <div class="a-tagline__text">
36
+ <slot>
37
+ An official website of the
38
+ <span class="u-nowrap">United States government</span>
39
+ </slot>
40
+ </div>
41
+ </div>
42
+ `;
43
+ }
44
+
45
+ static init() {
46
+ CfpbFlagUsa.init();
47
+
48
+ globalThis.customElements.get('cfpb-tagline') ??
49
+ globalThis.customElements.define('cfpb-tagline', CfpbTagline);
50
+ }
51
+ }
@@ -4,7 +4,7 @@
4
4
  * - JS arrays
5
5
  * - JSON strings
6
6
  * - JSON-like strings with single quotes
7
- * @param {Array | string} input - An array or JSON string.
7
+ * @param {Array|string} input - An array or JSON string.
8
8
  * @param {object} options - optional settings.
9
9
  * @param {boolean} options.allowSingleQuotes - default true.
10
10
  * @returns {Array|null} Parsed array/string, or null if invalid.
@@ -20,6 +20,7 @@ export function parseChildData(input, options = {}) {
20
20
  }
21
21
 
22
22
  if (typeof input !== 'string') {
23
+ // eslint-disable-next-line no-console
23
24
  console.error('childData must be a string or array.');
24
25
  return null;
25
26
  }
@@ -38,12 +39,14 @@ export function parseChildData(input, options = {}) {
38
39
  const parsed = JSON.parse(text);
39
40
 
40
41
  if (!Array.isArray(parsed)) {
42
+ // eslint-disable-next-line no-console
41
43
  console.error('childData JSON must parse to an array.');
42
44
  return null;
43
45
  }
44
46
 
45
47
  return parsed;
46
48
  } catch (err) {
49
+ // eslint-disable-next-line no-console
47
50
  console.error('Failed to parse childData JSON:', err);
48
51
  return null;
49
52
  }
@@ -13,6 +13,7 @@ export * from './cfpb-list';
13
13
  export * from './cfpb-list-item';
14
14
  export * from './cfpb-form-search';
15
15
  export * from './cfpb-form-search-input';
16
+ export * from './cfpb-tagline';
16
17
  export * from './cfpb-tag-filter';
17
18
  export * from './cfpb-tag-topic';
18
19
  export * from './cfpb-tag-group';
package/src/index.scss CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  // Buttons.
3
2
  @forward 'components/cfpb-buttons/vars';
4
3
  @forward 'components/cfpb-buttons/button';
@@ -70,7 +69,7 @@
70
69
  // cfpb-button
71
70
  @forward 'elements/cfpb-button/cfpb-button';
72
71
  @forward 'elements/cfpb-button/cfpb-button-group';
73
- @forward 'elements/cfpb-button/cfpb-button-link';
72
+ @forward 'elements/cfpb-button/cfpb-button-link';
74
73
  @forward 'elements/cfpb-button/cfpb-button.component';
75
74
  @forward 'elements/cfpb-button/vars';
76
75
 
@@ -100,11 +100,11 @@ function setInitFlag(element) {
100
100
 
101
101
  /**
102
102
  * @param {string} selector - Selector to search for in the document.
103
- * @param {Function} Constructor - A constructor function.
103
+ * @param {new (...args: unknown[]) => object} Constructor - A constructor function.
104
104
  * @param {HTMLElement} [scope] - A dom node in which to query the selector.
105
105
  * If not supplied, it defaults to the `document`.
106
106
  * @param {object} config - Configuration will be provided to the Constructor's init()
107
- * @returns {Array} List of instances that were instantiated.
107
+ * @returns {Array<object>} List of instances that were instantiated.
108
108
  */
109
109
  function instantiateAll(selector, Constructor, scope, config = {}) {
110
110
  const base = scope || document;
@@ -1,3 +1,7 @@
1
+ /**
2
+ * @typedef {(options: unknown) => void} EventCallback
3
+ */
4
+
1
5
  /* ==========================================================================
2
6
  Dom Behaviors
3
7
  Behaviors are functionality that can be shared between different pieces
@@ -33,13 +37,16 @@ import { contains } from '../data-hook.js';
33
37
  */
34
38
  function _findElements(behaviorSelector, baseElement) {
35
39
  baseElement = baseElement || document;
40
+ // eslint-disable-next-line no-useless-assignment
36
41
  let behaviorElements = [];
37
42
 
38
43
  try {
39
44
  behaviorElements = baseElement.querySelectorAll(behaviorSelector);
40
45
  } catch (error) {
41
46
  const msg = `${behaviorSelector} not found in DOM! ${error}`;
42
- throw new Error(msg);
47
+ throw new Error(msg, {
48
+ cause: error,
49
+ });
43
50
  }
44
51
 
45
52
  if (
@@ -56,7 +63,7 @@ function _findElements(behaviorSelector, baseElement) {
56
63
  * @param {( string|HTMLElement|Array|NodeList )} behaviorElement - Used to
57
64
  * query dom for elements.
58
65
  * @param {string} event - Event type to add to element.
59
- * @param {Function} eventHandler - Callback for event.
66
+ * @param {EventCallback} eventHandler - Callback for event.
60
67
  * @param {HTMLElement} baseElement - Containing element
61
68
  * for the behavior element.
62
69
  * @returns {Array|NodeList} if it exists in the dom, null otherwise.
@@ -333,8 +333,8 @@ function FlyoutMenu(element, autoHideContent = true) {
333
333
  /**
334
334
  * Set the transition that runs when this flyout is expanded/collapsed.
335
335
  * @param {BaseTransition} transition - A transition object.
336
- * @param {Function} collapseMethod - The collapse method to call on the transition.
337
- * @param {Function} expandMethod - The expand method to call on the transition.
336
+ * @param {()=>void} collapseMethod - The collapse method to call on the transition.
337
+ * @param {()=>void} expandMethod - The expand method to call on the transition.
338
338
  */
339
339
  function setTransition(transition, collapseMethod, expandMethod) {
340
340
  _transition = transition;
@@ -356,12 +356,10 @@ function FlyoutMenu(element, autoHideContent = true) {
356
356
  _transition.remove();
357
357
  }
358
358
 
359
- let UNDEFINED;
359
+ _transition = undefined;
360
360
 
361
- _transition = UNDEFINED;
362
-
363
- _expandTransitionMethod = UNDEFINED;
364
- _collapseTransitionMethod = UNDEFINED;
361
+ _expandTransitionMethod = undefined;
362
+ _collapseTransitionMethod = undefined;
365
363
  }
366
364
 
367
365
  /**
@@ -1,3 +1,7 @@
1
+ /**
2
+ * @typedef {(options: unknown) => void} EventCallback
3
+ */
4
+
1
5
  /**
2
6
  * EventObserver
3
7
  * @class
@@ -12,7 +16,7 @@ function EventObserver() {
12
16
  /**
13
17
  * Register an event listener.
14
18
  * @param {string} event - The event name to listen for.
15
- * @param {Function} callback - The function called when the event has fired.
19
+ * @param {EventCallback} callback - The function called when the event has fired.
16
20
  * @returns {object} The instance this EventObserver instance is decorating.
17
21
  */
18
22
  function addEventListener(event, callback) {
@@ -29,7 +33,7 @@ function EventObserver() {
29
33
  * Remove an added event listener.
30
34
  * Must match a call made to addEventListener.
31
35
  * @param {string} event - The event name to remove.
32
- * @param {Function} callback - The function attached to the event.
36
+ * @param {EventCallback} callback - The function attached to the event.
33
37
  * @returns {object} The instance this EventObserver instance is decorating.
34
38
  */
35
39
  function removeEventListener(event, callback) {
@@ -49,7 +53,7 @@ function EventObserver() {
49
53
  /**
50
54
  * Broadcast an event.
51
55
  * @param {string} event - The type of event to broadcast.
52
- * @param {object} options - The event object to pass to the event handler.
56
+ * @param {object} [options] - The event object to pass to the event handler.
53
57
  * @returns {object} The instance this EventObserver instance is decorating.
54
58
  */
55
59
  function dispatchEvent(event, options) {
@@ -21,7 +21,7 @@ function AlphaTransition(element) {
21
21
  const _baseTransition = new BaseTransition(element, CLASSES, this);
22
22
 
23
23
  /**
24
- * @param {Function} initialClass - The initial state for this transition.
24
+ * @param {string} initialClass - The initial CSS class to set the state for this transition.
25
25
  * @returns {AlphaTransition} An instance.
26
26
  */
27
27
  function init(initialClass) {
@@ -202,7 +202,7 @@ function BaseTransition(element, classes, child) {
202
202
  }
203
203
 
204
204
  /**
205
- * @param {Function} initialClass - The initial state for this transition.
205
+ * @param {string} initialClass - The initial CSS class to set the state for this transition.
206
206
  * @returns {BaseTransition} An instance.
207
207
  */
208
208
  function init(initialClass) {
@@ -68,7 +68,7 @@ function MaxHeightTransition(element) {
68
68
  }
69
69
 
70
70
  /**
71
- * @param {Function} initialClass - The initial state for this transition.
71
+ * @param {string} initialClass - The initial CSS class to set the state for this transition.
72
72
  * @returns {MaxHeightTransition} An instance.
73
73
  */
74
74
  function init(initialClass) {
@@ -25,7 +25,7 @@ function MoveTransition(element) {
25
25
  const _baseTransition = new BaseTransition(element, CLASSES, this);
26
26
 
27
27
  /**
28
- * @param {Function} initialClass - The initial state for this transition.
28
+ * @param {string} initialClass - The initial CSS class to set the state for this transition.
29
29
  * @returns {MoveTransition} An instance.
30
30
  */
31
31
  function init(initialClass) {
@@ -17,7 +17,7 @@ const _toString = Object.prototype.toString;
17
17
  * @kind function
18
18
  * @description
19
19
  * Determines if a reference is undefined.
20
- * @param {*} value - Reference to check.
20
+ * @param {unknown} value - Reference to check.
21
21
  * @returns {boolean} True if `value` is undefined.
22
22
  */
23
23
  function isUndefined(value) {
@@ -29,7 +29,7 @@ function isUndefined(value) {
29
29
  * @kind function
30
30
  * @description
31
31
  * Determines if a reference is defined.
32
- * @param {*} value - Reference to check.
32
+ * @param {unknown} value - Reference to check.
33
33
  * @returns {boolean} True if `value` is defined.
34
34
  */
35
35
  function isDefined(value) {
@@ -43,7 +43,7 @@ function isDefined(value) {
43
43
  * Determines if a reference is an `Object`.
44
44
  * Unlike `typeof` in JavaScript, `null`s are not
45
45
  * considered to be objects. Note that JavaScript arrays are objects.
46
- * @param {*} value - Reference to check.
46
+ * @param {unknown} value - Reference to check.
47
47
  * @returns {boolean} True if `value` is an `Object` but not `null`.
48
48
  */
49
49
  function isObject(value) {
@@ -56,7 +56,7 @@ function isObject(value) {
56
56
  * @kind function
57
57
  * @description
58
58
  * Determines if a reference is a `String`.
59
- * @param {*} value - Reference to check.
59
+ * @param {unknown} value - Reference to check.
60
60
  * @returns {boolean} True if `value` is a `String`.
61
61
  */
62
62
  function isString(value) {
@@ -75,7 +75,7 @@ function isString(value) {
75
75
  * [`isFinite'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/
76
76
  * Reference/Global_Objects/isFinite)
77
77
  * method.
78
- * @param {*} value - Reference to check.
78
+ * @param {unknown} value - Reference to check.
79
79
  * @returns {boolean} True if `value` is a `Number`.
80
80
  */
81
81
  function isNumber(value) {
@@ -87,7 +87,7 @@ function isNumber(value) {
87
87
  * @kind function
88
88
  * @description
89
89
  * Determines if a value is a date.
90
- * @param {*} value - Reference to check.
90
+ * @param {unknown} value - Reference to check.
91
91
  * @returns {boolean} True if `value` is a `Date`.
92
92
  */
93
93
  function isDate(value) {
@@ -99,7 +99,7 @@ function isDate(value) {
99
99
  * @kind function
100
100
  * @description
101
101
  * Determines if a reference is an `Array`.
102
- * @param {*} value - Reference to check.
102
+ * @param {unknown} value - Reference to check.
103
103
  * @returns {boolean} True if `value` is an `Array`.
104
104
  */
105
105
  const isArray =
@@ -113,7 +113,7 @@ const isArray =
113
113
  * @kind function
114
114
  * @description
115
115
  * Determines if a reference is a `Function`.
116
- * @param {*} value - Reference to check.
116
+ * @param {unknown} value - Reference to check.
117
117
  * @returns {boolean} True if `value` is a `Function`.
118
118
  */
119
119
  function isFunction(value) {
@@ -127,7 +127,7 @@ function isFunction(value) {
127
127
  * @kind function
128
128
  * @description
129
129
  * Determines if a reference is empty.
130
- * @param {*} value - Reference to check.
130
+ * @param {unknown} value - Reference to check.
131
131
  * @returns {boolean} True if `value` is empty.
132
132
  */
133
133
  function isEmpty(value) {
@@ -29,11 +29,10 @@ const anObject = {
29
29
  };
30
30
 
31
31
  const anArray = [1, 2, 3];
32
- let UNDEFINED;
33
32
 
34
33
  describe('TypeCheckers isUndefined', () => {
35
34
  it('should identify undefined variables', () => {
36
- expect(isUndefined(UNDEFINED)).toBe(true);
35
+ expect(isUndefined(undefined)).toBe(true);
37
36
  });
38
37
 
39
38
  it('should NOT return true for blank variables', () => {
@@ -55,7 +54,7 @@ describe('TypeCheckers isDefined', () => {
55
54
  });
56
55
 
57
56
  it('should NOT return true for undefined variables', () => {
58
- expect(isDefined(UNDEFINED)).toBe(false);
57
+ expect(isDefined(undefined)).toBe(false);
59
58
  });
60
59
  });
61
60
 
@@ -1,2 +0,0 @@
1
- (()=>{var m={bpXS:{min:0,max:600},bpSM:{min:601,max:900},bpMED:{min:901,max:1020},bpLG:{min:1021,max:1200},bpXL:{min:1201}};})();
2
- //# sourceMappingURL=index.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../packages/cfpb-design-system/src/abstracts/vars-breakpoints.js"],
4
- "sourcesContent": ["/* ==========================================================================\n Design System\n Breakpoint JavaScript variables.\n All values are pixel based.\n\n NOTE: If any of the values in this file are adjusted,\n they need to be adjusted in vars-breakpoints.scss as well.\n ========================================================================== */\n\nexport const varsBreakpoints = {\n bpXS: {\n min: 0,\n max: 600,\n },\n bpSM: {\n min: 601,\n max: 900,\n },\n bpMED: {\n min: 901,\n max: 1020,\n },\n bpLG: {\n min: 1021,\n max: 1200,\n },\n bpXL: {\n min: 1201,\n },\n};\n"],
5
- "mappings": "MASO,IAAMA,EAAkB,CAC7B,KAAM,CACJ,IAAK,EACL,IAAK,GACP,EACA,KAAM,CACJ,IAAK,IACL,IAAK,GACP,EACA,MAAO,CACL,IAAK,IACL,IAAK,IACP,EACA,KAAM,CACJ,IAAK,KACL,IAAK,IACP,EACA,KAAM,CACJ,IAAK,IACP,CACF",
6
- "names": ["varsBreakpoints"]
7
- }
@@ -1,3 +0,0 @@
1
- @charset "UTF-8";html{font-family:sans-serif;-webkit-text-size-adjust:100%;text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{font-size:2em;margin:.67em 0}hr{box-sizing:initial;height:0}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201c" "\201d" "\2018" "\2019"}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sup{top:-.5em}sub{bottom:-.25em}figure{margin:0}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}button,input,select,textarea{font-family:inherit;font-size:100%;margin:0}button,input{line-height:normal}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=search]{appearance:textfield;box-sizing:initial}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}:root{--font-adjust-base:.517;--font-adjust-step:.0054;--font-adjust-h1:calc(var(--font-size-adjust-base) + var(--font-adjust-step)*5);--font-adjust-h2:calc(var(--font-size-adjust-base) + var(--font-adjust-step)*4);--font-adjust-h3:calc(var(--font-size-adjust-base) + var(--font-adjust-step)*3);--font-adjust-h4:calc(var(--font-size-adjust-base) + var(--font-adjust-step)*2);--font-adjust-h5:calc(var(--font-size-adjust-base) + var(--font-adjust-step)*1);--font-adjust-h6:var(--font-adjust-base);--font-adjust-body:var(--font-adjust-base);--input-text-default:var(--black);--input-text-disabled-default:var(--gray-dark);--input-text-placeholder-default:var(--gray-dark);--input-border-default:var(--gray-60);--input-border-disabled:var(--gray-60);--input-border-success:var(--green);--input-border-warning:var(--gold);--input-border-error:var(--red);--input-border-hover-default:var(--pacific);--input-border-focus-default:var(--pacific);--input-bg-default:var(--white);--input-bg-disabled-default:var(--gray-10);--form-alert-icon-color-default:var(--gray);--form-alert-icon-color-success:var(--green);--form-alert-icon-color-warning:var(--gold);--form-alert-icon-color-error:var(--red);--select-border-default:var(--gray-60);--select-border-width-default:1px;--select-border-error:var(--red);--select-border-width-error:2px;--select-border-hover-default:var(--pacific);--select-border-focus-default:var(--pacific);--select-bg-disabled-default:var(--gray-10);--select-icon-bg-default:var(--gray-10);--select-text-disabled-default:var(--gray-dark);--choice-border-default:var(--gray-60);--choice-border-disabled:var(--gray-60);--choice-border-success:var(--green);--choice-border-warning:var(--gold);--choice-border-error:var(--red);--choice-border-hover-default:var(--pacific);--choice-border-focus-default:var(--pacific);--choice-outline-focus-default:var(--pacific);--choice-bg-default:var(--white);--choice-bg-disabled:var(--gray-10);--choice-bg-selected-default:var(--pacific);--choice-bg-selected-disabled:var(--gray-40);--choice-bg-selected-focus-default:var(--pacific);--choice-label-disabled-default:var(--gray-dark)}body{color:var(--black);font-family:var(--font-stack);font-size:100%;font-size-adjust:var(--font-adjust-body);line-height:1.375;-webkit-font-smoothing:antialiased}button,input,select,textarea{font-family:var(--font-stack);font-size-adjust:var(--font-adjust-body);line-height:1.1875}input[type=date]{display:revert;min-height:35px;min-width:100px;padding-bottom:0;padding-top:0}input[type=date].a-text-input--full{min-width:100%}hr{border:none;border-top:1px solid var(--gray-40)}b,strong{font-weight:600}h1,h2,h3,h4,h5,h6{margin-top:0}.h1,h1{font-size:2.125em;font-size-adjust:var(--font-adjust-h1);font-weight:600;letter-spacing:inherit;line-height:1.25;margin-bottom:.4411764706em;text-transform:inherit}blockquote+.h1,blockquote+h1,dl+.h1,dl+h1,figure+.h1,figure+h1,img+.h1,img+h1,ol+.h1,ol+h1,p+.h1,p+h1,table+.h1,table+h1,ul+.h1,ul+h1{margin-top:1.7647058824em}@media only screen and (max-width:37.5em){.h2+.h1,.h2+h1,.h3+.h1,.h3+h1,.h4+.h1,.h4+h1,.h5+.h1,.h5+h1,.h6+.h1,.h6+h1,h2+.h1,h2+h1,h3+.h1,h3+h1,h4+.h1,h4+h1,h5+.h1,h5+h1,h6+.h1,h6+h1{margin-top:1.1538461538em}.h1,h1{font-size:1.625em;font-size-adjust:var(--font-adjust-h2);font-weight:600;letter-spacing:inherit;line-height:1.25;margin-bottom:.5769230769em;text-transform:inherit}blockquote+.h1,blockquote+h1,dl+.h1,dl+h1,figure+.h1,figure+h1,img+.h1,img+h1,ol+.h1,ol+h1,p+.h1,p+h1,table+.h1,table+h1,ul+.h1,ul+h1{margin-top:1.7307692308em}.h1+.h1,.h1+h1,.h3+.h1,.h3+h1,.h4+.h1,.h4+h1,.h5+.h1,.h5+h1,.h6+.h1,.h6+h1,h1+.h1,h1+h1,h3+.h1,h3+h1,h4+.h1,h4+h1,h5+.h1,h5+h1,h6+.h1,h6+h1{margin-top:1.1538461538em}}.h2,h2{font-size:1.625em;font-size-adjust:var(--font-adjust-h2);font-weight:600;letter-spacing:inherit;line-height:1.25;margin-bottom:.5769230769em;text-transform:inherit}blockquote+.h2,blockquote+h2,dl+.h2,dl+h2,figure+.h2,figure+h2,img+.h2,img+h2,ol+.h2,ol+h2,p+.h2,p+h2,table+.h2,table+h2,ul+.h2,ul+h2{margin-top:1.7307692308em}.h1+.h2,.h1+h2,.h3+.h2,.h3+h2,.h4+.h2,.h4+h2,.h5+.h2,.h5+h2,.h6+.h2,.h6+h2,h1+.h2,h1+h2,h3+.h2,h3+h2,h4+.h2,h4+h2,h5+.h2,h5+h2,h6+.h2,h6+h2{margin-top:1.1538461538em}@media only screen and (max-width:37.5em){blockquote+.h2,blockquote+h2,dl+.h2,dl+h2,figure+.h2,figure+h2,img+.h2,img+h2,ol+.h2,ol+h2,p+.h2,p+h2,table+.h2,table+h2,ul+.h2,ul+h2{margin-top:1.3636363636em}.h2,h2{font-size:1.375em;font-size-adjust:var(--font-adjust-h3);font-weight:600;letter-spacing:inherit;line-height:1.25;margin-bottom:.6818181818em;text-transform:inherit}.h1+.h2,.h1+h2,.h2+.h2,.h2+h2,.h4+.h2,.h4+h2,.h5+.h2,.h5+h2,.h6+.h2,.h6+h2,blockquote+.h2,blockquote+h2,dl+.h2,dl+h2,figure+.h2,figure+h2,h1+.h2,h1+h2,h2+.h2,h2+h2,h4+.h2,h4+h2,h5+.h2,h5+h2,h6+.h2,h6+h2,img+.h2,img+h2,ol+.h2,ol+h2,p+.h2,p+h2,table+.h2,table+h2,ul+.h2,ul+h2{margin-top:1.3636363636em}}.h3,h3{font-size:1.375em;font-size-adjust:var(--font-adjust-h3);font-weight:400;letter-spacing:inherit;line-height:1.25;margin-bottom:.6818181818em;text-transform:inherit}.h1+.h3,.h1+h3,.h2+.h3,.h2+h3,.h4+.h3,.h4+h3,.h5+.h3,.h5+h3,.h6+.h3,.h6+h3,blockquote+.h3,blockquote+h3,dl+.h3,dl+h3,figure+.h3,figure+h3,h1+.h3,h1+h3,h2+.h3,h2+h3,h4+.h3,h4+h3,h5+.h3,h5+h3,h6+.h3,h6+h3,img+.h3,img+h3,ol+.h3,ol+h3,p+.h3,p+h3,table+.h3,table+h3,ul+.h3,ul+h3{margin-top:1.3636363636em}@media only screen and (max-width:37.5em){.h3,h3{font-size:1.125em;font-size-adjust:var(--font-adjust-h4);font-weight:400;letter-spacing:inherit;line-height:1.25;margin-bottom:.8333333333em;text-transform:inherit}.h1+.h3,.h1+h3,.h2+.h3,.h2+h3,.h3+.h3,.h3+h3,.h5+.h3,.h5+h3,.h6+.h3,.h6+h3,blockquote+.h3,blockquote+h3,dl+.h3,dl+h3,figure+.h3,figure+h3,h1+.h3,h1+h3,h2+.h3,h2+h3,h3+.h3,h3+h3,h5+.h3,h5+h3,h6+.h3,h6+h3,img+.h3,img+h3,ol+.h3,ol+h3,p+.h3,p+h3,table+.h3,table+h3,ul+.h3,ul+h3{margin-top:1.6666666667em}}.h4,h4{font-size:1.125em;font-size-adjust:var(--font-adjust-h4);font-weight:500;letter-spacing:inherit;line-height:1.25;margin-bottom:.8333333333em;text-transform:inherit}.h1+.h4,.h1+h4,.h2+.h4,.h2+h4,.h3+.h4,.h3+h4,.h5+.h4,.h5+h4,.h6+.h4,.h6+h4,blockquote+.h4,blockquote+h4,dl+.h4,dl+h4,figure+.h4,figure+h4,h1+.h4,h1+h4,h2+.h4,h2+h4,h3+.h4,h3+h4,h5+.h4,h5+h4,h6+.h4,h6+h4,img+.h4,img+h4,ol+.h4,ol+h4,p+.h4,p+h4,table+.h4,table+h4,ul+.h4,ul+h4{margin-top:1.6666666667em}@media only screen and (max-width:37.5em){.h4,h4{font-size:1em;line-height:1.125;margin-bottom:.625em}}.h5,h5{font-size:.875em;font-size-adjust:var(--font-adjust-h5);font-weight:600;letter-spacing:1px;line-height:1.25;margin-bottom:1.0714285714em;text-transform:uppercase}.h1+.h5,.h1+h5,.h2+.h5,.h2+h5,.h3+.h5,.h3+h5,.h4+.h5,.h4+h5,.h6+.h5,.h6+h5,blockquote+.h5,blockquote+h5,dl+.h5,dl+h5,figure+.h5,figure+h5,h1+.h5,h1+h5,h2+.h5,h2+h5,h3+.h5,h3+h5,h4+.h5,h4+h5,h6+.h5,h6+h5,img+.h5,img+h5,ol+.h5,ol+h5,p+.h5,p+h5,table+.h5,table+h5,ul+.h5,ul+h5{margin-top:2.1428571429em}.h6,h6{font-size:.75em;font-size-adjust:var(--font-adjust-h6);font-weight:600;letter-spacing:1px;line-height:1.25;margin-bottom:1.25em;text-transform:uppercase}.h1+.h6,.h1+h6,.h2+.h6,.h2+h6,.h3+.h6,.h3+h6,.h4+.h6,.h4+h6,.h5+.h6,.h5+h6,blockquote+.h6,blockquote+h6,dl+.h6,dl+h6,figure+.h6,figure+h6,h1+.h6,h1+h6,h2+.h6,h2+h6,h3+.h6,h3+h6,h4+.h6,h4+h6,h5+.h6,h5+h6,img+.h6,img+h6,ol+.h6,ol+h6,p+.h6,p+h6,table+.h6,table+h6,ul+.h6,ul+h6{margin-top:2.5em}.lead-paragraph{font-size:1.375em;font-size-adjust:var(--font-adjust-h3);font-weight:400;letter-spacing:inherit;line-height:1.25;margin-bottom:15px;margin-top:0;text-transform:inherit}@media only screen and (max-width:37.5em){.lead-paragraph{font-size:1.125em;font-size-adjust:var(--font-adjust-h4);font-weight:400;letter-spacing:inherit;line-height:1.25;text-transform:inherit}}.superheading{font-size:3em;font-weight:400;line-height:1.25;margin-bottom:.4166666667em}blockquote,dl,figure,ol,p,table,ul{margin-bottom:.9375em;margin-top:0}blockquote:last-child,dl:last-child,figure:last-child,ol:last-child,p:last-child,table:last-child,ul:last-child{margin-bottom:0}p+ol,p+ul{margin-top:-.3125em}ol ol,ol ul,ul ol,ul ul{margin-top:.5em}li{margin-bottom:.5em}li:last-child,nav li{margin-bottom:0}a{color:var(--pacific);text-decoration-color:var(--pacific);text-decoration-line:underline;text-decoration-style:dotted;text-decoration-thickness:1px;text-underline-offset:4.5px}a.visited,a:visited{color:var(--teal);text-decoration-color:var(--teal)}a.hover,a:hover{color:var(--pacific-dark);text-decoration-color:var(--pacific-dark);text-decoration-style:solid}a.focus,a:focus{outline:thin dotted;outline-offset:1px}a.active,a:active{color:var(--navy);text-decoration-color:var(--navy);text-decoration-style:solid}nav a{text-decoration-line:none}ul{list-style:square;padding-left:1.125em}ul ul{list-style-type:circle}ol{padding-left:1.3125em}ol li:nth-last-child(n+10),ol li:nth-last-child(n+10)~li{margin-left:.5625rem}ol ol{list-style-type:lower-alpha}ol ol li{margin-left:0!important}ol ol ol{list-style-type:lower-roman}nav ol,nav ol ol,nav ul,nav ul ul{list-style:none;list-style-image:none}caption{margin-bottom:.625em;text-align:left}td,th{padding:.625em}thead td,thead th{background:var(--gray-5);color:var(--black);font-size:1em;padding:.7142857143em;vertical-align:top}tbody tr,thead{border-bottom:1px solid var(--gray)}th{font-weight:600;text-align:left}thead th .h2,thead th .h3,thead th .h4,thead th .h5,thead th .h6,thead th h2,thead th h3,thead th h4,thead th h5,thead th h6{font-size:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;text-transform:inherit}blockquote{margin-left:.9375em;margin-right:.9375em}@media only screen and (min-width:37.5625em){blockquote{margin-left:1.875em;margin-right:1.875em}}img{max-width:100%}figure{margin-left:0;margin-right:0}figure img{vertical-align:middle}code,pre{background:var(--gray-5);border-radius:4px;color:var(--black);font-family:Input Mono,Consolas,Monaco,Courier New,monospace}code{font-size:.8125em;padding:.2307692308em .2307692308em 0}pre{display:block;overflow-wrap:break-word;padding:.625em .9375em;white-space:pre-wrap}pre code{background-color:initial;padding:0}
2
- /*! normalize.css v2.1.3 | MIT License | git.io/normalize */
3
- /*# sourceMappingURL=index.css.map */