@tolokoban/ui 0.23.1 → 0.23.3

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.
@@ -1,5 +1,5 @@
1
1
  export declare const name = "@tolokoban/ui";
2
- export declare const version = "0.23.1";
2
+ export declare const version = "0.23.3";
3
3
  export declare const description = "React components with theme";
4
4
  export declare const homepage = "https://tolokoban.github.io/ui";
5
5
  //# sourceMappingURL=info.d.ts.map
package/lib/dist/info.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export const name = "@tolokoban/ui";
2
- export const version = "0.23.1";
2
+ export const version = "0.23.3";
3
3
  export const description = "React components with theme";
4
4
  export const homepage = "https://tolokoban.github.io/ui";
5
5
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5mby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmZvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUE7QUFDbkMsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQTtBQUMvQixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsNkJBQTZCLENBQUE7QUFDeEQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLGdDQUFnQyxDQUFBIn0=
@@ -18,15 +18,16 @@
18
18
  box-shadow: 0 0 1px currentColor;
19
19
  display: grid;
20
20
  place-items: center;
21
- }
22
21
 
23
- .button.selected {
24
- background-color: var(--theme-color-primary-6);
25
- color: var(--theme-color-on-primary-6);
26
- }
22
+ &.selected {
23
+ background-color: var(--theme-color-primary-6);
24
+ color: var(--theme-color-on-primary-6);
25
+ font-weight: bold;
26
+ }
27
27
 
28
- .button.unselected {
29
- opacity: 0.667;
30
- background-color: var(--theme-color-primary-4);
31
- color: var(--theme-color-on-primary-4);
28
+ &.unselected {
29
+ opacity: 0.5;
30
+ background-color: var(--theme-color-primary-4);
31
+ color: var(--theme-color-on-primary-4);
32
+ }
32
33
  }
@@ -2,6 +2,7 @@ import * as React from "react";
2
2
  import { ViewTabProps } from "../Tab";
3
3
  import { DimensionStyleProps } from "../../theme/styles/dimension";
4
4
  import { ColorStyleProps } from "../../theme/styles/color";
5
+ import { ColorName } from "../../types";
5
6
  export type ViewTabsProps = ColorStyleProps & DimensionStyleProps & {
6
7
  className?: string;
7
8
  /** Key of the active Tab. */
@@ -11,11 +12,32 @@ export type ViewTabsProps = ColorStyleProps & DimensionStyleProps & {
11
12
  * * `vertical`: the tabs' headers are on the left.
12
13
  */
13
14
  orientation?: "horizontal" | "vertical";
15
+ /**
16
+ * If true, the tabs are displayed on the right or on the bottom,
17
+ * depending on the `orientation`.
18
+ * Defaults to `false`.
19
+ */
20
+ opposite?: boolean;
14
21
  /**
15
22
  * Callback to call when a new tab is active.
16
23
  * @param value Key of the newly activated tab.
17
24
  */
18
25
  onChange?(this: void, value?: string): void;
26
+ /**
27
+ * Color of the selection.
28
+ * Defaults to `primary-5`.
29
+ */
30
+ colorAccent?: ColorName;
31
+ /**
32
+ * CSS size of the outline.
33
+ * Defaults to `0`.
34
+ */
35
+ outline?: string;
36
+ /**
37
+ * CSS size of the line on the selected tab.
38
+ * Defaults to `outline` or `4px`.
39
+ */
40
+ highlight?: string;
19
41
  children: React.ReactElement<ViewTabProps> | React.ReactElement<ViewTabProps>[];
20
42
  };
21
43
  export declare function ViewTabs(props: ViewTabsProps): import("react/jsx-runtime").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/view/Tabs/Tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAAW,YAAY,EAAE,MAAM,QAAQ,CAAA;AAG9C,OAAO,EACH,mBAAmB,EAEtB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,eAAe,EAAc,MAAM,0BAA0B,CAAA;AAItE,MAAM,MAAM,aAAa,GAAG,eAAe,GACvC,mBAAmB,GAAG;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAA;IACvC;;;OAGG;IACH,QAAQ,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3C,QAAQ,EACF,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,GAChC,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAA;CAC3C,CAAA;AAEL,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,2CAiD5C"}
1
+ {"version":3,"file":"Tabs.d.ts","sourceRoot":"","sources":["../../../src/view/Tabs/Tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAAW,YAAY,EAAE,MAAM,QAAQ,CAAA;AAG9C,OAAO,EACH,mBAAmB,EAEtB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,eAAe,EAAc,MAAM,0BAA0B,CAAA;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAInC,MAAM,MAAM,aAAa,GAAG,eAAe,GACvC,mBAAmB,GAAG;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,WAAW,CAAC,EAAE,YAAY,GAAG,UAAU,CAAA;IACvC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;OAGG;IACH,QAAQ,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3C;;;OAGG;IACH,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,EACF,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,GAChC,KAAK,CAAC,YAAY,CAAC,YAAY,CAAC,EAAE,CAAA;CAC3C,CAAA;AAEL,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,2CA6D5C"}
@@ -5,16 +5,16 @@ import { classnameCommon, Theme } from "../../theme/index.js";
5
5
  import { ViewTab } from "../Tab/index.js";
6
6
  import Styles from "./Tabs.module.css";
7
7
  import { styleDimension, } from "../../theme/styles/dimension.js";
8
- import { styleColor } from "../../theme/styles/color.js";
9
8
  const $ = Theme.classNames;
10
9
  export function ViewTabs(props) {
11
- var _a, _b;
12
- const { className, children: rawChildren, orientation = "horizontal", value, onChange, } = props;
10
+ var _a, _b, _c;
11
+ const { className, children: rawChildren, orientation = "horizontal", value, onChange, color = "neutral-3", colorAccent = "primary-5", outline = "0", highlight, opposite, } = props;
13
12
  const children = filterChildren(rawChildren);
14
13
  const tabs = addMissingKeys(children);
15
14
  const [tabKey, setTabKey] = React.useState((_b = value !== null && value !== void 0 ? value : (_a = tabs[0]) === null || _a === void 0 ? void 0 : _a.key) !== null && _b !== void 0 ? _b : "Tab#0");
16
15
  const tab = tabs.find((item) => item.key === tabKey);
17
- return (_jsxs("div", { style: Object.assign(Object.assign({}, styleColor(props)), styleDimension(props)), className: $.join(className, Styles.Tabs, orientation === "vertical" && Styles.vertical, classnameCommon(props)), children: [_jsx("header", { children: tabs.map((item) => {
16
+ console.log("🚀 [Tabs] opposite =", opposite); // @FIXME: Remove this line written on 2025-08-28 at 11:31
17
+ return (_jsxs("div", { style: Object.assign(Object.assign({}, styleDimension(props)), { "--custom-color-back": `var(--theme-color-${color})`, "--custom-color-text": `var(--theme-color-on-${color})`, "--custom-color-highlight-back": `var(--theme-color-${colorAccent})`, "--custom-color-highlight-text": `var(--theme-color-on-${colorAccent})`, "--custom-outline": outline, "--custom-highlight": (_c = highlight !== null && highlight !== void 0 ? highlight : outline) !== null && _c !== void 0 ? _c : "4px" }), className: $.join(className, Styles.Tabs, orientation === "vertical" && Styles.vertical, classnameCommon(props)), children: [_jsx("header", { className: opposite && Styles.opposite, children: tabs.map((item) => {
18
18
  const { key } = item;
19
19
  return key === tabKey ? (_jsx("div", { children: item.props.label }, key)) : (_jsx("button", { type: "button", onClick: () => {
20
20
  setTabKey(key);
@@ -50,4 +50,4 @@ function filterChildren(children) {
50
50
  return children.filter((child) => Boolean(child.props.children));
51
51
  return children.props.children ? [children] : [];
52
52
  }
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFicy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92aWV3L1RhYnMvVGFicy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQTtBQUU5QixPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQzdELE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sUUFBUSxDQUFBO0FBRTlDLE9BQU8sTUFBTSxNQUFNLG1CQUFtQixDQUFBO0FBQ3RDLE9BQU8sRUFFSCxjQUFjLEdBQ2pCLE1BQU0sOEJBQThCLENBQUE7QUFDckMsT0FBTyxFQUFtQixVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUV0RSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFBO0FBc0IxQixNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQW9COztJQUN6QyxNQUFNLEVBQ0YsU0FBUyxFQUNULFFBQVEsRUFBRSxXQUFXLEVBQ3JCLFdBQVcsR0FBRyxZQUFZLEVBQzFCLEtBQUssRUFDTCxRQUFRLEdBQ1gsR0FBRyxLQUFLLENBQUE7SUFDVCxNQUFNLFFBQVEsR0FDVixjQUFjLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDL0IsTUFBTSxJQUFJLEdBQ04sY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQzVCLE1BQU0sQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFBLEtBQUssYUFBTCxLQUFLLGNBQUwsS0FBSyxHQUFJLE1BQUEsSUFBSSxDQUFDLENBQUMsQ0FBQywwQ0FBRSxHQUFHLG1DQUFJLE9BQU8sQ0FBQyxDQUFBO0lBQzVFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssTUFBTSxDQUFDLENBQUE7SUFDcEQsT0FB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
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFicy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92aWV3L1RhYnMvVGFicy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQTtBQUU5QixPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQzdELE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sUUFBUSxDQUFBO0FBRTlDLE9BQU8sTUFBTSxNQUFNLG1CQUFtQixDQUFBO0FBQ3RDLE9BQU8sRUFFSCxjQUFjLEdBQ2pCLE1BQU0sOEJBQThCLENBQUE7QUFJckMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQTtBQTJDMUIsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFvQjs7SUFDekMsTUFBTSxFQUNGLFNBQVMsRUFDVCxRQUFRLEVBQUUsV0FBVyxFQUNyQixXQUFXLEdBQUcsWUFBWSxFQUMxQixLQUFLLEVBQ0wsUUFBUSxFQUNSLEtBQUssR0FBRyxXQUFXLEVBQ25CLFdBQVcsR0FBRyxXQUFXLEVBQ3pCLE9BQU8sR0FBRyxHQUFHLEVBQ2IsU0FBUyxFQUNULFFBQVEsR0FDWCxHQUFHLEtBQUssQ0FBQTtJQUNULE1BQU0sUUFBUSxHQUNWLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUMvQixNQUFNLElBQUksR0FDTixjQUFjLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDNUIsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQUEsS0FBSyxhQUFMLEtBQUssY0FBTCxLQUFLLEdBQUksTUFBQSxJQUFJLENBQUMsQ0FBQyxDQUFDLDBDQUFFLEdBQUcsbUNBQUksT0FBTyxDQUFDLENBQUE7SUFDNUUsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxD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
@@ -3,82 +3,156 @@
3
3
  --custom-color-text: var(--theme-color-on-neutral-2);
4
4
  --custom-color-highlight-back: var(--theme-color-primary-5);
5
5
  --custom-color-highlight-text: var(--theme-color-on-primary-5);
6
+ --custom-border-radius: 4px;
7
+ --custom-outline: 0;
8
+ --custom-highlight: 4px;
6
9
  display: flex;
7
10
  flex-direction: column;
8
11
  justify-content: flex-start;
9
12
  align-items: stretch;
10
13
  gap: 0;
11
14
  margin: 0.25em;
12
- }
15
+ background: none;
13
16
 
14
- .Tabs.vertical {
15
- flex-direction: row;
16
- }
17
+ &.vertical {
18
+ flex-direction: row;
17
19
 
18
- .Tabs > header {
19
- flex: 0 0 auto;
20
- display: flex;
21
- flex-direction: row;
22
- justify-content: flex-start;
23
- align-items: stretch;
24
- flex-wrap: wrap-reverse;
25
- padding: 0;
26
- }
20
+ > header {
21
+ /* flex-direction: column; */
22
+ flex-direction: column;
27
23
 
28
- .Tabs.vertical > header {
29
- /* flex-direction: column; */
30
- writing-mode: vertical-rl;
31
- text-orientation: mixed;
32
- }
24
+ & > button,
25
+ & > div {
26
+ writing-mode: vertical-rl;
27
+ text-orientation: mixed;
28
+ max-height: none;
29
+ height: auto;
30
+ width: calc(2em + var(--custom-highlight));
31
+ max-width: calc(2em + var(--custom-highlight));
32
+ padding: 0.5em 0;
33
+ }
33
34
 
34
- .Tabs > header > div {
35
- background: var(--custom-color-back);
36
- color: var(--custom-color-text);
37
- border-top: 2px solid var(--custom-color-highlight-back);
38
- border-radius: 2px 2px 0 0;
39
- font-weight: bold;
40
- }
35
+ & > div {
36
+ border: var(--custom-outline) solid
37
+ var(--custom-color-highlight-back);
38
+ border-left: var(--custom-highlight) solid
39
+ var(--custom-color-highlight-back);
40
+ border-right: none;
41
+ border-radius: var(--custom-border-radius) 0 0
42
+ var(--custom-border-radius);
43
+ font-weight: bold;
44
+ z-index: 2;
45
+ transform: translateX(var(--custom-outline));
46
+ }
41
47
 
42
- .Tabs > header > button {
43
- all: inherit;
44
- display: inline-block;
45
- cursor: pointer;
46
- transition: all 0.2s;
47
- opacity: 0.6;
48
- }
48
+ & > button {
49
+ padding-left: var(--custom-highlight);
50
+ }
49
51
 
50
- .Tabs > header > button:hover,
51
- .Tabs > header > button:active {
52
- background: var(--custom-color-highlight-back);
53
- color: var(--custom-color-highlight-text);
54
- }
52
+ &.opposite {
53
+ > div {
54
+ border: var(--custom-outline) solid
55
+ var(--custom-color-highlight-back);
56
+ border-left: none;
57
+ border-right: var(--custom-highlight) solid
58
+ var(--custom-color-highlight-back);
59
+ border-radius: 0 var(--custom-border-radius)
60
+ var(--custom-border-radius) 0;
61
+ transform: translateX(calc(0px - var(--custom-outline)));
62
+ }
55
63
 
56
- .Tabs > header > button,
57
- .Tabs > header > div {
58
- margin: 0;
59
- padding: 0 0.5em;
60
- display: grid;
61
- place-items: center;
62
- height: 2em;
63
- max-height: 2em;
64
- overflow: hidden;
65
- white-space: nowrap;
66
- text-overflow: ellipsis;
67
- }
64
+ > button {
65
+ padding-left: 0;
66
+ padding-right: var(--custom-highlight);
67
+ }
68
+ }
69
+ }
70
+ }
68
71
 
69
- .Tabs.vertical > header > button,
70
- .Tabs.vertical > header > div {
71
- writing-mode: vertical-rl;
72
- text-orientation: mixed;
73
- }
72
+ > main {
73
+ flex: 1 1 auto;
74
+ padding: 0.5em;
75
+ background: var(--custom-color-back);
76
+ color: var(--custom-color-text);
77
+ border-radius: 0 var(--custom-border-radius) var(--custom-border-radius)
78
+ var(--custom-border-radius);
79
+ border: var(--custom-outline) solid var(--custom-color-highlight-back);
80
+ }
81
+
82
+ > header {
83
+ flex: 0 0 auto;
84
+ display: flex;
85
+ flex-direction: row;
86
+ justify-content: flex-start;
87
+ align-items: stretch;
88
+ flex-wrap: wrap-reverse;
89
+ padding: 0;
90
+ z-index: 1;
91
+
92
+ &.opposite {
93
+ order: 2;
94
+
95
+ > div {
96
+ border-bottom: var(--custom-highlight) solid
97
+ var(--custom-color-highlight-back);
98
+ border-top: none;
99
+ border-radius: 0 0 var(--custom-border-radius)
100
+ var(--custom-border-radius);
101
+ transform: translateY(calc(0px - var(--custom-outline)));
102
+ }
103
+
104
+ > button {
105
+ padding-top: 0;
106
+ padding-bottom: var(--custom-highlight);
107
+ }
108
+ }
109
+
110
+ > div {
111
+ background: var(--custom-color-back);
112
+ color: var(--custom-color-text);
113
+ border: var(--custom-outline) solid
114
+ var(--custom-color-highlight-back);
115
+ border-top: var(--custom-highlight) solid
116
+ var(--custom-color-highlight-back);
117
+ border-bottom: none;
118
+ border-radius: var(--custom-border-radius)
119
+ var(--custom-border-radius) 0 0;
120
+ font-weight: bold;
121
+ z-index: 2;
122
+ transform: translateY(var(--custom-outline));
123
+ }
124
+
125
+ > button {
126
+ font: inherit;
127
+ cursor: pointer;
128
+ transition: all 0.2s;
129
+ opacity: 0.6;
130
+ background: none;
131
+ border: none;
132
+ box-shadow: none;
133
+ padding-top: var(--custom-highlight);
134
+
135
+ &:hover,
136
+ &:active {
137
+ background: var(--custom-color-highlight-back);
138
+ color: var(--custom-color-highlight-text);
139
+ }
140
+ }
74
141
 
75
- .Tabs > main {
76
- flex: 1 1 auto;
77
- padding: 0.5em;
78
- background: linear-gradient(
79
- to bottom,
80
- var(--custom-color-back),
81
- transparent
82
- );
83
- color: var(--custom-color-text);
142
+ > * {
143
+ margin: 0;
144
+ padding: 0 0.5em;
145
+ display: flex;
146
+ flex-wrap: nowrap;
147
+ flex-direction: row;
148
+ justify-content: flex-start;
149
+ align-items: center;
150
+ gap: 1em;
151
+ height: calc(2em + var(--custom-highlight));
152
+ max-height: calc(2em + var(--custom-highlight));
153
+ overflow: hidden;
154
+ white-space: nowrap;
155
+ text-overflow: ellipsis;
156
+ }
157
+ }
84
158
  }
@@ -1,4 +1,4 @@
1
- // This file has been generated on Wed, 27 Aug 2025 15:12:46 GMT
1
+ // This file has been generated on Thu, 28 Aug 2025 09:45:28 GMT
2
2
  export * from "./Button/index.js";
3
3
  export * from "./Chip/index.js";
4
4
  export * from "./CodeHighlighter/index.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tolokoban/ui",
3
- "version": "0.23.1",
3
+ "version": "0.23.3",
4
4
  "description": "React components with theme",
5
5
  "homepage": "https://tolokoban.github.io/ui",
6
6
  "main": "./lib/dist/index.js",