aidos-ui 3.0.29 → 3.0.31

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 (188) hide show
  1. package/.claude/settings.local.json +8 -0
  2. package/dist/Badge.d.ts +2 -2
  3. package/dist/Badge.js +3 -3
  4. package/dist/Badge.js.map +1 -1
  5. package/dist/BaseButton.d.ts +1 -1
  6. package/dist/BaseButton.js +5 -5
  7. package/dist/BaseButton.js.map +1 -1
  8. package/dist/BaseInput.d.ts +1 -1
  9. package/dist/BaseInput.js +4 -4
  10. package/dist/BaseInput.js.map +1 -1
  11. package/dist/BaseLink.d.ts +1 -1
  12. package/dist/BaseLink.js +4 -4
  13. package/dist/BaseLink.js.map +1 -1
  14. package/dist/BaseList.js +3 -3
  15. package/dist/BaseList.js.map +1 -1
  16. package/dist/BaseListItem.d.ts +1 -1
  17. package/dist/BaseListItem.js +4 -4
  18. package/dist/BaseListItem.js.map +1 -1
  19. package/dist/BaseView.d.ts +1 -1
  20. package/dist/BaseView.js +8 -8
  21. package/dist/BaseView.js.map +1 -1
  22. package/dist/Button.js +3 -3
  23. package/dist/Button.js.map +1 -1
  24. package/dist/Calendar.d.ts +1 -1
  25. package/dist/Calendar.js +3 -3
  26. package/dist/Calendar.js.map +1 -1
  27. package/dist/Card.d.ts +1 -1
  28. package/dist/Card.js +3 -3
  29. package/dist/Card.js.map +1 -1
  30. package/dist/Checkbox.js +3 -3
  31. package/dist/Checkbox.js.map +1 -1
  32. package/dist/Circle.d.ts +1 -1
  33. package/dist/Circle.js +3 -3
  34. package/dist/Circle.js.map +1 -1
  35. package/dist/DarkMode.js +1 -1
  36. package/dist/DarkMode.js.map +1 -1
  37. package/dist/DateInput.d.ts +1 -1
  38. package/dist/DateInput.js +4 -4
  39. package/dist/DateInput.js.map +1 -1
  40. package/dist/DatePicker.js +3 -3
  41. package/dist/DatePicker.js.map +1 -1
  42. package/dist/DatetimeInput.d.ts +1 -1
  43. package/dist/DatetimeInput.js +3 -3
  44. package/dist/DatetimeInput.js.map +1 -1
  45. package/dist/DesignBook.js +1 -1
  46. package/dist/DesignBook.js.map +1 -1
  47. package/dist/Dialog.js +4 -4
  48. package/dist/Dialog.js.map +1 -1
  49. package/dist/Dropdown.d.ts +3 -3
  50. package/dist/Dropdown.js +4 -4
  51. package/dist/Dropdown.js.map +1 -1
  52. package/dist/FlexLayout.js +3 -3
  53. package/dist/FlexLayout.js.map +1 -1
  54. package/dist/Icon.js +10 -10
  55. package/dist/Icon.js.map +1 -1
  56. package/dist/IconButton.js +3 -3
  57. package/dist/IconButton.js.map +1 -1
  58. package/dist/IconLink.js +1 -1
  59. package/dist/IconLink.js.map +1 -1
  60. package/dist/Interactable.js +10 -10
  61. package/dist/Interactable.js.map +1 -1
  62. package/dist/Link.js +4 -4
  63. package/dist/Link.js.map +1 -1
  64. package/dist/List.d.ts +1 -1
  65. package/dist/List.js +3 -3
  66. package/dist/List.js.map +1 -1
  67. package/dist/ListButtonItem.js +2 -2
  68. package/dist/ListButtonItem.js.map +1 -1
  69. package/dist/ListDivider.js +2 -2
  70. package/dist/ListDivider.js.map +1 -1
  71. package/dist/ListHeaderItem.js +1 -1
  72. package/dist/ListHeaderItem.js.map +1 -1
  73. package/dist/ListItem.js +1 -1
  74. package/dist/ListItem.js.map +1 -1
  75. package/dist/ListLinkItem.js +2 -2
  76. package/dist/ListLinkItem.js.map +1 -1
  77. package/dist/ListSpacer.js +2 -2
  78. package/dist/ListSpacer.js.map +1 -1
  79. package/dist/MenuIcon.js +6 -6
  80. package/dist/MenuIcon.js.map +1 -1
  81. package/dist/NextJSRouter.js +3 -3
  82. package/dist/NextJSRouter.js.map +1 -1
  83. package/dist/Popover.d.ts +2 -2
  84. package/dist/Popover.js +5 -5
  85. package/dist/Popover.js.map +1 -1
  86. package/dist/ProgressBar.d.ts +2 -2
  87. package/dist/ProgressBar.js +6 -6
  88. package/dist/ProgressBar.js.map +1 -1
  89. package/dist/ProgressCircle.js +2 -2
  90. package/dist/ProgressCircle.js.map +1 -1
  91. package/dist/RangeInput.js +4 -4
  92. package/dist/RangeInput.js.map +1 -1
  93. package/dist/RootView.js +1 -1
  94. package/dist/RootView.js.map +1 -1
  95. package/dist/Select.d.ts +1 -1
  96. package/dist/Select.js +4 -4
  97. package/dist/Select.js.map +1 -1
  98. package/dist/StaticCheckbox.js +3 -3
  99. package/dist/StaticCheckbox.js.map +1 -1
  100. package/dist/Sublist.d.ts +2 -2
  101. package/dist/Sublist.js +2 -2
  102. package/dist/Sublist.js.map +1 -1
  103. package/dist/SubmitIconInput.js +2 -2
  104. package/dist/SubmitIconInput.js.map +1 -1
  105. package/dist/Tabs.d.ts +5 -2
  106. package/dist/Tabs.js +31 -25
  107. package/dist/Tabs.js.map +1 -1
  108. package/dist/Text.d.ts +2 -2
  109. package/dist/Text.js +4 -4
  110. package/dist/Text.js.map +1 -1
  111. package/dist/TextArea.d.ts +1 -1
  112. package/dist/TextArea.js +4 -4
  113. package/dist/TextArea.js.map +1 -1
  114. package/dist/TextInput.js +5 -5
  115. package/dist/TextInput.js.map +1 -1
  116. package/dist/TextPairing.d.ts +2 -2
  117. package/dist/TextPairing.js +6 -6
  118. package/dist/TextPairing.js.map +1 -1
  119. package/dist/TimeInput.js +4 -4
  120. package/dist/TimeInput.js.map +1 -1
  121. package/dist/Tooltip.d.ts +2 -2
  122. package/dist/Tooltip.js +5 -5
  123. package/dist/Tooltip.js.map +1 -1
  124. package/dist/jss.d.ts +5 -5
  125. package/dist/jss.js +17 -17
  126. package/dist/jss.js.map +1 -1
  127. package/package.json +1 -1
  128. package/src/Badge.tsx +4 -4
  129. package/src/BaseButton.tsx +6 -6
  130. package/src/BaseInput.tsx +10 -5
  131. package/src/BaseLink.tsx +5 -5
  132. package/src/BaseList.tsx +3 -6
  133. package/src/BaseListItem.tsx +5 -5
  134. package/src/BaseView.tsx +9 -9
  135. package/src/Button.tsx +3 -3
  136. package/src/Calendar.tsx +4 -4
  137. package/src/Card.tsx +3 -3
  138. package/src/Checkbox.tsx +3 -3
  139. package/src/Circle.tsx +3 -3
  140. package/src/DarkMode.tsx +1 -1
  141. package/src/DateInput.tsx +5 -5
  142. package/src/DatePicker.tsx +3 -3
  143. package/src/DatetimeInput.tsx +5 -12
  144. package/src/DesignBook.tsx +1 -1
  145. package/src/Dialog.tsx +6 -6
  146. package/src/Dropdown.tsx +8 -8
  147. package/src/FlexLayout.tsx +3 -3
  148. package/src/Icon.tsx +10 -10
  149. package/src/IconButton.tsx +3 -11
  150. package/src/IconLink.tsx +1 -1
  151. package/src/Interactable.tsx +10 -10
  152. package/src/Link.tsx +4 -4
  153. package/src/List.tsx +3 -3
  154. package/src/ListButtonItem.tsx +3 -3
  155. package/src/ListDivider.tsx +2 -2
  156. package/src/ListHeaderItem.tsx +1 -1
  157. package/src/ListItem.tsx +1 -6
  158. package/src/ListLinkItem.tsx +3 -3
  159. package/src/ListSpacer.tsx +2 -2
  160. package/src/MenuIcon.tsx +6 -6
  161. package/src/NextJSRouter.tsx +3 -3
  162. package/src/Popover.tsx +6 -6
  163. package/src/ProgressBar.tsx +7 -7
  164. package/src/ProgressCircle.tsx +2 -2
  165. package/src/RangeInput.tsx +4 -4
  166. package/src/RootView.tsx +1 -1
  167. package/src/Select.tsx +5 -5
  168. package/src/StaticCheckbox.tsx +4 -6
  169. package/src/Sublist.tsx +4 -4
  170. package/src/SubmitIconInput.tsx +2 -2
  171. package/src/Tabs.tsx +55 -46
  172. package/src/Text.tsx +12 -5
  173. package/src/TextArea.tsx +5 -5
  174. package/src/TextInput.tsx +6 -6
  175. package/src/TextPairing.tsx +7 -7
  176. package/src/TimeInput.tsx +4 -4
  177. package/src/Tooltip.tsx +6 -6
  178. package/src/docs/mdx.tsx +6 -8
  179. package/src/docs/searchIndex.ts +1 -1
  180. package/src/jss.tsx +17 -17
  181. package/src/pages/Calendar.mdx +4 -4
  182. package/src/pages/Card.mdx +4 -4
  183. package/src/pages/FlexLayout.mdx +6 -6
  184. package/src/pages/Tabs.mdx +261 -4
  185. package/src/pages/TextPairing.mdx +2 -2
  186. package/src/pages/TimeInput.mdx +2 -2
  187. package/src/pages/_app.tsx +6 -6
  188. package/src/pages/css-in-js.mdx +2 -2
package/src/Link.tsx CHANGED
@@ -39,7 +39,7 @@ export const Link = React.forwardRef(
39
39
  align = "center",
40
40
  gap = "small",
41
41
  justify = "center",
42
- jsStyle,
42
+ jss,
43
43
  size = "medium",
44
44
  padding = "medium",
45
45
  inline = true,
@@ -56,7 +56,7 @@ export const Link = React.forwardRef(
56
56
  color={color}
57
57
  disabled={disabled}
58
58
  padding={padding}
59
- jsStyle={[
59
+ jss={[
60
60
  {
61
61
  borderRadius: cssVar("--border-radius-m"),
62
62
  justifyContent: "center",
@@ -70,11 +70,11 @@ export const Link = React.forwardRef(
70
70
  textUnderlineOffset: "2px",
71
71
  textDecorationColor: getCSSColor(color, disabled, bare),
72
72
  },
73
- jsStyle,
73
+ jss,
74
74
  ]}
75
75
  >
76
76
  <Row
77
- jsStyle={{
77
+ jss={{
78
78
  display: inline ? "inline-flex" : "flex",
79
79
  }}
80
80
  grow={true}
package/src/List.tsx CHANGED
@@ -16,7 +16,7 @@ const ListContext = React.createContext({ bare: false, carded: true });
16
16
 
17
17
  export function List({
18
18
  ariaLabel,
19
- jsStyle,
19
+ jss,
20
20
  autofocus = false,
21
21
  navigation = true,
22
22
  bare,
@@ -32,7 +32,7 @@ export function List({
32
32
  role="grid"
33
33
  aria-label={ariaLabel}
34
34
  ref={rootRef}
35
- jsStyle={[
35
+ jss={[
36
36
  { overflow: "hidden" },
37
37
  !bare && {
38
38
  backgroundColor: cssVar("--overlay-background"),
@@ -47,7 +47,7 @@ export function List({
47
47
  border: `1px solid ${cssVar("--divider")}`,
48
48
  borderRadius: cssVar("--border-radius-l"),
49
49
  },
50
- jsStyle,
50
+ jss,
51
51
  ]}
52
52
  {...otherProps}
53
53
  />
@@ -27,7 +27,7 @@ export const ListButtonItem = React.forwardRef(
27
27
  color = "primary",
28
28
  disabled = false,
29
29
  padding = "medium",
30
- jsStyle,
30
+ jss,
31
31
  gap,
32
32
  selected,
33
33
  ...otherProps
@@ -47,7 +47,7 @@ export const ListButtonItem = React.forwardRef(
47
47
  selected={selected}
48
48
  aria-selected={selected}
49
49
  {...otherProps}
50
- jsStyle={jsStyle}
50
+ jss={jss}
51
51
  >
52
52
  {({ content }) => (
53
53
  <BaseButton
@@ -57,7 +57,7 @@ export const ListButtonItem = React.forwardRef(
57
57
  bare={true}
58
58
  color={bare ? "primary" : color}
59
59
  ref={ref}
60
- jsStyle={getInteractableListItemJSStyles({ bare, selected })}
60
+ jss={getInteractableListItemJSStyles({ bare, selected })}
61
61
  onClick={onClick}
62
62
  >
63
63
  {content}
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  import { BaseView } from "./BaseView";
3
3
 
4
- const jsStyles = {
4
+ const jsss = {
5
5
  root: {
6
6
  width: "100%",
7
7
  borderBottom: "1px solid var(--divider)",
@@ -9,5 +9,5 @@ const jsStyles = {
9
9
  };
10
10
 
11
11
  export function ListDivider() {
12
- return <BaseView jsStyle={jsStyles.root} />;
12
+ return <BaseView jss={jsss.root} />;
13
13
  }
@@ -29,7 +29,7 @@ export function ListHeaderItem({
29
29
  addOn={addOn}
30
30
  addOnPosition={addOnPosition}
31
31
  withDivider={bare ? false : withDivider}
32
- jsStyle={
32
+ jss={
33
33
  bare
34
34
  ? null
35
35
  : {
package/src/ListItem.tsx CHANGED
@@ -16,12 +16,7 @@ export const ListItem = React.forwardRef(
16
16
  const { bare } = useListContext();
17
17
 
18
18
  return (
19
- <BaseListItem
20
- withDivider={!bare}
21
- {...props}
22
- jsStyle={props.jsStyle}
23
- ref={ref}
24
- >
19
+ <BaseListItem withDivider={!bare} {...props} jss={props.jss} ref={ref}>
25
20
  {({ content }) => content}
26
21
  </BaseListItem>
27
22
  );
@@ -29,7 +29,7 @@ export const ListLinkItem = React.forwardRef(
29
29
  href,
30
30
  disabled = false,
31
31
  padding = "medium",
32
- jsStyle,
32
+ jss,
33
33
  gap,
34
34
  selected,
35
35
  color = "primary",
@@ -51,7 +51,7 @@ export const ListLinkItem = React.forwardRef(
51
51
  bodyColor={getGlyphColor(color, disabled, true)}
52
52
  selected={selected}
53
53
  {...otherProps}
54
- jsStyle={jsStyle}
54
+ jss={jss}
55
55
  >
56
56
  {({ content }) => (
57
57
  <BaseLink
@@ -64,7 +64,7 @@ export const ListLinkItem = React.forwardRef(
64
64
  color={color}
65
65
  href={href}
66
66
  ref={ref}
67
- jsStyle={getInteractableListItemJSStyles({ bare, selected })}
67
+ jss={getInteractableListItemJSStyles({ bare, selected })}
68
68
  onClick={onClick}
69
69
  >
70
70
  {content}
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  import { BaseView } from "./BaseView";
3
3
 
4
- const jsStyles = {
4
+ const jsss = {
5
5
  root: {
6
6
  height: "var(--spacing-xl)",
7
7
  backgroundColor: "var(--secondary-background)",
@@ -10,5 +10,5 @@ const jsStyles = {
10
10
  };
11
11
 
12
12
  export function ListSpacer() {
13
- return <BaseView jsStyle={jsStyles.root} />;
13
+ return <BaseView jss={jsss.root} />;
14
14
  }
package/src/MenuIcon.tsx CHANGED
@@ -7,7 +7,7 @@ export function MenuIcon({ open, color }: { open: boolean; color: Color }) {
7
7
  <Column gap="small">
8
8
  <Bar
9
9
  color={color}
10
- jsStyle={{
10
+ jss={{
11
11
  transform: open ? "rotateZ(135deg)" : "",
12
12
  transformOrigin: "center",
13
13
  top: open ? 8 : 0,
@@ -15,13 +15,13 @@ export function MenuIcon({ open, color }: { open: boolean; color: Color }) {
15
15
  />
16
16
  <Bar
17
17
  color={color}
18
- jsStyle={{
18
+ jss={{
19
19
  opacity: open ? 0 : 1,
20
20
  }}
21
21
  />
22
22
  <Bar
23
23
  color={color}
24
- jsStyle={{
24
+ jss={{
25
25
  transform: open ? "rotateZ(-135deg)" : "",
26
26
  transformOrigin: "center",
27
27
  top: open ? -8 : 0,
@@ -31,10 +31,10 @@ export function MenuIcon({ open, color }: { open: boolean; color: Color }) {
31
31
  );
32
32
  }
33
33
 
34
- function Bar({ jsStyle, color }: { jsStyle: JSStyle; color: Color }) {
34
+ function Bar({ jss, color }: { jss: JSStyle; color: Color }) {
35
35
  return (
36
36
  <BaseView
37
- jsStyle={[
37
+ jss={[
38
38
  {
39
39
  position: "relative",
40
40
  width: 24,
@@ -43,7 +43,7 @@ function Bar({ jsStyle, color }: { jsStyle: JSStyle; color: Color }) {
43
43
  transition: "all 200ms ease-out",
44
44
  },
45
45
  getBackground(color),
46
- jsStyle,
46
+ jss,
47
47
  ]}
48
48
  />
49
49
  );
@@ -7,7 +7,7 @@ import { BaseView } from "./BaseView";
7
7
  import { useRouterState } from "./NextJSRouterState";
8
8
  import { JSStyle } from "./jss";
9
9
 
10
- const jsStyles: { [key: string]: JSStyle } = {
10
+ const jsss: { [key: string]: JSStyle } = {
11
11
  root: {
12
12
  display: "flex",
13
13
  flexDirection: "column",
@@ -36,7 +36,7 @@ export function Router() {
36
36
  } = useRouterState();
37
37
 
38
38
  return (
39
- <BaseView jsStyle={jsStyles.root}>
39
+ <BaseView jss={jsss.root}>
40
40
  {navigationStack.map(({ route, routeProps }, index, list) => {
41
41
  const isTopOfStack = index === list.length - 1;
42
42
 
@@ -46,7 +46,7 @@ export function Router() {
46
46
  isTopOfStack={isTopOfStack}
47
47
  >
48
48
  <Column
49
- jsStyle={[jsStyles.route, !isTopOfStack && jsStyles.hidden]}
49
+ jss={[jsss.route, !isTopOfStack && jsss.hidden]}
50
50
  aria-hidden={!isTopOfStack}
51
51
  >
52
52
  <ListDivider />
package/src/Popover.tsx CHANGED
@@ -3,9 +3,9 @@ import { queryFocusables } from "./aria";
3
3
 
4
4
  import { BaseView } from "./BaseView";
5
5
  import { useRefEffect } from "./useRefEffect";
6
- import { JSStyle, jss } from "./jss";
6
+ import { JSStyle, toClassnames } from "./jss";
7
7
 
8
- const jsStyles: { [key: string]: JSStyle } = {
8
+ const jsss: { [key: string]: JSStyle } = {
9
9
  popover: {
10
10
  padding: 0,
11
11
  zIndex: 1,
@@ -77,7 +77,7 @@ export function Popover({ children, close }) {
77
77
 
78
78
  interface PopoverTriggerProps<Input> {
79
79
  PopoverComponent: (props: { close: () => void } & Input) => JSX.Element;
80
- jsStyle?: JSStyle;
80
+ jss?: JSStyle;
81
81
  dialogJSStyle?: JSStyle;
82
82
  className?: undefined;
83
83
  grow?: boolean;
@@ -88,7 +88,7 @@ interface PopoverTriggerProps<Input> {
88
88
 
89
89
  export function PopoverTrigger<Input>({
90
90
  PopoverComponent,
91
- jsStyle,
91
+ jss,
92
92
  dialogJSStyle,
93
93
  grow,
94
94
  shrink,
@@ -120,14 +120,14 @@ export function PopoverTrigger<Input>({
120
120
  shrink={shrink}
121
121
  tag={tag}
122
122
  relative={true}
123
- jsStyle={[jsStyle, { position: "relative", display: "inline-block" }]}
123
+ jss={[jss, { position: "relative", display: "inline-block" }]}
124
124
  >
125
125
  {children({ toggle })}
126
126
  <dialog
127
127
  ref={(ref: null | HTMLDialogElement) => {
128
128
  dialogRef.current = ref;
129
129
  }}
130
- className={jss([jsStyles.popover, dialogJSStyle])}
130
+ className={toClassnames([jsss.popover, dialogJSStyle])}
131
131
  onClose={() => {
132
132
  setPopover(null);
133
133
  }}
@@ -2,7 +2,7 @@ import React from "react";
2
2
  import { BaseView } from "./BaseView";
3
3
  import { Color, Size, JSStyle, getBackground } from "./jss";
4
4
 
5
- const jsStyles: { [key: string]: JSStyle } = {
5
+ const jsss: { [key: string]: JSStyle } = {
6
6
  root: {
7
7
  width: "100%",
8
8
  display: "flex",
@@ -35,25 +35,25 @@ export function ProgressBar({
35
35
  color,
36
36
  progress,
37
37
  size,
38
- jsStyle,
38
+ jss,
39
39
  }: {
40
40
  progress: number;
41
41
  color: Color;
42
42
  size: Size;
43
- jsStyle?: JSStyle;
43
+ jss?: JSStyle;
44
44
  }) {
45
45
  return (
46
46
  <BaseView
47
- jsStyle={[
48
- jsStyles.root,
47
+ jss={[
48
+ jsss.root,
49
49
  {
50
50
  height: sizes[size],
51
51
  },
52
- jsStyle,
52
+ jss,
53
53
  ]}
54
54
  >
55
55
  <BaseView
56
- jsStyle={[jsStyles.fill, getBackground(color)]}
56
+ jss={[jsss.fill, getBackground(color)]}
57
57
  style={{
58
58
  transform: `scaleX(${progress > 1 ? 1 : progress})`,
59
59
  }}
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import { cssVar, jss } from "./jss";
2
+ import { cssVar, toClassnames } from "./jss";
3
3
 
4
4
  export function ProgressCircle({
5
5
  progress,
@@ -15,7 +15,7 @@ export function ProgressCircle({
15
15
 
16
16
  return (
17
17
  <svg
18
- className={jss({
18
+ className={toClassnames({
19
19
  backgroundColor: cssVar("--secondary-background"),
20
20
  transform: "rotate(-90deg)",
21
21
  borderRadius: "50%",
@@ -20,7 +20,7 @@ export const RangeInput = React.forwardRef(
20
20
  value,
21
21
  onValueChange,
22
22
  rootJSStyle,
23
- jsStyle,
23
+ jss,
24
24
  gap = "medium",
25
25
  padding = "none",
26
26
  min = 0,
@@ -38,7 +38,7 @@ export const RangeInput = React.forwardRef(
38
38
  gap={gap}
39
39
  padding={padding}
40
40
  align="center"
41
- jsStyle={[
41
+ jss={[
42
42
  {
43
43
  ":has(:focus-visible)": {
44
44
  borderRadius: cssVar("--border-radius-m"),
@@ -60,7 +60,7 @@ export const RangeInput = React.forwardRef(
60
60
  onChange={(e) => {
61
61
  onValueChange(parseFloat(e.target.value));
62
62
  }}
63
- jsStyle={[
63
+ jss={[
64
64
  {
65
65
  backgroundColor: cssVar("--primary-background"),
66
66
  flexGrow: 1,
@@ -72,7 +72,7 @@ export const RangeInput = React.forwardRef(
72
72
  color: cssVar("--subtle-text"),
73
73
  },
74
74
  },
75
- jsStyle,
75
+ jss,
76
76
  ]}
77
77
  />
78
78
  {addOnPosition === "end" && addOn}
package/src/RootView.tsx CHANGED
@@ -39,7 +39,7 @@ export function RootView({
39
39
  return (
40
40
  <Column
41
41
  ref={refCallback}
42
- jsStyle={{
42
+ jss={{
43
43
  marginBottom: 0,
44
44
  flexGrow: 1,
45
45
  flexShrink: 1,
package/src/Select.tsx CHANGED
@@ -1,30 +1,30 @@
1
1
  import { forwardRef } from "react";
2
- import { JSStyle, cssVar, jss } from "./jss";
2
+ import { JSStyle, cssVar, toClassnames } from "./jss";
3
3
 
4
4
  export interface SelectProps extends React.HTMLAttributes<HTMLSelectElement> {
5
5
  value: string;
6
6
  onValueChange: (value: string) => void;
7
- jsStyle?: JSStyle;
7
+ jss?: JSStyle;
8
8
  ref?: React.Ref<HTMLSelectElement>;
9
9
  className?: undefined;
10
10
  }
11
11
 
12
12
  export const Select = forwardRef(
13
13
  (
14
- { jsStyle, children, onValueChange, value, ...otherProps }: SelectProps,
14
+ { jss, children, onValueChange, value, ...otherProps }: SelectProps,
15
15
  ref?: React.Ref<HTMLSelectElement>
16
16
  ) => {
17
17
  return (
18
18
  <select
19
19
  ref={ref}
20
- className={jss([
20
+ className={toClassnames([
21
21
  {
22
22
  fontSize: 20,
23
23
  border: `1px solid ${cssVar("--divider")}`,
24
24
  backgroundColor: cssVar("--overlay-background"),
25
25
  borderRadius: cssVar("--border-radius-m"),
26
26
  },
27
- jsStyle,
27
+ jss,
28
28
  ])}
29
29
  value={value}
30
30
  onChange={(e) => {
@@ -10,7 +10,7 @@ type StaticCheckboxProps = {
10
10
  icon?: IconType;
11
11
  };
12
12
 
13
- const jsStyles: { [key: string]: JSStyle } = {
13
+ const jsss: { [key: string]: JSStyle } = {
14
14
  border: {
15
15
  position: "absolute",
16
16
  top: "var(--spacing-xs)",
@@ -51,7 +51,7 @@ export function StaticCheckbox({
51
51
  }: StaticCheckboxProps) {
52
52
  return (
53
53
  <BaseView
54
- jsStyle={{
54
+ jss={{
55
55
  position: "relative",
56
56
  backgroundColor: cssVar("--primary-background"),
57
57
  overflow: "hidden",
@@ -61,11 +61,9 @@ export function StaticCheckbox({
61
61
  width: sizes[size],
62
62
  }}
63
63
  >
64
- <BaseView
65
- jsStyle={[jsStyles.border, checked && jsStyles.borderChecked]}
66
- />
64
+ <BaseView jss={[jsss.border, checked && jsss.borderChecked]} />
67
65
  {checked && (
68
- <BaseView jsStyle={jsStyles.icon}>
66
+ <BaseView jss={jsss.icon}>
69
67
  <Icon size={size} color="light" icon={icon} />
70
68
  </BaseView>
71
69
  )}
package/src/Sublist.tsx CHANGED
@@ -10,7 +10,7 @@ export function Sublist({
10
10
  label,
11
11
  labelBold,
12
12
  initialState = { collapsed: false },
13
- jsStyle,
13
+ jss,
14
14
  secondaryAddOn,
15
15
  }: {
16
16
  children: React.ReactNode;
@@ -19,7 +19,7 @@ export function Sublist({
19
19
  initialState?: {
20
20
  collapsed: boolean;
21
21
  };
22
- jsStyle?: JSStyle;
22
+ jss?: JSStyle;
23
23
  secondaryAddOn?: ReactNode;
24
24
  }) {
25
25
  const [collapsed, setCollapsed] = React.useState(initialState.collapsed);
@@ -29,13 +29,13 @@ export function Sublist({
29
29
  headline={label}
30
30
  headlineBold={labelBold}
31
31
  onClick={() => setCollapsed((x) => !x)}
32
- jsStyle={jsStyle}
32
+ jss={jss}
33
33
  addOn={
34
34
  <Row gap="medium" align="center">
35
35
  {secondaryAddOn}
36
36
  <Box
37
37
  padding="medium"
38
- jsStyle={[
38
+ jss={[
39
39
  {
40
40
  transition: "transform 0.15s ease-in",
41
41
  },
@@ -14,7 +14,7 @@ export function SubmitIconInput({ icon, ...otherProps }: SubmitIconInputProps) {
14
14
  <BaseInput
15
15
  label={
16
16
  <Box
17
- jsStyle={{
17
+ jss={{
18
18
  cursor: "pointer",
19
19
  display: "flex",
20
20
  justifyContent: "center",
@@ -36,7 +36,7 @@ export function SubmitIconInput({ icon, ...otherProps }: SubmitIconInputProps) {
36
36
  }
37
37
  {...otherProps}
38
38
  type="submit"
39
- jsStyle={{
39
+ jss={{
40
40
  visibility: "hidden",
41
41
  }}
42
42
  value=""
package/src/Tabs.tsx CHANGED
@@ -4,6 +4,7 @@ import { JSStyle, Padding, Size, cssVar, getPadding } from "./jss";
4
4
  import { useNavigation } from "./useNavigation";
5
5
  import { Text } from "./Text";
6
6
  import { ReactNode } from "react";
7
+ import { BaseButton } from "./BaseButton";
7
8
 
8
9
  export type Tab = {
9
10
  label: string;
@@ -20,7 +21,8 @@ export interface TabsProps extends RowProps {
20
21
  labelSize?: Size;
21
22
  bare?: boolean;
22
23
  tabPadding?: Padding;
23
- tabJSStyle?: JSStyle;
24
+ tabJSStyle?: JSStyle | ((data: { selected: boolean }) => JSStyle);
25
+ labelRenderer?: (label: string) => ReactNode;
24
26
  }
25
27
 
26
28
  export function Tabs({
@@ -29,8 +31,9 @@ export function Tabs({
29
31
  padding = "none",
30
32
  tabPadding = "medium",
31
33
  labelSize = "large",
32
- jsStyle,
34
+ jss,
33
35
  tabJSStyle,
36
+ labelRenderer,
34
37
  ["aria-controls"]: ariaControls,
35
38
  ...otherProps
36
39
  }: TabsProps) {
@@ -39,7 +42,7 @@ export function Tabs({
39
42
  return (
40
43
  <Row
41
44
  role="tablist"
42
- jsStyle={jsStyle}
45
+ jss={jss}
43
46
  gap={gap}
44
47
  padding={padding}
45
48
  ref={root}
@@ -53,50 +56,56 @@ export function Tabs({
53
56
  selected,
54
57
  addOn,
55
58
  addOnPosition = "start",
56
- }) => (
57
- <BaseLink
58
- aria-controls={ariaControls}
59
- role="tab"
60
- aria-selected={selected ? "true" : undefined}
61
- key={label}
62
- bare
63
- color={selected ? "positive" : "primary"}
64
- href={href}
65
- onClick={onClick}
66
- animateInteraction={false}
67
- jsStyle={[
68
- {
69
- textDecoration: "none",
70
- borderBottom: selected
71
- ? `3px solid ${cssVar("--highlight")}`
72
- : `3px solid transparent`,
73
- ":active span": {
74
- transform: "scale(0.97)",
75
- },
76
- ":first-child": {
77
- borderTopLeftRadius: cssVar("--border-radius-m"),
78
- },
79
- ":last-child": {
80
- borderTopRightRadius: cssVar("--border-radius-m"),
81
- },
82
- ":hover": {
83
- backgroundColor: cssVar("--hovered-background"),
84
- },
85
- ":active:hover": {
86
- backgroundColor: cssVar("--pressed-background"),
59
+ }) => {
60
+ const BaseComponent = href != null ? BaseLink : BaseButton;
61
+
62
+ return (
63
+ <BaseComponent
64
+ aria-controls={ariaControls}
65
+ role="tab"
66
+ aria-selected={selected ? "true" : undefined}
67
+ key={label}
68
+ bare
69
+ color={selected ? "positive" : "primary"}
70
+ href={href}
71
+ onClick={onClick}
72
+ animateInteraction={false}
73
+ jss={[
74
+ {
75
+ textDecoration: "none",
76
+ borderBottom: selected
77
+ ? `3px solid ${cssVar("--highlight")}`
78
+ : `3px solid transparent`,
79
+ ":active span": {
80
+ transform: "scale(0.97)",
81
+ },
82
+ ":first-child": {
83
+ borderTopLeftRadius: cssVar("--border-radius-m"),
84
+ },
85
+ ":last-child": {
86
+ borderTopRightRadius: cssVar("--border-radius-m"),
87
+ },
88
+ ":hover": {
89
+ backgroundColor: cssVar("--hovered-background"),
90
+ },
91
+ ":active:hover": {
92
+ backgroundColor: cssVar("--pressed-background"),
93
+ },
87
94
  },
88
- },
89
- getPadding(tabPadding),
90
- tabJSStyle,
91
- ]}
92
- >
93
- {addOnPosition === "start" && addOn}
94
- <Text size={labelSize} color={selected ? "primary" : "secondary"}>
95
- {label}
96
- </Text>
97
- {addOnPosition === "end" && addOn}
98
- </BaseLink>
99
- )
95
+ getPadding(tabPadding),
96
+ typeof tabJSStyle === "function"
97
+ ? tabJSStyle({ selected })
98
+ : tabJSStyle,
99
+ ]}
100
+ >
101
+ {addOnPosition === "start" && addOn}
102
+ <Text size={labelSize} color={selected ? "primary" : "secondary"}>
103
+ {labelRenderer ? labelRenderer(label) : label}
104
+ </Text>
105
+ {addOnPosition === "end" && addOn}
106
+ </BaseComponent>
107
+ );
108
+ }
100
109
  )}
101
110
  </Row>
102
111
  );