orio-ui 1.10.2 → 1.10.4

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 CHANGED
@@ -1,18 +1,18 @@
1
1
  # Orio UI
2
2
 
3
- A delightful, lightweight component library for Nuxt 3 applications. Built with TypeScript, fully tested, and designed for modern web development.
3
+ A delightful, lightweight component library for Nuxt 3+ applications. Built with TypeScript, fully tested, and designed for modern web development.
4
4
 
5
5
  [![npm version](https://img.shields.io/npm/v/orio-ui.svg)](https://www.npmjs.com/package/orio-ui)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
7
 
8
8
  ## Features
9
9
 
10
- ✨ **18 Components** - Beautiful, accessible components ready to use
10
+ ✨ **26 Components** - Beautiful, accessible components ready to use
11
11
  🎨 **Themeable** - 5 built-in accent themes with light/dark mode support
12
12
  🚀 **Auto-imported** - Works seamlessly with Nuxt's auto-import system
13
13
  📦 **Tree-shakeable** - Only bundle what you use
14
14
  🎯 **TypeScript** - Fully typed for great developer experience
15
- 🧪 **Tested** - 71+ unit tests for reliability
15
+ 🧪 **Tested** - 240+ unit tests for reliability
16
16
  📱 **Responsive** - Mobile-first design approach
17
17
  ♿ **Accessible** - ARIA-compliant components
18
18
 
@@ -65,31 +65,37 @@ function handleClick() {
65
65
 
66
66
  ## What's Included
67
67
 
68
- ### Components (18)
68
+ ### Components (26)
69
69
 
70
70
  #### Form Controls
71
71
 
72
72
  - **Input** - Text input with label support
73
73
  - **Textarea** - Multi-line text input
74
+ - **NumberInput** - Numeric input with increment/decrement (horizontal & vertical variants)
74
75
  - **CheckBox** - Custom checkbox with icon states
76
+ - **SwitchButton** - Toggle switch component
75
77
  - **DatePicker** - Date selection with month/year options
76
78
  - **DateRangePicker** - Start and end date selection
77
79
  - **Selector** - Generic dropdown selector (single/multi-select)
78
80
  - **Tag** - Styled tag/badge component
81
+ - **Badge** - Status badge with variants
79
82
 
80
83
  #### Interactive
81
84
 
82
85
  - **Button** - Primary, secondary, subdued variants with loading/icon support
86
+ - **NavButton** - Navigation button component
83
87
  - **Modal** - Animated modal with origin morphing
84
88
  - **Popover** - Positioned popover with smart placement
89
+ - **Tooltip** - Hover tooltip component
85
90
 
86
91
  #### Display
87
92
 
88
- - **Icon** - SVG icon system with 12 bundled icons
93
+ - **Icon** - SVG icon system with 97 bundled icons
89
94
  - **LoadingSpinner** - Animated loading indicator
90
95
  - **EmptyState** - Empty state placeholder
91
96
  - **DashedContainer** - Dashed border container with icon
92
97
  - **ControlElement** - Form control wrapper
98
+ - **AnimatedContainer** - Flex container with fade-in animation and optional sound
93
99
 
94
100
  #### View
95
101
 
@@ -97,12 +103,23 @@ function handleClick() {
97
103
  - **Dates** - Date range display formatter
98
104
  - **Separator** - Visual divider
99
105
 
100
- ### Composables (4)
106
+ #### Gallery
107
+
108
+ - **Carousel** - Image carousel component
109
+
110
+ #### Upload
111
+
112
+ - **Upload** - File upload component
113
+
114
+ ### Composables (7)
101
115
 
102
116
  - **useTheme** - Theme and color mode management
103
117
  - **useModal** - Modal state with animation origin tracking
104
118
  - **useFuzzySearch** - Fuzzy search powered by Fuse.js
105
119
  - **useApi** - Type-safe API request wrapper
120
+ - **useDecimalFormatter** - Number formatting utilities
121
+ - **usePressAndHold** - Press and hold interaction handler
122
+ - **useSound** - Audio playback with CDN-hosted sounds
106
123
 
107
124
  ### Theming
108
125
 
@@ -166,8 +183,8 @@ npm run docs:dev
166
183
  orio-ui/
167
184
  ├── src/
168
185
  │ ├── runtime/
169
- │ │ ├── components/ # 18 Vue components
170
- │ │ ├── composables/ # 4 composables
186
+ │ │ ├── components/ # 26 Vue components
187
+ │ │ ├── composables/ # 7 composables
171
188
  │ │ ├── assets/css/ # Theme CSS files
172
189
  │ │ └── utils/ # Icon registry
173
190
  │ └── module.ts # Nuxt Module definition
package/dist/module.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "compatibility": {
5
5
  "nuxt": "^3.0.0 || ^4.0.0"
6
6
  },
7
- "version": "1.10.2",
7
+ "version": "1.10.4",
8
8
  "builder": {
9
9
  "@nuxt/module-builder": "0.8.4",
10
10
  "unbuild": "2.0.0"
@@ -1,4 +1,6 @@
1
1
  <script setup lang="ts">
2
+ import { useSound } from "../composables/useSound";
3
+
2
4
  interface Props {
3
5
  direction?: "column" | "row";
4
6
  }
@@ -6,11 +8,13 @@ interface Props {
6
8
  withDefaults(defineProps<Props>(), {
7
9
  direction: "row",
8
10
  });
11
+
12
+ const { play } = useSound();
9
13
  </script>
10
14
 
11
15
  <template>
12
16
  <div class="animated-container" :class="[direction]">
13
- <slot />
17
+ <slot :play />
14
18
  </div>
15
19
  </template>
16
20
 
@@ -4,3 +4,4 @@ export { useModal, type ModalProps, type OriginRect } from "./useModal.js";
4
4
  export { useTheme } from "./useTheme.js";
5
5
  export { useDecimalFormatter } from "./useDecimalFormatter.js";
6
6
  export { usePressAndHold } from "./usePressAndHold.js";
7
+ export { useSound, type SoundOptions } from "./useSound.js";
@@ -6,3 +6,4 @@ export { useModal } from "./useModal.js";
6
6
  export { useTheme } from "./useTheme.js";
7
7
  export { useDecimalFormatter } from "./useDecimalFormatter.js";
8
8
  export { usePressAndHold } from "./usePressAndHold.js";
9
+ export { useSound } from "./useSound.js";
@@ -0,0 +1,7 @@
1
+ export interface SoundOptions {
2
+ src?: string;
3
+ volume?: number;
4
+ }
5
+ export declare function useSound(options?: SoundOptions): {
6
+ play: () => void;
7
+ };
@@ -0,0 +1,13 @@
1
+ const DEFAULT_SOUND = "https://cdn.jsdelivr.net/gh/oriondor/orio-ui@main/docs/public/sounds/mechanical-switch.wav";
2
+ export function useSound(options = {}) {
3
+ const { src = DEFAULT_SOUND, volume = 0.3 } = options;
4
+ const audio = typeof window !== "undefined" ? new Audio(src) : null;
5
+ const play = () => {
6
+ if (!audio) return;
7
+ audio.currentTime = 0;
8
+ audio.volume = volume;
9
+ audio.play().catch(() => {
10
+ });
11
+ };
12
+ return { play };
13
+ }
@@ -1,3 +1,4 @@
1
+ export { default as AnimatedContainer } from "./components/AnimatedContainer.vue.js";
1
2
  export { default as Button } from "./components/Button.vue.js";
2
3
  export { default as NavButton } from "./components/NavButton.vue.js";
3
4
  export { default as Input } from "./components/Input.vue.js";
@@ -1,3 +1,4 @@
1
+ export { default as AnimatedContainer } from "./components/AnimatedContainer.vue";
1
2
  export { default as Button } from "./components/Button.vue";
2
3
  export { default as NavButton } from "./components/NavButton.vue";
3
4
  export { default as Input } from "./components/Input.vue";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "orio-ui",
3
- "version": "1.10.2",
3
+ "version": "1.10.4",
4
4
  "description": "Modern Nuxt component library with theme support",
5
5
  "type": "module",
6
6
  "main": "./dist/module.mjs",