@govtechsg/sgds-web-component 3.23.0-rc.0 → 3.23.0-rc.2
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/base/card.js +1 -1
- package/base/select-element.d.ts +4 -0
- package/base/select-element.js +6 -0
- package/base/select-element.js.map +1 -1
- package/components/Breadcrumb/index.umd.min.js +34 -33
- package/components/Breadcrumb/index.umd.min.js.map +1 -1
- package/components/Card/index.umd.min.js +1 -1
- package/components/Card/index.umd.min.js.map +1 -1
- package/components/Checkbox/index.umd.min.js +3 -3
- package/components/Checkbox/index.umd.min.js.map +1 -1
- package/components/Checkbox/sgds-checkbox-group.d.ts +5 -0
- package/components/Checkbox/sgds-checkbox-group.js +10 -0
- package/components/Checkbox/sgds-checkbox-group.js.map +1 -1
- package/components/Checkbox/sgds-checkbox.d.ts +5 -1
- package/components/Checkbox/sgds-checkbox.js +10 -1
- package/components/Checkbox/sgds-checkbox.js.map +1 -1
- package/components/ComboBox/index.umd.min.js +7 -6
- package/components/ComboBox/index.umd.min.js.map +1 -1
- package/components/ComboBox/sgds-combo-box.d.ts +11 -0
- package/components/ComboBox/sgds-combo-box.js +34 -0
- package/components/ComboBox/sgds-combo-box.js.map +1 -1
- package/components/Datepicker/index.umd.min.js +1 -1
- package/components/Datepicker/index.umd.min.js.map +1 -1
- package/components/Drawer/index.umd.min.js +10 -5
- package/components/Drawer/index.umd.min.js.map +1 -1
- package/components/Drawer/sgds-drawer.js +5 -4
- package/components/Drawer/sgds-drawer.js.map +1 -1
- package/components/Dropdown/index.umd.min.js +9 -3
- package/components/Dropdown/index.umd.min.js.map +1 -1
- package/components/Dropdown/sgds-dropdown-item.d.ts +2 -0
- package/components/Dropdown/sgds-dropdown-item.js +7 -0
- package/components/Dropdown/sgds-dropdown-item.js.map +1 -1
- package/components/FileUpload/index.umd.min.js +1 -1
- package/components/FileUpload/index.umd.min.js.map +1 -1
- package/components/IconCard/index.umd.min.js +1 -1
- package/components/IconCard/index.umd.min.js.map +1 -1
- package/components/ImageCard/index.umd.min.js +1 -1
- package/components/ImageCard/index.umd.min.js.map +1 -1
- package/components/Input/index.umd.min.js +1 -1
- package/components/Input/index.umd.min.js.map +1 -1
- package/components/Mainnav/index.umd.min.js +6 -3
- package/components/Mainnav/index.umd.min.js.map +1 -1
- package/components/Mainnav/sgds-mainnav-dropdown.d.ts +4 -0
- package/components/Mainnav/sgds-mainnav-dropdown.js +6 -0
- package/components/Mainnav/sgds-mainnav-dropdown.js.map +1 -1
- package/components/OverflowMenu/index.umd.min.js +9 -3
- package/components/OverflowMenu/index.umd.min.js.map +1 -1
- package/components/QuantityToggle/index.umd.min.js +1 -1
- package/components/QuantityToggle/index.umd.min.js.map +1 -1
- package/components/Radio/index.umd.min.js +2 -2
- package/components/Radio/index.umd.min.js.map +1 -1
- package/components/Radio/sgds-radio-group.d.ts +4 -0
- package/components/Radio/sgds-radio-group.js +9 -0
- package/components/Radio/sgds-radio-group.js.map +1 -1
- package/components/Select/index.umd.min.js +3 -3
- package/components/Select/index.umd.min.js.map +1 -1
- package/components/Select/sgds-select.d.ts +4 -0
- package/components/Select/sgds-select.js +10 -1
- package/components/Select/sgds-select.js.map +1 -1
- package/components/Textarea/index.umd.min.js +1 -1
- package/components/Textarea/index.umd.min.js.map +1 -1
- package/components/ThumbnailCard/index.umd.min.js +1 -1
- package/components/ThumbnailCard/index.umd.min.js.map +1 -1
- package/components/index.umd.min.js +81 -77
- package/components/index.umd.min.js.map +1 -1
- package/css/fouc.css +1 -1
- package/custom-elements.json +965 -665
- package/index.umd.min.js +84 -80
- package/index.umd.min.js.map +1 -1
- package/package.json +1 -1
- package/react/base/card.cjs.js +1 -1
- package/react/base/card.js +1 -1
- package/react/base/select-element.cjs.js +6 -0
- package/react/base/select-element.cjs.js.map +1 -1
- package/react/base/select-element.js +6 -0
- package/react/base/select-element.js.map +1 -1
- package/react/checkbox/index.cjs.js +3 -1
- package/react/checkbox/index.cjs.js.map +1 -1
- package/react/checkbox/index.js +3 -1
- package/react/checkbox/index.js.map +1 -1
- package/react/checkbox-group/index.cjs.js +3 -1
- package/react/checkbox-group/index.cjs.js.map +1 -1
- package/react/checkbox-group/index.js +3 -1
- package/react/checkbox-group/index.js.map +1 -1
- package/react/combo-box/index.cjs.js +1 -0
- package/react/combo-box/index.cjs.js.map +1 -1
- package/react/combo-box/index.js +1 -0
- package/react/combo-box/index.js.map +1 -1
- package/react/components/Checkbox/sgds-checkbox-group.cjs.js +10 -0
- package/react/components/Checkbox/sgds-checkbox-group.cjs.js.map +1 -1
- package/react/components/Checkbox/sgds-checkbox-group.js +10 -0
- package/react/components/Checkbox/sgds-checkbox-group.js.map +1 -1
- package/react/components/Checkbox/sgds-checkbox.cjs.js +10 -1
- package/react/components/Checkbox/sgds-checkbox.cjs.js.map +1 -1
- package/react/components/Checkbox/sgds-checkbox.js +10 -1
- package/react/components/Checkbox/sgds-checkbox.js.map +1 -1
- package/react/components/ComboBox/sgds-combo-box.cjs.js +34 -0
- package/react/components/ComboBox/sgds-combo-box.cjs.js.map +1 -1
- package/react/components/ComboBox/sgds-combo-box.js +34 -0
- package/react/components/ComboBox/sgds-combo-box.js.map +1 -1
- package/react/components/Drawer/sgds-drawer.cjs.js +4 -3
- package/react/components/Drawer/sgds-drawer.cjs.js.map +1 -1
- package/react/components/Drawer/sgds-drawer.js +5 -4
- package/react/components/Drawer/sgds-drawer.js.map +1 -1
- package/react/components/Dropdown/sgds-dropdown-item.cjs.js +7 -0
- package/react/components/Dropdown/sgds-dropdown-item.cjs.js.map +1 -1
- package/react/components/Dropdown/sgds-dropdown-item.js +7 -0
- package/react/components/Dropdown/sgds-dropdown-item.js.map +1 -1
- package/react/components/Mainnav/sgds-mainnav-dropdown.cjs.js +6 -0
- package/react/components/Mainnav/sgds-mainnav-dropdown.cjs.js.map +1 -1
- package/react/components/Mainnav/sgds-mainnav-dropdown.js +6 -0
- package/react/components/Mainnav/sgds-mainnav-dropdown.js.map +1 -1
- package/react/components/Radio/sgds-radio-group.cjs.js +9 -0
- package/react/components/Radio/sgds-radio-group.cjs.js.map +1 -1
- package/react/components/Radio/sgds-radio-group.js +9 -0
- package/react/components/Radio/sgds-radio-group.js.map +1 -1
- package/react/components/Select/sgds-select.cjs.js +9 -0
- package/react/components/Select/sgds-select.cjs.js.map +1 -1
- package/react/components/Select/sgds-select.js +10 -1
- package/react/components/Select/sgds-select.js.map +1 -1
- package/react/index.cjs.js +4 -4
- package/react/index.d.ts +1 -1
- package/react/index.js +1 -1
- package/react/radio-group/index.cjs.js +3 -1
- package/react/radio-group/index.cjs.js.map +1 -1
- package/react/radio-group/index.js +3 -1
- package/react/radio-group/index.js.map +1 -1
- package/react/select/index.cjs.js +2 -0
- package/react/select/index.cjs.js.map +1 -1
- package/react/select/index.js +2 -0
- package/react/select/index.js.map +1 -1
- package/react/utils/validatorMixin.cjs.js +9 -11
- package/react/utils/validatorMixin.cjs.js.map +1 -1
- package/react/utils/validatorMixin.js +9 -11
- package/react/utils/validatorMixin.js.map +1 -1
- package/types/react.d.ts +60 -31
- package/utils/validatorMixin.js +9 -11
- package/utils/validatorMixin.js.map +1 -1
package/react/index.cjs.js
CHANGED
|
@@ -7,8 +7,8 @@ var index = require('./accordion-item/index.cjs.js');
|
|
|
7
7
|
var index$1 = require('./accordion/index.cjs.js');
|
|
8
8
|
var index$2 = require('./alert-link/index.cjs.js');
|
|
9
9
|
var index$3 = require('./alert/index.cjs.js');
|
|
10
|
-
var index$4 = require('./
|
|
11
|
-
var index$5 = require('./
|
|
10
|
+
var index$4 = require('./badge/index.cjs.js');
|
|
11
|
+
var index$5 = require('./button/index.cjs.js');
|
|
12
12
|
var index$6 = require('./card/index.cjs.js');
|
|
13
13
|
var index$7 = require('./breadcrumb-item/index.cjs.js');
|
|
14
14
|
var index$8 = require('./breadcrumb/index.cjs.js');
|
|
@@ -83,8 +83,8 @@ exports.SgdsAccordionItem = index["default"];
|
|
|
83
83
|
exports.SgdsAccordion = index$1["default"];
|
|
84
84
|
exports.SgdsAlertLink = index$2["default"];
|
|
85
85
|
exports.SgdsAlert = index$3["default"];
|
|
86
|
-
exports.
|
|
87
|
-
exports.
|
|
86
|
+
exports.SgdsBadge = index$4["default"];
|
|
87
|
+
exports.SgdsButton = index$5["default"];
|
|
88
88
|
exports.SgdsCard = index$6["default"];
|
|
89
89
|
exports.SgdsBreadcrumbItem = index$7["default"];
|
|
90
90
|
exports.SgdsBreadcrumb = index$8["default"];
|
package/react/index.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ export { default as SgdsAccordionItem } from './accordion-item';
|
|
|
2
2
|
export { default as SgdsAccordion } from './accordion';
|
|
3
3
|
export { default as SgdsAlertLink } from './alert-link';
|
|
4
4
|
export { default as SgdsAlert } from './alert';
|
|
5
|
-
export { default as SgdsButton } from './button';
|
|
6
5
|
export { default as SgdsBadge } from './badge';
|
|
6
|
+
export { default as SgdsButton } from './button';
|
|
7
7
|
export { default as SgdsCard } from './card';
|
|
8
8
|
export { default as SgdsBreadcrumbItem } from './breadcrumb-item';
|
|
9
9
|
export { default as SgdsBreadcrumb } from './breadcrumb';
|
package/react/index.js
CHANGED
|
@@ -3,8 +3,8 @@ export { default as SgdsAccordionItem } from './accordion-item/index.js';
|
|
|
3
3
|
export { default as SgdsAccordion } from './accordion/index.js';
|
|
4
4
|
export { default as SgdsAlertLink } from './alert-link/index.js';
|
|
5
5
|
export { default as SgdsAlert } from './alert/index.js';
|
|
6
|
-
export { default as SgdsButton } from './button/index.js';
|
|
7
6
|
export { default as SgdsBadge } from './badge/index.js';
|
|
7
|
+
export { default as SgdsButton } from './button/index.js';
|
|
8
8
|
export { default as SgdsCard } from './card/index.js';
|
|
9
9
|
export { default as SgdsBreadcrumbItem } from './breadcrumb-item/index.js';
|
|
10
10
|
export { default as SgdsBreadcrumb } from './breadcrumb/index.js';
|
|
@@ -34,7 +34,9 @@ var index = react.createComponent({
|
|
|
34
34
|
tagName: "sgds-radio-group",
|
|
35
35
|
elementClass: sgdsRadioGroup.SgdsRadioGroup,
|
|
36
36
|
events: {
|
|
37
|
-
onSgdsChange: "sgds-change"
|
|
37
|
+
onSgdsChange: "sgds-change",
|
|
38
|
+
onSgdsInvalid: "sgds-invalid",
|
|
39
|
+
onSgdsValid: "sgds-valid"
|
|
38
40
|
}
|
|
39
41
|
});
|
|
40
42
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../../src/react/radio-group/index.ts"],"sourcesContent":["import * as React from \"react\";\nimport { createComponent } from \"@lit/react\";\nimport Component from \"../../components/Radio/sgds-radio-group\";\nimport { register } from \"../../utils/ce-registry\";\n\nregister(\"sgds-radio-group\", Component);\n\nexport default createComponent({\n react: React,\n tagName: \"sgds-radio-group\",\n elementClass: Component,\n events: {\n onSgdsChange: \"sgds-change\"\n }\n});\n"],"names":["register","Component","createComponent","React"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKAA,mBAAQ,CAAC,kBAAkB,EAAEC,6BAAS,CAAC,CAAC;AAExC,YAAeC,qBAAe,CAAC;AAC7B,IAAA,KAAK,EAAEC,gBAAK;AACZ,IAAA,OAAO,EAAE,kBAAkB;AAC3B,IAAA,YAAY,EAAEF,6BAAS;AACvB,IAAA,MAAM,EAAE;AACN,QAAA,YAAY,EAAE,aAAa;
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../src/react/radio-group/index.ts"],"sourcesContent":["import * as React from \"react\";\nimport { createComponent } from \"@lit/react\";\nimport Component from \"../../components/Radio/sgds-radio-group\";\nimport { register } from \"../../utils/ce-registry\";\n\nregister(\"sgds-radio-group\", Component);\n\nexport default createComponent({\n react: React,\n tagName: \"sgds-radio-group\",\n elementClass: Component,\n events: {\n onSgdsChange: \"sgds-change\",\n onSgdsInvalid: \"sgds-invalid\",\n onSgdsValid: \"sgds-valid\"\n }\n});\n"],"names":["register","Component","createComponent","React"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKAA,mBAAQ,CAAC,kBAAkB,EAAEC,6BAAS,CAAC,CAAC;AAExC,YAAeC,qBAAe,CAAC;AAC7B,IAAA,KAAK,EAAEC,gBAAK;AACZ,IAAA,OAAO,EAAE,kBAAkB;AAC3B,IAAA,YAAY,EAAEF,6BAAS;AACvB,IAAA,MAAM,EAAE;AACN,QAAA,YAAY,EAAE,aAAa;AAC3B,QAAA,aAAa,EAAE,cAAc;AAC7B,QAAA,WAAW,EAAE,YAAY;AAC1B,KAAA;AACF,CAAA,CAAC;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/react/radio-group/index.ts"],"sourcesContent":["import * as React from \"react\";\nimport { createComponent } from \"@lit/react\";\nimport Component from \"../../components/Radio/sgds-radio-group\";\nimport { register } from \"../../utils/ce-registry\";\n\nregister(\"sgds-radio-group\", Component);\n\nexport default createComponent({\n react: React,\n tagName: \"sgds-radio-group\",\n elementClass: Component,\n events: {\n onSgdsChange: \"sgds-change\"\n }\n});\n"],"names":["Component"],"mappings":";;;;;;AAKA,QAAQ,CAAC,kBAAkB,EAAEA,cAAS,CAAC,CAAC;AAExC,YAAe,eAAe,CAAC;AAC7B,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,OAAO,EAAE,kBAAkB;AAC3B,IAAA,YAAY,EAAEA,cAAS;AACvB,IAAA,MAAM,EAAE;AACN,QAAA,YAAY,EAAE,aAAa;
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/react/radio-group/index.ts"],"sourcesContent":["import * as React from \"react\";\nimport { createComponent } from \"@lit/react\";\nimport Component from \"../../components/Radio/sgds-radio-group\";\nimport { register } from \"../../utils/ce-registry\";\n\nregister(\"sgds-radio-group\", Component);\n\nexport default createComponent({\n react: React,\n tagName: \"sgds-radio-group\",\n elementClass: Component,\n events: {\n onSgdsChange: \"sgds-change\",\n onSgdsInvalid: \"sgds-invalid\",\n onSgdsValid: \"sgds-valid\"\n }\n});\n"],"names":["Component"],"mappings":";;;;;;AAKA,QAAQ,CAAC,kBAAkB,EAAEA,cAAS,CAAC,CAAC;AAExC,YAAe,eAAe,CAAC;AAC7B,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,OAAO,EAAE,kBAAkB;AAC3B,IAAA,YAAY,EAAEA,cAAS;AACvB,IAAA,MAAM,EAAE;AACN,QAAA,YAAY,EAAE,aAAa;AAC3B,QAAA,aAAa,EAAE,cAAc;AAC7B,QAAA,WAAW,EAAE,YAAY;AAC1B,KAAA;AACF,CAAA,CAAC;;;;"}
|
|
@@ -38,6 +38,8 @@ var index = react.createComponent({
|
|
|
38
38
|
onSgdsChange: "sgds-change",
|
|
39
39
|
onSgdsFocus: "sgds-focus",
|
|
40
40
|
onSgdsBlur: "sgds-blur",
|
|
41
|
+
onSgdsInvalid: "sgds-invalid",
|
|
42
|
+
onSgdsValid: "sgds-valid",
|
|
41
43
|
onSgdsShow: "sgds-show",
|
|
42
44
|
onSgdsAfterShow: "sgds-after-show",
|
|
43
45
|
onSgdsHide: "sgds-hide",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../../src/react/select/index.ts"],"sourcesContent":["import * as React from \"react\";\nimport { createComponent } from \"@lit/react\";\nimport Component from \"../../components/Select/sgds-select\";\nimport { register } from \"../../utils/ce-registry\";\n\nregister(\"sgds-select\", Component);\n\nexport default createComponent({\n react: React,\n tagName: \"sgds-select\",\n elementClass: Component,\n events: {\n onSgdsSelect: \"sgds-select\",\n onSgdsChange: \"sgds-change\",\n onSgdsFocus: \"sgds-focus\",\n onSgdsBlur: \"sgds-blur\",\n onSgdsShow: \"sgds-show\",\n onSgdsAfterShow: \"sgds-after-show\",\n onSgdsHide: \"sgds-hide\",\n onSgdsAfterHide: \"sgds-after-hide\"\n }\n});\n"],"names":["register","Component","createComponent","React"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKAA,mBAAQ,CAAC,aAAa,EAAEC,qBAAS,CAAC,CAAC;AAEnC,YAAeC,qBAAe,CAAC;AAC7B,IAAA,KAAK,EAAEC,gBAAK;AACZ,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,YAAY,EAAEF,qBAAS;AACvB,IAAA,MAAM,EAAE;AACN,QAAA,YAAY,EAAE,aAAa;AAC3B,QAAA,YAAY,EAAE,aAAa;AAC3B,QAAA,WAAW,EAAE,YAAY;AACzB,QAAA,UAAU,EAAE,WAAW;AACvB,QAAA,UAAU,EAAE,WAAW;AACvB,QAAA,eAAe,EAAE,iBAAiB;AAClC,QAAA,UAAU,EAAE,WAAW;AACvB,QAAA,eAAe,EAAE,iBAAiB;AACnC,KAAA;AACF,CAAA,CAAC;;;;"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../src/react/select/index.ts"],"sourcesContent":["import * as React from \"react\";\nimport { createComponent } from \"@lit/react\";\nimport Component from \"../../components/Select/sgds-select\";\nimport { register } from \"../../utils/ce-registry\";\n\nregister(\"sgds-select\", Component);\n\nexport default createComponent({\n react: React,\n tagName: \"sgds-select\",\n elementClass: Component,\n events: {\n onSgdsSelect: \"sgds-select\",\n onSgdsChange: \"sgds-change\",\n onSgdsFocus: \"sgds-focus\",\n onSgdsBlur: \"sgds-blur\",\n onSgdsInvalid: \"sgds-invalid\",\n onSgdsValid: \"sgds-valid\",\n onSgdsShow: \"sgds-show\",\n onSgdsAfterShow: \"sgds-after-show\",\n onSgdsHide: \"sgds-hide\",\n onSgdsAfterHide: \"sgds-after-hide\"\n }\n});\n"],"names":["register","Component","createComponent","React"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKAA,mBAAQ,CAAC,aAAa,EAAEC,qBAAS,CAAC,CAAC;AAEnC,YAAeC,qBAAe,CAAC;AAC7B,IAAA,KAAK,EAAEC,gBAAK;AACZ,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,YAAY,EAAEF,qBAAS;AACvB,IAAA,MAAM,EAAE;AACN,QAAA,YAAY,EAAE,aAAa;AAC3B,QAAA,YAAY,EAAE,aAAa;AAC3B,QAAA,WAAW,EAAE,YAAY;AACzB,QAAA,UAAU,EAAE,WAAW;AACvB,QAAA,aAAa,EAAE,cAAc;AAC7B,QAAA,WAAW,EAAE,YAAY;AACzB,QAAA,UAAU,EAAE,WAAW;AACvB,QAAA,eAAe,EAAE,iBAAiB;AAClC,QAAA,UAAU,EAAE,WAAW;AACvB,QAAA,eAAe,EAAE,iBAAiB;AACnC,KAAA;AACF,CAAA,CAAC;;;;"}
|
package/react/select/index.js
CHANGED
|
@@ -14,6 +14,8 @@ var index = createComponent({
|
|
|
14
14
|
onSgdsChange: "sgds-change",
|
|
15
15
|
onSgdsFocus: "sgds-focus",
|
|
16
16
|
onSgdsBlur: "sgds-blur",
|
|
17
|
+
onSgdsInvalid: "sgds-invalid",
|
|
18
|
+
onSgdsValid: "sgds-valid",
|
|
17
19
|
onSgdsShow: "sgds-show",
|
|
18
20
|
onSgdsAfterShow: "sgds-after-show",
|
|
19
21
|
onSgdsHide: "sgds-hide",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/react/select/index.ts"],"sourcesContent":["import * as React from \"react\";\nimport { createComponent } from \"@lit/react\";\nimport Component from \"../../components/Select/sgds-select\";\nimport { register } from \"../../utils/ce-registry\";\n\nregister(\"sgds-select\", Component);\n\nexport default createComponent({\n react: React,\n tagName: \"sgds-select\",\n elementClass: Component,\n events: {\n onSgdsSelect: \"sgds-select\",\n onSgdsChange: \"sgds-change\",\n onSgdsFocus: \"sgds-focus\",\n onSgdsBlur: \"sgds-blur\",\n onSgdsShow: \"sgds-show\",\n onSgdsAfterShow: \"sgds-after-show\",\n onSgdsHide: \"sgds-hide\",\n onSgdsAfterHide: \"sgds-after-hide\"\n }\n});\n"],"names":["Component"],"mappings":";;;;;;AAKA,QAAQ,CAAC,aAAa,EAAEA,UAAS,CAAC,CAAC;AAEnC,YAAe,eAAe,CAAC;AAC7B,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,YAAY,EAAEA,UAAS;AACvB,IAAA,MAAM,EAAE;AACN,QAAA,YAAY,EAAE,aAAa;AAC3B,QAAA,YAAY,EAAE,aAAa;AAC3B,QAAA,WAAW,EAAE,YAAY;AACzB,QAAA,UAAU,EAAE,WAAW;AACvB,QAAA,UAAU,EAAE,WAAW;AACvB,QAAA,eAAe,EAAE,iBAAiB;AAClC,QAAA,UAAU,EAAE,WAAW;AACvB,QAAA,eAAe,EAAE,iBAAiB;AACnC,KAAA;AACF,CAAA,CAAC;;;;"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/react/select/index.ts"],"sourcesContent":["import * as React from \"react\";\nimport { createComponent } from \"@lit/react\";\nimport Component from \"../../components/Select/sgds-select\";\nimport { register } from \"../../utils/ce-registry\";\n\nregister(\"sgds-select\", Component);\n\nexport default createComponent({\n react: React,\n tagName: \"sgds-select\",\n elementClass: Component,\n events: {\n onSgdsSelect: \"sgds-select\",\n onSgdsChange: \"sgds-change\",\n onSgdsFocus: \"sgds-focus\",\n onSgdsBlur: \"sgds-blur\",\n onSgdsInvalid: \"sgds-invalid\",\n onSgdsValid: \"sgds-valid\",\n onSgdsShow: \"sgds-show\",\n onSgdsAfterShow: \"sgds-after-show\",\n onSgdsHide: \"sgds-hide\",\n onSgdsAfterHide: \"sgds-after-hide\"\n }\n});\n"],"names":["Component"],"mappings":";;;;;;AAKA,QAAQ,CAAC,aAAa,EAAEA,UAAS,CAAC,CAAC;AAEnC,YAAe,eAAe,CAAC;AAC7B,IAAA,KAAK,EAAE,KAAK;AACZ,IAAA,OAAO,EAAE,aAAa;AACtB,IAAA,YAAY,EAAEA,UAAS;AACvB,IAAA,MAAM,EAAE;AACN,QAAA,YAAY,EAAE,aAAa;AAC3B,QAAA,YAAY,EAAE,aAAa;AAC3B,QAAA,WAAW,EAAE,YAAY;AACzB,QAAA,UAAU,EAAE,WAAW;AACvB,QAAA,aAAa,EAAE,cAAc;AAC7B,QAAA,WAAW,EAAE,YAAY;AACzB,QAAA,UAAU,EAAE,WAAW;AACvB,QAAA,eAAe,EAAE,iBAAiB;AAClC,QAAA,UAAU,EAAE,WAAW;AACvB,QAAA,eAAe,EAAE,iBAAiB;AACnC,KAAA;AACF,CAAA,CAAC;;;;"}
|
|
@@ -24,9 +24,7 @@ const SgdsFormValidatorMixin = (superClass) => {
|
|
|
24
24
|
connectedCallback() {
|
|
25
25
|
var _a;
|
|
26
26
|
super.connectedCallback();
|
|
27
|
-
|
|
28
|
-
return;
|
|
29
|
-
/** Idempotency guarantee */
|
|
27
|
+
/** Idempotency guarantee — always create so reset can clear validity even with noValidate */
|
|
30
28
|
(_a = this.inputValidationController) !== null && _a !== void 0 ? _a : (this.inputValidationController = new inputValidationController.InputValidationController(this));
|
|
31
29
|
}
|
|
32
30
|
async firstUpdated(changedProperties) {
|
|
@@ -83,19 +81,19 @@ const SgdsFormValidatorMixin = (superClass) => {
|
|
|
83
81
|
}
|
|
84
82
|
/**
|
|
85
83
|
* During form resetting,
|
|
86
|
-
* 1. ValidityState is reset
|
|
87
|
-
* 2. invalid reactive prop is updated after the reset
|
|
88
|
-
* 3.
|
|
89
|
-
*
|
|
90
|
-
*
|
|
84
|
+
* 1. ValidityState is reset (always, regardless of noValidate)
|
|
85
|
+
* 2. invalid reactive prop is updated after the reset (always)
|
|
86
|
+
* 3. Reset touched state to false for a pristine form (always)
|
|
87
|
+
* 4. Revalidates the ValidityState (but do not update invalid prop)
|
|
88
|
+
* to prepare for the next validity check (skipped when noValidate)
|
|
91
89
|
*/
|
|
92
90
|
_mixinResetValidity(input) {
|
|
93
|
-
if (this._mixinShouldSkipSgdsValidation())
|
|
94
|
-
return;
|
|
95
91
|
this.inputValidationController.resetValidity();
|
|
96
92
|
this.inputValidationController.updateInvalidState();
|
|
97
|
-
this.inputValidationController.validateInput(input);
|
|
98
93
|
this._isTouched ? (this._isTouched = false) : null;
|
|
94
|
+
if (this._mixinShouldSkipSgdsValidation())
|
|
95
|
+
return;
|
|
96
|
+
this.inputValidationController.validateInput(input);
|
|
99
97
|
}
|
|
100
98
|
_mixinValidate(input) {
|
|
101
99
|
if (this._mixinShouldSkipSgdsValidation())
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validatorMixin.cjs.js","sources":["../../../src/utils/validatorMixin.ts"],"sourcesContent":["import { LitElement, PropertyValueMap } from \"lit\";\nimport { queryAsync } from \"lit/decorators.js\";\nimport { SgdsInput } from \"../components\";\nimport { InputValidationController } from \"./inputValidationController\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor<T> = new (...args: any[]) => T;\n\n/**\n * @summary The FormValidationMixin used by the form components\n * @param superClass\n * @returns\n */\nexport const SgdsFormValidatorMixin = <T extends Constructor<LitElement>>(superClass: T) => {\n class ToBeValidatedElement extends superClass {\n static formAssociated = true;\n inputValidationController: InputValidationController;\n input: HTMLInputElement | SgdsInput | HTMLTextAreaElement;\n private _isTouched = false;\n private _internals: ElementInternals;\n @queryAsync(\"sgds-input\") sgdsInput: Promise<SgdsInput>;\n @queryAsync(\"sgds-datepicker-input\") sgdsDatepickerInput: Promise<SgdsInput>;\n\n // TypeScript requires mixin constructors to have rest parameter of type any[]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n super(...args);\n this._internals = this.attachInternals();\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n
|
|
1
|
+
{"version":3,"file":"validatorMixin.cjs.js","sources":["../../../src/utils/validatorMixin.ts"],"sourcesContent":["import { LitElement, PropertyValueMap } from \"lit\";\nimport { queryAsync } from \"lit/decorators.js\";\nimport { SgdsInput } from \"../components\";\nimport { InputValidationController } from \"./inputValidationController\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor<T> = new (...args: any[]) => T;\n\n/**\n * @summary The FormValidationMixin used by the form components\n * @param superClass\n * @returns\n */\nexport const SgdsFormValidatorMixin = <T extends Constructor<LitElement>>(superClass: T) => {\n class ToBeValidatedElement extends superClass {\n static formAssociated = true;\n inputValidationController: InputValidationController;\n input: HTMLInputElement | SgdsInput | HTMLTextAreaElement;\n private _isTouched = false;\n private _internals: ElementInternals;\n @queryAsync(\"sgds-input\") sgdsInput: Promise<SgdsInput>;\n @queryAsync(\"sgds-datepicker-input\") sgdsDatepickerInput: Promise<SgdsInput>;\n\n // TypeScript requires mixin constructors to have rest parameter of type any[]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n super(...args);\n this._internals = this.attachInternals();\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n /** Idempotency guarantee — always create so reset can clear validity even with noValidate */\n this.inputValidationController ??= new InputValidationController(this);\n }\n async firstUpdated(changedProperties: PropertyValueMap<this>) {\n super.firstUpdated(changedProperties);\n\n /* Either input or sgds-input. For example, quantity-toggle uses sgds-input */\n this.input =\n this.shadowRoot.querySelector(\"input\") ||\n (await this.sgdsInput) ||\n this.shadowRoot.querySelector(\"textarea\") ||\n (await this.sgdsDatepickerInput);\n\n this._mixinSetFormValue();\n\n if (this._mixinShouldSkipSgdsValidation()) return;\n\n this._mixinValidate(this.input);\n }\n\n /**\n * Native lifecycle of Form-Associated Custom Element Callbacks\n */\n formResetCallback() {\n if (this._mixinResetFormControl) {\n this._mixinResetFormControl();\n } else {\n this.value = this.defaultValue;\n this._mixinResetValidity(this.input);\n }\n this._mixinSetFormValue();\n }\n /**\n *\n * Methods use by classes using this mixin\n */\n\n /**\n * OnChange of form component\n * 1. Make value of control accessible via FormData\n * 2. Run change handler\n */\n _mixinHandleChange(e: Event): void {\n this._mixinSetFormValue();\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.handleChange(e);\n }\n /**\n * OnChange of form component\n * 1. Make value of control accessible via FormData\n * 2. Run input handler\n */\n _mixinHandleInputChange(e: Event): void {\n this._mixinSetFormValue();\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.handleInput(e);\n }\n /**\n * During form resetting,\n * 1. ValidityState is reset (always, regardless of noValidate)\n * 2. invalid reactive prop is updated after the reset (always)\n * 3. Reset touched state to false for a pristine form (always)\n * 4. Revalidates the ValidityState (but do not update invalid prop)\n * to prepare for the next validity check (skipped when noValidate)\n */\n _mixinResetValidity(input: HTMLInputElement | SgdsInput | HTMLTextAreaElement) {\n this.inputValidationController.resetValidity();\n this.inputValidationController.updateInvalidState();\n this._isTouched ? (this._isTouched = false) : null;\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.validateInput(input);\n }\n\n _mixinValidate(input: HTMLInputElement | SgdsInput | HTMLTextAreaElement) {\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.validateInput(input);\n }\n _mixinSetFormValue() {\n const value = this.value as string | FormData | File;\n this._internals.setFormValue(value);\n }\n _mixinCheckValidity(): boolean {\n if (this._mixinShouldSkipSgdsValidation()) return true;\n return this.inputValidationController.checkValidity();\n }\n _mixinReportValidity(): boolean {\n if (this._mixinShouldSkipSgdsValidation()) return true;\n return this.inputValidationController.reportValidity();\n }\n _mixinGetValidity(): ValidityState {\n return this._internals.validity;\n }\n _mixinGetValidationMessage(): string {\n return this._internals.validationMessage;\n }\n _mixinSetValidity(flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement): void {\n if (this._mixinShouldSkipSgdsValidation()) return;\n return this.inputValidationController.setValidity(flags, message, anchor);\n }\n // Only check for noValidate prop\n _mixinShouldSkipSgdsValidation() {\n const form = this.closest(\"form\");\n\n return form?.noValidate || this.noValidate;\n }\n\n /** DECLARED INSTANCE METHODS AND PROPERTIES*/\n\n /**\n * Resets a form control to its initial state\n */\n declare _mixinResetFormControl: () => void;\n declare value: string;\n declare defaultValue: string;\n declare defaultChecked: boolean;\n declare noValidate: boolean;\n }\n\n return ToBeValidatedElement as Constructor<ToBeValidatedElementInterface> & T;\n};\n\nexport declare class ToBeValidatedElementInterface {\n inputValidationController: InputValidationController;\n input: HTMLInputElement;\n _mixinHandleChange(e: Event): void;\n _mixinHandleInputChange(e: Event): void;\n _mixinResetValidity(input: HTMLInputElement | SgdsInput): void;\n _mixinValidate(input: HTMLInputElement | SgdsInput): void;\n _mixinSetFormValue(): void;\n _mixinCheckValidity(): boolean;\n _mixinReportValidity(): boolean;\n _mixinSetValidity(flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement): void;\n _mixinGetValidity(): ValidityState;\n _mixinGetValidationMessage(): string;\n _mixinShouldSkipSgdsValidation(): boolean;\n}\n"],"names":["InputValidationController","__decorate","queryAsync"],"mappings":"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"}
|
|
@@ -20,9 +20,7 @@ const SgdsFormValidatorMixin = (superClass) => {
|
|
|
20
20
|
connectedCallback() {
|
|
21
21
|
var _a;
|
|
22
22
|
super.connectedCallback();
|
|
23
|
-
|
|
24
|
-
return;
|
|
25
|
-
/** Idempotency guarantee */
|
|
23
|
+
/** Idempotency guarantee — always create so reset can clear validity even with noValidate */
|
|
26
24
|
(_a = this.inputValidationController) !== null && _a !== void 0 ? _a : (this.inputValidationController = new InputValidationController(this));
|
|
27
25
|
}
|
|
28
26
|
async firstUpdated(changedProperties) {
|
|
@@ -79,19 +77,19 @@ const SgdsFormValidatorMixin = (superClass) => {
|
|
|
79
77
|
}
|
|
80
78
|
/**
|
|
81
79
|
* During form resetting,
|
|
82
|
-
* 1. ValidityState is reset
|
|
83
|
-
* 2. invalid reactive prop is updated after the reset
|
|
84
|
-
* 3.
|
|
85
|
-
*
|
|
86
|
-
*
|
|
80
|
+
* 1. ValidityState is reset (always, regardless of noValidate)
|
|
81
|
+
* 2. invalid reactive prop is updated after the reset (always)
|
|
82
|
+
* 3. Reset touched state to false for a pristine form (always)
|
|
83
|
+
* 4. Revalidates the ValidityState (but do not update invalid prop)
|
|
84
|
+
* to prepare for the next validity check (skipped when noValidate)
|
|
87
85
|
*/
|
|
88
86
|
_mixinResetValidity(input) {
|
|
89
|
-
if (this._mixinShouldSkipSgdsValidation())
|
|
90
|
-
return;
|
|
91
87
|
this.inputValidationController.resetValidity();
|
|
92
88
|
this.inputValidationController.updateInvalidState();
|
|
93
|
-
this.inputValidationController.validateInput(input);
|
|
94
89
|
this._isTouched ? (this._isTouched = false) : null;
|
|
90
|
+
if (this._mixinShouldSkipSgdsValidation())
|
|
91
|
+
return;
|
|
92
|
+
this.inputValidationController.validateInput(input);
|
|
95
93
|
}
|
|
96
94
|
_mixinValidate(input) {
|
|
97
95
|
if (this._mixinShouldSkipSgdsValidation())
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validatorMixin.js","sources":["../../../src/utils/validatorMixin.ts"],"sourcesContent":["import { LitElement, PropertyValueMap } from \"lit\";\nimport { queryAsync } from \"lit/decorators.js\";\nimport { SgdsInput } from \"../components\";\nimport { InputValidationController } from \"./inputValidationController\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor<T> = new (...args: any[]) => T;\n\n/**\n * @summary The FormValidationMixin used by the form components\n * @param superClass\n * @returns\n */\nexport const SgdsFormValidatorMixin = <T extends Constructor<LitElement>>(superClass: T) => {\n class ToBeValidatedElement extends superClass {\n static formAssociated = true;\n inputValidationController: InputValidationController;\n input: HTMLInputElement | SgdsInput | HTMLTextAreaElement;\n private _isTouched = false;\n private _internals: ElementInternals;\n @queryAsync(\"sgds-input\") sgdsInput: Promise<SgdsInput>;\n @queryAsync(\"sgds-datepicker-input\") sgdsDatepickerInput: Promise<SgdsInput>;\n\n // TypeScript requires mixin constructors to have rest parameter of type any[]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n super(...args);\n this._internals = this.attachInternals();\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n
|
|
1
|
+
{"version":3,"file":"validatorMixin.js","sources":["../../../src/utils/validatorMixin.ts"],"sourcesContent":["import { LitElement, PropertyValueMap } from \"lit\";\nimport { queryAsync } from \"lit/decorators.js\";\nimport { SgdsInput } from \"../components\";\nimport { InputValidationController } from \"./inputValidationController\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor<T> = new (...args: any[]) => T;\n\n/**\n * @summary The FormValidationMixin used by the form components\n * @param superClass\n * @returns\n */\nexport const SgdsFormValidatorMixin = <T extends Constructor<LitElement>>(superClass: T) => {\n class ToBeValidatedElement extends superClass {\n static formAssociated = true;\n inputValidationController: InputValidationController;\n input: HTMLInputElement | SgdsInput | HTMLTextAreaElement;\n private _isTouched = false;\n private _internals: ElementInternals;\n @queryAsync(\"sgds-input\") sgdsInput: Promise<SgdsInput>;\n @queryAsync(\"sgds-datepicker-input\") sgdsDatepickerInput: Promise<SgdsInput>;\n\n // TypeScript requires mixin constructors to have rest parameter of type any[]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n super(...args);\n this._internals = this.attachInternals();\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n /** Idempotency guarantee — always create so reset can clear validity even with noValidate */\n this.inputValidationController ??= new InputValidationController(this);\n }\n async firstUpdated(changedProperties: PropertyValueMap<this>) {\n super.firstUpdated(changedProperties);\n\n /* Either input or sgds-input. For example, quantity-toggle uses sgds-input */\n this.input =\n this.shadowRoot.querySelector(\"input\") ||\n (await this.sgdsInput) ||\n this.shadowRoot.querySelector(\"textarea\") ||\n (await this.sgdsDatepickerInput);\n\n this._mixinSetFormValue();\n\n if (this._mixinShouldSkipSgdsValidation()) return;\n\n this._mixinValidate(this.input);\n }\n\n /**\n * Native lifecycle of Form-Associated Custom Element Callbacks\n */\n formResetCallback() {\n if (this._mixinResetFormControl) {\n this._mixinResetFormControl();\n } else {\n this.value = this.defaultValue;\n this._mixinResetValidity(this.input);\n }\n this._mixinSetFormValue();\n }\n /**\n *\n * Methods use by classes using this mixin\n */\n\n /**\n * OnChange of form component\n * 1. Make value of control accessible via FormData\n * 2. Run change handler\n */\n _mixinHandleChange(e: Event): void {\n this._mixinSetFormValue();\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.handleChange(e);\n }\n /**\n * OnChange of form component\n * 1. Make value of control accessible via FormData\n * 2. Run input handler\n */\n _mixinHandleInputChange(e: Event): void {\n this._mixinSetFormValue();\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.handleInput(e);\n }\n /**\n * During form resetting,\n * 1. ValidityState is reset (always, regardless of noValidate)\n * 2. invalid reactive prop is updated after the reset (always)\n * 3. Reset touched state to false for a pristine form (always)\n * 4. Revalidates the ValidityState (but do not update invalid prop)\n * to prepare for the next validity check (skipped when noValidate)\n */\n _mixinResetValidity(input: HTMLInputElement | SgdsInput | HTMLTextAreaElement) {\n this.inputValidationController.resetValidity();\n this.inputValidationController.updateInvalidState();\n this._isTouched ? (this._isTouched = false) : null;\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.validateInput(input);\n }\n\n _mixinValidate(input: HTMLInputElement | SgdsInput | HTMLTextAreaElement) {\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.validateInput(input);\n }\n _mixinSetFormValue() {\n const value = this.value as string | FormData | File;\n this._internals.setFormValue(value);\n }\n _mixinCheckValidity(): boolean {\n if (this._mixinShouldSkipSgdsValidation()) return true;\n return this.inputValidationController.checkValidity();\n }\n _mixinReportValidity(): boolean {\n if (this._mixinShouldSkipSgdsValidation()) return true;\n return this.inputValidationController.reportValidity();\n }\n _mixinGetValidity(): ValidityState {\n return this._internals.validity;\n }\n _mixinGetValidationMessage(): string {\n return this._internals.validationMessage;\n }\n _mixinSetValidity(flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement): void {\n if (this._mixinShouldSkipSgdsValidation()) return;\n return this.inputValidationController.setValidity(flags, message, anchor);\n }\n // Only check for noValidate prop\n _mixinShouldSkipSgdsValidation() {\n const form = this.closest(\"form\");\n\n return form?.noValidate || this.noValidate;\n }\n\n /** DECLARED INSTANCE METHODS AND PROPERTIES*/\n\n /**\n * Resets a form control to its initial state\n */\n declare _mixinResetFormControl: () => void;\n declare value: string;\n declare defaultValue: string;\n declare defaultChecked: boolean;\n declare noValidate: boolean;\n }\n\n return ToBeValidatedElement as Constructor<ToBeValidatedElementInterface> & T;\n};\n\nexport declare class ToBeValidatedElementInterface {\n inputValidationController: InputValidationController;\n input: HTMLInputElement;\n _mixinHandleChange(e: Event): void;\n _mixinHandleInputChange(e: Event): void;\n _mixinResetValidity(input: HTMLInputElement | SgdsInput): void;\n _mixinValidate(input: HTMLInputElement | SgdsInput): void;\n _mixinSetFormValue(): void;\n _mixinCheckValidity(): boolean;\n _mixinReportValidity(): boolean;\n _mixinSetValidity(flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement): void;\n _mixinGetValidity(): ValidityState;\n _mixinGetValidationMessage(): string;\n _mixinShouldSkipSgdsValidation(): boolean;\n}\n"],"names":[],"mappings":"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"}
|
package/types/react.d.ts
CHANGED
|
@@ -155,6 +155,32 @@ export interface SgdsAlertProps extends SgdsBaseProps {
|
|
|
155
155
|
onSgdsHide?: SgdsEventHandler;
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
+
// ── Badge ─────────────────────────────────────────────────────────────
|
|
159
|
+
|
|
160
|
+
export interface SgdsBadgeProps extends SgdsBaseProps {
|
|
161
|
+
/** Controls the appearance of the dismissible badge. This prop only applies when dismissible is true */
|
|
162
|
+
show?: boolean;
|
|
163
|
+
/** One or more badge variant combinations.
|
|
164
|
+
Variants include: `primary`, `accent`, `success`, `danger`, `warning`, `cyan`, `purple`, `neutral`, `white`, `info`.
|
|
165
|
+
|
|
166
|
+
(@deprecated) The `info` variant is deprecated. Use `primary` instead. */
|
|
167
|
+
variant?: "primary" | "accent" | "success" | "danger" | "warning" | "cyan" | "purple" | "neutral" | "white" | "info";
|
|
168
|
+
/** Manually set the outlined state to false */
|
|
169
|
+
outlined?: boolean;
|
|
170
|
+
/** Manually set the dismissible state of the button to `false` */
|
|
171
|
+
dismissible?: boolean;
|
|
172
|
+
/** Manually enable full width */
|
|
173
|
+
fullWidth?: boolean;
|
|
174
|
+
"onsgds-show"?: SgdsEventHandler;
|
|
175
|
+
onSgdsShow?: SgdsEventHandler;
|
|
176
|
+
"onsgds-hide"?: SgdsEventHandler;
|
|
177
|
+
onSgdsHide?: SgdsEventHandler;
|
|
178
|
+
"onsgds-after-show"?: SgdsEventHandler;
|
|
179
|
+
onSgdsAfterShow?: SgdsEventHandler;
|
|
180
|
+
"onsgds-after-hide"?: SgdsEventHandler;
|
|
181
|
+
onSgdsAfterHide?: SgdsEventHandler;
|
|
182
|
+
}
|
|
183
|
+
|
|
158
184
|
// ── Button ─────────────────────────────────────────────────────────────
|
|
159
185
|
|
|
160
186
|
export interface SgdsButtonProps extends SgdsBaseProps {
|
|
@@ -211,32 +237,6 @@ value of this attribute must be an id of a form in the same document or shadow r
|
|
|
211
237
|
onSgdsFocus?: SgdsEventHandler;
|
|
212
238
|
}
|
|
213
239
|
|
|
214
|
-
// ── Badge ─────────────────────────────────────────────────────────────
|
|
215
|
-
|
|
216
|
-
export interface SgdsBadgeProps extends SgdsBaseProps {
|
|
217
|
-
/** Controls the appearance of the dismissible badge. This prop only applies when dismissible is true */
|
|
218
|
-
show?: boolean;
|
|
219
|
-
/** One or more badge variant combinations.
|
|
220
|
-
Variants include: `primary`, `accent`, `success`, `danger`, `warning`, `cyan`, `purple`, `neutral`, `white`, `info`.
|
|
221
|
-
|
|
222
|
-
(@deprecated) The `info` variant is deprecated. Use `primary` instead. */
|
|
223
|
-
variant?: "primary" | "accent" | "success" | "danger" | "warning" | "cyan" | "purple" | "neutral" | "white" | "info";
|
|
224
|
-
/** Manually set the outlined state to false */
|
|
225
|
-
outlined?: boolean;
|
|
226
|
-
/** Manually set the dismissible state of the button to `false` */
|
|
227
|
-
dismissible?: boolean;
|
|
228
|
-
/** Manually enable full width */
|
|
229
|
-
fullWidth?: boolean;
|
|
230
|
-
"onsgds-show"?: SgdsEventHandler;
|
|
231
|
-
onSgdsShow?: SgdsEventHandler;
|
|
232
|
-
"onsgds-hide"?: SgdsEventHandler;
|
|
233
|
-
onSgdsHide?: SgdsEventHandler;
|
|
234
|
-
"onsgds-after-show"?: SgdsEventHandler;
|
|
235
|
-
onSgdsAfterShow?: SgdsEventHandler;
|
|
236
|
-
"onsgds-after-hide"?: SgdsEventHandler;
|
|
237
|
-
onSgdsAfterHide?: SgdsEventHandler;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
240
|
// ── Card ─────────────────────────────────────────────────────────────
|
|
241
241
|
|
|
242
242
|
export interface SgdsCardProps extends SgdsBaseProps {
|
|
@@ -289,9 +289,10 @@ export interface SgdsCheckboxGroupProps extends SgdsBaseProps {
|
|
|
289
289
|
hintText?: string;
|
|
290
290
|
/** Makes the checkbox group a required field. Only available for when multiselect is true */
|
|
291
291
|
required?: boolean;
|
|
292
|
+
/** Disables native and sgds validation for the checkbox group. */
|
|
293
|
+
noValidate?: boolean;
|
|
292
294
|
/** Consolidates the values of its child checked checkboxes into a single string with semi-colon delimiter. Only available when required is true */
|
|
293
295
|
value?: string;
|
|
294
|
-
defaultValue?: string;
|
|
295
296
|
/** Returns the ValidityState object */
|
|
296
297
|
validity?: ValidityState;
|
|
297
298
|
/** Returns the validation message based on the ValidityState */
|
|
@@ -304,6 +305,10 @@ export interface SgdsCheckboxGroupProps extends SgdsBaseProps {
|
|
|
304
305
|
invalid?: boolean;
|
|
305
306
|
"onsgds-change"?: SgdsEventHandler;
|
|
306
307
|
onSgdsChange?: SgdsEventHandler;
|
|
308
|
+
"onsgds-invalid"?: SgdsEventHandler;
|
|
309
|
+
onSgdsInvalid?: SgdsEventHandler;
|
|
310
|
+
"onsgds-valid"?: SgdsEventHandler;
|
|
311
|
+
onSgdsValid?: SgdsEventHandler;
|
|
307
312
|
}
|
|
308
313
|
|
|
309
314
|
// ── Checkbox ─────────────────────────────────────────────────────────────
|
|
@@ -315,12 +320,12 @@ export interface SgdsCheckboxProps extends SgdsBaseProps {
|
|
|
315
320
|
checked?: boolean;
|
|
316
321
|
/** Allows invalidFeedback, invalid and valid styles to be visible with the input */
|
|
317
322
|
hasFeedback?: "style" | "text" | "both";
|
|
318
|
-
/** Gets or sets the default value used to reset this element. The initial value corresponds to the one originally specified in the HTML that created this element. */
|
|
319
|
-
defaultChecked?: boolean;
|
|
320
323
|
/** Marks the checkbox input as indeterminate , with indeterminate logo */
|
|
321
324
|
indeterminate?: boolean;
|
|
322
325
|
/** Makes the checkbox a required field. */
|
|
323
326
|
required?: boolean;
|
|
327
|
+
/** Disables native and sgds validation for the checkbox. */
|
|
328
|
+
noValidate?: boolean;
|
|
324
329
|
/** Feedback text for error state when validated */
|
|
325
330
|
invalidFeedback?: string;
|
|
326
331
|
/** Returns the ValidityState object */
|
|
@@ -347,6 +352,10 @@ export interface SgdsCheckboxProps extends SgdsBaseProps {
|
|
|
347
352
|
onSgdsCheck?: SgdsEventHandler;
|
|
348
353
|
"onsgds-uncheck"?: SgdsEventHandler;
|
|
349
354
|
onSgdsUncheck?: SgdsEventHandler;
|
|
355
|
+
"onsgds-invalid"?: SgdsEventHandler;
|
|
356
|
+
onSgdsInvalid?: SgdsEventHandler;
|
|
357
|
+
"onsgds-valid"?: SgdsEventHandler;
|
|
358
|
+
onSgdsValid?: SgdsEventHandler;
|
|
350
359
|
}
|
|
351
360
|
|
|
352
361
|
// ── CloseButton ─────────────────────────────────────────────────────────────
|
|
@@ -384,6 +393,8 @@ export interface SgdsComboBoxProps extends SgdsBaseProps {
|
|
|
384
393
|
async?: boolean;
|
|
385
394
|
/** When filtering remotely and there are no results, set this to true to enable no options feedback on the menu. Applicable for async combo box only. */
|
|
386
395
|
emptyMenuAsync?: boolean;
|
|
396
|
+
/** Number of pixels from the bottom of the menu at which the sgds-scroll-end event fires. */
|
|
397
|
+
scrollBottomOffset?: number;
|
|
387
398
|
/** The function used to filter the menu list, given the user's input value. */
|
|
388
399
|
filterFunction?: (inputValue: string, item: SgdsComboBoxOptionData) => boolean;
|
|
389
400
|
/** The input's label */
|
|
@@ -446,6 +457,8 @@ value: string;
|
|
|
446
457
|
onSgdsInvalid?: SgdsEventHandler;
|
|
447
458
|
"onsgds-valid"?: SgdsEventHandler;
|
|
448
459
|
onSgdsValid?: SgdsEventHandler;
|
|
460
|
+
"onsgds-scroll-end"?: SgdsEventHandler;
|
|
461
|
+
onSgdsScrollEnd?: SgdsEventHandler;
|
|
449
462
|
"onsgds-show"?: SgdsEventHandler;
|
|
450
463
|
onSgdsShow?: SgdsEventHandler;
|
|
451
464
|
"onsgds-after-show"?: SgdsEventHandler;
|
|
@@ -596,6 +609,8 @@ export interface SgdsDropdownItemProps extends SgdsBaseProps {
|
|
|
596
609
|
active?: boolean;
|
|
597
610
|
/** Disables the SgdsMainnavItem */
|
|
598
611
|
disabled?: boolean;
|
|
612
|
+
/** Forwards aria-label to the inner clickable element for accessibility */
|
|
613
|
+
ariaLabel?: string;
|
|
599
614
|
}
|
|
600
615
|
|
|
601
616
|
// ── Dropdown ─────────────────────────────────────────────────────────────
|
|
@@ -903,6 +918,8 @@ export interface SgdsMainnavDropdownProps extends SgdsBaseProps {
|
|
|
903
918
|
active?: boolean;
|
|
904
919
|
/** When true, applies active styles on the dropdown button */
|
|
905
920
|
disabled?: boolean;
|
|
921
|
+
/** Accessible label for the dropdown's toggle button. Forwarded to the button's aria-label attribute. */
|
|
922
|
+
ariaLabel?: string;
|
|
906
923
|
}
|
|
907
924
|
|
|
908
925
|
// ── MainnavItem ─────────────────────────────────────────────────────────────
|
|
@@ -1065,6 +1082,8 @@ export interface SgdsRadioGroupProps extends SgdsBaseProps {
|
|
|
1065
1082
|
hasFeedback?: boolean;
|
|
1066
1083
|
/** Makes the input as a required field. */
|
|
1067
1084
|
required?: boolean;
|
|
1085
|
+
/** Disables native and sgds validation for the radio group. */
|
|
1086
|
+
noValidate?: boolean;
|
|
1068
1087
|
/** Automatically focuses the selected radio input in the group when it becomes checked. */
|
|
1069
1088
|
autofocus?: boolean;
|
|
1070
1089
|
/** Returns the ValidityState object */
|
|
@@ -1083,6 +1102,10 @@ export interface SgdsRadioGroupProps extends SgdsBaseProps {
|
|
|
1083
1102
|
invalid?: boolean;
|
|
1084
1103
|
"onsgds-change"?: (event: CustomEvent<ISgdsRadioGroupChangeEventDetail>) => void;
|
|
1085
1104
|
onSgdsChange?: (event: CustomEvent<ISgdsRadioGroupChangeEventDetail>) => void;
|
|
1105
|
+
"onsgds-invalid"?: SgdsEventHandler;
|
|
1106
|
+
onSgdsInvalid?: SgdsEventHandler;
|
|
1107
|
+
"onsgds-valid"?: SgdsEventHandler;
|
|
1108
|
+
onSgdsValid?: SgdsEventHandler;
|
|
1086
1109
|
}
|
|
1087
1110
|
|
|
1088
1111
|
// ── Radio ─────────────────────────────────────────────────────────────
|
|
@@ -1116,6 +1139,8 @@ export interface SgdsSelectOptionProps extends SgdsBaseProps {
|
|
|
1116
1139
|
// ── Select ─────────────────────────────────────────────────────────────
|
|
1117
1140
|
|
|
1118
1141
|
export interface SgdsSelectProps extends SgdsBaseProps {
|
|
1142
|
+
/** Disables native and sgds validation for the select. */
|
|
1143
|
+
noValidate?: boolean;
|
|
1119
1144
|
/** The input's label */
|
|
1120
1145
|
label?: string;
|
|
1121
1146
|
/** The input's hint text below the label */
|
|
@@ -1170,6 +1195,10 @@ value: string;
|
|
|
1170
1195
|
onSgdsFocus?: SgdsEventHandler;
|
|
1171
1196
|
"onsgds-blur"?: SgdsEventHandler;
|
|
1172
1197
|
onSgdsBlur?: SgdsEventHandler;
|
|
1198
|
+
"onsgds-invalid"?: SgdsEventHandler;
|
|
1199
|
+
onSgdsInvalid?: SgdsEventHandler;
|
|
1200
|
+
"onsgds-valid"?: SgdsEventHandler;
|
|
1201
|
+
onSgdsValid?: SgdsEventHandler;
|
|
1173
1202
|
"onsgds-show"?: SgdsEventHandler;
|
|
1174
1203
|
onSgdsShow?: SgdsEventHandler;
|
|
1175
1204
|
"onsgds-after-show"?: SgdsEventHandler;
|
|
@@ -1686,8 +1715,8 @@ declare module "react" {
|
|
|
1686
1715
|
"sgds-accordion": React.DetailedHTMLProps<SgdsAccordionProps, HTMLElement>;
|
|
1687
1716
|
"sgds-alert-link": React.DetailedHTMLProps<SgdsAlertLinkProps, HTMLElement>;
|
|
1688
1717
|
"sgds-alert": React.DetailedHTMLProps<SgdsAlertProps, HTMLElement>;
|
|
1689
|
-
"sgds-button": React.DetailedHTMLProps<SgdsButtonProps, HTMLElement>;
|
|
1690
1718
|
"sgds-badge": React.DetailedHTMLProps<SgdsBadgeProps, HTMLElement>;
|
|
1719
|
+
"sgds-button": React.DetailedHTMLProps<SgdsButtonProps, HTMLElement>;
|
|
1691
1720
|
"sgds-card": React.DetailedHTMLProps<SgdsCardProps, HTMLElement>;
|
|
1692
1721
|
"sgds-breadcrumb-item": React.DetailedHTMLProps<SgdsBreadcrumbItemProps, HTMLElement>;
|
|
1693
1722
|
"sgds-breadcrumb": React.DetailedHTMLProps<SgdsBreadcrumbProps, HTMLElement>;
|
|
@@ -1769,8 +1798,8 @@ declare global {
|
|
|
1769
1798
|
"sgds-accordion": HTMLElement;
|
|
1770
1799
|
"sgds-alert-link": HTMLElement;
|
|
1771
1800
|
"sgds-alert": HTMLElement;
|
|
1772
|
-
"sgds-button": HTMLElement;
|
|
1773
1801
|
"sgds-badge": HTMLElement;
|
|
1802
|
+
"sgds-button": HTMLElement;
|
|
1774
1803
|
"sgds-card": HTMLElement;
|
|
1775
1804
|
"sgds-breadcrumb-item": HTMLElement;
|
|
1776
1805
|
"sgds-breadcrumb": HTMLElement;
|
package/utils/validatorMixin.js
CHANGED
|
@@ -19,9 +19,7 @@ const SgdsFormValidatorMixin = (superClass) => {
|
|
|
19
19
|
connectedCallback() {
|
|
20
20
|
var _a;
|
|
21
21
|
super.connectedCallback();
|
|
22
|
-
|
|
23
|
-
return;
|
|
24
|
-
/** Idempotency guarantee */
|
|
22
|
+
/** Idempotency guarantee — always create so reset can clear validity even with noValidate */
|
|
25
23
|
(_a = this.inputValidationController) !== null && _a !== void 0 ? _a : (this.inputValidationController = new InputValidationController(this));
|
|
26
24
|
}
|
|
27
25
|
async firstUpdated(changedProperties) {
|
|
@@ -78,19 +76,19 @@ const SgdsFormValidatorMixin = (superClass) => {
|
|
|
78
76
|
}
|
|
79
77
|
/**
|
|
80
78
|
* During form resetting,
|
|
81
|
-
* 1. ValidityState is reset
|
|
82
|
-
* 2. invalid reactive prop is updated after the reset
|
|
83
|
-
* 3.
|
|
84
|
-
*
|
|
85
|
-
*
|
|
79
|
+
* 1. ValidityState is reset (always, regardless of noValidate)
|
|
80
|
+
* 2. invalid reactive prop is updated after the reset (always)
|
|
81
|
+
* 3. Reset touched state to false for a pristine form (always)
|
|
82
|
+
* 4. Revalidates the ValidityState (but do not update invalid prop)
|
|
83
|
+
* to prepare for the next validity check (skipped when noValidate)
|
|
86
84
|
*/
|
|
87
85
|
_mixinResetValidity(input) {
|
|
88
|
-
if (this._mixinShouldSkipSgdsValidation())
|
|
89
|
-
return;
|
|
90
86
|
this.inputValidationController.resetValidity();
|
|
91
87
|
this.inputValidationController.updateInvalidState();
|
|
92
|
-
this.inputValidationController.validateInput(input);
|
|
93
88
|
this._isTouched ? (this._isTouched = false) : null;
|
|
89
|
+
if (this._mixinShouldSkipSgdsValidation())
|
|
90
|
+
return;
|
|
91
|
+
this.inputValidationController.validateInput(input);
|
|
94
92
|
}
|
|
95
93
|
_mixinValidate(input) {
|
|
96
94
|
if (this._mixinShouldSkipSgdsValidation())
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validatorMixin.js","sources":["../../src/utils/validatorMixin.ts"],"sourcesContent":["import { LitElement, PropertyValueMap } from \"lit\";\nimport { queryAsync } from \"lit/decorators.js\";\nimport { SgdsInput } from \"../components\";\nimport { InputValidationController } from \"./inputValidationController\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor<T> = new (...args: any[]) => T;\n\n/**\n * @summary The FormValidationMixin used by the form components\n * @param superClass\n * @returns\n */\nexport const SgdsFormValidatorMixin = <T extends Constructor<LitElement>>(superClass: T) => {\n class ToBeValidatedElement extends superClass {\n static formAssociated = true;\n inputValidationController: InputValidationController;\n input: HTMLInputElement | SgdsInput | HTMLTextAreaElement;\n private _isTouched = false;\n private _internals: ElementInternals;\n @queryAsync(\"sgds-input\") sgdsInput: Promise<SgdsInput>;\n @queryAsync(\"sgds-datepicker-input\") sgdsDatepickerInput: Promise<SgdsInput>;\n\n // TypeScript requires mixin constructors to have rest parameter of type any[]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n super(...args);\n this._internals = this.attachInternals();\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n
|
|
1
|
+
{"version":3,"file":"validatorMixin.js","sources":["../../src/utils/validatorMixin.ts"],"sourcesContent":["import { LitElement, PropertyValueMap } from \"lit\";\nimport { queryAsync } from \"lit/decorators.js\";\nimport { SgdsInput } from \"../components\";\nimport { InputValidationController } from \"./inputValidationController\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor<T> = new (...args: any[]) => T;\n\n/**\n * @summary The FormValidationMixin used by the form components\n * @param superClass\n * @returns\n */\nexport const SgdsFormValidatorMixin = <T extends Constructor<LitElement>>(superClass: T) => {\n class ToBeValidatedElement extends superClass {\n static formAssociated = true;\n inputValidationController: InputValidationController;\n input: HTMLInputElement | SgdsInput | HTMLTextAreaElement;\n private _isTouched = false;\n private _internals: ElementInternals;\n @queryAsync(\"sgds-input\") sgdsInput: Promise<SgdsInput>;\n @queryAsync(\"sgds-datepicker-input\") sgdsDatepickerInput: Promise<SgdsInput>;\n\n // TypeScript requires mixin constructors to have rest parameter of type any[]\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n constructor(...args: any[]) {\n super(...args);\n this._internals = this.attachInternals();\n }\n\n connectedCallback(): void {\n super.connectedCallback();\n\n /** Idempotency guarantee — always create so reset can clear validity even with noValidate */\n this.inputValidationController ??= new InputValidationController(this);\n }\n async firstUpdated(changedProperties: PropertyValueMap<this>) {\n super.firstUpdated(changedProperties);\n\n /* Either input or sgds-input. For example, quantity-toggle uses sgds-input */\n this.input =\n this.shadowRoot.querySelector(\"input\") ||\n (await this.sgdsInput) ||\n this.shadowRoot.querySelector(\"textarea\") ||\n (await this.sgdsDatepickerInput);\n\n this._mixinSetFormValue();\n\n if (this._mixinShouldSkipSgdsValidation()) return;\n\n this._mixinValidate(this.input);\n }\n\n /**\n * Native lifecycle of Form-Associated Custom Element Callbacks\n */\n formResetCallback() {\n if (this._mixinResetFormControl) {\n this._mixinResetFormControl();\n } else {\n this.value = this.defaultValue;\n this._mixinResetValidity(this.input);\n }\n this._mixinSetFormValue();\n }\n /**\n *\n * Methods use by classes using this mixin\n */\n\n /**\n * OnChange of form component\n * 1. Make value of control accessible via FormData\n * 2. Run change handler\n */\n _mixinHandleChange(e: Event): void {\n this._mixinSetFormValue();\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.handleChange(e);\n }\n /**\n * OnChange of form component\n * 1. Make value of control accessible via FormData\n * 2. Run input handler\n */\n _mixinHandleInputChange(e: Event): void {\n this._mixinSetFormValue();\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.handleInput(e);\n }\n /**\n * During form resetting,\n * 1. ValidityState is reset (always, regardless of noValidate)\n * 2. invalid reactive prop is updated after the reset (always)\n * 3. Reset touched state to false for a pristine form (always)\n * 4. Revalidates the ValidityState (but do not update invalid prop)\n * to prepare for the next validity check (skipped when noValidate)\n */\n _mixinResetValidity(input: HTMLInputElement | SgdsInput | HTMLTextAreaElement) {\n this.inputValidationController.resetValidity();\n this.inputValidationController.updateInvalidState();\n this._isTouched ? (this._isTouched = false) : null;\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.validateInput(input);\n }\n\n _mixinValidate(input: HTMLInputElement | SgdsInput | HTMLTextAreaElement) {\n if (this._mixinShouldSkipSgdsValidation()) return;\n this.inputValidationController.validateInput(input);\n }\n _mixinSetFormValue() {\n const value = this.value as string | FormData | File;\n this._internals.setFormValue(value);\n }\n _mixinCheckValidity(): boolean {\n if (this._mixinShouldSkipSgdsValidation()) return true;\n return this.inputValidationController.checkValidity();\n }\n _mixinReportValidity(): boolean {\n if (this._mixinShouldSkipSgdsValidation()) return true;\n return this.inputValidationController.reportValidity();\n }\n _mixinGetValidity(): ValidityState {\n return this._internals.validity;\n }\n _mixinGetValidationMessage(): string {\n return this._internals.validationMessage;\n }\n _mixinSetValidity(flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement): void {\n if (this._mixinShouldSkipSgdsValidation()) return;\n return this.inputValidationController.setValidity(flags, message, anchor);\n }\n // Only check for noValidate prop\n _mixinShouldSkipSgdsValidation() {\n const form = this.closest(\"form\");\n\n return form?.noValidate || this.noValidate;\n }\n\n /** DECLARED INSTANCE METHODS AND PROPERTIES*/\n\n /**\n * Resets a form control to its initial state\n */\n declare _mixinResetFormControl: () => void;\n declare value: string;\n declare defaultValue: string;\n declare defaultChecked: boolean;\n declare noValidate: boolean;\n }\n\n return ToBeValidatedElement as Constructor<ToBeValidatedElementInterface> & T;\n};\n\nexport declare class ToBeValidatedElementInterface {\n inputValidationController: InputValidationController;\n input: HTMLInputElement;\n _mixinHandleChange(e: Event): void;\n _mixinHandleInputChange(e: Event): void;\n _mixinResetValidity(input: HTMLInputElement | SgdsInput): void;\n _mixinValidate(input: HTMLInputElement | SgdsInput): void;\n _mixinSetFormValue(): void;\n _mixinCheckValidity(): boolean;\n _mixinReportValidity(): boolean;\n _mixinSetValidity(flags?: ValidityStateFlags, message?: string, anchor?: HTMLElement): void;\n _mixinGetValidity(): ValidityState;\n _mixinGetValidationMessage(): string;\n _mixinShouldSkipSgdsValidation(): boolean;\n}\n"],"names":[],"mappings":"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"}
|