orio-ui 0.1.1 → 1.0.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.
Files changed (62) hide show
  1. package/README.md +9 -7
  2. package/dist/module.cjs +5 -0
  3. package/dist/module.d.mts +3 -0
  4. package/dist/module.d.ts +3 -0
  5. package/dist/module.json +12 -0
  6. package/dist/module.mjs +24 -0
  7. package/dist/runtime/assets/css/animation.css +1 -0
  8. package/dist/runtime/assets/css/colors.css +1 -0
  9. package/{src/runtime/assets/css/cool-gradient-hover.scss → dist/runtime/assets/css/cool-gradient-hover.css} +4 -14
  10. package/dist/runtime/assets/css/main.css +1 -0
  11. package/dist/runtime/assets/css/scroll.css +1 -0
  12. package/{src → dist}/runtime/components/Button.vue +38 -46
  13. package/dist/runtime/components/CheckBox.vue +93 -0
  14. package/{src → dist}/runtime/components/ControlElement.vue +15 -18
  15. package/{src → dist}/runtime/components/DashedContainer.vue +7 -13
  16. package/dist/runtime/components/DatePicker.vue +30 -0
  17. package/{src → dist}/runtime/components/DateRangePicker.vue +14 -15
  18. package/{src → dist}/runtime/components/EmptyState.vue +22 -28
  19. package/{src → dist}/runtime/components/Icon.vue +12 -23
  20. package/dist/runtime/components/Input.vue +43 -0
  21. package/{src → dist}/runtime/components/Modal.vue +2 -44
  22. package/{src → dist}/runtime/components/Popover.vue +9 -2
  23. package/{src → dist}/runtime/components/Selector.vue +58 -58
  24. package/dist/runtime/components/Tag.vue +21 -0
  25. package/{src → dist}/runtime/components/Textarea.vue +19 -30
  26. package/{src → dist}/runtime/components/view/Dates.vue +1 -3
  27. package/{src → dist}/runtime/components/view/Separator.vue +1 -5
  28. package/{src → dist}/runtime/components/view/Text.vue +38 -42
  29. package/dist/runtime/composables/index.d.ts +4 -0
  30. package/dist/runtime/composables/index.js +6 -0
  31. package/dist/runtime/composables/useApi.d.ts +10 -0
  32. package/dist/runtime/composables/useApi.js +9 -0
  33. package/dist/runtime/composables/useFuzzySearch.d.ts +10 -0
  34. package/dist/runtime/composables/useFuzzySearch.js +22 -0
  35. package/dist/runtime/composables/useModal.d.ts +15 -0
  36. package/dist/runtime/composables/useModal.js +28 -0
  37. package/dist/runtime/composables/useTheme.d.ts +6 -0
  38. package/dist/runtime/composables/useTheme.js +23 -0
  39. package/dist/runtime/index.d.ts +20 -0
  40. package/dist/runtime/index.js +20 -0
  41. package/dist/runtime/utils/icon-registry.d.ts +2 -0
  42. package/{src/runtime/utils/icon-registry.ts → dist/runtime/utils/icon-registry.js} +14 -29
  43. package/dist/types.d.mts +7 -0
  44. package/dist/types.d.ts +7 -0
  45. package/package.json +12 -16
  46. package/nuxt.config.ts +0 -38
  47. package/src/module.ts +0 -16
  48. package/src/runtime/assets/css/animation.css +0 -88
  49. package/src/runtime/assets/css/colors.css +0 -142
  50. package/src/runtime/assets/css/main.css +0 -11
  51. package/src/runtime/assets/css/scroll.css +0 -46
  52. package/src/runtime/components/CheckBox.vue +0 -103
  53. package/src/runtime/components/DatePicker.vue +0 -84
  54. package/src/runtime/components/Input.vue +0 -54
  55. package/src/runtime/components/Tag.vue +0 -45
  56. package/src/runtime/composables/index.ts +0 -4
  57. package/src/runtime/composables/useApi.ts +0 -26
  58. package/src/runtime/composables/useFuzzySearch.ts +0 -51
  59. package/src/runtime/composables/useModal.ts +0 -47
  60. package/src/runtime/composables/useTheme.ts +0 -31
  61. package/src/runtime/index.ts +0 -25
  62. /package/{src → dist}/runtime/components/LoadingSpinner.vue +0 -0
@@ -1,41 +1,26 @@
1
- // Icon registry with bundled SVG icons
2
-
3
- export const iconRegistry: Record<string, string> = {
1
+ export const iconRegistry = {
4
2
  // Loading spinner (line-md:loading-loop)
5
- 'loading-loop': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="12" cy="2" r="0"><animate attributeName="r" begin="0" calcMode="spline" dur="1s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" repeatCount="indefinite" values="0;2;0;0"/></circle><circle cx="12" cy="2" r="0" transform="rotate(45 12 12)"><animate attributeName="r" begin="0.125s" calcMode="spline" dur="1s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" repeatCount="indefinite" values="0;2;0;0"/></circle><circle cx="12" cy="2" r="0" transform="rotate(90 12 12)"><animate attributeName="r" begin="0.25s" calcMode="spline" dur="1s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" repeatCount="indefinite" values="0;2;0;0"/></circle><circle cx="12" cy="2" r="0" transform="rotate(135 12 12)"><animate attributeName="r" begin="0.375s" calcMode="spline" dur="1s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" repeatCount="indefinite" values="0;2;0;0"/></circle><circle cx="12" cy="2" r="0" transform="rotate(180 12 12)"><animate attributeName="r" begin="0.5s" calcMode="spline" dur="1s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" repeatCount="indefinite" values="0;2;0;0"/></circle><circle cx="12" cy="2" r="0" transform="rotate(225 12 12)"><animate attributeName="r" begin="0.625s" calcMode="spline" dur="1s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" repeatCount="indefinite" values="0;2;0;0"/></circle><circle cx="12" cy="2" r="0" transform="rotate(270 12 12)"><animate attributeName="r" begin="0.75s" calcMode="spline" dur="1s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" repeatCount="indefinite" values="0;2;0;0"/></circle><circle cx="12" cy="2" r="0" transform="rotate(315 12 12)"><animate attributeName="r" begin="0.875s" calcMode="spline" dur="1s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" repeatCount="indefinite" values="0;2;0;0"/></circle></svg>`,
6
-
3
+ "loading-loop": `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><circle cx="12" cy="2" r="0"><animate attributeName="r" begin="0" calcMode="spline" dur="1s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" repeatCount="indefinite" values="0;2;0;0"/></circle><circle cx="12" cy="2" r="0" transform="rotate(45 12 12)"><animate attributeName="r" begin="0.125s" calcMode="spline" dur="1s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" repeatCount="indefinite" values="0;2;0;0"/></circle><circle cx="12" cy="2" r="0" transform="rotate(90 12 12)"><animate attributeName="r" begin="0.25s" calcMode="spline" dur="1s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" repeatCount="indefinite" values="0;2;0;0"/></circle><circle cx="12" cy="2" r="0" transform="rotate(135 12 12)"><animate attributeName="r" begin="0.375s" calcMode="spline" dur="1s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" repeatCount="indefinite" values="0;2;0;0"/></circle><circle cx="12" cy="2" r="0" transform="rotate(180 12 12)"><animate attributeName="r" begin="0.5s" calcMode="spline" dur="1s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" repeatCount="indefinite" values="0;2;0;0"/></circle><circle cx="12" cy="2" r="0" transform="rotate(225 12 12)"><animate attributeName="r" begin="0.625s" calcMode="spline" dur="1s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" repeatCount="indefinite" values="0;2;0;0"/></circle><circle cx="12" cy="2" r="0" transform="rotate(270 12 12)"><animate attributeName="r" begin="0.75s" calcMode="spline" dur="1s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" repeatCount="indefinite" values="0;2;0;0"/></circle><circle cx="12" cy="2" r="0" transform="rotate(315 12 12)"><animate attributeName="r" begin="0.875s" calcMode="spline" dur="1s" keySplines="0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8;0.2 0.2 0.4 0.8" repeatCount="indefinite" values="0;2;0;0"/></circle></svg>`,
7
4
  // Chevron down (mdi-light:chevron-down)
8
- 'chevron-down': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6l-6-6z"/></svg>`,
9
-
5
+ "chevron-down": `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M7.41 8.59L12 13.17l4.59-4.58L18 10l-6 6l-6-6z"/></svg>`,
10
6
  // Chevron up
11
- 'chevron-up': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6l-6 6z"/></svg>`,
12
-
7
+ "chevron-up": `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6l-6 6z"/></svg>`,
13
8
  // Edit (material-symbols:edit-sharp)
14
- 'edit': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M3 21v-4.25L16.2 3.575q.3-.275.663-.425t.762-.15t.775.15t.65.45L20.425 5q.3.275.438.65T21 6.4q0 .4-.137.763t-.438.662L7.25 21zM17.6 7.8L19 6.4L17.6 5l-1.4 1.4z"/></svg>`,
15
-
9
+ edit: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M3 21v-4.25L16.2 3.575q.3-.275.663-.425t.762-.15t.775.15t.65.45L20.425 5q.3.275.438.65T21 6.4q0 .4-.137.763t-.438.662L7.25 21zM17.6 7.8L19 6.4L17.6 5l-1.4 1.4z"/></svg>`,
16
10
  // Check / Checkmark
17
- 'check': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M9 16.17L4.83 12l-1.42 1.41L9 19L21 7l-1.41-1.41z"/></svg>`,
18
-
11
+ check: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M9 16.17L4.83 12l-1.42 1.41L9 19L21 7l-1.41-1.41z"/></svg>`,
19
12
  // Plus / Add
20
- 'plus': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/></svg>`,
21
-
13
+ plus: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/></svg>`,
22
14
  // Calendar
23
- 'calendar': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M19 4h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2m0 16H5V10h14zm0-12H5V6h14zM7 12h5v5H7z"/></svg>`,
24
-
15
+ calendar: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M19 4h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20a2 2 0 0 0 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2m0 16H5V10h14zm0-12H5V6h14zM7 12h5v5H7z"/></svg>`,
25
16
  // Close / X
26
- 'close': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12z"/></svg>`,
27
-
17
+ close: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M19 6.41L17.59 5L12 10.59L6.41 5L5 6.41L10.59 12L5 17.59L6.41 19L12 13.41L17.59 19L19 17.59L13.41 12z"/></svg>`,
28
18
  // Search / Magnifying glass
29
- 'search': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M15.5 14h-.79l-.28-.27A6.47 6.47 0 0 0 16 9.5A6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5S14 7.01 14 9.5S11.99 14 9.5 14"/></svg>`,
30
-
19
+ search: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M15.5 14h-.79l-.28-.27A6.47 6.47 0 0 0 16 9.5A6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5S14 7.01 14 9.5S11.99 14 9.5 14"/></svg>`,
31
20
  // Upload
32
- 'upload': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M9 16h6v-6h4l-7-7l-7 7h4zm-4 2h14v2H5z"/></svg>`,
33
-
21
+ upload: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M9 16h6v-6h4l-7-7l-7 7h4zm-4 2h14v2H5z"/></svg>`,
34
22
  // Download
35
- 'download': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M19 9h-4V3H9v6H5l7 7zM5 18v2h14v-2z"/></svg>`,
36
-
23
+ download: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M19 9h-4V3H9v6H5l7 7zM5 18v2h14v-2z"/></svg>`,
37
24
  // Delete / Trash
38
- 'delete': `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6zm2.46-7.12l1.41-1.41L12 12.59l2.12-2.12l1.41 1.41L13.41 14l2.12 2.12l-1.41 1.41L12 15.41l-2.12 2.12l-1.41-1.41L10.59 14zM15.5 4l-1-1h-5l-1 1H5v2h14V4z"/></svg>`,
39
- }
40
-
41
- export type IconName = keyof typeof iconRegistry
25
+ delete: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill="currentColor" d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6zm2.46-7.12l1.41-1.41L12 12.59l2.12-2.12l1.41 1.41L13.41 14l2.12 2.12l-1.41 1.41L12 15.41l-2.12 2.12l-1.41-1.41L10.59 14zM15.5 4l-1-1h-5l-1 1H5v2h14V4z"/></svg>`
26
+ };
@@ -0,0 +1,7 @@
1
+ import type { NuxtModule } from '@nuxt/schema'
2
+
3
+ import type { default as Module } from './module.js'
4
+
5
+ export type ModuleOptions = typeof Module extends NuxtModule<infer O> ? Partial<O> : Record<string, any>
6
+
7
+ export { default } from './module.js'
@@ -0,0 +1,7 @@
1
+ import type { NuxtModule } from '@nuxt/schema'
2
+
3
+ import type { default as Module } from './module'
4
+
5
+ export type ModuleOptions = typeof Module extends NuxtModule<infer O> ? Partial<O> : Record<string, any>
6
+
7
+ export { default } from './module'
package/package.json CHANGED
@@ -1,30 +1,26 @@
1
1
  {
2
2
  "name": "orio-ui",
3
- "version": "0.1.1",
3
+ "version": "1.0.2",
4
4
  "description": "Modern Nuxt component library with theme support",
5
5
  "type": "module",
6
- "main": "./src/runtime/index.ts",
7
- "types": "./src/runtime/index.ts",
6
+ "main": "./dist/module.mjs",
7
+ "types": "./dist/types.d.ts",
8
8
  "exports": {
9
9
  ".": {
10
- "types": "./src/runtime/index.ts",
11
- "import": "./src/runtime/index.ts"
10
+ "types": "./dist/types.d.ts",
11
+ "import": "./dist/module.mjs",
12
+ "require": "./dist/module.cjs"
12
13
  },
13
- "./composables": {
14
- "types": "./src/runtime/composables/index.ts",
15
- "import": "./src/runtime/composables/index.ts"
16
- },
17
- "./styles": "./src/runtime/assets/css/main.css",
18
- "./theme": "./src/runtime/assets/css/colors.css"
14
+ "./styles": "./dist/runtime/assets/css/main.css",
15
+ "./theme": "./dist/runtime/assets/css/colors.css"
19
16
  },
20
17
  "files": [
21
- "nuxt.config.ts",
22
- "src"
18
+ "dist"
23
19
  ],
24
20
  "scripts": {
25
21
  "dev": "vitepress dev docs",
26
- "build": "echo 'Build not needed for Nuxt layer'",
27
- "prepack": "echo 'Using source files directly'",
22
+ "build": "nuxt-module-build build",
23
+ "prepack": "npm run build",
28
24
  "test": "vitest",
29
25
  "test:unit": "vitest run",
30
26
  "test:watch": "vitest watch",
@@ -32,7 +28,7 @@
32
28
  "docs:build": "vitepress build docs",
33
29
  "docs:preview": "vitepress preview docs",
34
30
  "lint": "eslint .",
35
- "typecheck": "nuxt typecheck"
31
+ "typecheck": "vue-tsc --noEmit"
36
32
  },
37
33
  "dependencies": {
38
34
  "@nuxt/kit": "^3.15.3",
package/nuxt.config.ts DELETED
@@ -1,38 +0,0 @@
1
- // https://nuxt.com/docs/api/configuration/nuxt-config
2
- export default defineNuxtConfig({
3
- // Makes this a Nuxt Layer
4
- extends: [],
5
-
6
- css: ['./src/runtime/assets/css/main.css'],
7
-
8
- // Auto-import components with Orio prefix
9
- components: {
10
- dirs: [
11
- {
12
- path: './src/runtime/components',
13
- prefix: 'Orio',
14
- pathPrefix: false
15
- }
16
- ]
17
- },
18
-
19
- // Auto-import composables
20
- imports: {
21
- dirs: ['./src/runtime/composables']
22
- },
23
-
24
- typescript: {
25
- strict: true,
26
- typeCheck: true
27
- },
28
-
29
- vite: {
30
- css: {
31
- preprocessorOptions: {
32
- scss: {}
33
- }
34
- }
35
- },
36
-
37
- compatibilityDate: '2025-01-15'
38
- })
package/src/module.ts DELETED
@@ -1,16 +0,0 @@
1
- import { defineNuxtModule } from '@nuxt/kit'
2
-
3
- export default defineNuxtModule({
4
- meta: {
5
- name: 'orio-ui',
6
- configKey: 'orioUi',
7
- compatibility: {
8
- nuxt: '^3.0.0 || ^4.0.0'
9
- }
10
- },
11
- defaults: {},
12
- setup() {
13
- // Module setup is handled by the layer (nuxt.config.ts)
14
- // This module entry is required for the build process
15
- }
16
- })
@@ -1,88 +0,0 @@
1
- :root {
2
- /* --- motion tokens --- */
3
- --motion-duration-short: 0.05s;
4
- --motion-duration-medium: 0.15s;
5
- --motion-distance-small: 0.15rem;
6
- --motion-distance-medium: 2rem;
7
- --motion-distance-large: 1rem;
8
- --motion-ease-default: ease-in;
9
- --motion-ease-smooth: cubic-bezier(0.22, 1, 0.36, 1);
10
- }
11
-
12
- /* fade */
13
- .animate-fade-enter-active,
14
- .animate-fade-leave-active {
15
- transition:
16
- opacity var(--motion-duration-short) var(--motion-ease-default),
17
- transform var(--motion-duration-short) var(--motion-ease-default);
18
- }
19
-
20
- .animate-fade-enter-from,
21
- .animate-fade-leave-to {
22
- opacity: 0;
23
- transform: translateY(calc(-1 * var(--motion-distance-small)));
24
- }
25
-
26
- /* fade-slide */
27
- .animate-fade-slide-enter-active,
28
- .animate-fade-slide-leave-active,
29
- .animate-fade-slide-appear-active {
30
- transition:
31
- opacity var(--motion-duration-medium) var(--motion-ease-smooth),
32
- transform var(--motion-duration-medium) var(--motion-ease-smooth);
33
- transition-delay: calc(var(--index, 0) * 0.08s);
34
- }
35
-
36
- .animate-fade-slide-enter-from,
37
- .animate-fade-slide-appear-from {
38
- opacity: 0;
39
- transform: translateY(var(--motion-distance-medium));
40
- }
41
-
42
- .animate-fade-slide-leave-to {
43
- opacity: 0;
44
- transform: translateY(calc(-1 * var(--motion-distance-large)));
45
- }
46
-
47
- .animate-fade-slide-move {
48
- transition: transform var(--motion-duration-medium) ease;
49
- }
50
-
51
- /* fade-reverse */
52
- .animate-fade-reverse-enter-active,
53
- .animate-fade-reverse-leave-active {
54
- transition:
55
- opacity var(--motion-duration-short) var(--motion-ease-default),
56
- transform var(--motion-duration-short) var(--motion-ease-default);
57
- }
58
-
59
- .animate-fade-reverse-enter-from,
60
- .animate-fade-reverse-leave-to {
61
- opacity: 0;
62
- transform: translateY(var(--motion-distance-small));
63
- }
64
-
65
- /* fade-slide-reverse */
66
- .animate-fade-slide-reverse-enter-active,
67
- .animate-fade-slide-reverse-leave-active,
68
- .animate-fade-slide-reverse-appear-active {
69
- transition:
70
- opacity var(--motion-duration-medium) var(--motion-ease-smooth),
71
- transform var(--motion-duration-medium) var(--motion-ease-smooth);
72
- transition-delay: calc(var(--index, 0) * 0.08s);
73
- }
74
-
75
- .animate-fade-slide-reverse-enter-from,
76
- .animate-fade-slide-reverse-appear-from {
77
- opacity: 0;
78
- transform: translateY(calc(-1 * var(--motion-distance-medium)));
79
- }
80
-
81
- .animate-fade-slide-reverse-leave-to {
82
- opacity: 0;
83
- transform: translateY(var(--motion-distance-large));
84
- }
85
-
86
- .animate-fade-slide-reverse-move {
87
- transition: transform var(--motion-duration-medium) ease;
88
- }
@@ -1,142 +0,0 @@
1
- /* 1) Role-based tokens (don’t change these names in CSS) */
2
- :root {
3
- --color-bg: #ffffff;
4
- --color-surface: #f7f8fa;
5
- --color-text: #0e1116;
6
- --color-muted: #626a78;
7
- --color-border: #bfbfc2;
8
-
9
- /* Accent family */
10
- --color-accent: #1f3a8a;
11
- --color-accent-ink: #ffffff;
12
- --color-accent-soft: #eef2ff;
13
- --color-accent-border: #c7d2fe;
14
- --color-accent-hover: color-mix(in srgb, var(--color-accent) 85%, black 15%);
15
- --color-accent-active: color-mix(in srgb, var(--color-accent) 75%, black 25%);
16
- }
17
-
18
- /* 2) Category themes (light vs dark) */
19
-
20
- /* Light (default, already matches your root) */
21
- :root[data-mode="light"] {
22
- --color-bg: #ffffff;
23
- --color-surface: #f7f8fa;
24
- --color-text: #0e1116;
25
- --color-muted: #626a78;
26
- --color-border: #bfbfc2;
27
- }
28
-
29
- /* Dark */
30
- :root[data-mode="dark"] {
31
- --color-bg: #0e1116;
32
- --color-surface: #1a1d23;
33
- --color-text: #ffffff;
34
- --color-muted: #a0a7b5;
35
- --color-border: #2e333d;
36
-
37
- --color-accent-ink: #ffffff;
38
- --color-accent-soft: color-mix(in srgb, var(--color-accent) 12%, #0e1116);
39
- --color-accent-border: color-mix(in srgb, var(--color-accent) 40%, #0e1116);
40
-
41
- --color-accent-hover: color-mix(in srgb, var(--color-accent) 30%, white 70%);
42
- --color-accent-active: color-mix(in srgb, var(--color-accent) 80%, white 25%);
43
- }
44
-
45
- /* 3) Accent themes (just accents, independent of light/dark) */
46
-
47
- :root[data-theme="navy"] {
48
- --color-accent: hsl(219 20% 25%);
49
- --color-accent-soft: hsl(221 100% 97%);
50
- --color-accent-border: hsl(221 61% 84%);
51
- }
52
-
53
- :root[data-theme="teal"] {
54
- --color-accent: hsl(174 72% 28%);
55
- --color-accent-soft: hsl(174 55% 94%);
56
- --color-accent-border: hsl(174 40% 75%);
57
- }
58
-
59
- :root[data-theme="forest"] {
60
- --color-accent: hsl(152 45% 25%);
61
- --color-accent-soft: hsl(152 45% 94%);
62
- --color-accent-border: hsl(152 30% 72%);
63
- }
64
-
65
- :root[data-theme="wine"] {
66
- --color-accent: hsl(350 55% 34%);
67
- --color-accent-soft: hsl(350 60% 96%);
68
- --color-accent-border: hsl(350 35% 78%);
69
- }
70
-
71
- :root[data-theme="royal"] {
72
- --color-accent: hsl(230 60% 40%);
73
- --color-accent-soft: hsl(230 65% 96%);
74
- --color-accent-border: hsl(230 35% 78%);
75
- }
76
-
77
- /* Extra colors */
78
- :root {
79
- /* 🔴 Red */
80
- --color-red: #dc2626;
81
- --color-red-ink: #ffffff;
82
- --color-red-soft: #fef2f2;
83
- --color-red-border: #fecaca;
84
- --color-red-hover: color-mix(in srgb, var(--color-red) 85%, black 15%);
85
- --color-red-active: color-mix(in srgb, var(--color-red) 75%, black 25%);
86
-
87
- /* 🟠 Orange */
88
- --color-orange: #ea580c;
89
- --color-orange-ink: #ffffff;
90
- --color-orange-soft: #fff7ed;
91
- --color-orange-border: #fed7aa;
92
- --color-orange-hover: color-mix(in srgb, var(--color-orange) 85%, black 15%);
93
- --color-orange-active: color-mix(in srgb, var(--color-orange) 75%, black 25%);
94
-
95
- /* 🟡 Yellow */
96
- --color-yellow: #ca8a04;
97
- --color-yellow-ink: #ffffff;
98
- --color-yellow-soft: #fefce8;
99
- --color-yellow-border: #fef08a;
100
- --color-yellow-hover: color-mix(in srgb, var(--color-yellow) 85%, black 15%);
101
- --color-yellow-active: color-mix(in srgb, var(--color-yellow) 75%, black 25%);
102
-
103
- /* 🟢 Green */
104
- --color-green: #15803d;
105
- --color-green-ink: #ffffff;
106
- --color-green-soft: #f0fdf4;
107
- --color-green-border: #bbf7d0;
108
- --color-green-hover: color-mix(in srgb, var(--color-green) 85%, black 15%);
109
- --color-green-active: color-mix(in srgb, var(--color-green) 75%, black 25%);
110
-
111
- /* 🩵 Teal / Cyan */
112
- --color-teal: #0d9488;
113
- --color-teal-ink: #ffffff;
114
- --color-teal-soft: #f0fdfa;
115
- --color-teal-border: #99f6e4;
116
- --color-teal-hover: color-mix(in srgb, var(--color-teal) 85%, black 15%);
117
- --color-teal-active: color-mix(in srgb, var(--color-teal) 75%, black 25%);
118
-
119
- /* 🔵 Blue */
120
- --color-blue: #2563eb;
121
- --color-blue-ink: #ffffff;
122
- --color-blue-soft: #eff6ff;
123
- --color-blue-border: #bfdbfe;
124
- --color-blue-hover: color-mix(in srgb, var(--color-blue) 85%, black 15%);
125
- --color-blue-active: color-mix(in srgb, var(--color-blue) 75%, black 25%);
126
-
127
- /* 🟣 Purple */
128
- --color-purple: #7e22ce;
129
- --color-purple-ink: #ffffff;
130
- --color-purple-soft: #faf5ff;
131
- --color-purple-border: #e9d5ff;
132
- --color-purple-hover: color-mix(in srgb, var(--color-purple) 85%, black 15%);
133
- --color-purple-active: color-mix(in srgb, var(--color-purple) 75%, black 25%);
134
-
135
- /* 💗 Pink */
136
- --color-pink: #db2777;
137
- --color-pink-ink: #ffffff;
138
- --color-pink-soft: #fdf2f8;
139
- --color-pink-border: #fbcfe8;
140
- --color-pink-hover: color-mix(in srgb, var(--color-pink) 85%, black 15%);
141
- --color-pink-active: color-mix(in srgb, var(--color-pink) 75%, black 25%);
142
- }
@@ -1,11 +0,0 @@
1
- /* Main entry point for i UI styles */
2
- @import "./colors.css";
3
- @import "./animation.css";
4
- @import "./scroll.css";
5
-
6
- /* Base reset for Orio components */
7
- *,
8
- *::before,
9
- *::after {
10
- box-sizing: border-box;
11
- }
@@ -1,46 +0,0 @@
1
- /* ===== Scrollbar (WebKit) ===== */
2
- ::-webkit-scrollbar {
3
- width: 12px;
4
- height: 12px;
5
- }
6
-
7
- ::-webkit-scrollbar-track {
8
- background: var(--color-surface);
9
- border-left: 1px solid var(--color-border);
10
- }
11
-
12
- ::-webkit-scrollbar-thumb {
13
- background-color: var(--color-accent-border);
14
- border-radius: 8px;
15
- border: 3px solid var(--color-surface);
16
- transition: background-color 0.2s ease;
17
- }
18
-
19
- ::-webkit-scrollbar-thumb:hover {
20
- background-color: var(--color-accent);
21
- }
22
-
23
- ::-webkit-scrollbar-corner {
24
- background: var(--color-surface);
25
- }
26
-
27
- /* ===== Scrollbar (Firefox) ===== */
28
- * {
29
- scrollbar-width: thin;
30
- scrollbar-color: var(--color-accent-border) var(--color-surface);
31
- }
32
-
33
- /* ===== Dark mode adjustments ===== */
34
- :root[data-mode="dark"] ::-webkit-scrollbar-track {
35
- background: var(--color-bg);
36
- border-left: 1px solid var(--color-border);
37
- }
38
-
39
- :root[data-mode="dark"] ::-webkit-scrollbar-thumb {
40
- background-color: var(--color-accent-border);
41
- border: 3px solid var(--color-bg);
42
- }
43
-
44
- :root[data-mode="dark"] * {
45
- scrollbar-color: var(--color-accent-border) var(--color-bg);
46
- }
@@ -1,103 +0,0 @@
1
- <script setup lang="ts">
2
- const modelValue = defineModel<boolean>({ required: false });
3
-
4
- defineProps<{
5
- checkedIcon?: string; // optional: pass icon name for checked state
6
- uncheckedIcon?: string; // optional: pass icon name for unchecked state
7
- }>();
8
- </script>
9
-
10
- <template>
11
- <orio-control-element class="checkbox">
12
- <label class="checkbox-label">
13
- <input
14
- v-model="modelValue"
15
- type="checkbox"
16
- class="checkbox-input"
17
- tabindex="-1"
18
- />
19
- <span
20
- class="checkbox-box"
21
- :class="{
22
- defaultChecked: !checkedIcon,
23
- defaultUnchecked: !uncheckedIcon,
24
- }"
25
- >
26
- <slot name="icon" :checked="modelValue">
27
- <orio-icon v-if="modelValue && checkedIcon" :name="checkedIcon" />
28
- <orio-icon
29
- v-else-if="!modelValue && uncheckedIcon"
30
- :name="uncheckedIcon"
31
- />
32
- </slot>
33
- </span>
34
- <slot />
35
- </label>
36
- </orio-control-element>
37
- </template>
38
-
39
- <style lang="scss" scoped>
40
- .checkbox {
41
- --box-size: 1rem;
42
-
43
- &-label {
44
- position: relative;
45
- user-select: none;
46
- display: inline-flex;
47
- align-items: center;
48
- gap: 0.4rem;
49
- cursor: pointer;
50
- font-size: 0.9rem;
51
- color: var(--color-text);
52
- }
53
-
54
- &-input {
55
- position: absolute;
56
- inset: 0;
57
- width: var(--box-size);
58
- height: 1rem;
59
- margin: 0;
60
- opacity: 0;
61
- }
62
-
63
- &-box {
64
- width: var(--box-size);
65
- height: var(--box-size);
66
- border: 2px solid var(--color-border);
67
- border-radius: 4px;
68
- background-color: var(--color-bg);
69
- display: inline-flex;
70
- align-items: center;
71
- justify-content: center;
72
- transition:
73
- background-color 0.2s ease,
74
- border-color 0.2s ease;
75
- }
76
-
77
- .checkbox-input:checked + .checkbox-box {
78
- background-color: var(--color-accent);
79
- border-color: var(--color-accent);
80
- }
81
-
82
- .checkbox-input:checked + .checkbox-box.defaultChecked {
83
- &::after {
84
- content: '';
85
- width: 0.3rem;
86
- height: 0.6rem;
87
- position: relative;
88
- bottom: 0.1rem;
89
- border: solid var(--color-accent-ink);
90
- border-width: 0 2px 2px 0;
91
- transform: rotate(45deg);
92
- }
93
- }
94
-
95
- &-label:hover .checkbox-box {
96
- border-color: var(--color-accent);
97
- }
98
- .checkbox-input:focus-visible + .checkbox-box {
99
- outline: 2px solid var(--color-accent);
100
- outline-offset: 2px;
101
- }
102
- }
103
- </style>
@@ -1,84 +0,0 @@
1
- <script setup lang="ts">
2
- import { computed } from 'vue';
3
- import { nanoid } from 'nanoid';
4
-
5
- interface Props {
6
- month?: boolean;
7
- }
8
- defineProps<Props>();
9
-
10
- const date = defineModel<string | null | undefined>('date', {
11
- required: true,
12
- });
13
-
14
- const randomName = computed(() => `date-${nanoid(8)}`);
15
- </script>
16
-
17
- <template>
18
- <orio-control-element class="date-picker" v-bind="$attrs">
19
- <input
20
- v-model="date"
21
- :type="month ? 'month' : 'date'"
22
- class="date-input"
23
- :name="randomName"
24
- />
25
- </orio-control-element>
26
- </template>
27
-
28
- <style scoped>
29
- .date-picker * {
30
- width: 100%;
31
- cursor: pointer;
32
- }
33
-
34
- .date-picker-label {
35
- display: inline-flex;
36
- flex-direction: column;
37
- gap: 0.25rem;
38
- font-size: 0.9rem;
39
- color: var(--color-text);
40
- }
41
-
42
- .date-input {
43
- /* border-box allows correct sizing for input */
44
- box-sizing: border-box;
45
- appearance: none;
46
- background-color: var(--color-bg);
47
- border: 1px solid var(--color-border);
48
- border-radius: 4px;
49
- padding: 0.4rem 0.6rem;
50
- color: var(--color-text);
51
- font-size: 0.95rem;
52
- transition:
53
- border-color 0.2s ease,
54
- box-shadow 0.2s ease;
55
- }
56
-
57
- /* Hover + focus */
58
- .date-input:hover {
59
- border-color: var(--color-accent);
60
- }
61
- .date-input:focus {
62
- border-color: var(--color-accent);
63
- box-shadow: 0 0 0 2px var(--color-accent-soft);
64
- outline: none;
65
- }
66
-
67
- /* Disabled */
68
- .date-input:disabled {
69
- background-color: var(--color-surface);
70
- color: var(--color-muted);
71
- cursor: not-allowed;
72
- }
73
-
74
- /* Calendar icon (WebKit browsers like Chrome/Safari) */
75
- .date-input::-webkit-calendar-picker-indicator {
76
- cursor: pointer;
77
- filter: invert(36%) sepia(65%) saturate(325%) hue-rotate(180deg);
78
- opacity: 0.7;
79
- transition: opacity 0.2s ease;
80
- }
81
- .date-input::-webkit-calendar-picker-indicator:hover {
82
- opacity: 1;
83
- }
84
- </style>