@nysds/components 1.17.0 → 1.18.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 (41) hide show
  1. package/custom-elements.json +731 -194
  2. package/dist/.vscode/vscode.html-custom-data.json +62 -21
  3. package/dist/custom-elements.json +731 -194
  4. package/dist/nysds.es.js +2536 -2134
  5. package/dist/nysds.es.js.map +1 -1
  6. package/dist/nysds.js +174 -145
  7. package/dist/nysds.js.map +1 -1
  8. package/dist/packages/nys-backtotop/src/nys-backtotop.d.ts +15 -3
  9. package/dist/packages/nys-badge/src/nys-badge.d.ts +2 -0
  10. package/dist/packages/nys-checkbox/src/nys-checkbox.d.ts +0 -2
  11. package/dist/packages/nys-checkbox/src/nys-checkboxgroup.d.ts +1 -4
  12. package/dist/packages/nys-radiobutton/src/nys-radiobutton.d.ts +0 -2
  13. package/dist/packages/nys-radiobutton/src/nys-radiogroup.d.ts +1 -4
  14. package/dist/packages/nys-tab/src/index.d.ts +3 -0
  15. package/dist/packages/nys-tab/src/nys-tab.d.ts +116 -0
  16. package/dist/packages/nys-tab/src/nys-tab.figma.d.ts +1 -0
  17. package/dist/packages/nys-tab/src/nys-tabgroup.d.ts +199 -0
  18. package/dist/packages/nys-tab/src/nys-tabpanel.d.ts +46 -0
  19. package/dist/packages/nys-table/src/nys-table.d.ts +10 -7
  20. package/dist/src/index.d.ts +1 -0
  21. package/package.json +1 -1
  22. package/packages/react/NysBacktotop.d.ts +1 -1
  23. package/packages/react/NysBadge.d.ts +3 -0
  24. package/packages/react/NysBadge.js +2 -0
  25. package/packages/react/NysCheckbox.d.ts +0 -3
  26. package/packages/react/NysCheckbox.js +0 -2
  27. package/packages/react/NysCheckboxgroup.d.ts +0 -3
  28. package/packages/react/NysCheckboxgroup.js +0 -2
  29. package/packages/react/NysRadiobutton.d.ts +0 -3
  30. package/packages/react/NysRadiobutton.js +0 -2
  31. package/packages/react/NysRadiogroup.d.ts +0 -3
  32. package/packages/react/NysRadiogroup.js +0 -2
  33. package/packages/react/NysTab.d.ts +90 -0
  34. package/packages/react/NysTab.js +39 -0
  35. package/packages/react/NysTabgroup.d.ts +75 -0
  36. package/packages/react/NysTabgroup.js +22 -0
  37. package/packages/react/NysTabpanel.d.ts +63 -0
  38. package/packages/react/NysTabpanel.js +21 -0
  39. package/packages/react/index.d.ts +3 -0
  40. package/packages/react/index.js +3 -0
  41. package/packages/react/nysds-jsx.d.ts +108 -9
@@ -7,7 +7,6 @@ export const NysRadiogroup = forwardRef((props, forwardedRef) => {
7
7
  optional,
8
8
  showError,
9
9
  tile,
10
- inverted,
11
10
  id,
12
11
  name,
13
12
  errorMessage,
@@ -40,7 +39,6 @@ export const NysRadiogroup = forwardRef((props, forwardedRef) => {
40
39
  optional: props.optional ? true : undefined,
41
40
  showError: props.showError ? true : undefined,
42
41
  tile: props.tile ? true : undefined,
43
- inverted: props.inverted ? true : undefined,
44
42
  style: { ...props.style },
45
43
  },
46
44
  props.children,
@@ -0,0 +1,90 @@
1
+ import React from "react";
2
+ import { NysTab as NysTabElement, CustomEvent } from "../../dist/nysds.es.js";
3
+
4
+ export type { NysTabElement, CustomEvent };
5
+
6
+ export interface NysTabProps extends Pick<
7
+ React.AllHTMLAttributes<HTMLElement>,
8
+ | "children"
9
+ | "dir"
10
+ | "hidden"
11
+ | "id"
12
+ | "lang"
13
+ | "slot"
14
+ | "style"
15
+ | "title"
16
+ | "translate"
17
+ | "onClick"
18
+ | "onFocus"
19
+ | "onBlur"
20
+ > {
21
+ /** Whether this tab is the currently active tab.
22
+ Managed by `<nys-tabgroup>`; reflected for CSS attribute selectors. */
23
+ selected?: boolean;
24
+
25
+ /** Whether this tab is disabled.
26
+ Reflected to the DOM attribute for CSS styling. */
27
+ disabled?: boolean;
28
+
29
+ /** Unique identifier for the tab element.
30
+ Reflected to the DOM attribute so `aria-controls` references resolve. */
31
+ id?: NysTabElement["id"];
32
+
33
+ /** Visible text label rendered inside the inner `<span>`. */
34
+ label?: NysTabElement["label"];
35
+
36
+ /** A space-separated list of the classes of the element. Classes allows CSS and JavaScript to select and access specific elements via the class selectors or functions like the method `Document.getElementsByClassName()`. */
37
+ className?: string;
38
+
39
+ /** Contains a space-separated list of the part names of the element that should be exposed on the host element. */
40
+ exportparts?: string;
41
+
42
+ /** Used for labels to link them with their inputs (using input id). */
43
+ htmlFor?: string;
44
+
45
+ /** Used to help React identify which items have changed, are added, or are removed within a list. */
46
+ key?: number | string;
47
+
48
+ /** Contains a space-separated list of the part names of the element. Part names allows CSS to select and style specific elements in a shadow tree via the ::part pseudo-element. */
49
+ part?: string;
50
+
51
+ /** A mutable ref object whose `.current` property is initialized to the passed argument (`initialValue`). The returned object will persist for the full lifetime of the component. */
52
+ ref?: any;
53
+
54
+ /** Allows developers to make HTML elements focusable, allow or prevent them from being sequentially focusable (usually with the `Tab` key, hence the name) and determine their relative ordering for sequential focus navigation. */
55
+ tabIndex?: number;
56
+
57
+ /** Dispatched when the tab is activated via click or Enter / Space. Bubbles and crosses shadow DOM boundaries. `detail: { id: string, label: string }` */
58
+ onNysTabSelect?: (event: CustomEvent) => void;
59
+
60
+ /** Dispatched when the host receives focus. Bubbles and crosses shadow DOM boundaries. `detail: { id: string }` */
61
+ onNysTabFocus?: (event: CustomEvent) => void;
62
+
63
+ /** Dispatched when the host loses focus. Bubbles and crosses shadow DOM boundaries. `detail: { id: string }` */
64
+ onNysTabBlur?: (event: CustomEvent) => void;
65
+ }
66
+
67
+ /**
68
+ * `<nys-tab>` is a single tab within a `<nys-tabgroup>`.
69
+ *
70
+ * The host element carries `role="tab"`, `tabindex`, `aria-selected`,
71
+ * `aria-controls`, and `aria-disabled` so assistive technologies see the
72
+ * correct ARIA tab semantics on the element that is actually focused.
73
+ * `<nys-tabgroup>` manages `tabindex`, `aria-selected`, and `aria-controls`
74
+ * via `_applySelection`; do not set them directly on this element.
75
+ * ---
76
+ *
77
+ *
78
+ * ### **Events:**
79
+ * - **nys-tab-select** - Dispatched when the tab is activated via click or Enter / Space. Bubbles and crosses shadow DOM boundaries. `detail: { id: string, label: string }`
80
+ * - **nys-tab-focus** - Dispatched when the host receives focus. Bubbles and crosses shadow DOM boundaries. `detail: { id: string }`
81
+ * - **nys-tab-blur** - Dispatched when the host loses focus. Bubbles and crosses shadow DOM boundaries. `detail: { id: string }`
82
+ *
83
+ * ### **Methods:**
84
+ * - **focus(options: _FocusOptions_): _void_** - Focuses the host element. The host carries `role="tab"` and `tabindex`,
85
+ * so it is the correct element for AT to land on.
86
+ *
87
+ * ### **Slots:**
88
+ * - _default_ - No slots; content is derived from the `label` property.
89
+ */
90
+ export const NysTab: React.ForwardRefExoticComponent<NysTabProps>;
@@ -0,0 +1,39 @@
1
+ import React, { forwardRef, useRef, useEffect } from "react";
2
+ import "../../dist/nysds.es.js";
3
+ import { useEventListener } from "./react-utils.js";
4
+
5
+ export const NysTab = forwardRef((props, forwardedRef) => {
6
+ const ref = useRef(null);
7
+ const { selected, disabled, id, label, ...filteredProps } = props;
8
+
9
+ /** Event listeners - run once */
10
+ useEventListener(ref, "nys-tab-select", props.onNysTabSelect);
11
+ useEventListener(ref, "nys-tab-focus", props.onNysTabFocus);
12
+ useEventListener(ref, "nys-tab-blur", props.onNysTabBlur);
13
+
14
+ return React.createElement(
15
+ "nys-tab",
16
+ {
17
+ ref: (node) => {
18
+ ref.current = node;
19
+ if (typeof forwardedRef === "function") {
20
+ forwardedRef(node);
21
+ } else if (forwardedRef) {
22
+ forwardedRef.current = node;
23
+ }
24
+ },
25
+ ...filteredProps,
26
+ id: props.id,
27
+ label: props.label,
28
+ class: props.className,
29
+ exportparts: props.exportparts,
30
+ for: props.htmlFor,
31
+ part: props.part,
32
+ tabindex: props.tabIndex,
33
+ selected: props.selected ? true : undefined,
34
+ disabled: props.disabled ? true : undefined,
35
+ style: { ...props.style },
36
+ },
37
+ props.children,
38
+ );
39
+ });
@@ -0,0 +1,75 @@
1
+ import React from "react";
2
+ import { NysTabgroup as NysTabgroupElement } from "../../dist/nysds.es.js";
3
+
4
+ export type { NysTabgroupElement };
5
+
6
+ export interface NysTabgroupProps extends Pick<
7
+ React.AllHTMLAttributes<HTMLElement>,
8
+ | "children"
9
+ | "dir"
10
+ | "hidden"
11
+ | "id"
12
+ | "lang"
13
+ | "slot"
14
+ | "style"
15
+ | "title"
16
+ | "translate"
17
+ | "onClick"
18
+ | "onFocus"
19
+ | "onBlur"
20
+ > {
21
+ /** Unique identifier for the tabgroup element.
22
+ If not provided, one is auto-generated in `connectedCallback`.
23
+ Reflected to the DOM attribute. */
24
+ id?: NysTabgroupElement["id"];
25
+
26
+ /** The name of the tab group.
27
+ Used for form submission and accessibility purposes. */
28
+ name?: NysTabgroupElement["name"];
29
+
30
+ /** A space-separated list of the classes of the element. Classes allows CSS and JavaScript to select and access specific elements via the class selectors or functions like the method `Document.getElementsByClassName()`. */
31
+ className?: string;
32
+
33
+ /** Contains a space-separated list of the part names of the element that should be exposed on the host element. */
34
+ exportparts?: string;
35
+
36
+ /** Used for labels to link them with their inputs (using input id). */
37
+ htmlFor?: string;
38
+
39
+ /** Used to help React identify which items have changed, are added, or are removed within a list. */
40
+ key?: number | string;
41
+
42
+ /** Contains a space-separated list of the part names of the element. Part names allows CSS to select and style specific elements in a shadow tree via the ::part pseudo-element. */
43
+ part?: string;
44
+
45
+ /** A mutable ref object whose `.current` property is initialized to the passed argument (`initialValue`). The returned object will persist for the full lifetime of the component. */
46
+ ref?: any;
47
+
48
+ /** Allows developers to make HTML elements focusable, allow or prevent them from being sequentially focusable (usually with the `Tab` key, hence the name) and determine their relative ordering for sequential focus navigation. */
49
+ tabIndex?: number;
50
+ }
51
+
52
+ /**
53
+ * `<nys-tabgroup>` is the container for `<nys-tab>` and `<nys-tabpanel>`
54
+ * elements.
55
+ *
56
+ * Accepts tabs and panels as flat light-DOM children in any order (interleaved
57
+ * or grouped). On slot change, children are sorted into dedicated shadow-DOM
58
+ * containers, ARIA relationships are wired, and the first selected (or first)
59
+ * tab is activated.
60
+ *
61
+ * Scroll shadows are rendered on either side of the tab list and toggled via
62
+ * `ResizeObserver` and a `scroll` listener so they accurately reflect whether
63
+ * overflow content exists in each direction.
64
+ *
65
+ * Keyboard navigation follows the
66
+ * https://www.w3.org/WAI/ARIA/apg/patterns/tabs/ ARIA Tabs Pattern:
67
+ * - Arrow keys move focus without changing selection.
68
+ * - Enter / Space confirm selection on the focused tab.
69
+ * ---
70
+ *
71
+ *
72
+ * ### **Slots:**
73
+ * - _default_ - Accepts `<nys-tab>` and `<nys-tabpanel>` children. Elements are moved into internal shadow-DOM containers on `slotchange`; the slot itself is not rendered visibly.
74
+ */
75
+ export const NysTabgroup: React.ForwardRefExoticComponent<NysTabgroupProps>;
@@ -0,0 +1,22 @@
1
+ import React, { forwardRef } from "react";
2
+ import "../../dist/nysds.es.js";
3
+
4
+ export const NysTabgroup = forwardRef((props, forwardedRef) => {
5
+ const { id, name, ...filteredProps } = props;
6
+
7
+ return React.createElement(
8
+ "nys-tabgroup",
9
+ {
10
+ ...filteredProps,
11
+ id: props.id,
12
+ name: props.name,
13
+ class: props.className,
14
+ exportparts: props.exportparts,
15
+ for: props.htmlFor,
16
+ part: props.part,
17
+ tabindex: props.tabIndex,
18
+ style: { ...props.style },
19
+ },
20
+ props.children,
21
+ );
22
+ });
@@ -0,0 +1,63 @@
1
+ import React from "react";
2
+ import { NysTabpanel as NysTabpanelElement } from "../../dist/nysds.es.js";
3
+
4
+ export type { NysTabpanelElement };
5
+
6
+ export interface NysTabpanelProps extends Pick<
7
+ React.AllHTMLAttributes<HTMLElement>,
8
+ | "children"
9
+ | "dir"
10
+ | "hidden"
11
+ | "id"
12
+ | "lang"
13
+ | "slot"
14
+ | "style"
15
+ | "title"
16
+ | "translate"
17
+ | "onClick"
18
+ | "onFocus"
19
+ | "onBlur"
20
+ > {
21
+ /** Unique identifier for the panel element.
22
+ If not provided, one is auto-generated in `connectedCallback`.
23
+ Reflected to the DOM attribute so `aria-controls` references on sibling
24
+ `<nys-tab>` elements resolve correctly. */
25
+ id?: NysTabpanelElement["id"];
26
+
27
+ /** A space-separated list of the classes of the element. Classes allows CSS and JavaScript to select and access specific elements via the class selectors or functions like the method `Document.getElementsByClassName()`. */
28
+ className?: string;
29
+
30
+ /** Contains a space-separated list of the part names of the element that should be exposed on the host element. */
31
+ exportparts?: string;
32
+
33
+ /** Used for labels to link them with their inputs (using input id). */
34
+ htmlFor?: string;
35
+
36
+ /** Used to help React identify which items have changed, are added, or are removed within a list. */
37
+ key?: number | string;
38
+
39
+ /** Contains a space-separated list of the part names of the element. Part names allows CSS to select and style specific elements in a shadow tree via the ::part pseudo-element. */
40
+ part?: string;
41
+
42
+ /** A mutable ref object whose `.current` property is initialized to the passed argument (`initialValue`). The returned object will persist for the full lifetime of the component. */
43
+ ref?: any;
44
+
45
+ /** Allows developers to make HTML elements focusable, allow or prevent them from being sequentially focusable (usually with the `Tab` key, hence the name) and determine their relative ordering for sequential focus navigation. */
46
+ tabIndex?: number;
47
+ }
48
+
49
+ /**
50
+ * `<nys-tabpanel>` is a content panel paired with a `<nys-tab>` inside a
51
+ * `<nys-tabgroup>`.
52
+ *
53
+ * Pairing is determined by render order: the Nth `<nys-tabpanel>` child of a
54
+ * `<nys-tabgroup>` corresponds to the Nth `<nys-tab>` child.
55
+ * `aria-labelledby` and the `hidden` attribute are managed externally by
56
+ * `<nys-tabgroup>` via `_applySelection`; do not set them directly.
57
+ * ---
58
+ *
59
+ *
60
+ * ### **Slots:**
61
+ * - _default_ - Default slot for panel content. Rendered inside a wrapper `<div>` with the `.nys-tabpanel` class for styling.
62
+ */
63
+ export const NysTabpanel: React.ForwardRefExoticComponent<NysTabpanelProps>;
@@ -0,0 +1,21 @@
1
+ import React, { forwardRef } from "react";
2
+ import "../../dist/nysds.es.js";
3
+
4
+ export const NysTabpanel = forwardRef((props, forwardedRef) => {
5
+ const { id, ...filteredProps } = props;
6
+
7
+ return React.createElement(
8
+ "nys-tabpanel",
9
+ {
10
+ ...filteredProps,
11
+ id: props.id,
12
+ class: props.className,
13
+ exportparts: props.exportparts,
14
+ for: props.htmlFor,
15
+ part: props.part,
16
+ tabindex: props.tabIndex,
17
+ style: { ...props.style },
18
+ },
19
+ props.children,
20
+ );
21
+ });
@@ -29,6 +29,9 @@ export * from "./NysSelect.js";
29
29
  export * from "./NysSkipnav.js";
30
30
  export * from "./NysStep.js";
31
31
  export * from "./NysStepper.js";
32
+ export * from "./NysTab.js";
33
+ export * from "./NysTabgroup.js";
34
+ export * from "./NysTabpanel.js";
32
35
  export * from "./NysTable.js";
33
36
  export * from "./NysTextarea.js";
34
37
  export * from "./NysTextinput.js";
@@ -29,6 +29,9 @@ export * from "./NysSelect.js";
29
29
  export * from "./NysSkipnav.js";
30
30
  export * from "./NysStep.js";
31
31
  export * from "./NysStepper.js";
32
+ export * from "./NysTab.js";
33
+ export * from "./NysTabgroup.js";
34
+ export * from "./NysTabpanel.js";
32
35
  export * from "./NysTable.js";
33
36
  export * from "./NysTextarea.js";
34
37
  export * from "./NysTextinput.js";
@@ -163,6 +163,8 @@ export type NysBadgeProps = {
163
163
  prefixLabel?: string;
164
164
  /** Primary label text displayed in the badge. */
165
165
  label?: string;
166
+ /** Screen reader text appended after the label for additional context. */
167
+ srText?: string;
166
168
  /** */
167
169
  variant?: "strong" | "";
168
170
  /** */
@@ -275,8 +277,6 @@ export type NysCheckboxProps = {
275
277
  groupExist?: boolean;
276
278
  /** Renders as tile with larger clickable area. Apply to group for consistency. */
277
279
  tile?: boolean;
278
- /** Adjusts colors for dark backgrounds. */
279
- inverted?: boolean;
280
280
  /** Tooltip text shown on hover/focus of info icon. */
281
281
  tooltip?: string;
282
282
  /** Checkbox size: `sm` (24px) or `md` (32px, default). */
@@ -322,8 +322,6 @@ export type NysCheckboxgroupProps = {
322
322
  tile?: boolean;
323
323
  /** Tooltip text shown on hover/focus of info icon. */
324
324
  tooltip?: string;
325
- /** Adjusts colors for dark backgrounds. Applied to all children. */
326
- inverted?: boolean;
327
325
  /** Form `id` to associate with. Applied to all children. */
328
326
  form?: string | null;
329
327
  /** Checkbox size for all children: `sm` (24px) or `md` (32px, default). */
@@ -635,8 +633,6 @@ export type NysRadiobuttonProps = {
635
633
  name?: string;
636
634
  /** Value submitted when this radio is selected. */
637
635
  value?: string;
638
- /** Adjusts colors for dark backgrounds. */
639
- inverted?: boolean;
640
636
  /** Form `id` to associate with. */
641
637
  form?: string | null;
642
638
  /** Radio size: `sm` (24px) or `md` (32px, default). */
@@ -683,8 +679,6 @@ export type NysRadiogroupProps = {
683
679
  tile?: boolean;
684
680
  /** Tooltip text shown on hover/focus of info icon. */
685
681
  tooltip?: string;
686
- /** Adjusts colors for dark backgrounds. Applied to all children. */
687
- inverted?: boolean;
688
682
  /** Form `id` to associate with. Applied to all children. */
689
683
  form?: string | null;
690
684
  /** Radio size for all children: `sm` (24px) or `md` (32px, default). */
@@ -781,6 +775,45 @@ export type NysStepperProps = {
781
775
  isCompactExpanded?: boolean;
782
776
  };
783
777
 
778
+ export type NysTabProps = {
779
+ /** Unique identifier for the tab element.
780
+ Reflected to the DOM attribute so `aria-controls` references resolve. */
781
+ id?: string;
782
+ /** Visible text label rendered inside the inner `<span>`. */
783
+ label?: string;
784
+ /** Whether this tab is the currently active tab.
785
+ Managed by `<nys-tabgroup>`; reflected for CSS attribute selectors. */
786
+ selected?: boolean;
787
+ /** Whether this tab is disabled.
788
+ Reflected to the DOM attribute for CSS styling. */
789
+ disabled?: boolean;
790
+
791
+ /** Dispatched when the tab is activated via click or Enter / Space. Bubbles and crosses shadow DOM boundaries. `detail: { id: string, label: string }` */
792
+ "onnys-tab-select"?: (e: CustomEvent<CustomEvent>) => void;
793
+ /** Dispatched when the host receives focus. Bubbles and crosses shadow DOM boundaries. `detail: { id: string }` */
794
+ "onnys-tab-focus"?: (e: CustomEvent<never>) => void;
795
+ /** Dispatched when the host loses focus. Bubbles and crosses shadow DOM boundaries. `detail: { id: string }` */
796
+ "onnys-tab-blur"?: (e: CustomEvent<never>) => void;
797
+ };
798
+
799
+ export type NysTabgroupProps = {
800
+ /** Unique identifier for the tabgroup element.
801
+ If not provided, one is auto-generated in `connectedCallback`.
802
+ Reflected to the DOM attribute. */
803
+ id?: string;
804
+ /** The name of the tab group.
805
+ Used for form submission and accessibility purposes. */
806
+ name?: string;
807
+ };
808
+
809
+ export type NysTabpanelProps = {
810
+ /** Unique identifier for the panel element.
811
+ If not provided, one is auto-generated in `connectedCallback`.
812
+ Reflected to the DOM attribute so `aria-controls` references on sibling
813
+ `<nys-tab>` elements resolve correctly. */
814
+ id?: string;
815
+ };
816
+
784
817
  export type NysTableProps = {
785
818
  /** */
786
819
  id?: string;
@@ -1054,7 +1087,7 @@ export type CustomElements = {
1054
1087
  "nys-avatar": Partial<NysAvatarProps & BaseProps & BaseEvents>;
1055
1088
 
1056
1089
  /**
1057
- * Floating back-to-top button with auto-show behavior and smooth scroll.
1090
+ * Floating back-to-top button with auto-show behavior, smooth scroll, and focus management.
1058
1091
  * ---
1059
1092
  *
1060
1093
  */
@@ -1396,6 +1429,72 @@ export type CustomElements = {
1396
1429
  */
1397
1430
  "nys-stepper": Partial<NysStepperProps & BaseProps & BaseEvents>;
1398
1431
 
1432
+ /**
1433
+ * `<nys-tab>` is a single tab within a `<nys-tabgroup>`.
1434
+ *
1435
+ * The host element carries `role="tab"`, `tabindex`, `aria-selected`,
1436
+ * `aria-controls`, and `aria-disabled` so assistive technologies see the
1437
+ * correct ARIA tab semantics on the element that is actually focused.
1438
+ * `<nys-tabgroup>` manages `tabindex`, `aria-selected`, and `aria-controls`
1439
+ * via `_applySelection`; do not set them directly on this element.
1440
+ * ---
1441
+ *
1442
+ *
1443
+ * ### **Events:**
1444
+ * - **nys-tab-select** - Dispatched when the tab is activated via click or Enter / Space. Bubbles and crosses shadow DOM boundaries. `detail: { id: string, label: string }`
1445
+ * - **nys-tab-focus** - Dispatched when the host receives focus. Bubbles and crosses shadow DOM boundaries. `detail: { id: string }`
1446
+ * - **nys-tab-blur** - Dispatched when the host loses focus. Bubbles and crosses shadow DOM boundaries. `detail: { id: string }`
1447
+ *
1448
+ * ### **Methods:**
1449
+ * - **focus(options: _FocusOptions_): _void_** - Focuses the host element. The host carries `role="tab"` and `tabindex`,
1450
+ * so it is the correct element for AT to land on.
1451
+ *
1452
+ * ### **Slots:**
1453
+ * - _default_ - No slots; content is derived from the `label` property.
1454
+ */
1455
+ "nys-tab": Partial<NysTabProps & BaseProps & BaseEvents>;
1456
+
1457
+ /**
1458
+ * `<nys-tabgroup>` is the container for `<nys-tab>` and `<nys-tabpanel>`
1459
+ * elements.
1460
+ *
1461
+ * Accepts tabs and panels as flat light-DOM children in any order (interleaved
1462
+ * or grouped). On slot change, children are sorted into dedicated shadow-DOM
1463
+ * containers, ARIA relationships are wired, and the first selected (or first)
1464
+ * tab is activated.
1465
+ *
1466
+ * Scroll shadows are rendered on either side of the tab list and toggled via
1467
+ * `ResizeObserver` and a `scroll` listener so they accurately reflect whether
1468
+ * overflow content exists in each direction.
1469
+ *
1470
+ * Keyboard navigation follows the
1471
+ * https://www.w3.org/WAI/ARIA/apg/patterns/tabs/ ARIA Tabs Pattern:
1472
+ * - Arrow keys move focus without changing selection.
1473
+ * - Enter / Space confirm selection on the focused tab.
1474
+ * ---
1475
+ *
1476
+ *
1477
+ * ### **Slots:**
1478
+ * - _default_ - Accepts `<nys-tab>` and `<nys-tabpanel>` children. Elements are moved into internal shadow-DOM containers on `slotchange`; the slot itself is not rendered visibly.
1479
+ */
1480
+ "nys-tabgroup": Partial<NysTabgroupProps & BaseProps & BaseEvents>;
1481
+
1482
+ /**
1483
+ * `<nys-tabpanel>` is a content panel paired with a `<nys-tab>` inside a
1484
+ * `<nys-tabgroup>`.
1485
+ *
1486
+ * Pairing is determined by render order: the Nth `<nys-tabpanel>` child of a
1487
+ * `<nys-tabgroup>` corresponds to the Nth `<nys-tab>` child.
1488
+ * `aria-labelledby` and the `hidden` attribute are managed externally by
1489
+ * `<nys-tabgroup>` via `_applySelection`; do not set them directly.
1490
+ * ---
1491
+ *
1492
+ *
1493
+ * ### **Slots:**
1494
+ * - _default_ - Default slot for panel content. Rendered inside a wrapper `<div>` with the `.nys-tabpanel` class for styling.
1495
+ */
1496
+ "nys-tabpanel": Partial<NysTabpanelProps & BaseProps & BaseEvents>;
1497
+
1399
1498
  /**
1400
1499
  * `<nys-table>` is a responsive table component that can display native HTML tables,
1401
1500
  * supports striped and bordered styling, sortable columns, and CSV download.