jvetrau-ds 0.1.18 → 0.1.19

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 (77) hide show
  1. package/components/index.cjs +18 -0
  2. package/components/index.d.cts +4 -1
  3. package/components/index.d.ts +4 -1
  4. package/components/index.js +3 -0
  5. package/components/tabs/index.d.cts +1 -1
  6. package/components/tabs/index.d.ts +1 -1
  7. package/components/tabs/tabs.cjs +50 -3
  8. package/components/tabs/tabs.cjs.map +1 -1
  9. package/components/tabs/tabs.css +83 -65
  10. package/components/tabs/tabs.d.cts +9 -1
  11. package/components/tabs/tabs.d.ts +9 -1
  12. package/components/tabs/tabs.js +50 -3
  13. package/components/tabs/tabs.js.map +1 -1
  14. package/index.d.cts +2 -2
  15. package/index.d.ts +2 -2
  16. package/package.json +1 -1
  17. package/styles.css +82 -64
  18. package/themes/base/desktop.css +1 -1
  19. package/themes/base/desktop.md +1 -1
  20. package/themes/base/desktop.scoped.css +1 -1
  21. package/themes/base/diagram.css +1 -1
  22. package/themes/base/diagram.md +1 -1
  23. package/themes/base/diagram.scoped.css +1 -1
  24. package/themes/base/mobile.css +1 -1
  25. package/themes/base/mobile.md +1 -1
  26. package/themes/base/mobile.scoped.css +1 -1
  27. package/themes/brandcopilot/desktop.css +1 -1
  28. package/themes/brandcopilot/desktop.md +1 -1
  29. package/themes/brandcopilot/desktop.scoped.css +1 -1
  30. package/themes/brandcopilot/diagram.css +1 -1
  31. package/themes/brandcopilot/diagram.md +1 -1
  32. package/themes/brandcopilot/diagram.scoped.css +1 -1
  33. package/themes/brandcopilot/mobile.css +1 -1
  34. package/themes/brandcopilot/mobile.md +1 -1
  35. package/themes/brandcopilot/mobile.scoped.css +1 -1
  36. package/themes/dmpatterns/desktop.css +1 -1
  37. package/themes/dmpatterns/desktop.md +1 -1
  38. package/themes/dmpatterns/desktop.scoped.css +1 -1
  39. package/themes/dmpatterns/diagram.css +1 -1
  40. package/themes/dmpatterns/diagram.md +1 -1
  41. package/themes/dmpatterns/diagram.scoped.css +1 -1
  42. package/themes/dmpatterns/mobile.css +1 -1
  43. package/themes/dmpatterns/mobile.md +1 -1
  44. package/themes/dmpatterns/mobile.scoped.css +1 -1
  45. package/themes/pdigest/desktop.css +1 -1
  46. package/themes/pdigest/desktop.md +1 -1
  47. package/themes/pdigest/desktop.scoped.css +1 -1
  48. package/themes/pdigest/diagram.css +1 -1
  49. package/themes/pdigest/diagram.md +1 -1
  50. package/themes/pdigest/diagram.scoped.css +1 -1
  51. package/themes/pdigest/mobile.css +1 -1
  52. package/themes/pdigest/mobile.md +1 -1
  53. package/themes/pdigest/mobile.scoped.css +1 -1
  54. package/themes/redesigntrack/desktop.css +1 -1
  55. package/themes/redesigntrack/desktop.md +1 -1
  56. package/themes/redesigntrack/desktop.scoped.css +1 -1
  57. package/themes/redesigntrack/diagram.css +1 -1
  58. package/themes/redesigntrack/diagram.md +1 -1
  59. package/themes/redesigntrack/diagram.scoped.css +1 -1
  60. package/themes/redesigntrack/mobile.css +1 -1
  61. package/themes/redesigntrack/mobile.md +1 -1
  62. package/themes/redesigntrack/mobile.scoped.css +1 -1
  63. package/tokens/themes/base/dist/desktop.json +1 -1
  64. package/tokens/themes/base/dist/diagram.json +1 -1
  65. package/tokens/themes/base/dist/mobile.json +1 -1
  66. package/tokens/themes/brandcopilot/dist/desktop.json +1 -1
  67. package/tokens/themes/brandcopilot/dist/diagram.json +1 -1
  68. package/tokens/themes/brandcopilot/dist/mobile.json +1 -1
  69. package/tokens/themes/dmpatterns/dist/desktop.json +1 -1
  70. package/tokens/themes/dmpatterns/dist/diagram.json +1 -1
  71. package/tokens/themes/dmpatterns/dist/mobile.json +1 -1
  72. package/tokens/themes/pdigest/dist/desktop.json +1 -1
  73. package/tokens/themes/pdigest/dist/diagram.json +1 -1
  74. package/tokens/themes/pdigest/dist/mobile.json +1 -1
  75. package/tokens/themes/redesigntrack/dist/desktop.json +1 -1
  76. package/tokens/themes/redesigntrack/dist/diagram.json +1 -1
  77. package/tokens/themes/redesigntrack/dist/mobile.json +1 -1
@@ -9,10 +9,13 @@ var dropdown = require('./dropdown/dropdown');
9
9
  var checkbox = require('./checkbox/checkbox');
10
10
  var radio = require('./radio/radio');
11
11
  var field = require('./field/field');
12
+ var menu = require('./menu/menu');
13
+ var tabs = require('./tabs/tabs');
12
14
  var tag = require('./tag/tag');
13
15
  var progressbar = require('./progressbar/progressbar');
14
16
  var card = require('./card/card');
15
17
  var panel = require('./panel/panel');
18
+ var video = require('./video/video');
16
19
  var logo = require('./logo/logo');
17
20
  var avatar = require('./avatar/avatar');
18
21
  var attach = require('./attach/attach');
@@ -28,10 +31,13 @@ var dropdown__default = /*#__PURE__*/_interopDefault(dropdown);
28
31
  var checkbox__default = /*#__PURE__*/_interopDefault(checkbox);
29
32
  var radio__default = /*#__PURE__*/_interopDefault(radio);
30
33
  var field__default = /*#__PURE__*/_interopDefault(field);
34
+ var menu__default = /*#__PURE__*/_interopDefault(menu);
35
+ var tabs__default = /*#__PURE__*/_interopDefault(tabs);
31
36
  var tag__default = /*#__PURE__*/_interopDefault(tag);
32
37
  var progressbar__default = /*#__PURE__*/_interopDefault(progressbar);
33
38
  var card__default = /*#__PURE__*/_interopDefault(card);
34
39
  var panel__default = /*#__PURE__*/_interopDefault(panel);
40
+ var video__default = /*#__PURE__*/_interopDefault(video);
35
41
  var logo__default = /*#__PURE__*/_interopDefault(logo);
36
42
  var avatar__default = /*#__PURE__*/_interopDefault(avatar);
37
43
  var attach__default = /*#__PURE__*/_interopDefault(attach);
@@ -74,6 +80,14 @@ Object.defineProperty(exports, "Field", {
74
80
  enumerable: true,
75
81
  get: function () { return field__default.default; }
76
82
  });
83
+ Object.defineProperty(exports, "Menu", {
84
+ enumerable: true,
85
+ get: function () { return menu__default.default; }
86
+ });
87
+ Object.defineProperty(exports, "Tabs", {
88
+ enumerable: true,
89
+ get: function () { return tabs__default.default; }
90
+ });
77
91
  Object.defineProperty(exports, "Tag", {
78
92
  enumerable: true,
79
93
  get: function () { return tag__default.default; }
@@ -90,6 +104,10 @@ Object.defineProperty(exports, "Panel", {
90
104
  enumerable: true,
91
105
  get: function () { return panel__default.default; }
92
106
  });
107
+ Object.defineProperty(exports, "Video", {
108
+ enumerable: true,
109
+ get: function () { return video__default.default; }
110
+ });
93
111
  Object.defineProperty(exports, "Logo", {
94
112
  enumerable: true,
95
113
  get: function () { return logo__default.default; }
@@ -7,12 +7,15 @@ export { default as Dropdown, DropdownProps } from './dropdown/dropdown.cjs';
7
7
  export { default as Checkbox, CheckboxProps } from './checkbox/checkbox.cjs';
8
8
  export { default as Radio, RadioProps } from './radio/radio.cjs';
9
9
  export { default as Field, FieldProps } from './field/field.cjs';
10
+ export { default as Menu, MenuItem, MenuProps } from './menu/menu.cjs';
11
+ export { TabItem, default as Tabs, TabsProps } from './tabs/tabs.cjs';
10
12
  export { default as Tag, TagProps } from './tag/tag.cjs';
11
13
  export { default as ProgressBar, ProgressBarProps } from './progressbar/progressbar.cjs';
12
14
  export { default as Card, CardProps } from './card/card.cjs';
13
15
  export { default as Panel, PanelProps } from './panel/panel.cjs';
16
+ export { default as Video, VideoProps, VideoQuality } from './video/video.cjs';
14
17
  export { default as Logo, LogoProps } from './logo/logo.cjs';
15
18
  export { default as Avatar, AvatarProps } from './avatar/avatar.cjs';
16
- export { default as Attach, AttachProps } from './attach/attach.cjs';
19
+ export { default as Attach, AttachItem, AttachProps } from './attach/attach.cjs';
17
20
  import 'react';
18
21
  import '../types-DboVOY__.cjs';
@@ -7,12 +7,15 @@ export { default as Dropdown, DropdownProps } from './dropdown/dropdown.js';
7
7
  export { default as Checkbox, CheckboxProps } from './checkbox/checkbox.js';
8
8
  export { default as Radio, RadioProps } from './radio/radio.js';
9
9
  export { default as Field, FieldProps } from './field/field.js';
10
+ export { default as Menu, MenuItem, MenuProps } from './menu/menu.js';
11
+ export { TabItem, default as Tabs, TabsProps } from './tabs/tabs.js';
10
12
  export { default as Tag, TagProps } from './tag/tag.js';
11
13
  export { default as ProgressBar, ProgressBarProps } from './progressbar/progressbar.js';
12
14
  export { default as Card, CardProps } from './card/card.js';
13
15
  export { default as Panel, PanelProps } from './panel/panel.js';
16
+ export { default as Video, VideoProps, VideoQuality } from './video/video.js';
14
17
  export { default as Logo, LogoProps } from './logo/logo.js';
15
18
  export { default as Avatar, AvatarProps } from './avatar/avatar.js';
16
- export { default as Attach, AttachProps } from './attach/attach.js';
19
+ export { default as Attach, AttachItem, AttachProps } from './attach/attach.js';
17
20
  import 'react';
18
21
  import '../types-DboVOY__.js';
@@ -7,10 +7,13 @@ export { default as Dropdown } from './dropdown/dropdown';
7
7
  export { default as Checkbox } from './checkbox/checkbox';
8
8
  export { default as Radio } from './radio/radio';
9
9
  export { default as Field } from './field/field';
10
+ export { default as Menu } from './menu/menu';
11
+ export { default as Tabs } from './tabs/tabs';
10
12
  export { default as Tag } from './tag/tag';
11
13
  export { default as ProgressBar } from './progressbar/progressbar';
12
14
  export { default as Card } from './card/card';
13
15
  export { default as Panel } from './panel/panel';
16
+ export { default as Video } from './video/video';
14
17
  export { default as Logo } from './logo/logo';
15
18
  export { default as Avatar } from './avatar/avatar';
16
19
  export { default as Attach } from './attach/attach';
@@ -1,2 +1,2 @@
1
- export { TabsProps, default } from './tabs.cjs';
1
+ export { TabItem, TabsProps, default } from './tabs.cjs';
2
2
  import 'react';
@@ -1,2 +1,2 @@
1
- export { TabsProps, default } from './tabs.js';
1
+ export { TabItem, TabsProps, default } from './tabs.js';
2
2
  import 'react';
@@ -5,12 +5,59 @@ var classnames = require('../helpers/classnames');
5
5
  require('./tabs.css');
6
6
 
7
7
  const Tabs = ({
8
+ items,
9
+ value,
8
10
  className = "",
9
- children,
11
+ onValueChange,
10
12
  ...props
11
13
  }) => {
12
- const classes = classnames.classnames("tabs", className);
13
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: classes, ...props, children });
14
+ const classes = classnames.classnames("tabs", className, {});
15
+ return /* @__PURE__ */ jsxRuntime.jsx(
16
+ "div",
17
+ {
18
+ className: classes,
19
+ ...props,
20
+ children: /* @__PURE__ */ jsxRuntime.jsx(
21
+ "div",
22
+ {
23
+ className: "tabs__list",
24
+ role: "tablist",
25
+ "aria-label": "Tabs",
26
+ children: items.map((item) => {
27
+ const isSelected = item.value === value;
28
+ const tabClasses = classnames.classnames("tabs__tab", {
29
+ "tabs__tab--selected": isSelected
30
+ });
31
+ if (item.href) {
32
+ return /* @__PURE__ */ jsxRuntime.jsx(
33
+ "a",
34
+ {
35
+ className: tabClasses,
36
+ href: item.href,
37
+ "aria-current": isSelected ? "page" : void 0,
38
+ onClick: () => onValueChange?.(item.value),
39
+ children: item.label
40
+ },
41
+ item.value
42
+ );
43
+ }
44
+ return /* @__PURE__ */ jsxRuntime.jsx(
45
+ "button",
46
+ {
47
+ className: tabClasses,
48
+ type: "button",
49
+ role: "tab",
50
+ "aria-selected": isSelected,
51
+ onClick: () => onValueChange?.(item.value),
52
+ children: item.label
53
+ },
54
+ item.value
55
+ );
56
+ })
57
+ }
58
+ )
59
+ }
60
+ );
14
61
  };
15
62
  var tabs_default = Tabs;
16
63
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/tabs/tabs.tsx"],"names":["classnames"],"mappings":";;;;;;AAMA,MAAM,OAA4B,CAAC;AAAA,EACjC,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAUA,qBAAA,CAAW,MAAA,EAAQ,SAAS,CAAA;AAE5C,EAAA,sCACG,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,EAAU,GAAG,OAC1B,QAAA,EACH,CAAA;AAEJ,CAAA;AAEA,IAAO,YAAA,GAAQ","file":"tabs.cjs","sourcesContent":["import React from 'react';\nimport { classnames } from '../helpers/classnames';\nimport './tabs.css';\n\nexport interface TabsProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst Tabs: React.FC<TabsProps> = ({\n className = '',\n children,\n ...props\n}) => {\n const classes = classnames('tabs', className);\n\n return (\n <div className={classes} {...props}>\n {children}\n </div>\n );\n};\n\nexport default Tabs;"]}
1
+ {"version":3,"sources":["../../../src/components/tabs/tabs.tsx"],"names":["classnames","jsx"],"mappings":";;;;;;AAiBA,MAAM,OAA4B,CAAC;AAAA,EACjC,KAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,aAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAUA,qBAAA,CAAW,MAAA,EAAQ,SAAA,EAAW,EAAE,CAAA;AAEhD,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,cAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,YAAA;AAAA,UACV,IAAA,EAAK,SAAA;AAAA,UACL,YAAA,EAAW,MAAA;AAAA,UAEV,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACnB,YAAA,MAAM,UAAA,GAAa,KAAK,KAAA,KAAU,KAAA;AAElC,YAAA,MAAM,UAAA,GAAaD,sBAAW,WAAA,EAAa;AAAA,cACzC,qBAAA,EAAuB;AAAA,aACxB,CAAA;AAED,YAAA,IAAI,KAAK,IAAA,EAAM;AACb,cAAA,uBACEC,cAAA;AAAA,gBAAC,GAAA;AAAA,gBAAA;AAAA,kBAEC,SAAA,EAAW,UAAA;AAAA,kBACX,MAAM,IAAA,CAAK,IAAA;AAAA,kBACX,cAAA,EAAc,aAAa,MAAA,GAAS,MAAA;AAAA,kBACpC,OAAA,EAAS,MAAM,aAAA,GAAgB,IAAA,CAAK,KAAK,CAAA;AAAA,kBAExC,QAAA,EAAA,IAAA,CAAK;AAAA,iBAAA;AAAA,gBAND,IAAA,CAAK;AAAA,eAOZ;AAAA,YAEJ;AAEA,YAAA,uBACEA,cAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAW,UAAA;AAAA,gBACX,IAAA,EAAK,QAAA;AAAA,gBACL,IAAA,EAAK,KAAA;AAAA,gBACL,eAAA,EAAe,UAAA;AAAA,gBACf,OAAA,EAAS,MAAM,aAAA,GAAgB,IAAA,CAAK,KAAK,CAAA;AAAA,gBAExC,QAAA,EAAA,IAAA,CAAK;AAAA,eAAA;AAAA,cAPD,IAAA,CAAK;AAAA,aAQZ;AAAA,UAEJ,CAAC;AAAA;AAAA;AACH;AAAA,GACF;AAEJ,CAAA;AAEA,IAAO,YAAA,GAAQ","file":"tabs.cjs","sourcesContent":["import React from 'react';\nimport { classnames } from '../helpers/classnames';\nimport './tabs.css';\n\nexport interface TabItem {\n value: string;\n label: React.ReactNode;\n href?: string;\n}\n\nexport interface TabsProps\n extends React.HTMLAttributes<HTMLDivElement> {\n items: TabItem[];\n value: string;\n onValueChange?: (value: string) => void;\n}\n\nconst Tabs: React.FC<TabsProps> = ({\n items,\n value,\n className = '',\n onValueChange,\n ...props\n}) => {\n const classes = classnames('tabs', className, {});\n\n return (\n <div\n className={classes}\n {...props}\n >\n <div\n className=\"tabs__list\"\n role=\"tablist\"\n aria-label=\"Tabs\"\n >\n {items.map((item) => {\n const isSelected = item.value === value;\n\n const tabClasses = classnames('tabs__tab', {\n 'tabs__tab--selected': isSelected,\n });\n\n if (item.href) {\n return (\n <a\n key={item.value}\n className={tabClasses}\n href={item.href}\n aria-current={isSelected ? 'page' : undefined}\n onClick={() => onValueChange?.(item.value)}\n >\n {item.label}\n </a>\n );\n }\n\n return (\n <button\n key={item.value}\n className={tabClasses}\n type=\"button\"\n role=\"tab\"\n aria-selected={isSelected}\n onClick={() => onValueChange?.(item.value)}\n >\n {item.label}\n </button>\n );\n })}\n </div>\n </div>\n );\n};\n\nexport default Tabs;"]}
@@ -1,67 +1,48 @@
1
1
  .tabs {
2
2
  /* color */
3
- --component-bg: transparent;
4
- --component-text: inherit;
3
+ --tabs-color: var(--color-link);
5
4
 
6
- background: var(--component-bg);
7
- color: var(--component-text);
5
+ color: var(--tabs-color);
8
6
 
9
7
  /* typography */
10
- --component-font-family: inherit;
11
- --component-font-weight: inherit;
12
- --component-font-size: inherit;
13
- --component-line-height: inherit;
14
- --component-letter-spacing: inherit;
15
-
16
- font-family: var(--component-font-family);
17
- font-size: var(--component-font-size);
18
- font-weight: var(--component-font-weight);
19
- line-height: var(--component-line-height);
20
- letter-spacing: var(--component-letter-spacing);
8
+ --tabs-font-family: var(--font-body-family);
9
+ --tabs-font-weight: var(--font-body-weight);
10
+ --tabs-font-size: var(--font-body);
11
+ --tabs-line-height: var(--font-body-line);
12
+ --tabs-letter-spacing: var(--font-body-letter-spacing);
13
+
14
+ font-family: var(--tabs-font-family);
15
+ font-size: var(--tabs-font-size);
16
+ font-weight: var(--tabs-font-weight);
17
+ line-height: var(--tabs-line-height);
18
+ letter-spacing: var(--tabs-letter-spacing);
21
19
 
22
20
  /* size */
23
- --component-width: auto;
24
- --component-height: auto;
25
- --component-gap: 0;
26
- --component-padding-x: 0;
27
- --component-padding-y: 0;
28
-
29
- width: var(--component-width);
30
- min-height: var(--component-height);
31
- gap: var(--component-gap);
32
- padding: var(--component-padding-y) var(--component-padding-x);
21
+ --tabs-gap: var(--margin-tab);
33
22
 
34
23
  display: flex;
35
- align-items: center;
24
+ flex-direction: column;
25
+ gap: var(--tabs-gap);
36
26
 
37
27
  /* border */
38
- --component-border-width: 0;
39
- --component-border-radius: 0;
40
- --component-border-color: transparent;
41
-
42
- border: var(--component-border-width) solid var(--component-border-color);
43
- border-radius: var(--component-border-radius);
44
- outline: none;
45
28
 
46
29
  /* depth */
47
30
 
48
31
  /* motion */
49
- --component-opacity-disabled: 0.6;
50
- --component-transition-duration: 0.2s;
51
-
52
- transition:
53
- border-color var(--component-transition-duration) ease,
54
- opacity var(--component-transition-duration) ease,
55
- background-color var(--component-transition-duration) ease,
56
- color var(--component-transition-duration) ease;
57
32
  }
58
33
 
59
- .tabs__part {
34
+ .tabs__list {
60
35
  /* color */
61
36
 
62
37
  /* typography */
63
38
 
64
39
  /* size */
40
+ --tabs-list-gap: var(--margin-tab);
41
+
42
+ display: inline-flex;
43
+ align-items: center;
44
+ gap: var(--tabs-list-gap);
45
+ width: fit-content;
65
46
 
66
47
  /* border */
67
48
 
@@ -70,38 +51,75 @@
70
51
  /* motion */
71
52
  }
72
53
 
73
- .tabs:hover {
74
- }
75
-
76
- .tabs:focus {
77
- }
78
-
79
- .tabs:focus-visible {
80
- }
81
-
82
- .tabs:active {
83
- }
54
+ .tabs__tab {
55
+ /* color */
56
+ --tabs-tab-bg: transparent;
57
+ --tabs-tab-color: var(--color-link);
58
+ --tabs-tab-bg-selected: var(--color-secondary);
59
+ --tabs-tab-color-selected: var(--color-text-secondary);
60
+ --tabs-tab-color-disabled: var(--color-text-note);
84
61
 
85
- .tabs:disabled {
86
- }
62
+ background: var(--tabs-tab-bg);
63
+ color: var(--tabs-tab-color);
87
64
 
88
- .tabs--variant {
89
- }
65
+ /* typography */
66
+ font: inherit;
67
+ text-align: center;
68
+ white-space: nowrap;
90
69
 
91
- .tabs--state {
92
- }
70
+ /* size */
71
+ --tabs-tab-height: var(--size-tab-height);
72
+ --tabs-tab-padding-x: var(--padding-tab);
93
73
 
94
- .tabs > a {
95
74
  display: inline-flex;
96
75
  align-items: center;
97
76
  justify-content: center;
98
- min-height: 40px;
99
- padding: 0 12px;
77
+ min-height: var(--tabs-tab-height);
78
+ padding: 0 var(--tabs-tab-padding-x);
79
+
80
+ /* border */
81
+ --tabs-tab-radius: var(--radius-flowchart);
82
+ --tabs-tab-border-width: var(--size-border-width-min);
83
+ --tabs-tab-border-color: transparent;
84
+
85
+ border:
86
+ var(--tabs-tab-border-width)
87
+ solid
88
+ var(--tabs-tab-border-color);
89
+ border-radius: var(--tabs-tab-radius);
90
+
91
+ /* depth */
92
+
93
+ /* motion */
94
+ --tabs-transition-duration: var(--motion-duration1);
100
95
 
101
- text-decoration: none;
102
96
  cursor: pointer;
97
+ transition:
98
+ background var(--tabs-transition-duration),
99
+ color var(--tabs-transition-duration),
100
+ border-color var(--tabs-transition-duration);
101
+ }
102
+
103
+ .tabs__tab--selected {
104
+ /* color */
105
+ --tabs-tab-bg: var(--tabs-tab-bg-selected);
106
+ --tabs-tab-color: var(--tabs-tab-color-selected);
107
+
108
+ /* border */
109
+ --tabs-tab-border-color: var(--color-line);
103
110
  }
104
111
 
105
- .tabs > a[aria-current='page'] {
106
- font-weight: 600;
112
+ .tabs__panel {
113
+ /* color */
114
+
115
+ /* typography */
116
+
117
+ /* size */
118
+ width: 100%;
119
+
120
+ /* border */
121
+
122
+ /* depth */
123
+
124
+ /* motion */
107
125
  }
@@ -1,7 +1,15 @@
1
1
  import React from 'react';
2
2
 
3
+ interface TabItem {
4
+ value: string;
5
+ label: React.ReactNode;
6
+ href?: string;
7
+ }
3
8
  interface TabsProps extends React.HTMLAttributes<HTMLDivElement> {
9
+ items: TabItem[];
10
+ value: string;
11
+ onValueChange?: (value: string) => void;
4
12
  }
5
13
  declare const Tabs: React.FC<TabsProps>;
6
14
 
7
- export { type TabsProps, Tabs as default };
15
+ export { type TabItem, type TabsProps, Tabs as default };
@@ -1,7 +1,15 @@
1
1
  import React from 'react';
2
2
 
3
+ interface TabItem {
4
+ value: string;
5
+ label: React.ReactNode;
6
+ href?: string;
7
+ }
3
8
  interface TabsProps extends React.HTMLAttributes<HTMLDivElement> {
9
+ items: TabItem[];
10
+ value: string;
11
+ onValueChange?: (value: string) => void;
4
12
  }
5
13
  declare const Tabs: React.FC<TabsProps>;
6
14
 
7
- export { type TabsProps, Tabs as default };
15
+ export { type TabItem, type TabsProps, Tabs as default };
@@ -3,12 +3,59 @@ import { classnames } from '../helpers/classnames';
3
3
  import './tabs.css';
4
4
 
5
5
  const Tabs = ({
6
+ items,
7
+ value,
6
8
  className = "",
7
- children,
9
+ onValueChange,
8
10
  ...props
9
11
  }) => {
10
- const classes = classnames("tabs", className);
11
- return /* @__PURE__ */ jsx("div", { className: classes, ...props, children });
12
+ const classes = classnames("tabs", className, {});
13
+ return /* @__PURE__ */ jsx(
14
+ "div",
15
+ {
16
+ className: classes,
17
+ ...props,
18
+ children: /* @__PURE__ */ jsx(
19
+ "div",
20
+ {
21
+ className: "tabs__list",
22
+ role: "tablist",
23
+ "aria-label": "Tabs",
24
+ children: items.map((item) => {
25
+ const isSelected = item.value === value;
26
+ const tabClasses = classnames("tabs__tab", {
27
+ "tabs__tab--selected": isSelected
28
+ });
29
+ if (item.href) {
30
+ return /* @__PURE__ */ jsx(
31
+ "a",
32
+ {
33
+ className: tabClasses,
34
+ href: item.href,
35
+ "aria-current": isSelected ? "page" : void 0,
36
+ onClick: () => onValueChange?.(item.value),
37
+ children: item.label
38
+ },
39
+ item.value
40
+ );
41
+ }
42
+ return /* @__PURE__ */ jsx(
43
+ "button",
44
+ {
45
+ className: tabClasses,
46
+ type: "button",
47
+ role: "tab",
48
+ "aria-selected": isSelected,
49
+ onClick: () => onValueChange?.(item.value),
50
+ children: item.label
51
+ },
52
+ item.value
53
+ );
54
+ })
55
+ }
56
+ )
57
+ }
58
+ );
12
59
  };
13
60
  var tabs_default = Tabs;
14
61
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/tabs/tabs.tsx"],"names":[],"mappings":";;;;AAMA,MAAM,OAA4B,CAAC;AAAA,EACjC,SAAA,GAAY,EAAA;AAAA,EACZ,QAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,MAAA,EAAQ,SAAS,CAAA;AAE5C,EAAA,2BACG,KAAA,EAAA,EAAI,SAAA,EAAW,OAAA,EAAU,GAAG,OAC1B,QAAA,EACH,CAAA;AAEJ,CAAA;AAEA,IAAO,YAAA,GAAQ","file":"tabs.js","sourcesContent":["import React from 'react';\nimport { classnames } from '../helpers/classnames';\nimport './tabs.css';\n\nexport interface TabsProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nconst Tabs: React.FC<TabsProps> = ({\n className = '',\n children,\n ...props\n}) => {\n const classes = classnames('tabs', className);\n\n return (\n <div className={classes} {...props}>\n {children}\n </div>\n );\n};\n\nexport default Tabs;"]}
1
+ {"version":3,"sources":["../../../src/components/tabs/tabs.tsx"],"names":[],"mappings":";;;;AAiBA,MAAM,OAA4B,CAAC;AAAA,EACjC,KAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,aAAA;AAAA,EACA,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,MAAA,EAAQ,SAAA,EAAW,EAAE,CAAA;AAEhD,EAAA,uBACE,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAA,GAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAU,YAAA;AAAA,UACV,IAAA,EAAK,SAAA;AAAA,UACL,YAAA,EAAW,MAAA;AAAA,UAEV,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACnB,YAAA,MAAM,UAAA,GAAa,KAAK,KAAA,KAAU,KAAA;AAElC,YAAA,MAAM,UAAA,GAAa,WAAW,WAAA,EAAa;AAAA,cACzC,qBAAA,EAAuB;AAAA,aACxB,CAAA;AAED,YAAA,IAAI,KAAK,IAAA,EAAM;AACb,cAAA,uBACE,GAAA;AAAA,gBAAC,GAAA;AAAA,gBAAA;AAAA,kBAEC,SAAA,EAAW,UAAA;AAAA,kBACX,MAAM,IAAA,CAAK,IAAA;AAAA,kBACX,cAAA,EAAc,aAAa,MAAA,GAAS,MAAA;AAAA,kBACpC,OAAA,EAAS,MAAM,aAAA,GAAgB,IAAA,CAAK,KAAK,CAAA;AAAA,kBAExC,QAAA,EAAA,IAAA,CAAK;AAAA,iBAAA;AAAA,gBAND,IAAA,CAAK;AAAA,eAOZ;AAAA,YAEJ;AAEA,YAAA,uBACE,GAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAW,UAAA;AAAA,gBACX,IAAA,EAAK,QAAA;AAAA,gBACL,IAAA,EAAK,KAAA;AAAA,gBACL,eAAA,EAAe,UAAA;AAAA,gBACf,OAAA,EAAS,MAAM,aAAA,GAAgB,IAAA,CAAK,KAAK,CAAA;AAAA,gBAExC,QAAA,EAAA,IAAA,CAAK;AAAA,eAAA;AAAA,cAPD,IAAA,CAAK;AAAA,aAQZ;AAAA,UAEJ,CAAC;AAAA;AAAA;AACH;AAAA,GACF;AAEJ,CAAA;AAEA,IAAO,YAAA,GAAQ","file":"tabs.js","sourcesContent":["import React from 'react';\nimport { classnames } from '../helpers/classnames';\nimport './tabs.css';\n\nexport interface TabItem {\n value: string;\n label: React.ReactNode;\n href?: string;\n}\n\nexport interface TabsProps\n extends React.HTMLAttributes<HTMLDivElement> {\n items: TabItem[];\n value: string;\n onValueChange?: (value: string) => void;\n}\n\nconst Tabs: React.FC<TabsProps> = ({\n items,\n value,\n className = '',\n onValueChange,\n ...props\n}) => {\n const classes = classnames('tabs', className, {});\n\n return (\n <div\n className={classes}\n {...props}\n >\n <div\n className=\"tabs__list\"\n role=\"tablist\"\n aria-label=\"Tabs\"\n >\n {items.map((item) => {\n const isSelected = item.value === value;\n\n const tabClasses = classnames('tabs__tab', {\n 'tabs__tab--selected': isSelected,\n });\n\n if (item.href) {\n return (\n <a\n key={item.value}\n className={tabClasses}\n href={item.href}\n aria-current={isSelected ? 'page' : undefined}\n onClick={() => onValueChange?.(item.value)}\n >\n {item.label}\n </a>\n );\n }\n\n return (\n <button\n key={item.value}\n className={tabClasses}\n type=\"button\"\n role=\"tab\"\n aria-selected={isSelected}\n onClick={() => onValueChange?.(item.value)}\n >\n {item.label}\n </button>\n );\n })}\n </div>\n </div>\n );\n};\n\nexport default Tabs;"]}
package/index.d.cts CHANGED
@@ -8,8 +8,8 @@ export { default as Checkbox, CheckboxProps } from './components/checkbox/checkb
8
8
  export { default as Radio, RadioProps } from './components/radio/radio.cjs';
9
9
  export { default as Field, FieldProps } from './components/field/field.cjs';
10
10
  export { default as Menu, MenuProps } from './components/menu/menu.cjs';
11
- export { default as Tabs, TabsProps } from './components/tabs/tabs.cjs';
12
- export { default as Video, VideoProps } from './components/video/video.cjs';
11
+ export { TabItem, default as Tabs, TabsProps } from './components/tabs/tabs.cjs';
12
+ export { default as Video, VideoProps, VideoQuality } from './components/video/video.cjs';
13
13
  export { default as Search, SearchProps } from './components/search/search.cjs';
14
14
  export { default as RichEdit, RichEditProps } from './components/richedit/richedit.cjs';
15
15
  export { default as Tag, TagProps } from './components/tag/tag.cjs';
package/index.d.ts CHANGED
@@ -8,8 +8,8 @@ export { default as Checkbox, CheckboxProps } from './components/checkbox/checkb
8
8
  export { default as Radio, RadioProps } from './components/radio/radio.js';
9
9
  export { default as Field, FieldProps } from './components/field/field.js';
10
10
  export { default as Menu, MenuProps } from './components/menu/menu.js';
11
- export { default as Tabs, TabsProps } from './components/tabs/tabs.js';
12
- export { default as Video, VideoProps } from './components/video/video.js';
11
+ export { TabItem, default as Tabs, TabsProps } from './components/tabs/tabs.js';
12
+ export { default as Video, VideoProps, VideoQuality } from './components/video/video.js';
13
13
  export { default as Search, SearchProps } from './components/search/search.js';
14
14
  export { default as RichEdit, RichEditProps } from './components/richedit/richedit.js';
15
15
  export { default as Tag, TagProps } from './components/tag/tag.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jvetrau-ds",
3
- "version": "0.1.18",
3
+ "version": "0.1.19",
4
4
  "description": "Multi-brand React design system with semantic tokens",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",