@openedx/paragon 23.4.5 → 23.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/DataTable/hooks.js +48 -2
  2. package/dist/DataTable/hooks.js.map +1 -1
  3. package/dist/DataTable/index.js +18 -9
  4. package/dist/DataTable/index.js.map +1 -1
  5. package/dist/DataTable/selection/ControlledSelectionStatus.js +7 -17
  6. package/dist/DataTable/selection/ControlledSelectionStatus.js.map +1 -1
  7. package/dist/DataTable/selection/data/actions.js +5 -0
  8. package/dist/DataTable/selection/data/reducer.js +12 -1
  9. package/dist/Form/_index.scss +4 -1
  10. package/dist/Modal/AlertModal.js.map +1 -1
  11. package/dist/Modal/ModalDialog.d.ts +1 -1
  12. package/dist/Modal/ModalDialog.js +1 -1
  13. package/dist/Modal/ModalDialog.js.map +1 -1
  14. package/dist/Modal/_ModalDialog.scss +1 -1
  15. package/dist/Toast/ToastContainer.d.ts +6 -0
  16. package/dist/Toast/ToastContainer.js +19 -29
  17. package/dist/Toast/ToastContainer.js.map +1 -1
  18. package/dist/Toast/index.d.ts +59 -0
  19. package/dist/Toast/index.js.map +1 -1
  20. package/dist/Toast/index.scss +2 -2
  21. package/dist/core.css +6 -4
  22. package/dist/core.css.map +1 -1
  23. package/dist/core.min.css +1 -1
  24. package/dist/index.d.ts +1 -1
  25. package/dist/index.js +23 -23
  26. package/dist/theme-urls.json +6 -6
  27. package/package.json +1 -1
  28. package/src/DataTable/README.md +111 -78
  29. package/src/DataTable/hooks.jsx +55 -2
  30. package/src/DataTable/index.jsx +28 -16
  31. package/src/DataTable/selection/ControlledSelectionStatus.jsx +8 -23
  32. package/src/DataTable/selection/data/actions.js +5 -0
  33. package/src/DataTable/selection/data/reducer.js +12 -1
  34. package/src/DataTable/selection/tests/ControlledSelectionStatus.test.jsx +4 -23
  35. package/src/DataTable/selection/tests/reducer.test.js +4 -0
  36. package/src/DataTable/tests/DataTable.test.jsx +99 -3
  37. package/src/Form/_index.scss +4 -1
  38. package/src/Modal/AlertModal.jsx +5 -5
  39. package/src/Modal/ModalDialog.tsx +2 -2
  40. package/src/Modal/_ModalDialog.scss +1 -1
  41. package/src/Modal/alert-modal.mdx +4 -0
  42. package/src/Modal/fullscreen-modal.mdx +1 -0
  43. package/src/Modal/marketing-modal.mdx +1 -0
  44. package/src/Modal/modal-dialog.mdx +2 -2
  45. package/src/Modal/standard-modal.mdx +1 -0
  46. package/src/Modal/tests/AlertModal.test.jsx +4 -0
  47. package/src/Modal/tests/ModalDialog.test.tsx +3 -2
  48. package/src/Toast/README.md +4 -4
  49. package/src/Toast/{Toast.test.jsx → Toast.test.tsx} +23 -13
  50. package/src/Toast/ToastContainer.tsx +30 -0
  51. package/src/Toast/index.scss +2 -2
  52. package/src/Toast/{index.jsx → index.tsx} +27 -6
  53. package/src/index.d.ts +1 -1
  54. package/src/index.js +23 -23
  55. package/src/Toast/ToastContainer.jsx +0 -40
@@ -1,34 +1,24 @@
1
- import React from 'react';
1
+ import { useEffect, useState } from 'react';
2
2
  import ReactDOM from 'react-dom';
3
- import PropTypes from 'prop-types';
4
- class ToastContainer extends React.Component {
5
- constructor(props) {
6
- super(props);
7
- this.toastRootName = 'toast-root';
8
- if (typeof document === 'undefined') {
9
- this.rootElement = null;
10
- } else if (document.getElementById(this.toastRootName)) {
11
- this.rootElement = document.getElementById(this.toastRootName);
12
- } else {
13
- const rootElement = document.createElement('div');
14
- rootElement.setAttribute('id', this.toastRootName);
15
- rootElement.setAttribute('class', 'toast-container');
16
- rootElement.setAttribute('role', 'alert');
17
- rootElement.setAttribute('aria-live', 'polite');
18
- rootElement.setAttribute('aria-atomic', 'true');
19
- this.rootElement = document.body.appendChild(rootElement);
3
+ const TOAST_ROOT_ID = 'toast-root';
4
+ function ToastContainer(_ref) {
5
+ let {
6
+ children
7
+ } = _ref;
8
+ const [rootElement, setRootElement] = useState(null);
9
+ useEffect(() => {
10
+ if (typeof document !== 'undefined') {
11
+ let existingElement = document.getElementById(TOAST_ROOT_ID);
12
+ if (!existingElement) {
13
+ existingElement = document.createElement('div');
14
+ existingElement.id = TOAST_ROOT_ID;
15
+ existingElement.className = 'toast-container';
16
+ document.body.appendChild(existingElement);
17
+ }
18
+ setRootElement(existingElement);
20
19
  }
21
- }
22
- render() {
23
- if (this.rootElement) {
24
- return /*#__PURE__*/ReactDOM.createPortal(this.props.children, this.rootElement);
25
- }
26
- return null;
27
- }
20
+ }, []);
21
+ return rootElement ? /*#__PURE__*/ReactDOM.createPortal(children, rootElement) : null;
28
22
  }
29
- ToastContainer.propTypes = {
30
- /** Specifies contents of the component. */
31
- children: PropTypes.node.isRequired
32
- };
33
23
  export default ToastContainer;
34
24
  //# sourceMappingURL=ToastContainer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToastContainer.js","names":["React","ReactDOM","PropTypes","ToastContainer","Component","constructor","props","toastRootName","document","rootElement","getElementById","createElement","setAttribute","body","appendChild","render","createPortal","children","propTypes","node","isRequired"],"sources":["../../src/Toast/ToastContainer.jsx"],"sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom';\nimport PropTypes from 'prop-types';\n\nclass ToastContainer extends React.Component {\n constructor(props) {\n super(props);\n this.toastRootName = 'toast-root';\n if (typeof document === 'undefined') {\n this.rootElement = null;\n } else if (document.getElementById(this.toastRootName)) {\n this.rootElement = document.getElementById(this.toastRootName);\n } else {\n const rootElement = document.createElement('div');\n rootElement.setAttribute('id', this.toastRootName);\n rootElement.setAttribute('class', 'toast-container');\n rootElement.setAttribute('role', 'alert');\n rootElement.setAttribute('aria-live', 'polite');\n rootElement.setAttribute('aria-atomic', 'true');\n this.rootElement = document.body.appendChild(rootElement);\n }\n }\n\n render() {\n if (this.rootElement) {\n return ReactDOM.createPortal(\n this.props.children,\n this.rootElement,\n );\n }\n return null;\n }\n}\n\nToastContainer.propTypes = {\n /** Specifies contents of the component. */\n children: PropTypes.node.isRequired,\n};\n\nexport default ToastContainer;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,QAAQ,MAAM,WAAW;AAChC,OAAOC,SAAS,MAAM,YAAY;AAElC,MAAMC,cAAc,SAASH,KAAK,CAACI,SAAS,CAAC;EAC3CC,WAAWA,CAACC,KAAK,EAAE;IACjB,KAAK,CAACA,KAAK,CAAC;IACZ,IAAI,CAACC,aAAa,GAAG,YAAY;IACjC,IAAI,OAAOC,QAAQ,KAAK,WAAW,EAAE;MACnC,IAAI,CAACC,WAAW,GAAG,IAAI;IACzB,CAAC,MAAM,IAAID,QAAQ,CAACE,cAAc,CAAC,IAAI,CAACH,aAAa,CAAC,EAAE;MACtD,IAAI,CAACE,WAAW,GAAGD,QAAQ,CAACE,cAAc,CAAC,IAAI,CAACH,aAAa,CAAC;IAChE,CAAC,MAAM;MACL,MAAME,WAAW,GAAGD,QAAQ,CAACG,aAAa,CAAC,KAAK,CAAC;MACjDF,WAAW,CAACG,YAAY,CAAC,IAAI,EAAE,IAAI,CAACL,aAAa,CAAC;MAClDE,WAAW,CAACG,YAAY,CAAC,OAAO,EAAE,iBAAiB,CAAC;MACpDH,WAAW,CAACG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC;MACzCH,WAAW,CAACG,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC;MAC/CH,WAAW,CAACG,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC;MAC/C,IAAI,CAACH,WAAW,GAAGD,QAAQ,CAACK,IAAI,CAACC,WAAW,CAACL,WAAW,CAAC;IAC3D;EACF;EAEAM,MAAMA,CAAA,EAAG;IACP,IAAI,IAAI,CAACN,WAAW,EAAE;MACpB,oBAAOR,QAAQ,CAACe,YAAY,CAC1B,IAAI,CAACV,KAAK,CAACW,QAAQ,EACnB,IAAI,CAACR,WACP,CAAC;IACH;IACA,OAAO,IAAI;EACb;AACF;AAEAN,cAAc,CAACe,SAAS,GAAG;EACzB;EACAD,QAAQ,EAAEf,SAAS,CAACiB,IAAI,CAACC;AAC3B,CAAC;AAED,eAAejB,cAAc","ignoreList":[]}
1
+ {"version":3,"file":"ToastContainer.js","names":["useEffect","useState","ReactDOM","TOAST_ROOT_ID","ToastContainer","_ref","children","rootElement","setRootElement","document","existingElement","getElementById","createElement","id","className","body","appendChild","createPortal"],"sources":["../../src/Toast/ToastContainer.tsx"],"sourcesContent":["import { ReactNode, useEffect, useState } from 'react';\nimport ReactDOM from 'react-dom';\n\ninterface ToastContainerProps {\n children: ReactNode;\n}\n\nconst TOAST_ROOT_ID = 'toast-root';\n\nfunction ToastContainer({ children }: ToastContainerProps) {\n const [rootElement, setRootElement] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n if (typeof document !== 'undefined') {\n let existingElement = document.getElementById(TOAST_ROOT_ID);\n\n if (!existingElement) {\n existingElement = document.createElement('div');\n existingElement.id = TOAST_ROOT_ID;\n existingElement.className = 'toast-container';\n document.body.appendChild(existingElement);\n }\n setRootElement(existingElement);\n }\n }, []);\n\n return rootElement ? ReactDOM.createPortal(children, rootElement) : null;\n}\n\nexport default ToastContainer;\n"],"mappings":"AAAA,SAAoBA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AACtD,OAAOC,QAAQ,MAAM,WAAW;AAMhC,MAAMC,aAAa,GAAG,YAAY;AAElC,SAASC,cAAcA,CAAAC,IAAA,EAAoC;EAAA,IAAnC;IAAEC;EAA8B,CAAC,GAAAD,IAAA;EACvD,MAAM,CAACE,WAAW,EAAEC,cAAc,CAAC,GAAGP,QAAQ,CAAqB,IAAI,CAAC;EAExED,SAAS,CAAC,MAAM;IACd,IAAI,OAAOS,QAAQ,KAAK,WAAW,EAAE;MACnC,IAAIC,eAAe,GAAGD,QAAQ,CAACE,cAAc,CAACR,aAAa,CAAC;MAE5D,IAAI,CAACO,eAAe,EAAE;QACpBA,eAAe,GAAGD,QAAQ,CAACG,aAAa,CAAC,KAAK,CAAC;QAC/CF,eAAe,CAACG,EAAE,GAAGV,aAAa;QAClCO,eAAe,CAACI,SAAS,GAAG,iBAAiB;QAC7CL,QAAQ,CAACM,IAAI,CAACC,WAAW,CAACN,eAAe,CAAC;MAC5C;MACAF,cAAc,CAACE,eAAe,CAAC;IACjC;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,OAAOH,WAAW,gBAAGL,QAAQ,CAACe,YAAY,CAACX,QAAQ,EAAEC,WAAW,CAAC,GAAG,IAAI;AAC1E;AAEA,eAAeH,cAAc","ignoreList":[]}
@@ -0,0 +1,59 @@
1
+ import React from 'react';
2
+ import PropTypes from 'prop-types';
3
+ export declare const TOAST_CLOSE_LABEL_TEXT = "Close";
4
+ export declare const TOAST_DELAY = 5000;
5
+ interface ToastAction {
6
+ label: string;
7
+ href?: string;
8
+ onClick?: (event: React.MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => void;
9
+ }
10
+ interface ToastProps {
11
+ children: string;
12
+ onClose: () => void;
13
+ show: boolean;
14
+ action?: ToastAction;
15
+ closeLabel?: string;
16
+ delay?: number;
17
+ className?: string;
18
+ }
19
+ declare function Toast({ action, children, className, closeLabel, onClose, show, ...rest }: ToastProps): import("react/jsx-runtime").JSX.Element;
20
+ declare namespace Toast {
21
+ var defaultProps: {
22
+ action: null;
23
+ closeLabel: undefined;
24
+ delay: number;
25
+ className: undefined;
26
+ };
27
+ var propTypes: {
28
+ /** A string or an element that is rendered inside the main body of the `Toast`. */
29
+ children: PropTypes.Validator<string>;
30
+ /**
31
+ * A function that is called on close. It can be used to perform
32
+ * actions upon closing of the `Toast`, such as setting the "show"
33
+ * element to false.
34
+ * */
35
+ onClose: PropTypes.Validator<(...args: any[]) => any>;
36
+ /** Boolean used to control whether the `Toast` shows */
37
+ show: PropTypes.Validator<boolean>;
38
+ /**
39
+ * Fields used to build optional action button.
40
+ * `label` is a string rendered inside the button.
41
+ * `href` is a link that will render the action button as an anchor tag.
42
+ * `onClick` is a function that is called when the button is clicked.
43
+ */
44
+ action: PropTypes.Requireable<PropTypes.InferProps<{
45
+ label: PropTypes.Validator<string>;
46
+ href: PropTypes.Requireable<string>;
47
+ onClick: PropTypes.Requireable<(...args: any[]) => any>;
48
+ }>>;
49
+ /**
50
+ * Alt text for the `Toast`'s dismiss button. Defaults to 'Close'.
51
+ */
52
+ closeLabel: PropTypes.Requireable<string>;
53
+ /** Time in milliseconds for which the `Toast` will display. */
54
+ delay: PropTypes.Requireable<number>;
55
+ /** Class names for the `BaseToast` component */
56
+ className: PropTypes.Requireable<string>;
57
+ };
58
+ }
59
+ export default Toast;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","useState","classNames","PropTypes","BaseToast","useIntl","Close","ToastContainer","Button","Icon","IconButton","TOAST_CLOSE_LABEL_TEXT","TOAST_DELAY","Toast","_ref","action","children","className","closeLabel","onClose","show","rest","intl","autoHide","setAutoHide","intlCloseLabel","formatMessage","id","defaultMessage","description","createElement","autohide","onBlur","onFocus","onMouseOut","onMouseOver","iconAs","alt","src","onClick","variant","invertColors","as","href","size","label","defaultProps","undefined","delay","propTypes","string","isRequired","func","bool","shape","number"],"sources":["../../src/Toast/index.jsx"],"sourcesContent":["import React, { useState } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\n\nimport BaseToast from 'react-bootstrap/Toast';\nimport { useIntl } from 'react-intl';\n\nimport { Close } from '../../icons';\nimport ToastContainer from './ToastContainer';\nimport Button from '../Button';\nimport Icon from '../Icon';\nimport IconButton from '../IconButton';\n\nexport const TOAST_CLOSE_LABEL_TEXT = 'Close';\nexport const TOAST_DELAY = 5000;\n\nfunction Toast({\n action, children, className, closeLabel, onClose, show, ...rest\n}) {\n const intl = useIntl();\n const [autoHide, setAutoHide] = useState(true);\n const intlCloseLabel = closeLabel || intl.formatMessage({\n id: 'pgn.Toast.closeLabel',\n defaultMessage: 'Close',\n description: 'Close label for Toast component',\n });\n return (\n <ToastContainer>\n <BaseToast\n autohide={autoHide}\n className={classNames('pgn__toast', className)}\n onClose={onClose}\n onBlur={() => setAutoHide(true)}\n onFocus={() => setAutoHide(false)}\n onMouseOut={() => setAutoHide(true)}\n onMouseOver={() => setAutoHide(false)}\n show={show}\n {...rest}\n >\n <div\n className=\"toast-header\"\n >\n <p className=\"small\">{children}</p>\n <div className=\"toast-header-btn-container\">\n <IconButton\n iconAs={Icon}\n alt={intlCloseLabel}\n className=\"align-self-start\"\n src={Close}\n onClick={onClose}\n variant=\"primary\"\n invertColors\n />\n </div>\n </div>\n {action && (\n <Button\n as={action.href ? 'a' : 'button'}\n href={action.href}\n onClick={action.onClick}\n size=\"sm\"\n variant=\"inverse-outline-primary\"\n >\n {action.label}\n </Button>\n )}\n </BaseToast>\n </ToastContainer>\n );\n}\n\nToast.defaultProps = {\n action: null,\n closeLabel: undefined,\n delay: TOAST_DELAY,\n className: undefined,\n};\n\nToast.propTypes = {\n /** A string or an element that is rendered inside the main body of the `Toast`. */\n children: PropTypes.string.isRequired,\n /**\n * A function that is called on close. It can be used to perform\n * actions upon closing of the `Toast`, such as setting the \"show\"\n * element to false.\n * */\n onClose: PropTypes.func.isRequired,\n /** Boolean used to control whether the `Toast` shows */\n show: PropTypes.bool.isRequired,\n /**\n * Fields used to build optional action button.\n * `label` is a string rendered inside the button.\n * `href` is a link that will render the action button as an anchor tag.\n * `onClick` is a function that is called when the button is clicked.\n */\n action: PropTypes.shape({\n label: PropTypes.string.isRequired,\n href: PropTypes.string,\n onClick: PropTypes.func,\n }),\n /**\n * Alt text for the `Toast`'s dismiss button. Defaults to 'Close'.\n */\n closeLabel: PropTypes.string,\n /** Time in milliseconds for which the `Toast` will display. */\n delay: PropTypes.number,\n /** Class names for the `BaseToast` component */\n className: PropTypes.string,\n};\n\nexport default Toast;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["React","useState","classNames","PropTypes","BaseToast","useIntl","Close","ToastContainer","Button","Icon","IconButton","TOAST_CLOSE_LABEL_TEXT","TOAST_DELAY","Toast","_ref","action","children","className","closeLabel","onClose","show","rest","intl","autoHide","setAutoHide","intlCloseLabel","formatMessage","id","defaultMessage","description","createElement","autohide","onBlur","onFocus","onMouseOut","onMouseOver","iconAs","alt","src","onClick","variant","invertColors","as","href","size","label","defaultProps","undefined","delay","propTypes","string","isRequired","func","bool","shape","number"],"sources":["../../src/Toast/index.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport classNames from 'classnames';\nimport PropTypes from 'prop-types';\nimport BaseToast from 'react-bootstrap/Toast';\nimport { useIntl } from 'react-intl';\n\nimport { Close } from '../../icons';\nimport ToastContainer from './ToastContainer';\nimport Button from '../Button';\nimport Icon from '../Icon';\nimport IconButton from '../IconButton';\n\nexport const TOAST_CLOSE_LABEL_TEXT = 'Close';\nexport const TOAST_DELAY = 5000;\n\ninterface ToastAction {\n label: string;\n href?: string;\n onClick?: (event: React.MouseEvent<HTMLButtonElement | HTMLAnchorElement>) => void;\n}\n\ninterface ToastProps {\n children: string;\n onClose: () => void;\n show: boolean;\n action?: ToastAction;\n closeLabel?: string;\n delay?: number;\n className?: string;\n}\n\nfunction Toast({\n action,\n children,\n className,\n closeLabel,\n onClose,\n show,\n ...rest\n}: ToastProps) {\n const intl = useIntl();\n const [autoHide, setAutoHide] = useState(true);\n\n const intlCloseLabel = closeLabel || intl.formatMessage({\n id: 'pgn.Toast.closeLabel',\n defaultMessage: 'Close',\n description: 'Close label for Toast component',\n });\n\n return (\n <ToastContainer>\n <BaseToast\n autohide={autoHide}\n className={classNames('pgn__toast', className)}\n onClose={onClose}\n onBlur={() => setAutoHide(true)}\n onFocus={() => setAutoHide(false)}\n onMouseOut={() => setAutoHide(true)}\n onMouseOver={() => setAutoHide(false)}\n show={show}\n {...rest}\n >\n <div className=\"toast-header\">\n <p className=\"small\">{children}</p>\n <div className=\"toast-header-btn-container\">\n <IconButton\n iconAs={Icon}\n alt={intlCloseLabel}\n className=\"align-self-start\"\n src={Close}\n onClick={onClose}\n variant=\"primary\"\n invertColors\n />\n </div>\n </div>\n {action && (\n <Button\n as={action.href ? 'a' : 'button'}\n href={action.href}\n onClick={action.onClick}\n size=\"sm\"\n variant=\"inverse-outline-primary\"\n >\n {action.label}\n </Button>\n )}\n </BaseToast>\n </ToastContainer>\n );\n}\n\nToast.defaultProps = {\n action: null,\n closeLabel: undefined,\n delay: TOAST_DELAY,\n className: undefined,\n};\n\nToast.propTypes = {\n /** A string or an element that is rendered inside the main body of the `Toast`. */\n children: PropTypes.string.isRequired,\n /**\n * A function that is called on close. It can be used to perform\n * actions upon closing of the `Toast`, such as setting the \"show\"\n * element to false.\n * */\n onClose: PropTypes.func.isRequired,\n /** Boolean used to control whether the `Toast` shows */\n show: PropTypes.bool.isRequired,\n /**\n * Fields used to build optional action button.\n * `label` is a string rendered inside the button.\n * `href` is a link that will render the action button as an anchor tag.\n * `onClick` is a function that is called when the button is clicked.\n */\n action: PropTypes.shape({\n label: PropTypes.string.isRequired,\n href: PropTypes.string,\n onClick: PropTypes.func,\n }),\n /**\n * Alt text for the `Toast`'s dismiss button. Defaults to 'Close'.\n */\n closeLabel: PropTypes.string,\n /** Time in milliseconds for which the `Toast` will display. */\n delay: PropTypes.number,\n /** Class names for the `BaseToast` component */\n className: PropTypes.string,\n};\n\nexport default Toast;\n"],"mappings":"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","ignoreList":[]}
@@ -16,7 +16,7 @@
16
16
  background-color: var(--pgn-color-toast-bg);
17
17
  box-shadow: var(--pgn-elevation-toast-box-shadow);
18
18
  margin: 0;
19
- padding: 1rem;
19
+ padding: var(--pgn-spacing-spacer-base);
20
20
  position: relative;
21
21
  border-radius: var(--pgn-size-toast-border-radius);
22
22
  z-index: 2;
@@ -49,7 +49,7 @@
49
49
  }
50
50
 
51
51
  & + .btn {
52
- margin-top: 1rem;
52
+ margin-top: var(--pgn-spacing-spacer-base);
53
53
  }
54
54
  }
55
55
 
package/dist/core.css CHANGED
@@ -13294,7 +13294,7 @@ textarea.form-control {
13294
13294
  line-height: var(--pgn-typography-form-input-line-height-sm);
13295
13295
  font-size: var(--pgn-typography-form-input-font-size-sm);
13296
13296
  }
13297
- .form-control:focus ~ .pgn__form-control-floating-label .pgn__form-control-floating-label-text, .form-control.has-value ~ .pgn__form-control-floating-label .pgn__form-control-floating-label-text {
13297
+ .form-control:focus ~ .pgn__form-control-floating-label .pgn__form-control-floating-label-text, .form-control.has-value ~ .pgn__form-control-floating-label .pgn__form-control-floating-label-text, .form-control:is(:-webkit-autofill, :autofill) ~ .pgn__form-control-floating-label .pgn__form-control-floating-label-text {
13298
13298
  background-color: var(--pgn-color-form-input-bg-base);
13299
13299
  transform: translateY(calc(var(--pgn-spacing-form-input-padding-y-base) * -1)) scale(0.75) translateY(calc((var(--pgn-typography-form-input-line-height-base) - (var(--pgn-typography-form-input-line-height-base) - 0.8) / 2) / var(--pgn-typography-form-input-line-height-base) * 100% * -1));
13300
13300
  }
@@ -13358,6 +13358,7 @@ select.form-control {
13358
13358
  appearance: none;
13359
13359
  height: var(--pgn-size-form-control-indicator-base);
13360
13360
  width: var(--pgn-size-form-control-indicator-base);
13361
+ min-width: var(--pgn-size-form-control-indicator-base);
13361
13362
  background-color: var(--pgn-color-form-control-indicator-bg-base);
13362
13363
  border: solid var(--pgn-size-form-control-indicator-border-width) var(--pgn-color-form-control-indicator-border);
13363
13364
  margin-inline-end: var(--pgn-spacing-form-control-gutter);
@@ -13413,6 +13414,7 @@ select.form-control {
13413
13414
  }
13414
13415
  .pgn__form-switch-input {
13415
13416
  width: var(--pgn-size-form-control-switch-width);
13417
+ min-width: var(--pgn-size-form-control-switch-width);
13416
13418
  border-radius: var(--pgn-size-form-control-switch-indicator-border-radius);
13417
13419
  background-image: var(--pgn-other-content-form-control-switch-indicator-icon-off);
13418
13420
  background-position: left center;
@@ -13818,6 +13820,7 @@ select.form-control {
13818
13820
  }
13819
13821
  .pgn__modal-header .pgn__modal-title {
13820
13822
  font-size: var(--pgn-typography-font-size-h3-base);
13823
+ line-height: calc(var(--pgn-typography-font-size-h3-base) * var(--pgn-typography-headings-line-height));
13821
13824
  margin-inline-end: 3rem;
13822
13825
  text-align: start;
13823
13826
  }
@@ -13948,7 +13951,6 @@ select.form-control {
13948
13951
  color: var(--pgn-color-danger-500);
13949
13952
  }
13950
13953
  .pgn__alert-modal .pgn__modal-title {
13951
- font-size: var(--pgn-typography-font-size-h4-base);
13952
13954
  display: flex;
13953
13955
  flex-grow: 1;
13954
13956
  align-items: center;
@@ -16536,7 +16538,7 @@ select.form-control {
16536
16538
  background-color: var(--pgn-color-toast-bg);
16537
16539
  box-shadow: var(--pgn-elevation-toast-box-shadow);
16538
16540
  margin: 0;
16539
- padding: 1rem;
16541
+ padding: var(--pgn-spacing-spacer-base);
16540
16542
  position: relative;
16541
16543
  border-radius: var(--pgn-size-toast-border-radius);
16542
16544
  z-index: 2;
@@ -16590,7 +16592,7 @@ select.form-control {
16590
16592
  padding-right: 0.75rem;
16591
16593
  }
16592
16594
  .toast .toast-header + .btn {
16593
- margin-top: 1rem;
16595
+ margin-top: var(--pgn-spacing-spacer-base);
16594
16596
  }
16595
16597
  @media (max-width: 768px) {
16596
16598
  .toast {