@nysds/nys-globalfooter 1.22.1 → 1.22.3

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.
@@ -7,13 +7,13 @@ import "@nysds/nys-divider";
7
7
  * █ █ █ █▄▄▄█ ▀▀▀▄▄ █ █ ▀▀▀▄▄
8
8
  * █ ▀█ █ █▄▄▄█ █▄▄▀ █▄▄▄█
9
9
  *
10
- * Global Footer Component v1.22.1
10
+ * Global Footer Component v1.22.3
11
11
  * Part of the New York State Design System
12
12
  * Repository: https://github.com/its-hcd/nysds
13
13
  * License: MIT
14
14
  */
15
15
  /*!
16
- * New York State Design System v1.22.1
16
+ * New York State Design System v1.22.3
17
17
  * Description: A design system for New York State's digital products.
18
18
  * Repository: https://github.com/its-hcd/nysds
19
19
  * License: MIT
@@ -1 +1 @@
1
- {"version":3,"file":"nys-globalfooter.js","sources":["../../internals/dist/index.js","../src/nys-globalfooter.ts"],"sourcesContent":["import { LitElement as u } from \"lit\";\n/*!\n * New York State Design System v1.22.1\n * Description: A design system for New York State's digital products.\n * Repository: https://github.com/its-hcd/nysds\n * License: MIT\n */\nlet y = 0;\nfunction f(e) {\n return `${e}-${Date.now()}-${y++}`;\n}\nfunction N(e, t, s) {\n e.dispatchEvent(\n new CustomEvent(t, { detail: s, bubbles: !0, composed: !0 })\n );\n}\nfunction I(e, t) {\n e.dispatchEvent(\n new Event(`nys-${t}`, { bubbles: !0, composed: !0 })\n );\n}\nconst p = {\n labelledby: \"ariaLabelledByElements\",\n describedby: \"ariaDescribedByElements\"\n}, g = {\n labelledby: \"ariaLabel\",\n describedby: \"ariaDescription\"\n};\nfunction _(e) {\n return \"ariaDescribedByElements\" in e;\n}\nfunction E(e) {\n return e === \"errormessage\" ? \"aria-errormessage\" : `aria-${e}`;\n}\nfunction d(e) {\n return e.filter((t) => !!t);\n}\nfunction A(e) {\n return e.map((t) => (t.id || (t.id = f(\"nys-ref\")), t.id));\n}\nfunction w(e, t, s) {\n const n = d(s), i = E(t);\n n.length ? e.setAttribute(i, A(n).join(\" \")) : e.removeAttribute(i);\n}\nfunction x(e, t, s, n, i) {\n const r = d(n), a = p[s], l = t;\n if (a && _(t)) {\n l[a] = r.length ? r : null;\n return;\n }\n const o = g[s];\n if (!o) return;\n const c = i ?? (r.length ? r.map((m) => m.textContent?.trim() ?? \"\").filter(Boolean).join(\" \") : \"\");\n o in l ? l[o] = c || null : c ? e.setAttribute(\n s === \"labelledby\" ? \"aria-label\" : \"aria-description\",\n c\n ) : e.removeAttribute(\n s === \"labelledby\" ? \"aria-label\" : \"aria-description\"\n );\n}\nconst R = {\n labelledby: \"ariaLabelledByElements\",\n describedby: \"ariaDescribedByElements\"\n}, V = {\n labelledby: \"aria-label\",\n describedby: \"aria-description\"\n};\nfunction L(e, t, s) {\n const n = d(s), i = R[t], r = V[t], a = e;\n if (i && i in e && (a[i] = n.length ? n : null), !r) return;\n const l = n.map((o) => o.textContent?.trim() ?? \"\").filter(Boolean).join(\" \");\n l ? e.setAttribute(r, l) : e.removeAttribute(r);\n}\nconst h = (e) => {\n class t extends e {\n get idPrefix() {\n return this.localName || \"nys-element\";\n }\n ensureId() {\n this.id || (this.id = f(this.idPrefix));\n }\n connectedCallback() {\n super.connectedCallback(), this.ensureId();\n }\n }\n return t;\n}, P = /* @__PURE__ */ h(u), b = (e) => {\n class t extends h(e) {\n constructor() {\n super(...arguments), this.__internals = null;\n }\n get internals() {\n if (this.__internals) return this.__internals;\n if (typeof this.attachInternals == \"function\")\n try {\n this.__internals = this.attachInternals();\n } catch {\n this.__internals = null;\n }\n return this.__internals;\n }\n get defaultRole() {\n return null;\n }\n setHostAria(n, i) {\n const r = this.internals;\n if (r && n in r) {\n r[n] = i;\n return;\n }\n const a = v(n);\n i === null ? this.removeAttribute(a) : this.setAttribute(a, i);\n }\n reflectDefaultSemantics() {\n const n = this.defaultRole;\n n && this.setHostAria(\"role\", n);\n }\n connectedCallback() {\n super.connectedCallback(), this.reflectDefaultSemantics();\n }\n }\n return t;\n};\nfunction v(e) {\n if (e === \"role\") return \"role\";\n const t = e.replace(/^aria/, \"\");\n return \"aria-\" + t.charAt(0).toLowerCase() + t.slice(1);\n}\nconst T = /* @__PURE__ */ b(u), C = (e) => {\n const s = class s extends b(e) {\n constructor() {\n super(...arguments), this.__internalValidationMessage = \"\";\n }\n get internalValidationMessage() {\n return this.__internalValidationMessage;\n }\n set internalValidationMessage(i) {\n i !== this.__internalValidationMessage && (this.__internalValidationMessage = i, this.requestUpdate(\"internalValidationMessage\"));\n }\n resolvedErrorMessage() {\n return this.errorMessage || this.internalValidationMessage;\n }\n setFormValue(i) {\n this.internals?.setFormValue(i ?? null);\n }\n setValidityFromState(i, r, a) {\n const l = this.internals;\n if (!l) return;\n const o = Object.values(i).some(Boolean);\n o ? l.setValidity(i, r ?? \"Invalid value\", a) : l.setValidity({}), this.setHostAria(\"ariaInvalid\", o ? \"true\" : \"false\");\n }\n clearValidity() {\n this.internals?.setValidity({}), this.setHostAria(\"ariaInvalid\", \"false\");\n }\n checkValidity() {\n return this.internals?.checkValidity() ?? !0;\n }\n reportValidity() {\n return this.internals?.reportValidity() ?? !0;\n }\n formResetCallback() {\n this.internalValidationMessage = \"\", this.clearValidity();\n }\n };\n s.formAssociated = !0;\n let t = s;\n return t;\n}, O = /* @__PURE__ */ C(u);\nfunction B(e) {\n const t = e.tagName.toLowerCase(), s = /* @__PURE__ */ new Set(), n = (i) => {\n i.querySelectorAll(\"*\").forEach((r) => {\n const a = r.tagName.toLowerCase();\n a.startsWith(\"nys-\") && a !== t && !customElements.get(a) && s.add(a), r.shadowRoot && n(r.shadowRoot);\n });\n };\n return e.shadowRoot && n(e.shadowRoot), n(e), [...s].sort();\n}\nexport {\n C as FormControlMixin,\n h as IdentifiedMixin,\n P as NysElement,\n O as NysFormControlElement,\n T as NysReflectsAriaElement,\n b as ReflectsAriaMixin,\n w as associateControl,\n L as associateControlRefs,\n x as associateHost,\n N as dispatchNysEvent,\n I as dispatchNysFocusBlur,\n B as findUnregisteredChildren,\n f as generateId,\n _ as supportsElementRefs\n};\n//# sourceMappingURL=index.js.map\n","import { html, unsafeCSS, nothing } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { NysElement } from \"@nysds/internals\";\n// This element is created imperatively (document.createElement) after each\n// slotted <span> section heading, so it must be registered whenever\n// nys-globalfooter is used. Importing it here (intentional side effect)\n// guarantees it always renders.\nimport \"@nysds/nys-divider\";\n// @ts-ignore: SCSS module imported via bundler as inline\nimport styles from \"./nys-globalfooter.scss?inline\";\n// @ts-ignore: SCSS module imported via bundler as inline\nimport lightStyles from \"./nys-globalfooter.light.scss?inline\";\n\n/**\n * Accessible name for the `contentinfo` landmark when the footer carries no\n * agency name to reference and the consumer supplied no override.\n */\nconst DEFAULT_LANDMARK_LABEL = \"Site\";\n\nlet _lightSheet: CSSStyleSheet | null = null;\n// Injects the lightDOM styling for the scss for\n// styling CSS into the adopted/constructed stylesheet.\nfunction adoptLightStyles() {\n if (_lightSheet || typeof document === \"undefined\") return;\n _lightSheet = new CSSStyleSheet();\n _lightSheet.replaceSync(lightStyles);\n document.adoptedStyleSheets = [...document.adoptedStyleSheets, _lightSheet];\n}\n\n/**\n * Agency-branded footer with agency name and slotted content sections. Auto-layouts based on content structure.\n *\n * Place above `nys-unavfooter`. Slot contact info, links, or other content. Use `<h4>` elements\n * to create multi-column layouts; without `<h4>`, renders as compact single section.\n *\n * @summary Agency footer with auto-layout for contact info and link sections.\n * @element nys-globalfooter\n *\n * @slot - Footer content (links, contact info). Use `<h4>` for column headings.\n *\n * @cssprop [--nys-max-width--content] - Overrides the inner content max width across the grid, header, footer, and breadcrumb. Set at a higher level like `:root` to apply to all instances. Takes priority over the size-specific variable.\n *\n * @usagedos\n * - Use on every agency site and application. The Global Footer is a required page element.\n * - Use to surface essential site-wide links such as contact information, privacy policies, accessibility statements, and related program pages.\n * - Set `agencyName` to your agency's full official name (e.g., \"Office of Information Technology Services\").\n * - Set `homepageLink` to make the agency name a clickable link back to your site's homepage.\n * - Keep footer link lists concise. Group related links under `<span>` headings when you have more than 5–6 links.\n * - Use slotted `<ul>` content for single-list links, or nested `<ul>` with `<span>` headings for multi-column layouts.\n * - Place `<nys-globalfooter>` above `<nys-unavfooter>` and below your page content and `<nys-backtotop>`.\n *\n * @usagedonts\n * - Use for primary navigation. That belongs in `<nys-globalheader>`.\n * - Include page-specific content or calls to action. Footer content should be relevant site-wide.\n * - Use for statewide universal links (Agencies, Services, Counties). Those belong in `<nys-unavfooter>`, which renders below this component.\n * - Embed `<script>`, `<iframe>`, `<object>`, or `<img>` elements in slotted content. These are sanitized and removed by the component for security.\n *\n * @example Basic\n * ```html\n * <nys-globalfooter agencyName=\"Office of Information Technology Services\"></nys-globalfooter>\n * ```\n *\n * @example Homepage Link\n * ```html\n * <nys-globalfooter\n * agencyName=\"Office of Information Technology Services\"\n * homepageLink=\"https://its.ny.gov\"\n * ></nys-globalfooter>\n * ```\n *\n * @example Menu Links\n * ```html\n * <nys-globalfooter agencyName=\"Office of Information Technology Services\">\n * <ul>\n * <li><a href=\"https://its.ny.gov\">ITS Home</a></li>\n * <li><a href=\"https://its.ny.gov/about-us\">About ITS</a></li>\n * </ul>\n * </nys-globalfooter>\n * ```\n *\n * @example Column Links\n * ```html\n * <nys-globalfooter agencyName=\"Office of Information Technology Services\">\n * <ul>\n * <li>\n * <span>About</span>\n * <ul>\n * <li><a href=\"https://its.ny.gov/about-us\">About ITS</a></li>\n * <li><a href=\"https://its.ny.gov/contact-us\">Contact</a></li>\n * <li><a href=\"https://its.ny.gov/policies\">Policies</a></li>\n * </ul>\n * </li>\n * <li>\n * <span>Resources</span>\n * <ul>\n * <li><a href=\"https://its.ny.gov/resources\">Developer Tools</a></li>\n * <li><a href=\"https://its.ny.gov/accessibility\">Accessibility</a></li>\n * <li><a href=\"https://its.ny.gov/privacy\">Privacy</a></li>\n * </ul>\n * </li>\n * </ul>\n * </nys-globalfooter>\n * ```\n *\n * @example Subheading\n * ```html\n * <nys-globalfooter\n * agencyName=\"Office of Information Technology Services\"\n * agencySubheading=\"Innovating Technology for a Better New York\"\n * ></nys-globalfooter>\n * ```\n *\n * @example Custom landmark label\n * ```html\n * <!-- Names the contentinfo landmark directly instead of from the visible\n * heading. Keep it distinct from nys-unavfooter's (\"New York State\"). -->\n * <nys-globalfooter\n * agencyName=\"Office of Information Technology Services\"\n * landmarkLabel=\"ITS\"\n * ></nys-globalfooter>\n * ```\n */\n\nexport class NysGlobalFooter extends NysElement {\n static styles = unsafeCSS(styles);\n\n /** Unique identifier. Auto-generated if not provided. */\n @property({ type: String, reflect: true }) id = \"\";\n\n /** Agency name displayed as the footer heading. */\n @property({ type: String }) agencyName = \"\";\n\n /** Optional subheading displayed below the agency name. */\n @property({ type: String }) agencySubheading = \"\";\n\n /** URL for the agency name link. If empty, name is not clickable. */\n @property({ type: String }) homepageLink = \"\";\n\n /**\n * Accessible name for the `contentinfo` landmark this footer renders.\n *\n * Leave it unset and the landmark is named after the visible `agencyName`\n * heading, which cannot drift out of sync and is translated with the rest of\n * the page. Falls back to `\"Site\"` when there is no agency name to reference.\n *\n * Set this only when the agency name is not right for your audience. A page\n * pairing this with `nys-unavfooter` carries two `contentinfo` landmarks, so\n * the name must stay distinct from that footer's (`\"New York State\"` by\n * default) or landmark navigation stops distinguishing them.\n *\n * An explicit name replaces the reference to the visible heading.\n */\n @property({ type: String }) landmarkLabel = \"\";\n\n @state() private slotHasContent = true;\n\n /**\n * Lifecycle Methods\n * --------------------------------------------------------------------------\n */\n\n connectedCallback() {\n super.connectedCallback();\n adoptLightStyles();\n }\n\n firstUpdated() {\n // Check for slot content after rendering\n const slot = this.shadowRoot?.querySelector<HTMLSlotElement>(\"slot\");\n slot?.addEventListener(\"slotchange\", () => this._handleSlotChange());\n this._handleSlotChange(); // Initial check\n }\n\n /**\n * Functions\n * --------------------------------------------------------------------------\n */\n\n // Gets called when the slot content changes.\n // Slotted elements stay in the light DOM (styled via adoptLightStyles) and projected in the <slot>.\n private async _handleSlotChange() {\n const slot = this.shadowRoot?.querySelector<HTMLSlotElement>(\"slot\");\n if (!slot) return;\n\n const assignedNodes = slot\n ?.assignedNodes({ flatten: true })\n .filter((node) => node.nodeType === Node.ELEMENT_NODE) as Element[]; // Filter to elements only\n\n await Promise.resolve(); // Wait for current update cycle to complete before modifying reactive state (solves the lit issue \"scheduled an update\")\n\n this.slotHasContent = assignedNodes.length > 0;\n\n // Determine layout based on content structure\n const container = this.shadowRoot?.querySelector(\n \".nys-globalfooter__content\",\n );\n const hasMultipleGroups = assignedNodes?.some(\n (node) => node.tagName === \"H4\",\n );\n\n this.classList.toggle(\"columns\", hasMultipleGroups);\n this.classList.toggle(\"small\", !hasMultipleGroups);\n\n container?.classList.toggle(\"columns\", hasMultipleGroups);\n container?.classList.toggle(\"small\", !hasMultipleGroups);\n\n assignedNodes.forEach((node) => {\n const spans =\n node.tagName === \"SPAN\"\n ? [node]\n : Array.from(node.querySelectorAll(\"span\"));\n\n spans.forEach((span) => {\n if (span.nextElementSibling?.tagName !== \"NYS-DIVIDER\") {\n const divider = document.createElement(\"nys-divider\");\n divider.classList.add(\"divider\");\n span.insertAdjacentElement(\"afterend\", divider);\n }\n });\n });\n }\n\n /**\n * Id of the heading that names the contentinfo landmark, or undefined when no\n * agency name was given.\n *\n * The documented pairing puts this footer above `nys-unavfooter`, which leaves a\n * page with two `contentinfo` landmarks. Pointing at the visible heading rather\n * than repeating the agency name in an `aria-label` keeps the two in sync and lets\n * the name be translated along with the rest of the page.\n */\n private get _contentinfoLabelledBy(): string | undefined {\n // An explicit name is the author saying the visible heading is not the right\n // one; pointing at it anyway would put both on the landmark.\n if (this._landmarkLabelOverride) return undefined;\n return this.agencyName?.trim() ? `${this.id}-name` : undefined;\n }\n\n /** The author's landmark name, or undefined when they gave none. */\n private get _landmarkLabelOverride(): string | undefined {\n return this.landmarkLabel?.trim() || undefined;\n }\n\n /**\n * Literal name for the contentinfo: the author's override, or the \"Site\"\n * default when there is no agency heading to reference. Undefined whenever\n * `_contentinfoLabelledBy` has something to point at, so the landmark never\n * carries both.\n */\n private get _contentinfoLabel(): string | undefined {\n if (this._landmarkLabelOverride) return this._landmarkLabelOverride;\n return this._contentinfoLabelledBy ? undefined : DEFAULT_LANDMARK_LABEL;\n }\n\n render() {\n const heading = html`<h2\n id=\"${this.id}-name\"\n class=\"nys-globalfooter__name\"\n >\n ${this.agencyName}\n </h2>`;\n\n return html`\n <footer\n class=\"nys-globalfooter\"\n aria-labelledby=${ifDefined(this._contentinfoLabelledBy)}\n aria-label=${ifDefined(this._contentinfoLabel)}\n >\n <div class=\"nys-globalfooter__main-container\">\n <div class=\"nys-globalfooter__heading-container\">\n ${!this.homepageLink?.trim()\n ? heading\n : html`<a href=${this.homepageLink?.trim()}>${heading}</a>`}\n ${this.agencySubheading\n ? html`<p class=\"nys-globalfooter__subheading\">\n ${this.agencySubheading}\n </p>`\n : nothing}\n </div>\n ${this.slotHasContent\n ? html`<div class=\"nys-globalfooter__content\">\n <slot @slotchange=\"${this._handleSlotChange}\"></slot>\n </div>`\n : \"\"}\n </div>\n </footer>\n `;\n }\n}\n\nif (!customElements.get(\"nys-globalfooter\")) {\n customElements.define(\"nys-globalfooter\", NysGlobalFooter);\n}\n"],"names":["LitElement","unsafeCSS","html","nothing","property","state","ifDefined","y","f","e","h","t","P","u","DEFAULT_LANDMARK_LABEL","_lightSheet","adoptLightStyles","lightStyles","_NysGlobalFooter","NysElement","slot","assignedNodes","node","container","hasMultipleGroups","span","divider","heading","styles","NysGlobalFooter","__decorateClass"],"mappings":"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"}
1
+ {"version":3,"file":"nys-globalfooter.js","sources":["../../internals/dist/index.js","../src/nys-globalfooter.ts"],"sourcesContent":["import { LitElement as u } from \"lit\";\n/*!\n * New York State Design System v1.22.3\n * Description: A design system for New York State's digital products.\n * Repository: https://github.com/its-hcd/nysds\n * License: MIT\n */\nlet y = 0;\nfunction f(e) {\n return `${e}-${Date.now()}-${y++}`;\n}\nfunction N(e, t, s) {\n e.dispatchEvent(\n new CustomEvent(t, { detail: s, bubbles: !0, composed: !0 })\n );\n}\nfunction I(e, t) {\n e.dispatchEvent(\n new Event(`nys-${t}`, { bubbles: !0, composed: !0 })\n );\n}\nconst p = {\n labelledby: \"ariaLabelledByElements\",\n describedby: \"ariaDescribedByElements\"\n}, g = {\n labelledby: \"ariaLabel\",\n describedby: \"ariaDescription\"\n};\nfunction _(e) {\n return \"ariaDescribedByElements\" in e;\n}\nfunction E(e) {\n return e === \"errormessage\" ? \"aria-errormessage\" : `aria-${e}`;\n}\nfunction d(e) {\n return e.filter((t) => !!t);\n}\nfunction A(e) {\n return e.map((t) => (t.id || (t.id = f(\"nys-ref\")), t.id));\n}\nfunction w(e, t, s) {\n const n = d(s), i = E(t);\n n.length ? e.setAttribute(i, A(n).join(\" \")) : e.removeAttribute(i);\n}\nfunction x(e, t, s, n, i) {\n const r = d(n), a = p[s], l = t;\n if (a && _(t)) {\n l[a] = r.length ? r : null;\n return;\n }\n const o = g[s];\n if (!o) return;\n const c = i ?? (r.length ? r.map((m) => m.textContent?.trim() ?? \"\").filter(Boolean).join(\" \") : \"\");\n o in l ? l[o] = c || null : c ? e.setAttribute(\n s === \"labelledby\" ? \"aria-label\" : \"aria-description\",\n c\n ) : e.removeAttribute(\n s === \"labelledby\" ? \"aria-label\" : \"aria-description\"\n );\n}\nconst R = {\n labelledby: \"ariaLabelledByElements\",\n describedby: \"ariaDescribedByElements\"\n}, V = {\n labelledby: \"aria-label\",\n describedby: \"aria-description\"\n};\nfunction L(e, t, s) {\n const n = d(s), i = R[t], r = V[t], a = e;\n if (i && i in e && (a[i] = n.length ? n : null), !r) return;\n const l = n.map((o) => o.textContent?.trim() ?? \"\").filter(Boolean).join(\" \");\n l ? e.setAttribute(r, l) : e.removeAttribute(r);\n}\nconst h = (e) => {\n class t extends e {\n get idPrefix() {\n return this.localName || \"nys-element\";\n }\n ensureId() {\n this.id || (this.id = f(this.idPrefix));\n }\n connectedCallback() {\n super.connectedCallback(), this.ensureId();\n }\n }\n return t;\n}, P = /* @__PURE__ */ h(u), b = (e) => {\n class t extends h(e) {\n constructor() {\n super(...arguments), this.__internals = null;\n }\n get internals() {\n if (this.__internals) return this.__internals;\n if (typeof this.attachInternals == \"function\")\n try {\n this.__internals = this.attachInternals();\n } catch {\n this.__internals = null;\n }\n return this.__internals;\n }\n get defaultRole() {\n return null;\n }\n setHostAria(n, i) {\n const r = this.internals;\n if (r && n in r) {\n r[n] = i;\n return;\n }\n const a = v(n);\n i === null ? this.removeAttribute(a) : this.setAttribute(a, i);\n }\n reflectDefaultSemantics() {\n const n = this.defaultRole;\n n && this.setHostAria(\"role\", n);\n }\n connectedCallback() {\n super.connectedCallback(), this.reflectDefaultSemantics();\n }\n }\n return t;\n};\nfunction v(e) {\n if (e === \"role\") return \"role\";\n const t = e.replace(/^aria/, \"\");\n return \"aria-\" + t.charAt(0).toLowerCase() + t.slice(1);\n}\nconst T = /* @__PURE__ */ b(u), C = (e) => {\n const s = class s extends b(e) {\n constructor() {\n super(...arguments), this.__internalValidationMessage = \"\";\n }\n get internalValidationMessage() {\n return this.__internalValidationMessage;\n }\n set internalValidationMessage(i) {\n i !== this.__internalValidationMessage && (this.__internalValidationMessage = i, this.requestUpdate(\"internalValidationMessage\"));\n }\n resolvedErrorMessage() {\n return this.errorMessage || this.internalValidationMessage;\n }\n setFormValue(i) {\n this.internals?.setFormValue(i ?? null);\n }\n setValidityFromState(i, r, a) {\n const l = this.internals;\n if (!l) return;\n const o = Object.values(i).some(Boolean);\n o ? l.setValidity(i, r ?? \"Invalid value\", a) : l.setValidity({}), this.setHostAria(\"ariaInvalid\", o ? \"true\" : \"false\");\n }\n clearValidity() {\n this.internals?.setValidity({}), this.setHostAria(\"ariaInvalid\", \"false\");\n }\n checkValidity() {\n return this.internals?.checkValidity() ?? !0;\n }\n reportValidity() {\n return this.internals?.reportValidity() ?? !0;\n }\n formResetCallback() {\n this.internalValidationMessage = \"\", this.clearValidity();\n }\n };\n s.formAssociated = !0;\n let t = s;\n return t;\n}, O = /* @__PURE__ */ C(u);\nfunction B(e) {\n const t = e.tagName.toLowerCase(), s = /* @__PURE__ */ new Set(), n = (i) => {\n i.querySelectorAll(\"*\").forEach((r) => {\n const a = r.tagName.toLowerCase();\n a.startsWith(\"nys-\") && a !== t && !customElements.get(a) && s.add(a), r.shadowRoot && n(r.shadowRoot);\n });\n };\n return e.shadowRoot && n(e.shadowRoot), n(e), [...s].sort();\n}\nexport {\n C as FormControlMixin,\n h as IdentifiedMixin,\n P as NysElement,\n O as NysFormControlElement,\n T as NysReflectsAriaElement,\n b as ReflectsAriaMixin,\n w as associateControl,\n L as associateControlRefs,\n x as associateHost,\n N as dispatchNysEvent,\n I as dispatchNysFocusBlur,\n B as findUnregisteredChildren,\n f as generateId,\n _ as supportsElementRefs\n};\n//# sourceMappingURL=index.js.map\n","import { html, unsafeCSS, nothing } from \"lit\";\nimport { property, state } from \"lit/decorators.js\";\nimport { ifDefined } from \"lit/directives/if-defined.js\";\nimport { NysElement } from \"@nysds/internals\";\n// This element is created imperatively (document.createElement) after each\n// slotted <span> section heading, so it must be registered whenever\n// nys-globalfooter is used. Importing it here (intentional side effect)\n// guarantees it always renders.\nimport \"@nysds/nys-divider\";\n// @ts-ignore: SCSS module imported via bundler as inline\nimport styles from \"./nys-globalfooter.scss?inline\";\n// @ts-ignore: SCSS module imported via bundler as inline\nimport lightStyles from \"./nys-globalfooter.light.scss?inline\";\n\n/**\n * Accessible name for the `contentinfo` landmark when the footer carries no\n * agency name to reference and the consumer supplied no override.\n */\nconst DEFAULT_LANDMARK_LABEL = \"Site\";\n\nlet _lightSheet: CSSStyleSheet | null = null;\n// Injects the lightDOM styling for the scss for\n// styling CSS into the adopted/constructed stylesheet.\nfunction adoptLightStyles() {\n if (_lightSheet || typeof document === \"undefined\") return;\n _lightSheet = new CSSStyleSheet();\n _lightSheet.replaceSync(lightStyles);\n document.adoptedStyleSheets = [...document.adoptedStyleSheets, _lightSheet];\n}\n\n/**\n * Agency-branded footer with agency name and slotted content sections. Auto-layouts based on content structure.\n *\n * Place above `nys-unavfooter`. Slot contact info, links, or other content. Use `<h4>` elements\n * to create multi-column layouts; without `<h4>`, renders as compact single section.\n *\n * @summary Agency footer with auto-layout for contact info and link sections.\n * @element nys-globalfooter\n *\n * @slot - Footer content (links, contact info). Use `<h4>` for column headings.\n *\n * @cssprop [--nys-max-width--content] - Overrides the inner content max width across the grid, header, footer, and breadcrumb. Set at a higher level like `:root` to apply to all instances. Takes priority over the size-specific variable.\n *\n * @usagedos\n * - Use on every agency site and application. The Global Footer is a required page element.\n * - Use to surface essential site-wide links such as contact information, privacy policies, accessibility statements, and related program pages.\n * - Set `agencyName` to your agency's full official name (e.g., \"Office of Information Technology Services\").\n * - Set `homepageLink` to make the agency name a clickable link back to your site's homepage.\n * - Keep footer link lists concise. Group related links under `<span>` headings when you have more than 5–6 links.\n * - Use slotted `<ul>` content for single-list links, or nested `<ul>` with `<span>` headings for multi-column layouts.\n * - Place `<nys-globalfooter>` above `<nys-unavfooter>` and below your page content and `<nys-backtotop>`.\n *\n * @usagedonts\n * - Use for primary navigation. That belongs in `<nys-globalheader>`.\n * - Include page-specific content or calls to action. Footer content should be relevant site-wide.\n * - Use for statewide universal links (Agencies, Services, Counties). Those belong in `<nys-unavfooter>`, which renders below this component.\n * - Embed `<script>`, `<iframe>`, `<object>`, or `<img>` elements in slotted content. These are sanitized and removed by the component for security.\n *\n * @example Basic\n * ```html\n * <nys-globalfooter agencyName=\"Office of Information Technology Services\"></nys-globalfooter>\n * ```\n *\n * @example Homepage Link\n * ```html\n * <nys-globalfooter\n * agencyName=\"Office of Information Technology Services\"\n * homepageLink=\"https://its.ny.gov\"\n * ></nys-globalfooter>\n * ```\n *\n * @example Menu Links\n * ```html\n * <nys-globalfooter agencyName=\"Office of Information Technology Services\">\n * <ul>\n * <li><a href=\"https://its.ny.gov\">ITS Home</a></li>\n * <li><a href=\"https://its.ny.gov/about-us\">About ITS</a></li>\n * </ul>\n * </nys-globalfooter>\n * ```\n *\n * @example Column Links\n * ```html\n * <nys-globalfooter agencyName=\"Office of Information Technology Services\">\n * <ul>\n * <li>\n * <span>About</span>\n * <ul>\n * <li><a href=\"https://its.ny.gov/about-us\">About ITS</a></li>\n * <li><a href=\"https://its.ny.gov/contact-us\">Contact</a></li>\n * <li><a href=\"https://its.ny.gov/policies\">Policies</a></li>\n * </ul>\n * </li>\n * <li>\n * <span>Resources</span>\n * <ul>\n * <li><a href=\"https://its.ny.gov/resources\">Developer Tools</a></li>\n * <li><a href=\"https://its.ny.gov/accessibility\">Accessibility</a></li>\n * <li><a href=\"https://its.ny.gov/privacy\">Privacy</a></li>\n * </ul>\n * </li>\n * </ul>\n * </nys-globalfooter>\n * ```\n *\n * @example Subheading\n * ```html\n * <nys-globalfooter\n * agencyName=\"Office of Information Technology Services\"\n * agencySubheading=\"Innovating Technology for a Better New York\"\n * ></nys-globalfooter>\n * ```\n *\n * @example Custom landmark label\n * ```html\n * <!-- Names the contentinfo landmark directly instead of from the visible\n * heading. Keep it distinct from nys-unavfooter's (\"New York State\"). -->\n * <nys-globalfooter\n * agencyName=\"Office of Information Technology Services\"\n * landmarkLabel=\"ITS\"\n * ></nys-globalfooter>\n * ```\n */\n\nexport class NysGlobalFooter extends NysElement {\n static styles = unsafeCSS(styles);\n\n /** Unique identifier. Auto-generated if not provided. */\n @property({ type: String, reflect: true }) id = \"\";\n\n /** Agency name displayed as the footer heading. */\n @property({ type: String }) agencyName = \"\";\n\n /** Optional subheading displayed below the agency name. */\n @property({ type: String }) agencySubheading = \"\";\n\n /** URL for the agency name link. If empty, name is not clickable. */\n @property({ type: String }) homepageLink = \"\";\n\n /**\n * Accessible name for the `contentinfo` landmark this footer renders.\n *\n * Leave it unset and the landmark is named after the visible `agencyName`\n * heading, which cannot drift out of sync and is translated with the rest of\n * the page. Falls back to `\"Site\"` when there is no agency name to reference.\n *\n * Set this only when the agency name is not right for your audience. A page\n * pairing this with `nys-unavfooter` carries two `contentinfo` landmarks, so\n * the name must stay distinct from that footer's (`\"New York State\"` by\n * default) or landmark navigation stops distinguishing them.\n *\n * An explicit name replaces the reference to the visible heading.\n */\n @property({ type: String }) landmarkLabel = \"\";\n\n @state() private slotHasContent = true;\n\n /**\n * Lifecycle Methods\n * --------------------------------------------------------------------------\n */\n\n connectedCallback() {\n super.connectedCallback();\n adoptLightStyles();\n }\n\n firstUpdated() {\n // Check for slot content after rendering\n const slot = this.shadowRoot?.querySelector<HTMLSlotElement>(\"slot\");\n slot?.addEventListener(\"slotchange\", () => this._handleSlotChange());\n this._handleSlotChange(); // Initial check\n }\n\n /**\n * Functions\n * --------------------------------------------------------------------------\n */\n\n // Gets called when the slot content changes.\n // Slotted elements stay in the light DOM (styled via adoptLightStyles) and projected in the <slot>.\n private async _handleSlotChange() {\n const slot = this.shadowRoot?.querySelector<HTMLSlotElement>(\"slot\");\n if (!slot) return;\n\n const assignedNodes = slot\n ?.assignedNodes({ flatten: true })\n .filter((node) => node.nodeType === Node.ELEMENT_NODE) as Element[]; // Filter to elements only\n\n await Promise.resolve(); // Wait for current update cycle to complete before modifying reactive state (solves the lit issue \"scheduled an update\")\n\n this.slotHasContent = assignedNodes.length > 0;\n\n // Determine layout based on content structure\n const container = this.shadowRoot?.querySelector(\n \".nys-globalfooter__content\",\n );\n const hasMultipleGroups = assignedNodes?.some(\n (node) => node.tagName === \"H4\",\n );\n\n this.classList.toggle(\"columns\", hasMultipleGroups);\n this.classList.toggle(\"small\", !hasMultipleGroups);\n\n container?.classList.toggle(\"columns\", hasMultipleGroups);\n container?.classList.toggle(\"small\", !hasMultipleGroups);\n\n assignedNodes.forEach((node) => {\n const spans =\n node.tagName === \"SPAN\"\n ? [node]\n : Array.from(node.querySelectorAll(\"span\"));\n\n spans.forEach((span) => {\n if (span.nextElementSibling?.tagName !== \"NYS-DIVIDER\") {\n const divider = document.createElement(\"nys-divider\");\n divider.classList.add(\"divider\");\n span.insertAdjacentElement(\"afterend\", divider);\n }\n });\n });\n }\n\n /**\n * Id of the heading that names the contentinfo landmark, or undefined when no\n * agency name was given.\n *\n * The documented pairing puts this footer above `nys-unavfooter`, which leaves a\n * page with two `contentinfo` landmarks. Pointing at the visible heading rather\n * than repeating the agency name in an `aria-label` keeps the two in sync and lets\n * the name be translated along with the rest of the page.\n */\n private get _contentinfoLabelledBy(): string | undefined {\n // An explicit name is the author saying the visible heading is not the right\n // one; pointing at it anyway would put both on the landmark.\n if (this._landmarkLabelOverride) return undefined;\n return this.agencyName?.trim() ? `${this.id}-name` : undefined;\n }\n\n /** The author's landmark name, or undefined when they gave none. */\n private get _landmarkLabelOverride(): string | undefined {\n return this.landmarkLabel?.trim() || undefined;\n }\n\n /**\n * Literal name for the contentinfo: the author's override, or the \"Site\"\n * default when there is no agency heading to reference. Undefined whenever\n * `_contentinfoLabelledBy` has something to point at, so the landmark never\n * carries both.\n */\n private get _contentinfoLabel(): string | undefined {\n if (this._landmarkLabelOverride) return this._landmarkLabelOverride;\n return this._contentinfoLabelledBy ? undefined : DEFAULT_LANDMARK_LABEL;\n }\n\n render() {\n const heading = html`<h2\n id=\"${this.id}-name\"\n class=\"nys-globalfooter__name\"\n >\n ${this.agencyName}\n </h2>`;\n\n return html`\n <footer\n class=\"nys-globalfooter\"\n aria-labelledby=${ifDefined(this._contentinfoLabelledBy)}\n aria-label=${ifDefined(this._contentinfoLabel)}\n >\n <div class=\"nys-globalfooter__main-container\">\n <div class=\"nys-globalfooter__heading-container\">\n ${!this.homepageLink?.trim()\n ? heading\n : html`<a href=${this.homepageLink?.trim()}>${heading}</a>`}\n ${this.agencySubheading\n ? html`<p class=\"nys-globalfooter__subheading\">\n ${this.agencySubheading}\n </p>`\n : nothing}\n </div>\n ${this.slotHasContent\n ? html`<div class=\"nys-globalfooter__content\">\n <slot @slotchange=\"${this._handleSlotChange}\"></slot>\n </div>`\n : \"\"}\n </div>\n </footer>\n `;\n }\n}\n\nif (!customElements.get(\"nys-globalfooter\")) {\n customElements.define(\"nys-globalfooter\", NysGlobalFooter);\n}\n"],"names":["LitElement","unsafeCSS","html","nothing","property","state","ifDefined","y","f","e","h","t","P","u","DEFAULT_LANDMARK_LABEL","_lightSheet","adoptLightStyles","lightStyles","_NysGlobalFooter","NysElement","slot","assignedNodes","node","container","hasMultipleGroups","span","divider","heading","styles","NysGlobalFooter","__decorateClass"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nysds/nys-globalfooter",
3
- "version": "1.22.1",
3
+ "version": "1.22.3",
4
4
  "description": "The Globalfooter component from the NYS Design System.",
5
5
  "module": "dist/nys-globalfooter.js",
6
6
  "types": "dist/index.d.ts",
@@ -23,10 +23,10 @@
23
23
  "lit-analyze": "lit-analyzer '**/*.ts'"
24
24
  },
25
25
  "dependencies": {
26
- "@nysds/nys-divider": "^1.22.1"
26
+ "@nysds/nys-divider": "^1.22.3"
27
27
  },
28
28
  "devDependencies": {
29
- "@nysds/internals": "^1.22.1",
29
+ "@nysds/internals": "^1.22.3",
30
30
  "lit": "^3.3.1",
31
31
  "typescript": "^5.9.3",
32
32
  "vite": "^7.3.1"