@opendesign-plus-test/components 0.0.1-rc.82 → 0.0.1-rc.83

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 (218) hide show
  1. package/dist/chunk-OElCookieNotice.cjs.js +1 -1
  2. package/dist/chunk-OElCookieNotice.es.js +89 -77
  3. package/dist/components/activity/index.d.ts +9 -9
  4. package/dist/components/banner/index.d.ts +6 -6
  5. package/dist/components/events/index.d.ts +20 -20
  6. package/dist/components/header/OHeaderMobile.vue.d.ts +22 -22
  7. package/dist/components/header/components/HeaderNavMobile.vue.d.ts +3 -3
  8. package/dist/components/header/index.d.ts +27 -27
  9. package/dist/components/header-search/index.d.ts +13 -13
  10. package/dist/components/meeting/OMeetingForm.vue.d.ts +2 -0
  11. package/dist/components/meeting/OMeetingPlayback.vue.d.ts +6 -6
  12. package/dist/components/meeting/components/OMeetingPlaybackVideo.vue.d.ts +1 -1
  13. package/dist/components/meeting/index.d.ts +37 -31
  14. package/dist/components/meeting/types.d.ts +3 -0
  15. package/dist/components/search/index.d.ts +11 -11
  16. package/dist/components.cjs.js +35 -35
  17. package/dist/components.css +1 -1
  18. package/dist/components.es.js +6822 -6755
  19. package/dist/treeshaking/components/activity/index.d.ts +9 -9
  20. package/dist/treeshaking/components/banner/index.d.ts +6 -6
  21. package/dist/treeshaking/components/events/index.d.ts +20 -20
  22. package/dist/treeshaking/components/header/OHeaderMobile.vue.d.ts +22 -22
  23. package/dist/treeshaking/components/header/components/HeaderNavMobile.vue.d.ts +3 -3
  24. package/dist/treeshaking/components/header/index.d.ts +27 -27
  25. package/dist/treeshaking/components/header-search/index.d.ts +13 -13
  26. package/dist/treeshaking/components/meeting/OMeetingForm.vue.d.ts +2 -0
  27. package/dist/treeshaking/components/meeting/OMeetingForm.vue.mjs +104 -47
  28. package/dist/treeshaking/components/meeting/OMeetingMyCalendar.css +4 -0
  29. package/dist/treeshaking/components/meeting/OMeetingMyCalendar.vue.mjs +28 -12
  30. package/dist/treeshaking/components/meeting/OMeetingPlayback.vue.d.ts +6 -6
  31. package/dist/treeshaking/components/meeting/components/OMeetingPlaybackVideo.vue.d.ts +1 -1
  32. package/dist/treeshaking/components/meeting/index.d.ts +37 -31
  33. package/dist/treeshaking/components/meeting/types.d.ts +3 -0
  34. package/dist/treeshaking/components/search/index.d.ts +11 -11
  35. package/dist/treeshaking/i18n/en.mjs +6 -0
  36. package/dist/treeshaking/i18n/zh.mjs +8 -2
  37. package/package.json +4 -1
  38. package/dist/components/meeting/components/OMeetingCalendarSelector.vue.d.ts +0 -664
  39. package/dist/treeshaking/components/meeting/components/OMeetingCalendarSelector.vue.d.ts +0 -664
  40. package/docs/design.md +0 -27
  41. package/docs/design_banner.md +0 -41
  42. package/docs/design_section.md +0 -27
  43. package/plugins/css-inject-plugin.ts +0 -37
  44. package/scripts/build.js +0 -17
  45. package/scripts/generate-components-index.js +0 -62
  46. package/src/assets/events/svg-icons/icon-checked.svg +0 -3
  47. package/src/assets/events/svg-icons/icon-competition.svg +0 -7
  48. package/src/assets/events/svg-icons/icon-events.svg +0 -4
  49. package/src/assets/events/svg-icons/icon-release.svg +0 -4
  50. package/src/assets/events/svg-icons/icon-summit.svg +0 -4
  51. package/src/assets/meeting/empty.png +0 -0
  52. package/src/assets/meeting/svg-icons/icon-all.svg +0 -4
  53. package/src/assets/meeting/svg-icons/icon-backward.svg +0 -4
  54. package/src/assets/meeting/svg-icons/icon-calendar.svg +0 -3
  55. package/src/assets/meeting/svg-icons/icon-cancel.svg +0 -4
  56. package/src/assets/meeting/svg-icons/icon-captions.svg +0 -4
  57. package/src/assets/meeting/svg-icons/icon-close-captions.svg +0 -6
  58. package/src/assets/meeting/svg-icons/icon-close-fullscreen.svg +0 -6
  59. package/src/assets/meeting/svg-icons/icon-copy.svg +0 -4
  60. package/src/assets/meeting/svg-icons/icon-create.svg +0 -5
  61. package/src/assets/meeting/svg-icons/icon-delete.svg +0 -7
  62. package/src/assets/meeting/svg-icons/icon-empty.svg +0 -65
  63. package/src/assets/meeting/svg-icons/icon-event.svg +0 -4
  64. package/src/assets/meeting/svg-icons/icon-export.svg +0 -3
  65. package/src/assets/meeting/svg-icons/icon-forward.svg +0 -4
  66. package/src/assets/meeting/svg-icons/icon-fullscreen.svg +0 -6
  67. package/src/assets/meeting/svg-icons/icon-help.svg +0 -3
  68. package/src/assets/meeting/svg-icons/icon-important.svg +0 -4
  69. package/src/assets/meeting/svg-icons/icon-info.svg +0 -3
  70. package/src/assets/meeting/svg-icons/icon-meet.svg +0 -4
  71. package/src/assets/meeting/svg-icons/icon-meeting-message.svg +0 -5
  72. package/src/assets/meeting/svg-icons/icon-meeting.svg +0 -4
  73. package/src/assets/meeting/svg-icons/icon-play.svg +0 -5
  74. package/src/assets/meeting/svg-icons/icon-playing-tip.svg +0 -7
  75. package/src/assets/meeting/svg-icons/icon-playing.svg +0 -5
  76. package/src/assets/meeting/svg-icons/icon-question.svg +0 -4
  77. package/src/assets/meeting/svg-icons/icon-sound.svg +0 -5
  78. package/src/assets/meeting/svg-icons/icon-speaker.svg +0 -3
  79. package/src/assets/meeting/svg-icons/icon-summit.svg +0 -4
  80. package/src/assets/meeting/svg-icons/icon-telligent.svg +0 -3
  81. package/src/assets/meeting/svg-icons/icon-tip.svg +0 -3
  82. package/src/assets/meeting/svg-icons/icon-todo.svg +0 -4
  83. package/src/assets/meeting/transparent.png +0 -0
  84. package/src/assets/styles/element-plus.scss +0 -283
  85. package/src/assets/svg-icons/icon-arrow-left.svg +0 -3
  86. package/src/assets/svg-icons/icon-avatar-line.svg +0 -3
  87. package/src/assets/svg-icons/icon-caret-left.svg +0 -3
  88. package/src/assets/svg-icons/icon-caret-right.svg +0 -3
  89. package/src/assets/svg-icons/icon-chevron-down.svg +0 -3
  90. package/src/assets/svg-icons/icon-chevron-right.svg +0 -3
  91. package/src/assets/svg-icons/icon-chevron-up.svg +0 -3
  92. package/src/assets/svg-icons/icon-close.svg +0 -3
  93. package/src/assets/svg-icons/icon-delete-hover.svg +0 -4
  94. package/src/assets/svg-icons/icon-delete.svg +0 -7
  95. package/src/assets/svg-icons/icon-filter.svg +0 -3
  96. package/src/assets/svg-icons/icon-header-back.svg +0 -3
  97. package/src/assets/svg-icons/icon-header-delete.svg +0 -3
  98. package/src/assets/svg-icons/icon-header-menu.svg +0 -3
  99. package/src/assets/svg-icons/icon-header-person.svg +0 -3
  100. package/src/assets/svg-icons/icon-header-search.svg +0 -4
  101. package/src/assets/svg-icons/icon-image-close.svg +0 -4
  102. package/src/assets/svg-icons/icon-image-upload.svg +0 -3
  103. package/src/assets/svg-icons/icon-image-zoomin.svg +0 -3
  104. package/src/assets/svg-icons/icon-loading.svg +0 -4
  105. package/src/assets/svg-icons/icon-locale.svg +0 -3
  106. package/src/assets/svg-icons/icon-log-off.svg +0 -3
  107. package/src/assets/svg-icons/icon-message.svg +0 -3
  108. package/src/assets/svg-icons/icon-moon.svg +0 -3
  109. package/src/assets/svg-icons/icon-outlink.svg +0 -3
  110. package/src/assets/svg-icons/icon-overview.svg +0 -3
  111. package/src/assets/svg-icons/icon-refresh.svg +0 -3
  112. package/src/assets/svg-icons/icon-search.svg +0 -3
  113. package/src/assets/svg-icons/icon-setting.svg +0 -3
  114. package/src/assets/svg-icons/icon-sun.svg +0 -3
  115. package/src/assets/svg-icons/icon-tips.svg +0 -3
  116. package/src/components/activity/OActivityApproval.vue +0 -868
  117. package/src/components/activity/OActivityForm.vue +0 -548
  118. package/src/components/activity/OActivityMyCalendar.vue +0 -1540
  119. package/src/components/activity/composables/useActivityConfig.ts +0 -141
  120. package/src/components/activity/config.ts +0 -1
  121. package/src/components/activity/index.ts +0 -24
  122. package/src/components/activity/types.ts +0 -95
  123. package/src/components/banner/OBanner.vue +0 -288
  124. package/src/components/banner/OBannerContent.vue +0 -175
  125. package/src/components/banner/index.ts +0 -18
  126. package/src/components/banner/types.ts +0 -39
  127. package/src/components/common/AppAvatar.vue +0 -83
  128. package/src/components/common/ClientOnly.vue +0 -13
  129. package/src/components/common/ContentWrapper.vue +0 -82
  130. package/src/components/common/MoreText.vue +0 -124
  131. package/src/components/common/ThFilter.vue +0 -330
  132. package/src/components/config-provider/OPlusConfigProvider.vue +0 -32
  133. package/src/components/config-provider/index.ts +0 -10
  134. package/src/components/cookie-notice/OCookieNotice.vue +0 -575
  135. package/src/components/cookie-notice/index.ts +0 -10
  136. package/src/components/element-plus/OElCookieNotice.vue +0 -603
  137. package/src/components/element-plus/index.ts +0 -3
  138. package/src/components/events/OEventsApply.vue +0 -509
  139. package/src/components/events/OEventsCalendar.vue +0 -600
  140. package/src/components/events/OEventsList.vue +0 -461
  141. package/src/components/events/config.ts +0 -35
  142. package/src/components/events/index.ts +0 -24
  143. package/src/components/events/types.ts +0 -84
  144. package/src/components/events/utils.ts +0 -9
  145. package/src/components/footer/OFooter.vue +0 -577
  146. package/src/components/footer/index.ts +0 -10
  147. package/src/components/header/OHeader.vue +0 -157
  148. package/src/components/header/OHeaderMobile.vue +0 -184
  149. package/src/components/header/components/HeaderContent.vue +0 -1125
  150. package/src/components/header/components/HeaderNav.vue +0 -278
  151. package/src/components/header/components/HeaderNavMobile.vue +0 -380
  152. package/src/components/header/index.ts +0 -18
  153. package/src/components/header/types.ts +0 -96
  154. package/src/components/header-language-switcher/OHeaderLanguageSwitcher.vue +0 -249
  155. package/src/components/header-language-switcher/index.ts +0 -10
  156. package/src/components/header-search/OHeaderSearch.vue +0 -628
  157. package/src/components/header-search/index.ts +0 -10
  158. package/src/components/header-source-code/OHeaderSourceCode.vue +0 -151
  159. package/src/components/header-source-code/index.ts +0 -10
  160. package/src/components/header-theme/OHeaderTheme.vue +0 -132
  161. package/src/components/header-theme/index.ts +0 -10
  162. package/src/components/header-user/OHeaderUser.vue +0 -249
  163. package/src/components/header-user/index.ts +0 -10
  164. package/src/components/meeting/OMeetingCalendar.vue +0 -943
  165. package/src/components/meeting/OMeetingForm.vue +0 -1131
  166. package/src/components/meeting/OMeetingMyCalendar.vue +0 -1628
  167. package/src/components/meeting/OMeetingPlayback.vue +0 -469
  168. package/src/components/meeting/OMeetingSigCalendar.vue +0 -500
  169. package/src/components/meeting/components/OMeetingCalendarList.vue +0 -626
  170. package/src/components/meeting/components/OMeetingCalendarSelector.vue +0 -213
  171. package/src/components/meeting/components/OMeetingDetail.vue +0 -285
  172. package/src/components/meeting/components/OMeetingPlaybackSubtitles.vue +0 -615
  173. package/src/components/meeting/components/OMeetingPlaybackVideo.vue +0 -741
  174. package/src/components/meeting/components/OMeetingSigAside.vue +0 -205
  175. package/src/components/meeting/composables/useMeetingConfig.ts +0 -108
  176. package/src/components/meeting/config.ts +0 -48
  177. package/src/components/meeting/index.ts +0 -45
  178. package/src/components/meeting/types.ts +0 -270
  179. package/src/components/meeting/utils.ts +0 -70
  180. package/src/components/search/OSearchInput.vue +0 -526
  181. package/src/components/search/composables/useImageSearch.ts +0 -157
  182. package/src/components/search/composables/useKeywordHighlight.ts +0 -30
  183. package/src/components/search/composables/useSearchHistory.ts +0 -75
  184. package/src/components/search/index.ts +0 -23
  185. package/src/components/search/internal/HighlightText.vue +0 -37
  186. package/src/components/search/internal/SearchImageInput.vue +0 -498
  187. package/src/components/search/internal/SearchPanel.vue +0 -431
  188. package/src/components/search/types.ts +0 -25
  189. package/src/components/section/OSection.vue +0 -178
  190. package/src/components/section/index.ts +0 -10
  191. package/src/draft/Banner.vue +0 -265
  192. package/src/draft/ButtonCards.vue +0 -106
  193. package/src/draft/Feature.vue +0 -134
  194. package/src/draft/Footer.vue +0 -519
  195. package/src/draft/HorizontalAnchor.vue +0 -165
  196. package/src/draft/ItemSwiper.vue +0 -133
  197. package/src/draft/Logo.vue +0 -141
  198. package/src/draft/LogoCard.vue +0 -75
  199. package/src/draft/LogoV2.vue +0 -19
  200. package/src/draft/MainCard.vue +0 -38
  201. package/src/draft/MultiCard.vue +0 -95
  202. package/src/draft/MultiIconCard.vue +0 -74
  203. package/src/draft/OInfoCard.vue +0 -176
  204. package/src/draft/Process.vue +0 -81
  205. package/src/draft/Section.vue +0 -167
  206. package/src/draft/SingleTabCard.vue +0 -85
  207. package/src/draft/SliderCard.vue +0 -111
  208. package/src/env.d.ts +0 -16
  209. package/src/i18n/en.ts +0 -278
  210. package/src/i18n/index.ts +0 -56
  211. package/src/i18n/zh.ts +0 -268
  212. package/src/index.ts +0 -18
  213. package/src/shared/provide.ts +0 -6
  214. package/src/shims-vue-dompurify-html.d.ts +0 -17
  215. package/src/vue.d.ts +0 -10
  216. package/tsconfig.json +0 -37
  217. package/vite.config.ts +0 -123
  218. package/vite.treeshaking.config.ts +0 -127
@@ -1,157 +0,0 @@
1
- import { ref, onBeforeUnmount, type Ref } from 'vue';
2
- import type { OSearchUploadImageFn } from '../types';
3
-
4
- export interface UseImageSearchOptions {
5
- uploadImage?: Ref<OSearchUploadImageFn | undefined>;
6
- maxImageSize: Ref<number>;
7
- allowedImageTypes?: Ref<string[]>;
8
- onUploadStart?: (file: File) => void;
9
- onUploadSuccess?: (url: string, file: File) => void;
10
- onUploadError?: (error: unknown, file: File) => void;
11
- onValidationError?: (reason: 'size' | 'type', file: File) => void;
12
- }
13
-
14
- export function useImageSearch(options: UseImageSearchOptions) {
15
- const previewUrl = ref('');
16
- const file = ref<File | null>(null);
17
- const uploadedUrl = ref('');
18
- const isUploading = ref(false);
19
- let uploadPromise: Promise<void> | null = null;
20
-
21
- const validate = (f: File) => {
22
- const allowed = options.allowedImageTypes?.value;
23
- const typeOk = allowed && allowed.length > 0 ? allowed.includes(f.type) : f.type?.startsWith('image/');
24
- if (!f.type || !typeOk) {
25
- options.onValidationError?.('type', f);
26
- return false;
27
- }
28
- if (options.maxImageSize.value > 0 && f.size > options.maxImageSize.value) {
29
- options.onValidationError?.('size', f);
30
- return false;
31
- }
32
- return true;
33
- };
34
-
35
- const reset = () => {
36
- if (previewUrl.value) {
37
- try {
38
- URL.revokeObjectURL(previewUrl.value);
39
- } catch {
40
- // ignore
41
- }
42
- }
43
- previewUrl.value = '';
44
- file.value = null;
45
- uploadedUrl.value = '';
46
- isUploading.value = false;
47
- uploadPromise = null;
48
- };
49
-
50
- const setExternalUrl = (url: string) => {
51
- if (!url) {
52
- if (!file.value) reset();
53
- return;
54
- }
55
- if (uploadedUrl.value === url) return;
56
- if (previewUrl.value && previewUrl.value.startsWith('blob:')) {
57
- try {
58
- URL.revokeObjectURL(previewUrl.value);
59
- } catch {
60
- // ignore
61
- }
62
- }
63
- uploadedUrl.value = url;
64
- previewUrl.value = url;
65
- file.value = null;
66
- };
67
-
68
- const handleImageFile = (f: File) => {
69
- if (!validate(f)) return;
70
-
71
- reset();
72
- file.value = f;
73
- previewUrl.value = URL.createObjectURL(f);
74
- options.onUploadStart?.(f);
75
-
76
- const fn = options.uploadImage?.value;
77
- if (!fn) {
78
- return;
79
- }
80
-
81
- isUploading.value = true;
82
- uploadPromise = Promise.resolve()
83
- .then(() => fn(f))
84
- .then((url) => {
85
- if (url && file.value === f) {
86
- uploadedUrl.value = url;
87
- options.onUploadSuccess?.(url, f);
88
- }
89
- })
90
- .catch((err) => {
91
- options.onUploadError?.(err, f);
92
- })
93
- .finally(() => {
94
- isUploading.value = false;
95
- });
96
- };
97
-
98
- const onPaste = (event: ClipboardEvent) => {
99
- const items = event.clipboardData?.items;
100
- if (!items) return;
101
- for (let i = 0; i < items.length; i++) {
102
- const item = items[i];
103
- if (item.type.startsWith('image/')) {
104
- const f = item.getAsFile();
105
- if (f) handleImageFile(f);
106
- break;
107
- }
108
- }
109
- };
110
-
111
- const onDragOver = (event: DragEvent) => {
112
- event.preventDefault();
113
- event.stopPropagation();
114
- };
115
-
116
- const onDrop = (event: DragEvent) => {
117
- event.preventDefault();
118
- event.stopPropagation();
119
- const f = event.dataTransfer?.files?.[0];
120
- if (f && f.type.startsWith('image/')) {
121
- handleImageFile(f);
122
- }
123
- };
124
-
125
- const onFileChange = (event: Event) => {
126
- const target = event.target as HTMLInputElement;
127
- const f = target.files?.[0];
128
- if (f) handleImageFile(f);
129
- if (target) target.value = '';
130
- };
131
-
132
- const pickFile = (input: HTMLInputElement | undefined) => {
133
- if (!input) return;
134
- input.value = '';
135
- input.click();
136
- };
137
-
138
- const awaitUpload = () => uploadPromise ?? Promise.resolve();
139
-
140
- onBeforeUnmount(reset);
141
-
142
- return {
143
- previewUrl,
144
- file,
145
- uploadedUrl,
146
- isUploading,
147
- onPaste,
148
- onDrop,
149
- onDragOver,
150
- onFileChange,
151
- pickFile,
152
- handleImageFile,
153
- reset,
154
- setExternalUrl,
155
- awaitUpload,
156
- };
157
- }
@@ -1,30 +0,0 @@
1
- import type { OSearchHighlightPart } from '../types';
2
-
3
- const ESCAPE_RE = /[.*+?^${}()|[\]\\]/g;
4
-
5
- export function highlightKeywordParts(text: string, keyword: string): OSearchHighlightPart[] {
6
- const k = (keyword || '').trim();
7
- if (!k) return [{ text, match: false }];
8
-
9
- const escaped = k.replace(ESCAPE_RE, '\\$&');
10
- const re = new RegExp(escaped, 'gi');
11
- const parts: OSearchHighlightPart[] = [];
12
- let lastIndex = 0;
13
- let m: RegExpExecArray | null;
14
-
15
- while ((m = re.exec(text)) !== null) {
16
- if (m.index === re.lastIndex) {
17
- re.lastIndex++;
18
- continue;
19
- }
20
- if (m.index > lastIndex) {
21
- parts.push({ text: text.slice(lastIndex, m.index), match: false });
22
- }
23
- parts.push({ text: m[0], match: true });
24
- lastIndex = m.index + m[0].length;
25
- }
26
- if (lastIndex < text.length) {
27
- parts.push({ text: text.slice(lastIndex), match: false });
28
- }
29
- return parts;
30
- }
@@ -1,75 +0,0 @@
1
- import { ref, watch, onMounted, type Ref } from 'vue';
2
-
3
- export interface UseSearchHistoryOptions {
4
- initial: Ref<string[]>;
5
- storageKey: Ref<string>;
6
- storeHistory: Ref<boolean>;
7
- maxHistoryCount: Ref<number>;
8
- onChange?: (items: string[]) => void;
9
- }
10
-
11
- export function useSearchHistory(options: UseSearchHistoryOptions) {
12
- const { initial, storageKey, storeHistory, maxHistoryCount, onChange } = options;
13
- const items = ref<string[]>([...initial.value]);
14
-
15
- const persist = () => {
16
- if (!storeHistory.value || typeof localStorage === 'undefined') return;
17
- try {
18
- if (items.value.length) {
19
- localStorage.setItem(storageKey.value, JSON.stringify(items.value));
20
- } else {
21
- localStorage.removeItem(storageKey.value);
22
- }
23
- } catch {
24
- // ignore
25
- }
26
- };
27
-
28
- const setItems = (next: string[]) => {
29
- items.value = next;
30
- persist();
31
- onChange?.(items.value);
32
- };
33
-
34
- const loadFromStorage = () => {
35
- if (!storeHistory.value || typeof localStorage === 'undefined') return;
36
- try {
37
- const raw = localStorage.getItem(storageKey.value);
38
- if (!raw) return;
39
- const parsed = JSON.parse(raw);
40
- if (Array.isArray(parsed) && parsed.length) {
41
- const merged = Array.from(new Set<string>([...parsed, ...items.value]));
42
- items.value = merged.slice(0, maxHistoryCount.value);
43
- onChange?.(items.value);
44
- }
45
- } catch {
46
- // ignore
47
- }
48
- };
49
-
50
- const push = (val: string) => {
51
- const v = val?.trim();
52
- if (!v) return;
53
- const next = [v, ...items.value.filter((i) => i !== v)];
54
- if (next.length > maxHistoryCount.value) next.length = maxHistoryCount.value;
55
- setItems(next);
56
- };
57
-
58
- const remove = (val: string) => {
59
- setItems(items.value.filter((i) => i !== val));
60
- };
61
-
62
- const clearAll = () => {
63
- setItems([]);
64
- };
65
-
66
- watch(initial, (val) => {
67
- if (val !== items.value) {
68
- items.value = [...val];
69
- }
70
- });
71
-
72
- onMounted(loadFromStorage);
73
-
74
- return { items, push, remove, clearAll };
75
- }
@@ -1,23 +0,0 @@
1
- import _OSearchInput from './OSearchInput.vue';
2
- import type { App } from 'vue';
3
-
4
- const OSearchInput = Object.assign(_OSearchInput, {
5
- install(app: App) {
6
- app.component('OSearchInput', _OSearchInput);
7
- },
8
- });
9
-
10
- export { OSearchInput };
11
-
12
- export type {
13
- OSearchRecommendItem,
14
- OSearchPayload,
15
- OSearchImageUploadErrorPayload,
16
- OSearchUploadImageFn,
17
- OSearchItemClickType,
18
- OSearchHighlightPart,
19
- } from './types';
20
-
21
- // Public prop type aliases (re-exported from .vue SFCs).
22
- // Vue SFC type shims don't always re-export named types, so consumers should rely on
23
- // ComponentProps<typeof Component> if they need props typing.
@@ -1,37 +0,0 @@
1
- <script setup lang="ts">
2
- import { computed } from 'vue';
3
- import { highlightKeywordParts } from '../composables/useKeywordHighlight';
4
-
5
- const props = withDefaults(
6
- defineProps<{
7
- text: string;
8
- keyword: string;
9
- enabled?: boolean;
10
- }>(),
11
- {
12
- enabled: true,
13
- }
14
- );
15
-
16
- const parts = computed(() => {
17
- if (!props.enabled || !props.keyword) {
18
- return [{ text: props.text, match: false }];
19
- }
20
- return highlightKeywordParts(props.text, props.keyword);
21
- });
22
- </script>
23
-
24
- <template>
25
- <span class="o-search-highlight-text">
26
- <span v-for="(p, idx) in parts" :key="idx" :class="{ 'is-match': p.match }">{{ p.text }}</span>
27
- </span>
28
- </template>
29
-
30
- <style lang="scss" scoped>
31
- .o-search-highlight-text {
32
- .is-match {
33
- color: var(--o-color-primary1);
34
- font-weight: 600;
35
- }
36
- }
37
- </style>