revotech-ui-kit 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.
Files changed (82) hide show
  1. package/.editorconfig +29 -0
  2. package/.eslintrc +10 -0
  3. package/.storybook/main.ts +17 -0
  4. package/.storybook/preview-head.html +1 -0
  5. package/.storybook/preview.ts +17 -0
  6. package/LICENSE +21 -0
  7. package/README.md +30 -0
  8. package/assets/fonts/Geist/Geist-Black.otf +0 -0
  9. package/assets/fonts/Geist/Geist-Black.woff2 +0 -0
  10. package/assets/fonts/Geist/Geist-Bold.otf +0 -0
  11. package/assets/fonts/Geist/Geist-Bold.woff2 +0 -0
  12. package/assets/fonts/Geist/Geist-Light.otf +0 -0
  13. package/assets/fonts/Geist/Geist-Light.woff2 +0 -0
  14. package/assets/fonts/Geist/Geist-Medium.otf +0 -0
  15. package/assets/fonts/Geist/Geist-Medium.woff2 +0 -0
  16. package/assets/fonts/Geist/Geist-Regular.otf +0 -0
  17. package/assets/fonts/Geist/Geist-Regular.woff2 +0 -0
  18. package/assets/fonts/Geist/Geist-SemiBold.otf +0 -0
  19. package/assets/fonts/Geist/Geist-SemiBold.woff2 +0 -0
  20. package/assets/fonts/Geist/Geist-Thin.otf +0 -0
  21. package/assets/fonts/Geist/Geist-Thin.woff2 +0 -0
  22. package/assets/fonts/Geist/Geist-UltraBlack.otf +0 -0
  23. package/assets/fonts/Geist/Geist-UltraBlack.woff2 +0 -0
  24. package/assets/fonts/Geist/Geist-UltraLight.otf +0 -0
  25. package/assets/fonts/Geist/Geist-UltraLight.woff2 +0 -0
  26. package/assets/fonts/Geist/GeistVariableVF.ttf +0 -0
  27. package/assets/fonts/Geist/GeistVariableVF.woff2 +0 -0
  28. package/assets/fonts/Geist/LICENSE.TXT +92 -0
  29. package/assets/open-wc-logo.svg +29 -0
  30. package/index.html +362 -0
  31. package/package.json +117 -0
  32. package/rollup.config.js +71 -0
  33. package/src/components/atoms/button/button.atom.ts +39 -0
  34. package/src/components/atoms/button/button.stories.ts +186 -0
  35. package/src/components/atoms/button/button.style.ts +31 -0
  36. package/src/components/atoms/button/button.type.ts +10 -0
  37. package/src/components/atoms/checkbox/checkbox.atom.ts +62 -0
  38. package/src/components/atoms/checkbox/checkbox.stories.ts +42 -0
  39. package/src/components/atoms/command-empty/command-empty.atom.ts +44 -0
  40. package/src/components/atoms/command-group/command-group.atom.ts +60 -0
  41. package/src/components/atoms/command-item/command-item.atom.ts +74 -0
  42. package/src/components/atoms/command-list/command-list.atom.ts +37 -0
  43. package/src/components/atoms/command-separator/command-separator.atom.ts +42 -0
  44. package/src/components/atoms/dialog/dialog.atom.ts +301 -0
  45. package/src/components/atoms/dialog/dialog.stories.ts +86 -0
  46. package/src/components/atoms/index.ts +10 -0
  47. package/src/components/atoms/input/input.atom.ts +34 -0
  48. package/src/components/atoms/input/input.stories.ts +89 -0
  49. package/src/components/atoms/input/input.type.ts +24 -0
  50. package/src/components/atoms/label/label.atom.ts +40 -0
  51. package/src/components/atoms/label/label.stories.ts +18 -0
  52. package/src/components/atoms/label/label.style.ts +5 -0
  53. package/src/components/command/command.stories.ts +154 -0
  54. package/src/components/command/command.ts +391 -0
  55. package/src/components/index.ts +2 -0
  56. package/src/components/molecules/command/command.molecules.ts +31 -0
  57. package/src/components/molecules/command-input/command-input.atom.ts +130 -0
  58. package/src/components/molecules/index.ts +1 -0
  59. package/src/components/popover.ts +247 -0
  60. package/src/globals.css +1806 -0
  61. package/src/helpers/index.ts +2 -0
  62. package/src/helpers/mouse-conroller.helper.ts +42 -0
  63. package/src/helpers/style.helpers.ts +6 -0
  64. package/src/interfaces/actionable.interface.ts +6 -0
  65. package/src/interfaces/atomic.interface.ts +6 -0
  66. package/src/interfaces/changeable.interface.ts +14 -0
  67. package/src/interfaces/child-support-atomic.interface.ts +5 -0
  68. package/src/interfaces/index.ts +6 -0
  69. package/src/interfaces/intractable.interface.ts +6 -0
  70. package/src/interfaces/variant.interface.ts +3 -0
  71. package/src/lib/index.ts +0 -0
  72. package/src/lib/next/next.lib.ts +0 -0
  73. package/src/lib/react/react.lib.ts +0 -0
  74. package/src/styles/index.ts +1 -0
  75. package/src/styles/tw.styles.ts +1867 -0
  76. package/src/tailwind-lib.css +95 -0
  77. package/src/wc-ui-app.ts +81 -0
  78. package/tailwind.config.js +81 -0
  79. package/test/wc-ui-app.test.ts +22 -0
  80. package/tsconfig.json +25 -0
  81. package/web-dev-server.config.mjs +26 -0
  82. package/web-test-runner.config.mjs +41 -0
package/index.html ADDED
@@ -0,0 +1,362 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <meta
6
+ name="viewport"
7
+ content="width=device-width, initial-scale=1.0, viewport-fit=cover"
8
+ />
9
+ <meta name="Description" content="Put your description here." />
10
+ <base href="/" />
11
+ <link href="./src/globals.css" rel="stylesheet" />
12
+ <script src="https://code.iconify.design/iconify-icon/2.0.0/iconify-icon.min.js"></script>
13
+
14
+ <style>
15
+ html,
16
+ body {
17
+ margin: 0;
18
+ padding: 0;
19
+ background-color: white;
20
+ }
21
+ </style>
22
+ <title>wc-ui-app</title>
23
+ </head>
24
+
25
+ <body>
26
+ <div class="container mx-auto my-10">
27
+ <h1 class="text-4xl text-center">Web Components</h1>
28
+ <h2 class="text-2xl text-center">Button</h2>
29
+ </div>
30
+ <div class="flex flex-wrap justify-between space-x-4 gap-5 mx-3">
31
+ <rtg-button>Primary</rtg-button>
32
+ <rtg-button variant="secondary">Secodary</rtg-button>
33
+ <rtg-button variant="destructive">Destructive</rtg-button>
34
+ <rtg-button variant="outline">Outline</rtg-button>
35
+ <rtg-button variant="ghost">Ghost</rtg-button>
36
+ <rtg-button variant="link">Link</rtg-button>
37
+ <rtg-button variant="outline" size="icon"
38
+ ><iconify-icon icon="mdi:home"></iconify-icon
39
+ ></rtg-button>
40
+ <rtg-button
41
+ ><iconify-icon class="mr-2" icon="mdi:home"></iconify-icon> Home
42
+ Page</rtg-button
43
+ >
44
+ <rtg-button disabled
45
+ ><iconify-icon class="mr-2 animate-spin" icon="mdi:home"></iconify-icon>
46
+ Home Page</rtg-button
47
+ >
48
+ </div>
49
+ <div class="container mx-auto my-10">
50
+ <h2 class="text-2xl text-center">Labels</h2>
51
+ </div>
52
+ <div class="flex items-center space-x-2 mx-2 justify-center">
53
+ <rtg-checkbox id="terms"></rtg-checkbox>
54
+ <rtg-label for="terms">Accept terms and conditions</rtg-label>
55
+ </div>
56
+ <div class="container mx-auto my-10">
57
+ <h2 class="text-2xl text-center">Inputs</h2>
58
+ </div>
59
+ <div class="flex flex-wrap space-x-4 gap-5 mx-3">
60
+ <rtg-input type="email" placeholder="Email" class="min-w-80"></rtg-input>
61
+ <div class="grid w-full max-w-sm items-center gap-1.5 min-w-80">
62
+ <rtg-label for="picture">Picture</rtg-label>
63
+ <rtg-input id="picture" type="file" placeholder="file"></rtg-input>
64
+ </div>
65
+ <rtg-input
66
+ disabled
67
+ type="email"
68
+ placeholder="Email"
69
+ class="min-w-80"
70
+ ></rtg-input>
71
+ <div class="grid w-full max-w-sm items-center gap-1.5 min-w-80">
72
+ <rtg-label for="email">Email address</rtg-label>
73
+ <rtg-input id="email" type="email" placeholder="Email"> </rtg-input>
74
+ </div>
75
+ <div class="flex flex-nowrap w-full max-w-sm items-center space-x-2">
76
+ <rtg-input
77
+ id="email"
78
+ type="email"
79
+ placeholder="Email"
80
+ class="min-w-80"
81
+ ></rtg-input>
82
+ <rtg-button size="default" onclick="javascript:alert('Hello!')">Subscribe</rtg-button>
83
+ </div>
84
+ </div>
85
+ <div class="container mx-auto my-10">
86
+ <h2 class="text-2xl text-center">Command</h2>
87
+ </div>
88
+ <div class="flex flex-nowrap justify-center">
89
+ <div class="flex flex-wrap space-x-4 gap-5 mx-3">
90
+ <rtg-command class="w-full max-w-md">
91
+ <rtg-command-input placeholder="Search ...."></rtg-command-input>
92
+ <rtg-command-list>
93
+ <rtg-command-empty>No items found!</rtg-command-empty>
94
+ <rtg-command-group heading="Suggestions">
95
+ <rtg-command-item>
96
+ <svg
97
+ xmlns="http://www.w3.org/2000/svg"
98
+ width="24"
99
+ height="24"
100
+ viewBox="0 0 24 24"
101
+ fill="none"
102
+ stroke="currentColor"
103
+ stroke-width="2"
104
+ stroke-linecap="round"
105
+ stroke-linejoin="round"
106
+ class="mr-2 h-4 w-4"
107
+ >
108
+ <rect width="18" height="18" x="3" y="4" rx="2" ry="2"></rect>
109
+ <line x1="16" x2="16" y1="2" y2="6"></line>
110
+ <line x1="8" x2="8" y1="2" y2="6"></line>
111
+ <line x1="3" x2="21" y1="10" y2="10"></line></svg>
112
+ <span>Calendar</span>
113
+ </rtg-command-item>
114
+ <rtg-command-item>
115
+ <svg
116
+ xmlns="http://www.w3.org/2000/svg"
117
+ width="24"
118
+ height="24"
119
+ viewBox="0 0 24 24"
120
+ fill="none"
121
+ stroke="currentColor"
122
+ stroke-width="2"
123
+ stroke-linecap="round"
124
+ stroke-linejoin="round"
125
+ class="mr-2 h-4 w-4"
126
+ >
127
+ <circle cx="12" cy="12" r="10"></circle>
128
+ <path d="M8 14s1.5 2 4 2 4-2 4-2"></path>
129
+ <line x1="9" x2="9.01" y1="9" y2="9"></line>
130
+ <line x1="15" x2="15.01" y1="9" y2="9"></line></svg>
131
+ <span>Search Emoji</span>
132
+ </rtg-command-item>
133
+ <rtg-command-item>
134
+ <svg
135
+ xmlns="http://www.w3.org/2000/svg"
136
+ width="24"
137
+ height="24"
138
+ viewBox="0 0 24 24"
139
+ fill="none"
140
+ stroke="currentColor"
141
+ stroke-width="2"
142
+ stroke-linecap="round"
143
+ stroke-linejoin="round"
144
+ class="mr-2 h-4 w-4"
145
+ >
146
+ <rect width="16" height="20" x="4" y="2" rx="2"></rect>
147
+ <line x1="8" x2="16" y1="6" y2="6"></line>
148
+ <line x1="16" x2="16" y1="14" y2="18"></line>
149
+ <path d="M16 10h.01"></path>
150
+ <path d="M12 10h.01"></path>
151
+ <path d="M8 10h.01"></path>
152
+ <path d="M12 14h.01"></path>
153
+ <path d="M8 14h.01"></path>
154
+ <path d="M12 18h.01"></path>
155
+ <path d="M8 18h.01"></path></svg>
156
+ <span>Calculator</span>
157
+ </rtg-command-item>
158
+ </rtg-command-group>
159
+ <rtg-command-separator></rtg-command-separator>
160
+ <rtg-command-group heading="Settings">
161
+ <rtg-command-item onclick="javascript:alert('Profile Clicked!')">
162
+ <svg
163
+ xmlns="http://www.w3.org/2000/svg"
164
+ width="24"
165
+ height="24"
166
+ viewBox="0 0 24 24"
167
+ fill="none"
168
+ stroke="currentColor"
169
+ stroke-width="2"
170
+ stroke-linecap="round"
171
+ stroke-linejoin="round"
172
+ class="mr-2 h-4 w-4"
173
+ >
174
+ <path d="M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2"></path>
175
+ <circle cx="12" cy="7" r="4"></circle></svg>
176
+ <span>Profile</span>
177
+ <span
178
+ class="ml-auto text-xs tracking-widest text-muted-foreground"
179
+ >⌘P</span>
180
+ </rtg-command-item>
181
+ <rtg-command-item>
182
+ <svg
183
+ xmlns="http://www.w3.org/2000/svg"
184
+ width="24"
185
+ height="24"
186
+ viewBox="0 0 24 24"
187
+ fill="none"
188
+ stroke="currentColor"
189
+ stroke-width="2"
190
+ stroke-linecap="round"
191
+ stroke-linejoin="round"
192
+ class="mr-2 h-4 w-4"
193
+ >
194
+ <rect width="20" height="14" x="2" y="5" rx="2"></rect>
195
+ <line x1="2" x2="22" y1="10" y2="10"></line></svg>
196
+ <span>Billing</span
197
+ ><span
198
+ class="ml-auto text-xs tracking-widest text-muted-foreground"
199
+ >⌘B</span
200
+ >
201
+ </rtg-command-item>
202
+ <rtg-command-item>
203
+ <svg
204
+ xmlns="http://www.w3.org/2000/svg"
205
+ width="24"
206
+ height="24"
207
+ viewBox="0 0 24 24"
208
+ fill="none"
209
+ stroke="currentColor"
210
+ stroke-width="2"
211
+ stroke-linecap="round"
212
+ stroke-linejoin="round"
213
+ class="mr-2 h-4 w-4"
214
+ >
215
+ <path
216
+ d="M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"
217
+ ></path>
218
+ <circle cx="12" cy="12" r="3"></circle></svg>
219
+ <span>Settings</span>
220
+ <span
221
+ class="ml-auto text-xs tracking-widest text-muted-foreground">
222
+ ⌘S</span>
223
+ </rtg-command-item>
224
+ </rtg-command-group></rtg-command-list
225
+ >
226
+ </rtg-command>
227
+ </div>
228
+ </div>
229
+ <div class="container mx-auto my-10">
230
+ <h2 class="text-2xl text-center">Dialog</h2>
231
+ </div>
232
+ <div class="flex flex-nowrap justify-center">
233
+ <div class="flex flex-wrap space-x-4 gap-5 mx-3">
234
+ <rtg-dialog>
235
+ <rtg-dialog-trigger>
236
+ <rtg-button>Open Dialog</rtg-button>
237
+ </rtg-dialog-trigger>
238
+ <rtg-dialog-content>
239
+ <rtg-dialog-header title="Are you absolutely sure?" description="This action cannot be undone. This will permanently delete your
240
+ content.">
241
+ <rtg-dialog-title>Are you absolutely sure?</rtg-dialog-title>
242
+ <rtg-dialog-description>
243
+ This action cannot be undone. This will permanently delete your
244
+ content.</rtg-dialog-description
245
+ >
246
+ </rtg-dialog-header>
247
+ <rtg-dialog-footer>
248
+ <div class="flex w-full justify-between space-x-1">
249
+ <rtg-dialog-close><rtg-button variant="secondary">Close</rtg-button></rtg-dialog-close>
250
+ <div class="justify-end">
251
+ <rtg-button variant="destructive">Delete</rtg-button>
252
+ <rtg-button>Cancel</rtg-button>
253
+ </div>
254
+ </div>
255
+ </rtg-dialog-content>
256
+ </rtg-dialog>
257
+ <rtg-dialog>
258
+ <rtg-dialog-trigger>
259
+ <rtg-button variant="outline">Edit Profile</rtg-button>
260
+ </rtg-dialog-trigger>
261
+ <rtg-dialog-content class="sm:max-w-[425px]">
262
+ <rtg-dialog-header title="Edit Profile", description="Make changes to your profile here. Click save when you're done.">
263
+ <!-- <rtg-dialog-title>Edit Profile</rtg-dialog-title>
264
+ <rtg-dialog-description>
265
+ Make changes to your profile here. Click save when you're done.</rtg-dialog-description
266
+ > -->
267
+ </rtg-dialog-header>
268
+ <div class="grid gap-4 py-4">
269
+ <div class="grid grid-cols-4 items-center gap-4">
270
+ <rtg-label for="name" class="text-right">
271
+ Name
272
+ </rtg-label>
273
+ <rtg-input
274
+ id="name"
275
+ defaultValue="Pedro Duarte"
276
+ class="col-span-3"
277
+ />
278
+ </div>
279
+ <div class="grid grid-cols-4 items-center gap-4">
280
+ <rtg-label for="username" class="text-right">
281
+ Username
282
+ </rtg-label>
283
+ <rtg-input
284
+ id="username"
285
+ defaultValue="@peduarte"
286
+ class="col-span-3"
287
+ />
288
+ </div>
289
+ </div>
290
+ <rtg-dialog-footer>
291
+ <rtg-button type="submit" class="w-full sm:w-min">Save changes</rtg-button>
292
+ </rtg-dialog-content>
293
+ </rtg-dialog>
294
+ </div>
295
+ </div>
296
+ <div class="container mx-auto my-10">
297
+ <h2 class="text-2xl text-center">Popover</h2>
298
+ </div>
299
+ <div class="flex flex-nowrap justify-center">
300
+ <div class="flex flex-wrap space-x-4 gap-5 mx-3">
301
+ <rtg-popover>
302
+ <rtg-popover-trigger>
303
+ <rtg-button variant="outline">Open Popover</rtg-button>
304
+ </rtg-popover-trigger>
305
+ <rtg-popover-content class="w-80">
306
+ <div class="grid gap-4">
307
+ <div class="space-y-2">
308
+ <h4 class="font-medium leading-none">Dimensions</h4>
309
+ <p class="text-sm text-muted-foreground">
310
+ Set the dimensions for the layer.
311
+ </p>
312
+ </div>
313
+ <div class="grid gap-2">
314
+ <div class="grid grid-cols-3 items-center gap-4">
315
+ <rtg-label for="width">Width</rtg-label>
316
+ <rtg-input
317
+ id="width"
318
+ defaultValue="100%"
319
+ class="col-span-2 h-8"
320
+ />
321
+ </div>
322
+ <div class="grid grid-cols-3 items-center gap-4">
323
+ <rtg-label for="maxWidth">Max. width</rtg-label>
324
+ <rtg-input
325
+ id="maxWidth"
326
+ defaultValue="300px"
327
+ class="col-span-2 h-8"
328
+ />
329
+ </div>
330
+ <div class="grid grid-cols-3 items-center gap-4">
331
+ <rtg-label htmlFor="height">Height</rtg-label>
332
+ <rtg-input
333
+ id="height"
334
+ defaultValue="25px"
335
+ class="col-span-2 h-8"
336
+ />
337
+ </div>
338
+ <div class="grid grid-cols-3 items-center gap-4">
339
+ <rtg-label htmlFor="maxHeight">Max. height</rtg-label>
340
+ <rtg-input
341
+ id="maxHeight"
342
+ defaultValue="none"
343
+ class="col-span-2 h-8"
344
+ />
345
+ </div>
346
+ </div>
347
+ </div>
348
+ </rtg-popover-content>
349
+ </rtg-popover>
350
+ </div>
351
+ </div>
352
+ <div class="h-9"></div>
353
+ </div>
354
+ <script type="module" src="./dist/src/wc-ui-app.js"></script>
355
+ <script type="module" src="./dist/src/components/"></script>
356
+ <!-- <script type="module" src="./dist/src/components/input/input.js"></script>
357
+ <script type="module" src="./dist/src/components/label/label.js"></script>
358
+ <script type="module" src="./dist/src/components/checkbox/checkbox.js"></script>
359
+ <script type="module" src="./dist/src/components/command/command.js"></script>
360
+ <script type="module" src="./dist/src/components/dialog/dialog.js"></script> -->
361
+ </body>
362
+ </html>
package/package.json ADDED
@@ -0,0 +1,117 @@
1
+ {
2
+ "name": "revotech-ui-kit",
3
+ "description": "Webcomponent wc-ui following open-wc recommendations",
4
+ "license": "MIT",
5
+ "author": "wc-ui",
6
+ "version": "0.0.0",
7
+ "type": "module",
8
+ "scripts": {
9
+ "clean": "rimraf dist",
10
+ "copy-files": "copyfiles -u 1 src/**/*.html src/**/*.css src/**/*.js dist/public/",
11
+ "lint": "eslint --ext .ts,.html . --ignore-path .gitignore && prettier \"**/*.ts\" --check --ignore-path .gitignore",
12
+ "format": "eslint --ext .ts,.html . --fix --ignore-path .gitignore && prettier \"**/*.ts\" --write --ignore-path .gitignore",
13
+ "test": "tsc && wtr --coverage",
14
+ "test:watch": "tsc && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wtr --watch\"",
15
+ "storybook": "storybook dev -p 6006",
16
+ "storybook:build": "tsc && npm run analyze -- --exclude dist && build-storybook",
17
+ "build": "npm run clean && tsc && rollup -c rollup.config.js && npm run copy-files && npm run analyze -- --exclude dist",
18
+ "start:build": "web-dev-server --root-dir dist --app-index index.html --open",
19
+ "analyze": "cem analyze --litelement",
20
+ "start": "npm run clean && tsc && npm run copy-files && concurrently -k -r \"tsc --watch --preserveWatchOutput\" \"wds\"",
21
+ "tw:watch": "concurrently \"tailwindcss -i ./src/tailwind-lib.css -o ./src/globals.css --watch\" \"twlit --input ./src/globals.css --output ./src/lib/tw-styles.ts \""
22
+ },
23
+ "dependencies": {
24
+ "@storybook/addon-essentials": "^8.0.0",
25
+ "@storybook/addon-links": "^8.0.0",
26
+ "@storybook/web-components": "^8.0.0",
27
+ "@storybook/web-components-vite": "^8.0.0",
28
+ "class-variance-authority": "^0.7.0",
29
+ "clsx": "^2.1.0",
30
+ "lit": "^3.1.2",
31
+ "storybook": "^8.0.0",
32
+ "tailwind-merge": "^2.2.1",
33
+ "tailwindcss-animate": "^1.0.7"
34
+ },
35
+ "devDependencies": {
36
+ "@babel/preset-env": "^7.16.4",
37
+ "@custom-elements-manifest/analyzer": "^0.4.17",
38
+ "@open-wc/building-rollup": "^2.0.2",
39
+ "@open-wc/eslint-config": "^9.2.1",
40
+ "@open-wc/testing": "^3.1.6",
41
+ "@rollup/plugin-babel": "^5.3.0",
42
+ "@rollup/plugin-node-resolve": "^13.0.6",
43
+ "@storybook/builder-vite": "^8.0.0",
44
+ "@typescript-eslint/eslint-plugin": "^5.48.0",
45
+ "@typescript-eslint/parser": "^5.48.0",
46
+ "@web/dev-server": "^0.1.34",
47
+ "@web/dev-server-storybook": "^0.5.4",
48
+ "@web/rollup-plugin-html": "^1.11.0",
49
+ "@web/rollup-plugin-import-meta-assets": "^1.0.7",
50
+ "@web/test-runner": "^0.14.0",
51
+ "babel-plugin-template-html-minifier": "^4.1.0",
52
+ "concurrently": "^5.3.0",
53
+ "copyfiles": "^2.4.1",
54
+ "deepmerge": "^4.2.2",
55
+ "eslint": "^8.31.0",
56
+ "eslint-config-prettier": "^8.3.0",
57
+ "husky": "^9.1.4",
58
+ "lint-staged": "^10.5.4",
59
+ "prettier": "^2.4.1",
60
+ "rimraf": "^3.0.2",
61
+ "rollup": "^2.60.0",
62
+ "rollup-plugin-esbuild": "^5.0.0",
63
+ "rollup-plugin-workbox": "^6.2.0",
64
+ "tailwindcss": "^3.4.1",
65
+ "tslib": "^2.3.1",
66
+ "twlit": "^0.0.1-alpha.37",
67
+ "typescript": "^5.3.3"
68
+ },
69
+ "eslintConfig": {
70
+ "parser": "@typescript-eslint/parser",
71
+ "extends": [
72
+ "@open-wc",
73
+ "prettier"
74
+ ],
75
+ "plugins": [
76
+ "@typescript-eslint"
77
+ ],
78
+ "rules": {
79
+ "no-unused-vars": "off",
80
+ "@typescript-eslint/no-unused-vars": [
81
+ "error"
82
+ ],
83
+ "import/no-unresolved": "off",
84
+ "import/extensions": [
85
+ "error",
86
+ "always",
87
+ {
88
+ "ignorePackages": true
89
+ }
90
+ ],
91
+ "max-classes-per-file": [
92
+ "error",
93
+ {
94
+ "ignoreExpressions": true,
95
+ "max": 10
96
+ }
97
+ ],
98
+ "no-plusplus": "off"
99
+ }
100
+ },
101
+ "prettier": {
102
+ "singleQuote": true,
103
+ "arrowParens": "avoid"
104
+ },
105
+ "husky": {
106
+ "hooks": {
107
+ "pre-commit": "lint-staged"
108
+ }
109
+ },
110
+ "lint-staged": {
111
+ "*.ts": [
112
+ "eslint --fix",
113
+ "prettier --write"
114
+ ]
115
+ },
116
+ "customElements": "custom-elements.json"
117
+ }
@@ -0,0 +1,71 @@
1
+ import nodeResolve from '@rollup/plugin-node-resolve';
2
+ import babel from '@rollup/plugin-babel';
3
+ import html from '@web/rollup-plugin-html';
4
+ import { importMetaAssets } from '@web/rollup-plugin-import-meta-assets';
5
+ import esbuild from 'rollup-plugin-esbuild';
6
+ import { generateSW } from 'rollup-plugin-workbox';
7
+ import path from 'path';
8
+
9
+ export default {
10
+ input: 'index.html',
11
+ output: {
12
+ entryFileNames: '[hash].js',
13
+ chunkFileNames: '[hash].js',
14
+ assetFileNames: '[hash][extname]',
15
+ format: 'es',
16
+ dir: 'dist',
17
+ },
18
+ preserveEntrySignatures: false,
19
+
20
+ plugins: [
21
+ /** Enable using HTML as rollup entrypoint */
22
+ html({
23
+ minify: true,
24
+ injectServiceWorker: true,
25
+ serviceWorkerPath: 'dist/sw.js',
26
+ }),
27
+ /** Resolve bare module imports */
28
+ nodeResolve(),
29
+ /** Minify JS, compile JS to a lower language target */
30
+ esbuild({
31
+ minify: true,
32
+ target: ['chrome64', 'firefox67', 'safari11.1'],
33
+ }),
34
+ /** Bundle assets references via import.meta.url */
35
+ importMetaAssets(),
36
+ /** Minify html and css tagged template literals */
37
+ babel({
38
+ plugins: [
39
+ [
40
+ require.resolve('babel-plugin-template-html-minifier'),
41
+ {
42
+ modules: { lit: ['html', { name: 'css', encapsulation: 'style' }] },
43
+ failOnError: false,
44
+ strictCSS: true,
45
+ htmlMinifier: {
46
+ collapseWhitespace: true,
47
+ conservativeCollapse: true,
48
+ removeComments: true,
49
+ caseSensitive: true,
50
+ minifyCSS: true,
51
+ },
52
+ },
53
+ ],
54
+ ],
55
+ }),
56
+ /** Create and inject a service worker */
57
+ generateSW({
58
+ globIgnores: ['polyfills/*.js', 'nomodule-*.js'],
59
+ navigateFallback: '/index.html',
60
+ // where to output the generated sw
61
+ swDest: path.join('dist', 'sw.js'),
62
+ // directory to match patterns against to be precached
63
+ globDirectory: path.join('dist'),
64
+ // cache any html js and css by default
65
+ globPatterns: ['**/*.{html,js,css,webmanifest}'],
66
+ skipWaiting: true,
67
+ clientsClaim: true,
68
+ runtimeCaching: [{ urlPattern: 'polyfills/*.js', handler: 'CacheFirst' }],
69
+ }),
70
+ ],
71
+ };
@@ -0,0 +1,39 @@
1
+ import { LitElement, html, css } from 'lit';
2
+ import { property, customElement } from 'lit/decorators.js';
3
+ import { cn } from '@/helpers';
4
+ import { ButtonSize, ButtonType, ButtonVariant } from './button.type';
5
+ import { buttonStyle } from './button.style';
6
+ import { TWStyles } from '@/styles';
7
+
8
+ @customElement('rtg-button')
9
+ export class Button extends LitElement {
10
+ static buttonVariants = buttonStyle;
11
+
12
+ @property({ type: Boolean }) disabled = false;
13
+
14
+ @property({ type: String }) type: ButtonType = 'button';
15
+
16
+ @property({ type: String }) variant: ButtonVariant = 'default';
17
+
18
+ @property({ type: String }) size: ButtonSize = 'default';
19
+
20
+ static styles = [css``, TWStyles];
21
+
22
+ render() {
23
+ return html`
24
+ <button
25
+ type="${this.type}"
26
+ ?disabled=${this.disabled}
27
+ class="${cn(
28
+ Button.buttonVariants({
29
+ variant: this.variant,
30
+ size: this.size,
31
+ className: this.className,
32
+ })
33
+ )}"
34
+ >
35
+ <slot></slot>
36
+ </button>
37
+ `;
38
+ }
39
+ }