@todovue/tv-ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +207 -0
  3. package/dist/.htaccess +8 -0
  4. package/dist/demos/tv-alert/CHANGELOG.md +127 -0
  5. package/dist/demos/tv-alert/README.md +334 -0
  6. package/dist/demos/tv-article/CHANGELOG.md +221 -0
  7. package/dist/demos/tv-article/README.md +258 -0
  8. package/dist/demos/tv-breadcrumbs/CHANGELOG.md +135 -0
  9. package/dist/demos/tv-breadcrumbs/README.md +364 -0
  10. package/dist/demos/tv-button/CHANGELOG.md +158 -0
  11. package/dist/demos/tv-button/README.md +255 -0
  12. package/dist/demos/tv-card/CHANGELOG.md +158 -0
  13. package/dist/demos/tv-card/README.md +332 -0
  14. package/dist/demos/tv-demo/CHANGELOG.md +352 -0
  15. package/dist/demos/tv-demo/README.md +229 -0
  16. package/dist/demos/tv-footer/CHANGELOG.md +67 -0
  17. package/dist/demos/tv-footer/README.md +760 -0
  18. package/dist/demos/tv-hero/CHANGELOG.md +137 -0
  19. package/dist/demos/tv-hero/README.md +410 -0
  20. package/dist/demos/tv-label/CHANGELOG.md +138 -0
  21. package/dist/demos/tv-label/README.md +357 -0
  22. package/dist/demos/tv-menu/CHANGELOG.md +145 -0
  23. package/dist/demos/tv-menu/README.md +389 -0
  24. package/dist/demos/tv-modal/CHANGELOG.md +127 -0
  25. package/dist/demos/tv-modal/README.md +466 -0
  26. package/dist/demos/tv-pagination/CHANGELOG.md +125 -0
  27. package/dist/demos/tv-pagination/README.md +275 -0
  28. package/dist/demos/tv-progress-bar/CHANGELOG.md +84 -0
  29. package/dist/demos/tv-progress-bar/README.md +894 -0
  30. package/dist/demos/tv-relative-time/CHANGELOG.md +122 -0
  31. package/dist/demos/tv-relative-time/README.md +405 -0
  32. package/dist/demos/tv-scroll-top/CHANGELOG.md +69 -0
  33. package/dist/demos/tv-scroll-top/README.md +445 -0
  34. package/dist/demos/tv-search/CHANGELOG.md +155 -0
  35. package/dist/demos/tv-search/README.md +407 -0
  36. package/dist/demos/tv-settings/CHANGELOG.md +94 -0
  37. package/dist/demos/tv-settings/README.md +314 -0
  38. package/dist/demos/tv-sidebar/CHANGELOG.md +229 -0
  39. package/dist/demos/tv-sidebar/README.md +592 -0
  40. package/dist/demos/tv-theme-button/CHANGELOG.md +136 -0
  41. package/dist/demos/tv-theme-button/README.md +392 -0
  42. package/dist/demos/tv-toc/CHANGELOG.md +80 -0
  43. package/dist/demos/tv-toc/README.md +288 -0
  44. package/dist/entry.d.ts +48 -0
  45. package/dist/favicon.ico +0 -0
  46. package/dist/tv-ui.cjs.js +1 -0
  47. package/dist/tv-ui.css +1 -0
  48. package/dist/tv-ui.d.ts +6 -0
  49. package/dist/tv-ui.es.js +92 -0
  50. package/nuxt.js +58 -0
  51. package/package.json +92 -0
@@ -0,0 +1,314 @@
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 Settings (TvSettings)
5
+ A flexible Vue 3 component with no framework dependencies for creating sliding settings panels from any direction. Perfect for settings, side menus, or any content that needs to slide out from screen edges. Compatible with SPA applications and server-side rendering (SSR) environments like Nuxt 3.
6
+
7
+ [![npm](https://img.shields.io/npm/v/@todovue/tv-settings.svg)](https://www.npmjs.com/package/@todovue/tv-settings)
8
+ [![npm downloads](https://img.shields.io/npm/dm/@todovue/tv-settings.svg)](https://www.npmjs.com/package/@todovue/tv-settings)
9
+ [![npm total downloads](https://img.shields.io/npm/dt/@todovue/tv-settings.svg)](https://www.npmjs.com/package/@todovue/tv-settings)
10
+ ![License](https://img.shields.io/github/license/TODOvue/tv-settings)
11
+ ![Release Date](https://img.shields.io/github/release-date/TODOvue/tv-settings)
12
+ ![Bundle Size](https://img.shields.io/bundlephobia/minzip/@todovue/tv-settings)
13
+ ![Node Version](https://img.shields.io/node/v/@todovue/tv-settings)
14
+ ![Last Commit](https://img.shields.io/github/last-commit/TODOvue/tv-settings)
15
+ ![Stars](https://img.shields.io/github/stars/TODOvue/tv-settings?style=social)
16
+
17
+ > Demo: https://ui.todovue.blog/settings
18
+
19
+ ## Table of Contents
20
+ - [Features](#features)
21
+ - [Installation](#installation)
22
+ - [Quick Start (SPA)](#quick-start-spa)
23
+ - [Usage in Nuxt 4 / SSR](#usage-in-nuxt-4--ssr)
24
+ - [Component Registration Options](#component-registration-options)
25
+ - [Props](#props)
26
+ - [Events](#events)
27
+ - [Slots](#slots)
28
+ - [Directions](#directions)
29
+ - [State Control](#state-control)
30
+ - [Customization (Styles / Themes)](#customization-styles--themes)
31
+ - [Accessibility](#accessibility)
32
+ - [SSR Notes](#ssr-notes)
33
+ - [Development](#development)
34
+ - [Contributing](#contributing)
35
+ - [License](#license)
36
+
37
+ ## Features
38
+ - Sliding panels from 4 directions: top, right, bottom, left
39
+ - Bidirectional v-model control (controlled mode) or internal state
40
+ - Automatic close on outside click (configurable)
41
+ - Close with Escape key
42
+ - Customizable slots (header and main content)
43
+ - Built-in gear SVG icon
44
+ - Disabled state
45
+ - Smooth transitions
46
+ - Compatible with SPA and SSR (Nuxt 3)
47
+ - Tree-shake friendly (Vue marked as external in build)
48
+ - TypeScript declarations included
49
+
50
+ ## Installation
51
+ Using npm:
52
+ ```bash
53
+ npm install @todovue/tv-settings
54
+ ```
55
+ Using yarn:
56
+ ```bash
57
+ yarn add @todovue/tv-settings
58
+ ```
59
+ Using pnpm:
60
+ ```bash
61
+ pnpm add @todovue/tv-settings
62
+ ```
63
+
64
+ ## Quick Start (SPA)
65
+ Global registration (main.js / main.ts):
66
+ ```js
67
+ import { createApp } from 'vue'
68
+ import App from './App.vue'
69
+ import TvSettings from '@todovue/tv-settings'
70
+
71
+ createApp(App)
72
+ .use(TvSettings) // enables <TvSettings /> globally
73
+ .mount('#app')
74
+ ```
75
+ Local import inside a component:
76
+ ```vue
77
+ <script setup>
78
+ import { TvSettings } from '@todovue/tv-settings'
79
+ import '@todovue/tv-settings/style.css'
80
+ </script>
81
+
82
+ <template>
83
+ <TvSettings direction="right">
84
+ <template #header>
85
+ <h2>Settings</h2>
86
+ </template>
87
+ <template #default="{ close }">
88
+ <p>Custom content</p>
89
+ <button @click="close">Close</button>
90
+ </template>
91
+ </TvSettings>
92
+ </template>
93
+ ```
94
+
95
+ ## Usage in Nuxt 4 / SSR
96
+ ```ts
97
+ // nuxt.config.ts
98
+ export default defineNuxtConfig({
99
+ modules: [
100
+ '@todovue/tv-button/nuxt'
101
+ ]
102
+ })
103
+ ```
104
+ Use anywhere:
105
+ ```vue
106
+ <TvSettings direction="left">
107
+ <template #default="{ direction }">
108
+ <p>Panel from {{ direction }}</p>
109
+ </template>
110
+ </TvSettings>
111
+ ```
112
+ Optional direct import (without plugin):
113
+ ```vue
114
+ <script setup>
115
+ import { TvSettings } from '@todovue/tv-settings'
116
+ import '@todovue/tv-settings/style.css'
117
+ </script>
118
+ ```
119
+
120
+ ## Component Registration Options
121
+ | Approach | When to use |
122
+ |-----------------------------------------------------------------------|----------------------------------------------|
123
+ | Global via `app.use(TvSettings)` | Multiple uses across the app / design system |
124
+ | Named local import `{ TvSettings }` | Isolated contexts / code-split |
125
+ | Default direct import `import TvSettings from '@todovue/tv-settings'` | Single use or manual registration |
126
+
127
+ ## Props
128
+ | Prop | Type | Default | Description |
129
+ |----------------|---------|-----------------|-------------------------------------------------------------------------|
130
+ | modelValue | Boolean | undefined | Bidirectional v-model control. If `undefined`, uses internal state. |
131
+ | direction | String | 'right' | Direction from which the panel slides: 'top', 'right', 'bottom', 'left' |
132
+ | disabled | Boolean | false | Disables the open button. |
133
+ | closeOnOutside | Boolean | true | If `true`, the panel closes when clicking outside. |
134
+ | label | String | 'Open settings' | ARIA label for the gear button (accessibility). |
135
+ | title | String | null | Optional title to display in the header. |
136
+
137
+ ## Events
138
+ | Event (kebab) | Emit (camel) | Description |
139
+ |---------------------|---------------------|-----------------------------------------|
140
+ | `update:modelValue` | `update:modelValue` | Emitted when open/closed state changes. |
141
+ | `open` | `open` | Emitted when the panel opens. |
142
+ | `close` | `close` | Emitted when the panel closes. |
143
+
144
+ Usage:
145
+ ```vue
146
+ <TvSettings
147
+ v-model="isOpen"
148
+ @open="handleOpen"
149
+ @close="handleClose"
150
+ />
151
+ ```
152
+
153
+ ## Slots
154
+ | Slot | Bindings | Description |
155
+ |---------|----------------------------------------------|--------------------------------------------|
156
+ | trigger | `{ isOpen, toggle, open, close }` | Replace the default gear button. |
157
+ | header | — | Panel header content (optional). |
158
+ | default | `{ direction, close, open }` | Main panel content with access to methods. |
159
+
160
+ ### Slot Examples
161
+ Header slot:
162
+ ```vue
163
+ <TvSettings>
164
+ <template #header>
165
+ <h2>My Settings</h2>
166
+ </template>
167
+ </TvSettings>
168
+ ```
169
+
170
+ Default slot with methods:
171
+ ```vue
172
+ <TvSettings>
173
+ <template #default="{ direction, close }">
174
+ <p>Panel from: {{ direction }}</p>
175
+ <button @click="close">Close</button>
176
+ </template>
177
+ </TvSettings>
178
+ ```
179
+
180
+ Trigger slot:
181
+ ```vue
182
+ <TvSettings>
183
+ <template #trigger="{ toggle }">
184
+ <button @click="toggle">My Custom Button</button>
185
+ </template>
186
+ <template #default>
187
+ <p>Content</p>
188
+ </template>
189
+ </TvSettings>
190
+ ```
191
+
192
+ ## Directions
193
+ The component supports 4 directions:
194
+ - `top` - Panel slides from top
195
+ - `right` - Panel slides from right (default)
196
+ - `bottom` - Panel slides from bottom
197
+ - `left` - Panel slides from left
198
+
199
+ Examples:
200
+ ```vue
201
+ <TvSettings direction="top" />
202
+ <TvSettings direction="right" />
203
+ <TvSettings direction="bottom" />
204
+ <TvSettings direction="left" />
205
+ ```
206
+
207
+ If an invalid direction is provided, the component will show a console warning and use `'right'` as default.
208
+
209
+ ## State Control
210
+ ### Uncontrolled Mode (Internal State)
211
+ By default, the component manages its own state:
212
+ ```vue
213
+ <TvSettings direction="left">
214
+ <p>Panel content</p>
215
+ </TvSettings>
216
+ ```
217
+
218
+ ### Controlled Mode (v-model)
219
+ Control state externally:
220
+ ```vue
221
+ <script setup>
222
+ import { ref } from 'vue'
223
+ const isOpen = ref(false)
224
+ </script>
225
+
226
+ <template>
227
+ <button @click="isOpen = !isOpen">Toggle Settings</button>
228
+ <TvSettings v-model="isOpen" direction="right">
229
+ <p>Controlled panel</p>
230
+ </TvSettings>
231
+ </template>
232
+ ```
233
+
234
+ ### Disable Close on Outside Click
235
+ ```vue
236
+ <TvSettings :close-on-outside="false" direction="left">
237
+ <template #default="{ close }">
238
+ <p>Only closes with button or ESC</p>
239
+ <button @click="close">Close</button>
240
+ </template>
241
+ </TvSettings>
242
+ ```
243
+
244
+ ## Customization (Styles / Themes)
245
+ The component uses CSS with BEM classes. You can override styles:
246
+
247
+ ```css
248
+ /* Customize gear button */
249
+ .tv-setting__gear {
250
+ background-color: #your-color;
251
+ color: #your-icon-color;
252
+ }
253
+
254
+ /* Customize panel */
255
+ .tv-setting__panel {
256
+ background-color: #your-panel-bg;
257
+ box-shadow: 0 4px 20px rgba(0,0,0,0.3);
258
+ }
259
+
260
+ /* Customize by direction */
261
+ .tv-setting--top .tv-setting__panel {
262
+ /* specific styles for top panel */
263
+ }
264
+ ```
265
+
266
+ Inline styles:
267
+ ```vue
268
+ <TvSettings
269
+ direction="right"
270
+ style="--panel-bg: #f0f0f0; --panel-width: 350px;"
271
+ >
272
+ <p>Custom panel</p>
273
+ </TvSettings>
274
+ ```
275
+
276
+ ## Accessibility
277
+ - The gear button includes `aria-label`, `aria-pressed` and `aria-expanded`.
278
+ - You can customize the aria-label text with the `label` prop.
279
+ - The panel has `role="dialog"`.
280
+ - Supports close with Escape key.
281
+ - Proper focus management for screen readers.
282
+
283
+ Example:
284
+ ```vue
285
+ <TvSettings label="Open settings panel" direction="right">
286
+ <p>Accessible content</p>
287
+ </TvSettings>
288
+ ```
289
+
290
+ ## SSR Notes
291
+ - No direct DOM access (`window` / `document`) in source code → SSR-safe.
292
+ - Styles are automatically applied when importing the library.
293
+ - Make sure to import `@todovue/tv-settings/style.css` in an SSR-compatible entry point (plugin or layout).
294
+ - Event listeners (outside click, keydown) are registered in `onMounted` to avoid SSR errors.
295
+
296
+ ## Development
297
+ ```bash
298
+ git clone https://github.com/TODOvue/tv-settings.git
299
+ cd tv-settings
300
+ npm install
301
+ npm run dev # run demo playground
302
+ npm run build # build library
303
+ ```
304
+ Local demo is served from Vite using `index.html` + examples in `src/demo`.
305
+
306
+ ## Contributing
307
+ PRs and issues are welcome. See [CONTRIBUTING.md](./CONTRIBUTING.md) and [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md).
308
+
309
+ ## License
310
+ MIT © TODOvue
311
+
312
+ ### Attributions
313
+ Developed for the TODOvue component ecosystem
314
+
@@ -0,0 +1,229 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project 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
+ ## [2.2.2] - 2026-01-27
9
+
10
+ ### Fixed
11
+ - Remove base path configuration for demo environment.
12
+
13
+ ## [2.2.1] - 2026-01-27
14
+
15
+ ### Changed
16
+ - Simplified the file list in `package.json` to include only essential assets.
17
+ - Simplified the build configuration by removing demo-specific logic.
18
+ - Enhanced GitHub Actions workflows to automate npm package publishing and GitHub release creation.
19
+ - Moved the `@todovue/tv-demo` component import from main.js to `Demo.vue` to localize its usage.
20
+ - Updated build commands to include `README.md` and `CHANGELOG.md` files in the public directory during the build process.
21
+
22
+ ### Added
23
+ - Included the `src` directory in the `package.json` files list to ensure component source files are bundled in the package distribution.
24
+
25
+ ### Removed
26
+ - Eliminated the global import of the `@todovue/tv-demo` component from `main.js`.
27
+
28
+ ### Dependencies
29
+ - Updated `@todovue/tv-demo` to `^1.4.11`.
30
+ - Updated `@todovue/tv-label` to `^1.2.3`.
31
+ - Updated `vue` to `^3.5.27`.
32
+ - Updated `sass` to `^1.97.3`.
33
+
34
+ ## [2.2.0] - 2026-01-20
35
+
36
+ ### Added
37
+ - Added `isOutline` and `size` props to `TvSidebar` to control `TvLabel` appearance.
38
+ - Added `searchable` prop to enable real-time search/filter functionality across all display modes (list, labels, image).
39
+ - Added `searchPlaceholder` prop to customize the search input placeholder text.
40
+ - Added `@search` event that emits the current search query whenever it changes.
41
+ - Added text highlighting for search matches in list and label modes using `<mark>` tags.
42
+ - Added search input UI with responsive styling for both dark and light modes.
43
+ - Added two new demo variants showcasing searchable list and searchable labels functionality.
44
+ - Added `grouped` prop to enable hierarchical organization of content with collapsible sections.
45
+ - Added support for grouped/categorized mode with collapsible group headers and item counters.
46
+ - Added smooth animations for expanding/collapsing groups.
47
+ - Added search/filter functionality within grouped mode that filters across all groups.
48
+ - Added three new demo variants showcasing grouped mode: basic, with search, and with limit.
49
+ - Added grouped mode data structure documentation and usage examples.
50
+ - Added `newLabelText` prop and `isNew` item property to show a customizable "New" badge on sidebar items.
51
+
52
+ ### Dependencies
53
+ - Updated the `@todovue/tv-demo` dependency to `^1.4.4`.
54
+ - Updated the `@todovue/tv-label` dependency to `^1.2.1`.
55
+ - Updated the `sass` dependency to `^1.97.2`.
56
+ - Updated the `vite` dependency to `^7.3.1`.
57
+
58
+ ### Changed
59
+ - Refined component styling by adding consistent padding for better spacing.
60
+ - Enhanced hover effects to provide clearer visual feedback during user interaction.
61
+
62
+ ### Removed
63
+ - Eliminated the unused `clickLabel` event emission to clean up the component API and improve internal efficiency.
64
+
65
+ ## [2.1.2] - 2025-12-27
66
+
67
+ ### Added
68
+ - Added automatic publishing to the TODOvue cPanel in `release.yml` for each release, simplifying package distribution and updates.
69
+ - Added `package-lock.json` to the repository to ensure dependency consistency and facilitate version management across development and production environments.
70
+
71
+ ### Changed
72
+ - Changed the `base` option in `vite.config.js` for website deployment in cpanel.
73
+
74
+ ### Fixed
75
+ - Fixed repository URL in `package.json` to point to the correct GitHub repository.
76
+ - Fixed the token configuration used to generate the package in the GitHub Actions workflow `release.yml`.
77
+
78
+ ### Dependencies
79
+ - Updated dependency versions in `package.json` to maintain compatibility and benefit from improvements and bug fixes in the used libraries.
80
+
81
+ ## [2.1.1] - 2025-11-24
82
+
83
+ ### Changed
84
+ - Updated background and text colors for dark and light themes to improve readability and visual comfort.
85
+
86
+ ### Dependencies
87
+ - Updated the `@todovue/tv-demo` dependency to `^1.2.2` to ensure compatibility with the latest changes.
88
+
89
+ ### [2.1.0] - 2025-11-21
90
+
91
+ ### Added
92
+ - Added `nux.js` configuration file for Nuxt 4 integration.
93
+ - Added `tsconfig.json` for proper type checking during build.
94
+ - Create `global.d.ts` to declare module for TypeScript users.
95
+ - Added Nuxt module for automatic style injection and auto-registration of the `TvSidebar` component.
96
+ - The `@todovue/tv-sidebar` component is now externalized from the final build, reducing bundle size.
97
+ - Added `CHANGELOG.md` in script to generate demo and documentation site.
98
+
99
+ ### Dependencies
100
+ - Updated the `@todovue/tv-demo` dependency to `^1.2.1` to ensure compatibility with the latest changes.
101
+ - Updated the `@todovue/tv-label` dependency to `^1.1.1` to ensure compatibility with the latest changes.
102
+
103
+ ## [2.0.2] - 2025-11-15
104
+
105
+ ### Changed
106
+ - Styles are now served as a separate CSS file (`dist/tv-sidebar.css`) generated by Vite during the build process.
107
+ - Users must now explicitly import the stylesheet in their application:
108
+ - For Vue/Vite SPA: `import '@todovue/tv-sidebar/style.css'` in `main.ts`
109
+ - For Nuxt 3/4: Add `'@todovue/tv-sidebar/style.css'` to the `css` array in `nuxt.config.ts`
110
+
111
+ ### Added
112
+ - Added `sideEffects` field to `package.json` to support proper tree-shaking with CSS files.
113
+ - Added `./style.css` export path in `package.json` for explicit CSS imports.
114
+ - Improved SSR/SSG compatibility, especially for Nuxt 3/4 applications.
115
+
116
+ ### Dependencies
117
+ - Removed dependency on `vite-plugin-css-injected-by-js` from `devDependencies`
118
+
119
+ ## [2.0.1] - 2025-11-13
120
+
121
+ ### Fixed
122
+ - Fixed list item styles and separator line appearance
123
+
124
+ ## [2.0.0] - 2025-11-13
125
+
126
+ ### Changed
127
+ - **BREAKING**: Removed navigation functionality - component no longer uses router links
128
+ - **BREAKING**: Removed `linkTag` prop - component now always emits events instead of navigating
129
+ - List items now use `<span>` elements with click handlers instead of router components
130
+ - All interactive elements (text items, labels, and images) now emit `click` event with the complete data object
131
+ - Image mode now always emits click event with image object when clicked
132
+
133
+ ### Added
134
+ - `clickItem` method in `useSidebar` composable to handle text item clicks
135
+ - `clickImage` method in `useSidebar` composable to handle image clicks
136
+ - Enhanced event emission: all item types (text, labels, images) now consistently emit the full object on click
137
+
138
+ ### Removed
139
+ - `linkTag` prop (no longer needed without navigation)
140
+ - `clickable` prop (no longer needed as all items are clickable by default)
141
+ - `linkComponent` computed property from `useSidebar` composable
142
+ - Router/Nuxt link dependencies
143
+
144
+ ### Fixed
145
+ - Maintained original styling for text items after changing from router links to span elements
146
+ - Proper color application for both dark and light modes
147
+ - Consistent hover states and cursor pointers for all clickable elements
148
+
149
+ ## [1.0.0] - 2025-01-19
150
+
151
+ ### Added
152
+ - Initial release of `@todovue/tv-sidebar` component
153
+ - Three display modes:
154
+ - **Default List Mode**: Numbered list with links
155
+ - **Categories/Labels Mode**: Colored category labels with click events
156
+ - **Image Mode**: Display images with optional clickable links
157
+ - Core props:
158
+ - `data` - Main data object for sidebar content
159
+ - `linkTag` - Support for both `router-link` (Vue Router) and `nuxt-link` (Nuxt)
160
+ - `isImage` - Enable image display mode
161
+ - `isLabel` - Enable categories/labels display mode
162
+ - `limit` - Control maximum number of items displayed
163
+ - `clickable` - Make images clickable in image mode
164
+ - Events:
165
+ - `clickLabel` - Emitted when a label/category is clicked
166
+ - `click` - Native click passthrough
167
+ - `useSidebar` composable for component logic:
168
+ - Dynamic link component resolution
169
+ - List limiting functionality
170
+ - Label click handling
171
+ - SCSS styling with:
172
+ - Clean, minimal design
173
+ - Responsive layout
174
+ - Title with separator line
175
+ - Hover effects on links
176
+ - Proper spacing and typography
177
+ - SSR compatibility (Nuxt 3 ready)
178
+ - Tree-shakeable build with Vue as external dependency
179
+ - TypeScript support with type definitions
180
+ - Integration with `@todovue/tv-label` for category display
181
+ - Demo playground with multiple examples:
182
+ - Default list view
183
+ - Default with item limit
184
+ - Categories view
185
+ - Categories with limit
186
+ - Image view
187
+ - Clickable image view
188
+ - Comprehensive documentation:
189
+ - Installation guides for npm, yarn, and pnpm
190
+ - Quick start for SPA and Nuxt 3/SSR
191
+ - Component registration options
192
+ - Props and events documentation
193
+ - Usage examples for all modes
194
+ - Data structure specifications
195
+ - Styling and customization guide
196
+ - Router integration guide
197
+ - Accessibility notes
198
+
199
+ ### Features
200
+ - Framework-agnostic sidebar component for Vue 3
201
+ - Multiple layout options for different content types
202
+ - Flexible routing system compatible with Vue Router and Nuxt
203
+ - Responsive and accessible design
204
+ - Zero DOM assumptions (SSR-safe)
205
+ - No direct `window` or `document` access
206
+ - Auto-imported styles when using the component
207
+ - Semantic HTML structure
208
+ - Keyboard navigation support
209
+ - ARIA-compliant markup
210
+
211
+ ### Technical Details
212
+ - Built with Vite
213
+ - SCSS for styling with modular architecture
214
+ - Composition API with composables
215
+ - TypeScript entry point
216
+ - ES Module and CommonJS builds
217
+ - Minimal bundle size with external Vue dependency
218
+ - Node.js >= 20.19.0 required
219
+
220
+ [2.2.2]: https://github.com/TODOvue/tv-sidebar/pull/11/files
221
+ [2.2.1]: https://github.com/TODOvue/tv-sidebar/pull/10/files
222
+ [2.2.0]: https://github.com/TODOvue/tv-sidebar/pull/9/files
223
+ [2.1.2]: https://github.com/TODOvue/tv-sidebar/pull/8/files
224
+ [2.1.1]: https://github.com/TODOvue/tv-sidebar/pull/7/files
225
+ [2.1.0]: https://github.com/TODOvue/tv-sidebar/pull/6/files
226
+ [2.0.2]: https://github.com/TODOvue/tv-sidebar/pull/4/files
227
+ [2.0.1]: https://github.com/TODOvue/tv-sidebar/pull/3/files
228
+ [2.0.0]: https://github.com/TODOvue/tv-sidebar/pull/2/files
229
+ [1.0.0]: https://github.com/TODOvue/tv-sidebar/pull/1/files