@koide-labs/ui 0.0.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.
- package/.husky/pre-commit +1 -0
- package/.storybook/main.ts +25 -0
- package/.storybook/preview-head.html +6 -0
- package/.storybook/preview.tsx +48 -0
- package/.storybook/vitest.setup.ts +8 -0
- package/README.md +11 -0
- package/eslint.config.mjs +29 -0
- package/lint-staged.config.js +15 -0
- package/package.json +95 -0
- package/pnpm-workspace.yaml +2 -0
- package/postcss.config.mjs +7 -0
- package/prettier.config.mjs +24 -0
- package/scripts/build-icon-types.ts +38 -0
- package/src/-types.ts +8 -0
- package/src/-utils.tsx +64 -0
- package/src/components/accordion/accordion.module.css +44 -0
- package/src/components/accordion/accordion.stories.tsx +36 -0
- package/src/components/accordion/index.tsx +67 -0
- package/src/components/alert-dialog/alert-dialog.module.css +5 -0
- package/src/components/alert-dialog/alert-dialog.stories.tsx +53 -0
- package/src/components/alert-dialog/index.tsx +138 -0
- package/src/components/anchor/anchor.module.css +18 -0
- package/src/components/anchor/anchor.stories.tsx +28 -0
- package/src/components/anchor/index.tsx +45 -0
- package/src/components/avatar/avatar.module.css +56 -0
- package/src/components/avatar/avatar.stories.tsx +61 -0
- package/src/components/avatar/index.tsx +82 -0
- package/src/components/badge/badge.module.css +35 -0
- package/src/components/badge/badge.stories.tsx +60 -0
- package/src/components/badge/index.tsx +71 -0
- package/src/components/button/button.module.css +42 -0
- package/src/components/button/button.stories.tsx +108 -0
- package/src/components/button/index.tsx +63 -0
- package/src/components/checkbox/checkbox.module.css +36 -0
- package/src/components/checkbox/checkbox.stories.tsx +21 -0
- package/src/components/checkbox/index.tsx +41 -0
- package/src/components/code/code.module.css +20 -0
- package/src/components/code/code.stories.tsx +42 -0
- package/src/components/code/index.tsx +73 -0
- package/src/components/collapse/collapse.module.css +27 -0
- package/src/components/collapse/collapse.stories.tsx +27 -0
- package/src/components/collapse/index.tsx +59 -0
- package/src/components/command/command.module.css +95 -0
- package/src/components/command/command.stories.tsx +38 -0
- package/src/components/command/index.tsx +108 -0
- package/src/components/context-menu/context-menu.module.css +36 -0
- package/src/components/context-menu/context-menu.stories.tsx +99 -0
- package/src/components/context-menu/index.tsx +242 -0
- package/src/components/dialog/dialog.module.css +71 -0
- package/src/components/dialog/dialog.stories.tsx +29 -0
- package/src/components/dialog/index.tsx +148 -0
- package/src/components/heading/heading.module.css +3 -0
- package/src/components/heading/heading.stories.tsx +52 -0
- package/src/components/heading/index.tsx +112 -0
- package/src/components/icon/icon-names.ts +3189 -0
- package/src/components/icon/icon.module.css +36 -0
- package/src/components/icon/icon.stories.tsx +40 -0
- package/src/components/icon/index.tsx +60 -0
- package/src/components/icon-button/icon-button.module.css +33 -0
- package/src/components/icon-button/icon-button.stories.tsx +59 -0
- package/src/components/icon-button/index.tsx +48 -0
- package/src/components/inline-code/index.tsx +29 -0
- package/src/components/inline-code/inline-code.module.css +13 -0
- package/src/components/inline-code/inline-code.stories.tsx +31 -0
- package/src/components/input/index.tsx +22 -0
- package/src/components/input/input.module.css +23 -0
- package/src/components/input/input.stories.tsx +52 -0
- package/src/components/meter/index.tsx +55 -0
- package/src/components/meter/meter.module.css +23 -0
- package/src/components/meter/meter.stories.tsx +31 -0
- package/src/components/multiline-input/index.tsx +58 -0
- package/src/components/multiline-input/multiline-input.stories.tsx +26 -0
- package/src/components/number-input/index.tsx +74 -0
- package/src/components/number-input/number-input.module.css +41 -0
- package/src/components/number-input/number-input.stories.tsx +24 -0
- package/src/components/password-input/index.tsx +24 -0
- package/src/components/password-input/password-input.module.css +10 -0
- package/src/components/password-input/password-input.stories.tsx +24 -0
- package/src/components/pill/index.tsx +45 -0
- package/src/components/pill/pill.module.css +22 -0
- package/src/components/pill/pill.stories.tsx +83 -0
- package/src/components/popover/index.tsx +94 -0
- package/src/components/popover/popover.module.css +8 -0
- package/src/components/popover/popover.stories.tsx +53 -0
- package/src/components/preview-card/index.tsx +68 -0
- package/src/components/preview-card/preview-card.module.css +5 -0
- package/src/components/preview-card/preview-card.stories.tsx +58 -0
- package/src/components/radio/index.tsx +67 -0
- package/src/components/radio/radio-group.module.css +5 -0
- package/src/components/radio/radio.module.css +36 -0
- package/src/components/radio/radio.stories.tsx +27 -0
- package/src/components/search-bar/index.tsx +60 -0
- package/src/components/search-bar/search-bar.module.css +29 -0
- package/src/components/search-bar/search-bar.stories.tsx +37 -0
- package/src/components/select/index.tsx +132 -0
- package/src/components/select/select.module.css +63 -0
- package/src/components/select/select.stories.tsx +49 -0
- package/src/components/separator/index.tsx +28 -0
- package/src/components/separator/separator.module.css +24 -0
- package/src/components/separator/separator.stories.tsx +40 -0
- package/src/components/slider/index.tsx +28 -0
- package/src/components/slider/slider.module.css +52 -0
- package/src/components/slider/slider.stories.tsx +53 -0
- package/src/components/spinner/index.tsx +14 -0
- package/src/components/spinner/spinner.module.css +13 -0
- package/src/components/spinner/spinner.stories.tsx +17 -0
- package/src/components/stacked-avatars/index.tsx +88 -0
- package/src/components/stacked-avatars/stacked-avatars.module.css +79 -0
- package/src/components/stacked-avatars/stacked-avatars.stories.tsx +48 -0
- package/src/components/status-banner/index.tsx +96 -0
- package/src/components/status-banner/status-banner.module.css +52 -0
- package/src/components/status-banner/status-banner.stories.tsx +44 -0
- package/src/components/surface/index.tsx +83 -0
- package/src/components/surface/surface.module.css +35 -0
- package/src/components/surface/surface.stories.tsx +84 -0
- package/src/components/switch/index.tsx +23 -0
- package/src/components/switch/switch.module.css +45 -0
- package/src/components/switch/switch.stories.tsx +48 -0
- package/src/components/tabs/index.tsx +126 -0
- package/src/components/tabs/tabs.module.css +134 -0
- package/src/components/tabs/tabs.stories.tsx +88 -0
- package/src/components/text/index.tsx +69 -0
- package/src/components/text/text.module.css +76 -0
- package/src/components/text/text.stories.tsx +107 -0
- package/src/components/theme-provider/index.ts +2 -0
- package/src/components/theme-provider/theme-context.tsx +18 -0
- package/src/components/theme-provider/theme-provider.stories.tsx +47 -0
- package/src/components/theme-provider/theme-provider.tsx +77 -0
- package/src/components/timestamp/index.tsx +131 -0
- package/src/components/timestamp/timestamp.module.css +8 -0
- package/src/components/timestamp/timestamp.stories.tsx +37 -0
- package/src/components/toast/index.ts +2 -0
- package/src/components/toast/toast.module.css +163 -0
- package/src/components/toast/toast.stories.tsx +53 -0
- package/src/components/toast/toast.tsx +104 -0
- package/src/components/toast/use-toast-manager.ts +63 -0
- package/src/components/tooltip/index.tsx +61 -0
- package/src/components/tooltip/tooltip-arrow.tsx +17 -0
- package/src/components/tooltip/tooltip.module.css +44 -0
- package/src/components/tooltip/tooltip.stories.tsx +76 -0
- package/src/components/view/index.tsx +137 -0
- package/src/components/view/view.module.css +11 -0
- package/src/components/view/view.stories.tsx +131 -0
- package/src/components/view/view_colorway.module.css +280 -0
- package/src/components/view/view_interactive.module.css +127 -0
- package/src/components/view/view_loading.module.css +58 -0
- package/src/components/visually-hidden/index.ts +1 -0
- package/src/index.ts +49 -0
- package/src/integrations/react-markdown/index.tsx +134 -0
- package/src/integrations/react-markdown/react-markdown.module.css +62 -0
- package/src/integrations/react-markdown/react-markdown.stories.tsx +31 -0
- package/src/integrations/remix.ts +12 -0
- package/src/integrations/tailwind.css +173 -0
- package/src/integrations/twemoij/index.tsx +13 -0
- package/src/integrations/twemoij/twemoji.module.css +7 -0
- package/src/integrations/twemoij/twemoji.stories.tsx +40 -0
- package/src/stories/components/all-variants.tsx +40 -0
- package/src/stories/data.ts +72 -0
- package/src/stories/utils.ts +20 -0
- package/src/styles/core.css +153 -0
- package/src/styles/themes/dark.css +86 -0
- package/src/styles/themes/light.css +86 -0
- package/src/styles/tokens.ts +282 -0
- package/src/styles/transitions.module.css +31 -0
- package/stylelint.config.mjs +29 -0
- package/tsconfig.app.json +35 -0
- package/tsconfig.json +7 -0
- package/tsconfig.node.json +26 -0
- package/vite.config.ts +103 -0
- package/vitest.shims.d.ts +1 -0
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
.view_colorway {
|
|
2
|
+
/* loading styles */
|
|
3
|
+
--view-loading-low-pulse: var(--view-colorway-dimmest);
|
|
4
|
+
--view-loading-high-pulse: transparent;
|
|
5
|
+
|
|
6
|
+
transition-duration: var(--transition-duration-snappy);
|
|
7
|
+
transition-timing-function: var(--transition-timing-function-snappy);
|
|
8
|
+
cursor: not-allowed;
|
|
9
|
+
border-width: 1px;
|
|
10
|
+
border-style: solid;
|
|
11
|
+
border-color: transparent;
|
|
12
|
+
border-radius: var(--border-radius-default);
|
|
13
|
+
|
|
14
|
+
&:not([disabled], [data-disabled]) {
|
|
15
|
+
cursor: pointer;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.view_colorway_static {
|
|
20
|
+
border-width: 1px;
|
|
21
|
+
border-style: solid;
|
|
22
|
+
border-color: transparent;
|
|
23
|
+
border-radius: var(--border-radius-default);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/* Variants */
|
|
27
|
+
.view_colorway_outline {
|
|
28
|
+
transition-property: color, background-color, box-shadow;
|
|
29
|
+
border-color: var(--view-colorway-dimmer);
|
|
30
|
+
background-color: transparent;
|
|
31
|
+
color: var(--view-colorway-dimmer);
|
|
32
|
+
|
|
33
|
+
&:not([disabled], [data-disabled]) {
|
|
34
|
+
color: var(--view-colorway-stronger);
|
|
35
|
+
|
|
36
|
+
&:active {
|
|
37
|
+
transition: none;
|
|
38
|
+
border-color: var(--view-colorway-stronger) !important;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
&:focus {
|
|
42
|
+
box-shadow: 0 0 0 2px var(--view-colorway-strongest);
|
|
43
|
+
|
|
44
|
+
&:not(:focus-visible) {
|
|
45
|
+
box-shadow: none;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@media (hover: hover) {
|
|
50
|
+
&:hover {
|
|
51
|
+
border-color: var(--view-colorway-default);
|
|
52
|
+
background-color: var(--view-colorway-dimmer);
|
|
53
|
+
color: var(--view-colorway-strongest);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.view_colorway_outline-static {
|
|
60
|
+
box-shadow: none;
|
|
61
|
+
border-color: var(--view-colorway-dimmer);
|
|
62
|
+
background-color: transparent;
|
|
63
|
+
color: var(--view-colorway-stronger);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
.view_colorway_mute-static {
|
|
67
|
+
box-shadow: none;
|
|
68
|
+
background-color: var(--view-colorway-dimmest);
|
|
69
|
+
color: var(--view-colorway-strongest);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.view_colorway_no-fill {
|
|
73
|
+
transition-property: color, background-color, box-shadow;
|
|
74
|
+
background-color: transparent;
|
|
75
|
+
color: var(--view-colorway-dimmer);
|
|
76
|
+
|
|
77
|
+
&:not([disabled], [data-disabled]) {
|
|
78
|
+
color: var(--view-colorway-stronger);
|
|
79
|
+
|
|
80
|
+
&:focus {
|
|
81
|
+
box-shadow: 0 0 0 2px var(--view-colorway-strongest);
|
|
82
|
+
|
|
83
|
+
&:not(:focus-visible) {
|
|
84
|
+
box-shadow: none;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
@media (hover: hover) {
|
|
89
|
+
&:hover {
|
|
90
|
+
background-color: var(--view-colorway-dimmer);
|
|
91
|
+
color: var(--view-colorway-strongest);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.view_colorway_fill {
|
|
98
|
+
transition-property: background-color, box-shadow;
|
|
99
|
+
background-color: var(--view-colorway-dimmest);
|
|
100
|
+
color: var(--view-colorway-default);
|
|
101
|
+
|
|
102
|
+
&:not([disabled], [data-disabled]) {
|
|
103
|
+
background-color: var(--view-colorway-dimmer);
|
|
104
|
+
color: var(--view-colorway-strongest);
|
|
105
|
+
|
|
106
|
+
&:focus {
|
|
107
|
+
box-shadow: 0 0 0 2px var(--view-colorway-stronger);
|
|
108
|
+
|
|
109
|
+
&:not(:focus-visible) {
|
|
110
|
+
box-shadow: none;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
@media (hover: hover) {
|
|
115
|
+
&:hover {
|
|
116
|
+
background-color: var(--view-colorway-default);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.view_colorway_fill-static {
|
|
123
|
+
box-shadow: none;
|
|
124
|
+
background-color: var(--view-colorway-dimmer);
|
|
125
|
+
color: var(--view-colorway-strongest);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.view_colorway_fill-outline {
|
|
129
|
+
transition-property: background-color, box-shadow;
|
|
130
|
+
box-shadow: none;
|
|
131
|
+
border-color: var(--view-colorway-dimmer);
|
|
132
|
+
background-color: var(--view-colorway-dimmest);
|
|
133
|
+
color: var(--view-colorway-default);
|
|
134
|
+
|
|
135
|
+
&:not([disabled], [data-disabled]) {
|
|
136
|
+
border-color: var(--view-colorway-dimmer);
|
|
137
|
+
background-color: var(--view-colorway-dimmest);
|
|
138
|
+
color: var(--view-colorway-strongest);
|
|
139
|
+
|
|
140
|
+
&:active {
|
|
141
|
+
transition: none;
|
|
142
|
+
border-color: var(--view-colorway-stronger) !important;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
&:focus {
|
|
146
|
+
box-shadow: 0 0 0 2px var(--view-colorway-stronger);
|
|
147
|
+
|
|
148
|
+
&:not(:focus-visible) {
|
|
149
|
+
box-shadow: none;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
@media (hover: hover) {
|
|
154
|
+
&:hover {
|
|
155
|
+
border-color: var(--view-colorway-default);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/* Colors! */
|
|
162
|
+
.view_colorway_color-primary {
|
|
163
|
+
--view-colorway-dimmest: var(--primary-dimmest);
|
|
164
|
+
--view-colorway-dimmer: var(--primary-dimmer);
|
|
165
|
+
--view-colorway-default: var(--primary-default);
|
|
166
|
+
--view-colorway-stronger: var(--primary-stronger);
|
|
167
|
+
--view-colorway-strongest: var(--primary-strongest);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
.view_colorway_color-positive {
|
|
171
|
+
--view-colorway-dimmest: var(--positive-dimmest);
|
|
172
|
+
--view-colorway-dimmer: var(--positive-dimmer);
|
|
173
|
+
--view-colorway-default: var(--positive-default);
|
|
174
|
+
--view-colorway-stronger: var(--positive-stronger);
|
|
175
|
+
--view-colorway-strongest: var(--positive-strongest);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.view_colorway_color-negative {
|
|
179
|
+
--view-colorway-dimmest: var(--negative-dimmest);
|
|
180
|
+
--view-colorway-dimmer: var(--negative-dimmer);
|
|
181
|
+
--view-colorway-default: var(--negative-default);
|
|
182
|
+
--view-colorway-stronger: var(--negative-stronger);
|
|
183
|
+
--view-colorway-strongest: var(--negative-strongest);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.view_colorway_color-warning {
|
|
187
|
+
--view-colorway-dimmest: var(--warning-dimmest);
|
|
188
|
+
--view-colorway-dimmer: var(--warning-dimmer);
|
|
189
|
+
--view-colorway-default: var(--warning-default);
|
|
190
|
+
--view-colorway-stronger: var(--warning-stronger);
|
|
191
|
+
--view-colorway-strongest: var(--warning-strongest);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
.view_colorway_color-red {
|
|
195
|
+
--view-colorway-dimmest: var(--red-dimmest);
|
|
196
|
+
--view-colorway-dimmer: var(--red-dimmer);
|
|
197
|
+
--view-colorway-default: var(--red-default);
|
|
198
|
+
--view-colorway-stronger: var(--red-stronger);
|
|
199
|
+
--view-colorway-strongest: var(--red-strongest);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.view_colorway_color-orange {
|
|
203
|
+
--view-colorway-dimmest: var(--orange-dimmest);
|
|
204
|
+
--view-colorway-dimmer: var(--orange-dimmer);
|
|
205
|
+
--view-colorway-default: var(--orange-default);
|
|
206
|
+
--view-colorway-stronger: var(--orange-stronger);
|
|
207
|
+
--view-colorway-strongest: var(--orange-strongest);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.view_colorway_color-yellow {
|
|
211
|
+
--view-colorway-dimmest: var(--yellow-dimmest);
|
|
212
|
+
--view-colorway-dimmer: var(--yellow-dimmer);
|
|
213
|
+
--view-colorway-default: var(--yellow-default);
|
|
214
|
+
--view-colorway-stronger: var(--yellow-stronger);
|
|
215
|
+
--view-colorway-strongest: var(--yellow-strongest);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.view_colorway_color-green {
|
|
219
|
+
--view-colorway-dimmest: var(--green-dimmest);
|
|
220
|
+
--view-colorway-dimmer: var(--green-dimmer);
|
|
221
|
+
--view-colorway-default: var(--green-default);
|
|
222
|
+
--view-colorway-stronger: var(--green-stronger);
|
|
223
|
+
--view-colorway-strongest: var(--green-strongest);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.view_colorway_color-teal {
|
|
227
|
+
--view-colorway-dimmest: var(--teal-dimmest);
|
|
228
|
+
--view-colorway-dimmer: var(--teal-dimmer);
|
|
229
|
+
--view-colorway-default: var(--teal-default);
|
|
230
|
+
--view-colorway-stronger: var(--teal-stronger);
|
|
231
|
+
--view-colorway-strongest: var(--teal-strongest);
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
.view_colorway_color-blue {
|
|
235
|
+
--view-colorway-dimmest: var(--blue-dimmest);
|
|
236
|
+
--view-colorway-dimmer: var(--blue-dimmer);
|
|
237
|
+
--view-colorway-default: var(--blue-default);
|
|
238
|
+
--view-colorway-stronger: var(--blue-stronger);
|
|
239
|
+
--view-colorway-strongest: var(--blue-strongest);
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
.view_colorway_color-blurple {
|
|
243
|
+
--view-colorway-dimmest: var(--blurple-dimmest);
|
|
244
|
+
--view-colorway-dimmer: var(--blurple-dimmer);
|
|
245
|
+
--view-colorway-default: var(--blurple-default);
|
|
246
|
+
--view-colorway-stronger: var(--blurple-stronger);
|
|
247
|
+
--view-colorway-strongest: var(--blurple-strongest);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
.view_colorway_color-purple {
|
|
251
|
+
--view-colorway-dimmest: var(--purple-dimmest);
|
|
252
|
+
--view-colorway-dimmer: var(--purple-dimmer);
|
|
253
|
+
--view-colorway-default: var(--purple-default);
|
|
254
|
+
--view-colorway-stronger: var(--purple-stronger);
|
|
255
|
+
--view-colorway-strongest: var(--purple-strongest);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
.view_colorway_color-magenta {
|
|
259
|
+
--view-colorway-dimmest: var(--magenta-dimmest);
|
|
260
|
+
--view-colorway-dimmer: var(--magenta-dimmer);
|
|
261
|
+
--view-colorway-default: var(--magenta-default);
|
|
262
|
+
--view-colorway-stronger: var(--magenta-stronger);
|
|
263
|
+
--view-colorway-strongest: var(--magenta-strongest);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
.view_colorway_color-pink {
|
|
267
|
+
--view-colorway-dimmest: var(--pink-dimmest);
|
|
268
|
+
--view-colorway-dimmer: var(--pink-dimmer);
|
|
269
|
+
--view-colorway-default: var(--pink-default);
|
|
270
|
+
--view-colorway-stronger: var(--pink-stronger);
|
|
271
|
+
--view-colorway-strongest: var(--pink-strongest);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
.view_colorway_color-grey {
|
|
275
|
+
--view-colorway-dimmest: var(--grey-dimmest);
|
|
276
|
+
--view-colorway-dimmer: var(--grey-dimmer);
|
|
277
|
+
--view-colorway-default: var(--grey-default);
|
|
278
|
+
--view-colorway-stronger: var(--grey-stronger);
|
|
279
|
+
--view-colorway-strongest: var(--grey-strongest);
|
|
280
|
+
}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
.view_interactive {
|
|
2
|
+
/* loading styles */
|
|
3
|
+
--view-loading-low-pulse: var(--outline-dimmest);
|
|
4
|
+
--view-loading-high-pulse: var(--surface-interactive-background);
|
|
5
|
+
|
|
6
|
+
transition-duration: var(--transition-duration-snappy);
|
|
7
|
+
transition-timing-function: var(--transition-timing-function-snappy);
|
|
8
|
+
cursor: not-allowed;
|
|
9
|
+
border-width: 1px;
|
|
10
|
+
border-style: solid;
|
|
11
|
+
border-color: transparent;
|
|
12
|
+
border-radius: var(--border-radius-default);
|
|
13
|
+
background-color: transparent;
|
|
14
|
+
color: var(--foreground-dimmest);
|
|
15
|
+
|
|
16
|
+
&:not([disabled], [data-disabled]) {
|
|
17
|
+
cursor: pointer;
|
|
18
|
+
|
|
19
|
+
&:focus:focus-visible {
|
|
20
|
+
outline-color: transparent;
|
|
21
|
+
outline-width: var(--space-2);
|
|
22
|
+
outline-offset: var(--space-4);
|
|
23
|
+
box-shadow: var(--shadow-focus);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* Variants */
|
|
29
|
+
.view_interactive_fill {
|
|
30
|
+
transition-property: background-color, box-shadow;
|
|
31
|
+
background-color: var(--surface-interactive-background);
|
|
32
|
+
|
|
33
|
+
&:not([disabled], [data-disabled]) {
|
|
34
|
+
color: inherit;
|
|
35
|
+
|
|
36
|
+
&:active {
|
|
37
|
+
border-color: var(--primary-default);
|
|
38
|
+
background-color: var(--surface-interactive-background-active);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
@media (hover: hover) {
|
|
42
|
+
&:hover {
|
|
43
|
+
background-color: var(--surface-interactive-background-active);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
.view_interactive_no-fill {
|
|
50
|
+
transition-property: background-color, box-shadow;
|
|
51
|
+
|
|
52
|
+
&:not([disabled], [data-disabled]) {
|
|
53
|
+
color: inherit;
|
|
54
|
+
|
|
55
|
+
&:not(textarea):active {
|
|
56
|
+
border-color: var(--primary-default);
|
|
57
|
+
background-color: var(--surface-interactive-background);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@media (hover: hover) {
|
|
61
|
+
&:hover {
|
|
62
|
+
background-color: var(--surface-interactive-background);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.view_interactive_outline {
|
|
69
|
+
transition-property: background-color, box-shadow;
|
|
70
|
+
border-color: var(--surface-interactive-border);
|
|
71
|
+
|
|
72
|
+
&:not([disabled], [data-disabled]) {
|
|
73
|
+
color: inherit;
|
|
74
|
+
|
|
75
|
+
&:not(textarea):active {
|
|
76
|
+
border-color: var(--primary-default);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@media (hover: hover) {
|
|
80
|
+
&:hover {
|
|
81
|
+
background-color: var(--surface-interactive-background);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/* default interactive style */
|
|
88
|
+
.view_interactive_fill-outline {
|
|
89
|
+
transition-property: box-shadow;
|
|
90
|
+
background-color: var(--surface-interactive-background);
|
|
91
|
+
|
|
92
|
+
&:not([disabled], [data-disabled]) {
|
|
93
|
+
border-color: var(--surface-interactive-border);
|
|
94
|
+
color: inherit;
|
|
95
|
+
|
|
96
|
+
&:not(textarea):active {
|
|
97
|
+
transition: none;
|
|
98
|
+
border-color: var(--primary-default);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
@media (hover: hover) {
|
|
102
|
+
&:hover {
|
|
103
|
+
border-color: var(--surface-interactive-border-hover);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.view_interactive_list-item {
|
|
110
|
+
transition-property: box-shadow;
|
|
111
|
+
border-radius: 0;
|
|
112
|
+
|
|
113
|
+
&:not([disabled], [data-disabled]) {
|
|
114
|
+
color: inherit;
|
|
115
|
+
|
|
116
|
+
&:not(textarea):active {
|
|
117
|
+
border-color: var(--primary-default);
|
|
118
|
+
background-color: var(--surface-interactive-background-active);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
@media (hover: hover) {
|
|
122
|
+
&:hover {
|
|
123
|
+
background-color: var(--surface-interactive-background);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/*
|
|
2
|
+
these variables are defined in colorway & interactive
|
|
3
|
+
--view-loading-low-pulse
|
|
4
|
+
--view-loading-high-pulse
|
|
5
|
+
*/
|
|
6
|
+
.view_loading {
|
|
7
|
+
position: relative;
|
|
8
|
+
color: var(--foreground-dimmest);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.view_loading_foreground {
|
|
12
|
+
animation: loading 2s linear infinite;
|
|
13
|
+
background: linear-gradient(
|
|
14
|
+
90deg,
|
|
15
|
+
var(--view-loading-low-pulse),
|
|
16
|
+
var(--view-loading-high-pulse),
|
|
17
|
+
var(--view-loading-low-pulse),
|
|
18
|
+
var(--view-loading-high-pulse)
|
|
19
|
+
);
|
|
20
|
+
background-position-x: 0%;
|
|
21
|
+
background-size: 300% 100%;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.view_loading_background {
|
|
25
|
+
overflow: hidden;
|
|
26
|
+
|
|
27
|
+
&::after {
|
|
28
|
+
display: block;
|
|
29
|
+
position: absolute;
|
|
30
|
+
top: 0;
|
|
31
|
+
left: 0;
|
|
32
|
+
opacity: 0.5;
|
|
33
|
+
animation: loading 2s linear infinite;
|
|
34
|
+
background: linear-gradient(
|
|
35
|
+
90deg,
|
|
36
|
+
var(--view-loading-low-pulse),
|
|
37
|
+
var(--view-loading-high-pulse),
|
|
38
|
+
var(--view-loading-low-pulse),
|
|
39
|
+
var(--view-loading-high-pulse)
|
|
40
|
+
);
|
|
41
|
+
background-position-x: 0%;
|
|
42
|
+
background-size: 300% 100%;
|
|
43
|
+
width: 100%;
|
|
44
|
+
height: 100%;
|
|
45
|
+
pointer-events: none;
|
|
46
|
+
content: "";
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@keyframes loading {
|
|
51
|
+
0% {
|
|
52
|
+
background-position-x: 100%;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
100% {
|
|
56
|
+
background-position-x: 0%;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { VisuallyHidden } from "@radix-ui/react-visually-hidden";
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export { Accordion, AccordionItem } from "./components/accordion";
|
|
2
|
+
export { AlertDialog } from "./components/alert-dialog";
|
|
3
|
+
export { Anchor } from "./components/anchor";
|
|
4
|
+
export { Avatar } from "./components/avatar";
|
|
5
|
+
export { Badge } from "./components/badge";
|
|
6
|
+
export { Button } from "./components/button";
|
|
7
|
+
export { Checkbox } from "./components/checkbox";
|
|
8
|
+
export { Code } from "./components/code";
|
|
9
|
+
export { Collapse } from "./components/collapse";
|
|
10
|
+
export {
|
|
11
|
+
CommandDialog,
|
|
12
|
+
CommandGroup,
|
|
13
|
+
CommandSeparator,
|
|
14
|
+
CommandItem,
|
|
15
|
+
} from "./components/command";
|
|
16
|
+
export { Dialog, DialogClose } from "./components/dialog";
|
|
17
|
+
export { Heading, Section } from "./components/heading";
|
|
18
|
+
export { IconButton } from "./components/icon-button";
|
|
19
|
+
export { Icon } from "./components/icon";
|
|
20
|
+
export { InlineCode } from "./components/inline-code";
|
|
21
|
+
export { Input } from "./components/input";
|
|
22
|
+
export { Meter } from "./components/meter";
|
|
23
|
+
export { MultilineInput } from "./components/multiline-input";
|
|
24
|
+
export { NumberInput } from "./components/number-input";
|
|
25
|
+
export { PasswordInput } from "./components/password-input";
|
|
26
|
+
export { Pill } from "./components/pill";
|
|
27
|
+
export { Popover } from "./components/popover";
|
|
28
|
+
export { PreviewCard } from "./components/preview-card";
|
|
29
|
+
export { RadioGroup, Radio } from "./components/radio";
|
|
30
|
+
export { SearchBar } from "./components/search-bar";
|
|
31
|
+
export { Select } from "./components/select";
|
|
32
|
+
export { Separator } from "./components/separator";
|
|
33
|
+
export { Slider } from "./components/slider";
|
|
34
|
+
export { StackedAvatars } from "./components/stacked-avatars";
|
|
35
|
+
export { StatusBanner } from "./components/status-banner";
|
|
36
|
+
export { Surface } from "./components/surface";
|
|
37
|
+
export { Switch } from "./components/switch";
|
|
38
|
+
export { Tabs } from "./components/tabs";
|
|
39
|
+
export { Text } from "./components/text";
|
|
40
|
+
export { ThemeProvider, useThemeContext } from "./components/theme-provider";
|
|
41
|
+
export { Timestamp } from "./components/timestamp";
|
|
42
|
+
export {
|
|
43
|
+
ToastProvider,
|
|
44
|
+
ToastViewport,
|
|
45
|
+
useToastManager,
|
|
46
|
+
} from "./components/toast";
|
|
47
|
+
export { TooltipProvider, Tooltip } from "./components/tooltip";
|
|
48
|
+
export { View } from "./components/view";
|
|
49
|
+
export { VisuallyHidden } from "./components/visually-hidden";
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import type { ComponentProps } from "react";
|
|
2
|
+
import MarkdownPrimitive from "react-markdown";
|
|
3
|
+
|
|
4
|
+
import { omit } from "~/-utils";
|
|
5
|
+
import { Anchor } from "~/components/anchor";
|
|
6
|
+
import { Code } from "~/components/code";
|
|
7
|
+
import { Heading } from "~/components/heading";
|
|
8
|
+
import { Separator } from "~/components/separator";
|
|
9
|
+
import { Text } from "~/components/text";
|
|
10
|
+
import { View } from "~/components/view";
|
|
11
|
+
|
|
12
|
+
import styles from "./react-markdown.module.css";
|
|
13
|
+
|
|
14
|
+
export function Markdown({
|
|
15
|
+
components,
|
|
16
|
+
children,
|
|
17
|
+
...props
|
|
18
|
+
}: ComponentProps<typeof MarkdownPrimitive> & { children: string }) {
|
|
19
|
+
return (
|
|
20
|
+
<MarkdownPrimitive
|
|
21
|
+
{...props}
|
|
22
|
+
components={{
|
|
23
|
+
h1: (props) => (
|
|
24
|
+
<Heading
|
|
25
|
+
{...omit(props, ["node"])}
|
|
26
|
+
level={1}
|
|
27
|
+
className={styles["react-markdown__h1"]}
|
|
28
|
+
/>
|
|
29
|
+
),
|
|
30
|
+
h2: (props) => (
|
|
31
|
+
<Heading
|
|
32
|
+
{...omit(props, ["node"])}
|
|
33
|
+
level={2}
|
|
34
|
+
className={styles["react-markdown__h2"]}
|
|
35
|
+
/>
|
|
36
|
+
),
|
|
37
|
+
h3: (props) => (
|
|
38
|
+
<Heading
|
|
39
|
+
{...omit(props, ["node"])}
|
|
40
|
+
level={3}
|
|
41
|
+
className={styles["react-markdown__h3"]}
|
|
42
|
+
/>
|
|
43
|
+
),
|
|
44
|
+
h4: (props) => (
|
|
45
|
+
<Heading
|
|
46
|
+
{...omit(props, ["node"])}
|
|
47
|
+
level={4}
|
|
48
|
+
className={styles["react-markdown__h4"]}
|
|
49
|
+
/>
|
|
50
|
+
),
|
|
51
|
+
h5: (props) => (
|
|
52
|
+
<Heading
|
|
53
|
+
{...omit(props, ["node"])}
|
|
54
|
+
level={5}
|
|
55
|
+
className={styles["react-markdown__h5"]}
|
|
56
|
+
/>
|
|
57
|
+
),
|
|
58
|
+
p: (props) => (
|
|
59
|
+
<Text
|
|
60
|
+
{...omit(props, ["node"])}
|
|
61
|
+
multiline
|
|
62
|
+
className={styles["react-markdown__p"]}
|
|
63
|
+
/>
|
|
64
|
+
),
|
|
65
|
+
hr: () => <Separator />,
|
|
66
|
+
ul: (props) => (
|
|
67
|
+
<ul
|
|
68
|
+
{...omit(props, ["node"])}
|
|
69
|
+
className={styles["react-markdown__ul"]}
|
|
70
|
+
/>
|
|
71
|
+
),
|
|
72
|
+
ol: (props) => (
|
|
73
|
+
<ul
|
|
74
|
+
{...omit(props, ["node"])}
|
|
75
|
+
className={styles["react-markdown__ol"]}
|
|
76
|
+
/>
|
|
77
|
+
),
|
|
78
|
+
li: (props) => (
|
|
79
|
+
<li
|
|
80
|
+
{...omit(props, ["node"])}
|
|
81
|
+
className={styles["react-markdown__li"]}
|
|
82
|
+
/>
|
|
83
|
+
),
|
|
84
|
+
a: ({ href, ...props }) => (
|
|
85
|
+
<Anchor
|
|
86
|
+
{...omit(props, ["node"])}
|
|
87
|
+
href={href}
|
|
88
|
+
{...(isExternal(href)
|
|
89
|
+
? {
|
|
90
|
+
target: "_blank",
|
|
91
|
+
rel: "noreferrer",
|
|
92
|
+
}
|
|
93
|
+
: {})}
|
|
94
|
+
/>
|
|
95
|
+
),
|
|
96
|
+
code: ({ className, ...props }) => {
|
|
97
|
+
return (
|
|
98
|
+
<Code
|
|
99
|
+
className={styles["react-markdown__code"]}
|
|
100
|
+
{...omit(props, ["node"])}
|
|
101
|
+
language={getLanguage(className)}
|
|
102
|
+
/>
|
|
103
|
+
);
|
|
104
|
+
},
|
|
105
|
+
img: ({ alt, ...props }) => (
|
|
106
|
+
<View className={styles["react-markdown__img-root"]}>
|
|
107
|
+
<img
|
|
108
|
+
{...omit(props, ["node"])}
|
|
109
|
+
alt={alt}
|
|
110
|
+
className={styles["react-markdown__img"]}
|
|
111
|
+
/>
|
|
112
|
+
{alt ? (
|
|
113
|
+
<Text size="sm" color="dimmer" multiline>
|
|
114
|
+
{alt}
|
|
115
|
+
</Text>
|
|
116
|
+
) : null}
|
|
117
|
+
</View>
|
|
118
|
+
),
|
|
119
|
+
...components,
|
|
120
|
+
}}
|
|
121
|
+
>
|
|
122
|
+
{children}
|
|
123
|
+
</MarkdownPrimitive>
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function getLanguage(className: string = "") {
|
|
128
|
+
const language = (/language-(\w+)/.exec(className) || [])[0];
|
|
129
|
+
return language ? language.substring("language-".length) : "text";
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function isExternal(href?: string) {
|
|
133
|
+
return href?.startsWith("https://");
|
|
134
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
.react-markdown {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.react-markdown__h1,
|
|
7
|
+
.react-markdown__h2 {
|
|
8
|
+
margin-top: var(--space-24);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.react-markdown__h3,
|
|
12
|
+
.react-markdown__h4 {
|
|
13
|
+
margin-top: var(--space-16);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.react-markdown__h5,
|
|
17
|
+
.react-markdown__p,
|
|
18
|
+
.react-markdown__code {
|
|
19
|
+
margin-top: var(--space-8);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.react-markdown__ul {
|
|
23
|
+
margin-top: var(--space-8);
|
|
24
|
+
padding-left: var(--space-24);
|
|
25
|
+
list-style-type: disc;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
.react-markdown__ol {
|
|
29
|
+
margin-top: var(--space-8);
|
|
30
|
+
padding-left: var(--space-24);
|
|
31
|
+
list-style-type: decimal;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.react-markdown__li {
|
|
35
|
+
vertical-align: middle;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/* stylelint-disable */
|
|
39
|
+
.react-markdown__li > ul,
|
|
40
|
+
.react-markdown__li > ol {
|
|
41
|
+
margin-top: 0;
|
|
42
|
+
}
|
|
43
|
+
/* stylelint-enable */
|
|
44
|
+
|
|
45
|
+
.react-markdown__img-root {
|
|
46
|
+
display: flex;
|
|
47
|
+
flex-direction: column;
|
|
48
|
+
justify-content: center;
|
|
49
|
+
align-items: center;
|
|
50
|
+
gap: var(--space-8);
|
|
51
|
+
margin-top: var(--space-8);
|
|
52
|
+
text-align: center;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
.react-markdown__img {
|
|
56
|
+
border: 1px solid var(--surface-border-interactive);
|
|
57
|
+
border-radius: var(--border-radius-default);
|
|
58
|
+
background-color: var(--background-surface);
|
|
59
|
+
width: 100%;
|
|
60
|
+
height: auto;
|
|
61
|
+
overflow: hidden;
|
|
62
|
+
}
|