@todovue/tv-ui 0.1.0 → 0.1.1

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 (48) hide show
  1. package/README.md +20 -20
  2. package/dist/entry.d.ts +2 -2
  3. package/dist/tv-ui.cjs.js +1 -1
  4. package/dist/tv-ui.css +1 -1
  5. package/dist/tv-ui.es.js +50 -49
  6. package/package.json +1 -1
  7. package/dist/.htaccess +0 -8
  8. package/dist/demos/tv-alert/CHANGELOG.md +0 -127
  9. package/dist/demos/tv-alert/README.md +0 -334
  10. package/dist/demos/tv-article/CHANGELOG.md +0 -221
  11. package/dist/demos/tv-article/README.md +0 -258
  12. package/dist/demos/tv-breadcrumbs/CHANGELOG.md +0 -135
  13. package/dist/demos/tv-breadcrumbs/README.md +0 -364
  14. package/dist/demos/tv-button/CHANGELOG.md +0 -158
  15. package/dist/demos/tv-button/README.md +0 -255
  16. package/dist/demos/tv-card/CHANGELOG.md +0 -158
  17. package/dist/demos/tv-card/README.md +0 -332
  18. package/dist/demos/tv-demo/CHANGELOG.md +0 -352
  19. package/dist/demos/tv-demo/README.md +0 -229
  20. package/dist/demos/tv-footer/CHANGELOG.md +0 -67
  21. package/dist/demos/tv-footer/README.md +0 -760
  22. package/dist/demos/tv-hero/CHANGELOG.md +0 -137
  23. package/dist/demos/tv-hero/README.md +0 -410
  24. package/dist/demos/tv-label/CHANGELOG.md +0 -138
  25. package/dist/demos/tv-label/README.md +0 -357
  26. package/dist/demos/tv-menu/CHANGELOG.md +0 -145
  27. package/dist/demos/tv-menu/README.md +0 -389
  28. package/dist/demos/tv-modal/CHANGELOG.md +0 -127
  29. package/dist/demos/tv-modal/README.md +0 -466
  30. package/dist/demos/tv-pagination/CHANGELOG.md +0 -125
  31. package/dist/demos/tv-pagination/README.md +0 -275
  32. package/dist/demos/tv-progress-bar/CHANGELOG.md +0 -84
  33. package/dist/demos/tv-progress-bar/README.md +0 -894
  34. package/dist/demos/tv-relative-time/CHANGELOG.md +0 -122
  35. package/dist/demos/tv-relative-time/README.md +0 -405
  36. package/dist/demos/tv-scroll-top/CHANGELOG.md +0 -69
  37. package/dist/demos/tv-scroll-top/README.md +0 -445
  38. package/dist/demos/tv-search/CHANGELOG.md +0 -155
  39. package/dist/demos/tv-search/README.md +0 -407
  40. package/dist/demos/tv-settings/CHANGELOG.md +0 -94
  41. package/dist/demos/tv-settings/README.md +0 -314
  42. package/dist/demos/tv-sidebar/CHANGELOG.md +0 -229
  43. package/dist/demos/tv-sidebar/README.md +0 -592
  44. package/dist/demos/tv-theme-button/CHANGELOG.md +0 -136
  45. package/dist/demos/tv-theme-button/README.md +0 -392
  46. package/dist/demos/tv-toc/CHANGELOG.md +0 -80
  47. package/dist/demos/tv-toc/README.md +0 -288
  48. package/dist/favicon.ico +0 -0
@@ -1,389 +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 Menu (TvMenu)
5
- A flexible, responsive Vue 3 menu component with integrated search functionality, mobile-friendly navigation, and easy customization. Perfect for Single Page Apps or Server-Side Rendered (SSR) environments like Nuxt 3.
6
-
7
- [![npm](https://img.shields.io/npm/v/@todovue/tv-menu.svg)](https://www.npmjs.com/package/@todovue/tv-menu)
8
- [![npm downloads](https://img.shields.io/npm/dm/@todovue/tv-menu.svg)](https://www.npmjs.com/package/@todovue/tv-menu)
9
- [![npm total downloads](https://img.shields.io/npm/dt/@todovue/tv-menu.svg)](https://www.npmjs.com/package/@todovue/tv-menu)
10
- ![License](https://img.shields.io/github/license/TODOvue/tv-menu)
11
- ![Release Date](https://img.shields.io/github/release-date/TODOvue/tv-menu)
12
- ![Bundle Size](https://img.shields.io/bundlephobia/minzip/@todovue/tv-menu)
13
- ![Node Version](https://img.shields.io/node/v/@todovue/tv-menu)
14
- ![Last Commit](https://img.shields.io/github/last-commit/TODOvue/tv-menu)
15
- ![Stars](https://img.shields.io/github/stars/TODOvue/tv-menu?style=social)
16
-
17
- > Demo: https://ui.todovue.blog/menu
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
- - [Usage Examples](#usage-examples)
28
- - [Responsive Behavior](#responsive-behavior)
29
- - [Customization (Styles / Theming)](#customization-styles--theming)
30
- - [Accessibility](#accessibility)
31
- - [SSR Notes](#ssr-notes)
32
- - [Development](#development)
33
- - [Contributing](#contributing)
34
- - [License](#license)
35
-
36
- ## Features
37
- - Responsive navigation menu with desktop and mobile views
38
- - Integrated search functionality powered by `@todovue/tv-search`
39
- - Logo/image click support with custom event handling
40
- - Menu item click events with data payload
41
- - Automatic mobile menu toggle with hamburger icon
42
- - Clean, modern design with customizable styling
43
- - Works seamlessly in SPA and SSR (Nuxt 3) contexts
44
- - Tree-shake friendly (Vue marked external in library build)
45
-
46
- ## Installation
47
- Using npm:
48
- ```bash
49
- npm install @todovue/tv-menu
50
- ```
51
- Using yarn:
52
- ```bash
53
- yarn add @todovue/tv-menu
54
- ```
55
- Using pnpm:
56
- ```bash
57
- pnpm add @todovue/tv-menu
58
- ```
59
-
60
- ## Quick Start (SPA)
61
- Global registration (main.js / main.ts):
62
- ```js
63
- import { createApp } from 'vue'
64
- import App from './App.vue'
65
- import TvMenu from '@todovue/tv-menu'
66
- import '@todovue/tv-menu/style.css' // import styles
67
- import '@todovue/tv-search/style.css' // import styles
68
- import '@todovue/tv-button/style.css' // import styles
69
-
70
- createApp(App)
71
- .use(TvMenu) // enables <TvMenu /> globally
72
- .mount('#app')
73
- ```
74
- Local import inside a component:
75
- ```vue
76
- <script setup>
77
- import { TvMenu } from '@todovue/tv-menu'
78
- import '@todovue/tv-menu/style.css' // import styles
79
- import '@todovue/tv-search/style.css' // import styles
80
- import '@todovue/tv-button/style.css' // import styles
81
-
82
- const menuItems = [
83
- { id: 1, title: 'Home', url: '/' },
84
- { id: 2, title: 'About', url: '/about' },
85
- { id: 3, title: 'Contact', url: '/contact' }
86
- ]
87
-
88
- function handleMenuClick(menu) {
89
- console.log('Clicked:', menu)
90
- // Navigate to menu.url or perform custom action
91
- }
92
-
93
- function handleImageClick() {
94
- console.log('Logo clicked')
95
- }
96
-
97
- function handleSearch(searchTerm) {
98
- console.log('Search:', searchTerm)
99
- }
100
- </script>
101
-
102
- <template>
103
- <TvMenu
104
- :menus="menuItems"
105
- placeholder="Search..."
106
- titleButton="Search"
107
- imageMenu="https://example.com/logo.png"
108
- @clickImage="handleImageClick"
109
- @clickMenu="handleMenuClick"
110
- @searchMenu="handleSearch"
111
- />
112
- </template>
113
- ```
114
-
115
- ## Nuxt 4 / SSR Usage
116
- Create a plugin file: `plugins/tv-menu.client.ts`:
117
- ```ts
118
- // nuxt.config.ts
119
- export default defineNuxtConfig({
120
- modules: [
121
- '@todovue/tv-menu/nuxt'
122
- ]
123
- })
124
- ```
125
- Use anywhere in your Nuxt app:
126
- ```vue
127
- <template>
128
- <TvMenu
129
- :menus="navigationItems"
130
- placeholder="Search..."
131
- imageMenu="/logo.png"
132
- @clickMenu="navigateTo"
133
- />
134
- </template>
135
- ```
136
-
137
- ## Component Registration Options
138
- | Approach | When to use |
139
- |-----------------------------------------------------------------|------------------------------------------------|
140
- | Global via `app.use(TvMenu)` | Many usages across app / design system install |
141
- | Local named import `{ TvMenu }` | Isolated / code-split contexts |
142
- | Direct default import `import TvMenu from '@todovue/tv-menu'` | Single usage or manual registration |
143
-
144
- ## Props
145
- | Prop | Type | Default | Description |
146
- |---------------|---------------|--------------------|----------------------------------------------------------|
147
- | menus | Array | [] | Array of menu items with `{ id, title, url }` structure. |
148
- | placeholder | String | '' | Placeholder text for the search input. |
149
- | titleButton | String | '' | Label for the search button. |
150
- | imageMenu | String | '' | URL of the logo/image to display in the menu header. |
151
- | noResultsText | String | 'No results found' | Text displayed when search yields no results. |
152
- | activeMenu | String/Number | null | The ID of the currently active menu item. |
153
-
154
- ### Menu Item Structure
155
- Each item in the `menus` array should have this structure:
156
- ```js
157
- {
158
- id: Number, // unique identifier
159
- title: String, // display text
160
- url: String // navigation path or identifier
161
- }
162
- ```
163
-
164
- ## Events
165
- | Event name (kebab) | Payload | Description |
166
- |---------------------|-------------|--------------------------------------------------|
167
- | `clickImage` | — | Emitted when the logo/image is clicked. |
168
- | `clickMenu` | menu object | Emitted when a menu item is clicked. |
169
- | `searchMenu` | search term | Emitted when search is performed (string value). |
170
- | `update:activeMenu` | menu id | Emitted when the active menu item changes. |
171
-
172
- Usage examples:
173
- ```vue
174
- <TvMenu
175
- @clickImage="handleLogoClick"
176
- @clickMenu="handleNavigation"
177
- @searchMenu="performSearch"
178
- />
179
- ```
180
-
181
- ## Slots
182
- | Slot Name | Props | Description |
183
- |---------------|------------------------|--------------------------------------------------------|
184
- | `logo` | — | Replace the default logo image. |
185
- | `item` | `{ menu, isActive }` | Customize the rendering of each menu item. |
186
- | `action-end` | — | Add content after the search bar (e.g., User Profile). |
187
-
188
- ### Example with Slots
189
- ```vue
190
- <TvMenu :menus="menus" v-model:activeMenu="activeId">
191
- <template #logo>
192
- <div class="my-logo">My App</div>
193
- </template>
194
-
195
- <template #item="{ menu, isActive }">
196
- <span :class="{ 'highlight': isActive }">
197
- <i class="icon" v-if="menu.icon" :class="menu.icon"></i>
198
- {{ menu.title }}
199
- </span>
200
- </template>
201
-
202
- <template #action-end>
203
- <div class="user-profile">User</div>
204
- </template>
205
- </TvMenu>
206
- ```
207
-
208
- ## Usage Examples
209
-
210
- ### Basic Navigation Menu
211
- ```vue
212
- <script setup>
213
- import { TvMenu } from '@todovue/tv-menu'
214
- import { useRouter } from 'vue-router'
215
-
216
- const router = useRouter()
217
-
218
- const menus = [
219
- { id: 1, title: 'Home', url: '/' },
220
- { id: 2, title: 'About', url: '/about' },
221
- { id: 3, title: 'Blog', url: '/blog' },
222
- { id: 4, title: 'Contact', url: '/contact' }
223
- ]
224
-
225
- function navigateToPage(menu) {
226
- router.push(menu.url)
227
- }
228
- </script>
229
-
230
- <template>
231
- <TvMenu
232
- :menus="menus"
233
- placeholder="Search pages..."
234
- titleButton="Go"
235
- imageMenu="/logo.png"
236
- @clickMenu="navigateToPage"
237
- />
238
- </template>
239
- ```
240
-
241
- ### With Search Functionality
242
- ```vue
243
- <script setup>
244
- import { TvMenu } from '@todovue/tv-menu'
245
- import { ref } from 'vue'
246
-
247
- const searchResults = ref([])
248
-
249
- function handleSearch(term) {
250
- // Perform search logic
251
- fetch(`/api/search?q=${term}`)
252
- .then(res => res.json())
253
- .then(data => searchResults.value = data)
254
- }
255
- </script>
256
-
257
- <template>
258
- <TvMenu
259
- :menus="navigationItems"
260
- placeholder="Search our site..."
261
- titleButton="Search"
262
- imageMenu="/brand-logo.png"
263
- @searchMenu="handleSearch"
264
- />
265
- </template>
266
- ```
267
-
268
- ### E-commerce Navigation
269
- ```vue
270
- <script setup>
271
- import '@todovue/tv-menu/style.css'
272
- import { TvMenu } from '@todovue/tv-menu'
273
-
274
- const categories = [
275
- { id: 1, title: 'Shop', url: '/shop' },
276
- { id: 2, title: 'New Arrivals', url: '/new' },
277
- { id: 3, title: 'Sale', url: '/sale' },
278
- { id: 4, title: 'My Account', url: '/account' }
279
- ]
280
-
281
- function onLogoClick() {
282
- window.location.href = '/'
283
- }
284
-
285
- function navigateTo(menu) {
286
- window.location.href = menu.url
287
- }
288
-
289
- function searchProducts(query) {
290
- // Product search logic
291
- console.log('Searching products:', query)
292
- }
293
- </script>
294
-
295
- <template>
296
- <TvMenu
297
- :menus="categories"
298
- placeholder="Search products..."
299
- titleButton="Find"
300
- imageMenu="https://example.com/store-logo.png"
301
- @clickImage="onLogoClick"
302
- @clickMenu="navigateTo"
303
- @searchMenu="searchProducts"
304
- />
305
- </template>
306
- ```
307
-
308
- ## Responsive Behavior
309
- - **Desktop view**: Full horizontal menu with all items visible + integrated search
310
- - **Mobile view**: Hamburger icon that toggles a slide-in menu overlay
311
- - **Automatic breakpoint**: Menu adapts automatically using CSS media queries
312
- - **Touch-friendly**: All interactive elements are optimized for touch devices
313
-
314
- ## Customization (Styles / Theming)
315
- The component uses SCSS with a modular structure. You can override styles by targeting the following CSS classes:
316
-
317
- ### Main Classes
318
- - `.tv-menu-container` - Main menu wrapper
319
- - `.tv-menu-image` - Logo container
320
- - `.tv-menu-items` - Desktop menu items container
321
- - `.tv-menu-item` - Individual menu item (desktop)
322
- - `.tv-menu-icon` - Hamburger menu icon
323
- - `.tv-menu-items-mobile` - Mobile menu overlay
324
- - `.tv-menu-item-mobile` - Individual menu item (mobile)
325
-
326
- ### Example Custom Styling
327
- ```css
328
- /* Custom menu colors */
329
- .tv-menu-container {
330
- background-color: #0f2e5b;
331
- }
332
-
333
- .tv-menu-item {
334
- color: #ffffff;
335
- font-weight: 600;
336
- }
337
-
338
- .tv-menu-item:hover {
339
- color: #ff4081;
340
- }
341
-
342
- /* Custom logo size */
343
- .tv-menu-image img {
344
- width: 200px;
345
- height: auto;
346
- }
347
- ```
348
-
349
- ## Accessibility
350
- - Semantic HTML5 elements (`<header>`, `<nav>`, `<ul>`, `<li>`)
351
- - Keyboard navigation support for all interactive elements
352
- - Alt text support for logo image
353
- - Click events work with keyboard (Enter/Space)
354
- - Mobile menu properly handles focus management
355
-
356
- ### Best Practices
357
- - Always provide meaningful `alt` text via the logo image URL
358
- - Ensure menu items have descriptive titles
359
- - Test keyboard navigation (Tab, Enter, Escape)
360
-
361
- ## SSR Notes
362
- - No direct DOM (`window` / `document`) access in core component → safe for SSR
363
- - Styles are automatically injected when you import the library
364
- - Works with Vite-based SSR and Nuxt 3 out of the box
365
- - Mobile menu state is managed via Vue reactivity (no localStorage dependencies)
366
-
367
- ## Development
368
- ```bash
369
- git clone https://github.com/TODOvue/tv-menu.git
370
- cd tv-menu
371
- npm install
372
- npm run dev # run demo playground
373
- npm run build # build library
374
- ```
375
- Local demo served from Vite using `index.html` + `src/demo` examples.
376
-
377
- ## Contributing
378
- PRs and issues welcome. See [CONTRIBUTING.md](./CONTRIBUTING.md) and [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md).
379
-
380
- Please ensure:
381
- - Code follows existing style conventions
382
- - Tests pass (when available)
383
- - Documentation is updated for new features
384
-
385
- ## License
386
- MIT © TODOvue
387
-
388
- ### Attributions
389
- Crafted for the TODOvue component ecosystem
@@ -1,127 +0,0 @@
1
- # Changelog
2
-
3
- All notable changes to `@todovue/tv-modal` 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.2.1] - 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 `@todovue/tv-button` to `^1.2.5`.
26
- - Updated `vue` to `^3.5.27`.
27
- - Updated `sass` to `^1.97.3`.
28
-
29
- ## [1.2.0] - 2026-01-20
30
-
31
- ### Added
32
- - Enhanced the Modal component with dedicated slot support for headers and footers, allowing for greater customization of layout and content.
33
- - Enhanced button variant support to include specific styles for confirm and cancel actions, improving visual clarity for user decision-making.
34
- - Introduced the `closeOnBackdrop` property to provide control over whether the modal closes when the backdrop is clicked.
35
-
36
- ### Changed
37
- - Replaced background images in modal alerts with SVG icons to improve scaling, performance, and color customization.
38
-
39
- ### Dependencies
40
- - Updated the `@todovue/tv-demo` dependency to `^1.4.4`.
41
- - Updated the `@todovue/tv-button` dependency to `^1.2.4`.
42
- - Updated the `sass` dependency to `^1.97.2`.
43
- - Updated the `vite` dependency to `^7.3.1`.
44
-
45
- ## [1.1.2] - 2025-12-24
46
-
47
- ### Added
48
- - Added automatic publishing to the TODOvue cPanel in `release.yml` for each release, simplifying package distribution and updates.
49
- - Added `package-lock.json` to the repository to ensure dependency consistency and facilitate version management across development and production environments.
50
-
51
- ### Changed
52
- - Changed the `base` option in `vite.config.js` for website deployment in cpanel.
53
-
54
- ### Fixed
55
- - Fixed repository URL in `package.json` to point to the correct GitHub repository.
56
- - Fixed the token configuration used to generate the package in the GitHub Actions workflow `release.yml`.
57
-
58
- ### Dependencies
59
- - Updated dependency versions in `package.json` to maintain compatibility and benefit from improvements and bug fixes in the used libraries.
60
-
61
- ## [1.1.1] - 2025-11-24
62
-
63
- ### Changed
64
- - Updated background and text colors for dark and light themes to improve readability and visual comfort.
65
- - Deleted unused styles files.
66
-
67
- ### Dependencies
68
- - Updated the `@todovue/tv-demo` dependency to `^1.2.2` to ensure compatibility with the latest changes.
69
-
70
- ## [1.1.0] - 2025-11-21
71
-
72
- ### Added
73
- - Added `nux.js` configuration file for Nuxt 4 integration.
74
- - Added `tsconfig.json` for proper type checking during build.
75
- - Create `global.d.ts` to declare module for TypeScript users.
76
- - Added Nuxt module for automatic style injection and auto-registration of the `TvModal` component.
77
- - The `@todovue/tv-modal` component is now externalized from the final build, reducing bundle size.
78
- - Added `CHANGELOG.md` in script to generate demo and documentation site.
79
-
80
- ### Dependencies
81
- - Updated the `@todovue/tv-demo` dependency to `^1.2.1` to ensure compatibility with the latest changes.
82
- - Updated the `@todovue/tv-button` dependency to `^1.2.2` to ensure compatibility with the latest changes.
83
-
84
- ## [1.0.1] - 2025-11-15
85
-
86
- ### Changed
87
- - Styles are now served as a separate CSS file (`dist/tv-modal.css`) generated by Vite during the build process.
88
- - Users must now explicitly import the stylesheet in their application:
89
- - For Vue/Vite SPA: `import '@todovue/tv-modal/style.css'` in `main.ts`
90
- - For Nuxt 3/4: Add `'@todovue/tv-modal/style.css'` to the `css` array in `nuxt.config.ts`
91
-
92
- ### Added
93
- - Added `sideEffects` field to `package.json` to support proper tree-shaking with CSS files.
94
- - Added `./style.css` export path in `package.json` for explicit CSS imports.
95
- - Improved SSR/SSG compatibility, especially for Nuxt 3/4 applications.
96
-
97
- ### Dependencies
98
- - Removed dependency on `vite-plugin-css-injected-by-js` from `devDependencies`.
99
-
100
- ## [1.0.0] - 2025-10-20
101
-
102
- ### Added
103
- - Initial release of TvModal component
104
- - Multiple modal variants: success, error, warning, and info icons
105
- - Configurable modal with `configModal` prop accepting title, description, and button texts
106
- - Theme support with automatic detection of dark-mode and light-mode
107
- - Manual theme override via `theme` prop
108
- - Built-in animations: scale-up on open, scale-down on close, and rotate shake on overlay click
109
- - Vue Teleport integration for proper modal rendering at body level
110
- - Keyboard navigation support (ESC key to close/cancel)
111
- - Focus management: automatically focuses modal on open and restores focus on close
112
- - Custom events: `accepted` and `canceled` for user actions
113
- - Accessibility features: ARIA attributes (role="dialog", aria-modal, aria-labelledby, aria-describedby)
114
- - Integration with @todovue/tv-button for action buttons
115
- - SSR compatibility (Nuxt 3 ready)
116
- - Composable `useModal` for modal state and behavior management
117
- - Dynamic theme detection with MutationObserver for real-time updates
118
- - Customizable confirm and cancel buttons with conditional rendering
119
- - Flexible modal configuration with validation
120
-
121
- [1.2.1]: https://github.com/TODOvue/tv-modal/pull/7/files
122
- [1.2.0]: https://github.com/TODOvue/tv-modal/pull/6/files
123
- [1.1.2]: https://github.com/TODOvue/tv-modal/pull/5/files
124
- [1.1.1]: https://github.com/TODOvue/tv-modal/pull/4/files
125
- [1.1.0]: https://github.com/TODOvue/tv-modal/pull/3/files
126
- [1.0.1]: https://github.com/TODOvue/tv-modal/pull/2/files
127
- [1.0.0]: https://github.com/TODOvue/tv-modal/pull/1/files