@meistrari/tela-build 1.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 (295) hide show
  1. package/README.md +75 -0
  2. package/app.config.ts +73 -0
  3. package/components/tela/animated/animated-calculating-number.vue +16 -0
  4. package/components/tela/animated/animated-number.mdx +248 -0
  5. package/components/tela/animated/animated-number.stories.ts +52 -0
  6. package/components/tela/animated/animated-number.vue +23 -0
  7. package/components/tela/animated/animated-text.vue +124 -0
  8. package/components/tela/animated/animated-value.vue +68 -0
  9. package/components/tela/avatar/avatar.mdx +117 -0
  10. package/components/tela/avatar/avatar.stories.ts +62 -0
  11. package/components/tela/avatar/avatar.vue +71 -0
  12. package/components/tela/avatar/group/avatar-group.stories.ts +78 -0
  13. package/components/tela/avatar/group/avatar-group.vue +46 -0
  14. package/components/tela/badge/badge.mdx +154 -0
  15. package/components/tela/badge/badge.stories.ts +82 -0
  16. package/components/tela/badge/badge.vue +41 -0
  17. package/components/tela/button/button.mdx +155 -0
  18. package/components/tela/button/button.stories.ts +202 -0
  19. package/components/tela/button/button.vue +107 -0
  20. package/components/tela/card.vue +30 -0
  21. package/components/tela/chart/chart-bar.vue +58 -0
  22. package/components/tela/chat/chat.mdx +268 -0
  23. package/components/tela/chat/chat.stories.ts +253 -0
  24. package/components/tela/chat/command/index.vue +41 -0
  25. package/components/tela/chat/command/mention/index.vue +138 -0
  26. package/components/tela/chat/index.vue +112 -0
  27. package/components/tela/chat/pure-text-input/chat-text-input.vue +190 -0
  28. package/components/tela/chat/text-input/chat-text-input.stories.ts +128 -0
  29. package/components/tela/chat/text-input/index.vue +217 -0
  30. package/components/tela/chat/text-message/chat-text-message.stories.ts +138 -0
  31. package/components/tela/chat/text-message/index.vue +355 -0
  32. package/components/tela/chat/types.ts +19 -0
  33. package/components/tela/checkbox/checkbox-card.vue +30 -0
  34. package/components/tela/checkbox/checkbox.mdx +164 -0
  35. package/components/tela/checkbox/checkbox.stories.ts +104 -0
  36. package/components/tela/checkbox/checkbox.vue +43 -0
  37. package/components/tela/collapsible/Collapsible.vue +15 -0
  38. package/components/tela/collapsible/CollapsibleContent.vue +59 -0
  39. package/components/tela/collapsible/CollapsibleTrigger.vue +12 -0
  40. package/components/tela/collapsible/collapsible.mdx +157 -0
  41. package/components/tela/collapsible-section/collapsible-section.mdx +180 -0
  42. package/components/tela/collapsible-section/collapsible-section.stories.ts +53 -0
  43. package/components/tela/collapsible-section/collapsible-section.vue +51 -0
  44. package/components/tela/collapsible-section-with-actions.vue +98 -0
  45. package/components/tela/combobox/combobox-anchor.vue +24 -0
  46. package/components/tela/combobox/combobox-empty.vue +19 -0
  47. package/components/tela/combobox/combobox-group.vue +24 -0
  48. package/components/tela/combobox/combobox-indicator.vue +22 -0
  49. package/components/tela/combobox/combobox-input.vue +31 -0
  50. package/components/tela/combobox/combobox-item.vue +28 -0
  51. package/components/tela/combobox/combobox-label.vue +24 -0
  52. package/components/tela/combobox/combobox-list.vue +90 -0
  53. package/components/tela/combobox/combobox-module-selector.vue +366 -0
  54. package/components/tela/combobox/combobox-root.vue +15 -0
  55. package/components/tela/combobox/combobox-trigger.vue +12 -0
  56. package/components/tela/combobox/combobox.mdx +285 -0
  57. package/components/tela/combobox/combobox.stories.ts +232 -0
  58. package/components/tela/combobox/combobox.vue +497 -0
  59. package/components/tela/command/command-dialog.vue +22 -0
  60. package/components/tela/command/command-empty.vue +25 -0
  61. package/components/tela/command/command-group.vue +46 -0
  62. package/components/tela/command/command-input.vue +38 -0
  63. package/components/tela/command/command-item.vue +78 -0
  64. package/components/tela/command/command-list.vue +78 -0
  65. package/components/tela/command/command-separator.vue +23 -0
  66. package/components/tela/command/command-shortcut.vue +13 -0
  67. package/components/tela/command/command.vue +88 -0
  68. package/components/tela/command/dialog-base.vue +15 -0
  69. package/components/tela/command/dialog-content.vue +50 -0
  70. package/components/tela/command/utils.ts +15 -0
  71. package/components/tela/complex-table/complex-table-cell.stories.ts +145 -0
  72. package/components/tela/complex-table/complex-table-cell.vue +45 -0
  73. package/components/tela/complex-table/complex-table-header-cell.stories.ts +103 -0
  74. package/components/tela/complex-table/complex-table-header-cell.vue +48 -0
  75. package/components/tela/complex-table/complex-table-header.stories.ts +89 -0
  76. package/components/tela/complex-table/complex-table-header.vue +70 -0
  77. package/components/tela/complex-table/complex-table-row.vue +199 -0
  78. package/components/tela/complex-table/complex-table-virtualized.vue +326 -0
  79. package/components/tela/complex-table/complex-table.stories.ts +358 -0
  80. package/components/tela/complex-table/complex-table.vue +237 -0
  81. package/components/tela/complex-table/composables/table-common.ts +93 -0
  82. package/components/tela/complex-table/composables/table-selection.ts +87 -0
  83. package/components/tela/complex-table/composables/virtual-scroll.ts +252 -0
  84. package/components/tela/complex-table/styles/table-shared.css +170 -0
  85. package/components/tela/complex-table/types.ts +63 -0
  86. package/components/tela/complex-table/utils.ts +35 -0
  87. package/components/tela/confirm-button/confirm-button.vue +137 -0
  88. package/components/tela/confirmation-modal/confirmation-modal.vue +72 -0
  89. package/components/tela/copy-button.vue +86 -0
  90. package/components/tela/date-range-picker.vue +221 -0
  91. package/components/tela/dialog/dialog.mdx +170 -0
  92. package/components/tela/dialog/dialog.vue +182 -0
  93. package/components/tela/disabled-area.vue +16 -0
  94. package/components/tela/disclaimer/disclaimer.mdx +238 -0
  95. package/components/tela/disclaimer/disclaimer.stories.ts +196 -0
  96. package/components/tela/disclaimer/disclaimer.vue +125 -0
  97. package/components/tela/dropdown-menu/DropdownMenu.vue +121 -0
  98. package/components/tela/dropdown-menu/DropdownMenuCheckboxItem.vue +40 -0
  99. package/components/tela/dropdown-menu/DropdownMenuContent.vue +75 -0
  100. package/components/tela/dropdown-menu/DropdownMenuGroup.vue +12 -0
  101. package/components/tela/dropdown-menu/DropdownMenuItem.vue +137 -0
  102. package/components/tela/dropdown-menu/DropdownMenuLabel.vue +26 -0
  103. package/components/tela/dropdown-menu/DropdownMenuRadioGroup.vue +18 -0
  104. package/components/tela/dropdown-menu/DropdownMenuRadioItem.vue +40 -0
  105. package/components/tela/dropdown-menu/DropdownMenuRoot.vue +15 -0
  106. package/components/tela/dropdown-menu/DropdownMenuSeparator.vue +21 -0
  107. package/components/tela/dropdown-menu/DropdownMenuShortcut.vue +14 -0
  108. package/components/tela/dropdown-menu/DropdownMenuSub.vue +18 -0
  109. package/components/tela/dropdown-menu/DropdownMenuSubContent.vue +30 -0
  110. package/components/tela/dropdown-menu/DropdownMenuSubTrigger.vue +35 -0
  111. package/components/tela/dropdown-menu/DropdownMenuTrigger.vue +14 -0
  112. package/components/tela/dropdown-menu/dropdown-menu.mdx +265 -0
  113. package/components/tela/dropdown-menu/dropdown-menu.stories.ts +156 -0
  114. package/components/tela/expandable-input.vue +96 -0
  115. package/components/tela/file-drop.vue +37 -0
  116. package/components/tela/file-upload/file-upload.mdx +189 -0
  117. package/components/tela/file-upload/file-upload.stories.ts +48 -0
  118. package/components/tela/file-upload/file-upload.vue +205 -0
  119. package/components/tela/filters/checkbox-filter.stories.ts +218 -0
  120. package/components/tela/filters/checkbox-filter.vue +165 -0
  121. package/components/tela/filters/date-filter.stories.ts +258 -0
  122. package/components/tela/filters/date-filter.vue +200 -0
  123. package/components/tela/filters/user-filter.stories.ts +344 -0
  124. package/components/tela/filters/user-filter.vue +271 -0
  125. package/components/tela/hover-card/hover-card.mdx +221 -0
  126. package/components/tela/hover-card/hover-card.stories.ts +87 -0
  127. package/components/tela/hover-card/hover-card.vue +61 -0
  128. package/components/tela/icon/custom.vue +319 -0
  129. package/components/tela/icon/spinner.vue +12 -0
  130. package/components/tela/icon-button/icon-button.vue +114 -0
  131. package/components/tela/icon.vue +37 -0
  132. package/components/tela/initials.vue +28 -0
  133. package/components/tela/inline-input.vue +77 -0
  134. package/components/tela/input/input.mdx +182 -0
  135. package/components/tela/input/input.stories.ts +153 -0
  136. package/components/tela/input/tela-input.vue +240 -0
  137. package/components/tela/kbd/kbd-return.vue +6 -0
  138. package/components/tela/kbd/kbd.mdx +238 -0
  139. package/components/tela/kbd/kbd.vue +18 -0
  140. package/components/tela/label/label.mdx +121 -0
  141. package/components/tela/label/label.stories.ts +37 -0
  142. package/components/tela/label/label.vue +25 -0
  143. package/components/tela/link-decoration/link-decoration.vue +19 -0
  144. package/components/tela/live-label.vue +32 -0
  145. package/components/tela/long-press-button.vue +98 -0
  146. package/components/tela/menubar/menubar-content.vue +77 -0
  147. package/components/tela/menubar/menubar-item.vue +32 -0
  148. package/components/tela/menubar/menubar-label.vue +14 -0
  149. package/components/tela/menubar/menubar-menu.vue +12 -0
  150. package/components/tela/menubar/menubar-root.vue +30 -0
  151. package/components/tela/menubar/menubar-separator.vue +17 -0
  152. package/components/tela/menubar/menubar-shortcut.vue +14 -0
  153. package/components/tela/menubar/menubar-sub-content.vue +36 -0
  154. package/components/tela/menubar/menubar-sub-trigger.vue +28 -0
  155. package/components/tela/menubar/menubar-sub.vue +20 -0
  156. package/components/tela/menubar/menubar-trigger.vue +27 -0
  157. package/components/tela/menubar/menubar.vue +298 -0
  158. package/components/tela/modal/modal.mdx +145 -0
  159. package/components/tela/modal/modal.vue +242 -0
  160. package/components/tela/multiple-select/multiple-select.mdx +274 -0
  161. package/components/tela/multiple-select/multiple-select.stories.ts +325 -0
  162. package/components/tela/multiple-select/multiple-select.vue +666 -0
  163. package/components/tela/pane.vue +110 -0
  164. package/components/tela/popover/popover-content.vue +48 -0
  165. package/components/tela/popover/popover-trigger.vue +12 -0
  166. package/components/tela/popover/popover.mdx +239 -0
  167. package/components/tela/popover/popover.stories.ts +150 -0
  168. package/components/tela/popover/popover.vue +15 -0
  169. package/components/tela/popover-list/popover-list-nested.vue +104 -0
  170. package/components/tela/popover-list/popover-list.stories.ts +330 -0
  171. package/components/tela/popover-list/popover-list.vue +191 -0
  172. package/components/tela/radio-button.vue +66 -0
  173. package/components/tela/radio-group/radio-group-item.vue +40 -0
  174. package/components/tela/radio-group/radio-group-root.vue +26 -0
  175. package/components/tela/radio-group/radio-group.mdx +78 -0
  176. package/components/tela/radio-group/radio-group.stories.ts +106 -0
  177. package/components/tela/radio-group/radio-group.vue +23 -0
  178. package/components/tela/range-calendar.stories.ts +110 -0
  179. package/components/tela/range-calendar.vue +109 -0
  180. package/components/tela/scroll-area/scroll-area.mdx +183 -0
  181. package/components/tela/scroll-area/scroll-area.vue +30 -0
  182. package/components/tela/scroll-area/scroll-bar.vue +31 -0
  183. package/components/tela/segment-toggle.stories.ts +114 -0
  184. package/components/tela/segment-toggle.vue +66 -0
  185. package/components/tela/select-menu/select-menu-content.vue +106 -0
  186. package/components/tela/select-menu/select-menu-down-button.vue +20 -0
  187. package/components/tela/select-menu/select-menu-group.vue +16 -0
  188. package/components/tela/select-menu/select-menu-item.vue +40 -0
  189. package/components/tela/select-menu/select-menu-root.vue +15 -0
  190. package/components/tela/select-menu/select-menu-trigger.vue +34 -0
  191. package/components/tela/select-menu/select-menu-up-button.vue +20 -0
  192. package/components/tela/select-menu/select-menu-value.vue +12 -0
  193. package/components/tela/select-menu/select-menu.mdx +221 -0
  194. package/components/tela/select-menu/select-menu.stories.ts +91 -0
  195. package/components/tela/select-menu/select-menu.vue +165 -0
  196. package/components/tela/selector/selector.vue +47 -0
  197. package/components/tela/sheet/sheet-close.vue +12 -0
  198. package/components/tela/sheet/sheet-content.vue +57 -0
  199. package/components/tela/sheet/sheet-description.vue +23 -0
  200. package/components/tela/sheet/sheet-footer.vue +18 -0
  201. package/components/tela/sheet/sheet-header.vue +15 -0
  202. package/components/tela/sheet/sheet-root.vue +18 -0
  203. package/components/tela/sheet/sheet-title.vue +23 -0
  204. package/components/tela/sheet/sheet-trigger.vue +12 -0
  205. package/components/tela/sheet/sheet.client.vue +150 -0
  206. package/components/tela/sheet/sheet.mdx +176 -0
  207. package/components/tela/sheet/sheet.stories.ts +201 -0
  208. package/components/tela/sheet/variants.ts +22 -0
  209. package/components/tela/side-sheet/side-sheet.mdx +131 -0
  210. package/components/tela/side-sheet/side-sheet.stories.ts +134 -0
  211. package/components/tela/side-sheet/side-sheet.vue +106 -0
  212. package/components/tela/skeleton/skeleton.mdx +165 -0
  213. package/components/tela/skeleton/skeleton.stories.ts +35 -0
  214. package/components/tela/skeleton/skeleton.vue +45 -0
  215. package/components/tela/skeleton-icon.vue +24 -0
  216. package/components/tela/span.vue +24 -0
  217. package/components/tela/star-button.vue +70 -0
  218. package/components/tela/status/status-lean.vue +30 -0
  219. package/components/tela/status/status.mdx +187 -0
  220. package/components/tela/status/status.stories.ts +160 -0
  221. package/components/tela/status/status.vue +420 -0
  222. package/components/tela/status-bar/status-bar.mdx +178 -0
  223. package/components/tela/status-bar/status-bar.stories.ts +64 -0
  224. package/components/tela/status-bar/status-bar.vue +56 -0
  225. package/components/tela/status-bar/types.ts +5 -0
  226. package/components/tela/switch/switch.mdx +118 -0
  227. package/components/tela/switch/switch.stories.ts +80 -0
  228. package/components/tela/switch/switch.vue +56 -0
  229. package/components/tela/table/table-body.vue +13 -0
  230. package/components/tela/table/table-caption.vue +13 -0
  231. package/components/tela/table/table-cell.vue +20 -0
  232. package/components/tela/table/table-empty.vue +37 -0
  233. package/components/tela/table/table-footer.vue +13 -0
  234. package/components/tela/table/table-head.vue +13 -0
  235. package/components/tela/table/table-header.vue +13 -0
  236. package/components/tela/table/table-row.vue +13 -0
  237. package/components/tela/table/table.mdx +230 -0
  238. package/components/tela/table/table.stories.ts +384 -0
  239. package/components/tela/table/table.vue +15 -0
  240. package/components/tela/tabs/tabs-content.vue +20 -0
  241. package/components/tela/tabs/tabs-indicator.vue +22 -0
  242. package/components/tela/tabs/tabs-list.vue +23 -0
  243. package/components/tela/tabs/tabs-root.vue +15 -0
  244. package/components/tela/tabs/tabs-trigger.vue +27 -0
  245. package/components/tela/tabs/tabs.mdx +138 -0
  246. package/components/tela/tabs/tabs.stories.ts +72 -0
  247. package/components/tela/tabs/tabs.vue +61 -0
  248. package/components/tela/tags/tags-select.mdx +318 -0
  249. package/components/tela/tags/tags-select.stories.ts +47 -0
  250. package/components/tela/tags/tags-select.vue +637 -0
  251. package/components/tela/tags/tags.mdx +151 -0
  252. package/components/tela/tags/tags.stories.ts +118 -0
  253. package/components/tela/tags/tags.vue +112 -0
  254. package/components/tela/textarea/textarea.mdx +102 -0
  255. package/components/tela/textarea/textarea.stories.ts +50 -0
  256. package/components/tela/textarea/textarea.vue +34 -0
  257. package/components/tela/toggle-group.vue +91 -0
  258. package/components/tela/tooltip/tooltip-content.vue +45 -0
  259. package/components/tela/tooltip/tooltip-provider.vue +12 -0
  260. package/components/tela/tooltip/tooltip-root.vue +15 -0
  261. package/components/tela/tooltip/tooltip-trigger.vue +12 -0
  262. package/components/tela/tooltip/tooltip.mdx +196 -0
  263. package/components/tela/tooltip/tooltip.stories.ts +200 -0
  264. package/components/tela/tooltip/tooltip.vue +91 -0
  265. package/components/tela/tooltip-group/tooltip-group-trigger.vue +92 -0
  266. package/components/tela/tooltip-group/tooltip-group.mdx +236 -0
  267. package/components/tela/tooltip-group/tooltip-group.stories.ts +465 -0
  268. package/components/tela/tooltip-group/tooltip-group.vue +35 -0
  269. package/components/tela/transparent-input.vue +151 -0
  270. package/components/tela/variable-icon.vue +28 -0
  271. package/components/tela/variable-input.vue +77 -0
  272. package/components/tela/wide-button/wide-button.vue +40 -0
  273. package/components.json +18 -0
  274. package/composables/status-toast.ts +67 -0
  275. package/css/reset.css +386 -0
  276. package/css/text.css +22 -0
  277. package/lib/doc-generator.ts +903 -0
  278. package/lib/extractors/volar-extract.ts +186 -0
  279. package/lib/type-resolver.ts +402 -0
  280. package/lib/utils.ts +6 -0
  281. package/modules/tela-build-docs/index.ts +139 -0
  282. package/nuxt.config.ts +80 -0
  283. package/package.json +84 -0
  284. package/plugins/test-id.ts +7 -0
  285. package/tsconfig.json +7 -0
  286. package/types/custom-icon.ts +1 -0
  287. package/types/index.ts +2 -0
  288. package/types/status.ts +1 -0
  289. package/unocss.config.ts +89 -0
  290. package/utils/component-utils.ts +30 -0
  291. package/utils/design-tokens.ts +431 -0
  292. package/utils/fold.ts +8 -0
  293. package/utils/select-menu.ts +10 -0
  294. package/utils/status.ts +1 -0
  295. package/utils/without-keys.ts +34 -0
@@ -0,0 +1,170 @@
1
+ /* Sticky positioning */
2
+ .sticky {
3
+ position: sticky !important;
4
+ }
5
+
6
+ /* Main table container */
7
+ .main-table-container {
8
+ overflow: auto;
9
+ position: relative;
10
+ }
11
+
12
+ .main-table-container table {
13
+ width: 100%;
14
+ border-collapse: collapse;
15
+ }
16
+
17
+ /* Scrollbar track styles */
18
+ .main-table-container::-webkit-scrollbar-track {
19
+ border-radius: 10px;
20
+ }
21
+
22
+ .has-index::-webkit-scrollbar-track {
23
+ margin-left: -48px;
24
+ }
25
+
26
+ .has-select::-webkit-scrollbar-track {
27
+ margin-left: -32px;
28
+ }
29
+
30
+ .has-index-and-select::-webkit-scrollbar-track {
31
+ margin-left: -85px;
32
+ background-color: transparent;
33
+ }
34
+
35
+ /* Scrollbar container */
36
+ .main-table-container::-webkit-scrollbar {
37
+ width: 8px;
38
+ height: 16px;
39
+ background-color: white;
40
+ box-shadow: 0 -0.5px 0 0 rgba(225, 227, 228, 1);
41
+ border-radius: 0px 0px 8px 0px;
42
+ }
43
+
44
+ /* Hide scrollbar when needed */
45
+ .main-table-container.hide-scrollbar::-webkit-scrollbar {
46
+ display: none;
47
+ }
48
+
49
+ .main-table-container.hide-scrollbar {
50
+ -ms-overflow-style: none;
51
+ scrollbar-width: none;
52
+ }
53
+
54
+ /* Scrollbar thumb */
55
+ .main-table-container::-webkit-scrollbar-thumb {
56
+ border-radius: 10px;
57
+ height: 6px;
58
+ box-shadow: inset 0px 0px 0px 4px white;
59
+ background: transparent;
60
+ position: relative;
61
+ clip-path: inset(0 0 0 0);
62
+
63
+ background-color: transparent;
64
+ background-image: linear-gradient(to right, #EBECED, #EBECED);
65
+ background-clip: content-box;
66
+ background-origin: border-box;
67
+ background-size: calc(100% - 8px) calc(100% - 8px);
68
+ background-position: center;
69
+ background-repeat: no-repeat;
70
+ }
71
+
72
+ .main-table-container::-webkit-scrollbar-thumb:hover {
73
+ background-image: linear-gradient(to right, #C2C4C6, #C2C4C6);
74
+ }
75
+
76
+ .has-scroll::-webkit-scrollbar-thumb {
77
+ background-color: transparent;
78
+ border: none;
79
+ }
80
+
81
+ /* Vertical scrollbar */
82
+ .main-table-container::-webkit-scrollbar:vertical {
83
+ width: 0px;
84
+ height: 0px;
85
+ }
86
+
87
+ .main-table-container::-webkit-scrollbar-button:vertical {
88
+ width: 0px;
89
+ height: 0px;
90
+ }
91
+
92
+ /* Horizontal scrollbar buttons */
93
+ .main-table-container::-webkit-scrollbar-button:horizontal {
94
+ width: 19px;
95
+ display: block;
96
+ background-color: white;
97
+ }
98
+
99
+ .main-table-container::-webkit-scrollbar-button:horizontal:start {
100
+ display: none;
101
+ }
102
+
103
+ .main-table-container::-webkit-scrollbar-button:horizontal:increment {
104
+ background-color: white;
105
+ background-image: url("data:image/svg+xml,%3Csvg width='6' height='10' viewBox='0 0 6 10' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.64941 5.39795L1.89941 9.14795C1.79374 9.25362 1.65042 9.31299 1.50098 9.31299C1.35153 9.31299 1.20821 9.25362 1.10254 9.14795C0.996866 9.04228 0.9375 8.89895 0.9375 8.74951C0.9375 8.60007 0.996866 8.45675 1.10254 8.35107L4.45457 4.99998L1.10348 1.64795C1.05115 1.59562 1.00965 1.53351 0.981329 1.46514C0.953012 1.39678 0.938437 1.32351 0.938437 1.24951C0.938437 1.17551 0.953012 1.10224 0.981329 1.03388C1.00965 0.965514 1.05115 0.903397 1.10348 0.851073C1.1558 0.79875 1.21792 0.757245 1.28628 0.728927C1.35464 0.70061 1.42792 0.686035 1.50191 0.686035C1.57591 0.686035 1.64918 0.70061 1.71755 0.728927C1.78591 0.757245 1.84803 0.79875 1.90035 0.851073L5.65035 4.60107C5.70273 4.65339 5.74427 4.71554 5.77258 4.78394C5.80089 4.85235 5.81541 4.92567 5.81533 4.99971C5.81524 5.07374 5.80054 5.14703 5.77207 5.21537C5.7436 5.2837 5.70192 5.34575 5.64941 5.39795Z' fill='%23C2C4C6'/%3E%3C/svg%3E");
106
+ pointer-events: none;
107
+ background-repeat: no-repeat;
108
+ background-position: center;
109
+ background-size: 6px 10px;
110
+ border-radius: 0px 0px 8px 0px;
111
+ outline: 0.5px solid #E1E3E4;
112
+ background-color: #FAFAFB;
113
+ }
114
+
115
+ .main-table-container::-webkit-scrollbar-button:horizontal:decrement {
116
+ background-color: white;
117
+ background-image: url("data:image/svg+xml,%3Csvg width='6' height='10' viewBox='0 0 6 10' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.89982 8.35205C5.00549 8.45772 5.06486 8.60104 5.06486 8.75049C5.06486 8.89993 5.00549 9.04325 4.89982 9.14892C4.79415 9.2546 4.65082 9.31396 4.50138 9.31396C4.35194 9.31396 4.20862 9.2546 4.10294 9.14892L0.352943 5.39892C0.300503 5.34667 0.258895 5.28457 0.230505 5.2162C0.202114 5.14782 0.1875 5.07452 0.1875 5.00049C0.1875 4.92645 0.202114 4.85315 0.230505 4.78478C0.258895 4.7164 0.300503 4.65431 0.352943 4.60205L4.10294 0.85205C4.20862 0.746378 4.35194 0.687012 4.50138 0.687012C4.65082 0.687012 4.79415 0.746378 4.89982 0.85205C5.00549 0.957722 5.06486 1.10104 5.06486 1.25049C5.06486 1.39993 5.00549 1.54325 4.89982 1.64892L1.54872 5.00002L4.89982 8.35205Z' fill='%23C2C4C6'/%3E%3C/svg%3E");
118
+ pointer-events: none;
119
+ background-repeat: no-repeat;
120
+ background-position: center;
121
+ background-size: 6px 10px;
122
+ outline: 0.5px solid #E1E3E4;
123
+ background-color: #FAFAFB;
124
+ }
125
+
126
+ /* Active scrollbar buttons */
127
+ .has-scroll::-webkit-scrollbar-button:horizontal:increment {
128
+ background-color: white;
129
+ background-image: url("data:image/svg+xml,%3Csvg width='6' height='10' viewBox='0 0 6 10' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5.64941 5.39795L1.89941 9.14795C1.79374 9.25362 1.65042 9.31299 1.50098 9.31299C1.35153 9.31299 1.20821 9.25362 1.10254 9.14795C0.996866 9.04228 0.9375 8.89895 0.9375 8.74951C0.9375 8.60007 0.996866 8.45675 1.10254 8.35107L4.45457 4.99998L1.10348 1.64795C1.05115 1.59562 1.00965 1.53351 0.981329 1.46514C0.953012 1.39678 0.938437 1.32351 0.938437 1.24951C0.938437 1.17551 0.953012 1.10224 0.981329 1.03388C1.00965 0.965514 1.05115 0.903397 1.10348 0.851073C1.1558 0.79875 1.21792 0.757245 1.28628 0.728927C1.35464 0.70061 1.42792 0.686035 1.50191 0.686035C1.57591 0.686035 1.64918 0.70061 1.71755 0.728927C1.78591 0.757245 1.84803 0.79875 1.90035 0.851073L5.65035 4.60107C5.70273 4.65339 5.74427 4.71554 5.77258 4.78394C5.80089 4.85235 5.81541 4.92567 5.81533 4.99971C5.81524 5.07374 5.80054 5.14703 5.77207 5.21537C5.7436 5.2837 5.70192 5.34575 5.64941 5.39795Z' fill='%234E535A'/%3E%3C/svg%3E");
130
+ pointer-events: auto;
131
+ background-repeat: no-repeat;
132
+ background-position: center;
133
+ background-size: 6px 10px;
134
+ outline: 0.5px solid #E1E3E4;
135
+ }
136
+
137
+ .has-scroll::-webkit-scrollbar-button:horizontal:increment:hover {
138
+ background-color: #F5F6F6;
139
+ cursor: pointer;
140
+ }
141
+
142
+ .has-scroll::-webkit-scrollbar-button:horizontal:decrement {
143
+ background-color: white;
144
+ background-image: url("data:image/svg+xml,%3Csvg width='6' height='10' viewBox='0 0 6 10' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.89982 8.35205C5.00549 8.45772 5.06486 8.60104 5.06486 8.75049C5.06486 8.89993 5.00549 9.04325 4.89982 9.14892C4.79415 9.2546 4.65082 9.31396 4.50138 9.31396C4.35194 9.31396 4.20862 9.2546 4.10294 9.14892L0.352943 5.39892C0.300503 5.34667 0.258895 5.28457 0.230505 5.2162C0.202114 5.14782 0.1875 5.07452 0.1875 5.00049C0.1875 4.92645 0.202114 4.85315 0.230505 4.78478C0.258895 4.7164 0.300503 4.65431 0.352943 4.60205L4.10294 0.85205C4.20862 0.746378 4.35194 0.687012 4.50138 0.687012C4.65082 0.687012 4.79415 0.746378 4.89982 0.85205C5.00549 0.957722 5.06486 1.10104 5.06486 1.25049C5.06486 1.39993 5.00549 1.54325 4.89982 1.64892L1.54872 5.00002L4.89982 8.35205Z' fill='%234E535A'/%3E%3C/svg%3E");
145
+ pointer-events: auto;
146
+ background-repeat: no-repeat;
147
+ background-position: center;
148
+ background-size: 6px 10px;
149
+ outline: 0.5px solid #E1E3E4;
150
+ }
151
+
152
+ .has-scroll::-webkit-scrollbar-button:horizontal:decrement:hover {
153
+ background-color: #F5F6F6;
154
+ cursor: pointer;
155
+ }
156
+
157
+ /* Shadow effect */
158
+ .shadow {
159
+ box-shadow: -8px 4px 16px 0px rgba(13, 45, 72, 0.02), -12px 16px 80px 0px rgba(13, 45, 72, 0.04);
160
+ backdrop-filter: blur(2px);
161
+ }
162
+
163
+ /* Empty state positioning */
164
+ .empty-state-centered {
165
+ position: absolute;
166
+ left: 50vw;
167
+ top: 50%;
168
+ transform: translate(-72.5%, 25%);
169
+ z-index: 10;
170
+ }
@@ -0,0 +1,63 @@
1
+ export type Column = {
2
+ key?: string
3
+ title: string
4
+ isDefault?: boolean
5
+ icon?: {
6
+ name: string
7
+ size?: string
8
+ style?: string
9
+ }
10
+ color?: string
11
+ style?: string
12
+ class?: string
13
+ }
14
+
15
+ export type Row = {
16
+ id?: string
17
+ index?: number
18
+ status: string
19
+ name: string
20
+ errorMessage?: string
21
+ data: Record<string, unknown>
22
+ isLoading?: boolean
23
+ isNew?: boolean
24
+ icons?: {
25
+ key: string
26
+ type?: string
27
+ name: string
28
+ size?: string
29
+ style?: string
30
+ }[]
31
+ color?: string
32
+ style?: string
33
+ }
34
+
35
+ export const HoverMechanismTypes = {
36
+ Row: 'row',
37
+ Cell: 'cell',
38
+ } as const
39
+ export type HoverMechanism = (typeof HoverMechanismTypes)[keyof typeof HoverMechanismTypes]
40
+
41
+ export type ComplexTableType = {
42
+ columns: Column[]
43
+ rows: Row[]
44
+ rowTitlePath: string
45
+ rowIndexPath: string
46
+ allowSelect?: boolean
47
+ allowRowIndex?: boolean
48
+ loading?: boolean
49
+ maxHeight?: number
50
+ hoverMechanism?: HoverMechanism
51
+ disableRowClick?: (row: Row) => boolean
52
+ selectedRows?: string[]
53
+ columnsClass?: string
54
+ rowClass?: (row: Row) => string
55
+ rowIndexClass?: string
56
+ headerClass?: string
57
+ hideScrollbar?: boolean
58
+ hideError?: boolean
59
+ useVirtualization?: boolean
60
+ virtualizedOverscan?: number
61
+ virtualizedRowHeight?: number
62
+ virtualizedInitialBatchSize?: number
63
+ }
@@ -0,0 +1,35 @@
1
+ import type { Column } from './types'
2
+
3
+ export function readRowPath(row: Record<string, unknown>, path: string) {
4
+ const paths = path.split('.')
5
+ let value = row as any
6
+ for (const piece of paths) {
7
+ if (value && typeof value === 'object') {
8
+ value = value[piece]
9
+ }
10
+ else {
11
+ return ''
12
+ }
13
+ }
14
+ return value
15
+ }
16
+
17
+ export function getRowTitle(row: Record<string, unknown>, rowTitlePath: string) {
18
+ return readRowPath(row, rowTitlePath)
19
+ }
20
+
21
+ export function hasContent(row: Record<string, unknown>, column: Column) {
22
+ if (typeof row.data !== 'object') {
23
+ return false
24
+ }
25
+ const data = row.data as Record<string, unknown>
26
+ return data[column.title] !== undefined
27
+ }
28
+
29
+ export function hasError(row: Record<string, unknown>) {
30
+ return row.status === 'failed'
31
+ }
32
+
33
+ export function isLoading(row: Record<string, unknown>, loading: boolean) {
34
+ return row.status === 'loading' || row.isLoading || loading
35
+ }
@@ -0,0 +1,137 @@
1
+ <script setup lang="ts">
2
+ import type { ButtonProps as TelaButtonProps } from '../button/button.vue'
3
+
4
+ type ButtonState = 'normal' | 'confirming' | 'success' | 'error' | 'loading'
5
+
6
+ export type ButtonProps = {
7
+ size?: TelaButtonProps['size']
8
+ variant?: TelaButtonProps['variant']
9
+ icon?: string
10
+ loading?: boolean
11
+ leading?: boolean
12
+ disabled?: boolean
13
+ to?: string
14
+ target?: '_blank' | null
15
+ confirmMessage?: string
16
+ successMessage?: string
17
+ errorMessage?: string
18
+ }
19
+
20
+ const props = defineProps<ButtonProps>()
21
+ const emit = defineEmits<{
22
+ (e: 'confirm'): void
23
+ (e: 'success'): void
24
+ (e: 'error'): void
25
+ }>()
26
+
27
+ const state = ref<ButtonState>('normal')
28
+ const timeoutId = ref<ReturnType<typeof setTimeout>>()
29
+
30
+ const buttonProps = computed(() => ({
31
+ size: props.size,
32
+ variant: (state.value === 'success' && 'success')
33
+ || (state.value === 'error' && 'danger')
34
+ || props.variant,
35
+ icon: props.icon,
36
+ loading: state.value === 'loading',
37
+ leading: props.leading,
38
+ disabled: props.disabled || state.value === 'loading',
39
+ to: props.to,
40
+ target: props.target,
41
+ }))
42
+
43
+ async function onClick() {
44
+ if (state.value === 'normal') {
45
+ state.value = 'confirming'
46
+
47
+ // Reset to normal after 3s if no action taken
48
+ timeoutId.value = setTimeout(() => {
49
+ if (state.value === 'confirming')
50
+ state.value = 'normal'
51
+ }, 10000)
52
+ }
53
+ }
54
+
55
+ async function onConfirm() {
56
+ clearTimeout(timeoutId.value)
57
+ emit('confirm')
58
+ state.value = 'loading'
59
+
60
+ try {
61
+ state.value = 'success'
62
+ emit('success')
63
+ setTimeout(() => {
64
+ state.value = 'normal'
65
+ }, 2000)
66
+ }
67
+ catch {
68
+ state.value = 'error'
69
+ emit('error')
70
+
71
+ setTimeout(() => {
72
+ state.value = 'normal'
73
+ }, 2000)
74
+ }
75
+ }
76
+
77
+ function onCancel() {
78
+ clearTimeout(timeoutId.value)
79
+ state.value = 'normal'
80
+ }
81
+ </script>
82
+
83
+ <template>
84
+ <TelaButton
85
+ v-bind="{ ...buttonProps, icon: undefined }"
86
+ class="transition-all duration-200 ease-in-out"
87
+ @click="onClick"
88
+ >
89
+ <TelaIconSpinner v-if="state === 'loading'" animate-spin />
90
+ <template v-else-if="state === 'confirming'">
91
+ {{ props.confirmMessage }}
92
+ <button
93
+ class="hover:text-positive"
94
+ @click.stop="onConfirm"
95
+ >
96
+ <div i-ph-check-bold text-14px />
97
+ </button>
98
+ <button
99
+ class="hover:text-red-500"
100
+ @click.stop="onCancel"
101
+ >
102
+ <div i-ph-x-bold text-14px />
103
+ </button>
104
+ </template>
105
+
106
+ <template v-else-if="state === 'success'">
107
+ <div i-ph-check-bold text-14px />
108
+ {{ props.successMessage }}
109
+ </template>
110
+
111
+ <template v-else-if="state === 'error'">
112
+ <div i-ph-x-bold text-14px />
113
+ {{ props.errorMessage }}
114
+ </template>
115
+
116
+ <template v-else>
117
+ <slot v-if="$slots.leading" name="leading" />
118
+ <div v-else-if="icon && leading" :class="icon" text-10px />
119
+ <slot />
120
+ <slot v-if="$slots.trailing" name="trailing" />
121
+ <div v-else-if="icon && !leading" :class="icon" text-10px />
122
+ </template>
123
+ </TelaButton>
124
+ </template>
125
+
126
+ <style scoped>
127
+ .grow-enter-active,
128
+ .grow-leave-active {
129
+ transition: all 1s ease-in-out;
130
+ }
131
+
132
+ .grow-enter-from,
133
+ .grow-leave-to {
134
+ opacity: 0;
135
+ transform: scale(0.9);
136
+ }
137
+ </style>
@@ -0,0 +1,72 @@
1
+ <script lang="ts" setup>
2
+ import { DialogClose } from 'radix-vue'
3
+ import TelaModal from '../modal/modal.vue'
4
+ import TelaButton from '../button/button.vue'
5
+
6
+ const props = defineProps<{
7
+ title: string
8
+ compact?: boolean
9
+ variant?: 'primary' | 'danger'
10
+ confirmButtonText?: string
11
+ cancelButtonText?: string
12
+ loading?: boolean
13
+ }>()
14
+
15
+ const emit = defineEmits<{
16
+ (e: 'confirm'): void
17
+ (e: 'cancel'): void
18
+ }>()
19
+
20
+ const open = defineModel<boolean>('open')
21
+
22
+ function handleCloseClick() {
23
+ emit('cancel')
24
+ open.value = false
25
+ }
26
+
27
+ const confirmButtonVariant = computed(() => {
28
+ return props.variant === 'danger' ? 'danger' : 'primary'
29
+ })
30
+ </script>
31
+
32
+ <template>
33
+ <TelaModal
34
+ v-model:model-value="open"
35
+ :compact="props.compact ?? true"
36
+ hide-dividers
37
+ @close="emit('cancel')"
38
+ >
39
+ <template #actions>
40
+ <DialogClose as-child>
41
+ <TelaIconButton
42
+ absolute
43
+ top-8px
44
+ right-8px
45
+ icon="i-ph-x"
46
+ size="md"
47
+ color="secondary"
48
+ outline-none
49
+ @click="handleCloseClick"
50
+ />
51
+ </DialogClose>
52
+ </template>
53
+ <div flex="~ col" w-400px>
54
+ <h6 body-20-semibold text-gray-900>
55
+ {{ props.title }}
56
+ </h6>
57
+ <div body-16-regular text-gray-700 mt-8px>
58
+ <slot />
59
+ </div>
60
+ </div>
61
+ <template #footer>
62
+ <div flex="~" gap-8px w-full justify-between>
63
+ <TelaButton :disabled="props.loading" size="lg" variant="secondary" @click="emit('cancel')">
64
+ {{ props.cancelButtonText ?? 'Cancel' }}
65
+ </TelaButton>
66
+ <TelaButton :loading="props.loading" size="lg" :variant="confirmButtonVariant" @click="emit('confirm')">
67
+ {{ props.confirmButtonText ?? 'Confirm' }}
68
+ </TelaButton>
69
+ </div>
70
+ </template>
71
+ </TelaModal>
72
+ </template>
@@ -0,0 +1,86 @@
1
+ <script setup lang="ts">
2
+ import { UseClipboard } from '@vueuse/components'
3
+
4
+ const props = defineProps({
5
+ content: {
6
+ type: String,
7
+ required: true,
8
+ },
9
+ size: {
10
+ type: String as () => 'sm' | 'md' | 'lg',
11
+ default: 'md',
12
+ required: false,
13
+ },
14
+ })
15
+
16
+ const statusToast = useStatusToast()
17
+
18
+ const showConfirmationIcon = ref(false)
19
+
20
+ const sizeStyles = computed(() => ({
21
+ sm: 'h-20px w-20px',
22
+ md: 'h-24px w-24px',
23
+ lg: 'h-32px w-32px',
24
+ } as Record<typeof props.size, string>)[props.size])
25
+
26
+ function onClick(copyFn: (content: string) => void) {
27
+ showConfirmationIcon.value = true
28
+
29
+ copyFn(props.content)
30
+
31
+ statusToast.update({
32
+ text: 'Copied to clipboard',
33
+ icon: 'i-ph-check',
34
+ })
35
+
36
+ setTimeout(() => {
37
+ showConfirmationIcon.value = false
38
+ }, 1500)
39
+ }
40
+ </script>
41
+
42
+ <template>
43
+ <div>
44
+ <UseClipboard v-slot="{ copy }">
45
+ <slot :copy="() => onClick(copy)">
46
+ <button
47
+ hover:bg="#EBEFF199"
48
+ relative
49
+ rounded-full
50
+ flex="~ " justify-center
51
+ class="group"
52
+ :class="[
53
+ showConfirmationIcon && 'bg-#D0F9ED !hover:bg-#D0F9ED',
54
+ sizeStyles,
55
+ ]"
56
+ @click="onClick(copy)"
57
+ >
58
+ <Transition name="appear">
59
+ <TelaIcon
60
+ v-if="!showConfirmationIcon"
61
+ absolute
62
+ class="top-1/2 translate-y--1/2"
63
+ :size="size"
64
+ name="i-ph-copy"
65
+ color="#031E22"
66
+ op-80
67
+ group-hover:op-100
68
+ />
69
+ </Transition>
70
+ <Transition name="appear">
71
+ <TelaIcon
72
+ v-if="showConfirmationIcon"
73
+ absolute
74
+ class="top-1/2 translate-y--1/2"
75
+ :size="size"
76
+ name="i-ph-check"
77
+ color="#327558"
78
+ op-80
79
+ group-hover:op-100
80
+ />
81
+ </Transition>
82
+ </button>
83
+ </slot>
84
+ </UseClipboard>
85
+ </div>
86
+ </template>