@infonomic/uikit 2.15.0 → 3.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.md +48 -6
  2. package/dist/components/badge/badge_module.css +49 -80
  3. package/dist/components/button/button_module.css +133 -227
  4. package/dist/components/button/control-buttons_module.css +2 -11
  5. package/dist/components/button/copy-button.d.ts.map +1 -1
  6. package/dist/components/button/copy-button.js +14 -7
  7. package/dist/components/button/copy-button.module.js +5 -5
  8. package/dist/components/button/copy-button_module.css +31 -12
  9. package/dist/components/dropdown/dropdown_module.css +8 -13
  10. package/dist/components/input/checkbox_module.css +42 -91
  11. package/dist/components/input/help-text_module.css +1 -5
  12. package/dist/components/input/input_module.css +42 -109
  13. package/dist/components/input/radio-group_module.css +14 -49
  14. package/dist/components/input/select_module.css +10 -17
  15. package/dist/components/notifications/alert_module.css +0 -4
  16. package/dist/components/pager/pagination_module.css +7 -18
  17. package/dist/components/scroll-area/scroll-area_module.css +4 -20
  18. package/dist/components/tooltip/tooltip_module.css +4 -14
  19. package/dist/icons/close-icon.js +1 -1
  20. package/dist/icons/copy-icon.d.ts.map +1 -1
  21. package/dist/icons/copy-icon.js +1 -1
  22. package/dist/react.d.ts +1 -1
  23. package/dist/react.d.ts.map +1 -1
  24. package/dist/react.js +1 -1
  25. package/dist/styles/styles.css +1 -1
  26. package/dist/widgets/datepicker/datepicker_module.css +2 -2
  27. package/dist/widgets/drawer/drawer_module.css +1 -5
  28. package/dist/widgets/modal/modal_module.css +1 -5
  29. package/dist/widgets/timeline/timeline.d.ts.map +1 -0
  30. package/dist/widgets/timeline/timeline.module.js +17 -0
  31. package/dist/{components → widgets}/timeline/timeline_module.css +10 -10
  32. package/package.json +8 -8
  33. package/src/components/badge/badge.module.css +38 -68
  34. package/src/components/button/button-intents.stories.tsx +1 -1
  35. package/src/components/button/button-overrides.stories.tsx +43 -0
  36. package/src/components/button/button-variants.stories.tsx +1 -1
  37. package/src/components/button/button.module.css +135 -230
  38. package/src/components/button/control-buttons.module.css +5 -17
  39. package/src/components/button/control-buttons.stories.tsx +1 -1
  40. package/src/components/button/copy-button.module.css +32 -14
  41. package/src/components/button/copy-button.stories.tsx +6 -6
  42. package/src/components/button/copy-button.tsx +16 -12
  43. package/src/components/calendar/calendar.stories.tsx +1 -1
  44. package/src/components/dropdown/dropdown.module.css +9 -24
  45. package/src/components/input/checkbox.module.css +43 -99
  46. package/src/components/input/help-text.module.css +1 -12
  47. package/src/components/input/input.module.css +44 -119
  48. package/src/components/input/input.stories.tsx +1 -1
  49. package/src/components/input/radio-group.module.css +16 -72
  50. package/src/components/input/radio-group.stories.tsx +1 -1
  51. package/src/components/input/select.module.css +10 -17
  52. package/src/components/input/select.stories.tsx +1 -1
  53. package/src/components/notifications/alert.module.css +0 -4
  54. package/src/components/pager/pagination.module.css +7 -23
  55. package/src/components/scroll-area/scroll-area.module.css +4 -20
  56. package/src/components/tooltip/tooltip.module.css +6 -16
  57. package/src/icons/close-icon.tsx +1 -1
  58. package/src/icons/copy-icon.tsx +1 -2
  59. package/src/icons/icons.module.css +1 -0
  60. package/src/react.ts +1 -1
  61. package/src/styles/theme/theme.css +6 -4
  62. package/src/styles/theme/tokens.css +670 -0
  63. package/src/widgets/datepicker/datepicker.module.css +2 -2
  64. package/src/widgets/drawer/drawer.module.css +1 -5
  65. package/src/widgets/drawer/drawer.stories.tsx +1 -34
  66. package/src/widgets/modal/modal.module.css +1 -5
  67. package/src/{components → widgets}/timeline/timeline.stories.tsx +2 -2
  68. package/dist/components/timeline/timeline.d.ts.map +0 -1
  69. package/dist/components/timeline/timeline.module.js +0 -17
  70. /package/dist/{components → widgets}/timeline/timeline.d.ts +0 -0
  71. /package/dist/{components → widgets}/timeline/timeline.js +0 -0
  72. /package/src/components/button/{button-icon.stories.tsx → icon-button.stories.tsx} +0 -0
  73. /package/src/{components → widgets}/timeline/timeline.module.css +0 -0
  74. /package/src/{components → widgets}/timeline/timeline.tsx +0 -0
@@ -89,98 +89,42 @@
89
89
 
90
90
  /* Intents */
91
91
  .primary {
92
- --radio-border: var(--primary-400);
93
- /* --ring-color: var(--primary-400); */
94
- --radio-indicator-color: var(--primary-400);
92
+ --radio-border: var(--fill-primary-strong);
93
+ --radio-indicator-color: var(--fill-primary-strong);
95
94
  }
96
95
 
97
96
  .secondary {
98
- --radio-border: var(--secondary-400);
99
- /* --ring-color: var(--secondary-400); */
100
- --radio-indicator-color: var(--secondary-400);
97
+ --radio-border: var(--fill-secondary-strong);
98
+ --radio-indicator-color: var(--fill-secondary-strong);
101
99
  }
102
100
 
103
101
  .noeffect {
104
- --radio-border: var(--gray-400);
105
- /* --ring-color: var(--secondary-400); */
106
- --radio-indicator-color: var(--gray-400);
102
+ --radio-border: var(--fill-noeffect-strong);
103
+ --radio-indicator-color: var(--fill-noeffect-strong);
107
104
  }
108
105
 
109
106
  .success {
110
- --radio-border: var(--green-400);
111
- /* --ring-color: var(--secondary-400); */
112
- --radio-indicator-color: var(--green-400);
107
+ --radio-border: var(--fill-success-strong);
108
+ --radio-indicator-color: var(--fill-success-strong);
113
109
  }
114
110
 
115
111
  .info {
116
- --radio-border: var(--blue-400);
117
- /* --ring-color: var(--secondary-400); */
118
- --radio-indicator-color: var(--blue-400);
112
+ --radio-border: var(--fill-info-strong);
113
+ --radio-indicator-color: var(--fill-info-strong);
119
114
  }
120
115
 
121
116
  .warning {
122
- --radio-border: var(--yellow-400);
123
- /* --ring-color: var(--secondary-400); */
124
- --radio-indicator-color: var(--yellow-400);
117
+ --radio-border: var(--fill-warning-strong);
118
+ --radio-indicator-color: var(--fill-warning-strong);
125
119
  }
126
120
 
127
121
  .danger {
128
- --radio-border: var(--red-400);
129
- /* --ring-color: var(--secondary-400); */
130
- --radio-indicator-color: var(--red-400);
131
- }
132
-
133
- /* 🌙 Dark via `.dark` class. We rely on the
134
- * consuming application to detect a user's preferred
135
- * color scheme - either by header or cookie, and set
136
- * a root html class accordingly
137
- */
138
- :global(.dark) {
139
-
140
- /* Intents */
141
- .primary:not(:where([class~="not-dark"], [class~="not-dark"] *)) {
142
- --radio-border: var(--primary-300);
143
- /* --ring-color: var(--primary-400); */
144
- --radio-indicator-color: var(--primary-300);
145
- }
146
-
147
- .secondary:not(:where([class~="not-dark"], [class~="not-dark"] *)) {
148
- --radio-border: var(--secondary-500);
149
- /* --ring-color: var(--secondary-400); */
150
- --radio-indicator-color: var(--secondary-500);
151
- }
152
-
153
- .noeffect:not(:where([class~="not-dark"], [class~="not-dark"] *)) {
154
- ---radio-border: var(--gray-400);
155
- /* --ring-color: var(--secondary-400); */
156
- --radio-indicator-color: var(--gray-400);
157
- }
158
-
159
- .success:not(:where([class~="not-dark"], [class~="not-dark"] *)) {
160
- --radio-border: var(--green-400);
161
- /* --ring-color: var(--secondary-400); */
162
- --radio-indicator-color: var(--green-400);
163
- }
164
-
165
- .info:not(:where([class~="not-dark"], [class~="not-dark"] *)) {
166
- --radio-border: var(--blue-400);
167
- /* --ring-color: var(--secondary-400); */
168
- --radio-indicator-color: var(--blue-400);
169
- }
170
-
171
- .warning:not(:where([class~="not-dark"], [class~="not-dark"] *)) {
172
- --radio-border: var(--yellow-400);
173
- /* --ring-color: var(--secondary-400); */
174
- --radio-indicator-color: var(--yellow-400);
175
- }
176
-
177
- .danger:not(:where([class~="not-dark"], [class~="not-dark"] *)) {
178
- --radio-border: var(--red-400);
179
- /* --ring-color: var(--secondary-400); */
180
- --radio-indicator-color: var(--red-400);
181
- }
122
+ --radio-border: var(--fill-danger-strong);
123
+ --radio-indicator-color: var(--fill-danger-strong);
182
124
  }
183
125
 
126
+ /* Dark mode handled by semantic tokens in theme layer */
127
+
184
128
  @keyframes radioIn {
185
129
  0% {
186
130
  opacity: 0;
@@ -8,7 +8,7 @@ const meta: Meta = {
8
8
  * See https://storybook.js.org/docs/react/configure/overview#configure-story-loading
9
9
  * to learn how to generate automatic titles
10
10
  */
11
- title: 'Components/RadioGroup',
11
+ title: 'Components/Input',
12
12
  component: RadioGroupComponent,
13
13
  }
14
14
 
@@ -8,17 +8,13 @@
8
8
  .viewport {
9
9
  z-index: 50;
10
10
  margin-top: 2px;
11
- border: 1px solid var(--border-color);
11
+ border: 1px solid var(--surface-panel-border);
12
12
  box-shadow: var(--shadow-md);
13
13
  border-radius: var(--border-radius-md);
14
- background-color: var(--background);
14
+ background-color: var(--surface-panel-elevated);
15
15
  padding: 6px;
16
16
  }
17
17
 
18
- .viewport:is(:global(.dark) *) {
19
- background: var(--canvas-800);
20
- }
21
-
22
18
  .group {
23
19
  z-index: 50;
24
20
  }
@@ -27,22 +23,19 @@
27
23
  display: flex;
28
24
  align-items: center;
29
25
  justify-content: center;
30
- color: var(--text);
31
- border: 1px solid var(--border-color);
26
+ color: var(--surface-item-text);
27
+ border: 1px solid var(--surface-panel-border);
32
28
  box-shadow: var(--shadow-md);
33
29
  border-radius: var(--border-radius-md);
34
- background-color: var(--background);
30
+ background-color: var(--surface-panel-elevated);
35
31
  padding: 2px;
36
32
  }
37
33
 
38
- .scroll-button:is(:global(.dark) *) {
39
- background: var(--canvas-800);
40
- }
41
-
42
34
  .select-item {
43
35
  position: relative;
44
36
  user-select: none;
45
- color: var(--text);
37
+ color: var(--surface-item-text);
38
+ background-color: var(--surface-item);
46
39
  font-size: 1rem;
47
40
  line-height: 1;
48
41
  padding-right: 35px;
@@ -54,14 +47,14 @@
54
47
  }
55
48
 
56
49
  .select-item[data-disabled] {
57
- color: var(--disabled-text-color, #e0e0e0);
50
+ color: var(--surface-item-text-disabled);
58
51
  pointer-events: none;
59
52
  }
60
53
 
61
54
  .select-item[data-highlighted] {
62
55
  outline: none;
63
- background-color: var(--highlight-bg-color, #e0e0e0);
64
- color: var(--highlight-text-color, #000000);
56
+ background-color: var(--surface-item-hover);
57
+ color: var(--surface-item-text-hover);
65
58
  }
66
59
 
67
60
  .select-item-indicator {
@@ -4,7 +4,7 @@ import type React from 'react'
4
4
  import { Select, SelectItem, type SelectValue } from './select.js'
5
5
 
6
6
  export default {
7
- title: 'Components/Select',
7
+ title: 'Components/Input/Select',
8
8
  component: Select,
9
9
  argTypes: {},
10
10
  }
@@ -42,10 +42,6 @@
42
42
  margin-top: -2px;
43
43
  }
44
44
 
45
- .close svg {
46
- fill: white
47
- }
48
-
49
45
  .fade {
50
46
  opacity: 0;
51
47
  transition: opacity 0.4s ease-in-out;
@@ -72,9 +72,9 @@
72
72
  justify-content: center;
73
73
  height: 32px;
74
74
  line-height: 1;
75
- border: 1px solid var(--primary-500);
76
- background-color: white;
77
- color: var(--gray-900);
75
+ border: 1px solid var(--stroke-primary);
76
+ background-color: var(--background);
77
+ color: var(--foreground);
78
78
  font-size: var(--font-size-sm);
79
79
  }
80
80
 
@@ -96,8 +96,8 @@
96
96
  .number-button:hover,
97
97
  .previous-button:hover,
98
98
  .first-button:hover {
99
- color: white;
100
- background-color: var(--primary-600);
99
+ color: var(--text-on-primary);
100
+ background-color: var(--fill-primary-strong);
101
101
  }
102
102
 
103
103
  .last-button:disabled,
@@ -114,8 +114,8 @@
114
114
  }
115
115
 
116
116
  .number-button.active {
117
- background-color: var(--primary-600);
118
- color: white;
117
+ color: var(--text-on-primary);
118
+ background-color: var(--fill-primary-strong);
119
119
  }
120
120
 
121
121
 
@@ -137,7 +137,6 @@
137
137
  * a root html class accordingly
138
138
  */
139
139
  :global(.dark) {
140
-
141
140
  .ellipses,
142
141
  .number-button,
143
142
  .next-button,
@@ -145,21 +144,6 @@
145
144
  .previous-button,
146
145
  .first-button {
147
146
  border-color: var(--canvas-700);
148
- background-color: var(--canvas-800);
149
- color: var(--gray-200);
150
- }
151
-
152
- .number-button:hover,
153
- .next-button:hover,
154
- .last-button:hover,
155
- .previous-button:hover,
156
- .first-button:hover {
157
- background-color: var(--canvas-700);
158
- }
159
-
160
- .number-button.active {
161
- background-color: var(--primary-500);
162
- color: white;
163
147
  }
164
148
  }
165
149
  }
@@ -21,11 +21,11 @@
21
21
  /* disable browser handling of all panning and zooming gestures on touch devices */
22
22
  touch-action: none;
23
23
  padding: 2px;
24
- background: var(--gray-50);
24
+ background: var(--surface-panel-scrollbar);
25
25
  transition: background 160ms ease-out;
26
26
 
27
27
  &:hover {
28
- background: var(--gray-50);
28
+ background: var(--surface-panel-scrollbar);
29
29
  }
30
30
 
31
31
  &[data-orientation="vertical"] {
@@ -38,17 +38,9 @@
38
38
  }
39
39
  }
40
40
 
41
- .scrollbar:is(:global(.dark) *) {
42
- background: var(--canvas-700);
43
-
44
- &:hover {
45
- background: var(--canvas-700);
46
- }
47
- }
48
-
49
41
  .thumb {
50
42
  flex: 1;
51
- background: var(--primary-100);
43
+ background: var(--surface-panel-scrollbar-thumb);
52
44
  border-radius: var(--border-radius-sm);
53
45
  position: relative;
54
46
 
@@ -66,15 +58,7 @@
66
58
  }
67
59
  }
68
60
 
69
- .thumb:is(:global(.dark) *) {
70
- background: var(--primary-400);
71
- }
72
-
73
61
  .corner {
74
- background: var(--gray-50);
75
- }
76
-
77
- .corner:is(:global(.dark) *) {
78
- background: var(--canvas-700);
62
+ background: var(--surface-panel-scrollbar);
79
63
  }
80
64
  }
@@ -4,26 +4,20 @@
4
4
  .tooltip {
5
5
  font-size: 0.75rem;
6
6
  line-height: 1;
7
- color: var(--canvas-900);
7
+ color: var(--surface-item-text);
8
8
  user-select: none;
9
9
  padding: 0.625rem 1rem;
10
10
  border-radius: var(--border-radius-sm);
11
11
  border-width: var(--border-width-thin);
12
12
  border-style: var(--border-style-solid);
13
- background-color: var(--gray-25);
14
- border-color: var(--gray-100);
13
+ background-color: var(--surface-panel-elevated);
14
+ border-color: var(--surface-panel-border);
15
15
  box-shadow: var(--shadow-xs);
16
16
  will-change: transform, opacity;
17
17
  animation: var(--transition-normal);
18
18
  }
19
19
 
20
- :global(.dark) {
21
- .tooltip {
22
- color: var(--gray-50);
23
- border-color: var(--canvas-700);
24
- background-color: var(--canvas-800);
25
- }
26
- }
20
+ /* Dark mode handled by semantic tokens in theme layer */
27
21
 
28
22
  .tooltip[data-state="delayed-open"][data-side="top"] :global {
29
23
  animation-name: slideDownAndFade;
@@ -44,12 +38,8 @@
44
38
  }
45
39
 
46
40
  .tooltip-arrow {
47
- fill: var(--gray-100)
41
+ fill: var(--surface-panel-border);
48
42
  }
49
43
 
50
- :global(.dark) {
51
- .tooltip-arrow {
52
- fill: var(--canvas-700);
53
- }
54
- }
44
+ /* Dark mode handled by semantic tokens in theme layer */
55
45
  }
@@ -6,7 +6,7 @@ import styles from './icons.module.css'
6
6
  import type { IconProps } from './types/icon.js'
7
7
 
8
8
  export const CloseIcon = ({ className, svgClassName, ...rest }: IconProps): React.JSX.Element => {
9
- const applied = cx(styles['fill-contrast'], svgClassName)
9
+ const applied = cx(styles['fill-current'], svgClassName)
10
10
 
11
11
  return (
12
12
  <IconElement className={cx('close-icon', className)} {...rest}>
@@ -9,7 +9,7 @@ import type { IconProps } from './types/icon.js'
9
9
  import styles from './icons.module.css'
10
10
 
11
11
  export const CopyIcon = ({ className, svgClassName, ...rest }: IconProps): React.JSX.Element => {
12
- const applied = cx(styles['fill-gray'], svgClassName)
12
+ const applied = cx(styles['fill-current'], svgClassName)
13
13
 
14
14
  return (
15
15
  <IconElement className={cx('copy-icon', className)} {...rest}>
@@ -23,7 +23,6 @@ export const CopyIcon = ({ className, svgClassName, ...rest }: IconProps): React
23
23
  >
24
24
  <path
25
25
  d="M1 9.50006C1 10.3285 1.67157 11.0001 2.5 11.0001H4L4 10.0001H2.5C2.22386 10.0001 2 9.7762 2 9.50006L2 2.50006C2 2.22392 2.22386 2.00006 2.5 2.00006L9.5 2.00006C9.77614 2.00006 10 2.22392 10 2.50006V4.00002H5.5C4.67158 4.00002 4 4.67159 4 5.50002V12.5C4 13.3284 4.67158 14 5.5 14H12.5C13.3284 14 14 13.3284 14 12.5V5.50002C14 4.67159 13.3284 4.00002 12.5 4.00002H11V2.50006C11 1.67163 10.3284 1.00006 9.5 1.00006H2.5C1.67157 1.00006 1 1.67163 1 2.50006V9.50006ZM5 5.50002C5 5.22388 5.22386 5.00002 5.5 5.00002H12.5C12.7761 5.00002 13 5.22388 13 5.50002V12.5C13 12.7762 12.7761 13 12.5 13H5.5C5.22386 13 5 12.7762 5 12.5V5.50002Z"
26
- // fill="currentColor"
27
26
  fillRule="evenodd"
28
27
  clipRule="evenodd"
29
28
  />
@@ -1,6 +1,7 @@
1
1
  @layer infonomic-base, infonomic-utilities, infonomic-theme, infonomic-components;
2
2
 
3
3
  @layer infonomic-components {
4
+
4
5
  .stroke-none {
5
6
  stroke: none;
6
7
  }
package/src/react.ts CHANGED
@@ -39,7 +39,6 @@ export * from './components/section/section.js'
39
39
  export * from './components/shimmer/shimmer.js'
40
40
  export * from './components/table/table.js'
41
41
  export * from './components/tabs/tabs.js'
42
- export * from './components/timeline/timeline.js'
43
42
  export * from './components/tooltip/tooltip.js'
44
43
  export * from './icons/activity-icon.js'
45
44
  export * from './icons/calendar-icon.js'
@@ -98,4 +97,5 @@ export * from './widgets/drawer/drawer.js'
98
97
  export * from './widgets/drawer/drawer-context.js'
99
98
  export * from './widgets/modal/modal.js'
100
99
  export * from './widgets/search/search.js'
100
+ export * from './widgets/timeline/timeline.js'
101
101
  export * from './widgets/datepicker/datepicker.js'
@@ -1,5 +1,6 @@
1
1
  @import "./autofill.css";
2
2
  @import "./scrollers.css";
3
+ @import "./tokens.css";
3
4
 
4
5
  @layer infonomic-theme {
5
6
  :root {
@@ -38,10 +39,11 @@
38
39
  --loader-color: var(--invert-loader-color);
39
40
  }
40
41
 
41
- /* Brute force our not-dark class for now until we figure out
42
- * a better way to do this. Note - the following does NOT work:
43
- .dark:not(:where([class~="not-dark"], [class~="not-dark"] *)) {
44
- */
42
+ /* .not-dark override: Forces light mode tokens by re-declaring :root values.
43
+ * This duplication is intentional - it ensures .not-dark always wins over .dark
44
+ * regardless of DOM order, without needing complex :not() selectors.
45
+ * Alternative approaches (revert-layer, :not() patterns) would be more fragile.
46
+ */
45
47
  .not-dark {
46
48
  --background: var(--canvas-25);
47
49
  --foreground: var(--gray-900);