@todovue/tv-ui 0.1.0 → 0.1.2
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 +20 -20
- package/dist/entry.d.ts +2 -2
- package/dist/tv-ui.cjs.js +1 -1
- package/dist/tv-ui.css +1 -1
- package/dist/tv-ui.es.js +50 -49
- package/package.json +4 -2
- package/dist/.htaccess +0 -8
- package/dist/demos/tv-alert/CHANGELOG.md +0 -127
- package/dist/demos/tv-alert/README.md +0 -334
- package/dist/demos/tv-article/CHANGELOG.md +0 -221
- package/dist/demos/tv-article/README.md +0 -258
- package/dist/demos/tv-breadcrumbs/CHANGELOG.md +0 -135
- package/dist/demos/tv-breadcrumbs/README.md +0 -364
- package/dist/demos/tv-button/CHANGELOG.md +0 -158
- package/dist/demos/tv-button/README.md +0 -255
- package/dist/demos/tv-card/CHANGELOG.md +0 -158
- package/dist/demos/tv-card/README.md +0 -332
- package/dist/demos/tv-demo/CHANGELOG.md +0 -352
- package/dist/demos/tv-demo/README.md +0 -229
- package/dist/demos/tv-footer/CHANGELOG.md +0 -67
- package/dist/demos/tv-footer/README.md +0 -760
- package/dist/demos/tv-hero/CHANGELOG.md +0 -137
- package/dist/demos/tv-hero/README.md +0 -410
- package/dist/demos/tv-label/CHANGELOG.md +0 -138
- package/dist/demos/tv-label/README.md +0 -357
- package/dist/demos/tv-menu/CHANGELOG.md +0 -145
- package/dist/demos/tv-menu/README.md +0 -389
- package/dist/demos/tv-modal/CHANGELOG.md +0 -127
- package/dist/demos/tv-modal/README.md +0 -466
- package/dist/demos/tv-pagination/CHANGELOG.md +0 -125
- package/dist/demos/tv-pagination/README.md +0 -275
- package/dist/demos/tv-progress-bar/CHANGELOG.md +0 -84
- package/dist/demos/tv-progress-bar/README.md +0 -894
- package/dist/demos/tv-relative-time/CHANGELOG.md +0 -122
- package/dist/demos/tv-relative-time/README.md +0 -405
- package/dist/demos/tv-scroll-top/CHANGELOG.md +0 -69
- package/dist/demos/tv-scroll-top/README.md +0 -445
- package/dist/demos/tv-search/CHANGELOG.md +0 -155
- package/dist/demos/tv-search/README.md +0 -407
- package/dist/demos/tv-settings/CHANGELOG.md +0 -94
- package/dist/demos/tv-settings/README.md +0 -314
- package/dist/demos/tv-sidebar/CHANGELOG.md +0 -229
- package/dist/demos/tv-sidebar/README.md +0 -592
- package/dist/demos/tv-theme-button/CHANGELOG.md +0 -136
- package/dist/demos/tv-theme-button/README.md +0 -392
- package/dist/demos/tv-toc/CHANGELOG.md +0 -80
- package/dist/demos/tv-toc/README.md +0 -288
- package/dist/favicon.ico +0 -0
|
@@ -1,407 +0,0 @@
|
|
|
1
|
-
<p align="center"><img width="150" src="https://res.cloudinary.com/dcdfhi8qz/image/upload/v1763663056/uqqtkgp1lg3xdplutpga.png" alt="TODOvue logo">
|
|
2
|
-
</p>
|
|
3
|
-
|
|
4
|
-
# TODOvue Search (TvSearch)
|
|
5
|
-
A fast, accessible, and fully customizable search interface component for Vue 3 applications. Provides an elegant modal search experience with keyboard shortcuts, real-time filtering, and complete style customization. Works seamlessly in Single Page Apps or Server-Side Rendered (SSR) environments (e.g. Nuxt 3).
|
|
6
|
-
|
|
7
|
-
[](https://www.npmjs.com/package/@todovue/tv-search)
|
|
8
|
-
[](https://www.npmjs.com/package/@todovue/tv-search)
|
|
9
|
-
[](https://www.npmjs.com/package/@todovue/tv-search)
|
|
10
|
-

|
|
11
|
-

|
|
12
|
-

|
|
13
|
-

|
|
14
|
-

|
|
15
|
-

|
|
16
|
-
|
|
17
|
-
> Demo: https://ui.todovue.blog/search
|
|
18
|
-
|
|
19
|
-
## Table of Contents
|
|
20
|
-
- [Features](#features)
|
|
21
|
-
- [Installation](#installation)
|
|
22
|
-
- [Quick Start (SPA)](#quick-start-spa)
|
|
23
|
-
- [Nuxt 4 / SSR Usage](#nuxt-4--ssr-usage)
|
|
24
|
-
- [Component Registration Options](#component-registration-options)
|
|
25
|
-
- [Props](#props)
|
|
26
|
-
- [Events](#events)
|
|
27
|
-
- [Keyboard Shortcuts](#keyboard-shortcuts)
|
|
28
|
-
- [Customization (Styles / Theming)](#customization-styles--theming)
|
|
29
|
-
- [Results Data Structure](#results-data-structure)
|
|
30
|
-
- [Accessibility](#accessibility)
|
|
31
|
-
- [SSR Notes](#ssr-notes)
|
|
32
|
-
- [Development](#development)
|
|
33
|
-
- [Contributing](#contributing)
|
|
34
|
-
- [Changelog](#changelog)
|
|
35
|
-
- [License](#license)
|
|
36
|
-
|
|
37
|
-
## Features
|
|
38
|
-
- **Keyboard-first UX**: Open with `Ctrl+K` / `Cmd+K`, close with `Esc`
|
|
39
|
-
- **Real-time filtering**: Search as you type with instant results
|
|
40
|
-
- **Modal interface**: Clean overlay design that focuses user attention
|
|
41
|
-
- **Fully customizable**: Override colors for body, input, button, and text
|
|
42
|
-
- **Accessible**: Built with semantic HTML and keyboard navigation
|
|
43
|
-
- **Lightweight**: Minimal dependencies, Vue 3 marked as peer dependency
|
|
44
|
-
- **SSR compatible**: Works in Nuxt 3 and other SSR frameworks
|
|
45
|
-
- **Autofocus**: Input field receives focus automatically when opened
|
|
46
|
-
- **Click-away close**: Modal closes when clicking outside the content area
|
|
47
|
-
- **Flexible results**: Pass any array of searchable items with custom properties
|
|
48
|
-
|
|
49
|
-
## Installation
|
|
50
|
-
Using npm:
|
|
51
|
-
```bash
|
|
52
|
-
npm install @todovue/tv-search
|
|
53
|
-
```
|
|
54
|
-
Using yarn:
|
|
55
|
-
```bash
|
|
56
|
-
yarn add @todovue/tv-search
|
|
57
|
-
```
|
|
58
|
-
Using pnpm:
|
|
59
|
-
```bash
|
|
60
|
-
pnpm add @todovue/tv-search
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## Quick Start (SPA)
|
|
64
|
-
Global registration (main.js / main.ts):
|
|
65
|
-
```js
|
|
66
|
-
import { createApp } from 'vue'
|
|
67
|
-
import App from './App.vue'
|
|
68
|
-
import { TvSearch } from '@todovue/tv-search'
|
|
69
|
-
import '@todovue/tv-search/style.css' // import styles
|
|
70
|
-
import '@todovue/tv-button/style.css' // import styles
|
|
71
|
-
|
|
72
|
-
createApp(App)
|
|
73
|
-
.use(TvSearch) // enables <TvSearch /> globally
|
|
74
|
-
.mount('#app')
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
Local import inside a component:
|
|
78
|
-
```vue
|
|
79
|
-
<script setup>
|
|
80
|
-
import { ref } from 'vue'
|
|
81
|
-
import { TvSearch } from '@todovue/tv-search'
|
|
82
|
-
import '@todovue/tv-search/style.css' // import styles
|
|
83
|
-
import '@todovue/tv-button/style.css' // import styles
|
|
84
|
-
|
|
85
|
-
const results = ref([
|
|
86
|
-
{
|
|
87
|
-
id: 1,
|
|
88
|
-
title: 'How to use Vue 3',
|
|
89
|
-
description: 'Vue 3 is the latest version of Vue.js',
|
|
90
|
-
url: 'https://todovue.com/blog/how-to-use-vue-3',
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
id: 2,
|
|
94
|
-
title: 'How to use Vite',
|
|
95
|
-
description: 'Vite is a build tool for modern web development',
|
|
96
|
-
url: 'https://todovue.com/blog/how-to-use-vite',
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
id: 3,
|
|
100
|
-
title: 'How to use Pinia',
|
|
101
|
-
description: 'Pinia is a modern store for Vue 3',
|
|
102
|
-
url: 'https://todovue.com/blog/how-to-use-pinia',
|
|
103
|
-
},
|
|
104
|
-
])
|
|
105
|
-
|
|
106
|
-
function handleSearch(query) {
|
|
107
|
-
console.log('Search query:', query)
|
|
108
|
-
// Handle search logic here
|
|
109
|
-
}
|
|
110
|
-
</script>
|
|
111
|
-
|
|
112
|
-
<template>
|
|
113
|
-
<tv-search
|
|
114
|
-
placeholder="Search documentation..."
|
|
115
|
-
titleButton="Search"
|
|
116
|
-
:results="results"
|
|
117
|
-
@search="handleSearch"
|
|
118
|
-
/>
|
|
119
|
-
</template>
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
## Nuxt 4 / SSR Usage
|
|
123
|
-
Create a plugin file: `plugins/tv-search.client.ts` (client-only is recommended since it uses keyboard events):
|
|
124
|
-
```ts
|
|
125
|
-
// nuxt.config.ts
|
|
126
|
-
export default defineNuxtConfig({
|
|
127
|
-
modules: [
|
|
128
|
-
'@todovue/tv-search/nuxt'
|
|
129
|
-
]
|
|
130
|
-
})
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
Then use anywhere in your Nuxt app:
|
|
134
|
-
```vue
|
|
135
|
-
<template>
|
|
136
|
-
<tv-search
|
|
137
|
-
placeholder="Search site..."
|
|
138
|
-
titleButton="Search"
|
|
139
|
-
:results="searchResults"
|
|
140
|
-
@search="onSearch"
|
|
141
|
-
/>
|
|
142
|
-
</template>
|
|
143
|
-
|
|
144
|
-
<script setup>
|
|
145
|
-
const searchResults = ref([
|
|
146
|
-
// your search results
|
|
147
|
-
])
|
|
148
|
-
|
|
149
|
-
function onSearch(query) {
|
|
150
|
-
// handle search
|
|
151
|
-
}
|
|
152
|
-
</script>
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
Optional direct import (no plugin needed):
|
|
156
|
-
```vue
|
|
157
|
-
<script setup>
|
|
158
|
-
import { TvSearch } from '@todovue/tv-search'
|
|
159
|
-
</script>
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
## Component Registration Options
|
|
163
|
-
| Approach | When to use |
|
|
164
|
-
|------------------------------------------------------|----------------------------------------------------|
|
|
165
|
-
| Global via `app.use(TvSearch)` | Design system / used across many pages |
|
|
166
|
-
| Global via `app.component('TvSearch', TvSearch)` | Custom component name / multiple search components |
|
|
167
|
-
| Local named import `import TvSearch from '...'` | Single page usage / code splitting |
|
|
168
|
-
| Nuxt plugin `.client.ts` | SSR apps with client-side interactions |
|
|
169
|
-
|
|
170
|
-
## Props
|
|
171
|
-
| Prop | Type | Default | Description | Required |
|
|
172
|
-
|---------------|--------|--------------------------|---------------------------------------------------------------------------------------|----------|
|
|
173
|
-
| placeholder | String | `""` | Placeholder text for the search input field | `true` |
|
|
174
|
-
| titleButton | String | `""` | Text displayed on the search button | `true` |
|
|
175
|
-
| results | Array | `[]` | Array of searchable items (see [Results Data Structure](#results-data-structure)) | `true` |
|
|
176
|
-
| customStyles | Object | `{}` | Custom color scheme for theming (see [Customization](#customization-styles--theming)) | `false` |
|
|
177
|
-
| searchKeys | Array | `['title']` | Array of keys in result objects to search against | `false` |
|
|
178
|
-
| noResultsText | String | `"No results found for"` | Text to display when no results match the query | `false` |
|
|
179
|
-
|
|
180
|
-
### customStyles Object
|
|
181
|
-
Customize the appearance by passing a `customStyles` object with any of these properties:
|
|
182
|
-
|
|
183
|
-
| Property | Type | Default | Description |
|
|
184
|
-
|-------------|--------|-------------|----------------------------------------------------------|
|
|
185
|
-
| bgBody | String | `"#0E131F"` | Background color of the modal overlay (with 0.9 opacity) |
|
|
186
|
-
| bgInput | String | `"#B9C4DF"` | Background color of the search input area |
|
|
187
|
-
| bgButton | String | `"#EF233C"` | Background color of the search button |
|
|
188
|
-
| colorButton | String | `"#F4FAFF"` | Text color of the search button |
|
|
189
|
-
|
|
190
|
-
## Events
|
|
191
|
-
| Event | Payload Type | Description |
|
|
192
|
-
|--------|-----------------|-------------------------------------------------------------------------------------------------|
|
|
193
|
-
| search | String / Object | Emitted when search is triggered (Enter key or button click). Returns the trimmed search query. |
|
|
194
|
-
|
|
195
|
-
Example:
|
|
196
|
-
```vue
|
|
197
|
-
<tv-search
|
|
198
|
-
placeholder="Search..."
|
|
199
|
-
titleButton="Go"
|
|
200
|
-
:results="items"
|
|
201
|
-
@search="handleSearch"
|
|
202
|
-
/>
|
|
203
|
-
|
|
204
|
-
<script setup>
|
|
205
|
-
function handleSearch(query) {
|
|
206
|
-
console.log('User searched for:', query)
|
|
207
|
-
// Perform API call, route navigation, etc.
|
|
208
|
-
}
|
|
209
|
-
</script>
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
## Slots
|
|
213
|
-
| Slot Name | Props | Description |
|
|
214
|
-
|------------|--------------|---------------------------------------------------|
|
|
215
|
-
| item | `{ result }` | Custom rendering for each result item in the list |
|
|
216
|
-
| no-results | - | Custom content when no results are found |
|
|
217
|
-
|
|
218
|
-
### Custom Slot Example
|
|
219
|
-
```vue
|
|
220
|
-
<tv-search
|
|
221
|
-
:results="items"
|
|
222
|
-
:searchKeys="['title', 'description']"
|
|
223
|
-
>
|
|
224
|
-
<template #item="{ result }">
|
|
225
|
-
<div class="my-custom-item">
|
|
226
|
-
<h3>{{ result.title }}</h3>
|
|
227
|
-
<p>{{ result.description }}</p>
|
|
228
|
-
</div>
|
|
229
|
-
</template>
|
|
230
|
-
|
|
231
|
-
<template #no-results>
|
|
232
|
-
<div class="empty-state">
|
|
233
|
-
<p>No matches found.</p>
|
|
234
|
-
</div>
|
|
235
|
-
</template>
|
|
236
|
-
</tv-search>
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
## Keyboard Shortcuts
|
|
240
|
-
| Shortcut | Action |
|
|
241
|
-
|------------------------|-----------------------------------|
|
|
242
|
-
| `Ctrl + K` / `Cmd + K` | Open the search modal |
|
|
243
|
-
| `Escape` | Close the search modal |
|
|
244
|
-
| `Enter` | Execute search with current input |
|
|
245
|
-
| Click outside modal | Close the search modal |
|
|
246
|
-
|
|
247
|
-
## Customization (Styles / Theming)
|
|
248
|
-
You can override the default color scheme by passing a `customStyles` object:
|
|
249
|
-
|
|
250
|
-
```vue
|
|
251
|
-
<script setup>
|
|
252
|
-
import { ref } from 'vue'
|
|
253
|
-
import { TvSearch } from '@todovue/tv-search'
|
|
254
|
-
|
|
255
|
-
const customStyles = ref({
|
|
256
|
-
bgBody: "#1e1d23",
|
|
257
|
-
bgInput: "#8673a1",
|
|
258
|
-
bgButton: "#80286e",
|
|
259
|
-
colorButton: "#d7c9c9",
|
|
260
|
-
})
|
|
261
|
-
|
|
262
|
-
const results = ref([
|
|
263
|
-
// your results
|
|
264
|
-
])
|
|
265
|
-
</script>
|
|
266
|
-
|
|
267
|
-
<template>
|
|
268
|
-
<tv-search
|
|
269
|
-
placeholder="Type to search..."
|
|
270
|
-
titleButton="Search"
|
|
271
|
-
:results="results"
|
|
272
|
-
:customStyles="customStyles"
|
|
273
|
-
/>
|
|
274
|
-
</template>
|
|
275
|
-
```
|
|
276
|
-
|
|
277
|
-
### Example Custom Themes
|
|
278
|
-
|
|
279
|
-
**Dark Theme:**
|
|
280
|
-
```js
|
|
281
|
-
const darkTheme = {
|
|
282
|
-
bgBody: "#0E131F",
|
|
283
|
-
bgInput: "#1F2937",
|
|
284
|
-
bgButton: "#3B82F6",
|
|
285
|
-
colorButton: "#FFFFFF",
|
|
286
|
-
}
|
|
287
|
-
```
|
|
288
|
-
|
|
289
|
-
**Light Theme:**
|
|
290
|
-
```js
|
|
291
|
-
const lightTheme = {
|
|
292
|
-
bgBody: "#F9FAFB",
|
|
293
|
-
bgInput: "#FFFFFF",
|
|
294
|
-
bgButton: "#6366F1",
|
|
295
|
-
colorButton: "#FFFFFF",
|
|
296
|
-
}
|
|
297
|
-
```
|
|
298
|
-
|
|
299
|
-
**Brand Theme:**
|
|
300
|
-
```js
|
|
301
|
-
const brandTheme = {
|
|
302
|
-
bgBody: "#0A4539",
|
|
303
|
-
bgInput: "#284780",
|
|
304
|
-
bgButton: "#80286E",
|
|
305
|
-
colorButton: "#D5B7B7",
|
|
306
|
-
}
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
## Results Data Structure
|
|
310
|
-
The `results` prop expects an array of objects with the following structure:
|
|
311
|
-
|
|
312
|
-
```typescript
|
|
313
|
-
interface SearchResult {
|
|
314
|
-
id: number | string; // Unique identifier (required for :key)
|
|
315
|
-
title: string; // Displayed in search results (required)
|
|
316
|
-
description?: string; // Additional info (optional, not currently displayed)
|
|
317
|
-
url?: string; // Navigation target (optional, not currently used in component)
|
|
318
|
-
[key: string]: any; // Any additional custom properties
|
|
319
|
-
}
|
|
320
|
-
```
|
|
321
|
-
|
|
322
|
-
Example:
|
|
323
|
-
```js
|
|
324
|
-
const results = [
|
|
325
|
-
{
|
|
326
|
-
id: 1,
|
|
327
|
-
title: 'Getting Started with Vue 3',
|
|
328
|
-
description: 'Learn the basics of Vue 3 composition API',
|
|
329
|
-
url: '/docs/vue3-intro',
|
|
330
|
-
category: 'Tutorial',
|
|
331
|
-
},
|
|
332
|
-
{
|
|
333
|
-
id: 2,
|
|
334
|
-
title: 'Understanding Reactivity',
|
|
335
|
-
description: 'Deep dive into Vue reactivity system',
|
|
336
|
-
url: '/docs/reactivity',
|
|
337
|
-
category: 'Advanced',
|
|
338
|
-
},
|
|
339
|
-
]
|
|
340
|
-
```
|
|
341
|
-
|
|
342
|
-
**Note**: The component currently filters results based on the `title` property matching the user input (case-insensitive). You can handle the `@search` event to implement custom search logic or navigation.
|
|
343
|
-
|
|
344
|
-
## Accessibility
|
|
345
|
-
- **Keyboard navigation**: Full support for `Ctrl+K`/`Cmd+K` to open, `Esc` to close, and `Enter` to search
|
|
346
|
-
- **Focus management**: Input automatically receives focus when modal opens and is selected for immediate typing
|
|
347
|
-
- **Semantic HTML**: Uses proper `<button>`, `<input>`, and modal structure
|
|
348
|
-
- **Click-away**: Modal closes when clicking the overlay, providing intuitive UX
|
|
349
|
-
|
|
350
|
-
**Recommendations:**
|
|
351
|
-
- Provide clear, descriptive `placeholder` text
|
|
352
|
-
- Use meaningful `titleButton` text (e.g., "Search", "Find", "Go")
|
|
353
|
-
- Ensure sufficient color contrast when using `customStyles`
|
|
354
|
-
- Consider adding `aria-label` attributes for screen reader support in future versions
|
|
355
|
-
|
|
356
|
-
## SSR Notes
|
|
357
|
-
- **Safe for SSR**: No direct DOM access (`window` / `document`) during module initialization
|
|
358
|
-
- **Event listeners**: Keyboard event listeners are registered in `onMounted` and cleaned up in `onBeforeUnmount`
|
|
359
|
-
- **Client-side only**: Keyboard shortcuts require browser environment; use `.client.ts` plugin in Nuxt
|
|
360
|
-
- **Icons**: SVG icons are loaded via Vite's `import.meta.glob`, which works in both SPA and SSR builds
|
|
361
|
-
- **CSS Import**: Starting from version 1.0.4, styles are served as a separate CSS file (`dist/tv-search.css`) and must be explicitly imported:
|
|
362
|
-
- For Vue/Vite SPA: `import '@todovue/tv-search/style.css'` in `main.ts`
|
|
363
|
-
- For Nuxt 3/4: Add `'@todovue/tv-search/style.css'` to the `css` array in `nuxt.config.ts`
|
|
364
|
-
|
|
365
|
-
## Development
|
|
366
|
-
Clone the repository and install dependencies:
|
|
367
|
-
```bash
|
|
368
|
-
git clone https://github.com/TODOvue/tv-search.git
|
|
369
|
-
cd tv-search
|
|
370
|
-
yarn install
|
|
371
|
-
```
|
|
372
|
-
|
|
373
|
-
Run development server with demo playground:
|
|
374
|
-
```bash
|
|
375
|
-
yarn dev
|
|
376
|
-
```
|
|
377
|
-
|
|
378
|
-
Build the library:
|
|
379
|
-
```bash
|
|
380
|
-
yarn build
|
|
381
|
-
```
|
|
382
|
-
|
|
383
|
-
Build demo site:
|
|
384
|
-
```bash
|
|
385
|
-
yarn build:demo
|
|
386
|
-
```
|
|
387
|
-
|
|
388
|
-
The demo is served from Vite using `index.html` + `src/demo` examples.
|
|
389
|
-
|
|
390
|
-
## Contributing
|
|
391
|
-
Contributions are welcome! Please read our [Contributing Guidelines](https://github.com/TODOvue/tv-search/blob/main/CONTRIBUTING.md) and [Code of Conduct](https://github.com/TODOvue/tv-search/blob/main/CODE_OF_CONDUCT.md) before submitting PRs.
|
|
392
|
-
|
|
393
|
-
**How to contribute:**
|
|
394
|
-
1. Fork the repository
|
|
395
|
-
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
|
|
396
|
-
3. Commit your changes (`git commit -m 'Add amazing feature'`)
|
|
397
|
-
4. Push to the branch (`git push origin feature/amazing-feature`)
|
|
398
|
-
5. Open a Pull Request
|
|
399
|
-
|
|
400
|
-
## Changelog
|
|
401
|
-
See [CHANGELOG.md](https://github.com/TODOvue/tv-search/blob/main/CHANGELOG.md) for release history and version changes.
|
|
402
|
-
|
|
403
|
-
## License
|
|
404
|
-
[MIT](https://github.com/TODOvue/tv-search/blob/main/LICENSE) © TODOvue
|
|
405
|
-
|
|
406
|
-
### Attributions
|
|
407
|
-
Crafted for the TODOvue component ecosystem
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
All notable changes to `@todovue/tv-settings` will be documented in this file.
|
|
4
|
-
|
|
5
|
-
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
|
-
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
-
|
|
8
|
-
## [1.0.4] - 2026-01-27
|
|
9
|
-
|
|
10
|
-
### Changed
|
|
11
|
-
- Simplified the file list in `package.json` to include only essential assets.
|
|
12
|
-
- Simplified the build configuration by removing demo-specific logic.
|
|
13
|
-
- Enhanced GitHub Actions workflows to automate npm package publishing and GitHub release creation.
|
|
14
|
-
- Moved the `@todovue/tv-demo` component import from main.js to `Demo.vue` to localize its usage.
|
|
15
|
-
- Updated build commands to include `README.md` and `CHANGELOG.md` files in the public directory during the build process.
|
|
16
|
-
|
|
17
|
-
### Added
|
|
18
|
-
- Included the `src` directory in the `package.json` files list to ensure component source files are bundled in the package distribution.
|
|
19
|
-
|
|
20
|
-
### Removed
|
|
21
|
-
- Eliminated the global import of the `@todovue/tv-demo` component from `main.js`.
|
|
22
|
-
|
|
23
|
-
### Dependencies
|
|
24
|
-
- Updated `@todovue/tv-demo` to `^1.4.11`.
|
|
25
|
-
- Updated `vue` to `^3.5.27`.
|
|
26
|
-
- Updated `sass` to `^1.97.3`.
|
|
27
|
-
|
|
28
|
-
## [1.0.3] - 2026-01-21
|
|
29
|
-
|
|
30
|
-
### Added
|
|
31
|
-
- Added `title` prop to easily add a header title to the panel.
|
|
32
|
-
- Added `trigger` slot to allow full customization of the toggle button.
|
|
33
|
-
|
|
34
|
-
### Dependencies
|
|
35
|
-
- Updated `@todovue/tv-demo` to `^1.4.4`.
|
|
36
|
-
- Updated `sass` to `^1.97.2`.
|
|
37
|
-
- Updated `vite` to `^7.3.1`.
|
|
38
|
-
|
|
39
|
-
## [1.0.2] - 2025-12-27
|
|
40
|
-
|
|
41
|
-
### Added
|
|
42
|
-
- Added automatic publishing to the TODOvue cPanel in `release.yml` for each release, simplifying package distribution and updates.
|
|
43
|
-
- Added `package-lock.json` to the repository to ensure dependency consistency and facilitate version management across development and production environments.
|
|
44
|
-
|
|
45
|
-
### Changed
|
|
46
|
-
- Changed the `base` option in `vite.config.js` for website deployment in cpanel.
|
|
47
|
-
|
|
48
|
-
### Fixed
|
|
49
|
-
- Fixed repository URL in `package.json` to point to the correct GitHub repository.
|
|
50
|
-
- Fixed the token configuration used to generate the package in the GitHub Actions workflow `release.yml`.
|
|
51
|
-
|
|
52
|
-
### Dependencies
|
|
53
|
-
- Updated dependency versions in `package.json` to maintain compatibility and benefit from improvements and bug fixes in the used libraries.
|
|
54
|
-
|
|
55
|
-
## [1.0.1] - 2025-11-27
|
|
56
|
-
|
|
57
|
-
### Fixed
|
|
58
|
-
- Fixed export styles for better compatibility with different bundlers
|
|
59
|
-
|
|
60
|
-
## [1.0.0] - 2025-11-27
|
|
61
|
-
|
|
62
|
-
### Added
|
|
63
|
-
- Initial release of TvSettings component
|
|
64
|
-
- Sliding panels from 4 directions: top, right, bottom, left
|
|
65
|
-
- Bidirectional v-model control (controlled mode) with internal state fallback
|
|
66
|
-
- Automatic close on outside click (configurable via `closeOnOutside` prop)
|
|
67
|
-
- Close panel with Escape key support
|
|
68
|
-
- Two customizable slots: `header` and `default` (main content)
|
|
69
|
-
- Built-in gear SVG icon for settings button
|
|
70
|
-
- `disabled` prop to disable the open button
|
|
71
|
-
- Smooth CSS transitions for panel animations
|
|
72
|
-
- Full compatibility with SPA applications
|
|
73
|
-
- Full SSR support (tested with Nuxt 3)
|
|
74
|
-
- Tree-shake friendly build (Vue marked as external)
|
|
75
|
-
- TypeScript declarations included
|
|
76
|
-
- Accessibility features:
|
|
77
|
-
- ARIA labels with customizable `label` prop
|
|
78
|
-
- `aria-pressed` and `aria-expanded` attributes
|
|
79
|
-
- `role="dialog"` on panel
|
|
80
|
-
- Proper focus management
|
|
81
|
-
- Events: `update:modelValue`, `open`, `close`
|
|
82
|
-
- Props: `modelValue`, `direction`, `disabled`, `closeOnOutside`, `label`
|
|
83
|
-
- Slot bindings: `direction`, `close`, `open` methods
|
|
84
|
-
- BEM CSS classes for easy customization
|
|
85
|
-
- Support for global registration via `app.use()`
|
|
86
|
-
- Support for local named import
|
|
87
|
-
- Compatible with Nuxt 3 plugin system
|
|
88
|
-
- Demo playground at https://tv-settings.netlify.app/
|
|
89
|
-
|
|
90
|
-
[1.0.4]: https://github.com/TODOvue/tv-settings/pull/5/files
|
|
91
|
-
[1.0.3]: https://github.com/TODOvue/tv-settings/pull/4/files
|
|
92
|
-
[1.0.2]: https://github.com/TODOvue/tv-settings/pull/3/files
|
|
93
|
-
[1.0.1]: https://github.com/TODOvue/tv-settings/pull/2/files
|
|
94
|
-
[1.0.0]: https://github.com/TODOvue/tv-settings/pull/1/files
|