@nysds/components 1.15.0 → 1.15.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.
- package/custom-elements.json +671 -317
- package/dist/.vscode/vscode.html-custom-data.json +1 -1
- package/dist/custom-elements.json +671 -317
- package/dist/nysds.es.js +779 -724
- package/dist/nysds.es.js.map +1 -1
- package/dist/nysds.js +37 -37
- package/dist/nysds.js.map +1 -1
- package/dist/packages/nys-dropdownmenu/src/nys-dropdownmenu.d.ts +1 -1
- package/dist/packages/nys-globalheader/src/nys-globalheader.d.ts +4 -2
- package/dist/packages/nys-table/src/nys-table.d.ts +12 -1
- package/package.json +19 -10
- package/packages/react/NysAccordion.d.ts +65 -0
- package/packages/react/NysAccordion.js +23 -0
- package/packages/react/NysAccordionItem.d.ts +72 -0
- package/packages/react/NysAccordionItem.js +41 -0
- package/packages/react/NysAlert.d.ts +104 -0
- package/packages/react/NysAlert.js +63 -0
- package/packages/react/NysAvatar.d.ts +78 -0
- package/packages/react/NysAvatar.js +40 -0
- package/packages/react/NysBacktotop.d.ts +54 -0
- package/packages/react/NysBacktotop.js +22 -0
- package/packages/react/NysBadge.d.ts +75 -0
- package/packages/react/NysBadge.js +40 -0
- package/packages/react/NysButton.d.ts +141 -0
- package/packages/react/NysButton.js +81 -0
- package/packages/react/NysCheckbox.d.ts +139 -0
- package/packages/react/NysCheckbox.js +76 -0
- package/packages/react/NysCheckboxgroup.d.ts +91 -0
- package/packages/react/NysCheckboxgroup.js +48 -0
- package/packages/react/NysCombobox.d.ts +126 -0
- package/packages/react/NysCombobox.js +66 -0
- package/packages/react/NysDatepicker.d.ts +122 -0
- package/packages/react/NysDatepicker.js +72 -0
- package/packages/react/NysDivider.d.ts +51 -0
- package/packages/react/NysDivider.js +21 -0
- package/packages/react/NysDropdownMenu.d.ts +54 -0
- package/packages/react/NysDropdownMenu.js +22 -0
- package/packages/react/NysDropdownMenuItem.d.ts +75 -0
- package/packages/react/NysDropdownMenuItem.js +47 -0
- package/packages/react/NysErrorMessage.d.ts +57 -0
- package/packages/react/NysErrorMessage.js +23 -0
- package/packages/react/NysFileItem.d.ts +69 -0
- package/packages/react/NysFileItem.js +37 -0
- package/packages/react/NysFileinput.d.ts +108 -0
- package/packages/react/NysFileinput.js +67 -0
- package/packages/react/NysGlobalFooter.d.ts +57 -0
- package/packages/react/NysGlobalFooter.js +22 -0
- package/packages/react/NysGlobalHeader.d.ts +60 -0
- package/packages/react/NysGlobalHeader.js +23 -0
- package/packages/react/NysIcon.d.ts +66 -0
- package/packages/react/NysIcon.js +27 -0
- package/packages/react/NysLabel.d.ts +66 -0
- package/packages/react/NysLabel.js +26 -0
- package/packages/react/NysModal.d.ts +83 -0
- package/packages/react/NysModal.js +41 -0
- package/packages/react/NysOption.d.ts +66 -0
- package/packages/react/NysOption.js +25 -0
- package/packages/react/NysPagination.d.ts +72 -0
- package/packages/react/NysPagination.js +45 -0
- package/packages/react/NysRadiobutton.d.ts +127 -0
- package/packages/react/NysRadiobutton.js +68 -0
- package/packages/react/NysRadiogroup.d.ts +91 -0
- package/packages/react/NysRadiogroup.js +48 -0
- package/packages/react/NysSelect.d.ts +116 -0
- package/packages/react/NysSelect.js +65 -0
- package/packages/react/NysSkipnav.d.ts +54 -0
- package/packages/react/NysSkipnav.js +22 -0
- package/packages/react/NysStep.d.ts +75 -0
- package/packages/react/NysStep.js +51 -0
- package/packages/react/NysStepper.d.ts +67 -0
- package/packages/react/NysStepper.js +26 -0
- package/packages/react/NysTable.d.ts +80 -0
- package/packages/react/NysTable.js +41 -0
- package/packages/react/NysTextarea.d.ts +138 -0
- package/packages/react/NysTextarea.js +77 -0
- package/packages/react/NysTextinput.d.ts +144 -0
- package/packages/react/NysTextinput.js +83 -0
- package/packages/react/NysToggle.d.ts +102 -0
- package/packages/react/NysToggle.js +59 -0
- package/packages/react/NysTooltip.d.ts +60 -0
- package/packages/react/NysTooltip.js +24 -0
- package/packages/react/NysUnavFooter.d.ts +48 -0
- package/packages/react/NysUnavFooter.js +18 -0
- package/packages/react/NysUnavHeader.d.ts +72 -0
- package/packages/react/NysUnavHeader.js +38 -0
- package/packages/react/README.md +92 -0
- package/packages/react/index.d.ts +37 -0
- package/packages/react/index.js +37 -0
- package/packages/react/react-utils.js +40 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { NysTable as NysTableElement } from "../../dist/nysds.es.js";
|
|
3
|
+
|
|
4
|
+
export type { NysTableElement };
|
|
5
|
+
|
|
6
|
+
export interface NysTableProps 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
|
+
/** undefined */
|
|
22
|
+
striped?: boolean;
|
|
23
|
+
|
|
24
|
+
/** undefined */
|
|
25
|
+
sortable?: boolean;
|
|
26
|
+
|
|
27
|
+
/** undefined */
|
|
28
|
+
bordered?: boolean;
|
|
29
|
+
|
|
30
|
+
/** undefined */
|
|
31
|
+
id?: NysTableElement["id"];
|
|
32
|
+
|
|
33
|
+
/** undefined */
|
|
34
|
+
name?: NysTableElement["name"];
|
|
35
|
+
|
|
36
|
+
/** undefined */
|
|
37
|
+
download?: NysTableElement["download"];
|
|
38
|
+
|
|
39
|
+
/** 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()`. */
|
|
40
|
+
className?: string;
|
|
41
|
+
|
|
42
|
+
/** Contains a space-separated list of the part names of the element that should be exposed on the host element. */
|
|
43
|
+
exportparts?: string;
|
|
44
|
+
|
|
45
|
+
/** Used for labels to link them with their inputs (using input id). */
|
|
46
|
+
htmlFor?: string;
|
|
47
|
+
|
|
48
|
+
/** Used to help React identify which items have changed, are added, or are removed within a list. */
|
|
49
|
+
key?: number | string;
|
|
50
|
+
|
|
51
|
+
/** 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. */
|
|
52
|
+
part?: string;
|
|
53
|
+
|
|
54
|
+
/** 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. */
|
|
55
|
+
ref?: any;
|
|
56
|
+
|
|
57
|
+
/** 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. */
|
|
58
|
+
tabIndex?: number;
|
|
59
|
+
|
|
60
|
+
/** Fired when the download button or sortable headers are clicked. */
|
|
61
|
+
onNysClick?: (event: CustomEvent) => void;
|
|
62
|
+
|
|
63
|
+
/** Fired when a sortable column header is clicked. Can be prevented by calling `event.preventDefault()` to override default sort behavior. Detail: { columnIndex: number, columnLabel: string, sortDirection: "asc" | "desc" | "none" } */
|
|
64
|
+
onNysColumnSort?: (event: CustomEvent) => void;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* `<nys-table>` is a responsive table component that can display native HTML tables,
|
|
69
|
+
* supports striped and bordered styling, sortable columns, and CSV download.
|
|
70
|
+
* ---
|
|
71
|
+
*
|
|
72
|
+
*
|
|
73
|
+
* ### **Events:**
|
|
74
|
+
* - **nys-click** - Fired when the download button or sortable headers are clicked.
|
|
75
|
+
* - **nys-column-sort** - Fired when a sortable column header is clicked. Can be prevented by calling `event.preventDefault()` to override default sort behavior. Detail: { columnIndex: number, columnLabel: string, sortDirection: "asc" | "desc" | "none" }
|
|
76
|
+
*
|
|
77
|
+
* ### **Slots:**
|
|
78
|
+
* - _default_ - Accepts a `<table>` element. Only the first table is rendered.
|
|
79
|
+
*/
|
|
80
|
+
export const NysTable: React.ForwardRefExoticComponent<NysTableProps>;
|
|
@@ -0,0 +1,41 @@
|
|
|
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 NysTable = forwardRef((props, forwardedRef) => {
|
|
6
|
+
const ref = useRef(null);
|
|
7
|
+
const { striped, sortable, bordered, id, name, download, ...filteredProps } =
|
|
8
|
+
props;
|
|
9
|
+
|
|
10
|
+
/** Event listeners - run once */
|
|
11
|
+
useEventListener(ref, "nys-click", props.onNysClick);
|
|
12
|
+
useEventListener(ref, "nys-column-sort", props.onNysColumnSort);
|
|
13
|
+
|
|
14
|
+
return React.createElement(
|
|
15
|
+
"nys-table",
|
|
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
|
+
name: props.name,
|
|
28
|
+
download: props.download,
|
|
29
|
+
class: props.className,
|
|
30
|
+
exportparts: props.exportparts,
|
|
31
|
+
for: props.htmlFor,
|
|
32
|
+
part: props.part,
|
|
33
|
+
tabindex: props.tabIndex,
|
|
34
|
+
striped: props.striped ? true : undefined,
|
|
35
|
+
sortable: props.sortable ? true : undefined,
|
|
36
|
+
bordered: props.bordered ? true : undefined,
|
|
37
|
+
style: { ...props.style },
|
|
38
|
+
},
|
|
39
|
+
props.children,
|
|
40
|
+
);
|
|
41
|
+
});
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import {
|
|
3
|
+
NysTextarea as NysTextareaElement,
|
|
4
|
+
CustomEvent,
|
|
5
|
+
Event,
|
|
6
|
+
} from "../../dist/nysds.es.js";
|
|
7
|
+
|
|
8
|
+
export type { NysTextareaElement, CustomEvent, Event };
|
|
9
|
+
|
|
10
|
+
export interface NysTextareaProps extends Pick<
|
|
11
|
+
React.AllHTMLAttributes<HTMLElement>,
|
|
12
|
+
| "children"
|
|
13
|
+
| "dir"
|
|
14
|
+
| "hidden"
|
|
15
|
+
| "id"
|
|
16
|
+
| "lang"
|
|
17
|
+
| "slot"
|
|
18
|
+
| "style"
|
|
19
|
+
| "title"
|
|
20
|
+
| "translate"
|
|
21
|
+
| "onClick"
|
|
22
|
+
| "onFocus"
|
|
23
|
+
| "onBlur"
|
|
24
|
+
> {
|
|
25
|
+
/** Prevents interaction. */
|
|
26
|
+
disabled?: boolean;
|
|
27
|
+
|
|
28
|
+
/** Makes textarea read-only but focusable. */
|
|
29
|
+
readonly?: boolean;
|
|
30
|
+
|
|
31
|
+
/** Marks as required. Shows "Required" flag and validates on blur. */
|
|
32
|
+
required?: boolean;
|
|
33
|
+
|
|
34
|
+
/** Shows "Optional" flag. Use when most fields are required. */
|
|
35
|
+
optional?: boolean;
|
|
36
|
+
|
|
37
|
+
/** Adjusts colors for dark backgrounds. */
|
|
38
|
+
inverted?: boolean;
|
|
39
|
+
|
|
40
|
+
/** Shows error message when true. Set by validation or manually. */
|
|
41
|
+
showError?: boolean;
|
|
42
|
+
|
|
43
|
+
/** Unique identifier. Auto-generated if not provided. */
|
|
44
|
+
id?: NysTextareaElement["id"];
|
|
45
|
+
|
|
46
|
+
/** Name for form submission. */
|
|
47
|
+
name?: NysTextareaElement["name"];
|
|
48
|
+
|
|
49
|
+
/** Visible label text. Required for accessibility. */
|
|
50
|
+
label?: NysTextareaElement["label"];
|
|
51
|
+
|
|
52
|
+
/** Helper text below label. Use slot for custom HTML. */
|
|
53
|
+
description?: NysTextareaElement["description"];
|
|
54
|
+
|
|
55
|
+
/** Placeholder text. Don't use as label replacement. */
|
|
56
|
+
placeholder?: NysTextareaElement["placeholder"];
|
|
57
|
+
|
|
58
|
+
/** Current textarea value. */
|
|
59
|
+
value?: NysTextareaElement["value"];
|
|
60
|
+
|
|
61
|
+
/** Tooltip text shown on hover/focus of info icon. */
|
|
62
|
+
tooltip?: NysTextareaElement["tooltip"];
|
|
63
|
+
|
|
64
|
+
/** Form `id` to associate with when textarea is outside form element. */
|
|
65
|
+
form?: NysTextareaElement["form"];
|
|
66
|
+
|
|
67
|
+
/** Maximum character length. */
|
|
68
|
+
maxlength?: NysTextareaElement["maxlength"];
|
|
69
|
+
|
|
70
|
+
/** Textarea width: `sm` (88px), `md` (200px), `lg` (384px), `full` (100%, default). */
|
|
71
|
+
width?: NysTextareaElement["width"];
|
|
72
|
+
|
|
73
|
+
/** Visible height in lines. */
|
|
74
|
+
rows?: NysTextareaElement["rows"];
|
|
75
|
+
|
|
76
|
+
/** Resize behavior: `vertical` (default, user can resize height), `none` (fixed size). */
|
|
77
|
+
resize?: NysTextareaElement["resize"];
|
|
78
|
+
|
|
79
|
+
/** Error message text. Shown only when `showError` is true. */
|
|
80
|
+
errorMessage?: NysTextareaElement["errorMessage"];
|
|
81
|
+
|
|
82
|
+
/** 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()`. */
|
|
83
|
+
className?: string;
|
|
84
|
+
|
|
85
|
+
/** Contains a space-separated list of the part names of the element that should be exposed on the host element. */
|
|
86
|
+
exportparts?: string;
|
|
87
|
+
|
|
88
|
+
/** Used for labels to link them with their inputs (using input id). */
|
|
89
|
+
htmlFor?: string;
|
|
90
|
+
|
|
91
|
+
/** Used to help React identify which items have changed, are added, or are removed within a list. */
|
|
92
|
+
key?: number | string;
|
|
93
|
+
|
|
94
|
+
/** 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. */
|
|
95
|
+
part?: string;
|
|
96
|
+
|
|
97
|
+
/** 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. */
|
|
98
|
+
ref?: any;
|
|
99
|
+
|
|
100
|
+
/** 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. */
|
|
101
|
+
tabIndex?: number;
|
|
102
|
+
|
|
103
|
+
/** Fired on input change. Detail: `{id, value}`. */
|
|
104
|
+
onNysInput?: (event: CustomEvent) => void;
|
|
105
|
+
|
|
106
|
+
/** Fired when textarea gains focus. */
|
|
107
|
+
onNysFocus?: (event: CustomEvent) => void;
|
|
108
|
+
|
|
109
|
+
/** Fired when textarea loses focus. Triggers validation. */
|
|
110
|
+
onNysBlur?: (event: CustomEvent) => void;
|
|
111
|
+
|
|
112
|
+
/** Fired when user selects text. Detail: `{id, value}`. */
|
|
113
|
+
onNysSelect?: (event: CustomEvent) => void;
|
|
114
|
+
|
|
115
|
+
/** undefined */
|
|
116
|
+
onNysSelectionchange?: (event: CustomEvent) => void;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Multi-line text input for comments, descriptions, and feedback.
|
|
121
|
+
* ---
|
|
122
|
+
*
|
|
123
|
+
*
|
|
124
|
+
* ### **Events:**
|
|
125
|
+
* - **nys-input** - Fired on input change. Detail: `{id, value}`.
|
|
126
|
+
* - **nys-focus** - Fired when textarea gains focus.
|
|
127
|
+
* - **nys-blur** - Fired when textarea loses focus. Triggers validation.
|
|
128
|
+
* - **nys-select** - Fired when user selects text. Detail: `{id, value}`.
|
|
129
|
+
* - **nys-selectionchange**
|
|
130
|
+
*
|
|
131
|
+
* ### **Methods:**
|
|
132
|
+
* - **checkValidity(): _boolean_** - Functions
|
|
133
|
+
* --------------------------------------------------------------------------
|
|
134
|
+
*
|
|
135
|
+
* ### **Slots:**
|
|
136
|
+
* - **description** - Custom HTML description content below the label.
|
|
137
|
+
*/
|
|
138
|
+
export const NysTextarea: React.ForwardRefExoticComponent<NysTextareaProps>;
|
|
@@ -0,0 +1,77 @@
|
|
|
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 NysTextarea = forwardRef((props, forwardedRef) => {
|
|
6
|
+
const ref = useRef(null);
|
|
7
|
+
const {
|
|
8
|
+
disabled,
|
|
9
|
+
readonly,
|
|
10
|
+
required,
|
|
11
|
+
optional,
|
|
12
|
+
inverted,
|
|
13
|
+
showError,
|
|
14
|
+
id,
|
|
15
|
+
name,
|
|
16
|
+
label,
|
|
17
|
+
description,
|
|
18
|
+
placeholder,
|
|
19
|
+
value,
|
|
20
|
+
tooltip,
|
|
21
|
+
form,
|
|
22
|
+
maxlength,
|
|
23
|
+
width,
|
|
24
|
+
rows,
|
|
25
|
+
resize,
|
|
26
|
+
errorMessage,
|
|
27
|
+
...filteredProps
|
|
28
|
+
} = props;
|
|
29
|
+
|
|
30
|
+
/** Event listeners - run once */
|
|
31
|
+
useEventListener(ref, "nys-input", props.onNysInput);
|
|
32
|
+
useEventListener(ref, "nys-focus", props.onNysFocus);
|
|
33
|
+
useEventListener(ref, "nys-blur", props.onNysBlur);
|
|
34
|
+
useEventListener(ref, "nys-select", props.onNysSelect);
|
|
35
|
+
useEventListener(ref, "nys-selectionchange", props.onNysSelectionchange);
|
|
36
|
+
|
|
37
|
+
return React.createElement(
|
|
38
|
+
"nys-textarea",
|
|
39
|
+
{
|
|
40
|
+
ref: (node) => {
|
|
41
|
+
ref.current = node;
|
|
42
|
+
if (typeof forwardedRef === "function") {
|
|
43
|
+
forwardedRef(node);
|
|
44
|
+
} else if (forwardedRef) {
|
|
45
|
+
forwardedRef.current = node;
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
...filteredProps,
|
|
49
|
+
id: props.id,
|
|
50
|
+
name: props.name,
|
|
51
|
+
label: props.label,
|
|
52
|
+
description: props.description,
|
|
53
|
+
placeholder: props.placeholder,
|
|
54
|
+
value: props.value,
|
|
55
|
+
tooltip: props.tooltip,
|
|
56
|
+
form: props.form,
|
|
57
|
+
maxlength: props.maxlength,
|
|
58
|
+
width: props.width,
|
|
59
|
+
rows: props.rows,
|
|
60
|
+
resize: props.resize,
|
|
61
|
+
errorMessage: props.errorMessage,
|
|
62
|
+
class: props.className,
|
|
63
|
+
exportparts: props.exportparts,
|
|
64
|
+
for: props.htmlFor,
|
|
65
|
+
part: props.part,
|
|
66
|
+
tabindex: props.tabIndex,
|
|
67
|
+
disabled: props.disabled ? true : undefined,
|
|
68
|
+
readonly: props.readonly ? true : undefined,
|
|
69
|
+
required: props.required ? true : undefined,
|
|
70
|
+
optional: props.optional ? true : undefined,
|
|
71
|
+
inverted: props.inverted ? true : undefined,
|
|
72
|
+
showError: props.showError ? true : undefined,
|
|
73
|
+
style: { ...props.style },
|
|
74
|
+
},
|
|
75
|
+
props.children,
|
|
76
|
+
);
|
|
77
|
+
});
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import {
|
|
3
|
+
NysTextinput as NysTextinputElement,
|
|
4
|
+
CustomEvent,
|
|
5
|
+
Event,
|
|
6
|
+
} from "../../dist/nysds.es.js";
|
|
7
|
+
|
|
8
|
+
export type { NysTextinputElement, CustomEvent, Event };
|
|
9
|
+
|
|
10
|
+
export interface NysTextinputProps extends Pick<
|
|
11
|
+
React.AllHTMLAttributes<HTMLElement>,
|
|
12
|
+
| "children"
|
|
13
|
+
| "dir"
|
|
14
|
+
| "hidden"
|
|
15
|
+
| "id"
|
|
16
|
+
| "lang"
|
|
17
|
+
| "slot"
|
|
18
|
+
| "style"
|
|
19
|
+
| "title"
|
|
20
|
+
| "translate"
|
|
21
|
+
| "onClick"
|
|
22
|
+
| "onFocus"
|
|
23
|
+
| "onBlur"
|
|
24
|
+
> {
|
|
25
|
+
/** Prevents interaction. */
|
|
26
|
+
disabled?: boolean;
|
|
27
|
+
|
|
28
|
+
/** Makes input read-only but focusable. */
|
|
29
|
+
readonly?: boolean;
|
|
30
|
+
|
|
31
|
+
/** Marks as required. Shows "Required" flag and validates on blur. */
|
|
32
|
+
required?: boolean;
|
|
33
|
+
|
|
34
|
+
/** Shows "Optional" flag. Use when most fields are required. */
|
|
35
|
+
optional?: boolean;
|
|
36
|
+
|
|
37
|
+
/** Adjusts colors for dark backgrounds. */
|
|
38
|
+
inverted?: boolean;
|
|
39
|
+
|
|
40
|
+
/** Shows error message when true. Set by validation or manually. */
|
|
41
|
+
showError?: boolean;
|
|
42
|
+
|
|
43
|
+
/** Unique identifier. Auto-generated if not provided. */
|
|
44
|
+
id?: NysTextinputElement["id"];
|
|
45
|
+
|
|
46
|
+
/** Name for form submission. */
|
|
47
|
+
name?: NysTextinputElement["name"];
|
|
48
|
+
|
|
49
|
+
/** Input type: `text` (default), `email`, `number`, `password`, `search`, `tel` (auto-masked), `url`. */
|
|
50
|
+
type?: NysTextinputElement["type"];
|
|
51
|
+
|
|
52
|
+
/** Visible label text. Required for accessibility. */
|
|
53
|
+
label?: NysTextinputElement["label"];
|
|
54
|
+
|
|
55
|
+
/** Helper text below label. Use slot for custom HTML. */
|
|
56
|
+
description?: NysTextinputElement["description"];
|
|
57
|
+
|
|
58
|
+
/** Placeholder text. Don't use as label replacement. */
|
|
59
|
+
placeholder?: NysTextinputElement["placeholder"];
|
|
60
|
+
|
|
61
|
+
/** Current input value. */
|
|
62
|
+
value?: NysTextinputElement["value"];
|
|
63
|
+
|
|
64
|
+
/** Tooltip text shown on hover/focus of info icon. */
|
|
65
|
+
tooltip?: NysTextinputElement["tooltip"];
|
|
66
|
+
|
|
67
|
+
/** Form `id` to associate with when input is outside form element. */
|
|
68
|
+
form?: NysTextinputElement["form"];
|
|
69
|
+
|
|
70
|
+
/** Regex pattern for validation. Shows error on mismatch. */
|
|
71
|
+
pattern?: NysTextinputElement["pattern"];
|
|
72
|
+
|
|
73
|
+
/** Maximum character length. */
|
|
74
|
+
maxlength?: NysTextinputElement["maxlength"];
|
|
75
|
+
|
|
76
|
+
/** Accessible label. When set, assuming "label" isn't provided for private special cases (i.e., <checkbox other>). */
|
|
77
|
+
ariaLabel?: NysTextinputElement["ariaLabel"];
|
|
78
|
+
|
|
79
|
+
/** Input width: `sm` (88px), `md` (200px), `lg` (384px), `full` (100%, default). */
|
|
80
|
+
width?: NysTextinputElement["width"];
|
|
81
|
+
|
|
82
|
+
/** Step increment for `type="number"`. */
|
|
83
|
+
step?: NysTextinputElement["step"];
|
|
84
|
+
|
|
85
|
+
/** Minimum value for `type="number"`. */
|
|
86
|
+
min?: NysTextinputElement["min"];
|
|
87
|
+
|
|
88
|
+
/** Maximum value for `type="number"`. */
|
|
89
|
+
max?: NysTextinputElement["max"];
|
|
90
|
+
|
|
91
|
+
/** Error message text. Shown only when `showError` is true. */
|
|
92
|
+
errorMessage?: NysTextinputElement["errorMessage"];
|
|
93
|
+
|
|
94
|
+
/** 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()`. */
|
|
95
|
+
className?: string;
|
|
96
|
+
|
|
97
|
+
/** Contains a space-separated list of the part names of the element that should be exposed on the host element. */
|
|
98
|
+
exportparts?: string;
|
|
99
|
+
|
|
100
|
+
/** Used for labels to link them with their inputs (using input id). */
|
|
101
|
+
htmlFor?: string;
|
|
102
|
+
|
|
103
|
+
/** Used to help React identify which items have changed, are added, or are removed within a list. */
|
|
104
|
+
key?: number | string;
|
|
105
|
+
|
|
106
|
+
/** 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. */
|
|
107
|
+
part?: string;
|
|
108
|
+
|
|
109
|
+
/** 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. */
|
|
110
|
+
ref?: any;
|
|
111
|
+
|
|
112
|
+
/** 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. */
|
|
113
|
+
tabIndex?: number;
|
|
114
|
+
|
|
115
|
+
/** Fired on input change. Detail: `{id, value}`. */
|
|
116
|
+
onNysInput?: (event: CustomEvent) => void;
|
|
117
|
+
|
|
118
|
+
/** Fired when input gains focus. */
|
|
119
|
+
onNysFocus?: (event: CustomEvent) => void;
|
|
120
|
+
|
|
121
|
+
/** Fired when input loses focus. Triggers validation. */
|
|
122
|
+
onNysBlur?: (event: CustomEvent) => void;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Text input for short single-line data with validation and masking support.
|
|
127
|
+
* ---
|
|
128
|
+
*
|
|
129
|
+
*
|
|
130
|
+
* ### **Events:**
|
|
131
|
+
* - **nys-input** - Fired on input change. Detail: `{id, value}`.
|
|
132
|
+
* - **nys-focus** - Fired when input gains focus.
|
|
133
|
+
* - **nys-blur** - Fired when input loses focus. Triggers validation.
|
|
134
|
+
*
|
|
135
|
+
* ### **Methods:**
|
|
136
|
+
* - **checkValidity(): _boolean_** - Functions
|
|
137
|
+
* --------------------------------------------------------------------------
|
|
138
|
+
*
|
|
139
|
+
* ### **Slots:**
|
|
140
|
+
* - **description** - Custom HTML description content below the label.
|
|
141
|
+
* - **startButton** - Button at input start. Use single `nys-button` only.
|
|
142
|
+
* - **endButton** - Button at input end. Use single `nys-button` only.
|
|
143
|
+
*/
|
|
144
|
+
export const NysTextinput: React.ForwardRefExoticComponent<NysTextinputProps>;
|
|
@@ -0,0 +1,83 @@
|
|
|
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 NysTextinput = forwardRef((props, forwardedRef) => {
|
|
6
|
+
const ref = useRef(null);
|
|
7
|
+
const {
|
|
8
|
+
disabled,
|
|
9
|
+
readonly,
|
|
10
|
+
required,
|
|
11
|
+
optional,
|
|
12
|
+
inverted,
|
|
13
|
+
showError,
|
|
14
|
+
id,
|
|
15
|
+
name,
|
|
16
|
+
type,
|
|
17
|
+
label,
|
|
18
|
+
description,
|
|
19
|
+
placeholder,
|
|
20
|
+
value,
|
|
21
|
+
tooltip,
|
|
22
|
+
form,
|
|
23
|
+
pattern,
|
|
24
|
+
maxlength,
|
|
25
|
+
ariaLabel,
|
|
26
|
+
width,
|
|
27
|
+
step,
|
|
28
|
+
min,
|
|
29
|
+
max,
|
|
30
|
+
errorMessage,
|
|
31
|
+
...filteredProps
|
|
32
|
+
} = props;
|
|
33
|
+
|
|
34
|
+
/** Event listeners - run once */
|
|
35
|
+
useEventListener(ref, "nys-input", props.onNysInput);
|
|
36
|
+
useEventListener(ref, "nys-focus", props.onNysFocus);
|
|
37
|
+
useEventListener(ref, "nys-blur", props.onNysBlur);
|
|
38
|
+
|
|
39
|
+
return React.createElement(
|
|
40
|
+
"nys-textinput",
|
|
41
|
+
{
|
|
42
|
+
ref: (node) => {
|
|
43
|
+
ref.current = node;
|
|
44
|
+
if (typeof forwardedRef === "function") {
|
|
45
|
+
forwardedRef(node);
|
|
46
|
+
} else if (forwardedRef) {
|
|
47
|
+
forwardedRef.current = node;
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
...filteredProps,
|
|
51
|
+
id: props.id,
|
|
52
|
+
name: props.name,
|
|
53
|
+
type: props.type,
|
|
54
|
+
label: props.label,
|
|
55
|
+
description: props.description,
|
|
56
|
+
placeholder: props.placeholder,
|
|
57
|
+
value: props.value,
|
|
58
|
+
tooltip: props.tooltip,
|
|
59
|
+
form: props.form,
|
|
60
|
+
pattern: props.pattern,
|
|
61
|
+
maxlength: props.maxlength,
|
|
62
|
+
ariaLabel: props.ariaLabel,
|
|
63
|
+
width: props.width,
|
|
64
|
+
step: props.step,
|
|
65
|
+
min: props.min,
|
|
66
|
+
max: props.max,
|
|
67
|
+
errorMessage: props.errorMessage,
|
|
68
|
+
class: props.className,
|
|
69
|
+
exportparts: props.exportparts,
|
|
70
|
+
for: props.htmlFor,
|
|
71
|
+
part: props.part,
|
|
72
|
+
tabindex: props.tabIndex,
|
|
73
|
+
disabled: props.disabled ? true : undefined,
|
|
74
|
+
readonly: props.readonly ? true : undefined,
|
|
75
|
+
required: props.required ? true : undefined,
|
|
76
|
+
optional: props.optional ? true : undefined,
|
|
77
|
+
inverted: props.inverted ? true : undefined,
|
|
78
|
+
showError: props.showError ? true : undefined,
|
|
79
|
+
style: { ...props.style },
|
|
80
|
+
},
|
|
81
|
+
props.children,
|
|
82
|
+
);
|
|
83
|
+
});
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import {
|
|
3
|
+
NysToggle as NysToggleElement,
|
|
4
|
+
CustomEvent,
|
|
5
|
+
Event,
|
|
6
|
+
} from "../../dist/nysds.es.js";
|
|
7
|
+
|
|
8
|
+
export type { NysToggleElement, CustomEvent, Event };
|
|
9
|
+
|
|
10
|
+
export interface NysToggleProps extends Pick<
|
|
11
|
+
React.AllHTMLAttributes<HTMLElement>,
|
|
12
|
+
| "children"
|
|
13
|
+
| "dir"
|
|
14
|
+
| "hidden"
|
|
15
|
+
| "id"
|
|
16
|
+
| "lang"
|
|
17
|
+
| "slot"
|
|
18
|
+
| "style"
|
|
19
|
+
| "title"
|
|
20
|
+
| "translate"
|
|
21
|
+
| "onClick"
|
|
22
|
+
| "onFocus"
|
|
23
|
+
| "onBlur"
|
|
24
|
+
> {
|
|
25
|
+
/** Whether toggle is on. */
|
|
26
|
+
checked?: boolean;
|
|
27
|
+
|
|
28
|
+
/** Prevents interaction. */
|
|
29
|
+
disabled?: boolean;
|
|
30
|
+
|
|
31
|
+
/** Hides check/close icon inside toggle knob. */
|
|
32
|
+
noIcon?: boolean;
|
|
33
|
+
|
|
34
|
+
/** Adjusts colors for dark backgrounds. */
|
|
35
|
+
inverted?: boolean;
|
|
36
|
+
|
|
37
|
+
/** Unique identifier. Auto-generated if not provided. */
|
|
38
|
+
id?: NysToggleElement["id"];
|
|
39
|
+
|
|
40
|
+
/** Name for form submission. */
|
|
41
|
+
name?: NysToggleElement["name"];
|
|
42
|
+
|
|
43
|
+
/** Value submitted when toggle is on. */
|
|
44
|
+
value?: NysToggleElement["value"];
|
|
45
|
+
|
|
46
|
+
/** Visible label text. */
|
|
47
|
+
label?: NysToggleElement["label"];
|
|
48
|
+
|
|
49
|
+
/** Helper text below label. Use slot for custom HTML. */
|
|
50
|
+
description?: NysToggleElement["description"];
|
|
51
|
+
|
|
52
|
+
/** Form `id` to associate with. */
|
|
53
|
+
form?: NysToggleElement["form"];
|
|
54
|
+
|
|
55
|
+
/** Toggle size: `sm` or `md` (default). */
|
|
56
|
+
size?: NysToggleElement["size"];
|
|
57
|
+
|
|
58
|
+
/** 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()`. */
|
|
59
|
+
className?: string;
|
|
60
|
+
|
|
61
|
+
/** Contains a space-separated list of the part names of the element that should be exposed on the host element. */
|
|
62
|
+
exportparts?: string;
|
|
63
|
+
|
|
64
|
+
/** Used for labels to link them with their inputs (using input id). */
|
|
65
|
+
htmlFor?: string;
|
|
66
|
+
|
|
67
|
+
/** Used to help React identify which items have changed, are added, or are removed within a list. */
|
|
68
|
+
key?: number | string;
|
|
69
|
+
|
|
70
|
+
/** 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. */
|
|
71
|
+
part?: string;
|
|
72
|
+
|
|
73
|
+
/** 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. */
|
|
74
|
+
ref?: any;
|
|
75
|
+
|
|
76
|
+
/** 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. */
|
|
77
|
+
tabIndex?: number;
|
|
78
|
+
|
|
79
|
+
/** Fired when toggle state changes. Detail: `{id, checked}`. */
|
|
80
|
+
onNysChange?: (event: CustomEvent) => void;
|
|
81
|
+
|
|
82
|
+
/** Fired when toggle gains focus. */
|
|
83
|
+
onNysFocus?: (event: CustomEvent) => void;
|
|
84
|
+
|
|
85
|
+
/** Fired when toggle loses focus. */
|
|
86
|
+
onNysBlur?: (event: CustomEvent) => void;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* Toggle switch for binary settings with immediate effect.
|
|
91
|
+
* ---
|
|
92
|
+
*
|
|
93
|
+
*
|
|
94
|
+
* ### **Events:**
|
|
95
|
+
* - **nys-change** - Fired when toggle state changes. Detail: `{id, checked}`.
|
|
96
|
+
* - **nys-focus** - Fired when toggle gains focus.
|
|
97
|
+
* - **nys-blur** - Fired when toggle loses focus.
|
|
98
|
+
*
|
|
99
|
+
* ### **Slots:**
|
|
100
|
+
* - **description** - Custom HTML description content.
|
|
101
|
+
*/
|
|
102
|
+
export const NysToggle: React.ForwardRefExoticComponent<NysToggleProps>;
|