jvetrau-ds 0.2.6 → 0.2.8

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 (63) hide show
  1. package/catalog/types.d.ts +12 -0
  2. package/components/action-group/action-group.meta.d.ts +2 -0
  3. package/components/attach/attach.meta.d.ts +2 -0
  4. package/components/avatar/avatar.meta.d.ts +2 -0
  5. package/components/avatar-upload/avatar-upload.meta.d.ts +2 -0
  6. package/components/breadcrumbs/breadcrumbs.meta.d.ts +2 -0
  7. package/components/button/button.meta.d.ts +2 -0
  8. package/components/calendar-month/calendar-month.meta.d.ts +2 -0
  9. package/components/card/card.meta.d.ts +2 -0
  10. package/components/card-group/card-group.meta.d.ts +2 -0
  11. package/components/checkbox/checkbox.meta.d.ts +2 -0
  12. package/components/course-outline/course-outline.meta.d.ts +2 -0
  13. package/components/discussion/discussion.meta.d.ts +2 -0
  14. package/components/dropdown/dropdown.meta.d.ts +2 -0
  15. package/components/field/field.meta.d.ts +2 -0
  16. package/components/field-group/field-group.meta.d.ts +2 -0
  17. package/components/flip-list/flip-list.meta.d.ts +2 -0
  18. package/components/helpers/helpers.meta.d.ts +2 -0
  19. package/components/index.cjs +1 -1
  20. package/components/index.d.ts +2 -2
  21. package/components/index.js +1 -1
  22. package/components/input/index.cjs +10 -1
  23. package/components/input/index.d.ts +2 -2
  24. package/components/input/index.js +1 -1
  25. package/components/input/input.cjs +10 -3
  26. package/components/input/input.cjs.map +1 -1
  27. package/components/input/input.css +16 -0
  28. package/components/input/input.d.ts +3 -1
  29. package/components/input/input.js +7 -3
  30. package/components/input/input.js.map +1 -1
  31. package/components/input/input.meta.d.ts +2 -0
  32. package/components/logo/logo.meta.d.ts +10 -0
  33. package/components/markdown/markdown.meta.d.ts +2 -0
  34. package/components/menu/menu.meta.d.ts +2 -0
  35. package/components/panel/panel.cjs +20 -17
  36. package/components/panel/panel.cjs.map +1 -1
  37. package/components/panel/panel.css +39 -5
  38. package/components/panel/panel.d.ts +1 -0
  39. package/components/panel/panel.js +20 -17
  40. package/components/panel/panel.js.map +1 -1
  41. package/components/panel/panel.meta.d.ts +2 -0
  42. package/components/progressbar/progressbar.meta.d.ts +2 -0
  43. package/components/radio/radio.meta.d.ts +2 -0
  44. package/components/richedit/richedit.meta.d.ts +2 -0
  45. package/components/search/search.meta.d.ts +2 -0
  46. package/components/select/select.meta.d.ts +2 -0
  47. package/components/tabs/tabs.meta.d.ts +2 -0
  48. package/components/tag/tag.meta.d.ts +2 -0
  49. package/components/textarea/textarea.meta.d.ts +2 -0
  50. package/components/video/video.meta.d.ts +2 -0
  51. package/icons/icons.meta.d.ts +2 -0
  52. package/index.d.ts +1 -1
  53. package/package.json +1 -1
  54. package/patterns/form/form.meta.d.ts +2 -0
  55. package/patterns/header/header.meta.d.ts +2 -0
  56. package/patterns/masthead/masthead.meta.d.ts +2 -0
  57. package/patterns/modal/modal.cjs +1 -0
  58. package/patterns/modal/modal.cjs.map +1 -1
  59. package/patterns/modal/modal.css +56 -7
  60. package/patterns/modal/modal.js +1 -0
  61. package/patterns/modal/modal.js.map +1 -1
  62. package/patterns/modal/modal.meta.d.ts +2 -0
  63. package/styles.css +111 -12
@@ -0,0 +1,12 @@
1
+ export type ComponentState = 'default' | 'primary' | 'hover' | 'focus' | 'active' | 'disabled' | 'error' | 'success' | 'checked' | 'unchecked' | 'loading' | 'idle' | 'playing' | 'paused' | string;
2
+ export interface ComponentMeta {
3
+ name: string;
4
+ purpose: string;
5
+ anatomy: string[];
6
+ states: ComponentState[];
7
+ props: string[];
8
+ usage: string[];
9
+ llmDescription: string;
10
+ example: string;
11
+ isPlaceholder?: boolean;
12
+ }
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const actionGroupMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const attachMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const avatarMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const avatarUploadMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const breadcrumbsMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const buttonMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const calendarMonthMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const cardMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const cardGroupMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const checkboxMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const courseOutlineMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const discussionMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const dropdownMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const fieldMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const fieldGroupMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const flipListMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const helpersMeta: ComponentMeta;
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var button = require('./button');
4
- var input = require('./input/input');
4
+ var input = require('./input');
5
5
  var textarea = require('./textarea/textarea');
6
6
  var select = require('./select/select');
7
7
  var dropdown = require('./dropdown/dropdown');
@@ -1,8 +1,8 @@
1
1
  export { default as Button } from './button';
2
2
  export { buttonLink, } from './button';
3
3
  export type { ButtonProps, } from './button';
4
- export { default as Input } from './input/input';
5
- export type { InputProps } from './input/input';
4
+ export { default as Input, } from './input';
5
+ export type { InputProps, InputWidth, } from './input';
6
6
  export { default as Textarea } from './textarea/textarea';
7
7
  export type { TextareaProps } from './textarea/textarea';
8
8
  export { default as Select } from './select/select';
@@ -1,5 +1,5 @@
1
1
  export { default as Button, buttonLink } from './button';
2
- export { default as Input } from './input/input';
2
+ export { default as Input } from './input';
3
3
  export { default as Textarea } from './textarea/textarea';
4
4
  export { default as Select } from './select/select';
5
5
  export { default as Dropdown } from './dropdown/dropdown';
@@ -1,5 +1,7 @@
1
1
  'use strict';
2
2
 
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
3
5
  var input = require('./input');
4
6
 
5
7
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
@@ -8,6 +10,13 @@ var input__default = /*#__PURE__*/_interopDefault(input);
8
10
 
9
11
 
10
12
 
11
- module.exports = input__default.default;
13
+ Object.defineProperty(exports, "Input", {
14
+ enumerable: true,
15
+ get: function () { return input.Input; }
16
+ });
17
+ Object.defineProperty(exports, "default", {
18
+ enumerable: true,
19
+ get: function () { return input__default.default; }
20
+ });
12
21
  //# sourceMappingURL=index.cjs.map
13
22
  //# sourceMappingURL=index.cjs.map
@@ -1,2 +1,2 @@
1
- export { default } from './input';
2
- export type { InputProps } from './input';
1
+ export { default, Input, } from './input';
2
+ export type { InputProps, InputWidth, } from './input';
@@ -1,3 +1,3 @@
1
- export { default } from './input';
1
+ export { Input, default } from './input';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
@@ -1,17 +1,23 @@
1
1
  'use strict';
2
2
 
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
3
5
  var jsxRuntime = require('react/jsx-runtime');
4
6
  var classnames = require('../helpers/classnames');
5
7
 
6
8
  const Input = ({
7
9
  state = "default",
10
+ width = "default",
8
11
  className = "",
9
12
  disabled = false,
10
13
  ...props
11
14
  }) => {
12
15
  const classes = classnames.classnames("input", className, {
13
- error: state === "error",
14
- success: state === "success"
16
+ "input--error": state === "error",
17
+ "input--success": state === "success",
18
+ "input--width-short": width === "short",
19
+ "input--width-default": width === "default",
20
+ "input--width-max": width === "max"
15
21
  });
16
22
  return /* @__PURE__ */ jsxRuntime.jsx(
17
23
  "input",
@@ -24,6 +30,7 @@ const Input = ({
24
30
  };
25
31
  var input_default = Input;
26
32
 
27
- module.exports = input_default;
33
+ exports.Input = Input;
34
+ exports.default = input_default;
28
35
  //# sourceMappingURL=input.cjs.map
29
36
  //# sourceMappingURL=input.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/input/input.tsx"],"names":["classnames","jsx"],"mappings":";;;;;AASA,MAAM,QAA8B,CAAC;AAAA,EACnC,KAAA,GAAQ,SAAA;AAAA,EACR,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA,GAAW,KAAA;AAAA,EACX,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAUA,qBAAA,CAAW,OAAA,EAAS,SAAA,EAAW;AAAA,IAC7C,OAAO,KAAA,KAAU,OAAA;AAAA,IACjB,SAAS,KAAA,KAAU;AAAA,GACpB,CAAA;AAED,EAAA,uBACEC,cAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACX,QAAA;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ,CAAA;AAEA,IAAO,aAAA,GAAQ","file":"input.cjs","sourcesContent":["import React from 'react';\n//import './input.css';\nimport { classnames } from '../helpers/classnames';\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n state?: 'default' | 'error' | 'success';\n}\n\nconst Input: React.FC<InputProps> = ({\n state = 'default',\n className = '',\n disabled = false,\n ...props\n}) => {\n const classes = classnames('input', className, {\n error: state === 'error',\n success: state === 'success',\n });\n\n return (\n <input\n className={classes}\n disabled={disabled}\n {...props}\n />\n );\n};\n\nexport default Input;"]}
1
+ {"version":3,"sources":["../../../src/components/input/input.tsx"],"names":["classnames","jsx"],"mappings":";;;;;;;AAWO,MAAM,QAA8B,CAAC;AAAA,EAC1C,KAAA,GAAQ,SAAA;AAAA,EACR,KAAA,GAAQ,SAAA;AAAA,EACR,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA,GAAW,KAAA;AAAA,EACX,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAUA,qBAAA,CAAW,OAAA,EAAS,SAAA,EAAW;AAAA,IAC7C,gBAAgB,KAAA,KAAU,OAAA;AAAA,IAC1B,kBAAkB,KAAA,KAAU,SAAA;AAAA,IAC5B,sBAAsB,KAAA,KAAU,OAAA;AAAA,IAChC,wBAAwB,KAAA,KAAU,SAAA;AAAA,IAClC,oBAAoB,KAAA,KAAU;AAAA,GAC/B,CAAA;AAED,EAAA,uBACEC,cAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACX,QAAA;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,IAAO,aAAA,GAAQ","file":"input.cjs","sourcesContent":["import React from 'react';\nimport { classnames } from '../helpers/classnames';\n\nexport type InputWidth = 'short' | 'default' | 'max';\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n state?: 'default' | 'error' | 'success';\n width?: InputWidth;\n}\n\nexport const Input: React.FC<InputProps> = ({\n state = 'default',\n width = 'default',\n className = '',\n disabled = false,\n ...props\n}) => {\n const classes = classnames('input', className, {\n 'input--error': state === 'error',\n 'input--success': state === 'success',\n 'input--width-short': width === 'short',\n 'input--width-default': width === 'default',\n 'input--width-max': width === 'max',\n });\n\n return (\n <input\n className={classes}\n disabled={disabled}\n {...props}\n />\n );\n};\n\nexport default Input;\n"]}
@@ -25,6 +25,7 @@
25
25
  --input-height: var(--size-control-height);
26
26
  --input-padding-x: var(--padding-control-horz);
27
27
 
28
+ box-sizing: border-box;
28
29
  height: var(--input-height);
29
30
  padding-inline: var(--input-padding-x);
30
31
 
@@ -53,6 +54,21 @@
53
54
  background-color var(--input-transition-duration) ease;
54
55
  }
55
56
 
57
+ .input--width-short {
58
+ /* size */
59
+ width: auto;
60
+ }
61
+
62
+ .input--width-default {
63
+ /* size */
64
+ width: 400px;
65
+ }
66
+
67
+ .input--width-max {
68
+ /* size */
69
+ width: 100%;
70
+ }
71
+
56
72
  .input::placeholder {
57
73
  color: var(--input-placeholder);
58
74
  }
@@ -1,6 +1,8 @@
1
1
  import React from 'react';
2
+ export type InputWidth = 'short' | 'default' | 'max';
2
3
  export interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {
3
4
  state?: 'default' | 'error' | 'success';
5
+ width?: InputWidth;
4
6
  }
5
- declare const Input: React.FC<InputProps>;
7
+ export declare const Input: React.FC<InputProps>;
6
8
  export default Input;
@@ -3,13 +3,17 @@ import { classnames } from '../helpers/classnames';
3
3
 
4
4
  const Input = ({
5
5
  state = "default",
6
+ width = "default",
6
7
  className = "",
7
8
  disabled = false,
8
9
  ...props
9
10
  }) => {
10
11
  const classes = classnames("input", className, {
11
- error: state === "error",
12
- success: state === "success"
12
+ "input--error": state === "error",
13
+ "input--success": state === "success",
14
+ "input--width-short": width === "short",
15
+ "input--width-default": width === "default",
16
+ "input--width-max": width === "max"
13
17
  });
14
18
  return /* @__PURE__ */ jsx(
15
19
  "input",
@@ -22,6 +26,6 @@ const Input = ({
22
26
  };
23
27
  var input_default = Input;
24
28
 
25
- export { input_default as default };
29
+ export { Input, input_default as default };
26
30
  //# sourceMappingURL=input.js.map
27
31
  //# sourceMappingURL=input.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/input/input.tsx"],"names":[],"mappings":";;;AASA,MAAM,QAA8B,CAAC;AAAA,EACnC,KAAA,GAAQ,SAAA;AAAA,EACR,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA,GAAW,KAAA;AAAA,EACX,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,OAAA,EAAS,SAAA,EAAW;AAAA,IAC7C,OAAO,KAAA,KAAU,OAAA;AAAA,IACjB,SAAS,KAAA,KAAU;AAAA,GACpB,CAAA;AAED,EAAA,uBACE,GAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACX,QAAA;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ,CAAA;AAEA,IAAO,aAAA,GAAQ","file":"input.js","sourcesContent":["import React from 'react';\n//import './input.css';\nimport { classnames } from '../helpers/classnames';\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n state?: 'default' | 'error' | 'success';\n}\n\nconst Input: React.FC<InputProps> = ({\n state = 'default',\n className = '',\n disabled = false,\n ...props\n}) => {\n const classes = classnames('input', className, {\n error: state === 'error',\n success: state === 'success',\n });\n\n return (\n <input\n className={classes}\n disabled={disabled}\n {...props}\n />\n );\n};\n\nexport default Input;"]}
1
+ {"version":3,"sources":["../../../src/components/input/input.tsx"],"names":[],"mappings":";;;AAWO,MAAM,QAA8B,CAAC;AAAA,EAC1C,KAAA,GAAQ,SAAA;AAAA,EACR,KAAA,GAAQ,SAAA;AAAA,EACR,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA,GAAW,KAAA;AAAA,EACX,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,OAAA,EAAS,SAAA,EAAW;AAAA,IAC7C,gBAAgB,KAAA,KAAU,OAAA;AAAA,IAC1B,kBAAkB,KAAA,KAAU,SAAA;AAAA,IAC5B,sBAAsB,KAAA,KAAU,OAAA;AAAA,IAChC,wBAAwB,KAAA,KAAU,SAAA;AAAA,IAClC,oBAAoB,KAAA,KAAU;AAAA,GAC/B,CAAA;AAED,EAAA,uBACE,GAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACX,QAAA;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,IAAO,aAAA,GAAQ","file":"input.js","sourcesContent":["import React from 'react';\nimport { classnames } from '../helpers/classnames';\n\nexport type InputWidth = 'short' | 'default' | 'max';\n\nexport interface InputProps\n extends React.InputHTMLAttributes<HTMLInputElement> {\n state?: 'default' | 'error' | 'success';\n width?: InputWidth;\n}\n\nexport const Input: React.FC<InputProps> = ({\n state = 'default',\n width = 'default',\n className = '',\n disabled = false,\n ...props\n}) => {\n const classes = classnames('input', className, {\n 'input--error': state === 'error',\n 'input--success': state === 'success',\n 'input--width-short': width === 'short',\n 'input--width-default': width === 'default',\n 'input--width-max': width === 'max',\n });\n\n return (\n <input\n className={classes}\n disabled={disabled}\n {...props}\n />\n );\n};\n\nexport default Input;\n"]}
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const inputMeta: ComponentMeta;
@@ -0,0 +1,10 @@
1
+ export declare const logoMeta: {
2
+ name: string;
3
+ purpose: string;
4
+ anatomy: string[];
5
+ states: string[];
6
+ props: string[];
7
+ usage: string[];
8
+ llmDescription: string;
9
+ example: string;
10
+ };
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const markdownMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const menuMeta: ComponentMeta;
@@ -9,6 +9,7 @@ function hasContent(value) {
9
9
  }
10
10
  const Panel = ({
11
11
  layout = "card",
12
+ overflow = "visible",
12
13
  heading,
13
14
  headingLevel = 2,
14
15
  description,
@@ -20,34 +21,36 @@ const Panel = ({
20
21
  "panel",
21
22
  className,
22
23
  {
23
- "panel--transparent": layout === "transparent"
24
+ "panel--transparent": layout === "transparent",
25
+ "panel--content-overflow": overflow === "content"
24
26
  }
25
27
  );
26
28
  const HeadingTag = `h${headingLevel}`;
27
29
  const hasHeading = hasContent(heading);
28
30
  const hasDescription = hasContent(description);
29
- const hasHeader = hasHeading || hasDescription;
31
+ const hasChildren = hasContent(children);
32
+ const hasBody = hasDescription || hasChildren;
30
33
  return /* @__PURE__ */ jsxRuntime.jsxs(
31
34
  "section",
32
35
  {
33
36
  className: classes,
34
37
  ...props,
35
38
  children: [
36
- hasHeader && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "panel__header", children: [
37
- hasHeading && /* @__PURE__ */ jsxRuntime.jsx(
38
- HeadingTag,
39
- {
40
- className: classnames.classnames(
41
- "panel__heading",
42
- `panel__heading--h${headingLevel}`,
43
- {}
44
- ),
45
- children: heading
46
- }
47
- ),
48
- hasDescription && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "panel__description", children: description })
49
- ] }),
50
- hasContent(children) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "panel__content", children })
39
+ hasHeading && /* @__PURE__ */ jsxRuntime.jsx(
40
+ HeadingTag,
41
+ {
42
+ className: classnames.classnames(
43
+ "panel__heading",
44
+ `panel__heading--h${headingLevel}`,
45
+ {}
46
+ ),
47
+ children: heading
48
+ }
49
+ ),
50
+ hasBody && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "panel__body", children: [
51
+ hasDescription && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "panel__description", children: description }),
52
+ hasChildren && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "panel__content", children })
53
+ ] })
51
54
  ]
52
55
  }
53
56
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/panel/panel.tsx"],"names":["classnames","jsxs","jsx"],"mappings":";;;;;;AAaA,SAAS,WACP,KAAA,EAIA;AACA,EAAA,OACE,KAAA,KAAU,QACV,KAAA,KAAU,MAAA;AAEd;AAEA,MAAM,QAA8B,CAAC;AAAA,EACnC,MAAA,GAAS,MAAA;AAAA,EACT,OAAA;AAAA,EACA,YAAA,GAAe,CAAA;AAAA,EACf,WAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAUA,qBAAA;AAAA,IACd,OAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,MACE,sBACE,MAAA,KAAW;AAAA;AACf,GACF;AAEA,EAAA,MAAM,UAAA,GACJ,IAAI,YAAY,CAAA,CAAA;AAElB,EAAA,MAAM,UAAA,GACJ,WAAW,OAAO,CAAA;AAEpB,EAAA,MAAM,cAAA,GACJ,WAAW,WAAW,CAAA;AAExB,EAAA,MAAM,YACJ,UAAA,IACA,cAAA;AAEF,EAAA,uBACEC,eAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,SAAA,oBACCA,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACZ,QAAA,EAAA;AAAA,UAAA,UAAA,oBACCC,cAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAWF,qBAAA;AAAA,gBACT,gBAAA;AAAA,gBACA,oBAAoB,YAAY,CAAA,CAAA;AAAA,gBAChC;AAAC,eACH;AAAA,cAEC,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UAGD,cAAA,oBACCE,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sBACV,QAAA,EAAA,WAAA,EACH;AAAA,SAAA,EAEJ,CAAA;AAAA,QAGD,WAAW,QAAQ,CAAA,mCACjB,KAAA,EAAA,EAAI,SAAA,EAAU,kBACZ,QAAA,EACH;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAA;AAEA,IAAO,aAAA,GAAQ","file":"panel.cjs","sourcesContent":["import React from 'react';\n\nimport './panel.css';\nimport { classnames } from '../helpers/classnames';\n\nexport interface PanelProps\n extends React.HTMLAttributes<HTMLElement> {\n layout?: 'card' | 'transparent';\n heading?: React.ReactNode;\n headingLevel?: 2 | 3;\n description?: React.ReactNode;\n}\n\nfunction hasContent(\n value: React.ReactNode,\n): value is Exclude<\n React.ReactNode,\n null | undefined\n> {\n return (\n value !== null &&\n value !== undefined\n );\n}\n\nconst Panel: React.FC<PanelProps> = ({\n layout = 'card',\n heading,\n headingLevel = 2,\n description,\n className = '',\n children,\n ...props\n}) => {\n const classes = classnames(\n 'panel',\n className,\n {\n 'panel--transparent':\n layout === 'transparent',\n },\n );\n\n const HeadingTag =\n `h${headingLevel}` as 'h2' | 'h3';\n\n const hasHeading =\n hasContent(heading);\n\n const hasDescription =\n hasContent(description);\n\n const hasHeader =\n hasHeading ||\n hasDescription;\n\n return (\n <section\n className={classes}\n {...props}\n >\n {hasHeader && (\n <div className=\"panel__header\">\n {hasHeading && (\n <HeadingTag\n className={classnames(\n 'panel__heading',\n `panel__heading--h${headingLevel}`,\n {},\n )}\n >\n {heading}\n </HeadingTag>\n )}\n\n {hasDescription && (\n <p className=\"panel__description\">\n {description}\n </p>\n )}\n </div>\n )}\n\n {hasContent(children) && (\n <div className=\"panel__content\">\n {children}\n </div>\n )}\n </section>\n );\n};\n\nexport default Panel;\n"]}
1
+ {"version":3,"sources":["../../../src/components/panel/panel.tsx"],"names":["classnames","jsxs","jsx"],"mappings":";;;;;;AAcA,SAAS,WACP,KAAA,EAIA;AACA,EAAA,OACE,KAAA,KAAU,QACV,KAAA,KAAU,MAAA;AAEd;AAEA,MAAM,QAA8B,CAAC;AAAA,EACnC,MAAA,GAAS,MAAA;AAAA,EACT,QAAA,GAAW,SAAA;AAAA,EACX,OAAA;AAAA,EACA,YAAA,GAAe,CAAA;AAAA,EACf,WAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAUA,qBAAA;AAAA,IACd,OAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,MACE,sBACE,MAAA,KAAW,aAAA;AAAA,MACb,2BACE,QAAA,KAAa;AAAA;AACjB,GACF;AAEA,EAAA,MAAM,UAAA,GACJ,IAAI,YAAY,CAAA,CAAA;AAElB,EAAA,MAAM,UAAA,GACJ,WAAW,OAAO,CAAA;AAEpB,EAAA,MAAM,cAAA,GACJ,WAAW,WAAW,CAAA;AAExB,EAAA,MAAM,WAAA,GACJ,WAAW,QAAQ,CAAA;AAErB,EAAA,MAAM,UACJ,cAAA,IACA,WAAA;AAEF,EAAA,uBACEC,eAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,UAAA,oBACCC,cAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWF,qBAAA;AAAA,cACT,gBAAA;AAAA,cACA,oBAAoB,YAAY,CAAA,CAAA;AAAA,cAChC;AAAC,aACH;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,QAGD,OAAA,oBACCC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACZ,QAAA,EAAA;AAAA,UAAA,cAAA,oBACCC,cAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oBAAA,EACV,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,UAGD,WAAA,oBACCA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACZ,QAAA,EACH;AAAA,SAAA,EAEJ;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAA;AAEA,IAAO,aAAA,GAAQ","file":"panel.cjs","sourcesContent":["import React from 'react';\n\nimport './panel.css';\nimport { classnames } from '../helpers/classnames';\n\nexport interface PanelProps\n extends React.HTMLAttributes<HTMLElement> {\n layout?: 'card' | 'transparent';\n overflow?: 'visible' | 'content';\n heading?: React.ReactNode;\n headingLevel?: 2 | 3;\n description?: React.ReactNode;\n}\n\nfunction hasContent(\n value: React.ReactNode,\n): value is Exclude<\n React.ReactNode,\n null | undefined\n> {\n return (\n value !== null &&\n value !== undefined\n );\n}\n\nconst Panel: React.FC<PanelProps> = ({\n layout = 'card',\n overflow = 'visible',\n heading,\n headingLevel = 2,\n description,\n className = '',\n children,\n ...props\n}) => {\n const classes = classnames(\n 'panel',\n className,\n {\n 'panel--transparent':\n layout === 'transparent',\n 'panel--content-overflow':\n overflow === 'content',\n },\n );\n\n const HeadingTag =\n `h${headingLevel}` as 'h2' | 'h3';\n\n const hasHeading =\n hasContent(heading);\n\n const hasDescription =\n hasContent(description);\n\n const hasChildren =\n hasContent(children);\n\n const hasBody =\n hasDescription ||\n hasChildren;\n\n return (\n <section\n className={classes}\n {...props}\n >\n {hasHeading && (\n <HeadingTag\n className={classnames(\n 'panel__heading',\n `panel__heading--h${headingLevel}`,\n {},\n )}\n >\n {heading}\n </HeadingTag>\n )}\n\n {hasBody && (\n <div className=\"panel__body\">\n {hasDescription && (\n <p className=\"panel__description\">\n {description}\n </p>\n )}\n\n {hasChildren && (\n <div className=\"panel__content\">\n {children}\n </div>\n )}\n </div>\n )}\n </section>\n );\n};\n\nexport default Panel;\n"]}
@@ -50,16 +50,13 @@
50
50
  /* motion */
51
51
  }
52
52
 
53
- .panel__header {
53
+ .panel--content-overflow {
54
54
  /* color */
55
55
 
56
56
  /* typography */
57
57
 
58
58
  /* size */
59
- display: flex;
60
- flex-direction: column;
61
- gap: var(--panel-title-gap);
62
- width: 100%;
59
+ overflow: hidden;
63
60
 
64
61
  /* border */
65
62
 
@@ -75,6 +72,7 @@
75
72
  /* typography */
76
73
 
77
74
  /* size */
75
+ flex: 0 0 auto;
78
76
  margin: 0;
79
77
 
80
78
  /* border */
@@ -122,6 +120,24 @@
122
120
  /* motion */
123
121
  }
124
122
 
123
+ .panel__body {
124
+ /* color */
125
+
126
+ /* typography */
127
+
128
+ /* size */
129
+ display: flex;
130
+ flex-direction: column;
131
+ gap: var(--panel-title-gap);
132
+ width: 100%;
133
+
134
+ /* border */
135
+
136
+ /* depth */
137
+
138
+ /* motion */
139
+ }
140
+
125
141
  .panel__description {
126
142
  /* color */
127
143
  color: inherit;
@@ -155,5 +171,23 @@
155
171
 
156
172
  /* depth */
157
173
 
174
+ /* motion */
175
+ }
176
+
177
+ .panel--content-overflow .panel__body {
178
+ /* color */
179
+
180
+ /* typography */
181
+
182
+ /* size */
183
+ flex: 1;
184
+ min-height: 0;
185
+
186
+ overflow: auto;
187
+
188
+ /* border */
189
+
190
+ /* depth */
191
+
158
192
  /* motion */
159
193
  }
@@ -2,6 +2,7 @@ import React from 'react';
2
2
  import './panel.css';
3
3
  export interface PanelProps extends React.HTMLAttributes<HTMLElement> {
4
4
  layout?: 'card' | 'transparent';
5
+ overflow?: 'visible' | 'content';
5
6
  heading?: React.ReactNode;
6
7
  headingLevel?: 2 | 3;
7
8
  description?: React.ReactNode;
@@ -7,6 +7,7 @@ function hasContent(value) {
7
7
  }
8
8
  const Panel = ({
9
9
  layout = "card",
10
+ overflow = "visible",
10
11
  heading,
11
12
  headingLevel = 2,
12
13
  description,
@@ -18,34 +19,36 @@ const Panel = ({
18
19
  "panel",
19
20
  className,
20
21
  {
21
- "panel--transparent": layout === "transparent"
22
+ "panel--transparent": layout === "transparent",
23
+ "panel--content-overflow": overflow === "content"
22
24
  }
23
25
  );
24
26
  const HeadingTag = `h${headingLevel}`;
25
27
  const hasHeading = hasContent(heading);
26
28
  const hasDescription = hasContent(description);
27
- const hasHeader = hasHeading || hasDescription;
29
+ const hasChildren = hasContent(children);
30
+ const hasBody = hasDescription || hasChildren;
28
31
  return /* @__PURE__ */ jsxs(
29
32
  "section",
30
33
  {
31
34
  className: classes,
32
35
  ...props,
33
36
  children: [
34
- hasHeader && /* @__PURE__ */ jsxs("div", { className: "panel__header", children: [
35
- hasHeading && /* @__PURE__ */ jsx(
36
- HeadingTag,
37
- {
38
- className: classnames(
39
- "panel__heading",
40
- `panel__heading--h${headingLevel}`,
41
- {}
42
- ),
43
- children: heading
44
- }
45
- ),
46
- hasDescription && /* @__PURE__ */ jsx("p", { className: "panel__description", children: description })
47
- ] }),
48
- hasContent(children) && /* @__PURE__ */ jsx("div", { className: "panel__content", children })
37
+ hasHeading && /* @__PURE__ */ jsx(
38
+ HeadingTag,
39
+ {
40
+ className: classnames(
41
+ "panel__heading",
42
+ `panel__heading--h${headingLevel}`,
43
+ {}
44
+ ),
45
+ children: heading
46
+ }
47
+ ),
48
+ hasBody && /* @__PURE__ */ jsxs("div", { className: "panel__body", children: [
49
+ hasDescription && /* @__PURE__ */ jsx("p", { className: "panel__description", children: description }),
50
+ hasChildren && /* @__PURE__ */ jsx("div", { className: "panel__content", children })
51
+ ] })
49
52
  ]
50
53
  }
51
54
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/panel/panel.tsx"],"names":[],"mappings":";;;;AAaA,SAAS,WACP,KAAA,EAIA;AACA,EAAA,OACE,KAAA,KAAU,QACV,KAAA,KAAU,MAAA;AAEd;AAEA,MAAM,QAA8B,CAAC;AAAA,EACnC,MAAA,GAAS,MAAA;AAAA,EACT,OAAA;AAAA,EACA,YAAA,GAAe,CAAA;AAAA,EACf,WAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAU,UAAA;AAAA,IACd,OAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,MACE,sBACE,MAAA,KAAW;AAAA;AACf,GACF;AAEA,EAAA,MAAM,UAAA,GACJ,IAAI,YAAY,CAAA,CAAA;AAElB,EAAA,MAAM,UAAA,GACJ,WAAW,OAAO,CAAA;AAEpB,EAAA,MAAM,cAAA,GACJ,WAAW,WAAW,CAAA;AAExB,EAAA,MAAM,YACJ,UAAA,IACA,cAAA;AAEF,EAAA,uBACE,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,SAAA,oBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACZ,QAAA,EAAA;AAAA,UAAA,UAAA,oBACC,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,UAAA;AAAA,gBACT,gBAAA;AAAA,gBACA,oBAAoB,YAAY,CAAA,CAAA;AAAA,gBAChC;AAAC,eACH;AAAA,cAEC,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,UAGD,cAAA,oBACC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sBACV,QAAA,EAAA,WAAA,EACH;AAAA,SAAA,EAEJ,CAAA;AAAA,QAGD,WAAW,QAAQ,CAAA,wBACjB,KAAA,EAAA,EAAI,SAAA,EAAU,kBACZ,QAAA,EACH;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAA;AAEA,IAAO,aAAA,GAAQ","file":"panel.js","sourcesContent":["import React from 'react';\n\nimport './panel.css';\nimport { classnames } from '../helpers/classnames';\n\nexport interface PanelProps\n extends React.HTMLAttributes<HTMLElement> {\n layout?: 'card' | 'transparent';\n heading?: React.ReactNode;\n headingLevel?: 2 | 3;\n description?: React.ReactNode;\n}\n\nfunction hasContent(\n value: React.ReactNode,\n): value is Exclude<\n React.ReactNode,\n null | undefined\n> {\n return (\n value !== null &&\n value !== undefined\n );\n}\n\nconst Panel: React.FC<PanelProps> = ({\n layout = 'card',\n heading,\n headingLevel = 2,\n description,\n className = '',\n children,\n ...props\n}) => {\n const classes = classnames(\n 'panel',\n className,\n {\n 'panel--transparent':\n layout === 'transparent',\n },\n );\n\n const HeadingTag =\n `h${headingLevel}` as 'h2' | 'h3';\n\n const hasHeading =\n hasContent(heading);\n\n const hasDescription =\n hasContent(description);\n\n const hasHeader =\n hasHeading ||\n hasDescription;\n\n return (\n <section\n className={classes}\n {...props}\n >\n {hasHeader && (\n <div className=\"panel__header\">\n {hasHeading && (\n <HeadingTag\n className={classnames(\n 'panel__heading',\n `panel__heading--h${headingLevel}`,\n {},\n )}\n >\n {heading}\n </HeadingTag>\n )}\n\n {hasDescription && (\n <p className=\"panel__description\">\n {description}\n </p>\n )}\n </div>\n )}\n\n {hasContent(children) && (\n <div className=\"panel__content\">\n {children}\n </div>\n )}\n </section>\n );\n};\n\nexport default Panel;\n"]}
1
+ {"version":3,"sources":["../../../src/components/panel/panel.tsx"],"names":[],"mappings":";;;;AAcA,SAAS,WACP,KAAA,EAIA;AACA,EAAA,OACE,KAAA,KAAU,QACV,KAAA,KAAU,MAAA;AAEd;AAEA,MAAM,QAA8B,CAAC;AAAA,EACnC,MAAA,GAAS,MAAA;AAAA,EACT,QAAA,GAAW,SAAA;AAAA,EACX,OAAA;AAAA,EACA,YAAA,GAAe,CAAA;AAAA,EACf,WAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAU,UAAA;AAAA,IACd,OAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,MACE,sBACE,MAAA,KAAW,aAAA;AAAA,MACb,2BACE,QAAA,KAAa;AAAA;AACjB,GACF;AAEA,EAAA,MAAM,UAAA,GACJ,IAAI,YAAY,CAAA,CAAA;AAElB,EAAA,MAAM,UAAA,GACJ,WAAW,OAAO,CAAA;AAEpB,EAAA,MAAM,cAAA,GACJ,WAAW,WAAW,CAAA;AAExB,EAAA,MAAM,WAAA,GACJ,WAAW,QAAQ,CAAA;AAErB,EAAA,MAAM,UACJ,cAAA,IACA,WAAA;AAEF,EAAA,uBACE,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,UAAA,oBACC,GAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,UAAA;AAAA,cACT,gBAAA;AAAA,cACA,oBAAoB,YAAY,CAAA,CAAA;AAAA,cAChC;AAAC,aACH;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,QAGD,OAAA,oBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACZ,QAAA,EAAA;AAAA,UAAA,cAAA,oBACC,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oBAAA,EACV,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,UAGD,WAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBACZ,QAAA,EACH;AAAA,SAAA,EAEJ;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAA;AAEA,IAAO,aAAA,GAAQ","file":"panel.js","sourcesContent":["import React from 'react';\n\nimport './panel.css';\nimport { classnames } from '../helpers/classnames';\n\nexport interface PanelProps\n extends React.HTMLAttributes<HTMLElement> {\n layout?: 'card' | 'transparent';\n overflow?: 'visible' | 'content';\n heading?: React.ReactNode;\n headingLevel?: 2 | 3;\n description?: React.ReactNode;\n}\n\nfunction hasContent(\n value: React.ReactNode,\n): value is Exclude<\n React.ReactNode,\n null | undefined\n> {\n return (\n value !== null &&\n value !== undefined\n );\n}\n\nconst Panel: React.FC<PanelProps> = ({\n layout = 'card',\n overflow = 'visible',\n heading,\n headingLevel = 2,\n description,\n className = '',\n children,\n ...props\n}) => {\n const classes = classnames(\n 'panel',\n className,\n {\n 'panel--transparent':\n layout === 'transparent',\n 'panel--content-overflow':\n overflow === 'content',\n },\n );\n\n const HeadingTag =\n `h${headingLevel}` as 'h2' | 'h3';\n\n const hasHeading =\n hasContent(heading);\n\n const hasDescription =\n hasContent(description);\n\n const hasChildren =\n hasContent(children);\n\n const hasBody =\n hasDescription ||\n hasChildren;\n\n return (\n <section\n className={classes}\n {...props}\n >\n {hasHeading && (\n <HeadingTag\n className={classnames(\n 'panel__heading',\n `panel__heading--h${headingLevel}`,\n {},\n )}\n >\n {heading}\n </HeadingTag>\n )}\n\n {hasBody && (\n <div className=\"panel__body\">\n {hasDescription && (\n <p className=\"panel__description\">\n {description}\n </p>\n )}\n\n {hasChildren && (\n <div className=\"panel__content\">\n {children}\n </div>\n )}\n </div>\n )}\n </section>\n );\n};\n\nexport default Panel;\n"]}
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const panelMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const progressBarMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const radioMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const richEditMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const searchMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const selectMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const tabsMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const tagMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const textareaMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const videoMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../catalog/types';
2
+ export declare const iconMeta: ComponentMeta;
package/index.d.ts CHANGED
@@ -5,7 +5,7 @@
5
5
  export { default as Button, buttonLink, } from './components/button';
6
6
  export type { ButtonProps, } from './components/button';
7
7
  export { default as Input } from './components/input';
8
- export type { InputProps } from './components/input';
8
+ export type { InputProps, InputWidth, } from './components/input';
9
9
  export { default as Textarea } from './components/textarea';
10
10
  export type { TextareaProps } from './components/textarea';
11
11
  export { default as Select } from './components/select';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jvetrau-ds",
3
- "version": "0.2.6",
3
+ "version": "0.2.8",
4
4
  "description": "Multi-brand React design system with semantic tokens",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const formMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const headerMeta: ComponentMeta;
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const mastheadMeta: ComponentMeta;
@@ -79,6 +79,7 @@ const Modal = ({
79
79
  Panel__default.default,
80
80
  {
81
81
  layout: panelLayout,
82
+ overflow: "content",
82
83
  heading,
83
84
  description,
84
85
  children
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/patterns/modal/modal.tsx"],"names":["useRef","classnames","useEffect","jsx","jsxs","Panel","Button"],"mappings":";;;;;;;;;;;;;;AA0CA,MAAM,QAA8B,CAAC;AAAA,EACnC,IAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA,GAAe,QAAA;AAAA,EACf,IAAA,GAAO,SAAA;AAAA,EACP,eAAA,GAAkB,IAAA;AAAA,EAClB,aAAA,GAAgB,IAAA;AAAA,EAChB,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,SAAA,GACJA,aAA0B,IAAI,CAAA;AAEhC,EAAA,MAAM,OAAA,GAAUC,qBAAA;AAAA,IACd,OAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,MACE,eACE,IAAA,KAAS,MAAA;AAAA,MACX,qBACE,YAAA,KACA;AAAA;AACJ,GACF;AAEA,EAAA,MAAM,WAAA,GACJ,YAAA,KAAiB,YAAA,GACb,aAAA,GACA,MAAA;AAEN,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,SACJ,SAAA,CAAU,OAAA;AAEZ,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,IAAI,CAAC,OAAO,IAAA,EAAM;AAChB,QAAA,MAAA,CAAO,SAAA,EAAU;AAAA,MACnB;AAEA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,MAAA,CAAO,KAAA,EAAM;AAAA,IACf;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,YAAA,GAAe,CACnB,KAAA,KAGG;AACH,IAAA,KAAA,CAAM,cAAA,EAAe;AAErB,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAClB,KAAA,KAGG;AACH,IAAA,OAAA,GAAU,KAAK,CAAA;AAEf,IAAA,IACE,MAAM,gBAAA,IACN,CAAC,mBACD,KAAA,CAAM,MAAA,KACJ,MAAM,aAAA,EACR;AACA,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,uBACEC,cAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,GAAA,EAAK,SAAA;AAAA,MACL,SAAA,EAAW,OAAA;AAAA,MACX,QAAA,EAAU,YAAA;AAAA,MACV,OAAA,EAAS,WAAA;AAAA,MAET,QAAA,kBAAAC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,cAAA;AAAA,UAACE,sBAAA;AAAA,UAAA;AAAA,YACC,MAAA,EAAQ,WAAA;AAAA,YACR,OAAA;AAAA,YACA,WAAA;AAAA,YAIC;AAAA;AAAA,SACH;AAAA,wBAEAF,cAAA;AAAA,UAACG,uBAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,IAAA,EAAK,SAAA;AAAA,YACL,IAAA,EAAK,OAAA;AAAA,YACL,SAAA,EAAU,cAAA;AAAA,YACV,YAAA,EAAY,UAAA;AAAA,YACZ,OAAA,EAAS;AAAA;AAAA;AACX,OAAA,EACF;AAAA;AAAA,GACF;AAEJ,CAAA;AAEA,IAAO,aAAA,GAAQ","file":"modal.cjs","sourcesContent":["import React, {\n useEffect,\n useRef,\n} from 'react';\n\nimport './modal.css';\nimport Button from '../../components/button';\nimport { classnames } from '../../components/helpers/classnames';\nimport Panel from '../../components/panel';\n\ntype ModalNativeProps = Omit<\n React.DialogHTMLAttributes<HTMLDialogElement>,\n | 'children'\n | 'onCancel'\n | 'onClose'\n | 'open'\n>;\n\nexport interface ModalProps\n extends ModalNativeProps {\n open: boolean;\n onClose: () => void;\n\n heading?: React.ReactNode;\n description?: React.ReactNode;\n\n closeLabel: string;\n\n presentation?:\n | 'dialog'\n | 'fullscreen';\n\n size?:\n | 'default'\n | 'wide';\n\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n\n children?: React.ReactNode;\n}\n\nconst Modal: React.FC<ModalProps> = ({\n open,\n onClose,\n heading,\n description,\n closeLabel,\n presentation = 'dialog',\n size = 'default',\n closeOnBackdrop = true,\n closeOnEscape = true,\n className = '',\n children,\n onClick,\n ...props\n}) => {\n const dialogRef =\n useRef<HTMLDialogElement>(null);\n\n const classes = classnames(\n 'modal',\n className,\n {\n 'modal--wide':\n size === 'wide',\n 'modal--fullscreen':\n presentation ===\n 'fullscreen',\n },\n );\n\n const panelLayout =\n presentation === 'fullscreen'\n ? 'transparent'\n : 'card';\n\n useEffect(() => {\n const dialog =\n dialogRef.current;\n\n if (!dialog) {\n return;\n }\n\n if (open) {\n if (!dialog.open) {\n dialog.showModal();\n }\n\n return;\n }\n\n if (dialog.open) {\n dialog.close();\n }\n }, [open]);\n\n const handleCancel = (\n event: React.SyntheticEvent<\n HTMLDialogElement\n >,\n ) => {\n event.preventDefault();\n\n if (!closeOnEscape) {\n return;\n }\n\n onClose();\n };\n\n const handleClick = (\n event: React.MouseEvent<\n HTMLDialogElement\n >,\n ) => {\n onClick?.(event);\n\n if (\n event.defaultPrevented ||\n !closeOnBackdrop ||\n event.target !==\n event.currentTarget\n ) {\n return;\n }\n\n onClose();\n };\n\n return (\n <dialog\n {...props}\n ref={dialogRef}\n className={classes}\n onCancel={handleCancel}\n onClick={handleClick}\n >\n <div className=\"modal__surface\">\n <Panel\n layout={panelLayout}\n heading={heading}\n description={\n description\n }\n >\n {children}\n </Panel>\n\n <Button\n type=\"button\"\n mode=\"toolbar\"\n icon=\"close\"\n className=\"modal__close\"\n aria-label={closeLabel}\n onClick={onClose}\n />\n </div>\n </dialog>\n );\n};\n\nexport default Modal;\n"]}
1
+ {"version":3,"sources":["../../../src/patterns/modal/modal.tsx"],"names":["useRef","classnames","useEffect","jsx","jsxs","Panel","Button"],"mappings":";;;;;;;;;;;;;;AA0CA,MAAM,QAA8B,CAAC;AAAA,EACnC,IAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA,GAAe,QAAA;AAAA,EACf,IAAA,GAAO,SAAA;AAAA,EACP,eAAA,GAAkB,IAAA;AAAA,EAClB,aAAA,GAAgB,IAAA;AAAA,EAChB,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,SAAA,GACJA,aAA0B,IAAI,CAAA;AAEhC,EAAA,MAAM,OAAA,GAAUC,qBAAA;AAAA,IACd,OAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,MACE,eACE,IAAA,KAAS,MAAA;AAAA,MACX,qBACE,YAAA,KACA;AAAA;AACJ,GACF;AAEA,EAAA,MAAM,WAAA,GACJ,YAAA,KAAiB,YAAA,GACb,aAAA,GACA,MAAA;AAEN,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,MAAM,SACJ,SAAA,CAAU,OAAA;AAEZ,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,IAAI,CAAC,OAAO,IAAA,EAAM;AAChB,QAAA,MAAA,CAAO,SAAA,EAAU;AAAA,MACnB;AAEA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,MAAA,CAAO,KAAA,EAAM;AAAA,IACf;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,YAAA,GAAe,CACnB,KAAA,KAGG;AACH,IAAA,KAAA,CAAM,cAAA,EAAe;AAErB,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAClB,KAAA,KAGG;AACH,IAAA,OAAA,GAAU,KAAK,CAAA;AAEf,IAAA,IACE,MAAM,gBAAA,IACN,CAAC,mBACD,KAAA,CAAM,MAAA,KACJ,MAAM,aAAA,EACR;AACA,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,uBACEC,cAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,GAAA,EAAK,SAAA;AAAA,MACL,SAAA,EAAW,OAAA;AAAA,MACX,QAAA,EAAU,YAAA;AAAA,MACV,OAAA,EAAS,WAAA;AAAA,MAET,QAAA,kBAAAC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,wBAAAD,cAAA;AAAA,UAACE,sBAAA;AAAA,UAAA;AAAA,YACC,MAAA,EAAQ,WAAA;AAAA,YACR,QAAA,EAAS,SAAA;AAAA,YACT,OAAA;AAAA,YACA,WAAA;AAAA,YAIC;AAAA;AAAA,SACH;AAAA,wBAEAF,cAAA;AAAA,UAACG,uBAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,IAAA,EAAK,SAAA;AAAA,YACL,IAAA,EAAK,OAAA;AAAA,YACL,SAAA,EAAU,cAAA;AAAA,YACV,YAAA,EAAY,UAAA;AAAA,YACZ,OAAA,EAAS;AAAA;AAAA;AACX,OAAA,EACF;AAAA;AAAA,GACF;AAEJ,CAAA;AAEA,IAAO,aAAA,GAAQ","file":"modal.cjs","sourcesContent":["import React, {\n useEffect,\n useRef,\n} from 'react';\n\nimport './modal.css';\nimport Button from '../../components/button';\nimport { classnames } from '../../components/helpers/classnames';\nimport Panel from '../../components/panel';\n\ntype ModalNativeProps = Omit<\n React.DialogHTMLAttributes<HTMLDialogElement>,\n | 'children'\n | 'onCancel'\n | 'onClose'\n | 'open'\n>;\n\nexport interface ModalProps\n extends ModalNativeProps {\n open: boolean;\n onClose: () => void;\n\n heading?: React.ReactNode;\n description?: React.ReactNode;\n\n closeLabel: string;\n\n presentation?:\n | 'dialog'\n | 'fullscreen';\n\n size?:\n | 'default'\n | 'wide';\n\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n\n children?: React.ReactNode;\n}\n\nconst Modal: React.FC<ModalProps> = ({\n open,\n onClose,\n heading,\n description,\n closeLabel,\n presentation = 'dialog',\n size = 'default',\n closeOnBackdrop = true,\n closeOnEscape = true,\n className = '',\n children,\n onClick,\n ...props\n}) => {\n const dialogRef =\n useRef<HTMLDialogElement>(null);\n\n const classes = classnames(\n 'modal',\n className,\n {\n 'modal--wide':\n size === 'wide',\n 'modal--fullscreen':\n presentation ===\n 'fullscreen',\n },\n );\n\n const panelLayout =\n presentation === 'fullscreen'\n ? 'transparent'\n : 'card';\n\n useEffect(() => {\n const dialog =\n dialogRef.current;\n\n if (!dialog) {\n return;\n }\n\n if (open) {\n if (!dialog.open) {\n dialog.showModal();\n }\n\n return;\n }\n\n if (dialog.open) {\n dialog.close();\n }\n }, [open]);\n\n const handleCancel = (\n event: React.SyntheticEvent<\n HTMLDialogElement\n >,\n ) => {\n event.preventDefault();\n\n if (!closeOnEscape) {\n return;\n }\n\n onClose();\n };\n\n const handleClick = (\n event: React.MouseEvent<\n HTMLDialogElement\n >,\n ) => {\n onClick?.(event);\n\n if (\n event.defaultPrevented ||\n !closeOnBackdrop ||\n event.target !==\n event.currentTarget\n ) {\n return;\n }\n\n onClose();\n };\n\n return (\n <dialog\n {...props}\n ref={dialogRef}\n className={classes}\n onCancel={handleCancel}\n onClick={handleClick}\n >\n <div className=\"modal__surface\">\n <Panel\n layout={panelLayout}\n overflow=\"content\"\n heading={heading}\n description={\n description\n }\n >\n {children}\n </Panel>\n\n <Button\n type=\"button\"\n mode=\"toolbar\"\n icon=\"close\"\n className=\"modal__close\"\n aria-label={closeLabel}\n onClick={onClose}\n />\n </div>\n </dialog>\n );\n};\n\nexport default Modal;\n"]}
@@ -1,7 +1,8 @@
1
1
  .modal {
2
2
  /* color */
3
- --modal-backdrop-bg: rgb(0 0 0 / 40%);
3
+ --modal-color: var(--color-text-container);
4
4
 
5
+ background: transparent;
5
6
  color: inherit;
6
7
 
7
8
  /* typography */
@@ -20,11 +21,39 @@
20
21
  margin: 0;
21
22
  padding: var(--modal-padding);
22
23
 
24
+ align-items: center;
25
+ justify-content: center;
26
+
27
+ /* border */
23
28
  border: 0;
24
29
 
30
+ /* depth */
31
+
32
+ /* motion */
33
+ }
34
+
35
+ .modal:not([open]) {
36
+ /* color */
37
+
38
+ /* typography */
39
+
40
+ /* size */
41
+ display: none;
42
+
43
+ /* border */
44
+
45
+ /* depth */
46
+
47
+ /* motion */
48
+ }
49
+
50
+ .modal[open] {
51
+ /* color */
52
+
53
+ /* typography */
54
+
55
+ /* size */
25
56
  display: flex;
26
- align-items: center;
27
- justify-content: center;
28
57
 
29
58
  /* border */
30
59
 
@@ -35,7 +64,7 @@
35
64
 
36
65
  .modal::backdrop {
37
66
  /* color */
38
- background: var(--modal-backdrop-bg);
67
+ background: rgb(0 0 0 / 40%);
39
68
 
40
69
  /* typography */
41
70
 
@@ -56,10 +85,28 @@
56
85
  /* size */
57
86
  position: relative;
58
87
 
88
+ display: flex;
89
+ flex-direction: column;
90
+
59
91
  width: var(--modal-content-width);
60
92
  max-height: 100%;
61
93
 
62
- overflow: auto;
94
+ overflow: hidden;
95
+
96
+ /* border */
97
+
98
+ /* depth */
99
+
100
+ /* motion */
101
+ }
102
+
103
+ .modal__surface > .panel {
104
+ /* color */
105
+
106
+ /* typography */
107
+
108
+ /* size */
109
+ min-height: 0;
63
110
 
64
111
  /* border */
65
112
 
@@ -70,6 +117,7 @@
70
117
 
71
118
  .modal__close {
72
119
  /* color */
120
+ color: var(--modal-color);
73
121
 
74
122
  /* typography */
75
123
 
@@ -102,6 +150,7 @@
102
150
 
103
151
  .modal--fullscreen {
104
152
  /* color */
153
+ --modal-color: var(--color-text);
105
154
 
106
155
  /* typography */
107
156
 
@@ -131,7 +180,7 @@
131
180
  height: 100%;
132
181
  max-height: none;
133
182
 
134
- overflow: auto;
183
+ overflow: hidden;
135
184
 
136
185
  /* border */
137
186
 
@@ -147,7 +196,7 @@
147
196
 
148
197
  /* size */
149
198
  flex: 1;
150
- min-height: 100%;
199
+ min-height: 0;
151
200
 
152
201
  /* border */
153
202
 
@@ -72,6 +72,7 @@ const Modal = ({
72
72
  Panel,
73
73
  {
74
74
  layout: panelLayout,
75
+ overflow: "content",
75
76
  heading,
76
77
  description,
77
78
  children
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/patterns/modal/modal.tsx"],"names":[],"mappings":";;;;;;;AA0CA,MAAM,QAA8B,CAAC;AAAA,EACnC,IAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA,GAAe,QAAA;AAAA,EACf,IAAA,GAAO,SAAA;AAAA,EACP,eAAA,GAAkB,IAAA;AAAA,EAClB,aAAA,GAAgB,IAAA;AAAA,EAChB,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,SAAA,GACJ,OAA0B,IAAI,CAAA;AAEhC,EAAA,MAAM,OAAA,GAAU,UAAA;AAAA,IACd,OAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,MACE,eACE,IAAA,KAAS,MAAA;AAAA,MACX,qBACE,YAAA,KACA;AAAA;AACJ,GACF;AAEA,EAAA,MAAM,WAAA,GACJ,YAAA,KAAiB,YAAA,GACb,aAAA,GACA,MAAA;AAEN,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,SACJ,SAAA,CAAU,OAAA;AAEZ,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,IAAI,CAAC,OAAO,IAAA,EAAM;AAChB,QAAA,MAAA,CAAO,SAAA,EAAU;AAAA,MACnB;AAEA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,MAAA,CAAO,KAAA,EAAM;AAAA,IACf;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,YAAA,GAAe,CACnB,KAAA,KAGG;AACH,IAAA,KAAA,CAAM,cAAA,EAAe;AAErB,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAClB,KAAA,KAGG;AACH,IAAA,OAAA,GAAU,KAAK,CAAA;AAEf,IAAA,IACE,MAAM,gBAAA,IACN,CAAC,mBACD,KAAA,CAAM,MAAA,KACJ,MAAM,aAAA,EACR;AACA,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,GAAA,EAAK,SAAA;AAAA,MACL,SAAA,EAAW,OAAA;AAAA,MACX,QAAA,EAAU,YAAA;AAAA,MACV,OAAA,EAAS,WAAA;AAAA,MAET,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,MAAA,EAAQ,WAAA;AAAA,YACR,OAAA;AAAA,YACA,WAAA;AAAA,YAIC;AAAA;AAAA,SACH;AAAA,wBAEA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,IAAA,EAAK,SAAA;AAAA,YACL,IAAA,EAAK,OAAA;AAAA,YACL,SAAA,EAAU,cAAA;AAAA,YACV,YAAA,EAAY,UAAA;AAAA,YACZ,OAAA,EAAS;AAAA;AAAA;AACX,OAAA,EACF;AAAA;AAAA,GACF;AAEJ,CAAA;AAEA,IAAO,aAAA,GAAQ","file":"modal.js","sourcesContent":["import React, {\n useEffect,\n useRef,\n} from 'react';\n\nimport './modal.css';\nimport Button from '../../components/button';\nimport { classnames } from '../../components/helpers/classnames';\nimport Panel from '../../components/panel';\n\ntype ModalNativeProps = Omit<\n React.DialogHTMLAttributes<HTMLDialogElement>,\n | 'children'\n | 'onCancel'\n | 'onClose'\n | 'open'\n>;\n\nexport interface ModalProps\n extends ModalNativeProps {\n open: boolean;\n onClose: () => void;\n\n heading?: React.ReactNode;\n description?: React.ReactNode;\n\n closeLabel: string;\n\n presentation?:\n | 'dialog'\n | 'fullscreen';\n\n size?:\n | 'default'\n | 'wide';\n\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n\n children?: React.ReactNode;\n}\n\nconst Modal: React.FC<ModalProps> = ({\n open,\n onClose,\n heading,\n description,\n closeLabel,\n presentation = 'dialog',\n size = 'default',\n closeOnBackdrop = true,\n closeOnEscape = true,\n className = '',\n children,\n onClick,\n ...props\n}) => {\n const dialogRef =\n useRef<HTMLDialogElement>(null);\n\n const classes = classnames(\n 'modal',\n className,\n {\n 'modal--wide':\n size === 'wide',\n 'modal--fullscreen':\n presentation ===\n 'fullscreen',\n },\n );\n\n const panelLayout =\n presentation === 'fullscreen'\n ? 'transparent'\n : 'card';\n\n useEffect(() => {\n const dialog =\n dialogRef.current;\n\n if (!dialog) {\n return;\n }\n\n if (open) {\n if (!dialog.open) {\n dialog.showModal();\n }\n\n return;\n }\n\n if (dialog.open) {\n dialog.close();\n }\n }, [open]);\n\n const handleCancel = (\n event: React.SyntheticEvent<\n HTMLDialogElement\n >,\n ) => {\n event.preventDefault();\n\n if (!closeOnEscape) {\n return;\n }\n\n onClose();\n };\n\n const handleClick = (\n event: React.MouseEvent<\n HTMLDialogElement\n >,\n ) => {\n onClick?.(event);\n\n if (\n event.defaultPrevented ||\n !closeOnBackdrop ||\n event.target !==\n event.currentTarget\n ) {\n return;\n }\n\n onClose();\n };\n\n return (\n <dialog\n {...props}\n ref={dialogRef}\n className={classes}\n onCancel={handleCancel}\n onClick={handleClick}\n >\n <div className=\"modal__surface\">\n <Panel\n layout={panelLayout}\n heading={heading}\n description={\n description\n }\n >\n {children}\n </Panel>\n\n <Button\n type=\"button\"\n mode=\"toolbar\"\n icon=\"close\"\n className=\"modal__close\"\n aria-label={closeLabel}\n onClick={onClose}\n />\n </div>\n </dialog>\n );\n};\n\nexport default Modal;\n"]}
1
+ {"version":3,"sources":["../../../src/patterns/modal/modal.tsx"],"names":[],"mappings":";;;;;;;AA0CA,MAAM,QAA8B,CAAC;AAAA,EACnC,IAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA,GAAe,QAAA;AAAA,EACf,IAAA,GAAO,SAAA;AAAA,EACP,eAAA,GAAkB,IAAA;AAAA,EAClB,aAAA,GAAgB,IAAA;AAAA,EAChB,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,SAAA,GACJ,OAA0B,IAAI,CAAA;AAEhC,EAAA,MAAM,OAAA,GAAU,UAAA;AAAA,IACd,OAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,MACE,eACE,IAAA,KAAS,MAAA;AAAA,MACX,qBACE,YAAA,KACA;AAAA;AACJ,GACF;AAEA,EAAA,MAAM,WAAA,GACJ,YAAA,KAAiB,YAAA,GACb,aAAA,GACA,MAAA;AAEN,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,SACJ,SAAA,CAAU,OAAA;AAEZ,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,IAAI,CAAC,OAAO,IAAA,EAAM;AAChB,QAAA,MAAA,CAAO,SAAA,EAAU;AAAA,MACnB;AAEA,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,IAAA,EAAM;AACf,MAAA,MAAA,CAAO,KAAA,EAAM;AAAA,IACf;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,MAAM,YAAA,GAAe,CACnB,KAAA,KAGG;AACH,IAAA,KAAA,CAAM,cAAA,EAAe;AAErB,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAClB,KAAA,KAGG;AACH,IAAA,OAAA,GAAU,KAAK,CAAA;AAEf,IAAA,IACE,MAAM,gBAAA,IACN,CAAC,mBACD,KAAA,CAAM,MAAA,KACJ,MAAM,aAAA,EACR;AACA,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,EAAQ;AAAA,EACV,CAAA;AAEA,EAAA,uBACE,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,GAAA,EAAK,SAAA;AAAA,MACL,SAAA,EAAW,OAAA;AAAA,MACX,QAAA,EAAU,YAAA;AAAA,MACV,OAAA,EAAS,WAAA;AAAA,MAET,QAAA,kBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,MAAA,EAAQ,WAAA;AAAA,YACR,QAAA,EAAS,SAAA;AAAA,YACT,OAAA;AAAA,YACA,WAAA;AAAA,YAIC;AAAA;AAAA,SACH;AAAA,wBAEA,GAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,IAAA,EAAK,SAAA;AAAA,YACL,IAAA,EAAK,OAAA;AAAA,YACL,SAAA,EAAU,cAAA;AAAA,YACV,YAAA,EAAY,UAAA;AAAA,YACZ,OAAA,EAAS;AAAA;AAAA;AACX,OAAA,EACF;AAAA;AAAA,GACF;AAEJ,CAAA;AAEA,IAAO,aAAA,GAAQ","file":"modal.js","sourcesContent":["import React, {\n useEffect,\n useRef,\n} from 'react';\n\nimport './modal.css';\nimport Button from '../../components/button';\nimport { classnames } from '../../components/helpers/classnames';\nimport Panel from '../../components/panel';\n\ntype ModalNativeProps = Omit<\n React.DialogHTMLAttributes<HTMLDialogElement>,\n | 'children'\n | 'onCancel'\n | 'onClose'\n | 'open'\n>;\n\nexport interface ModalProps\n extends ModalNativeProps {\n open: boolean;\n onClose: () => void;\n\n heading?: React.ReactNode;\n description?: React.ReactNode;\n\n closeLabel: string;\n\n presentation?:\n | 'dialog'\n | 'fullscreen';\n\n size?:\n | 'default'\n | 'wide';\n\n closeOnBackdrop?: boolean;\n closeOnEscape?: boolean;\n\n children?: React.ReactNode;\n}\n\nconst Modal: React.FC<ModalProps> = ({\n open,\n onClose,\n heading,\n description,\n closeLabel,\n presentation = 'dialog',\n size = 'default',\n closeOnBackdrop = true,\n closeOnEscape = true,\n className = '',\n children,\n onClick,\n ...props\n}) => {\n const dialogRef =\n useRef<HTMLDialogElement>(null);\n\n const classes = classnames(\n 'modal',\n className,\n {\n 'modal--wide':\n size === 'wide',\n 'modal--fullscreen':\n presentation ===\n 'fullscreen',\n },\n );\n\n const panelLayout =\n presentation === 'fullscreen'\n ? 'transparent'\n : 'card';\n\n useEffect(() => {\n const dialog =\n dialogRef.current;\n\n if (!dialog) {\n return;\n }\n\n if (open) {\n if (!dialog.open) {\n dialog.showModal();\n }\n\n return;\n }\n\n if (dialog.open) {\n dialog.close();\n }\n }, [open]);\n\n const handleCancel = (\n event: React.SyntheticEvent<\n HTMLDialogElement\n >,\n ) => {\n event.preventDefault();\n\n if (!closeOnEscape) {\n return;\n }\n\n onClose();\n };\n\n const handleClick = (\n event: React.MouseEvent<\n HTMLDialogElement\n >,\n ) => {\n onClick?.(event);\n\n if (\n event.defaultPrevented ||\n !closeOnBackdrop ||\n event.target !==\n event.currentTarget\n ) {\n return;\n }\n\n onClose();\n };\n\n return (\n <dialog\n {...props}\n ref={dialogRef}\n className={classes}\n onCancel={handleCancel}\n onClick={handleClick}\n >\n <div className=\"modal__surface\">\n <Panel\n layout={panelLayout}\n overflow=\"content\"\n heading={heading}\n description={\n description\n }\n >\n {children}\n </Panel>\n\n <Button\n type=\"button\"\n mode=\"toolbar\"\n icon=\"close\"\n className=\"modal__close\"\n aria-label={closeLabel}\n onClick={onClose}\n />\n </div>\n </dialog>\n );\n};\n\nexport default Modal;\n"]}
@@ -0,0 +1,2 @@
1
+ import type { ComponentMeta } from '../../catalog/types';
2
+ export declare const modalMeta: ComponentMeta;
package/styles.css CHANGED
@@ -3133,6 +3133,7 @@
3133
3133
  --input-height: var(--size-control-height);
3134
3134
  --input-padding-x: var(--padding-control-horz);
3135
3135
 
3136
+ box-sizing: border-box;
3136
3137
  height: var(--input-height);
3137
3138
  padding-inline: var(--input-padding-x);
3138
3139
 
@@ -3161,6 +3162,21 @@
3161
3162
  background-color var(--input-transition-duration) ease;
3162
3163
  }
3163
3164
 
3165
+ .input--width-short {
3166
+ /* size */
3167
+ width: auto;
3168
+ }
3169
+
3170
+ .input--width-default {
3171
+ /* size */
3172
+ width: 400px;
3173
+ }
3174
+
3175
+ .input--width-max {
3176
+ /* size */
3177
+ width: 100%;
3178
+ }
3179
+
3164
3180
  .input::placeholder {
3165
3181
  color: var(--input-placeholder);
3166
3182
  }
@@ -3614,16 +3630,13 @@
3614
3630
  /* motion */
3615
3631
  }
3616
3632
 
3617
- .panel__header {
3633
+ .panel--content-overflow {
3618
3634
  /* color */
3619
3635
 
3620
3636
  /* typography */
3621
3637
 
3622
3638
  /* size */
3623
- display: flex;
3624
- flex-direction: column;
3625
- gap: var(--panel-title-gap);
3626
- width: 100%;
3639
+ overflow: hidden;
3627
3640
 
3628
3641
  /* border */
3629
3642
 
@@ -3639,6 +3652,7 @@
3639
3652
  /* typography */
3640
3653
 
3641
3654
  /* size */
3655
+ flex: 0 0 auto;
3642
3656
  margin: 0;
3643
3657
 
3644
3658
  /* border */
@@ -3686,6 +3700,24 @@
3686
3700
  /* motion */
3687
3701
  }
3688
3702
 
3703
+ .panel__body {
3704
+ /* color */
3705
+
3706
+ /* typography */
3707
+
3708
+ /* size */
3709
+ display: flex;
3710
+ flex-direction: column;
3711
+ gap: var(--panel-title-gap);
3712
+ width: 100%;
3713
+
3714
+ /* border */
3715
+
3716
+ /* depth */
3717
+
3718
+ /* motion */
3719
+ }
3720
+
3689
3721
  .panel__description {
3690
3722
  /* color */
3691
3723
  color: inherit;
@@ -3722,6 +3754,24 @@
3722
3754
  /* motion */
3723
3755
  }
3724
3756
 
3757
+ .panel--content-overflow .panel__body {
3758
+ /* color */
3759
+
3760
+ /* typography */
3761
+
3762
+ /* size */
3763
+ flex: 1;
3764
+ min-height: 0;
3765
+
3766
+ overflow: auto;
3767
+
3768
+ /* border */
3769
+
3770
+ /* depth */
3771
+
3772
+ /* motion */
3773
+ }
3774
+
3725
3775
  /* src/components/progressbar/progressbar.css */
3726
3776
  .progressbar {
3727
3777
  /* color */
@@ -5220,8 +5270,9 @@
5220
5270
  /* src/patterns/modal/modal.css */
5221
5271
  .modal {
5222
5272
  /* color */
5223
- --modal-backdrop-bg: rgb(0 0 0 / 40%);
5273
+ --modal-color: var(--color-text-container);
5224
5274
 
5275
+ background: transparent;
5225
5276
  color: inherit;
5226
5277
 
5227
5278
  /* typography */
@@ -5240,11 +5291,39 @@
5240
5291
  margin: 0;
5241
5292
  padding: var(--modal-padding);
5242
5293
 
5294
+ align-items: center;
5295
+ justify-content: center;
5296
+
5297
+ /* border */
5243
5298
  border: 0;
5244
5299
 
5300
+ /* depth */
5301
+
5302
+ /* motion */
5303
+ }
5304
+
5305
+ .modal:not([open]) {
5306
+ /* color */
5307
+
5308
+ /* typography */
5309
+
5310
+ /* size */
5311
+ display: none;
5312
+
5313
+ /* border */
5314
+
5315
+ /* depth */
5316
+
5317
+ /* motion */
5318
+ }
5319
+
5320
+ .modal[open] {
5321
+ /* color */
5322
+
5323
+ /* typography */
5324
+
5325
+ /* size */
5245
5326
  display: flex;
5246
- align-items: center;
5247
- justify-content: center;
5248
5327
 
5249
5328
  /* border */
5250
5329
 
@@ -5255,7 +5334,7 @@
5255
5334
 
5256
5335
  .modal::backdrop {
5257
5336
  /* color */
5258
- background: var(--modal-backdrop-bg);
5337
+ background: rgb(0 0 0 / 40%);
5259
5338
 
5260
5339
  /* typography */
5261
5340
 
@@ -5276,10 +5355,28 @@
5276
5355
  /* size */
5277
5356
  position: relative;
5278
5357
 
5358
+ display: flex;
5359
+ flex-direction: column;
5360
+
5279
5361
  width: var(--modal-content-width);
5280
5362
  max-height: 100%;
5281
5363
 
5282
- overflow: auto;
5364
+ overflow: hidden;
5365
+
5366
+ /* border */
5367
+
5368
+ /* depth */
5369
+
5370
+ /* motion */
5371
+ }
5372
+
5373
+ .modal__surface > .panel {
5374
+ /* color */
5375
+
5376
+ /* typography */
5377
+
5378
+ /* size */
5379
+ min-height: 0;
5283
5380
 
5284
5381
  /* border */
5285
5382
 
@@ -5290,6 +5387,7 @@
5290
5387
 
5291
5388
  .modal__close {
5292
5389
  /* color */
5390
+ color: var(--modal-color);
5293
5391
 
5294
5392
  /* typography */
5295
5393
 
@@ -5322,6 +5420,7 @@
5322
5420
 
5323
5421
  .modal--fullscreen {
5324
5422
  /* color */
5423
+ --modal-color: var(--color-text);
5325
5424
 
5326
5425
  /* typography */
5327
5426
 
@@ -5351,7 +5450,7 @@
5351
5450
  height: 100%;
5352
5451
  max-height: none;
5353
5452
 
5354
- overflow: auto;
5453
+ overflow: hidden;
5355
5454
 
5356
5455
  /* border */
5357
5456
 
@@ -5367,7 +5466,7 @@
5367
5466
 
5368
5467
  /* size */
5369
5468
  flex: 1;
5370
- min-height: 100%;
5469
+ min-height: 0;
5371
5470
 
5372
5471
  /* border */
5373
5472