pimelon-ui 0.1.238 → 0.1.262
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/icons/Icon.vue +28 -0
- package/icons/IconPicker.story.vue +126 -0
- package/icons/IconPicker.vue +221 -0
- package/icons/index.ts +5 -0
- package/icons/spritePlugin.ts +13 -0
- package/melon/DataImport/MappingStep.vue +2 -2
- package/melon/DataImport/PreviewStep.vue +18 -2
- package/melon/DataImport/UploadStep.vue +2 -2
- package/melon/Filter/Filter.vue +1 -0
- package/melon/Filter/utils.ts +5 -4
- package/melon/drive/components/AppSwitcher.vue +47 -0
- package/melon/drive/components/DriveLogo.vue +18 -0
- package/melon/drive/components/InfoDialog.vue +207 -0
- package/melon/drive/components/MoveDialog.vue +450 -0
- package/melon/drive/components/RenameDialog.vue +76 -0
- package/melon/drive/components/Select/Select.vue +136 -0
- package/melon/drive/components/Select/types.ts +18 -0
- package/melon/drive/components/ShareDialog.vue +397 -0
- package/melon/drive/components/TagInput/TagInput.vue +113 -0
- package/melon/drive/components/TagInput/types.ts +45 -0
- package/melon/drive/components/TagInput/utils.ts +63 -0
- package/melon/drive/components/TeamSelector.vue +50 -0
- package/melon/drive/index.js +6 -0
- package/melon/drive/js/icons.js +705 -0
- package/melon/drive/js/resources.js +110 -0
- package/melon/drive/js/utils.js +110 -0
- package/melon/index.js +3 -1
- package/melon/telemetry/index.ts +48 -0
- package/melon/telemetry/pulse.ts +181 -0
- package/melon/telemetry/telemetry.test.ts +87 -0
- package/melon/telemetry/utils.ts +15 -0
- package/package.json +49 -33
- package/src/components/Alert/Alert.vue +20 -1
- package/src/components/Alert/stories/Controlled.vue +16 -0
- package/src/components/Alert/stories/Slots.vue +20 -0
- package/src/components/Alert/stories/Themes.vue +14 -0
- package/src/components/Alert/types.ts +26 -1
- package/src/components/Avatar/Avatar.vue +9 -0
- package/src/components/Avatar/stories/Shapes.vue +12 -0
- package/src/components/Avatar/stories/Sizes.vue +10 -0
- package/src/components/Avatar/types.ts +7 -0
- package/src/components/Badge/Badge.vue +14 -2
- package/src/components/Badge/stories/Themes.vue +10 -0
- package/src/components/Badge/stories/Variants.vue +10 -0
- package/src/components/Badge/types.ts +8 -0
- package/src/components/Breadcrumbs/Breadcrumbs.vue +26 -0
- package/src/components/Breadcrumbs/stories/Example.vue +13 -0
- package/src/components/Breadcrumbs/stories/Slots.vue +24 -0
- package/src/components/Breadcrumbs/types.ts +9 -1
- package/src/components/Button/Button.vue +14 -0
- package/src/components/Button/stories/Icons.vue +27 -0
- package/src/components/Button/stories/Sizes.vue +11 -0
- package/src/components/Button/stories/Themes.vue +10 -0
- package/src/components/Button/stories/Variants.vue +10 -0
- package/src/components/Button/types.ts +29 -1
- package/src/components/Calendar/Calendar.vue +0 -1
- package/src/components/Calendar/stories/CustomHeader.vue +151 -0
- package/src/components/Calendar/stories/Examples.vue +102 -0
- package/src/components/Charts/ECharts.vue +9 -6
- package/src/components/Charts/NumberChart.vue +7 -3
- package/src/components/Charts/{Charts.story.vue → stories/Examples.vue} +37 -29
- package/src/components/Checkbox/stories/Examples.vue +8 -0
- package/src/components/Checkbox/types.ts +11 -0
- package/src/components/CircularProgressBar/CircularProgressBar.story.vue +62 -59
- package/src/components/CircularProgressBar/types.ts +17 -3
- package/src/components/Combobox/Combobox.vue +29 -9
- package/src/components/Combobox/stories/CustomRender.vue +26 -0
- package/src/components/Combobox/stories/Grouped.vue +40 -0
- package/src/components/Combobox/stories/OptionSlots.vue +42 -0
- package/src/components/Combobox/stories/Simple.vue +19 -0
- package/src/components/Combobox/stories/WithIcons.vue +16 -0
- package/src/components/Combobox/types.ts +15 -0
- package/src/components/ConfirmDialog.vue +5 -1
- package/src/components/DatePicker/DatePicker.vue +1 -1
- package/src/components/DatePicker/DateRangePicker.vue +1 -1
- package/src/components/DatePicker/DateTimePicker.vue +3 -3
- package/src/components/DatePicker/stories/DateTime.vue +16 -0
- package/src/components/DatePicker/stories/Examples.vue +11 -0
- package/src/components/DatePicker/stories/Range.vue +12 -0
- package/src/components/DatePicker/types.ts +1 -1
- package/src/components/DatePicker/utils.ts +1 -1
- package/src/components/Dialog/Dialog.vue +22 -0
- package/src/components/Dialog/stories/Confirm.vue +38 -0
- package/src/components/Dialog/stories/Custom.vue +38 -0
- package/src/components/Dialog/stories/Interactive.vue +48 -0
- package/src/components/Dialog/stories/Modal.vue +21 -0
- package/src/components/Dialog/types.ts +5 -0
- package/src/components/Dropdown/Dropdown.vue +8 -0
- package/src/components/Dropdown/stories/CustomTrigger.vue +19 -0
- package/src/components/Dropdown/stories/Examples.vue +17 -0
- package/src/components/Dropdown/stories/Grouped.vue +36 -0
- package/src/components/Dropdown/stories/Submenus.vue +31 -0
- package/src/components/Dropdown/stories/Switches.vue +28 -0
- package/src/components/Dropdown/types.ts +13 -1
- package/src/components/ErrorMessage/stories/ErrorObject.vue +15 -0
- package/src/components/ErrorMessage/stories/Examples.vue +10 -0
- package/src/components/ErrorMessage/types.ts +1 -0
- package/src/components/FileUploader/stories/Examples.vue +25 -0
- package/src/components/FormControl/FormControl.story.vue +85 -101
- package/src/components/FormControl/FormControl.vue +13 -0
- package/src/components/FormControl/types.ts +6 -0
- package/src/components/ListView/stories/CellSlot.vue +65 -0
- package/src/components/ListView/stories/CustomList.vue +120 -0
- package/src/components/ListView/stories/Empty.vue +40 -0
- package/src/components/ListView/stories/Examples.vue +56 -0
- package/src/components/ListView/stories/GroupedRows.vue +152 -0
- package/src/components/MonthPicker/MonthPicker.vue +7 -1
- package/src/components/MonthPicker/stories/Example.vue +10 -0
- package/src/components/MonthPicker/types.ts +4 -0
- package/src/components/MultiSelect/MultiSelect.vue +9 -1
- package/src/components/MultiSelect/stories/Example.vue +24 -0
- package/src/components/MultiSelect/stories/Footer.vue +43 -0
- package/src/components/MultiSelect/stories/Options.vue +33 -0
- package/src/components/MultiSelect/types.ts +5 -0
- package/src/components/Password/Password.vue +19 -14
- package/src/components/Password/stories/Example.vue +10 -0
- package/src/components/Password/types.ts +3 -0
- package/src/components/Popover/Popover.vue +42 -8
- package/src/components/Popover/stories/Click.vue +14 -0
- package/src/components/Popover/stories/Hover.vue +14 -0
- package/src/components/Popover/types.ts +20 -6
- package/src/components/Progress/Progress.vue +7 -0
- package/src/components/Progress/stories/Examples.vue +7 -0
- package/src/components/Progress/stories/Hint.vue +7 -0
- package/src/components/Progress/stories/Intervals.vue +12 -0
- package/src/components/Progress/stories/Sizes.vue +10 -0
- package/src/components/Progress/types.ts +11 -0
- package/src/components/Rating/stories/Examples.vue +7 -0
- package/src/components/Rating/types.ts +10 -1
- package/src/components/Select/Select.vue +42 -33
- package/src/components/Select/stories/Example.vue +42 -0
- package/src/components/Select/stories/OptionSlot.vue +62 -0
- package/src/components/Select/stories/TriggerSlots.vue +51 -0
- package/src/components/Select/types.ts +14 -1
- package/src/components/Sidebar/Sidebar.vue +19 -15
- package/src/components/Sidebar/stories/Example.vue +88 -0
- package/src/components/Slider/Slider.vue +38 -0
- package/src/components/Slider/index.ts +1 -0
- package/src/components/Slider/stories/Example.vue +11 -0
- package/src/components/Slider/stories/Range.vue +11 -0
- package/src/components/Slider/types.ts +5 -0
- package/src/components/Switch/Switch.vue +5 -1
- package/src/components/Switch/stories/Example.vue +7 -0
- package/src/components/Switch/stories/Labels.vue +17 -0
- package/src/components/Switch/types.ts +12 -1
- package/src/components/TabButtons/TabButtons.story.vue +17 -17
- package/src/components/Tabs/Tabs.vue +10 -0
- package/src/components/Tabs/stories/Icons.vue +40 -0
- package/src/components/Tabs/stories/Orientation.vue +44 -0
- package/src/components/Tabs/types.ts +13 -3
- package/src/components/TextEditor/TextEditor.vue +42 -170
- package/src/components/TextEditor/commands.js +55 -39
- package/src/components/TextEditor/{FontColor.vue → components/FontColor.vue} +2 -2
- package/src/components/TextEditor/{ImageViewerModal.vue → components/ImageViewerModal.vue} +4 -4
- package/src/components/TextEditor/{InsertImage.vue → components/InsertImage.vue} +1 -1
- package/src/components/TextEditor/{LinkPopup.vue → components/LinkPopup.vue} +4 -4
- package/src/components/TextEditor/components/MediaNodeView.vue +377 -0
- package/src/components/TextEditor/components/Menu.vue +206 -0
- package/src/components/TextEditor/{TextEditorBubbleMenu.vue → components/TextEditorBubbleMenu.vue} +5 -13
- package/src/components/TextEditor/{TextEditorFixedMenu.vue → components/TextEditorFixedMenu.vue} +10 -6
- package/src/components/TextEditor/{TextEditorFloatingMenu.vue → components/TextEditorFloatingMenu.vue} +4 -3
- package/src/components/TextEditor/components/index.js +0 -0
- package/src/components/TextEditor/extensions/code-block.ts +2 -2
- package/src/components/TextEditor/extensions/content-paste-extension.ts +45 -37
- package/src/components/TextEditor/extensions/copy-styles.ts +159 -0
- package/src/components/TextEditor/extensions/highlight/highlight-styles.css +0 -1
- package/src/components/TextEditor/extensions/iframe/InsertIframe.vue +13 -3
- package/src/components/TextEditor/extensions/image/image-extension.ts +26 -5
- package/src/components/TextEditor/extensions/image-group/ImageGroupNodeView.vue +18 -53
- package/src/components/TextEditor/extensions/image-group/image-group-extension.ts +71 -0
- package/src/components/TextEditor/{image-viewer-extension.ts → extensions/image-viewer-extension.ts} +1 -1
- package/src/components/TextEditor/extensions/link/index.ts +1 -0
- package/src/components/TextEditor/{link-extension.ts → extensions/link/link-extension.ts} +5 -15
- package/src/components/TextEditor/{linkPasteHandler.ts → extensions/link/linkPasteHandler.ts} +1 -1
- package/src/components/TextEditor/extensions/mention/mention-extension.ts +22 -1
- package/src/components/TextEditor/extensions/slash-commands/slash-commands-extension.ts +13 -0
- package/src/components/TextEditor/extensions/tag/index.ts +1 -0
- package/src/components/TextEditor/extensions/tag/tag-extension.ts +14 -0
- package/src/components/TextEditor/extensions/toc-node/TocNodeView.vue +438 -0
- package/src/components/TextEditor/extensions/toc-node/index.ts +3 -0
- package/src/components/TextEditor/extensions/toc-node/toc-node-extension.ts +166 -0
- package/src/components/TextEditor/extensions/video-extension.ts +603 -0
- package/src/components/TextEditor/index.ts +3 -3
- package/src/components/TextEditor/stories/Comment.vue +53 -0
- package/src/components/TextEditor/stories/Example.vue +33 -0
- package/src/components/TextEditor/style.css +164 -0
- package/src/components/TextEditor/types.ts +37 -1
- package/src/components/TextInput/TextInput.vue +9 -1
- package/src/components/TextInput/stories/List.vue +71 -0
- package/src/components/TextInput/types.ts +17 -0
- package/src/components/Textarea/stories/Variants.vue +8 -0
- package/src/components/Textarea/types.ts +17 -0
- package/src/components/TimePicker/TimePicker.vue +18 -0
- package/src/components/TimePicker/stories/Basic.vue +15 -0
- package/src/components/TimePicker/stories/CustomOptions.vue +26 -0
- package/src/components/TimePicker/stories/Range.vue +15 -0
- package/src/components/TimePicker/stories/TwentyFour.vue +11 -0
- package/src/components/TimePicker/types.ts +38 -0
- package/src/components/Tooltip/Tooltip.vue +21 -0
- package/src/components/Tooltip/stories/Examples.vue +9 -0
- package/src/components/Tooltip/stories/Slots.vue +16 -0
- package/src/components/Tooltip/types.ts +21 -0
- package/src/components/Tree/Tree.vue +5 -0
- package/src/components/Tree/{Tree.story.vue → stories/Example.vue} +15 -25
- package/src/components/Tree/types.ts +34 -6
- package/src/data-fetching/docStore.ts +17 -5
- package/src/data-fetching/useDoc/useDoc.ts +19 -15
- package/src/data-fetching/useList/useList.ts +8 -2
- package/src/directives/focus.ts +46 -0
- package/src/env.d.ts +0 -1
- package/src/index.ts +5 -4
- package/src/resources/documentResource.js +1 -0
- package/src/utils/tailwind.config.js +1 -1
- package/tailwind/index.js +1 -0
- package/vite/melonProxy.js +1 -1
- package/src/components/Alert/Alert.story.vue +0 -78
- package/src/components/Autocomplete/Autocomplete.story.vue +0 -104
- package/src/components/Avatar/Avatar.story.vue +0 -28
- package/src/components/Badge/Badge.story.vue +0 -26
- package/src/components/Breadcrumbs/Breadcrumbs.story.vue +0 -73
- package/src/components/Button/Button.story.vue +0 -34
- package/src/components/Calendar/Calendar.story.md +0 -197
- package/src/components/Calendar/Calendar.story.vue +0 -191
- package/src/components/Checkbox/Checkbox.story.vue +0 -22
- package/src/components/CircularProgressBar/CircularProgressBar.story.md +0 -43
- package/src/components/Combobox/Combobox.story.vue +0 -348
- package/src/components/DatePicker/DatePicker.story.vue +0 -36
- package/src/components/Dialog/Dialog.story.vue +0 -229
- package/src/components/Dropdown/Dropdown.story.vue +0 -225
- package/src/components/ErrorMessage/ErrorMessage.story.vue +0 -28
- package/src/components/FileUploader/FileUploader.story.vue +0 -34
- package/src/components/ListView/ListView.story.md +0 -137
- package/src/components/ListView/ListView.story.vue +0 -437
- package/src/components/MonthPicker/MonthPicker.story.vue +0 -21
- package/src/components/MultiSelect/MultiSelect.story.vue +0 -68
- package/src/components/Password/Password.story.vue +0 -14
- package/src/components/Popover/Popover.story.vue +0 -29
- package/src/components/Progress/Progress.story.vue +0 -34
- package/src/components/Rating/Rating.story.vue +0 -18
- package/src/components/Select/Select.story.vue +0 -78
- package/src/components/Sidebar/Sidebar.story.vue +0 -80
- package/src/components/Spinner/Spinner.story.vue +0 -14
- package/src/components/Spinner/Spinner.vue +0 -50
- package/src/components/Spinner/index.ts +0 -1
- package/src/components/Switch/Switch.story.vue +0 -59
- package/src/components/Tabs/Tabs.story.vue +0 -100
- package/src/components/TextEditor/Menu.vue +0 -110
- package/src/components/TextEditor/TextEditor.story.vue +0 -89
- package/src/components/TextEditor/extensions/image/ImageNodeView.vue +0 -263
- package/src/components/TextEditor/extensions/list-extension.ts +0 -32
- package/src/components/TextEditor/icons/align-center.vue +0 -14
- package/src/components/TextEditor/icons/align-justify.vue +0 -14
- package/src/components/TextEditor/icons/align-left.vue +0 -14
- package/src/components/TextEditor/icons/align-right.vue +0 -14
- package/src/components/TextEditor/icons/arrow-go-back-line.vue +0 -14
- package/src/components/TextEditor/icons/arrow-go-forward-line.vue +0 -14
- package/src/components/TextEditor/icons/bold.vue +0 -14
- package/src/components/TextEditor/icons/code-view.vue +0 -14
- package/src/components/TextEditor/icons/double-quotes-r.vue +0 -14
- package/src/components/TextEditor/icons/font-color.vue +0 -14
- package/src/components/TextEditor/icons/format-clear.vue +0 -14
- package/src/components/TextEditor/icons/h-1.vue +0 -14
- package/src/components/TextEditor/icons/h-2.vue +0 -14
- package/src/components/TextEditor/icons/h-3.vue +0 -14
- package/src/components/TextEditor/icons/h-4.vue +0 -14
- package/src/components/TextEditor/icons/h-5.vue +0 -14
- package/src/components/TextEditor/icons/h-6.vue +0 -14
- package/src/components/TextEditor/icons/image-add-line.vue +0 -14
- package/src/components/TextEditor/icons/italic.vue +0 -14
- package/src/components/TextEditor/icons/link.vue +0 -14
- package/src/components/TextEditor/icons/list-ordered.vue +0 -14
- package/src/components/TextEditor/icons/list-task.vue +0 -20
- package/src/components/TextEditor/icons/list-unordered.vue +0 -14
- package/src/components/TextEditor/icons/readme.md +0 -1
- package/src/components/TextEditor/icons/separator.vue +0 -14
- package/src/components/TextEditor/icons/strikethrough.vue +0 -14
- package/src/components/TextEditor/icons/table-2.vue +0 -14
- package/src/components/TextEditor/icons/text.vue +0 -11
- package/src/components/TextEditor/icons/underline.vue +0 -14
- package/src/components/TextEditor/icons/video-add-line.vue +0 -14
- package/src/components/TextEditor/mention.js +0 -72
- package/src/components/TextEditor/video-extension.ts +0 -162
- package/src/components/TextInput/TextInput.story.vue +0 -81
- package/src/components/Textarea/Textarea.story.vue +0 -27
- package/src/components/TimePicker/TimePicker.story.vue +0 -138
- package/src/components/Tooltip/Tooltip.story.vue +0 -51
- package/src/components/Tree/Tree.story.md +0 -56
- /package/src/components/TextEditor/{CodeBlockComponent.vue → components/CodeBlockComponent.vue} +0 -0
- /package/src/components/TextEditor/{InsertLink.vue → components/InsertLink.vue} +0 -0
- /package/src/components/TextEditor/{InsertVideo.vue → components/InsertVideo.vue} +0 -0
- /package/src/components/TextEditor/{MentionList.vue → components/MentionList.vue} +0 -0
- /package/{src/tailwind → tailwind}/colorPalette.js +0 -0
- /package/{src/tailwind → tailwind}/colors.js +0 -0
- /package/{src/tailwind → tailwind}/colors.json +0 -0
- /package/{src/tailwind → tailwind}/figma-variables-to-colors.js +0 -0
- /package/{src/tailwind → tailwind}/plugin.js +0 -0
- /package/{src/tailwind → tailwind}/preset.js +0 -0
- /package/{src/tailwind → tailwind}/update-tailwind-classes.js +0 -0
package/icons/Icon.vue
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { onMounted } from 'vue';
|
|
3
|
+
|
|
4
|
+
const props = defineProps<{ name: string }>()
|
|
5
|
+
|
|
6
|
+
onMounted(() => {
|
|
7
|
+
if (!document.getElementById('lucide-sprite')) {
|
|
8
|
+
console.warn(
|
|
9
|
+
'Lucide sprite not found! Make sure to use the spritePlugin.'
|
|
10
|
+
)
|
|
11
|
+
}
|
|
12
|
+
})
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<template>
|
|
16
|
+
<svg
|
|
17
|
+
width="24"
|
|
18
|
+
height="24"
|
|
19
|
+
viewBox="0 0 24 24"
|
|
20
|
+
fill="none"
|
|
21
|
+
stroke="currentColor"
|
|
22
|
+
stroke-width="1.5"
|
|
23
|
+
stroke-linecap="round"
|
|
24
|
+
stroke-linejoin="round"
|
|
25
|
+
>
|
|
26
|
+
<use :href="`#${props.name}`" />
|
|
27
|
+
</svg>
|
|
28
|
+
</template>
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { ref, reactive } from 'vue'
|
|
3
|
+
import IconPicker from './IconPicker.vue'
|
|
4
|
+
|
|
5
|
+
const basicValue = ref(null)
|
|
6
|
+
const preselectedValue = ref('star')
|
|
7
|
+
const disabledValue = ref('')
|
|
8
|
+
|
|
9
|
+
const state = reactive({
|
|
10
|
+
disabled: false,
|
|
11
|
+
placeholder: 'Select an icon...',
|
|
12
|
+
openOnClick: true,
|
|
13
|
+
openOnFocus: true,
|
|
14
|
+
placement: 'start',
|
|
15
|
+
})
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<template>
|
|
19
|
+
<Story title="IconPicker" :layout="{ type: 'grid', width: 400 }">
|
|
20
|
+
<Variant title="Basic Usage">
|
|
21
|
+
<div class="p-4">
|
|
22
|
+
<label class="block text-sm font-medium mb-2">Basic Icon Picker</label>
|
|
23
|
+
<IconPicker
|
|
24
|
+
v-model="basicValue"
|
|
25
|
+
:placeholder="state.placeholder"
|
|
26
|
+
:disabled="state.disabled"
|
|
27
|
+
:open-on-click="state.openOnClick"
|
|
28
|
+
:open-on-focus="state.openOnFocus"
|
|
29
|
+
:placement="state.placement"
|
|
30
|
+
/>
|
|
31
|
+
<div class="mt-2 text-sm text-gray-600">
|
|
32
|
+
Selected: {{ basicValue || 'None' }}
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
</Variant>
|
|
36
|
+
|
|
37
|
+
<Variant title="Subtle Variant (Default)">
|
|
38
|
+
<div class="p-4">
|
|
39
|
+
<label class="block text-sm font-medium mb-2">Subtle Variant</label>
|
|
40
|
+
<IconPicker
|
|
41
|
+
variant="subtle"
|
|
42
|
+
v-model="basicValue"
|
|
43
|
+
:placeholder="state.placeholder"
|
|
44
|
+
:disabled="state.disabled"
|
|
45
|
+
/>
|
|
46
|
+
<div class="mt-2 text-sm text-gray-600">
|
|
47
|
+
Selected: {{ basicValue || 'None' }}
|
|
48
|
+
</div>
|
|
49
|
+
</div>
|
|
50
|
+
</Variant>
|
|
51
|
+
|
|
52
|
+
<Variant title="Outline Variant">
|
|
53
|
+
<div class="p-4">
|
|
54
|
+
<label class="block text-sm font-medium mb-2">Outline Variant</label>
|
|
55
|
+
<IconPicker
|
|
56
|
+
variant="outline"
|
|
57
|
+
v-model="basicValue"
|
|
58
|
+
:placeholder="state.placeholder"
|
|
59
|
+
:disabled="state.disabled"
|
|
60
|
+
/>
|
|
61
|
+
<div class="mt-2 text-sm text-gray-600">
|
|
62
|
+
Selected: {{ basicValue || 'None' }}
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
</Variant>
|
|
66
|
+
|
|
67
|
+
<Variant title="Ghost Variant">
|
|
68
|
+
<div class="p-4">
|
|
69
|
+
<label class="block text-sm font-medium mb-2">Ghost Variant</label>
|
|
70
|
+
<IconPicker
|
|
71
|
+
variant="ghost"
|
|
72
|
+
v-model="basicValue"
|
|
73
|
+
:placeholder="state.placeholder"
|
|
74
|
+
:disabled="state.disabled"
|
|
75
|
+
/>
|
|
76
|
+
<div class="mt-2 text-sm text-gray-600">
|
|
77
|
+
Selected: {{ basicValue || 'None' }}
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
</Variant>
|
|
81
|
+
|
|
82
|
+
<Variant title="Pre-selected Icon">
|
|
83
|
+
<div class="p-4">
|
|
84
|
+
<label class="block text-sm font-medium mb-2">Pre-selected Icon</label>
|
|
85
|
+
<IconPicker
|
|
86
|
+
v-model="preselectedValue"
|
|
87
|
+
:placeholder="state.placeholder"
|
|
88
|
+
:disabled="state.disabled"
|
|
89
|
+
/>
|
|
90
|
+
<div class="mt-2 text-sm text-gray-600">
|
|
91
|
+
Selected: {{ preselectedValue || 'None' }}
|
|
92
|
+
</div>
|
|
93
|
+
</div>
|
|
94
|
+
</Variant>
|
|
95
|
+
|
|
96
|
+
<Variant title="Disabled State">
|
|
97
|
+
<div class="p-4">
|
|
98
|
+
<label class="block text-sm font-medium mb-2">Disabled Icon Picker</label>
|
|
99
|
+
<IconPicker
|
|
100
|
+
v-model="disabledValue"
|
|
101
|
+
placeholder="This is disabled"
|
|
102
|
+
:disabled="true"
|
|
103
|
+
/>
|
|
104
|
+
<div class="mt-2 text-sm text-gray-600">
|
|
105
|
+
Icon picker is disabled
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
</Variant>
|
|
109
|
+
|
|
110
|
+
<template #controls>
|
|
111
|
+
<HstText v-model="state.placeholder" title="Placeholder" />
|
|
112
|
+
<HstCheckbox v-model="state.disabled" title="Disabled" />
|
|
113
|
+
<HstCheckbox v-model="state.openOnClick" title="Open on Click" />
|
|
114
|
+
<HstCheckbox v-model="state.openOnFocus" title="Open on Focus" />
|
|
115
|
+
<HstSelect
|
|
116
|
+
v-model="state.placement"
|
|
117
|
+
title="Placement"
|
|
118
|
+
:options="[
|
|
119
|
+
{ value: 'start', label: 'Start' },
|
|
120
|
+
{ value: 'center', label: 'Center' },
|
|
121
|
+
{ value: 'end', label: 'End' }
|
|
122
|
+
]"
|
|
123
|
+
/>
|
|
124
|
+
</template>
|
|
125
|
+
</Story>
|
|
126
|
+
</template>
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import {
|
|
3
|
+
ComboboxAnchor,
|
|
4
|
+
ComboboxContent,
|
|
5
|
+
ComboboxEmpty,
|
|
6
|
+
ComboboxInput,
|
|
7
|
+
ComboboxPortal,
|
|
8
|
+
ComboboxRoot,
|
|
9
|
+
ComboboxTrigger,
|
|
10
|
+
ComboboxViewport,
|
|
11
|
+
} from 'reka-ui'
|
|
12
|
+
import { computed, onMounted, ref, watch } from 'vue'
|
|
13
|
+
import Icon from './Icon.vue'
|
|
14
|
+
|
|
15
|
+
export interface IconPickerProps {
|
|
16
|
+
variant?: 'subtle' | 'outline' | 'ghost'
|
|
17
|
+
modelValue?: string | null
|
|
18
|
+
placeholder?: string
|
|
19
|
+
disabled?: boolean
|
|
20
|
+
openOnFocus?: boolean
|
|
21
|
+
openOnClick?: boolean
|
|
22
|
+
placement?: 'start' | 'center' | 'end'
|
|
23
|
+
maxIcons?: number
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const props = withDefaults(defineProps<IconPickerProps>(), {
|
|
27
|
+
variant: 'subtle',
|
|
28
|
+
openOnClick: true,
|
|
29
|
+
openOnFocus: true,
|
|
30
|
+
maxIcons: 100,
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
const emit = defineEmits(['update:modelValue', 'focus', 'blur', 'input'])
|
|
34
|
+
|
|
35
|
+
const searchTerm = ref(getLabel(props.modelValue || ''))
|
|
36
|
+
const internalModelValue = ref(props.modelValue)
|
|
37
|
+
const isOpen = ref(false)
|
|
38
|
+
const iconNames = ref<string[]>([])
|
|
39
|
+
|
|
40
|
+
watch(
|
|
41
|
+
() => props.modelValue,
|
|
42
|
+
(newValue) => {
|
|
43
|
+
internalModelValue.value = newValue
|
|
44
|
+
searchTerm.value = newValue ? getLabel(newValue) : ''
|
|
45
|
+
},
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
onMounted(() => {
|
|
49
|
+
const spriteContainer = document.getElementById('lucide-sprite')
|
|
50
|
+
if (!spriteContainer) {
|
|
51
|
+
console.warn('Lucide sprite not found! Make sure to use the spritePlugin.')
|
|
52
|
+
return
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const symbols = spriteContainer.getElementsByTagName('symbol')
|
|
56
|
+
const names: string[] = []
|
|
57
|
+
for (let i = 0; i < symbols.length; i++) {
|
|
58
|
+
const symbol = symbols[i]
|
|
59
|
+
names.push(symbol.id)
|
|
60
|
+
}
|
|
61
|
+
iconNames.value = names
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
function getLabel(name: string) {
|
|
65
|
+
return name.replace(/-/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase())
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const filteredIcons = computed(() => {
|
|
69
|
+
if (!searchTerm.value) return iconNames.value
|
|
70
|
+
const lowerSearch = searchTerm.value.toLowerCase()
|
|
71
|
+
return iconNames.value.filter((name) =>
|
|
72
|
+
name.replace(/-/g, ' ').toLowerCase().includes(lowerSearch),
|
|
73
|
+
)
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
const onUpdateModelValue = (value: string | null) => {
|
|
77
|
+
internalModelValue.value = value
|
|
78
|
+
emit('update:modelValue', value)
|
|
79
|
+
searchTerm.value = value ? getLabel(value) : ''
|
|
80
|
+
isOpen.value = false
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const handleInputChange = (event: Event) => {
|
|
84
|
+
const target = event.target as HTMLInputElement
|
|
85
|
+
searchTerm.value = target.value
|
|
86
|
+
|
|
87
|
+
if (searchTerm.value === '') {
|
|
88
|
+
internalModelValue.value = null
|
|
89
|
+
emit('update:modelValue', null)
|
|
90
|
+
}
|
|
91
|
+
emit('input', searchTerm.value)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const handleOpenChange = (open: boolean) => {
|
|
95
|
+
isOpen.value = open
|
|
96
|
+
if (!open) {
|
|
97
|
+
searchTerm.value = internalModelValue.value
|
|
98
|
+
? getLabel(internalModelValue.value)
|
|
99
|
+
: ''
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const handleClick = (event: MouseEvent) => {
|
|
104
|
+
if (props.openOnClick) {
|
|
105
|
+
isOpen.value = true
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const handleFocus = (event: FocusEvent) => {
|
|
110
|
+
if (props.openOnFocus) {
|
|
111
|
+
isOpen.value = true
|
|
112
|
+
}
|
|
113
|
+
emit('focus', event)
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
const handleBlur = (event: FocusEvent) => {
|
|
117
|
+
emit('blur', event)
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
const handleIconClick = (iconName: string) => {
|
|
121
|
+
onUpdateModelValue(iconName)
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const reset = () => {
|
|
125
|
+
searchTerm.value = ''
|
|
126
|
+
internalModelValue.value = null
|
|
127
|
+
emit('update:modelValue', null)
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
const variantClasses = computed(() => {
|
|
131
|
+
const borderCss =
|
|
132
|
+
'border focus-within:border-outline-gray-4 focus-within:ring-2 focus-within:ring-outline-gray-3'
|
|
133
|
+
|
|
134
|
+
return {
|
|
135
|
+
subtle: `${borderCss} bg-surface-gray-2 hover:bg-surface-gray-3 border-transparent`,
|
|
136
|
+
outline: `${borderCss} border-outline-gray-2`,
|
|
137
|
+
ghost: '',
|
|
138
|
+
}[props.variant]
|
|
139
|
+
})
|
|
140
|
+
|
|
141
|
+
defineExpose({
|
|
142
|
+
reset,
|
|
143
|
+
})
|
|
144
|
+
</script>
|
|
145
|
+
|
|
146
|
+
<template>
|
|
147
|
+
<div class="relative">
|
|
148
|
+
<ComboboxRoot
|
|
149
|
+
:model-value="internalModelValue"
|
|
150
|
+
@update:modelValue="onUpdateModelValue"
|
|
151
|
+
@update:open="handleOpenChange"
|
|
152
|
+
:ignore-filter="true"
|
|
153
|
+
:open="isOpen"
|
|
154
|
+
>
|
|
155
|
+
<ComboboxAnchor
|
|
156
|
+
class="flex h-7 w-full items-center justify-between gap-2 rounded px-2 py-1 transition-colors"
|
|
157
|
+
:class="{
|
|
158
|
+
'opacity-50 pointer-events-none': disabled,
|
|
159
|
+
[variantClasses]: true,
|
|
160
|
+
}"
|
|
161
|
+
@click="handleClick"
|
|
162
|
+
>
|
|
163
|
+
<div class="flex items-center gap-2 flex-1 overflow-hidden">
|
|
164
|
+
<Icon
|
|
165
|
+
:name="internalModelValue || 'circle-dashed'"
|
|
166
|
+
class="w-4 h-4 flex-shrink-0"
|
|
167
|
+
/>
|
|
168
|
+
<ComboboxInput
|
|
169
|
+
:value="searchTerm"
|
|
170
|
+
@input="handleInputChange"
|
|
171
|
+
@focus="handleFocus"
|
|
172
|
+
@blur="handleBlur"
|
|
173
|
+
class="bg-transparent p-0 focus:outline-0 border-0 focus:border-0 focus:ring-0 text-base text-ink-gray-8 h-full placeholder:text-ink-gray-4 w-full"
|
|
174
|
+
:placeholder="placeholder || 'Select an icon...'"
|
|
175
|
+
:disabled="disabled"
|
|
176
|
+
autocomplete="off"
|
|
177
|
+
/>
|
|
178
|
+
</div>
|
|
179
|
+
<ComboboxTrigger :disabled="disabled">
|
|
180
|
+
<Icon name="chevron-down" class="h-4 w-4 text-ink-gray-5" />
|
|
181
|
+
</ComboboxTrigger>
|
|
182
|
+
</ComboboxAnchor>
|
|
183
|
+
<ComboboxPortal>
|
|
184
|
+
<ComboboxContent
|
|
185
|
+
class="z-10 w-60 mt-1 bg-surface-modal overflow-hidden rounded-lg shadow-2xl"
|
|
186
|
+
position="popper"
|
|
187
|
+
@openAutoFocus.prevent
|
|
188
|
+
@closeAutoFocus.prevent
|
|
189
|
+
:align="props.placement || 'start'"
|
|
190
|
+
>
|
|
191
|
+
<ComboboxViewport class="max-h-60 overflow-auto p-2">
|
|
192
|
+
<ComboboxEmpty
|
|
193
|
+
v-if="filteredIcons.length === 0"
|
|
194
|
+
class="text-ink-gray-5 text-base text-center py-1.5 px-2.5"
|
|
195
|
+
>
|
|
196
|
+
<template v-if="searchTerm">
|
|
197
|
+
No icons found for "{{ searchTerm }}"
|
|
198
|
+
</template>
|
|
199
|
+
<template v-else> No icons available. </template>
|
|
200
|
+
</ComboboxEmpty>
|
|
201
|
+
<div v-if="filteredIcons.length > 0" class="flex flex-wrap">
|
|
202
|
+
<button
|
|
203
|
+
v-for="iconName in filteredIcons.slice(0, props.maxIcons)"
|
|
204
|
+
:key="iconName"
|
|
205
|
+
@click="handleIconClick(iconName)"
|
|
206
|
+
type="button"
|
|
207
|
+
class="w-8 h-8 flex items-center justify-center rounded hover:bg-surface-gray-3 transition-colors"
|
|
208
|
+
:class="{
|
|
209
|
+
'bg-surface-gray-3': internalModelValue === iconName,
|
|
210
|
+
}"
|
|
211
|
+
:title="getLabel(iconName)"
|
|
212
|
+
>
|
|
213
|
+
<Icon :name="iconName" class="w-4 h-4" />
|
|
214
|
+
</button>
|
|
215
|
+
</div>
|
|
216
|
+
</ComboboxViewport>
|
|
217
|
+
</ComboboxContent>
|
|
218
|
+
</ComboboxPortal>
|
|
219
|
+
</ComboboxRoot>
|
|
220
|
+
</div>
|
|
221
|
+
</template>
|
package/icons/index.ts
CHANGED
|
@@ -8,3 +8,8 @@ export { default as LightningIcon } from './LightningIcon.vue'
|
|
|
8
8
|
export { default as MaximizeIcon } from './MaximizeIcon.vue'
|
|
9
9
|
export { default as MinimizeIcon } from './MinimizeIcon.vue'
|
|
10
10
|
export { default as StepsIcon } from './StepsIcon.vue'
|
|
11
|
+
|
|
12
|
+
// Lucide Icons
|
|
13
|
+
export { default as Icon } from './Icon.vue'
|
|
14
|
+
export { default as IconPicker } from './IconPicker.vue'
|
|
15
|
+
export { default as spritePlugin } from './spritePlugin'
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// @ts-ignore
|
|
2
|
+
import sprite from 'lucide-static/sprite.svg?raw'
|
|
3
|
+
import type { App } from 'vue'
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
install(app: App) {
|
|
7
|
+
const div = document.createElement('div')
|
|
8
|
+
div.id = 'lucide-sprite'
|
|
9
|
+
div.style.display = 'none'
|
|
10
|
+
div.innerHTML = sprite
|
|
11
|
+
document.body.prepend(div)
|
|
12
|
+
},
|
|
13
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div class="w-[85%] lg:w-[700px] mx-auto py-12 space-y-8">
|
|
2
|
+
<div class="w-[85%] lg:w-[700px] mx-auto py-12 space-y-8 text-base">
|
|
3
3
|
<div class="flex justify-between">
|
|
4
4
|
<div class="space-y-2">
|
|
5
5
|
<div class="text-lg font-semibold text-ink-gray-9">
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
{{ data?.status }}
|
|
11
11
|
</Badge>
|
|
12
12
|
</div>
|
|
13
|
-
<div class="leading-5">
|
|
13
|
+
<div class="leading-5 text-ink-gray-7">
|
|
14
14
|
Change the mapping of columns from your file to fields in the system
|
|
15
15
|
</div>
|
|
16
16
|
</div>
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
variant="solid" @click="startImport" />
|
|
18
18
|
<Button v-else-if="listRoute" label="Done" @click="redirectToList()" />
|
|
19
19
|
</div>
|
|
20
|
-
<div class="leading-5">
|
|
20
|
+
<div class="leading-5 text-ink-gray-7">
|
|
21
21
|
Verify the data before starting the import process
|
|
22
22
|
</div>
|
|
23
23
|
</div>
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
<div class="text-ink-gray-5 text-sm">
|
|
27
27
|
Column Mapping
|
|
28
28
|
</div>
|
|
29
|
-
<div class="border rounded-md bg-surface-gray-2 p-4 space-y-4 text-sm">
|
|
29
|
+
<div class="border rounded-md bg-surface-gray-2 p-4 space-y-4 text-sm text-ink-gray-7">
|
|
30
30
|
<div v-for="map in mapping" class="grid grid-cols-[40%,10%,40%] lg:grid-cols-3 space-x-3 items-center">
|
|
31
31
|
<div class="">
|
|
32
32
|
{{ map[0] }}
|
|
@@ -41,6 +41,18 @@
|
|
|
41
41
|
</div>
|
|
42
42
|
</div>
|
|
43
43
|
|
|
44
|
+
<div v-if="warnings.length" class="space-y-2">
|
|
45
|
+
<div class="text-ink-gray-5 text-sm">
|
|
46
|
+
Warnings
|
|
47
|
+
</div>
|
|
48
|
+
<div class="rounded-md bg-surface-amber-2 p-2 space-y-2 text-xs">
|
|
49
|
+
<div v-for="warning in warnings" class="flex items-center space-x-2">
|
|
50
|
+
<FeatherIcon name="alert-circle" class="size-3 text-ink-amber-3" />
|
|
51
|
+
<div v-html="warning.message" class="text-ink-amber-3"></div>
|
|
52
|
+
</div>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
|
|
44
56
|
<div v-if="preview?.data?.length" class="border rounded-md overflow-x-auto">
|
|
45
57
|
<table class="divide-y">
|
|
46
58
|
<thead class="rounded-t-md">
|
|
@@ -325,6 +337,10 @@ const mapping = computed(() => {
|
|
|
325
337
|
return warningMap;
|
|
326
338
|
})
|
|
327
339
|
|
|
340
|
+
const warnings = computed(() => {
|
|
341
|
+
return preview.value?.warnings?.filter((warning: any) => warning.type != "info") || [];
|
|
342
|
+
})
|
|
343
|
+
|
|
328
344
|
const listRoute = computed(() => {
|
|
329
345
|
return props.doctypeMap[props.data.reference_doctype]?.listRoute
|
|
330
346
|
})
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
class="hidden"
|
|
39
39
|
@change="(e) => uploadFile(e)"
|
|
40
40
|
/>
|
|
41
|
-
<div class="leading-5">
|
|
41
|
+
<div class="leading-5 text-ink-gray-9">
|
|
42
42
|
Drag and drop a CSV file, or upload from your
|
|
43
43
|
<span @click="openFileSelector" class="cursor-pointer font-semibold hover:underline">Device</span>
|
|
44
44
|
or
|
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
<div v-else-if="importFile" class="h-[300px] flex items-center justify-center bg-surface-gray-1 border border-dashed border-outline-gray-3 rounded-md">
|
|
68
68
|
<div class="w-4/5 lg:w-2/5 bg-surface-white border rounded-md p-2 flex items-center justify-between items-center">
|
|
69
69
|
<div class="space-y-2">
|
|
70
|
-
<div class="font-medium leading-5">
|
|
70
|
+
<div class="font-medium leading-5 text-ink-gray-9">
|
|
71
71
|
{{ importFile.file_name || importFile.split("/").pop() }}
|
|
72
72
|
</div>
|
|
73
73
|
<div v-if="importFile.file_size" class="text-ink-gray-6">
|
package/melon/Filter/Filter.vue
CHANGED
package/melon/Filter/utils.ts
CHANGED
|
@@ -140,7 +140,7 @@ export const getValueControl = (row: StateRow) => {
|
|
|
140
140
|
}
|
|
141
141
|
|
|
142
142
|
if (typeSelect.includes(fieldType) || typeCheck.includes(fieldType)) {
|
|
143
|
-
let _options = options || ['
|
|
143
|
+
let _options = options || ['Yes', 'No']
|
|
144
144
|
|
|
145
145
|
return h(Select, { placeholder: 'Select Option', options: _options })
|
|
146
146
|
}
|
|
@@ -225,9 +225,10 @@ export const parseFilters = (filters: any) => {
|
|
|
225
225
|
|
|
226
226
|
return _filters.map(transformIn).reduce((acc, cur) => {
|
|
227
227
|
if (['equals', '='].includes(cur.operator)) {
|
|
228
|
-
cur.value = cur.
|
|
229
|
-
}
|
|
230
|
-
|
|
228
|
+
cur.value = cur.value == 'Yes' ? true : cur.value == 'No' ? false : cur.value
|
|
229
|
+
} else if (cur.operator === 'between') {
|
|
230
|
+
cur.value = [...cur.value.split(',')]
|
|
231
|
+
}
|
|
231
232
|
|
|
232
233
|
return [
|
|
233
234
|
...acc,
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { ref } from 'vue'
|
|
3
|
+
import { useRouter } from 'vue-router'
|
|
4
|
+
|
|
5
|
+
const router = useRouter()
|
|
6
|
+
|
|
7
|
+
router.afterEach(() => {
|
|
8
|
+
open.value = false
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
defineProps<{
|
|
12
|
+
apps: Array<{
|
|
13
|
+
title: string
|
|
14
|
+
logo: string
|
|
15
|
+
route: string
|
|
16
|
+
}>
|
|
17
|
+
}>()
|
|
18
|
+
|
|
19
|
+
const open = ref(false)
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<template>
|
|
23
|
+
<div class="fixed left-0 top-0 h-screen w-3 z-40" @mouseenter="open = true" />
|
|
24
|
+
<aside
|
|
25
|
+
class="fixed left-0 top-0 h-screen z-50 transition-transform duration-300 ease-out bg-surface-white border-r border-gray-200 px-2"
|
|
26
|
+
:class="!open && '-translate-x-full'"
|
|
27
|
+
@mouseleave="open = false"
|
|
28
|
+
>
|
|
29
|
+
<div class="flex h-full items-center justify-center">
|
|
30
|
+
<div class="flex flex-col gap-6">
|
|
31
|
+
<a
|
|
32
|
+
v-for="app in apps"
|
|
33
|
+
:key="app.route"
|
|
34
|
+
:href="app.route"
|
|
35
|
+
:title="app.title"
|
|
36
|
+
class="group flex items-center justify-center rounded-md hover:shadow-sm transition"
|
|
37
|
+
>
|
|
38
|
+
<img
|
|
39
|
+
:src="app.logo"
|
|
40
|
+
:alt="app.title"
|
|
41
|
+
class="size-7 opacity-80 group-hover:opacity-100"
|
|
42
|
+
/>
|
|
43
|
+
</a>
|
|
44
|
+
</div>
|
|
45
|
+
</div>
|
|
46
|
+
</aside>
|
|
47
|
+
</template>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<svg
|
|
3
|
+
width="118"
|
|
4
|
+
height="118"
|
|
5
|
+
viewBox="0 0 118 118"
|
|
6
|
+
fill="none"
|
|
7
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
8
|
+
>
|
|
9
|
+
<path
|
|
10
|
+
d="M93.9278 0H23.1013C10.3428 0 0 10.3428 0 23.1013V93.9278C0 106.686 10.3428 117.029 23.1013 117.029H93.9278C106.686 117.029 117.029 106.686 117.029 93.9278V23.1013C117.029 10.3428 106.686 0 93.9278 0Z"
|
|
11
|
+
fill="#016E7D"
|
|
12
|
+
/>
|
|
13
|
+
<path
|
|
14
|
+
d="M80.1723 35.7545H59.7487L55.7059 28.2466H20.8965V38.7472H49.4056L53.4483 46.2551H82.955C83.9525 46.2551 84.7926 47.0951 84.7926 48.0927V76.4968C84.7926 77.4943 83.9525 78.3344 82.955 78.3344H33.2347C32.2371 78.3344 31.3971 77.4943 31.3971 76.4968V50.5603H20.8965V73.6616C20.8965 82.0096 27.6694 88.835 36.0173 88.835H80.1723C88.5203 88.835 95.2932 82.0621 95.2932 73.6616V50.8754C95.2932 42.5274 88.5203 35.702 80.1723 35.702V35.7545Z"
|
|
15
|
+
fill="#EEFBFF"
|
|
16
|
+
/>
|
|
17
|
+
</svg>
|
|
18
|
+
</template>
|