@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.
- package/README.md +75 -0
- package/app.config.ts +73 -0
- package/components/tela/animated/animated-calculating-number.vue +16 -0
- package/components/tela/animated/animated-number.mdx +248 -0
- package/components/tela/animated/animated-number.stories.ts +52 -0
- package/components/tela/animated/animated-number.vue +23 -0
- package/components/tela/animated/animated-text.vue +124 -0
- package/components/tela/animated/animated-value.vue +68 -0
- package/components/tela/avatar/avatar.mdx +117 -0
- package/components/tela/avatar/avatar.stories.ts +62 -0
- package/components/tela/avatar/avatar.vue +71 -0
- package/components/tela/avatar/group/avatar-group.stories.ts +78 -0
- package/components/tela/avatar/group/avatar-group.vue +46 -0
- package/components/tela/badge/badge.mdx +154 -0
- package/components/tela/badge/badge.stories.ts +82 -0
- package/components/tela/badge/badge.vue +41 -0
- package/components/tela/button/button.mdx +155 -0
- package/components/tela/button/button.stories.ts +202 -0
- package/components/tela/button/button.vue +107 -0
- package/components/tela/card.vue +30 -0
- package/components/tela/chart/chart-bar.vue +58 -0
- package/components/tela/chat/chat.mdx +268 -0
- package/components/tela/chat/chat.stories.ts +253 -0
- package/components/tela/chat/command/index.vue +41 -0
- package/components/tela/chat/command/mention/index.vue +138 -0
- package/components/tela/chat/index.vue +112 -0
- package/components/tela/chat/pure-text-input/chat-text-input.vue +190 -0
- package/components/tela/chat/text-input/chat-text-input.stories.ts +128 -0
- package/components/tela/chat/text-input/index.vue +217 -0
- package/components/tela/chat/text-message/chat-text-message.stories.ts +138 -0
- package/components/tela/chat/text-message/index.vue +355 -0
- package/components/tela/chat/types.ts +19 -0
- package/components/tela/checkbox/checkbox-card.vue +30 -0
- package/components/tela/checkbox/checkbox.mdx +164 -0
- package/components/tela/checkbox/checkbox.stories.ts +104 -0
- package/components/tela/checkbox/checkbox.vue +43 -0
- package/components/tela/collapsible/Collapsible.vue +15 -0
- package/components/tela/collapsible/CollapsibleContent.vue +59 -0
- package/components/tela/collapsible/CollapsibleTrigger.vue +12 -0
- package/components/tela/collapsible/collapsible.mdx +157 -0
- package/components/tela/collapsible-section/collapsible-section.mdx +180 -0
- package/components/tela/collapsible-section/collapsible-section.stories.ts +53 -0
- package/components/tela/collapsible-section/collapsible-section.vue +51 -0
- package/components/tela/collapsible-section-with-actions.vue +98 -0
- package/components/tela/combobox/combobox-anchor.vue +24 -0
- package/components/tela/combobox/combobox-empty.vue +19 -0
- package/components/tela/combobox/combobox-group.vue +24 -0
- package/components/tela/combobox/combobox-indicator.vue +22 -0
- package/components/tela/combobox/combobox-input.vue +31 -0
- package/components/tela/combobox/combobox-item.vue +28 -0
- package/components/tela/combobox/combobox-label.vue +24 -0
- package/components/tela/combobox/combobox-list.vue +90 -0
- package/components/tela/combobox/combobox-module-selector.vue +366 -0
- package/components/tela/combobox/combobox-root.vue +15 -0
- package/components/tela/combobox/combobox-trigger.vue +12 -0
- package/components/tela/combobox/combobox.mdx +285 -0
- package/components/tela/combobox/combobox.stories.ts +232 -0
- package/components/tela/combobox/combobox.vue +497 -0
- package/components/tela/command/command-dialog.vue +22 -0
- package/components/tela/command/command-empty.vue +25 -0
- package/components/tela/command/command-group.vue +46 -0
- package/components/tela/command/command-input.vue +38 -0
- package/components/tela/command/command-item.vue +78 -0
- package/components/tela/command/command-list.vue +78 -0
- package/components/tela/command/command-separator.vue +23 -0
- package/components/tela/command/command-shortcut.vue +13 -0
- package/components/tela/command/command.vue +88 -0
- package/components/tela/command/dialog-base.vue +15 -0
- package/components/tela/command/dialog-content.vue +50 -0
- package/components/tela/command/utils.ts +15 -0
- package/components/tela/complex-table/complex-table-cell.stories.ts +145 -0
- package/components/tela/complex-table/complex-table-cell.vue +45 -0
- package/components/tela/complex-table/complex-table-header-cell.stories.ts +103 -0
- package/components/tela/complex-table/complex-table-header-cell.vue +48 -0
- package/components/tela/complex-table/complex-table-header.stories.ts +89 -0
- package/components/tela/complex-table/complex-table-header.vue +70 -0
- package/components/tela/complex-table/complex-table-row.vue +199 -0
- package/components/tela/complex-table/complex-table-virtualized.vue +326 -0
- package/components/tela/complex-table/complex-table.stories.ts +358 -0
- package/components/tela/complex-table/complex-table.vue +237 -0
- package/components/tela/complex-table/composables/table-common.ts +93 -0
- package/components/tela/complex-table/composables/table-selection.ts +87 -0
- package/components/tela/complex-table/composables/virtual-scroll.ts +252 -0
- package/components/tela/complex-table/styles/table-shared.css +170 -0
- package/components/tela/complex-table/types.ts +63 -0
- package/components/tela/complex-table/utils.ts +35 -0
- package/components/tela/confirm-button/confirm-button.vue +137 -0
- package/components/tela/confirmation-modal/confirmation-modal.vue +72 -0
- package/components/tela/copy-button.vue +86 -0
- package/components/tela/date-range-picker.vue +221 -0
- package/components/tela/dialog/dialog.mdx +170 -0
- package/components/tela/dialog/dialog.vue +182 -0
- package/components/tela/disabled-area.vue +16 -0
- package/components/tela/disclaimer/disclaimer.mdx +238 -0
- package/components/tela/disclaimer/disclaimer.stories.ts +196 -0
- package/components/tela/disclaimer/disclaimer.vue +125 -0
- package/components/tela/dropdown-menu/DropdownMenu.vue +121 -0
- package/components/tela/dropdown-menu/DropdownMenuCheckboxItem.vue +40 -0
- package/components/tela/dropdown-menu/DropdownMenuContent.vue +75 -0
- package/components/tela/dropdown-menu/DropdownMenuGroup.vue +12 -0
- package/components/tela/dropdown-menu/DropdownMenuItem.vue +137 -0
- package/components/tela/dropdown-menu/DropdownMenuLabel.vue +26 -0
- package/components/tela/dropdown-menu/DropdownMenuRadioGroup.vue +18 -0
- package/components/tela/dropdown-menu/DropdownMenuRadioItem.vue +40 -0
- package/components/tela/dropdown-menu/DropdownMenuRoot.vue +15 -0
- package/components/tela/dropdown-menu/DropdownMenuSeparator.vue +21 -0
- package/components/tela/dropdown-menu/DropdownMenuShortcut.vue +14 -0
- package/components/tela/dropdown-menu/DropdownMenuSub.vue +18 -0
- package/components/tela/dropdown-menu/DropdownMenuSubContent.vue +30 -0
- package/components/tela/dropdown-menu/DropdownMenuSubTrigger.vue +35 -0
- package/components/tela/dropdown-menu/DropdownMenuTrigger.vue +14 -0
- package/components/tela/dropdown-menu/dropdown-menu.mdx +265 -0
- package/components/tela/dropdown-menu/dropdown-menu.stories.ts +156 -0
- package/components/tela/expandable-input.vue +96 -0
- package/components/tela/file-drop.vue +37 -0
- package/components/tela/file-upload/file-upload.mdx +189 -0
- package/components/tela/file-upload/file-upload.stories.ts +48 -0
- package/components/tela/file-upload/file-upload.vue +205 -0
- package/components/tela/filters/checkbox-filter.stories.ts +218 -0
- package/components/tela/filters/checkbox-filter.vue +165 -0
- package/components/tela/filters/date-filter.stories.ts +258 -0
- package/components/tela/filters/date-filter.vue +200 -0
- package/components/tela/filters/user-filter.stories.ts +344 -0
- package/components/tela/filters/user-filter.vue +271 -0
- package/components/tela/hover-card/hover-card.mdx +221 -0
- package/components/tela/hover-card/hover-card.stories.ts +87 -0
- package/components/tela/hover-card/hover-card.vue +61 -0
- package/components/tela/icon/custom.vue +319 -0
- package/components/tela/icon/spinner.vue +12 -0
- package/components/tela/icon-button/icon-button.vue +114 -0
- package/components/tela/icon.vue +37 -0
- package/components/tela/initials.vue +28 -0
- package/components/tela/inline-input.vue +77 -0
- package/components/tela/input/input.mdx +182 -0
- package/components/tela/input/input.stories.ts +153 -0
- package/components/tela/input/tela-input.vue +240 -0
- package/components/tela/kbd/kbd-return.vue +6 -0
- package/components/tela/kbd/kbd.mdx +238 -0
- package/components/tela/kbd/kbd.vue +18 -0
- package/components/tela/label/label.mdx +121 -0
- package/components/tela/label/label.stories.ts +37 -0
- package/components/tela/label/label.vue +25 -0
- package/components/tela/link-decoration/link-decoration.vue +19 -0
- package/components/tela/live-label.vue +32 -0
- package/components/tela/long-press-button.vue +98 -0
- package/components/tela/menubar/menubar-content.vue +77 -0
- package/components/tela/menubar/menubar-item.vue +32 -0
- package/components/tela/menubar/menubar-label.vue +14 -0
- package/components/tela/menubar/menubar-menu.vue +12 -0
- package/components/tela/menubar/menubar-root.vue +30 -0
- package/components/tela/menubar/menubar-separator.vue +17 -0
- package/components/tela/menubar/menubar-shortcut.vue +14 -0
- package/components/tela/menubar/menubar-sub-content.vue +36 -0
- package/components/tela/menubar/menubar-sub-trigger.vue +28 -0
- package/components/tela/menubar/menubar-sub.vue +20 -0
- package/components/tela/menubar/menubar-trigger.vue +27 -0
- package/components/tela/menubar/menubar.vue +298 -0
- package/components/tela/modal/modal.mdx +145 -0
- package/components/tela/modal/modal.vue +242 -0
- package/components/tela/multiple-select/multiple-select.mdx +274 -0
- package/components/tela/multiple-select/multiple-select.stories.ts +325 -0
- package/components/tela/multiple-select/multiple-select.vue +666 -0
- package/components/tela/pane.vue +110 -0
- package/components/tela/popover/popover-content.vue +48 -0
- package/components/tela/popover/popover-trigger.vue +12 -0
- package/components/tela/popover/popover.mdx +239 -0
- package/components/tela/popover/popover.stories.ts +150 -0
- package/components/tela/popover/popover.vue +15 -0
- package/components/tela/popover-list/popover-list-nested.vue +104 -0
- package/components/tela/popover-list/popover-list.stories.ts +330 -0
- package/components/tela/popover-list/popover-list.vue +191 -0
- package/components/tela/radio-button.vue +66 -0
- package/components/tela/radio-group/radio-group-item.vue +40 -0
- package/components/tela/radio-group/radio-group-root.vue +26 -0
- package/components/tela/radio-group/radio-group.mdx +78 -0
- package/components/tela/radio-group/radio-group.stories.ts +106 -0
- package/components/tela/radio-group/radio-group.vue +23 -0
- package/components/tela/range-calendar.stories.ts +110 -0
- package/components/tela/range-calendar.vue +109 -0
- package/components/tela/scroll-area/scroll-area.mdx +183 -0
- package/components/tela/scroll-area/scroll-area.vue +30 -0
- package/components/tela/scroll-area/scroll-bar.vue +31 -0
- package/components/tela/segment-toggle.stories.ts +114 -0
- package/components/tela/segment-toggle.vue +66 -0
- package/components/tela/select-menu/select-menu-content.vue +106 -0
- package/components/tela/select-menu/select-menu-down-button.vue +20 -0
- package/components/tela/select-menu/select-menu-group.vue +16 -0
- package/components/tela/select-menu/select-menu-item.vue +40 -0
- package/components/tela/select-menu/select-menu-root.vue +15 -0
- package/components/tela/select-menu/select-menu-trigger.vue +34 -0
- package/components/tela/select-menu/select-menu-up-button.vue +20 -0
- package/components/tela/select-menu/select-menu-value.vue +12 -0
- package/components/tela/select-menu/select-menu.mdx +221 -0
- package/components/tela/select-menu/select-menu.stories.ts +91 -0
- package/components/tela/select-menu/select-menu.vue +165 -0
- package/components/tela/selector/selector.vue +47 -0
- package/components/tela/sheet/sheet-close.vue +12 -0
- package/components/tela/sheet/sheet-content.vue +57 -0
- package/components/tela/sheet/sheet-description.vue +23 -0
- package/components/tela/sheet/sheet-footer.vue +18 -0
- package/components/tela/sheet/sheet-header.vue +15 -0
- package/components/tela/sheet/sheet-root.vue +18 -0
- package/components/tela/sheet/sheet-title.vue +23 -0
- package/components/tela/sheet/sheet-trigger.vue +12 -0
- package/components/tela/sheet/sheet.client.vue +150 -0
- package/components/tela/sheet/sheet.mdx +176 -0
- package/components/tela/sheet/sheet.stories.ts +201 -0
- package/components/tela/sheet/variants.ts +22 -0
- package/components/tela/side-sheet/side-sheet.mdx +131 -0
- package/components/tela/side-sheet/side-sheet.stories.ts +134 -0
- package/components/tela/side-sheet/side-sheet.vue +106 -0
- package/components/tela/skeleton/skeleton.mdx +165 -0
- package/components/tela/skeleton/skeleton.stories.ts +35 -0
- package/components/tela/skeleton/skeleton.vue +45 -0
- package/components/tela/skeleton-icon.vue +24 -0
- package/components/tela/span.vue +24 -0
- package/components/tela/star-button.vue +70 -0
- package/components/tela/status/status-lean.vue +30 -0
- package/components/tela/status/status.mdx +187 -0
- package/components/tela/status/status.stories.ts +160 -0
- package/components/tela/status/status.vue +420 -0
- package/components/tela/status-bar/status-bar.mdx +178 -0
- package/components/tela/status-bar/status-bar.stories.ts +64 -0
- package/components/tela/status-bar/status-bar.vue +56 -0
- package/components/tela/status-bar/types.ts +5 -0
- package/components/tela/switch/switch.mdx +118 -0
- package/components/tela/switch/switch.stories.ts +80 -0
- package/components/tela/switch/switch.vue +56 -0
- package/components/tela/table/table-body.vue +13 -0
- package/components/tela/table/table-caption.vue +13 -0
- package/components/tela/table/table-cell.vue +20 -0
- package/components/tela/table/table-empty.vue +37 -0
- package/components/tela/table/table-footer.vue +13 -0
- package/components/tela/table/table-head.vue +13 -0
- package/components/tela/table/table-header.vue +13 -0
- package/components/tela/table/table-row.vue +13 -0
- package/components/tela/table/table.mdx +230 -0
- package/components/tela/table/table.stories.ts +384 -0
- package/components/tela/table/table.vue +15 -0
- package/components/tela/tabs/tabs-content.vue +20 -0
- package/components/tela/tabs/tabs-indicator.vue +22 -0
- package/components/tela/tabs/tabs-list.vue +23 -0
- package/components/tela/tabs/tabs-root.vue +15 -0
- package/components/tela/tabs/tabs-trigger.vue +27 -0
- package/components/tela/tabs/tabs.mdx +138 -0
- package/components/tela/tabs/tabs.stories.ts +72 -0
- package/components/tela/tabs/tabs.vue +61 -0
- package/components/tela/tags/tags-select.mdx +318 -0
- package/components/tela/tags/tags-select.stories.ts +47 -0
- package/components/tela/tags/tags-select.vue +637 -0
- package/components/tela/tags/tags.mdx +151 -0
- package/components/tela/tags/tags.stories.ts +118 -0
- package/components/tela/tags/tags.vue +112 -0
- package/components/tela/textarea/textarea.mdx +102 -0
- package/components/tela/textarea/textarea.stories.ts +50 -0
- package/components/tela/textarea/textarea.vue +34 -0
- package/components/tela/toggle-group.vue +91 -0
- package/components/tela/tooltip/tooltip-content.vue +45 -0
- package/components/tela/tooltip/tooltip-provider.vue +12 -0
- package/components/tela/tooltip/tooltip-root.vue +15 -0
- package/components/tela/tooltip/tooltip-trigger.vue +12 -0
- package/components/tela/tooltip/tooltip.mdx +196 -0
- package/components/tela/tooltip/tooltip.stories.ts +200 -0
- package/components/tela/tooltip/tooltip.vue +91 -0
- package/components/tela/tooltip-group/tooltip-group-trigger.vue +92 -0
- package/components/tela/tooltip-group/tooltip-group.mdx +236 -0
- package/components/tela/tooltip-group/tooltip-group.stories.ts +465 -0
- package/components/tela/tooltip-group/tooltip-group.vue +35 -0
- package/components/tela/transparent-input.vue +151 -0
- package/components/tela/variable-icon.vue +28 -0
- package/components/tela/variable-input.vue +77 -0
- package/components/tela/wide-button/wide-button.vue +40 -0
- package/components.json +18 -0
- package/composables/status-toast.ts +67 -0
- package/css/reset.css +386 -0
- package/css/text.css +22 -0
- package/lib/doc-generator.ts +903 -0
- package/lib/extractors/volar-extract.ts +186 -0
- package/lib/type-resolver.ts +402 -0
- package/lib/utils.ts +6 -0
- package/modules/tela-build-docs/index.ts +139 -0
- package/nuxt.config.ts +80 -0
- package/package.json +84 -0
- package/plugins/test-id.ts +7 -0
- package/tsconfig.json +7 -0
- package/types/custom-icon.ts +1 -0
- package/types/index.ts +2 -0
- package/types/status.ts +1 -0
- package/unocss.config.ts +89 -0
- package/utils/component-utils.ts +30 -0
- package/utils/design-tokens.ts +431 -0
- package/utils/fold.ts +8 -0
- package/utils/select-menu.ts +10 -0
- package/utils/status.ts +1 -0
- package/utils/without-keys.ts +34 -0
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/vue3'
|
|
2
|
+
import { ref, computed } from 'vue'
|
|
3
|
+
|
|
4
|
+
import ComboboxRoot from './combobox-root.vue'
|
|
5
|
+
import ComboboxAnchor from './combobox-anchor.vue'
|
|
6
|
+
import ComboboxInput from './combobox-input.vue'
|
|
7
|
+
import ComboboxList from './combobox-list.vue'
|
|
8
|
+
import ComboboxEmpty from './combobox-empty.vue'
|
|
9
|
+
import ComboboxGroup from './combobox-group.vue'
|
|
10
|
+
import ComboboxItem from './combobox-item.vue'
|
|
11
|
+
import ComboboxItemIndicator from './combobox-indicator.vue'
|
|
12
|
+
import ComboboxLabel from './combobox-label.vue'
|
|
13
|
+
import { ComboboxTrigger } from 'reka-ui'
|
|
14
|
+
import TelaIcon from '../icon.vue'
|
|
15
|
+
import TelaButton from '../button/button.vue'
|
|
16
|
+
import Combobox from './combobox.vue'
|
|
17
|
+
|
|
18
|
+
const meta: Meta<typeof Combobox> = {
|
|
19
|
+
title: 'Core/Combobox',
|
|
20
|
+
component: Combobox,
|
|
21
|
+
parameters: {
|
|
22
|
+
layout: 'centered',
|
|
23
|
+
docs: {
|
|
24
|
+
description: {
|
|
25
|
+
component: 'A searchable combobox component built on reka-ui. Allows users to search and select from a list of options. Supports filtering, icons, descriptions, grouping, tabs, token limits display, and custom styling. The component provides a searchable dropdown interface with keyboard navigation (Cmd+Backspace to clear search).',
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
argTypes: {
|
|
30
|
+
modelValue: {
|
|
31
|
+
control: 'text',
|
|
32
|
+
description: 'The currently selected value (v-model). Should match the `value` property of one of the options.',
|
|
33
|
+
},
|
|
34
|
+
placeholder: {
|
|
35
|
+
control: 'text',
|
|
36
|
+
description: 'Placeholder text displayed in the trigger button when no option is selected.',
|
|
37
|
+
},
|
|
38
|
+
inputPlaceholder: {
|
|
39
|
+
control: 'text',
|
|
40
|
+
description: 'Placeholder text for the search input field. Defaults to internationalized search label if not provided.',
|
|
41
|
+
},
|
|
42
|
+
options: {
|
|
43
|
+
control: false,
|
|
44
|
+
description: 'Array of option objects to display. Each option can have: `value` (string, required), `label` (string, required), `description` (string, optional), `icon` (string | Component, optional), `externalIconSrc` (string, optional), `maxInputTokens` (number, optional), `maxOutputTokens` (number, optional), `group` (string, optional for grouping), `badge` (string, optional), `tabs` (string[], optional for tab filtering), `to` (string, optional), `isMultiModal` (boolean, optional).',
|
|
45
|
+
},
|
|
46
|
+
readOnly: {
|
|
47
|
+
control: 'boolean',
|
|
48
|
+
description: 'Whether the combobox is read-only and disabled from user interaction.',
|
|
49
|
+
},
|
|
50
|
+
size: {
|
|
51
|
+
control: 'select',
|
|
52
|
+
options: ['xs', 'sm', 'md'],
|
|
53
|
+
description: 'Size variant for the combobox. Controls padding, font size, and icon size.',
|
|
54
|
+
},
|
|
55
|
+
iconWithBackground: {
|
|
56
|
+
control: false,
|
|
57
|
+
description: 'Configuration for icons with background styling. Should include `size` ("xs" | "sm" | "md") and `backgroundClass` (CSS class string).',
|
|
58
|
+
},
|
|
59
|
+
compact: {
|
|
60
|
+
control: 'boolean',
|
|
61
|
+
description: 'Whether to use compact spacing and sizing. Defaults to true. When false, uses larger padding and spacing.',
|
|
62
|
+
},
|
|
63
|
+
hasGroupingLabels: {
|
|
64
|
+
control: 'boolean',
|
|
65
|
+
description: 'Whether to display group labels when options are grouped. Defaults to true. Only shown when search is empty.',
|
|
66
|
+
},
|
|
67
|
+
colorIcon: {
|
|
68
|
+
control: 'color',
|
|
69
|
+
description: 'Color to apply to icons in the options and trigger button.',
|
|
70
|
+
},
|
|
71
|
+
disablePortal: {
|
|
72
|
+
control: 'boolean',
|
|
73
|
+
description: 'Whether to disable portal rendering for the dropdown content. Defaults to false. Set to true to render dropdown in normal DOM flow (useful for z-index issues).',
|
|
74
|
+
},
|
|
75
|
+
labelClass: {
|
|
76
|
+
control: 'text',
|
|
77
|
+
description: 'Custom CSS classes to apply to the label text in the trigger button.',
|
|
78
|
+
},
|
|
79
|
+
triggerClass: {
|
|
80
|
+
control: 'text',
|
|
81
|
+
description: 'Custom CSS classes to apply to the trigger button element.',
|
|
82
|
+
},
|
|
83
|
+
iconClass: {
|
|
84
|
+
control: 'text',
|
|
85
|
+
description: 'Custom CSS classes to apply to icons in the trigger button.',
|
|
86
|
+
},
|
|
87
|
+
contentClass: {
|
|
88
|
+
control: 'text',
|
|
89
|
+
description: 'Custom CSS classes to apply to the dropdown content container.',
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export default meta
|
|
95
|
+
|
|
96
|
+
export const Default: StoryObj<{ options: Array<{ value: string; label: string }> }> = {
|
|
97
|
+
render: args => ({
|
|
98
|
+
components: { ComboboxRoot, ComboboxAnchor, ComboboxTrigger, TelaIcon, TelaButton, ComboboxInput, ComboboxList, ComboboxEmpty, ComboboxGroup, ComboboxItem, ComboboxItemIndicator, ComboboxLabel },
|
|
99
|
+
setup() {
|
|
100
|
+
const search = ref('')
|
|
101
|
+
const selectedValue = ref('')
|
|
102
|
+
|
|
103
|
+
const selectedOption = computed(() => {
|
|
104
|
+
if (selectedValue.value && typeof selectedValue.value === 'object') {
|
|
105
|
+
return selectedValue.value
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return args.options.find((option: any) => option.value === selectedValue.value)
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
const filteredOptions = computed(() => {
|
|
112
|
+
if (!search.value.trim()) {
|
|
113
|
+
return args.options
|
|
114
|
+
}
|
|
115
|
+
return args.options.filter((option: any) =>
|
|
116
|
+
option.label.toLowerCase().includes(search.value.toLowerCase()),
|
|
117
|
+
)
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
const handleDeleteSearchValue = () => {
|
|
121
|
+
search.value = ''
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
return { args, search, selectedValue, selectedOption, filteredOptions, handleDeleteSearchValue }
|
|
125
|
+
},
|
|
126
|
+
template: `
|
|
127
|
+
<ComboboxRoot v-model="selectedValue">
|
|
128
|
+
<ComboboxAnchor>
|
|
129
|
+
<ComboboxTrigger
|
|
130
|
+
as="button"
|
|
131
|
+
class="w-full group select-none flex items-center justify-between gap-3 rounded-10px px-8px py-7px bg-white border-[0.5px] border-gray-300 transition outline-none hover:bg-gray-100 data-[state=open]:bg-gray-100"
|
|
132
|
+
>
|
|
133
|
+
<span class="text-gray-900 group-data-[state=open]:text-gray-500 truncate max-w-120px text-body-14-regular">
|
|
134
|
+
{{ selectedOption?.label || 'Select an option' }}
|
|
135
|
+
</span>
|
|
136
|
+
<TelaIcon name="i-ph-caret-down" class="opacity-60 transition-all ease-out duration-150 group-data-[state=open]:rotate-180" size="12px" />
|
|
137
|
+
</ComboboxTrigger>
|
|
138
|
+
</ComboboxAnchor>
|
|
139
|
+
<ComboboxList class="w-270px">
|
|
140
|
+
<div class="relative">
|
|
141
|
+
<span class="absolute inset-y-0 start-0 flex items-center justify-center px-2.5">
|
|
142
|
+
<TelaIcon name="i-ph-magnifying-glass" size="12px" class="text-gray-400" />
|
|
143
|
+
</span>
|
|
144
|
+
<ComboboxInput
|
|
145
|
+
v-model="search"
|
|
146
|
+
class="rounded-b-none pl-7"
|
|
147
|
+
placeholder="Search for an option"
|
|
148
|
+
/>
|
|
149
|
+
<div
|
|
150
|
+
v-if="search.length > 0"
|
|
151
|
+
class="absolute inset-y-0 end-0 flex items-center justify-center px-2.5"
|
|
152
|
+
>
|
|
153
|
+
<button
|
|
154
|
+
class="flex items-center justify-center"
|
|
155
|
+
@click="search = ''"
|
|
156
|
+
>
|
|
157
|
+
<TelaIcon name="i-ph-x-circle" size="12px" class="text-gray-400" />
|
|
158
|
+
</button>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
<ComboboxEmpty
|
|
162
|
+
v-if="filteredOptions.length === 0"
|
|
163
|
+
class="flex flex-col items-center justify-center gap-5 px-7"
|
|
164
|
+
>
|
|
165
|
+
<div class="flex flex-col items-center justify-center gap-3">
|
|
166
|
+
<TelaIcon name="i-ph-smiley-sad" size="24px" class="text-gray-400" />
|
|
167
|
+
<span class="text-xl font-medium leading-none">
|
|
168
|
+
{{ search.trim() ? 'No options found with ' + search : 'No options found' }}
|
|
169
|
+
</span>
|
|
170
|
+
<span v-if="search.trim()" class="inline-flex items-center gap-1.5 text-md text-gray-500">
|
|
171
|
+
Press
|
|
172
|
+
<div class="flex items-center gap-1">
|
|
173
|
+
<div class="p-2px bg-gray-200 rounded">
|
|
174
|
+
<TelaIcon name="i-ph-command" size="16px" />
|
|
175
|
+
</div>
|
|
176
|
+
<div class="p-2px bg-gray-200 rounded">
|
|
177
|
+
<TelaIcon name="i-ph-backspace" size="16px" />
|
|
178
|
+
</div>
|
|
179
|
+
</div>
|
|
180
|
+
to clear the search
|
|
181
|
+
</span>
|
|
182
|
+
</div>
|
|
183
|
+
<TelaButton
|
|
184
|
+
v-if="search.trim()" variant="secondary" size="sm"
|
|
185
|
+
@click="handleDeleteSearchValue"
|
|
186
|
+
>
|
|
187
|
+
Clear
|
|
188
|
+
</TelaButton>
|
|
189
|
+
</ComboboxEmpty>
|
|
190
|
+
<ComboboxGroup>
|
|
191
|
+
<ComboboxItem
|
|
192
|
+
v-for="option in filteredOptions"
|
|
193
|
+
:key="option.value"
|
|
194
|
+
:value="option"
|
|
195
|
+
>
|
|
196
|
+
<span class="text-gray-900 truncate max-w-120px text-body-14-regular">{{ option.label }}</span>
|
|
197
|
+
<div class="flex gap-2 items-center">
|
|
198
|
+
<ComboboxItemIndicator>
|
|
199
|
+
<TelaIcon name="i-ph-check" size="14px" />
|
|
200
|
+
</ComboboxItemIndicator>
|
|
201
|
+
</div>
|
|
202
|
+
</ComboboxItem>
|
|
203
|
+
</ComboboxGroup>
|
|
204
|
+
</ComboboxList>
|
|
205
|
+
</ComboboxRoot>
|
|
206
|
+
`,
|
|
207
|
+
}),
|
|
208
|
+
args: {
|
|
209
|
+
options: [
|
|
210
|
+
{
|
|
211
|
+
value: 'bug',
|
|
212
|
+
label: 'Bug',
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
value: 'feature-request',
|
|
216
|
+
label: 'Feature Request',
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
value: 'performance',
|
|
220
|
+
label: 'Performance',
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
value: 'ui-ux',
|
|
224
|
+
label: 'UI/UX',
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
value: 'other',
|
|
228
|
+
label: 'Other',
|
|
229
|
+
},
|
|
230
|
+
],
|
|
231
|
+
},
|
|
232
|
+
}
|