@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,325 @@
1
+ import type { Meta, StoryObj } from '@storybook/vue3'
2
+ import { ref, watch } from 'vue'
3
+ import TelaMultipleSelect from './multiple-select.vue'
4
+
5
+ const meta: Meta<typeof TelaMultipleSelect> = {
6
+ title: 'Tela/MultipleSelect',
7
+ component: TelaMultipleSelect,
8
+ parameters: {
9
+ layout: 'centered',
10
+ docs: {
11
+ description: {
12
+ component: 'A multiple select component that allows users to select multiple options from a dropdown list. Supports search functionality, grouping, icons, custom styling, and two display variants (list and preview). Perfect for selecting multiple items with rich option data.',
13
+ },
14
+ },
15
+ },
16
+ args: {
17
+ readOnly: false,
18
+ required: false,
19
+ allowSearch: false,
20
+ searchPlaceholder: 'Search options...',
21
+ variant: 'list',
22
+ previewMaxItems: 3,
23
+ },
24
+ argTypes: {
25
+ modelValue: {
26
+ control: 'object',
27
+ description: 'Array of selected option values (v-model).',
28
+ },
29
+ options: {
30
+ control: 'object',
31
+ description: 'Array of selectable options. Each option should have at least `value` and `label` properties. Supports optional `icon`, `description`, `group`, and `externalIconSrc` properties.',
32
+ },
33
+ placeholder: {
34
+ control: 'text',
35
+ description: 'Placeholder text displayed when no options are selected.',
36
+ },
37
+ readOnly: {
38
+ control: 'boolean',
39
+ description: 'Make the select read-only, preventing user interaction.',
40
+ },
41
+ required: {
42
+ control: 'boolean',
43
+ description: 'Mark the select as required in forms.',
44
+ },
45
+ allowSearch: {
46
+ control: 'boolean',
47
+ description: 'Enable search functionality to filter options by typing.',
48
+ },
49
+ searchPlaceholder: {
50
+ control: 'text',
51
+ description: 'Placeholder text for the search input. Only used when `allowSearch` is true.',
52
+ },
53
+ variant: {
54
+ control: 'radio',
55
+ options: ['list', 'preview'],
56
+ description: 'Display variant. "list" shows selected items as a list, "preview" shows a preview with max items limit.',
57
+ },
58
+ previewMaxItems: {
59
+ control: 'number',
60
+ description: 'Maximum number of items to show in preview variant before showing "+X more".',
61
+ },
62
+ maxSelectedDisplay: {
63
+ control: 'number',
64
+ description: 'Maximum number of selected items to display before showing "+X more" indicator.',
65
+ },
66
+ },
67
+ render: (args) => {
68
+ return {
69
+ components: { TelaMultipleSelect },
70
+ setup() {
71
+ const modelValue = ref(args.modelValue || [])
72
+
73
+ watch(() => args.modelValue, (val) => {
74
+ modelValue.value = val || []
75
+ })
76
+
77
+ return { args, modelValue }
78
+ },
79
+ template: `
80
+ <div style="width: 300px; padding: 20px;">
81
+ <TelaMultipleSelect
82
+ :options="args.options"
83
+ :placeholder="args.placeholder"
84
+ :read-only="args.readOnly"
85
+ :max-selected-display="args.maxSelectedDisplay"
86
+ :required="args.required"
87
+ :allow-search="args.allowSearch"
88
+ :search-placeholder="args.searchPlaceholder"
89
+ :variant="args.variant"
90
+ :preview-max-items="args.previewMaxItems"
91
+ v-model="modelValue"
92
+ />
93
+ <div style="margin-top: 20px; font-family: monospace; font-size: 12px;">
94
+ Selected: {{ modelValue }}
95
+ </div>
96
+ </div>
97
+ `,
98
+ }
99
+ },
100
+ }
101
+
102
+ export default meta
103
+ type Story = StoryObj<typeof TelaMultipleSelect>
104
+
105
+ const defaultOptions = [
106
+ { value: '1', label: 'Durward Reynolds' },
107
+ { value: '2', label: 'Kenton Towne' },
108
+ { value: '3', label: 'Therese Wunsch' },
109
+ { value: '4', label: 'Benedict Kessler' },
110
+ { value: '5', label: 'Katelyn Rohan' },
111
+ ]
112
+
113
+ export const Default: Story = {
114
+ args: {
115
+ options: defaultOptions,
116
+ placeholder: 'Select some options',
117
+ },
118
+ }
119
+
120
+ export const WithInitialValue: Story = {
121
+ args: {
122
+ ...Default.args,
123
+ modelValue: ['2', '4'],
124
+ },
125
+ }
126
+
127
+ const groupedOptions = [
128
+ { value: '1', label: 'Apple', group: 'Fruits' },
129
+ { value: '2', label: 'Banana', group: 'Fruits' },
130
+ { value: '3', label: 'Carrot', group: 'Vegetables' },
131
+ { value: '4', label: 'Broccoli', group: 'Vegetables' },
132
+ { value: '5', label: 'Chicken', group: 'Meat' },
133
+ { value: '6', label: 'Beef', group: 'Meat' },
134
+ ]
135
+
136
+ export const WithGroups: Story = {
137
+ args: {
138
+ options: groupedOptions,
139
+ placeholder: 'Select from groups',
140
+ },
141
+ }
142
+
143
+ const iconOptions = [
144
+ { value: '1', label: 'Profile', icon: 'i-ph-user' },
145
+ { value: '2', label: 'Settings', icon: 'i-ph-gear' },
146
+ { value: '3', label: 'Notifications', icon: 'i-ph-bell' },
147
+ { value: '4', label: 'Help', icon: 'i-ph-question' },
148
+ ]
149
+
150
+ export const WithIcons: Story = {
151
+ args: {
152
+ options: iconOptions,
153
+ placeholder: 'Select with icons',
154
+ },
155
+ }
156
+
157
+ const externalIconOptions = [
158
+ { value: '1', label: 'Vue', externalIconSrc: 'https://vuejs.org/logo.svg' },
159
+ { value: '2', label: 'React', externalIconSrc: 'https://upload.wikimedia.org/wikipedia/commons/a/a7/React-icon.svg' },
160
+ { value: '3', label: 'Angular', externalIconSrc: 'https://angular.io/assets/images/logos/angular/angular.svg' },
161
+ ]
162
+
163
+ export const WithExternalIcons: Story = {
164
+ args: {
165
+ options: externalIconOptions,
166
+ placeholder: 'Select a framework',
167
+ },
168
+ }
169
+
170
+ export const MaxSelectedDisplay: Story = {
171
+ args: {
172
+ ...Default.args,
173
+ modelValue: ['1', '2', '3', '4'],
174
+ maxSelectedDisplay: 2,
175
+ },
176
+ }
177
+
178
+ export const ReadOnly: Story = {
179
+ args: {
180
+ ...WithInitialValue.args,
181
+ readOnly: true,
182
+ },
183
+ }
184
+
185
+ export const Required: Story = {
186
+ args: {
187
+ ...Default.args,
188
+ required: true,
189
+ placeholder: 'Required select',
190
+ },
191
+ }
192
+
193
+ export const WithLongPlaceholder: Story = {
194
+ args: {
195
+ ...Default.args,
196
+ placeholder: 'This is a very long placeholder to check how the component handles overflow',
197
+ },
198
+ }
199
+
200
+ const longOptionsList = Array.from({ length: 50 }, (_, i) => ({
201
+ value: `${i + 1}`,
202
+ label: `Option ${i + 1}`,
203
+ }))
204
+
205
+ export const WithScrolling: Story = {
206
+ name: 'With Scrolling',
207
+ args: {
208
+ options: longOptionsList,
209
+ placeholder: 'Select from a long list',
210
+ },
211
+ }
212
+
213
+ // New search-related stories
214
+ const searchableOptions = [
215
+ { value: '1', label: 'JavaScript', description: 'Programming language for web development' },
216
+ { value: '2', label: 'Python', description: 'High-level programming language' },
217
+ { value: '3', label: 'TypeScript', description: 'Typed superset of JavaScript' },
218
+ { value: '4', label: 'React', description: 'JavaScript library for building user interfaces' },
219
+ { value: '5', label: 'Vue.js', description: 'Progressive JavaScript framework' },
220
+ { value: '6', label: 'Angular', description: 'Platform for building mobile and desktop applications' },
221
+ { value: '7', label: 'Node.js', description: 'JavaScript runtime built on Chrome V8 engine' },
222
+ { value: '8', label: 'Express.js', description: 'Web application framework for Node.js' },
223
+ { value: '9', label: 'MongoDB', description: 'NoSQL document database' },
224
+ { value: '10', label: 'PostgreSQL', description: 'Open source relational database' },
225
+ { value: '11', label: 'Redis', description: 'In-memory data structure store' },
226
+ { value: '12', label: 'Docker', description: 'Platform for developing, shipping, and running applications' },
227
+ { value: '13', label: 'Kubernetes', description: 'Container orchestration platform' },
228
+ { value: '14', label: 'AWS', description: 'Amazon Web Services cloud platform' },
229
+ { value: '15', label: 'Vercel', description: 'Platform for frontend frameworks and static sites' },
230
+ ]
231
+
232
+ export const WithSearch: Story = {
233
+ name: 'With Search',
234
+ args: {
235
+ options: searchableOptions,
236
+ placeholder: 'Select technologies',
237
+ allowSearch: true,
238
+ searchPlaceholder: 'Search technologies...',
239
+ },
240
+ }
241
+
242
+ export const WithSearchAndGroups: Story = {
243
+ name: 'With Search and Groups',
244
+ args: {
245
+ options: [
246
+ { value: '1', label: 'JavaScript', description: 'Programming language for web', group: 'Languages' },
247
+ { value: '2', label: 'Python', description: 'High-level programming language', group: 'Languages' },
248
+ { value: '3', label: 'TypeScript', description: 'Typed superset of JavaScript', group: 'Languages' },
249
+ { value: '4', label: 'React', description: 'UI library', group: 'Frameworks' },
250
+ { value: '5', label: 'Vue.js', description: 'Progressive framework', group: 'Frameworks' },
251
+ { value: '6', label: 'Angular', description: 'Platform for building apps', group: 'Frameworks' },
252
+ { value: '7', label: 'MongoDB', description: 'NoSQL database', group: 'Databases' },
253
+ { value: '8', label: 'PostgreSQL', description: 'Relational database', group: 'Databases' },
254
+ { value: '9', label: 'Redis', description: 'In-memory store', group: 'Databases' },
255
+ ],
256
+ placeholder: 'Select from categories',
257
+ allowSearch: true,
258
+ searchPlaceholder: 'Filter by name or description...',
259
+ },
260
+ }
261
+
262
+ export const WithSearchCustomPlaceholder: Story = {
263
+ name: 'With Search Custom Placeholder',
264
+ args: {
265
+ options: searchableOptions,
266
+ placeholder: 'Choose your stack',
267
+ allowSearch: true,
268
+ searchPlaceholder: 'Type to filter options...',
269
+ },
270
+ }
271
+
272
+ // Comparison story showing both variants side by side
273
+ export const VariantComparison: Story = {
274
+ name: 'Variant Comparison',
275
+ render: () => {
276
+ return {
277
+ components: { TelaMultipleSelect },
278
+ setup() {
279
+ const listValue = ref(['1', '2', '3'])
280
+ const previewValue = ref(['1', '2', '3'])
281
+
282
+ const options = [
283
+ { value: '1', label: 'Nome do Paciente' },
284
+ { value: '2', label: 'Documento' },
285
+ { value: '3', label: 'Email' },
286
+ { value: '4', label: 'Telefone' },
287
+ { value: '5', label: 'Endereço' },
288
+ ]
289
+
290
+ return { listValue, previewValue, options }
291
+ },
292
+ template: `
293
+ <div style="display: flex; flex-direction: column; gap: 40px; padding: 20px; width: 400px;">
294
+ <div>
295
+ <p style="margin-bottom: 10px; font-weight: 600;">List Variant</p>
296
+ <TelaMultipleSelect
297
+ v-model="listValue"
298
+ :options="options"
299
+ placeholder="Select columns..."
300
+ variant="list"
301
+ />
302
+ <div style="margin-top: 10px; font-family: monospace; font-size: 12px;">
303
+ Selected: {{ listValue }}
304
+ </div>
305
+ </div>
306
+
307
+ <div>
308
+ <p style="margin-bottom: 10px; font-weight: 600;">Preview Variant</p>
309
+ <TelaMultipleSelect
310
+ v-model="previewValue"
311
+ :options="options"
312
+ placeholder="Select columns..."
313
+ variant="preview"
314
+ :preview-max-items="2"
315
+ />
316
+ <div style="margin-top: 10px; font-family: monospace; font-size: 12px;">
317
+ Selected: {{ previewValue }}
318
+ </div>
319
+ </div>
320
+ </div>
321
+ `,
322
+ }
323
+ },
324
+ args: {},
325
+ }