@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,465 @@
1
+ import type { Meta, StoryObj } from '@storybook-vue/vue3'
2
+
3
+ import TelaTooltipGroup from './tooltip-group.vue'
4
+ import TelaTooltipGroupTrigger from './tooltip-group-trigger.vue'
5
+ import TelaIconButton from '../icon-button/icon-button.vue'
6
+
7
+ const meta: Meta<typeof TelaTooltipGroup> = {
8
+ title: 'Core/TooltipGroup',
9
+ component: TelaTooltipGroup,
10
+ parameters: {
11
+ layout: 'centered',
12
+ docs: {
13
+ description: {
14
+ component: 'A tooltip group component that manages tooltips for multiple child elements. Provides coordinated tooltip behavior for groups of interactive elements like button groups or toolbar items. Each child element wrapped in TooltipGroupTrigger will show its tooltip when hovered.',
15
+ },
16
+ },
17
+ },
18
+ argTypes: {
19
+ delayDuration: {
20
+ control: 'number',
21
+ description: 'Delay in milliseconds before showing tooltips after hover. Applies to all tooltips in the group.',
22
+ },
23
+ disabled: {
24
+ control: 'boolean',
25
+ description: 'Disable all tooltips in the group, preventing them from showing.',
26
+ },
27
+ skipDelayDuration: {
28
+ control: 'number',
29
+ description: 'Duration in milliseconds to skip the delay when moving between tooltips in the group. Allows quick tooltip transitions when moving between adjacent elements.',
30
+ },
31
+ },
32
+ }
33
+
34
+ export default meta
35
+
36
+ type Story = StoryObj<typeof meta>
37
+
38
+ export const Default: Story = {
39
+ render: args => ({
40
+ components: { TelaTooltipGroup, TelaTooltipGroupTrigger, TelaIconButton },
41
+ setup() {
42
+ return { args }
43
+ },
44
+ template: `
45
+ <div class="flex items-center rounded-8px border-0.5px w-fit border-gray-300 bg-white p-0.5 gap-2px">
46
+ <TelaTooltipGroup v-bind="args">
47
+ <div class="flex items-center gap-2px">
48
+ <TelaTooltipGroupTrigger content="Bold">
49
+ <TelaIconButton
50
+ key="bold-button"
51
+ color="secondary"
52
+ size="sm"
53
+ button-class="rounded-6px! !p-0.35em"
54
+ icon="i-ph-text-b"
55
+ />
56
+ </TelaTooltipGroupTrigger>
57
+ <TelaTooltipGroupTrigger content="Italic">
58
+ <TelaIconButton
59
+ key="italic-button"
60
+ color="secondary"
61
+ size="sm"
62
+ rounded-6px
63
+ button-class="rounded-6px! !p-0.35em"
64
+ icon="i-ph-text-italic"
65
+ />
66
+ </TelaTooltipGroupTrigger>
67
+ <TelaTooltipGroupTrigger content="Heading 1">
68
+ <TelaIconButton
69
+ key="heading-button"
70
+ color="secondary"
71
+ size="sm"
72
+ rounded-6px
73
+ icon="i-ph-text-h-one"
74
+ button-class="rounded-6px! !p-0.35em"
75
+ />
76
+ </TelaTooltipGroupTrigger>
77
+ <TelaTooltipGroupTrigger content="Heading 2">
78
+ <TelaIconButton
79
+ key="heading-2-button"
80
+ color="secondary"
81
+ size="sm"
82
+ rounded-6px
83
+ icon="i-ph-text-h-two"
84
+ button-class="rounded-6px! !p-0.35em"
85
+ />
86
+ </TelaTooltipGroupTrigger>
87
+ <TelaTooltipGroupTrigger content="Heading 3">
88
+ <TelaIconButton
89
+ key="heading-3-button"
90
+ color="secondary"
91
+ size="sm"
92
+ rounded-6px
93
+ icon="i-ph-text-h-three"
94
+ button-class="rounded-6px! !p-0.35em"
95
+ />
96
+ </TelaTooltipGroupTrigger>
97
+ <TelaTooltipGroupTrigger content="Bullet List">
98
+ <TelaIconButton
99
+ key="bullet-list-button"
100
+ color="secondary"
101
+ size="sm"
102
+ rounded-6px
103
+ icon="i-ph-list-bullets"
104
+ button-class="rounded-6px! !p-0.35em"
105
+ />
106
+ </TelaTooltipGroupTrigger>
107
+ <TelaTooltipGroupTrigger content="Ordered List">
108
+ <TelaIconButton
109
+ key="ordered-list-button"
110
+ color="secondary"
111
+ size="sm"
112
+ rounded-6px
113
+ icon="i-ph-list-numbers"
114
+ button-class="rounded-6px! !p-0.35em"
115
+ />
116
+ </TelaTooltipGroupTrigger>
117
+
118
+ <!-- Indent buttons -->
119
+ <TelaTooltipGroupTrigger content="Indent">
120
+ <TelaIconButton
121
+ key="indent-button"
122
+ color="secondary"
123
+ size="sm"
124
+ rounded-6px
125
+ icon-class="text-gray-900"
126
+ icon="i-ph-text-indent"
127
+ button-class="rounded-6px! !p-0.35em"
128
+ />
129
+ </TelaTooltipGroupTrigger>
130
+ <TelaTooltipGroupTrigger content="Outdent">
131
+ <TelaIconButton
132
+ key="outdent-button"
133
+ color="secondary"
134
+ size="sm"
135
+ rounded-6px
136
+ icon-class="text-gray-900"
137
+ icon="i-ph-text-outdent"
138
+ button-class="rounded-6px! !p-0.35em"
139
+ />
140
+ </TelaTooltipGroupTrigger>
141
+ </div>
142
+ </TelaTooltipGroup>
143
+ </div>`,
144
+ }),
145
+ }
146
+
147
+ export const Simple: Story = {
148
+ render: args => ({
149
+ components: { TelaTooltipGroup, TelaTooltipGroupTrigger, TelaIconButton },
150
+ setup() {
151
+ return { args }
152
+ },
153
+ template: `
154
+ <div class="flex items-center rounded-8px border-0.5px w-fit border-gray-300 bg-white p-0.5 gap-2px">
155
+ <TelaTooltipGroup v-bind="args">
156
+ <div class="flex items-center gap-2px">
157
+ <TelaTooltipGroupTrigger content="Cut">
158
+ <TelaIconButton
159
+ color="secondary"
160
+ size="sm"
161
+ button-class="rounded-6px! !p-0.35em"
162
+ icon="i-ph-scissors"
163
+ />
164
+ </TelaTooltipGroupTrigger>
165
+ <TelaTooltipGroupTrigger content="Copy">
166
+ <TelaIconButton
167
+ color="secondary"
168
+ size="sm"
169
+ button-class="rounded-6px! !p-0.35em"
170
+ icon="i-ph-copy"
171
+ />
172
+ </TelaTooltipGroupTrigger>
173
+ <TelaTooltipGroupTrigger content="Paste">
174
+ <TelaIconButton
175
+ color="secondary"
176
+ size="sm"
177
+ button-class="rounded-6px! !p-0.35em"
178
+ icon="i-ph-clipboard"
179
+ />
180
+ </TelaTooltipGroupTrigger>
181
+ </div>
182
+ </TelaTooltipGroup>
183
+ </div>`,
184
+ }),
185
+ }
186
+
187
+ export const WithDelay: Story = {
188
+ args: {
189
+ delayDuration: 500,
190
+ },
191
+ render: args => ({
192
+ components: { TelaTooltipGroup, TelaTooltipGroupTrigger, TelaIconButton },
193
+ setup() {
194
+ return { args }
195
+ },
196
+ template: `
197
+ <div class="flex items-center rounded-8px border-0.5px w-fit border-gray-300 bg-white p-0.5 gap-2px">
198
+ <TelaTooltipGroup v-bind="args">
199
+ <div class="flex items-center gap-2px">
200
+ <TelaTooltipGroupTrigger content="Save (500ms delay)">
201
+ <TelaIconButton
202
+ color="secondary"
203
+ size="sm"
204
+ button-class="rounded-6px! !p-0.35em"
205
+ icon="i-ph-floppy-disk"
206
+ />
207
+ </TelaTooltipGroupTrigger>
208
+ <TelaTooltipGroupTrigger content="Undo (500ms delay)">
209
+ <TelaIconButton
210
+ color="secondary"
211
+ size="sm"
212
+ button-class="rounded-6px! !p-0.35em"
213
+ icon="i-ph-arrow-counter-clockwise"
214
+ />
215
+ </TelaTooltipGroupTrigger>
216
+ <TelaTooltipGroupTrigger content="Redo (500ms delay)">
217
+ <TelaIconButton
218
+ color="secondary"
219
+ size="sm"
220
+ button-class="rounded-6px! !p-0.35em"
221
+ icon="i-ph-arrow-clockwise"
222
+ />
223
+ </TelaTooltipGroupTrigger>
224
+ </div>
225
+ </TelaTooltipGroup>
226
+ </div>`,
227
+ }),
228
+ }
229
+
230
+ export const WithSkipDelay: Story = {
231
+ args: {
232
+ delayDuration: 500,
233
+ skipDelayDuration: 300,
234
+ },
235
+ render: args => ({
236
+ components: { TelaTooltipGroup, TelaTooltipGroupTrigger, TelaIconButton },
237
+ setup() {
238
+ return { args }
239
+ },
240
+ template: `
241
+ <div class="flex items-center rounded-8px border-0.5px w-fit border-gray-300 bg-white p-0.5 gap-2px">
242
+ <TelaTooltipGroup v-bind="args">
243
+ <div class="flex items-center gap-2px">
244
+ <TelaTooltipGroupTrigger content="Quick transition (skip delay)">
245
+ <TelaIconButton
246
+ color="secondary"
247
+ size="sm"
248
+ button-class="rounded-6px! !p-0.35em"
249
+ icon="i-ph-play"
250
+ />
251
+ </TelaTooltipGroupTrigger>
252
+ <TelaTooltipGroupTrigger content="Hover quickly between buttons">
253
+ <TelaIconButton
254
+ color="secondary"
255
+ size="sm"
256
+ button-class="rounded-6px! !p-0.35em"
257
+ icon="i-ph-pause"
258
+ />
259
+ </TelaTooltipGroupTrigger>
260
+ <TelaTooltipGroupTrigger content="To see skip delay">
261
+ <TelaIconButton
262
+ color="secondary"
263
+ size="sm"
264
+ button-class="rounded-6px! !p-0.35em"
265
+ icon="i-ph-stop"
266
+ />
267
+ </TelaTooltipGroupTrigger>
268
+ </div>
269
+ </TelaTooltipGroup>
270
+ </div>`,
271
+ }),
272
+ }
273
+
274
+ export const MultilineTooltips: Story = {
275
+ render: args => ({
276
+ components: { TelaTooltipGroup, TelaTooltipGroupTrigger, TelaIconButton },
277
+ setup() {
278
+ return { args }
279
+ },
280
+ template: `
281
+ <div class="flex items-center rounded-8px border-0.5px w-fit border-gray-300 bg-white p-0.5 gap-2px">
282
+ <TelaTooltipGroup v-bind="args">
283
+ <div class="flex items-center gap-2px">
284
+ <TelaTooltipGroupTrigger
285
+ variant="multiline"
286
+ title="Export Document"
287
+ description="Save your document in PDF format"
288
+ >
289
+ <TelaIconButton
290
+ color="secondary"
291
+ size="sm"
292
+ button-class="rounded-6px! !p-0.35em"
293
+ icon="i-ph-file-pdf"
294
+ />
295
+ </TelaTooltipGroupTrigger>
296
+ <TelaTooltipGroupTrigger
297
+ variant="multiline"
298
+ title="Share Document"
299
+ description="Collaborate with your team members"
300
+ >
301
+ <TelaIconButton
302
+ color="secondary"
303
+ size="sm"
304
+ button-class="rounded-6px! !p-0.35em"
305
+ icon="i-ph-share-network"
306
+ />
307
+ </TelaTooltipGroupTrigger>
308
+ <TelaTooltipGroupTrigger
309
+ variant="multiline"
310
+ title="Print Document"
311
+ description="Print or save as PDF for printing"
312
+ >
313
+ <TelaIconButton
314
+ color="secondary"
315
+ size="sm"
316
+ button-class="rounded-6px! !p-0.35em"
317
+ icon="i-ph-printer"
318
+ />
319
+ </TelaTooltipGroupTrigger>
320
+ </div>
321
+ </TelaTooltipGroup>
322
+ </div>`,
323
+ }),
324
+ }
325
+
326
+ export const WithPositioning: Story = {
327
+ render: args => ({
328
+ components: { TelaTooltipGroup, TelaTooltipGroupTrigger, TelaIconButton },
329
+ setup() {
330
+ return { args }
331
+ },
332
+ template: `
333
+ <div class="flex items-center rounded-8px border-0.5px w-fit border-gray-300 bg-white p-0.5 gap-2px">
334
+ <TelaTooltipGroup v-bind="args">
335
+ <div class="flex items-center gap-2px">
336
+ <TelaTooltipGroupTrigger content="Top" side="top">
337
+ <TelaIconButton
338
+ color="secondary"
339
+ size="sm"
340
+ button-class="rounded-6px! !p-0.35em"
341
+ icon="i-ph-arrow-up"
342
+ />
343
+ </TelaTooltipGroupTrigger>
344
+ <TelaTooltipGroupTrigger content="Right" side="right">
345
+ <TelaIconButton
346
+ color="secondary"
347
+ size="sm"
348
+ button-class="rounded-6px! !p-0.35em"
349
+ icon="i-ph-arrow-right"
350
+ />
351
+ </TelaTooltipGroupTrigger>
352
+ <TelaTooltipGroupTrigger content="Bottom" side="bottom">
353
+ <TelaIconButton
354
+ color="secondary"
355
+ size="sm"
356
+ button-class="rounded-6px! !p-0.35em"
357
+ icon="i-ph-arrow-down"
358
+ />
359
+ </TelaTooltipGroupTrigger>
360
+ <TelaTooltipGroupTrigger content="Left" side="left">
361
+ <TelaIconButton
362
+ color="secondary"
363
+ size="sm"
364
+ button-class="rounded-6px! !p-0.35em"
365
+ icon="i-ph-arrow-left"
366
+ />
367
+ </TelaTooltipGroupTrigger>
368
+ </div>
369
+ </TelaTooltipGroup>
370
+ </div>`,
371
+ }),
372
+ }
373
+
374
+ export const Disabled: Story = {
375
+ args: {
376
+ disabled: true,
377
+ },
378
+ render: args => ({
379
+ components: { TelaTooltipGroup, TelaTooltipGroupTrigger, TelaIconButton },
380
+ setup() {
381
+ return { args }
382
+ },
383
+ template: `
384
+ <div class="flex items-center rounded-8px border-0.5px w-fit border-gray-300 bg-white p-0.5 gap-2px">
385
+ <TelaTooltipGroup v-bind="args">
386
+ <div class="flex items-center gap-2px">
387
+ <TelaTooltipGroupTrigger content="This tooltip is disabled">
388
+ <TelaIconButton
389
+ color="secondary"
390
+ size="sm"
391
+ button-class="rounded-6px! !p-0.35em"
392
+ icon="i-ph-info"
393
+ />
394
+ </TelaTooltipGroupTrigger>
395
+ <TelaTooltipGroupTrigger content="This tooltip won't show">
396
+ <TelaIconButton
397
+ color="secondary"
398
+ size="sm"
399
+ button-class="rounded-6px! !p-0.35em"
400
+ icon="i-ph-warning"
401
+ />
402
+ </TelaTooltipGroupTrigger>
403
+ </div>
404
+ </TelaTooltipGroup>
405
+ </div>`,
406
+ }),
407
+ }
408
+
409
+ export const WithCustomContent: Story = {
410
+ render: args => ({
411
+ components: { TelaTooltipGroup, TelaTooltipGroupTrigger, TelaIconButton },
412
+ setup() {
413
+ return { args }
414
+ },
415
+ template: `
416
+ <div class="flex items-center rounded-8px border-0.5px w-fit border-gray-300 bg-white p-0.5 gap-2px">
417
+ <TelaTooltipGroup v-bind="args">
418
+ <div class="flex items-center gap-2px">
419
+ <TelaTooltipGroupTrigger>
420
+ <TelaIconButton
421
+ color="secondary"
422
+ size="sm"
423
+ button-class="rounded-6px! !p-0.35em"
424
+ icon="i-ph-star"
425
+ />
426
+ <template #content>
427
+ <div class="flex items-center gap-1">
428
+ <span>⭐</span>
429
+ <span>Custom Star Tooltip</span>
430
+ </div>
431
+ </template>
432
+ </TelaTooltipGroupTrigger>
433
+ <TelaTooltipGroupTrigger>
434
+ <TelaIconButton
435
+ color="secondary"
436
+ size="sm"
437
+ button-class="rounded-6px! !p-0.35em"
438
+ icon="i-ph-heart"
439
+ />
440
+ <template #content>
441
+ <div class="flex items-center gap-1">
442
+ <span>❤️</span>
443
+ <span>Custom Heart Tooltip</span>
444
+ </div>
445
+ </template>
446
+ </TelaTooltipGroupTrigger>
447
+ <TelaTooltipGroupTrigger>
448
+ <TelaIconButton
449
+ color="secondary"
450
+ size="sm"
451
+ button-class="rounded-6px! !p-0.35em"
452
+ icon="i-ph-lightning"
453
+ />
454
+ <template #content>
455
+ <div class="flex items-center gap-1">
456
+ <span>⚡</span>
457
+ <span>Custom Lightning Tooltip</span>
458
+ </div>
459
+ </template>
460
+ </TelaTooltipGroupTrigger>
461
+ </div>
462
+ </TelaTooltipGroup>
463
+ </div>`,
464
+ }),
465
+ }
@@ -0,0 +1,35 @@
1
+ <script setup lang="ts">
2
+ import TelaTooltipProvider from '../tooltip/tooltip-provider.vue'
3
+
4
+ export type TooltipProps = {
5
+ content?: string
6
+ align?: 'start' | 'center' | 'end'
7
+ side?: 'top' | 'right' | 'bottom' | 'left'
8
+ contentClass?: string
9
+ disabled?: boolean
10
+ delayDuration?: number
11
+ open?: boolean
12
+ alignOffset?: number
13
+ arrowOffset?: number
14
+ variant?: 'single' | 'multiline'
15
+ title?: string
16
+ description?: string
17
+ skipDelayDuration?: number
18
+ }
19
+
20
+ withDefaults(defineProps<TooltipProps>(), {
21
+ open: undefined,
22
+ variant: 'single',
23
+ skipDelayDuration: undefined,
24
+ })
25
+
26
+ defineEmits<{
27
+ (e: 'clickContent', event: Event): void
28
+ }>()
29
+ </script>
30
+
31
+ <template>
32
+ <TelaTooltipProvider :disabled="disabled" :delay-duration="delayDuration" :skip-delay-duration="skipDelayDuration">
33
+ <slot />
34
+ </TelaTooltipProvider>
35
+ </template>
@@ -0,0 +1,151 @@
1
+ <script setup lang="ts">
2
+ const props = defineProps<{
3
+ modelValue: string
4
+ placeholder: string
5
+ allowEmpty?: boolean
6
+ disabled?: boolean
7
+ displayIcon?: boolean
8
+ validateOnBlur?: boolean
9
+ defaultValue?: string
10
+ error?: string | false | null
11
+ disableDefaultStyling?: boolean
12
+ containerClass?: string
13
+ inputClass?: string
14
+ editIconSize?: 'xs' | 'sm'
15
+ editIconClass?: string
16
+ }>()
17
+
18
+ const emit = defineEmits(['update:modelValue', 'blur', 'focus'])
19
+
20
+ const inputRef = ref<HTMLInputElement | null>(null)
21
+ const containerRef = ref<HTMLElement | null>(null)
22
+ const initialValue = ref(props.modelValue)
23
+
24
+ const isEditing = ref(!props.displayIcon)
25
+
26
+ function onFocus() {
27
+ if (props.modelValue === props.defaultValue) {
28
+ emit('update:modelValue', '')
29
+ nextTick(() => {
30
+ inputRef.value?.focus()
31
+ })
32
+ }
33
+ else {
34
+ inputRef.value?.focus()
35
+ }
36
+ emit('focus')
37
+ }
38
+
39
+ function onInput(event: Event) {
40
+ const target = event.target as HTMLInputElement
41
+ const value = target.value ? target.value : (props.allowEmpty ? '' : initialValue.value)
42
+ emit('update:modelValue', value)
43
+ target.value = value
44
+
45
+ if (props.displayIcon && isEditing.value) {
46
+ isEditing.value = false
47
+ return
48
+ }
49
+
50
+ if (!target.value && !props.allowEmpty)
51
+ target.value = initialValue.value
52
+
53
+ target.blur()
54
+ isEditing.value = false
55
+ }
56
+
57
+ function onStartEditing() {
58
+ isEditing.value = true
59
+ nextTick(() => {
60
+ onFocus()
61
+ })
62
+ }
63
+
64
+ function onBlur(event: Event) {
65
+ if (props.validateOnBlur) {
66
+ onInput(event)
67
+ }
68
+ else {
69
+ isEditing.value = false
70
+ }
71
+ // Emit the blur event to parent
72
+ emit('blur', event)
73
+ }
74
+
75
+ function handleClickOutside(event: Event) {
76
+ if (containerRef.value && !containerRef.value.contains(event.target as Node)) {
77
+ if (isEditing.value) {
78
+ const blurEvent = new FocusEvent('blur', { bubbles: true })
79
+ onBlur(blurEvent)
80
+ }
81
+ }
82
+ }
83
+
84
+ onMounted(() => {
85
+ document.addEventListener('mousedown', handleClickOutside)
86
+ })
87
+
88
+ onUnmounted(() => {
89
+ document.removeEventListener('mousedown', handleClickOutside)
90
+ })
91
+ </script>
92
+
93
+ <template>
94
+ <div
95
+ ref="containerRef"
96
+ flex relative
97
+ :class="cn('group', containerClass, { 'font-580 text-18px': !disableDefaultStyling })"
98
+ outline-none
99
+ text="textcolor"
100
+ items-center
101
+ cursor-text
102
+ @click="onStartEditing"
103
+ >
104
+ <input
105
+ ref="inputRef"
106
+ :key="modelValue"
107
+ v-autowidth="{
108
+ maxWidth: '420px',
109
+ }"
110
+ p-0
111
+ transition
112
+ :value="modelValue"
113
+ :placeholder="placeholder"
114
+ :disabled="disabled || (displayIcon && !isEditing)"
115
+ truncate
116
+ bg-transparent
117
+ :class="[
118
+ { 'font-580 text-18px': !disableDefaultStyling },
119
+ disabled ? 'opacity-50 cursor-not-allowed' : '',
120
+ inputClass,
121
+ ]"
122
+ @keyup.enter="onInput"
123
+ @keyup.escape="onInput"
124
+ @blur="onBlur"
125
+ @change="onInput"
126
+ >
127
+ <div v-if="displayIcon" :class="editIconClass">
128
+ <TelaIconButton
129
+ v-if="!isEditing"
130
+ :size="editIconSize || 'xs'"
131
+ icon="i-ph-pencil-simple"
132
+ color="secondary"
133
+ icon-class="text-gray-400"
134
+ @click="onStartEditing"
135
+ />
136
+ </div>
137
+ <div
138
+ v-if="isEditing"
139
+ absolute
140
+ class="bg-gray-300"
141
+ op-0
142
+ left-0 right-0 bottom--2px h-1px
143
+ group-focus-within:op-100
144
+ transition
145
+ />
146
+ <div v-if="error" top-2.5rem absolute font-medium text-red-900 text-8px bottom--12px flex items-center gap-3px whitespace-nowrap>
147
+ <div i-ph-info />
148
+ <span>{{ error }}</span>
149
+ </div>
150
+ </div>
151
+ </template>
@@ -0,0 +1,28 @@
1
+ <script setup lang="ts">
2
+ withDefaults(defineProps<{
3
+ iconBg?: string
4
+ iconFill?: string
5
+ }>(), {
6
+ iconBg: '#FF9E45',
7
+ iconFill: 'white',
8
+ })
9
+ </script>
10
+
11
+ <template>
12
+ <div>
13
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
14
+ <rect
15
+ width="16" height="16" rx="5"
16
+ :fill="iconBg"
17
+ />
18
+ <path
19
+ d="M4.00626 8.07671C4.88845 8.16986 5.35421 8.61918 5.35421 9.4137V10.6521C5.35421 11.463 5.63366 11.6055 6.35695 11.6055H7.00078V12.8H6.21996C4.71859 12.8 4.05558 12.1808 4.05558 10.8V9.80822C4.05558 8.97534 3.72133 8.67945 2.80078 8.67397V7.32603C3.72133 7.32055 4.05558 7.01918 4.05558 6.1863V5.18356C4.05558 3.8137 4.71859 3.2 6.21996 3.2L7.00078 3.2V4.4H6.35695C5.63366 4.4 5.35421 4.53699 5.35421 5.34795V6.5863C5.35421 7.37534 4.88845 7.82466 4.00626 7.91781V8.07671Z"
20
+ :fill="iconFill"
21
+ />
22
+ <path
23
+ d="M12.0007 7.92329C11.113 7.83014 10.6472 7.38082 10.6472 6.5863V5.34795C10.6472 4.53699 10.3678 4.4 9.64997 4.4H9.00066V3.2H9.78148C11.2883 3.2 11.9459 3.81918 11.9459 5.2V6.19178C11.9459 7.02466 12.2801 7.32055 13.2007 7.32603V8.67397C12.2856 8.67945 11.9459 8.97534 11.9459 9.8137V10.811C11.9459 12.1863 11.2883 12.8 9.78148 12.8H9.00066V11.6H9.64997C10.3733 11.6 10.6472 11.463 10.6472 10.6521V9.4137C10.6472 8.62466 11.113 8.17534 12.0007 8.08219V7.92329Z"
24
+ :fill="iconFill"
25
+ />
26
+ </svg>
27
+ </div>
28
+ </template>