@govtechsg/sgds-web-component 3.0.0-rc.1 → 3.0.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/README.md +5 -5
- package/base/button.js +1 -1
- package/base/form-control-element.d.ts +4 -11
- package/base/form-control-element.js +13 -23
- package/base/form-control-element.js.map +1 -1
- package/components/Accordion/accordion-item.js +1 -1
- package/components/Accordion/index.umd.js +7 -19
- package/components/Accordion/index.umd.js.map +1 -1
- package/components/Accordion/sgds-accordion-item.d.ts +3 -7
- package/components/Accordion/sgds-accordion-item.js +6 -18
- package/components/Accordion/sgds-accordion-item.js.map +1 -1
- package/components/ActionCard/index.umd.js +407 -329
- package/components/ActionCard/index.umd.js.map +1 -1
- package/components/Alert/alert.js +1 -1
- package/components/Alert/index.umd.js +553 -485
- package/components/Alert/index.umd.js.map +1 -1
- package/components/Alert/sgds-alert.d.ts +2 -2
- package/components/Alert/sgds-alert.js +6 -13
- package/components/Alert/sgds-alert.js.map +1 -1
- package/components/Badge/badge.js +1 -1
- package/components/Badge/index.umd.js +8 -9
- package/components/Badge/index.umd.js.map +1 -1
- package/components/Badge/sgds-badge.d.ts +4 -5
- package/components/Badge/sgds-badge.js +5 -6
- package/components/Badge/sgds-badge.js.map +1 -1
- package/components/Button/index.umd.js +8 -81
- package/components/Button/index.umd.js.map +1 -1
- package/components/Button/sgds-button.js +1 -1
- package/components/Button/sgds-button.js.map +1 -1
- package/components/Checkbox/checkbox.js +1 -1
- package/components/Checkbox/index.umd.js +541 -475
- package/components/Checkbox/index.umd.js.map +1 -1
- package/components/Checkbox/sgds-checkbox-group.d.ts +7 -1
- package/components/Checkbox/sgds-checkbox-group.js +15 -4
- package/components/Checkbox/sgds-checkbox-group.js.map +1 -1
- package/components/Checkbox/sgds-checkbox.d.ts +30 -21
- package/components/Checkbox/sgds-checkbox.js +77 -60
- package/components/Checkbox/sgds-checkbox.js.map +1 -1
- package/components/ComboBox/index.umd.js +385 -216
- package/components/ComboBox/index.umd.js.map +1 -1
- package/components/Datepicker/datepicker-input.d.ts +4 -2
- package/components/Datepicker/datepicker-input.js +24 -7
- package/components/Datepicker/datepicker-input.js.map +1 -1
- package/components/Datepicker/index.umd.js +433 -244
- package/components/Datepicker/index.umd.js.map +1 -1
- package/components/Datepicker/sgds-datepicker.d.ts +1 -1
- package/components/Datepicker/sgds-datepicker.js.map +1 -1
- package/components/Drawer/index.umd.js +2 -2
- package/components/Drawer/index.umd.js.map +1 -1
- package/components/Dropdown/index.umd.js +8 -81
- package/components/Dropdown/index.umd.js.map +1 -1
- package/components/FileUpload/file-upload.js +1 -1
- package/components/FileUpload/index.umd.js +579 -272
- package/components/FileUpload/index.umd.js.map +1 -1
- package/components/FileUpload/sgds-file-upload.d.ts +42 -30
- package/components/FileUpload/sgds-file-upload.js +147 -103
- package/components/FileUpload/sgds-file-upload.js.map +1 -1
- package/components/Footer/footer-item.js +6 -0
- package/components/Footer/footer-item.js.map +1 -0
- package/components/Footer/footer.js +1 -1
- package/components/Footer/index.d.ts +2 -0
- package/components/Footer/index.js +2 -0
- package/components/Footer/index.js.map +1 -1
- package/components/Footer/index.umd.js +93 -94
- package/components/Footer/index.umd.js.map +1 -1
- package/components/Footer/sgds-footer-item.d.ts +13 -0
- package/components/Footer/sgds-footer-item.js +27 -0
- package/components/Footer/sgds-footer-item.js.map +1 -0
- package/components/Footer/sgds-footer.d.ts +9 -30
- package/components/Footer/sgds-footer.js +65 -90
- package/components/Footer/sgds-footer.js.map +1 -1
- package/components/Icon/icon.js +6 -0
- package/components/Icon/icon.js.map +1 -0
- package/components/Icon/index.d.ts +6 -0
- package/components/Icon/index.js +4 -0
- package/components/Icon/index.js.map +1 -0
- package/components/Icon/index.umd.js +4389 -0
- package/components/Icon/index.umd.js.map +1 -0
- package/components/Icon/sgds-icon.d.ts +21 -0
- package/components/Icon/sgds-icon.js +64 -0
- package/components/Icon/sgds-icon.js.map +1 -0
- package/components/IconButton/icon-button.js +1 -1
- package/components/IconButton/index.umd.js +6 -9
- package/components/IconButton/index.umd.js.map +1 -1
- package/components/IconButton/sgds-icon-button.d.ts +2 -2
- package/components/IconButton/sgds-icon-button.js +4 -9
- package/components/IconButton/sgds-icon-button.js.map +1 -1
- package/components/Input/index.umd.js +1734 -1376
- package/components/Input/index.umd.js.map +1 -1
- package/components/Input/sgds-input.d.ts +41 -21
- package/components/Input/sgds-input.js +103 -66
- package/components/Input/sgds-input.js.map +1 -1
- package/components/Modal/index.umd.js +2 -2
- package/components/Modal/index.umd.js.map +1 -1
- package/components/QuantityToggle/index.umd.js +894 -316
- package/components/QuantityToggle/index.umd.js.map +1 -1
- package/components/QuantityToggle/sgds-quantity-toggle.d.ts +42 -15
- package/components/QuantityToggle/sgds-quantity-toggle.js +129 -62
- package/components/QuantityToggle/sgds-quantity-toggle.js.map +1 -1
- package/components/Radio/index.umd.js +516 -203
- package/components/Radio/index.umd.js.map +1 -1
- package/components/Radio/sgds-radio-group.d.ts +38 -27
- package/components/Radio/sgds-radio-group.js +100 -84
- package/components/Radio/sgds-radio-group.js.map +1 -1
- package/components/Radio/sgds-radio.js +1 -1
- package/components/Radio/sgds-radio.js.map +1 -1
- package/components/Stepper/index.umd.js +1 -0
- package/components/Stepper/index.umd.js.map +1 -1
- package/components/Stepper/sgds-stepper.d.ts +1 -0
- package/components/Stepper/sgds-stepper.js +1 -0
- package/components/Stepper/sgds-stepper.js.map +1 -1
- package/components/Switch/index.umd.js +21 -321
- package/components/Switch/index.umd.js.map +1 -1
- package/components/Switch/sgds-switch.js +1 -2
- package/components/Switch/sgds-switch.js.map +1 -1
- package/components/Textarea/index.umd.js +1554 -1336
- package/components/Textarea/index.umd.js.map +1 -1
- package/components/Textarea/sgds-textarea.d.ts +33 -22
- package/components/Textarea/sgds-textarea.js +78 -75
- package/components/Textarea/sgds-textarea.js.map +1 -1
- package/components/Textarea/textarea.js +1 -1
- package/components/Toast/index.umd.js +9 -21
- package/components/Toast/index.umd.js.map +1 -1
- package/components/Toast/sgds-toast.d.ts +2 -1
- package/components/Toast/sgds-toast.js +6 -18
- package/components/Toast/sgds-toast.js.map +1 -1
- package/components/Toast/toast.js +1 -1
- package/components/Tooltip/index.umd.js +14 -14
- package/components/Tooltip/index.umd.js.map +1 -1
- package/components/Tooltip/sgds-tooltip.d.ts +4 -7
- package/components/Tooltip/sgds-tooltip.js +14 -14
- package/components/Tooltip/sgds-tooltip.js.map +1 -1
- package/components/index.d.ts +1 -0
- package/components/index.js +1 -0
- package/components/index.js.map +1 -1
- package/components/index.umd.js +1318 -1124
- package/components/index.umd.js.map +1 -1
- package/icons/arrow-bar-down.svg +3 -0
- package/icons/arrow-bar-left.svg +3 -0
- package/icons/arrow-bar-right.svg +3 -0
- package/icons/arrow-bar-up.svg +3 -0
- package/icons/arrow-clockwise.svg +3 -0
- package/icons/arrow-down.svg +3 -0
- package/icons/arrow-left.svg +3 -0
- package/icons/arrow-repeat.svg +3 -0
- package/icons/arrow-right.svg +3 -0
- package/icons/arrow-up.svg +3 -0
- package/icons/bank-fill.svg +3 -0
- package/icons/bell-slash.svg +3 -0
- package/icons/bell.svg +3 -0
- package/icons/bi-funnel.svg +3 -0
- package/icons/bookmark-fill.svg +3 -0
- package/icons/bookmark.svg +3 -0
- package/icons/box-arrow-up-right.svg +3 -0
- package/icons/box-seam.svg +3 -0
- package/icons/building.svg +3 -0
- package/icons/calculator.svg +3 -0
- package/icons/calendar-check.svg +4 -0
- package/icons/calendar-x.svg +4 -0
- package/icons/calendar.svg +3 -0
- package/icons/camera.svg +3 -0
- package/icons/chat-left-text.svg +3 -0
- package/icons/check-circle-fill.svg +3 -0
- package/icons/check-circle.svg +3 -0
- package/icons/check.svg +3 -0
- package/icons/chevron-down.svg +3 -0
- package/icons/chevron-left.svg +3 -0
- package/icons/chevron-right.svg +3 -0
- package/icons/chevron-up .svg +3 -0
- package/icons/clock.svg +4 -0
- package/icons/cloud-check.svg +4 -0
- package/icons/cloud-download.svg +3 -0
- package/icons/cloud-upload.svg +3 -0
- package/icons/cloud.svg +3 -0
- package/icons/compass.svg +4 -0
- package/icons/cross.svg +3 -0
- package/icons/cursor-fill.svg +3 -0
- package/icons/cursor.svg +3 -0
- package/icons/dash-circle.svg +3 -0
- package/icons/dash-square.svg +3 -0
- package/icons/dash.svg +3 -0
- package/icons/download.svg +3 -0
- package/icons/exclamation-circle-fill.svg +3 -0
- package/icons/exclamation-circle.svg +4 -0
- package/icons/exclamation-triangle-fill.svg +3 -0
- package/icons/exclamation-triangle.svg +4 -0
- package/icons/exclamation.svg +4 -0
- package/icons/eye-fill.svg +3 -0
- package/icons/eye-slash-fill.svg +4 -0
- package/icons/eye-slash.svg +3 -0
- package/icons/eye.svg +3 -0
- package/icons/facebook.svg +3 -0
- package/icons/file-earmark-text.svg +3 -0
- package/icons/file-pdf.svg +4 -0
- package/icons/file-plus.svg +4 -0
- package/icons/file-text.svg +3 -0
- package/icons/file.svg +3 -0
- package/icons/files.svg +4 -0
- package/icons/folder-check.svg +4 -0
- package/icons/folder-minus.svg +4 -0
- package/icons/folder-plus.svg +4 -0
- package/icons/folder.svg +3 -0
- package/icons/gear.svg +3 -0
- package/icons/geo-alt.svg +4 -0
- package/icons/geo-fill.svg +4 -0
- package/icons/geo.svg +4 -0
- package/icons/google.svg +3 -0
- package/icons/grid-fill.svg +3 -0
- package/icons/hand-thumbs-down.svg +3 -0
- package/icons/hand-thumbs-up.svg +3 -0
- package/icons/hdd.svg +3 -0
- package/icons/house-door.svg +3 -0
- package/icons/house.svg +3 -0
- package/icons/image.svg +3 -0
- package/icons/inbox.svg +3 -0
- package/icons/info-circle-fill.svg +3 -0
- package/icons/info-circle.svg +4 -0
- package/icons/instagram.svg +3 -0
- package/icons/layers.svg +3 -0
- package/icons/layout-text-window-reverse.svg +3 -0
- package/icons/layout-text-window.svg +3 -0
- package/icons/layout.svg +3 -0
- package/icons/link.svg +3 -0
- package/icons/linkedin.svg +3 -0
- package/icons/list.svg +3 -0
- package/icons/lock-fill.svg +3 -0
- package/icons/lock.svg +3 -0
- package/icons/mail.svg +3 -0
- package/icons/map.svg +3 -0
- package/icons/paperclip.svg +3 -0
- package/icons/pencil.svg +3 -0
- package/icons/pending-circle.svg +3 -0
- package/icons/person-dash.svg +3 -0
- package/icons/person-plus.svg +3 -0
- package/icons/person-x.svg +3 -0
- package/icons/person.svg +3 -0
- package/icons/pin-map-fill.svg +3 -0
- package/icons/pin.svg +3 -0
- package/icons/placeholder.svg +3 -0
- package/icons/plus-circle.svg +3 -0
- package/icons/plus-square.svg +3 -0
- package/icons/plus.svg +3 -0
- package/icons/printer.svg +3 -0
- package/icons/question-circle.svg +4 -0
- package/icons/save.svg +3 -0
- package/icons/search.svg +3 -0
- package/icons/share.svg +3 -0
- package/icons/slash-circle.svg +3 -0
- package/icons/sliders.svg +3 -0
- package/icons/speedometer.svg +3 -0
- package/icons/star-fill.svg +3 -0
- package/icons/star.svg +3 -0
- package/icons/stoplights.svg +4 -0
- package/icons/telephone.svg +3 -0
- package/icons/three-dots-vertical.svg +3 -0
- package/icons/three-dots.svg +3 -0
- package/icons/toggle-off.svg +3 -0
- package/icons/toggle-on.svg +3 -0
- package/icons/trash.svg +3 -0
- package/icons/twitter-x.svg +3 -0
- package/icons/unlock.svg +3 -0
- package/icons/upload.svg +3 -0
- package/icons/window-dash.svg +4 -0
- package/icons/window-desktop.svg +4 -0
- package/icons/window-dock.svg +4 -0
- package/icons/window-fullscreen.svg +3 -0
- package/icons/window-plus.svg +4 -0
- package/icons/window-sidebar.svg +3 -0
- package/icons/window-split.svg +3 -0
- package/icons/window-stack.svg +3 -0
- package/icons/window-x.svg +4 -0
- package/icons/window.svg +3 -0
- package/icons/x-circle-fill.svg +3 -0
- package/icons/x-circle.svg +3 -0
- package/icons/youtube.svg +3 -0
- package/icons/zoom-in.svg +3 -0
- package/icons/zoom-out.svg +3 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/index.umd.js +1338 -1119
- package/index.umd.js.map +1 -1
- package/internals/CloseButton/close-button.js +1 -1
- package/internals/CloseButton/sgds-close-button.js +1 -1
- package/internals/CloseButton/sgds-close-button.js.map +1 -1
- package/package.json +1 -1
- package/react/base/button.cjs.js +1 -1
- package/react/base/button.js +1 -1
- package/react/base/form-control-element.cjs.js +13 -23
- package/react/base/form-control-element.cjs.js.map +1 -1
- package/react/base/form-control-element.js +13 -23
- package/react/base/form-control-element.js.map +1 -1
- package/react/checkbox/index.cjs.js +2 -0
- package/react/checkbox/index.cjs.js.map +1 -1
- package/react/checkbox/index.d.ts +2 -0
- package/react/checkbox/index.js +2 -0
- package/react/checkbox/index.js.map +1 -1
- package/react/components/Accordion/accordion-item.cjs.js +1 -1
- package/react/components/Accordion/accordion-item.js +1 -1
- package/react/components/Accordion/sgds-accordion-item.cjs.js +6 -18
- package/react/components/Accordion/sgds-accordion-item.cjs.js.map +1 -1
- package/react/components/Accordion/sgds-accordion-item.js +6 -18
- package/react/components/Accordion/sgds-accordion-item.js.map +1 -1
- package/react/components/Alert/alert.cjs.js +1 -1
- package/react/components/Alert/alert.js +1 -1
- package/react/components/Alert/sgds-alert.cjs.js +5 -12
- package/react/components/Alert/sgds-alert.cjs.js.map +1 -1
- package/react/components/Alert/sgds-alert.js +6 -13
- package/react/components/Alert/sgds-alert.js.map +1 -1
- package/react/components/Badge/badge.cjs.js +1 -1
- package/react/components/Badge/badge.js +1 -1
- package/react/components/Badge/sgds-badge.cjs.js +5 -6
- package/react/components/Badge/sgds-badge.cjs.js.map +1 -1
- package/react/components/Badge/sgds-badge.js +5 -6
- package/react/components/Badge/sgds-badge.js.map +1 -1
- package/react/components/Button/sgds-button.cjs.js +2 -2
- package/react/components/Button/sgds-button.cjs.js.map +1 -1
- package/react/components/Button/sgds-button.js +1 -1
- package/react/components/Button/sgds-button.js.map +1 -1
- package/react/components/Checkbox/checkbox.cjs.js +1 -1
- package/react/components/Checkbox/checkbox.js +1 -1
- package/react/components/Checkbox/sgds-checkbox-group.cjs.js +15 -4
- package/react/components/Checkbox/sgds-checkbox-group.cjs.js.map +1 -1
- package/react/components/Checkbox/sgds-checkbox-group.js +15 -4
- package/react/components/Checkbox/sgds-checkbox-group.js.map +1 -1
- package/react/components/Checkbox/sgds-checkbox.cjs.js +77 -60
- package/react/components/Checkbox/sgds-checkbox.cjs.js.map +1 -1
- package/react/components/Checkbox/sgds-checkbox.js +77 -60
- package/react/components/Checkbox/sgds-checkbox.js.map +1 -1
- package/react/components/Datepicker/datepicker-input.cjs.js +24 -7
- package/react/components/Datepicker/datepicker-input.cjs.js.map +1 -1
- package/react/components/Datepicker/datepicker-input.js +24 -7
- package/react/components/Datepicker/datepicker-input.js.map +1 -1
- package/react/components/Datepicker/sgds-datepicker.cjs.js.map +1 -1
- package/react/components/Datepicker/sgds-datepicker.js.map +1 -1
- package/react/components/FileUpload/file-upload.cjs.js +1 -1
- package/react/components/FileUpload/file-upload.js +1 -1
- package/react/components/FileUpload/sgds-file-upload.cjs.js +145 -101
- package/react/components/FileUpload/sgds-file-upload.cjs.js.map +1 -1
- package/react/components/FileUpload/sgds-file-upload.js +147 -103
- package/react/components/FileUpload/sgds-file-upload.js.map +1 -1
- package/react/components/Footer/footer-item.cjs.js +11 -0
- package/react/components/Footer/footer-item.cjs.js.map +1 -0
- package/react/components/Footer/footer-item.js +7 -0
- package/react/components/Footer/footer-item.js.map +1 -0
- package/react/components/Footer/footer.cjs.js +1 -1
- package/react/components/Footer/footer.js +1 -1
- package/react/components/Footer/sgds-footer-item.cjs.js +33 -0
- package/react/components/Footer/sgds-footer-item.cjs.js.map +1 -0
- package/react/components/Footer/sgds-footer-item.js +28 -0
- package/react/components/Footer/sgds-footer-item.js.map +1 -0
- package/react/components/Footer/sgds-footer.cjs.js +65 -90
- package/react/components/Footer/sgds-footer.cjs.js.map +1 -1
- package/react/components/Footer/sgds-footer.js +65 -90
- package/react/components/Footer/sgds-footer.js.map +1 -1
- package/react/components/Icon/icon.cjs.js +11 -0
- package/react/components/Icon/icon.cjs.js.map +1 -0
- package/react/components/Icon/icon.js +7 -0
- package/react/components/Icon/icon.js.map +1 -0
- package/react/components/Icon/sgds-icon.cjs.js +70 -0
- package/react/components/Icon/sgds-icon.cjs.js.map +1 -0
- package/react/components/Icon/sgds-icon.js +65 -0
- package/react/components/Icon/sgds-icon.js.map +1 -0
- package/react/components/IconButton/icon-button.cjs.js +1 -1
- package/react/components/IconButton/icon-button.js +1 -1
- package/react/components/IconButton/sgds-icon-button.cjs.js +4 -9
- package/react/components/IconButton/sgds-icon-button.cjs.js.map +1 -1
- package/react/components/IconButton/sgds-icon-button.js +4 -9
- package/react/components/IconButton/sgds-icon-button.js.map +1 -1
- package/react/components/Input/sgds-input.cjs.js +101 -64
- package/react/components/Input/sgds-input.cjs.js.map +1 -1
- package/react/components/Input/sgds-input.js +103 -66
- package/react/components/Input/sgds-input.js.map +1 -1
- package/react/components/QuantityToggle/sgds-quantity-toggle.cjs.js +128 -61
- package/react/components/QuantityToggle/sgds-quantity-toggle.cjs.js.map +1 -1
- package/react/components/QuantityToggle/sgds-quantity-toggle.js +129 -62
- package/react/components/QuantityToggle/sgds-quantity-toggle.js.map +1 -1
- package/react/components/Radio/sgds-radio-group.cjs.js +99 -83
- package/react/components/Radio/sgds-radio-group.cjs.js.map +1 -1
- package/react/components/Radio/sgds-radio-group.js +100 -84
- package/react/components/Radio/sgds-radio-group.js.map +1 -1
- package/react/components/Radio/sgds-radio.cjs.js +1 -1
- package/react/components/Radio/sgds-radio.cjs.js.map +1 -1
- package/react/components/Radio/sgds-radio.js +1 -1
- package/react/components/Radio/sgds-radio.js.map +1 -1
- package/react/components/Stepper/sgds-stepper.cjs.js +1 -0
- package/react/components/Stepper/sgds-stepper.cjs.js.map +1 -1
- package/react/components/Stepper/sgds-stepper.js +1 -0
- package/react/components/Stepper/sgds-stepper.js.map +1 -1
- package/react/components/Switch/sgds-switch.cjs.js +1 -2
- package/react/components/Switch/sgds-switch.cjs.js.map +1 -1
- package/react/components/Switch/sgds-switch.js +1 -2
- package/react/components/Switch/sgds-switch.js.map +1 -1
- package/react/components/Textarea/sgds-textarea.cjs.js +76 -73
- package/react/components/Textarea/sgds-textarea.cjs.js.map +1 -1
- package/react/components/Textarea/sgds-textarea.js +78 -75
- package/react/components/Textarea/sgds-textarea.js.map +1 -1
- package/react/components/Textarea/textarea.cjs.js +1 -1
- package/react/components/Textarea/textarea.js +1 -1
- package/react/components/Toast/sgds-toast.cjs.js +6 -18
- package/react/components/Toast/sgds-toast.cjs.js.map +1 -1
- package/react/components/Toast/sgds-toast.js +6 -18
- package/react/components/Toast/sgds-toast.js.map +1 -1
- package/react/components/Toast/toast.cjs.js +1 -1
- package/react/components/Toast/toast.js +1 -1
- package/react/components/Tooltip/sgds-tooltip.cjs.js +14 -14
- package/react/components/Tooltip/sgds-tooltip.cjs.js.map +1 -1
- package/react/components/Tooltip/sgds-tooltip.js +14 -14
- package/react/components/Tooltip/sgds-tooltip.js.map +1 -1
- package/react/footer-item/index.cjs.js +39 -0
- package/react/footer-item/index.cjs.js.map +1 -0
- package/react/footer-item/index.d.ts +3 -0
- package/react/footer-item/index.js +15 -0
- package/react/footer-item/index.js.map +1 -0
- package/react/icon/index.cjs.js +42 -0
- package/react/icon/index.cjs.js.map +1 -0
- package/react/icon/index.d.ts +6 -0
- package/react/icon/index.js +18 -0
- package/react/icon/index.js.map +1 -0
- package/react/index.cjs.js +64 -60
- package/react/index.cjs.js.map +1 -1
- package/react/index.d.ts +2 -0
- package/react/index.js +2 -0
- package/react/index.js.map +1 -1
- package/react/input/index.cjs.js +3 -1
- package/react/input/index.cjs.js.map +1 -1
- package/react/input/index.d.ts +2 -0
- package/react/input/index.js +3 -1
- package/react/input/index.js.map +1 -1
- package/react/internals/CloseButton/close-button.cjs.js +1 -1
- package/react/internals/CloseButton/close-button.js +1 -1
- package/react/internals/CloseButton/sgds-close-button.cjs.js +1 -1
- package/react/internals/CloseButton/sgds-close-button.cjs.js.map +1 -1
- package/react/internals/CloseButton/sgds-close-button.js +1 -1
- package/react/internals/CloseButton/sgds-close-button.js.map +1 -1
- package/react/styles/form-hint.cjs.js +1 -1
- package/react/styles/form-hint.js +1 -1
- package/react/styles/form-label.cjs.js +1 -1
- package/react/styles/form-label.js +1 -1
- package/react/utils/formSubmitController.cjs.js +64 -0
- package/react/utils/formSubmitController.cjs.js.map +1 -0
- package/react/utils/formSubmitController.js +60 -0
- package/react/utils/formSubmitController.js.map +1 -0
- package/react/utils/inputValidationController.cjs.js +130 -0
- package/react/utils/inputValidationController.cjs.js.map +1 -0
- package/react/utils/inputValidationController.js +126 -0
- package/react/utils/inputValidationController.js.map +1 -0
- package/react/utils/validatorMixin.cjs.js +108 -0
- package/react/utils/validatorMixin.cjs.js.map +1 -0
- package/react/utils/validatorMixin.js +104 -0
- package/react/utils/validatorMixin.js.map +1 -0
- package/styles/form-hint.js +1 -1
- package/styles/form-label.js +1 -1
- package/themes/day.css +1 -1
- package/themes/night.css +3 -2
- package/themes/root.css +1 -0
- package/utils/{form.d.ts → formSubmitController.d.ts} +10 -20
- package/utils/formSubmitController.js +59 -0
- package/utils/formSubmitController.js.map +1 -0
- package/utils/inputValidationController.d.ts +70 -0
- package/utils/inputValidationController.js +125 -0
- package/utils/inputValidationController.js.map +1 -0
- package/utils/validatorMixin.d.ts +24 -0
- package/utils/validatorMixin.js +103 -0
- package/utils/validatorMixin.js.map +1 -0
- package/base/form-check-element.d.ts +0 -50
- package/base/form-check-element.js +0 -169
- package/base/form-check-element.js.map +0 -1
- package/react/base/form-check-element.cjs.js +0 -175
- package/react/base/form-check-element.cjs.js.map +0 -1
- package/react/base/form-check-element.js +0 -170
- package/react/base/form-check-element.js.map +0 -1
- package/react/utils/form.cjs.js +0 -137
- package/react/utils/form.cjs.js.map +0 -1
- package/react/utils/form.js +0 -133
- package/react/utils/form.js.map +0 -1
- package/utils/form.js +0 -132
- package/utils/form.js.map +0 -1
|
@@ -4498,6 +4498,59 @@
|
|
|
4498
4498
|
});
|
|
4499
4499
|
}
|
|
4500
4500
|
|
|
4501
|
+
/**
|
|
4502
|
+
* @license
|
|
4503
|
+
* Copyright 2017 Google LLC
|
|
4504
|
+
* SPDX-License-Identifier: BSD-3-Clause
|
|
4505
|
+
*/
|
|
4506
|
+
// Note, in the future, we may extend this decorator to support the use case
|
|
4507
|
+
// where the queried element may need to do work to become ready to interact
|
|
4508
|
+
// with (e.g. load some implementation code). If so, we might elect to
|
|
4509
|
+
// add a second argument defining a function that can be run to make the
|
|
4510
|
+
// queried element loaded/updated/ready.
|
|
4511
|
+
/**
|
|
4512
|
+
* A property decorator that converts a class property into a getter that
|
|
4513
|
+
* returns a promise that resolves to the result of a querySelector on the
|
|
4514
|
+
* element's renderRoot done after the element's `updateComplete` promise
|
|
4515
|
+
* resolves. When the queried property may change with element state, this
|
|
4516
|
+
* decorator can be used instead of requiring users to await the
|
|
4517
|
+
* `updateComplete` before accessing the property.
|
|
4518
|
+
*
|
|
4519
|
+
* @param selector A DOMString containing one or more selectors to match.
|
|
4520
|
+
*
|
|
4521
|
+
* See: https://developer.mozilla.org/en-US/docs/Web/API/Document/querySelector
|
|
4522
|
+
*
|
|
4523
|
+
* ```ts
|
|
4524
|
+
* class MyElement {
|
|
4525
|
+
* @queryAsync('#first')
|
|
4526
|
+
* first: Promise<HTMLDivElement>;
|
|
4527
|
+
*
|
|
4528
|
+
* render() {
|
|
4529
|
+
* return html`
|
|
4530
|
+
* <div id="first"></div>
|
|
4531
|
+
* <div id="second"></div>
|
|
4532
|
+
* `;
|
|
4533
|
+
* }
|
|
4534
|
+
* }
|
|
4535
|
+
*
|
|
4536
|
+
* // external usage
|
|
4537
|
+
* async doSomethingWithFirst() {
|
|
4538
|
+
* (await aMyElement.first).doSomething();
|
|
4539
|
+
* }
|
|
4540
|
+
* ```
|
|
4541
|
+
* @category Decorator
|
|
4542
|
+
*/
|
|
4543
|
+
function queryAsync(selector) {
|
|
4544
|
+
return ((obj, name) => {
|
|
4545
|
+
return desc(obj, name, {
|
|
4546
|
+
async get() {
|
|
4547
|
+
await this.updateComplete;
|
|
4548
|
+
return this.renderRoot?.querySelector(selector) ?? null;
|
|
4549
|
+
},
|
|
4550
|
+
});
|
|
4551
|
+
});
|
|
4552
|
+
}
|
|
4553
|
+
|
|
4501
4554
|
/**
|
|
4502
4555
|
* @license
|
|
4503
4556
|
* Copyright 2020 Google LLC
|
|
@@ -8201,7 +8254,7 @@
|
|
|
8201
8254
|
}
|
|
8202
8255
|
SgdsElement.styles = [css_248z$a];
|
|
8203
8256
|
|
|
8204
|
-
function
|
|
8257
|
+
function generateId (componentName = "", elementName = "") {
|
|
8205
8258
|
return `id-${Math.random().toString().substring(2, 6)}-sgds-${componentName}-${elementName}`;
|
|
8206
8259
|
}
|
|
8207
8260
|
|
|
@@ -8223,7 +8276,7 @@
|
|
|
8223
8276
|
/** @internal */
|
|
8224
8277
|
this.bsDropdown = null;
|
|
8225
8278
|
/** @internal Unique id generated for the dropdown menu */
|
|
8226
|
-
this.dropdownMenuId =
|
|
8279
|
+
this.dropdownMenuId = generateId("dropdown-menu", "div");
|
|
8227
8280
|
/** @internal Controls auto-flipping of menu */
|
|
8228
8281
|
this.noFlip = false;
|
|
8229
8282
|
/** @internal When true, aligns right edge of menu with right edge of button */
|
|
@@ -8997,9 +9050,9 @@
|
|
|
8997
9050
|
|
|
8998
9051
|
var css_248z$8 = css`.invalid-feedback-container{display:flex;gap:var(--sgds-form-gap-sm)}.invalid-feedback{color:var(--sgds-form-danger-color);font-size:var(--sgds-font-size-1);font-weight:var(--sgds-font-weight-regular)}`;
|
|
8999
9052
|
|
|
9000
|
-
var css_248z$7 = css`.form-text{color:var(--sgds-form-color-subtle);font-size:var(--sgds-font-size-1)}`;
|
|
9053
|
+
var css_248z$7 = css`.form-text{color:var(--sgds-form-color-subtle);font-size:var(--sgds-font-size-1)}.form-text.disabled{opacity:var(--sgds-opacity-50)}`;
|
|
9001
9054
|
|
|
9002
|
-
var css_248z$6 = css`.form-label{margin-bottom:0}.form-
|
|
9055
|
+
var css_248z$6 = css`.form-label{color:var(--sgds-form-color);margin-bottom:0}.form-label.disabled{opacity:var(--sgds-opacity-50)}.form-check-label{color:var(--sgds-form-color)}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:not-allowed}`;
|
|
9003
9056
|
|
|
9004
9057
|
var css_248z$5 = css`.form-control::placeholder{color:var(--sgds-form-color-subtle);font-family:var(--sgds-font-family-brand);font-weight:var(--sgds-font-weight-light);line-height:var(--sgds-line-height-heading)}`;
|
|
9005
9058
|
|
|
@@ -9012,15 +9065,20 @@
|
|
|
9012
9065
|
this.hintText = "";
|
|
9013
9066
|
/** Disables the input. */
|
|
9014
9067
|
this.disabled = false;
|
|
9015
|
-
/** Allows invalidFeedback, invalid and valid styles to be visible with the input */
|
|
9016
|
-
this.hasFeedback = false;
|
|
9017
|
-
/**Feedback text for error state when validated */
|
|
9018
|
-
this.invalidFeedback = "";
|
|
9019
9068
|
/** Marks the component as invalid. Replace the pseudo :invalid selector for absent in custom elements */
|
|
9020
9069
|
this.invalid = false;
|
|
9021
|
-
|
|
9022
|
-
this.
|
|
9023
|
-
|
|
9070
|
+
this._controlId = generateId("input");
|
|
9071
|
+
this._labelId = generateId("label");
|
|
9072
|
+
}
|
|
9073
|
+
/** Programatically sets the invalid state of the input. Pass in boolean value in the argument */
|
|
9074
|
+
setInvalid(bool) {
|
|
9075
|
+
this.invalid = bool;
|
|
9076
|
+
if (bool) {
|
|
9077
|
+
this.emit("sgds-invalid");
|
|
9078
|
+
}
|
|
9079
|
+
else {
|
|
9080
|
+
this.emit("sgds-valid");
|
|
9081
|
+
}
|
|
9024
9082
|
}
|
|
9025
9083
|
}
|
|
9026
9084
|
FormControlElement.styles = [...SgdsElement.styles, css_248z$8, css_248z$7, css_248z$6, css_248z$5];
|
|
@@ -9036,24 +9094,229 @@
|
|
|
9036
9094
|
__decorate([
|
|
9037
9095
|
property({ type: Boolean, reflect: true })
|
|
9038
9096
|
], FormControlElement.prototype, "disabled", void 0);
|
|
9039
|
-
__decorate([
|
|
9040
|
-
property()
|
|
9041
|
-
], FormControlElement.prototype, "min", void 0);
|
|
9042
|
-
__decorate([
|
|
9043
|
-
property()
|
|
9044
|
-
], FormControlElement.prototype, "max", void 0);
|
|
9045
|
-
__decorate([
|
|
9046
|
-
property({ type: Boolean, reflect: true })
|
|
9047
|
-
], FormControlElement.prototype, "hasFeedback", void 0);
|
|
9048
|
-
__decorate([
|
|
9049
|
-
property({ type: String, reflect: true })
|
|
9050
|
-
], FormControlElement.prototype, "invalidFeedback", void 0);
|
|
9051
9097
|
__decorate([
|
|
9052
9098
|
property({ type: Boolean, reflect: true })
|
|
9053
9099
|
], FormControlElement.prototype, "invalid", void 0);
|
|
9054
|
-
|
|
9055
|
-
|
|
9056
|
-
|
|
9100
|
+
|
|
9101
|
+
/**
|
|
9102
|
+
* SGDS custom form validation methods and behaviours
|
|
9103
|
+
*/
|
|
9104
|
+
class InputValidationController {
|
|
9105
|
+
constructor(host, options) {
|
|
9106
|
+
(this.host = host).addController(this);
|
|
9107
|
+
this._internals = this.host.attachInternals();
|
|
9108
|
+
this.options = Object.assign({ setInvalid: (host, value) => {
|
|
9109
|
+
host.invalid = value;
|
|
9110
|
+
}, value: (host) => {
|
|
9111
|
+
return host.value;
|
|
9112
|
+
}, input: (host) => host.input }, options);
|
|
9113
|
+
}
|
|
9114
|
+
hostConnected() {
|
|
9115
|
+
this.host.addEventListener("invalid", e => this.handleInvalid(e));
|
|
9116
|
+
}
|
|
9117
|
+
hostDisconnected() {
|
|
9118
|
+
this.host.removeEventListener("invalid", e => this.handleInvalid(e));
|
|
9119
|
+
}
|
|
9120
|
+
/**
|
|
9121
|
+
* Prevents the native browser error message pop up when reportValidity() called by
|
|
9122
|
+
* associated form or the component's reportValidity during constraint validation
|
|
9123
|
+
* Sets invalid reactive prop to true
|
|
9124
|
+
*/
|
|
9125
|
+
handleInvalid(e) {
|
|
9126
|
+
e.preventDefault();
|
|
9127
|
+
this.options.setInvalid(this.host, true);
|
|
9128
|
+
}
|
|
9129
|
+
/**
|
|
9130
|
+
* Sets invalid to false when invoked and
|
|
9131
|
+
* Updates the ValidityState based on new value, but
|
|
9132
|
+
* does not update invalid reactive prop
|
|
9133
|
+
* @param e
|
|
9134
|
+
*/
|
|
9135
|
+
handleInput(e) {
|
|
9136
|
+
const input = e.target;
|
|
9137
|
+
this.options.setInvalid(this.host, false);
|
|
9138
|
+
this.validateInput(input);
|
|
9139
|
+
}
|
|
9140
|
+
/**
|
|
9141
|
+
* Validate the input's new value after onChange and
|
|
9142
|
+
* update invalid reactive prop
|
|
9143
|
+
* @param e
|
|
9144
|
+
*/
|
|
9145
|
+
handleChange(e) {
|
|
9146
|
+
const input = e.target;
|
|
9147
|
+
this.validateInput(input);
|
|
9148
|
+
this.options.setInvalid(this.host, !this.checkValidity());
|
|
9149
|
+
}
|
|
9150
|
+
get form() {
|
|
9151
|
+
return this._internals.form;
|
|
9152
|
+
}
|
|
9153
|
+
get validity() {
|
|
9154
|
+
return this._internals.validity;
|
|
9155
|
+
}
|
|
9156
|
+
get validationMessage() {
|
|
9157
|
+
return this._internals.validationMessage;
|
|
9158
|
+
}
|
|
9159
|
+
get willValidate() {
|
|
9160
|
+
return this._internals.willValidate;
|
|
9161
|
+
}
|
|
9162
|
+
/**
|
|
9163
|
+
* Checks the validity and updates the invalid reactive prop of form components
|
|
9164
|
+
*/
|
|
9165
|
+
updateInvalidState() {
|
|
9166
|
+
this.options.setInvalid(this.host, !this.checkValidity());
|
|
9167
|
+
}
|
|
9168
|
+
/**
|
|
9169
|
+
* Resets the ValidityState of the control
|
|
9170
|
+
*/
|
|
9171
|
+
resetValidity() {
|
|
9172
|
+
return this._internals.setValidity({});
|
|
9173
|
+
}
|
|
9174
|
+
/**
|
|
9175
|
+
* Reports the validity
|
|
9176
|
+
*/
|
|
9177
|
+
checkValidity() {
|
|
9178
|
+
return this._internals.checkValidity();
|
|
9179
|
+
}
|
|
9180
|
+
/**
|
|
9181
|
+
* Reports the validity with a error popup message
|
|
9182
|
+
*/
|
|
9183
|
+
reportValidity() {
|
|
9184
|
+
return this._internals.reportValidity();
|
|
9185
|
+
}
|
|
9186
|
+
/**
|
|
9187
|
+
* Sets the form control value into FormData,
|
|
9188
|
+
* making the value of control accessible via FormData
|
|
9189
|
+
*/
|
|
9190
|
+
setFormValue() {
|
|
9191
|
+
const value = this.options.value(this.host);
|
|
9192
|
+
this._internals.setFormValue(value);
|
|
9193
|
+
}
|
|
9194
|
+
/**
|
|
9195
|
+
* Updates the ValidityState of the input in form component at current state
|
|
9196
|
+
*/
|
|
9197
|
+
validateInput(input) {
|
|
9198
|
+
/** When the form control is disabled, its always valid */
|
|
9199
|
+
if (this.options.input(this.host).disabled) {
|
|
9200
|
+
return this._internals.setValidity({});
|
|
9201
|
+
}
|
|
9202
|
+
// get the validity of the internal <input>
|
|
9203
|
+
const validState = input.validity;
|
|
9204
|
+
// if the input is invalid, show the correct error
|
|
9205
|
+
if (!validState.valid) {
|
|
9206
|
+
// loop through the error reasons
|
|
9207
|
+
for (const state in validState) {
|
|
9208
|
+
// if there is an error and corresponding attribute holding
|
|
9209
|
+
// the message
|
|
9210
|
+
if (validState[state]) {
|
|
9211
|
+
this.validationError = state.toString();
|
|
9212
|
+
// set the validity error reason and the corresponding
|
|
9213
|
+
// message
|
|
9214
|
+
this._internals.setValidity({ [this.validationError]: true }, input.validationMessage, input);
|
|
9215
|
+
}
|
|
9216
|
+
}
|
|
9217
|
+
}
|
|
9218
|
+
else {
|
|
9219
|
+
this._internals.setValidity({});
|
|
9220
|
+
}
|
|
9221
|
+
}
|
|
9222
|
+
}
|
|
9223
|
+
|
|
9224
|
+
/**
|
|
9225
|
+
* @summary The FormValidationMixin used by the form components
|
|
9226
|
+
* @param superClass
|
|
9227
|
+
* @returns
|
|
9228
|
+
*/
|
|
9229
|
+
const SgdsFormValidatorMixin = (superClass) => {
|
|
9230
|
+
class ToBeValidatedElement extends superClass {
|
|
9231
|
+
constructor() {
|
|
9232
|
+
super(...arguments);
|
|
9233
|
+
this._isTouched = false;
|
|
9234
|
+
}
|
|
9235
|
+
connectedCallback() {
|
|
9236
|
+
super.connectedCallback();
|
|
9237
|
+
this.inputValidationController = new InputValidationController(this);
|
|
9238
|
+
}
|
|
9239
|
+
async firstUpdated(changedProperties) {
|
|
9240
|
+
super.firstUpdated(changedProperties);
|
|
9241
|
+
/* Either input or sgds-input. For example, quantity-toggle uses sgds-input */
|
|
9242
|
+
this.input =
|
|
9243
|
+
this.shadowRoot.querySelector("input") || (await this.sgdsInput) || this.shadowRoot.querySelector("textarea");
|
|
9244
|
+
this._mixinValidate(this.input);
|
|
9245
|
+
}
|
|
9246
|
+
/**
|
|
9247
|
+
* Native lifecycle of Form-Associated Custom Element Callbacks
|
|
9248
|
+
*/
|
|
9249
|
+
formResetCallback() {
|
|
9250
|
+
if (this._mixinResetFormControl) {
|
|
9251
|
+
this._mixinResetFormControl();
|
|
9252
|
+
}
|
|
9253
|
+
else {
|
|
9254
|
+
this.value = this.defaultValue;
|
|
9255
|
+
this._mixinResetValidity(this.input);
|
|
9256
|
+
}
|
|
9257
|
+
this._mixinSetFormValue();
|
|
9258
|
+
}
|
|
9259
|
+
/**
|
|
9260
|
+
*
|
|
9261
|
+
* Methods use by classes using this mixin
|
|
9262
|
+
*/
|
|
9263
|
+
/**
|
|
9264
|
+
* OnChange of form component
|
|
9265
|
+
* 1. Make value of control accessible via FormData
|
|
9266
|
+
* 2. Run change handler
|
|
9267
|
+
*/
|
|
9268
|
+
_mixinHandleChange(e) {
|
|
9269
|
+
this._mixinSetFormValue();
|
|
9270
|
+
this.inputValidationController.handleChange(e);
|
|
9271
|
+
}
|
|
9272
|
+
/**
|
|
9273
|
+
* OnChange of form component
|
|
9274
|
+
* 1. Make value of control accessible via FormData
|
|
9275
|
+
* 2. Run input handler
|
|
9276
|
+
*/
|
|
9277
|
+
_mixinHandleInputChange(e) {
|
|
9278
|
+
this._mixinSetFormValue();
|
|
9279
|
+
this.inputValidationController.handleInput(e);
|
|
9280
|
+
}
|
|
9281
|
+
/**
|
|
9282
|
+
* During form resetting,
|
|
9283
|
+
* 1. ValidityState is reset
|
|
9284
|
+
* 2. invalid reactive prop is updated after the reset
|
|
9285
|
+
* 3. Revalidates the ValidityState (but do not update invalid prop)
|
|
9286
|
+
* to prepare for the next validity check
|
|
9287
|
+
* 4. Reset touched state to false for a pristine form
|
|
9288
|
+
*/
|
|
9289
|
+
_mixinResetValidity(input) {
|
|
9290
|
+
this.inputValidationController.resetValidity();
|
|
9291
|
+
this.inputValidationController.updateInvalidState();
|
|
9292
|
+
this.inputValidationController.validateInput(input);
|
|
9293
|
+
this._isTouched ? (this._isTouched = false) : null;
|
|
9294
|
+
}
|
|
9295
|
+
_mixinValidate(input) {
|
|
9296
|
+
this.inputValidationController.validateInput(input);
|
|
9297
|
+
}
|
|
9298
|
+
_mixinSetFormValue() {
|
|
9299
|
+
this.inputValidationController.setFormValue();
|
|
9300
|
+
}
|
|
9301
|
+
_mixinCheckValidity() {
|
|
9302
|
+
return this.inputValidationController.checkValidity();
|
|
9303
|
+
}
|
|
9304
|
+
_mixinReportValidity() {
|
|
9305
|
+
return this.inputValidationController.reportValidity();
|
|
9306
|
+
}
|
|
9307
|
+
_mixinGetValidity() {
|
|
9308
|
+
return this.inputValidationController.validity;
|
|
9309
|
+
}
|
|
9310
|
+
_mixinGetValidationMessage() {
|
|
9311
|
+
return this.inputValidationController.validationMessage;
|
|
9312
|
+
}
|
|
9313
|
+
}
|
|
9314
|
+
ToBeValidatedElement.formAssociated = true;
|
|
9315
|
+
__decorate([
|
|
9316
|
+
queryAsync("sgds-input")
|
|
9317
|
+
], ToBeValidatedElement.prototype, "sgdsInput", void 0);
|
|
9318
|
+
return ToBeValidatedElement;
|
|
9319
|
+
};
|
|
9057
9320
|
|
|
9058
9321
|
var css_248z$4 = css`:host{--sgds-spinner-bg:var(--sgds-primary-bg);display:inline-flex}:host([variant=neutral]){--sgds-spinner-bg:var(--sgds-neutral-color-emphasis)}.spinner-wrapper{align-items:center;display:flex;flex-direction:column;gap:var(--sgds-gap-2-xs)}.spinner{animation:spinner .75s linear infinite;border-radius:50%;border-right:.25em solid var(--sgds-alternate-bg);border:.25em solid var(--sgds-alternate-bg);border-right-color:var(--sgds-spinner-bg);color:var(--sgds-spinner-color);display:inline-flex;height:var(--sgds-dimension-32);width:var(--sgds-dimension-32)}.spinner-sm{height:var(--sgds-dimension-24);width:var(--sgds-dimension-24)}.spinner-lg{height:var(--sgds-dimension-48);width:var(--sgds-dimension-48)}.spinner-label{font-size:var(--sgds-font-size-1)}@media (prefers-reduced-motion:reduce){.spinner{animation-duration:1.5s}}
|
|
9059
9322
|
|
|
@@ -9100,136 +9363,6 @@
|
|
|
9100
9363
|
property({ reflect: true, type: String })
|
|
9101
9364
|
], SgdsSpinner.prototype, "label", void 0);
|
|
9102
9365
|
|
|
9103
|
-
const reportValidityOverloads = new WeakMap();
|
|
9104
|
-
class FormSubmitController {
|
|
9105
|
-
constructor(host, options) {
|
|
9106
|
-
(this.host = host).addController(this);
|
|
9107
|
-
this.options = Object.assign({ form: (input) => {
|
|
9108
|
-
return input.closest("form");
|
|
9109
|
-
}, name: (input) => input.name, value: (input) => input.value, defaultValue: (input) => input.defaultValue, disabled: (input) => input.disabled, reportValidity: (input) => {
|
|
9110
|
-
return typeof input.reportValidity === "function" ? input.reportValidity() : true;
|
|
9111
|
-
}, setValue: (input, value) => {
|
|
9112
|
-
input.value = value;
|
|
9113
|
-
} }, options);
|
|
9114
|
-
this.handleFormData = this.handleFormData.bind(this);
|
|
9115
|
-
this.handleFormSubmit = this.handleFormSubmit.bind(this);
|
|
9116
|
-
this.handleFormReset = this.handleFormReset.bind(this);
|
|
9117
|
-
this.reportFormValidity = this.reportFormValidity.bind(this);
|
|
9118
|
-
}
|
|
9119
|
-
hostConnected() {
|
|
9120
|
-
this.form = this.options.form(this.host);
|
|
9121
|
-
if (this.form) {
|
|
9122
|
-
this.form.addEventListener("formdata", this.handleFormData);
|
|
9123
|
-
this.form.addEventListener("submit", this.handleFormSubmit);
|
|
9124
|
-
this.form.addEventListener("reset", this.handleFormReset);
|
|
9125
|
-
// Overload the form's reportValidity() method so it looks at Shoelace form controls
|
|
9126
|
-
if (!reportValidityOverloads.has(this.form)) {
|
|
9127
|
-
reportValidityOverloads.set(this.form, this.form.reportValidity);
|
|
9128
|
-
this.form.reportValidity = () => this.reportFormValidity();
|
|
9129
|
-
}
|
|
9130
|
-
}
|
|
9131
|
-
}
|
|
9132
|
-
hostDisconnected() {
|
|
9133
|
-
if (this.form) {
|
|
9134
|
-
this.form.removeEventListener("formdata", this.handleFormData);
|
|
9135
|
-
this.form.removeEventListener("submit", this.handleFormSubmit);
|
|
9136
|
-
this.form.removeEventListener("reset", this.handleFormReset);
|
|
9137
|
-
// Remove the overload and restore the original method
|
|
9138
|
-
if (reportValidityOverloads.has(this.form)) {
|
|
9139
|
-
this.form.reportValidity = reportValidityOverloads.get(this.form);
|
|
9140
|
-
reportValidityOverloads.delete(this.form);
|
|
9141
|
-
}
|
|
9142
|
-
this.form = undefined;
|
|
9143
|
-
}
|
|
9144
|
-
}
|
|
9145
|
-
handleFormData(event) {
|
|
9146
|
-
const disabled = this.options.disabled(this.host);
|
|
9147
|
-
const name = this.options.name(this.host);
|
|
9148
|
-
const value = this.options.value(this.host);
|
|
9149
|
-
if (!disabled && typeof name === "string" && typeof value !== "undefined") {
|
|
9150
|
-
if (Array.isArray(value)) {
|
|
9151
|
-
value.forEach(val => {
|
|
9152
|
-
event.formData.append(name, val.toString());
|
|
9153
|
-
});
|
|
9154
|
-
}
|
|
9155
|
-
else {
|
|
9156
|
-
event.formData.append(name, value.toString());
|
|
9157
|
-
}
|
|
9158
|
-
}
|
|
9159
|
-
}
|
|
9160
|
-
handleFormSubmit(event) {
|
|
9161
|
-
const disabled = this.options.disabled(this.host);
|
|
9162
|
-
const reportValidity = this.options.reportValidity;
|
|
9163
|
-
if (this.form && !this.form.noValidate && !disabled && !reportValidity(this.host)) {
|
|
9164
|
-
event.preventDefault();
|
|
9165
|
-
event.stopImmediatePropagation();
|
|
9166
|
-
}
|
|
9167
|
-
}
|
|
9168
|
-
handleFormReset() {
|
|
9169
|
-
this.options.setValue(this.host, this.options.defaultValue(this.host));
|
|
9170
|
-
}
|
|
9171
|
-
reportFormValidity() {
|
|
9172
|
-
//
|
|
9173
|
-
// Shoelace form controls work hard to act like regular form controls. They support the Constraint Validation API
|
|
9174
|
-
// and its associated methods such as setCustomValidity() and reportValidity(). However, the HTMLFormElement also
|
|
9175
|
-
// has a reportValidity() method that will trigger validation on all child controls. Since we're not yet using
|
|
9176
|
-
// ElementInternals, we need to overload this method so it looks for any element with the reportValidity() method.
|
|
9177
|
-
//
|
|
9178
|
-
// We preserve the original method in a WeakMap, but we don't call it from the overload because that would trigger
|
|
9179
|
-
// validations in an unexpected order. When the element disconnects, we revert to the original behavior. This won't
|
|
9180
|
-
// be necessary once we can use ElementInternals.
|
|
9181
|
-
//
|
|
9182
|
-
// Note that we're also honoring the form's novalidate attribute.
|
|
9183
|
-
//
|
|
9184
|
-
if (this.form && !this.form.noValidate) {
|
|
9185
|
-
// This seems sloppy, but checking all elements will cover native inputs, Shoelace inputs, and other custom
|
|
9186
|
-
// elements that support the constraint validation API.
|
|
9187
|
-
const elements = this.form.querySelectorAll("*");
|
|
9188
|
-
for (const element of elements) {
|
|
9189
|
-
if (typeof element.reportValidity === "function") {
|
|
9190
|
-
if (!element.reportValidity()) {
|
|
9191
|
-
return false;
|
|
9192
|
-
}
|
|
9193
|
-
}
|
|
9194
|
-
}
|
|
9195
|
-
}
|
|
9196
|
-
return true;
|
|
9197
|
-
}
|
|
9198
|
-
doAction(type, invoker) {
|
|
9199
|
-
if (this.form) {
|
|
9200
|
-
const button = document.createElement("button");
|
|
9201
|
-
button.type = type;
|
|
9202
|
-
button.style.position = "absolute";
|
|
9203
|
-
button.style.width = "0";
|
|
9204
|
-
button.style.height = "0";
|
|
9205
|
-
button.style.clipPath = "inset(50%)";
|
|
9206
|
-
button.style.overflow = "hidden";
|
|
9207
|
-
button.style.whiteSpace = "nowrap";
|
|
9208
|
-
// Pass form attributes through to the temporary button
|
|
9209
|
-
if (invoker) {
|
|
9210
|
-
["formaction", "formmethod", "formnovalidate", "formtarget"].forEach(attr => {
|
|
9211
|
-
if (invoker.hasAttribute(attr)) {
|
|
9212
|
-
button.setAttribute(attr, invoker.getAttribute(attr));
|
|
9213
|
-
}
|
|
9214
|
-
});
|
|
9215
|
-
}
|
|
9216
|
-
this.form.append(button);
|
|
9217
|
-
button.click();
|
|
9218
|
-
button.remove();
|
|
9219
|
-
}
|
|
9220
|
-
}
|
|
9221
|
-
/** Resets the form, restoring all the control to their default value */
|
|
9222
|
-
reset(invoker) {
|
|
9223
|
-
this.doAction("reset", invoker);
|
|
9224
|
-
}
|
|
9225
|
-
/** Submits the form, triggering validation and form data injection. */
|
|
9226
|
-
submit(invoker) {
|
|
9227
|
-
// Calling form.submit() bypasses the submit event and constraint validation. To prevent this, we can inject a
|
|
9228
|
-
// native submit button into the form, "click" it, then remove it to simulate a standard form submission.
|
|
9229
|
-
this.doAction("submit", invoker);
|
|
9230
|
-
}
|
|
9231
|
-
}
|
|
9232
|
-
|
|
9233
9366
|
var css_248z$2 = css`.form-control-container{display:flex;flex-direction:column;gap:var(--sgds-form-gap-md)}.form-control-container.disabled{opacity:var(--sgds-opacity-50)}.form-control-group{align-items:center;background-color:var(--sgds-form-bg);border:var(--sgds-form-border-width-default) solid var(--sgds-form-border-color);border-radius:var(--sgds-form-border-radius-md);display:flex;gap:var(--sgds-form-gap-md);height:var(--sgds-dimension-48);justify-content:center;min-width:var(--sgds-dimension-256);padding:0 var(--sgds-form-padding-x);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:-webkit-fill-available;width:-moz-available}.form-control{appearance:none;background-clip:padding-box;background:none;border:none;color:var(--sgds-form-color);display:block;flex-grow:1;font-size:var(--sgds-font-size-2);line-height:var(--sgds-line-height-heading);outline:none;padding:0}.form-control-group>.form-control:focus{z-index:3}@media (prefers-reduced-motion:reduce){.form-control-group{transition:none}}.form-control-group.readonly{border-color:var(--sgds-form-border-color-muted)}.form-control-group:not(.disabled):not(.is-invalid):hover{border:var(--sgds-form-border-width-thick) solid var(--sgds-form-border-color-emphasis)}.form-control-group:not(.disabled):not(.is-invalid):focus,.form-control-group:not(.disabled):not(.is-invalid):focus-within{border:var(--sgds-form-border-width-thick) solid var(--sgds-form-border-color-emphasis);box-shadow:var(--sgds-form-box-shadow-focus);outline:0}.form-control-group.is-invalid{border:var(--sgds-form-border-width-thick) solid var(--sgds-form-danger-border-color)}.form-control-group.disabled{background-color:var(--sgds-form-bg-muted)}:host(.quantity-toggle) input::-webkit-inner-spin-button{appearance:none;margin:0}:host(.quantity-toggle) input{text-align:center}.form-control-icon{align-items:center;display:flex;height:var(--sgds-form-icon-size-lg);justify-content:center;width:var(--sgds-form-icon-size-lg)}.form-control-prefix,.form-control-suffix{color:var(--sgds-form-color-subtle)}.form-control-group.quantity-toggle{padding:0}`;
|
|
9234
9367
|
|
|
9235
9368
|
/**
|
|
@@ -9239,14 +9372,13 @@
|
|
|
9239
9372
|
* @event sgds-input - Emitted when the control receives input and its value changes.
|
|
9240
9373
|
* @event sgds-focus - Emitted when input is in focus.
|
|
9241
9374
|
* @event sgds-blur - Emitted when input is not in focus.
|
|
9375
|
+
* @event sgds-invalid - Emitted when input is invalid
|
|
9376
|
+
* @event sgds-valid - Emitted when input is valid
|
|
9242
9377
|
*
|
|
9243
9378
|
*/
|
|
9244
|
-
class SgdsInput extends FormControlElement {
|
|
9379
|
+
class SgdsInput extends SgdsFormValidatorMixin(ScopedElementsMixin(FormControlElement)) {
|
|
9245
9380
|
constructor() {
|
|
9246
9381
|
super(...arguments);
|
|
9247
|
-
/**@internal */
|
|
9248
|
-
this.formSubmitController = new FormSubmitController(this);
|
|
9249
|
-
/** The type of input which works the same as HTMLInputElement */
|
|
9250
9382
|
this.type = "text";
|
|
9251
9383
|
/** The input's placeholder text. */
|
|
9252
9384
|
this.placeholder = "placeholder";
|
|
@@ -9254,16 +9386,17 @@
|
|
|
9254
9386
|
this.autofocus = false;
|
|
9255
9387
|
/** Makes the input readonly. */
|
|
9256
9388
|
this.readonly = false;
|
|
9257
|
-
/**The input's value attribute. */
|
|
9258
|
-
this.value = "";
|
|
9259
9389
|
/**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. */
|
|
9260
9390
|
this.defaultValue = "";
|
|
9261
9391
|
/** Marks the component as valid. */
|
|
9262
9392
|
this.valid = false;
|
|
9263
9393
|
/** Marks the component as loading. */
|
|
9264
9394
|
this.loading = false;
|
|
9265
|
-
|
|
9266
|
-
this.
|
|
9395
|
+
/** Makes the input a required field. */
|
|
9396
|
+
this.required = false;
|
|
9397
|
+
/**The input's value attribute. */
|
|
9398
|
+
this.value = "";
|
|
9399
|
+
this._isTouched = false;
|
|
9267
9400
|
}
|
|
9268
9401
|
/**@internal */
|
|
9269
9402
|
static get scopedElements() {
|
|
@@ -9279,60 +9412,79 @@
|
|
|
9279
9412
|
blur() {
|
|
9280
9413
|
this.input.blur();
|
|
9281
9414
|
}
|
|
9282
|
-
/** Checks for validity and shows the browser's validation message if the control is invalid. */
|
|
9283
|
-
reportValidity() {
|
|
9284
|
-
return this.input.reportValidity();
|
|
9285
|
-
}
|
|
9286
|
-
/** Sets a custom validation message. Pass an empty string to restore validity */
|
|
9287
|
-
setCustomValidity(err) {
|
|
9288
|
-
return this.input.setCustomValidity(err);
|
|
9289
|
-
}
|
|
9290
9415
|
/** Programatically sets the invalid state of the input. Pass in boolean value in the argument */
|
|
9291
9416
|
setInvalid(bool) {
|
|
9292
9417
|
this.invalid = bool;
|
|
9418
|
+
if (bool) {
|
|
9419
|
+
this.emit("sgds-invalid");
|
|
9420
|
+
}
|
|
9421
|
+
else {
|
|
9422
|
+
this.emit("sgds-valid");
|
|
9423
|
+
}
|
|
9293
9424
|
}
|
|
9294
|
-
|
|
9295
|
-
|
|
9425
|
+
/**
|
|
9426
|
+
* Checks for validity. Under the hood, HTMLFormElement's reportValidity method calls this method to check for component's validity state
|
|
9427
|
+
* Note that the native error popup is prevented for SGDS form components by default. Instead the validation message shows up in the feedback container of SgdsInput
|
|
9428
|
+
*/
|
|
9429
|
+
reportValidity() {
|
|
9430
|
+
return this._mixinReportValidity();
|
|
9296
9431
|
}
|
|
9297
|
-
|
|
9298
|
-
|
|
9299
|
-
|
|
9432
|
+
/**
|
|
9433
|
+
* Checks for validity without any native error popup message
|
|
9434
|
+
*/
|
|
9435
|
+
checkValidity() {
|
|
9436
|
+
return this._mixinCheckValidity();
|
|
9437
|
+
}
|
|
9438
|
+
/**
|
|
9439
|
+
* Returns the ValidityState object
|
|
9440
|
+
*/
|
|
9441
|
+
get validity() {
|
|
9442
|
+
return this._mixinGetValidity();
|
|
9443
|
+
}
|
|
9444
|
+
/**
|
|
9445
|
+
* Returns the validation message based on the ValidityState
|
|
9446
|
+
*/
|
|
9447
|
+
get validationMessage() {
|
|
9448
|
+
return this._mixinGetValidationMessage();
|
|
9300
9449
|
}
|
|
9301
9450
|
_handleFocus() {
|
|
9302
9451
|
this.emit("sgds-focus");
|
|
9303
9452
|
}
|
|
9304
9453
|
_handleBlur() {
|
|
9454
|
+
this._isTouched = true;
|
|
9305
9455
|
this.emit("sgds-blur");
|
|
9306
9456
|
}
|
|
9307
|
-
|
|
9308
|
-
|
|
9309
|
-
|
|
9310
|
-
|
|
9311
|
-
|
|
9312
|
-
|
|
9313
|
-
|
|
9314
|
-
|
|
9315
|
-
|
|
9316
|
-
|
|
9317
|
-
|
|
9457
|
+
_handleClick() {
|
|
9458
|
+
this.focus();
|
|
9459
|
+
}
|
|
9460
|
+
_handleChange(e) {
|
|
9461
|
+
this.value = this.input.value;
|
|
9462
|
+
this.emit("sgds-change");
|
|
9463
|
+
super._mixinHandleChange(e);
|
|
9464
|
+
}
|
|
9465
|
+
_handleInputChange(e) {
|
|
9466
|
+
this.value = this.input.value;
|
|
9467
|
+
this.emit("sgds-input");
|
|
9468
|
+
super._mixinHandleInputChange(e);
|
|
9469
|
+
}
|
|
9470
|
+
/** @internal */
|
|
9471
|
+
_handleIsTouched() {
|
|
9472
|
+
if (this._isTouched) {
|
|
9473
|
+
this.setInvalid(!this._mixinCheckValidity());
|
|
9318
9474
|
}
|
|
9319
9475
|
}
|
|
9320
9476
|
_handleDisabledChange() {
|
|
9321
9477
|
// Disabled form controls are always valid, so we need to recheck validity when the state changes
|
|
9322
|
-
this.
|
|
9323
|
-
this.invalid = !this.input.checkValidity();
|
|
9324
|
-
}
|
|
9325
|
-
_handleValueChange() {
|
|
9326
|
-
this.invalid = !this.input.checkValidity();
|
|
9478
|
+
this.setInvalid(false);
|
|
9327
9479
|
}
|
|
9328
9480
|
_renderInput() {
|
|
9481
|
+
const wantFeedbackStyle = this.hasFeedback === "both" || this.hasFeedback === "style";
|
|
9329
9482
|
return html `
|
|
9330
9483
|
<div
|
|
9331
9484
|
class="form-control-group ${classMap({
|
|
9332
9485
|
disabled: this.disabled,
|
|
9333
9486
|
readonly: this.readonly,
|
|
9334
|
-
"is-invalid": this.invalid &&
|
|
9335
|
-
"quantity-toggle": this.classList.contains("quantity-toggle")
|
|
9487
|
+
"is-invalid": this.invalid && wantFeedbackStyle
|
|
9336
9488
|
})}"
|
|
9337
9489
|
@click=${this._handleClick}
|
|
9338
9490
|
>
|
|
@@ -9341,7 +9493,7 @@
|
|
|
9341
9493
|
<input
|
|
9342
9494
|
class="form-control"
|
|
9343
9495
|
type=${this.type}
|
|
9344
|
-
id=${this.
|
|
9496
|
+
id=${this._controlId}
|
|
9345
9497
|
name=${ifDefined(this.name)}
|
|
9346
9498
|
placeholder=${ifDefined(this.placeholder)}
|
|
9347
9499
|
aria-invalid=${this.invalid ? "true" : "false"}
|
|
@@ -9356,15 +9508,14 @@
|
|
|
9356
9508
|
min=${ifDefined(this.min)}
|
|
9357
9509
|
max=${ifDefined(this.max)}
|
|
9358
9510
|
step=${ifDefined(this.step)}
|
|
9359
|
-
@input=${() => this.
|
|
9360
|
-
@change=${() => this._handleChange(
|
|
9361
|
-
@keydown=${this._handleKeyDown}
|
|
9511
|
+
@input=${(e) => this._handleInputChange(e)}
|
|
9512
|
+
@change=${(e) => this._handleChange(e)}
|
|
9362
9513
|
@invalid=${() => this.setInvalid(true)}
|
|
9363
9514
|
@focus=${this._handleFocus}
|
|
9364
9515
|
@blur=${this._handleBlur}
|
|
9365
|
-
aria-describedby=${ifDefined(this.invalid && this.hasFeedback ? `${this.
|
|
9366
|
-
aria-labelledby="${this.
|
|
9367
|
-
? `${this.
|
|
9516
|
+
aria-describedby=${ifDefined(this.invalid && this.hasFeedback ? `${this._controlId}-invalid` : undefined)}
|
|
9517
|
+
aria-labelledby="${this._labelId} ${this._controlId}Help ${this.invalid && this.hasFeedback
|
|
9518
|
+
? `${this._controlId}-invalid`
|
|
9368
9519
|
: ""}"
|
|
9369
9520
|
/>
|
|
9370
9521
|
${this.loading ? html `<sgds-spinner size="sm"></sgds-spinner>` : nothing}
|
|
@@ -9381,7 +9532,8 @@
|
|
|
9381
9532
|
`;
|
|
9382
9533
|
}
|
|
9383
9534
|
_renderFeedback() {
|
|
9384
|
-
|
|
9535
|
+
const wantFeedbackText = this.hasFeedback === "both" || this.hasFeedback === "text";
|
|
9536
|
+
return this.invalid && wantFeedbackText
|
|
9385
9537
|
? html ` <div class="invalid-feedback-container">
|
|
9386
9538
|
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20" fill="none">
|
|
9387
9539
|
<path
|
|
@@ -9389,15 +9541,17 @@
|
|
|
9389
9541
|
fill="#B90000"
|
|
9390
9542
|
/>
|
|
9391
9543
|
</svg>
|
|
9392
|
-
<div id="${this.
|
|
9544
|
+
<div id="${this._controlId}-invalid" class="invalid-feedback">
|
|
9545
|
+
${this.invalidFeedback ? this.invalidFeedback : this.input.validationMessage}
|
|
9546
|
+
</div>
|
|
9393
9547
|
</div>`
|
|
9394
9548
|
: html `${this._renderHintText()}`;
|
|
9395
9549
|
}
|
|
9396
9550
|
_renderLabel() {
|
|
9397
9551
|
const labelTemplate = html `
|
|
9398
9552
|
<label
|
|
9399
|
-
for=${this.
|
|
9400
|
-
id=${this.
|
|
9553
|
+
for=${this._controlId}
|
|
9554
|
+
id=${this._labelId}
|
|
9401
9555
|
class=${classMap({
|
|
9402
9556
|
"form-label": true,
|
|
9403
9557
|
required: this.required
|
|
@@ -9408,7 +9562,7 @@
|
|
|
9408
9562
|
return this.label && labelTemplate;
|
|
9409
9563
|
}
|
|
9410
9564
|
_renderHintText() {
|
|
9411
|
-
const hintTextTemplate = html ` <div id="${this.
|
|
9565
|
+
const hintTextTemplate = html ` <div id="${this._controlId}Help" class="form-text">${this.hintText}</div> `;
|
|
9412
9566
|
return this.hintText && hintTextTemplate;
|
|
9413
9567
|
}
|
|
9414
9568
|
render() {
|
|
@@ -9423,10 +9577,7 @@
|
|
|
9423
9577
|
`;
|
|
9424
9578
|
}
|
|
9425
9579
|
}
|
|
9426
|
-
SgdsInput.styles = [...FormControlElement.styles, css_248z$2];
|
|
9427
|
-
__decorate([
|
|
9428
|
-
query("input.form-control")
|
|
9429
|
-
], SgdsInput.prototype, "input", void 0);
|
|
9580
|
+
SgdsInput.styles = [...FormControlElement.styles, css_248z$5, css_248z$2];
|
|
9430
9581
|
__decorate([
|
|
9431
9582
|
property({ reflect: true })
|
|
9432
9583
|
], SgdsInput.prototype, "type", void 0);
|
|
@@ -9445,6 +9596,12 @@
|
|
|
9445
9596
|
__decorate([
|
|
9446
9597
|
property({ type: Number, reflect: true })
|
|
9447
9598
|
], SgdsInput.prototype, "maxlength", void 0);
|
|
9599
|
+
__decorate([
|
|
9600
|
+
property()
|
|
9601
|
+
], SgdsInput.prototype, "min", void 0);
|
|
9602
|
+
__decorate([
|
|
9603
|
+
property()
|
|
9604
|
+
], SgdsInput.prototype, "max", void 0);
|
|
9448
9605
|
__decorate([
|
|
9449
9606
|
property({ type: String, reflect: true })
|
|
9450
9607
|
], SgdsInput.prototype, "placeholder", void 0);
|
|
@@ -9461,8 +9618,11 @@
|
|
|
9461
9618
|
property()
|
|
9462
9619
|
], SgdsInput.prototype, "step", void 0);
|
|
9463
9620
|
__decorate([
|
|
9464
|
-
property({ reflect: true })
|
|
9465
|
-
], SgdsInput.prototype, "
|
|
9621
|
+
property({ type: String, reflect: true })
|
|
9622
|
+
], SgdsInput.prototype, "hasFeedback", void 0);
|
|
9623
|
+
__decorate([
|
|
9624
|
+
property({ type: String, reflect: true })
|
|
9625
|
+
], SgdsInput.prototype, "invalidFeedback", void 0);
|
|
9466
9626
|
__decorate([
|
|
9467
9627
|
defaultValue()
|
|
9468
9628
|
], SgdsInput.prototype, "defaultValue", void 0);
|
|
@@ -9472,12 +9632,21 @@
|
|
|
9472
9632
|
__decorate([
|
|
9473
9633
|
property({ type: Boolean, reflect: true })
|
|
9474
9634
|
], SgdsInput.prototype, "loading", void 0);
|
|
9635
|
+
__decorate([
|
|
9636
|
+
property({ type: Boolean, reflect: true })
|
|
9637
|
+
], SgdsInput.prototype, "required", void 0);
|
|
9638
|
+
__decorate([
|
|
9639
|
+
property({ reflect: true })
|
|
9640
|
+
], SgdsInput.prototype, "value", void 0);
|
|
9641
|
+
__decorate([
|
|
9642
|
+
state()
|
|
9643
|
+
], SgdsInput.prototype, "_isTouched", void 0);
|
|
9644
|
+
__decorate([
|
|
9645
|
+
watch("_isTouched", { waitUntilFirstUpdate: true })
|
|
9646
|
+
], SgdsInput.prototype, "_handleIsTouched", null);
|
|
9475
9647
|
__decorate([
|
|
9476
9648
|
watch("disabled", { waitUntilFirstUpdate: true })
|
|
9477
9649
|
], SgdsInput.prototype, "_handleDisabledChange", null);
|
|
9478
|
-
__decorate([
|
|
9479
|
-
watch("value", { waitUntilFirstUpdate: true })
|
|
9480
|
-
], SgdsInput.prototype, "_handleValueChange", null);
|
|
9481
9650
|
|
|
9482
9651
|
var css_248z$1 = css`.sgds.combobox .form-control-icon{align-items:center;display:flex;font-size:1rem;height:3rem;justify-content:center;position:absolute;width:3rem;z-index:4}.sgds.combobox{align-items:stretch;display:flex;flex-wrap:wrap;justify-content:flex-end;position:relative;width:-webkit-fill-available;width:-moz-available}.sgds.combobox .dropdown-toggle{width:100%}.sgds.combobox>.dropdown-menu{min-width:100%}.form-control-icon{bottom:0}`;
|
|
9483
9652
|
|