urkit-ui 0.1.5

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 (83) hide show
  1. package/README.md +322 -0
  2. package/dist/module.cjs +75 -0
  3. package/dist/module.d.cts +46 -0
  4. package/dist/module.d.mts +46 -0
  5. package/dist/module.d.ts +46 -0
  6. package/dist/module.json +12 -0
  7. package/dist/module.mjs +72 -0
  8. package/dist/runtime/assets/css/buttons.css +1 -0
  9. package/dist/runtime/assets/css/colors.css +1 -0
  10. package/dist/runtime/assets/css/form-fields.css +1 -0
  11. package/dist/runtime/assets/css/global.css +1 -0
  12. package/dist/runtime/components/Button.d.vue.ts +87 -0
  13. package/dist/runtime/components/Button.vue +147 -0
  14. package/dist/runtime/components/Button.vue.d.ts +87 -0
  15. package/dist/runtime/components/Icon.d.vue.ts +9 -0
  16. package/dist/runtime/components/Icon.vue +71 -0
  17. package/dist/runtime/components/Icon.vue.d.ts +9 -0
  18. package/dist/runtime/components/Input.d.vue.ts +129 -0
  19. package/dist/runtime/components/Input.vue +342 -0
  20. package/dist/runtime/components/Input.vue.d.ts +129 -0
  21. package/dist/runtime/composables/useIcon.d.ts +5 -0
  22. package/dist/runtime/composables/useIcon.js +71 -0
  23. package/dist/runtime/plugin.d.ts +2 -0
  24. package/dist/runtime/plugin.js +4 -0
  25. package/dist/runtime/public/assets/icons/arrow-down.svg +10 -0
  26. package/dist/runtime/public/assets/icons/collapse.svg +6 -0
  27. package/dist/runtime/public/assets/icons/color.svg +1 -0
  28. package/dist/runtime/public/assets/icons/copied.svg +3 -0
  29. package/dist/runtime/public/assets/icons/copy.svg +10 -0
  30. package/dist/runtime/public/assets/icons/figma.svg +1 -0
  31. package/dist/runtime/public/assets/icons/heart.svg +3 -0
  32. package/dist/runtime/public/assets/icons/hide.svg +8 -0
  33. package/dist/runtime/public/assets/icons/icons-icon.svg +10 -0
  34. package/dist/runtime/public/assets/icons/installation.svg +1 -0
  35. package/dist/runtime/public/assets/icons/introduction.svg +1 -0
  36. package/dist/runtime/public/assets/icons/loader-icon.svg +6 -0
  37. package/dist/runtime/public/assets/icons/profile.svg +1 -0
  38. package/dist/runtime/public/assets/icons/radiuss.svg +4 -0
  39. package/dist/runtime/public/assets/icons/search.svg +1 -0
  40. package/dist/runtime/public/assets/icons/show.svg +4 -0
  41. package/dist/runtime/public/assets/icons/star.svg +3 -0
  42. package/dist/runtime/public/assets/icons/toast-close.svg +3 -0
  43. package/dist/runtime/public/assets/icons/toast-error.svg +4 -0
  44. package/dist/runtime/public/assets/icons/toast-info.svg +5 -0
  45. package/dist/runtime/public/assets/icons/toast-success.svg +4 -0
  46. package/dist/runtime/public/assets/icons/toast-warning.svg +5 -0
  47. package/dist/runtime/public/assets/icons/typo.svg +1 -0
  48. package/dist/runtime/public/assets/logos/urkit-logo-blue.svg +53 -0
  49. package/dist/runtime/public/assets/logos/urkit-logo-cyan.svg +53 -0
  50. package/dist/runtime/public/assets/logos/urkit-logo-green.svg +53 -0
  51. package/dist/runtime/public/assets/logos/urkit-logo-purple.svg +53 -0
  52. package/dist/runtime/public/assets/logos/urkit-logo.svg +19 -0
  53. package/dist/runtime/server/tsconfig.json +3 -0
  54. package/dist/types.d.mts +3 -0
  55. package/package.json +70 -0
  56. package/src/runtime/public/assets/icons/arrow-down.svg +10 -0
  57. package/src/runtime/public/assets/icons/collapse.svg +6 -0
  58. package/src/runtime/public/assets/icons/color.svg +1 -0
  59. package/src/runtime/public/assets/icons/copied.svg +3 -0
  60. package/src/runtime/public/assets/icons/copy.svg +10 -0
  61. package/src/runtime/public/assets/icons/figma.svg +1 -0
  62. package/src/runtime/public/assets/icons/heart.svg +3 -0
  63. package/src/runtime/public/assets/icons/hide.svg +8 -0
  64. package/src/runtime/public/assets/icons/icons-icon.svg +10 -0
  65. package/src/runtime/public/assets/icons/installation.svg +1 -0
  66. package/src/runtime/public/assets/icons/introduction.svg +1 -0
  67. package/src/runtime/public/assets/icons/loader-icon.svg +6 -0
  68. package/src/runtime/public/assets/icons/profile.svg +1 -0
  69. package/src/runtime/public/assets/icons/radiuss.svg +4 -0
  70. package/src/runtime/public/assets/icons/search.svg +1 -0
  71. package/src/runtime/public/assets/icons/show.svg +4 -0
  72. package/src/runtime/public/assets/icons/star.svg +3 -0
  73. package/src/runtime/public/assets/icons/toast-close.svg +3 -0
  74. package/src/runtime/public/assets/icons/toast-error.svg +4 -0
  75. package/src/runtime/public/assets/icons/toast-info.svg +5 -0
  76. package/src/runtime/public/assets/icons/toast-success.svg +4 -0
  77. package/src/runtime/public/assets/icons/toast-warning.svg +5 -0
  78. package/src/runtime/public/assets/icons/typo.svg +1 -0
  79. package/src/runtime/public/assets/logos/urkit-logo-blue.svg +53 -0
  80. package/src/runtime/public/assets/logos/urkit-logo-cyan.svg +53 -0
  81. package/src/runtime/public/assets/logos/urkit-logo-green.svg +53 -0
  82. package/src/runtime/public/assets/logos/urkit-logo-purple.svg +53 -0
  83. package/src/runtime/public/assets/logos/urkit-logo.svg +19 -0
package/README.md ADDED
@@ -0,0 +1,322 @@
1
+ # Urkit UI
2
+
3
+ A modern, accessible UI component library for Nuxt 4 with custom CSS architecture (no Tailwind).
4
+
5
+ [![npm version](https://img.shields.io/npm/v/urkit-ui.svg)](https://www.npmjs.com/package/urkit-ui)
6
+ [![npm downloads](https://img.shields.io/npm/dm/urkit-ui.svg)](https://www.npmjs.com/package/urkit-ui)
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
8
+
9
+ ## ✨ Features
10
+
11
+ - 🎨 **Custom CSS Architecture** - Beautiful components without Tailwind dependency
12
+ - 🚀 **Nuxt 4 Ready** - Built specifically for Nuxt 4
13
+ - ♿ **Accessible** - WCAG compliant components
14
+ - 🎭 **Customizable** - Flexible theming and icon system
15
+ - 📦 **Zero Config** - Works out of the box with sensible defaults
16
+ - 🔧 **TypeScript** - Full TypeScript support
17
+ - 🎯 **Auto-Import** - Components automatically available in your app
18
+
19
+ ## 📦 Available Components
20
+
21
+ Currently available components in v0.1.5:
22
+
23
+ | Component | Description | Status |
24
+ |-----------|-------------|--------|
25
+ | **UrButton** | Full-featured button with variants, sizes, loading states, and icons | ✅ Stable |
26
+ | **UrInput** | Comprehensive input component with validation, password toggle, icons, and select | ✅ Stable |
27
+ | **UrIcon** | Flexible icon system with namespace support | ✅ Stable |
28
+
29
+ ### Coming Soon
30
+
31
+ - ✨ **UrCard** - Card container component
32
+ - ✨ **UrModal** - Modal/dialog component
33
+ - ✨ **UrToast** - Toast notification system
34
+ - ✨ **UrCheckbox** - Checkbox input component
35
+ - ✨ **UrRadio** - Radio button component
36
+ - ✨ **UrSelect** - Dropdown select component
37
+ - ✨ **UrTextarea** - Multi-line text input
38
+ - And more...
39
+
40
+ ## 🚀 Quick Start
41
+
42
+ ### Installation
43
+
44
+ ```bash
45
+ # Using pnpm (recommended)
46
+ pnpm add urkit-ui
47
+
48
+ # Using npm
49
+ npm install urkit-ui
50
+
51
+ # Using yarn
52
+ yarn add urkit-ui
53
+ ```
54
+
55
+ ### Setup
56
+
57
+ Add `urkit-ui` to your `nuxt.config.ts`:
58
+
59
+ ```typescript
60
+ export default defineNuxtConfig({
61
+ modules: ['urkit-ui']
62
+ })
63
+ ```
64
+
65
+ That's it! Components are now auto-imported with the `Ur` prefix.
66
+
67
+ ### Usage
68
+
69
+ ```vue
70
+ <template>
71
+ <div>
72
+ <UrButton variant="primary">Click Me</UrButton>
73
+
74
+ <UrInput
75
+ v-model="email"
76
+ type="email"
77
+ label="Email"
78
+ placeholder="Enter your email"
79
+ />
80
+ </div>
81
+ </template>
82
+
83
+ <script setup lang="ts">
84
+ const email = ref('')
85
+ </script>
86
+ ```
87
+
88
+ ## 📚 Components
89
+
90
+ ### Button
91
+
92
+ Full-featured button component with multiple variants, sizes, and states.
93
+
94
+ ```vue
95
+ <UrButton
96
+ variant="primary"
97
+ mode="filled"
98
+ size="md"
99
+ icon="icons:plus"
100
+ :loading="false"
101
+ >
102
+ Click Me
103
+ </UrButton>
104
+ ```
105
+
106
+ **Variants**: `primary`, `error`, `success`, `neutral`
107
+ **Modes**: `filled`, `stroke`, `lighter`, `ghost`
108
+ **Sizes**: `sm`, `md`, `lg`, `xlg`
109
+
110
+ ### Input
111
+
112
+ Comprehensive input component with validation, icons, and advanced features.
113
+
114
+ ```vue
115
+ <UrInput
116
+ v-model="value"
117
+ type="text"
118
+ label="Label"
119
+ placeholder="Placeholder"
120
+ icon="icons:search"
121
+ />
122
+ ```
123
+
124
+ **Features**:
125
+ - Text, password, email, number inputs
126
+ - Password toggle with requirements validation
127
+ - Icons and affixes (prefix/suffix)
128
+ - Button integration
129
+ - Select dropdown
130
+ - Disabled and error states
131
+
132
+ ## 🎨 Icon System
133
+
134
+ Urkit includes a flexible icon system with namespaces.
135
+
136
+ ### Included Icons (for testing)
137
+
138
+ The module includes 10 essential icons to get you started:
139
+
140
+ | Icon | Name | Usage |
141
+ |------|------|-------|
142
+ | 👁️ | `icons:show` | Password toggle (show) |
143
+ | 🙈 | `icons:hide` | Password toggle (hide) |
144
+ | ⏳ | `icons:loader-icon` | Loading states |
145
+ | 🔍 | `icons:search` | Search functionality |
146
+ | ❌ | `icons:toast-close` | Close/dismiss actions |
147
+ | ❤️ | `icons:heart` | Like/favorite |
148
+ | ⭐ | `icons:star` | Rating/favorites |
149
+ | 👤 | `icons:profile` | User/account |
150
+ | 📋 | `icons:copy` | Copy action |
151
+ | ⬇️ | `icons:arrow-down` | Dropdowns/navigation |
152
+
153
+ ```vue
154
+ <!-- Use included icons -->
155
+ <UrIcon name="icons:search" />
156
+ <UrIcon name="icons:heart" />
157
+ ```
158
+
159
+ **💡 For production**: Add your own icons! The included icons are minimal for testing purposes.
160
+
161
+ ### Custom Icons
162
+
163
+ #### Method 1: Override Built-in Icons
164
+
165
+ Place SVG files in your project's `public/assets/icons/` directory:
166
+
167
+ ```
168
+ your-app/
169
+ └── public/
170
+ └── assets/
171
+ └── icons/
172
+ └── custom-icon.svg ← Overrides module's icon
173
+ ```
174
+
175
+ #### Method 2: Add Custom Namespace
176
+
177
+ ```typescript
178
+ // nuxt.config.ts
179
+ export default defineNuxtConfig({
180
+ modules: ['urkit-ui'],
181
+
182
+ urkitUi: {
183
+ iconNamespaces: {
184
+ icons: '/assets/icons', // Default
185
+ logos: '/assets/logos', // Default
186
+ custom: '/custom/icons' // Your custom namespace
187
+ }
188
+ }
189
+ })
190
+ ```
191
+
192
+ Then use: `<UrIcon name="custom:my-icon" />`
193
+
194
+ ## ⚙️ Configuration
195
+
196
+ Customize Urkit UI in your `nuxt.config.ts`:
197
+
198
+ ```typescript
199
+ export default defineNuxtConfig({
200
+ modules: ['urkit-ui'],
201
+
202
+ urkitUi: {
203
+ // Customize component prefix (default: 'Ur')
204
+ prefix: 'Ur',
205
+
206
+ // Customize brand colors
207
+ colors: {
208
+ primary: {
209
+ 500: '#0ea5e9', // Your brand color
210
+ 600: '#0284c7',
211
+ 700: '#0369a1'
212
+ }
213
+ },
214
+
215
+ // Customize icon namespaces
216
+ iconNamespaces: {
217
+ icons: '/assets/icons',
218
+ logos: '/assets/logos',
219
+ social: '/custom/social-icons'
220
+ }
221
+ }
222
+ })
223
+ ```
224
+
225
+ ## 🎨 Color Customization
226
+
227
+ Urkit UI uses a purple theme by default. Easily customize to match your brand:
228
+
229
+ ```typescript
230
+ // nuxt.config.ts
231
+ export default defineNuxtConfig({
232
+ modules: ['urkit-ui'],
233
+
234
+ urkitUi: {
235
+ colors: {
236
+ primary: {
237
+ 50: '#f0f9ff',
238
+ 500: '#0ea5e9', // Main brand color
239
+ 600: '#0284c7', // Hover
240
+ 700: '#0369a1' // Active
241
+ },
242
+ neutral: {
243
+ 1: '#fafafa',
244
+ 7: '#737373',
245
+ 12: '#171717'
246
+ }
247
+ }
248
+ }
249
+ })
250
+ ```
251
+
252
+ **See [COLORS.md](./COLORS.md) for complete customization guide, examples, and color scales.**
253
+
254
+ ## 📖 Documentation
255
+
256
+ - **[Complete Usage Guide](./USAGE.md)** - Detailed component documentation and examples
257
+ - **[Color Customization](./COLORS.md)** - Brand color customization guide
258
+ - **[Architecture](./ARCHITECTURE.md)** - Technical architecture and asset management
259
+
260
+ ## 🔧 Requirements
261
+
262
+ - Nuxt 4.0.0 or later
263
+ - Node.js 18 or later
264
+
265
+ ## 📝 License
266
+
267
+ MIT
268
+
269
+ ## 🤝 Contributing
270
+
271
+ Contributions are welcome! Please feel free to submit a Pull Request.
272
+
273
+ ## 📬 Support
274
+
275
+ - 📦 [NPM Package](https://www.npmjs.com/package/urkit-ui)
276
+ - 🐛 [Report Issues](https://github.com/jaeel29/urkit-ui/issues)
277
+ - 💬 [Discussions](https://github.com/jaeel29/urkit-ui/discussions)
278
+ - 📖 [Documentation](https://github.com/jaeel29/urkit-ui#readme)
279
+
280
+ ---
281
+
282
+ ---
283
+
284
+ ## 👨‍💻 Development
285
+
286
+ This section is for contributors developing the Urkit UI module itself.
287
+
288
+ ### Setup
289
+
290
+ ```bash
291
+ # Install dependencies
292
+ pnpm install
293
+
294
+ # Prepare module
295
+ pnpm run dev:prepare
296
+
297
+ # Start playground
298
+ pnpm run dev
299
+ ```
300
+
301
+ ### Building
302
+
303
+ ```bash
304
+ # Build the module
305
+ pnpm run prepack
306
+ ```
307
+
308
+ ### Project Structure
309
+
310
+ ```
311
+ urkit-ui/
312
+ ├── src/
313
+ │ ├── module.ts # Module configuration
314
+ │ └── runtime/
315
+ │ ├── assets/css/ # CSS files
316
+ │ ├── components/ # Vue components
317
+ │ ├── composables/ # Composables
318
+ │ └── public/ # Public assets (icons, logos)
319
+ ├── playground/ # Testing playground
320
+ ├── USAGE.md # Usage documentation
321
+ └── ARCHITECTURE.md # Architecture documentation
322
+ ```
@@ -0,0 +1,75 @@
1
+ 'use strict';
2
+
3
+ const kit = require('@nuxt/kit');
4
+
5
+ var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
6
+ function generateCustomColorCSS(colors) {
7
+ if (!colors) return "";
8
+ const cssVars = [];
9
+ if (colors.primary) {
10
+ Object.entries(colors.primary).forEach(([shade, value]) => {
11
+ cssVars.push(` --primary-${shade}: ${value};`);
12
+ });
13
+ }
14
+ if (colors.neutral) {
15
+ Object.entries(colors.neutral).forEach(([shade, value]) => {
16
+ cssVars.push(` --neutral-${shade}: ${value};`);
17
+ });
18
+ }
19
+ if (cssVars.length === 0) return "";
20
+ return `:root {
21
+ ${cssVars.join("\n")}
22
+ }`;
23
+ }
24
+ const module$1 = kit.defineNuxtModule({
25
+ meta: {
26
+ name: "urkit",
27
+ configKey: "urkit",
28
+ compatibility: {
29
+ nuxt: ">=4.0.0"
30
+ }
31
+ },
32
+ defaults: {
33
+ iconPath: "/assets/icons",
34
+ iconNamespaces: {
35
+ icons: "/assets/icons",
36
+ logos: "/assets/logos"
37
+ },
38
+ prefix: "Ur"
39
+ },
40
+ async setup(options, nuxt) {
41
+ const resolver = kit.createResolver((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('module.cjs', document.baseURI).href)));
42
+ nuxt.options.css.push(resolver.resolve("./runtime/assets/css/colors.css"));
43
+ nuxt.options.css.push(resolver.resolve("./runtime/assets/css/buttons.css"));
44
+ nuxt.options.css.push(resolver.resolve("./runtime/assets/css/form-fields.css"));
45
+ nuxt.options.css.push(resolver.resolve("./runtime/assets/css/global.css"));
46
+ if (options.colors) {
47
+ const customColors = generateCustomColorCSS(options.colors);
48
+ if (customColors) {
49
+ const customColorsFile = kit.addTemplate({
50
+ filename: "urkit-custom-colors.css",
51
+ getContents: () => customColors,
52
+ write: true
53
+ });
54
+ nuxt.options.css.push(customColorsFile.dst);
55
+ }
56
+ }
57
+ nuxt.options.nitro = nuxt.options.nitro || {};
58
+ nuxt.options.nitro.publicAssets = nuxt.options.nitro.publicAssets || [];
59
+ nuxt.options.nitro.publicAssets.push({
60
+ dir: resolver.resolve("./runtime/public"),
61
+ maxAge: 60 * 60 * 24 * 365
62
+ // 1 year cache for icons
63
+ });
64
+ nuxt.options.runtimeConfig.public.urkit = {
65
+ iconNamespaces: options.iconNamespaces
66
+ };
67
+ await kit.addComponentsDir({
68
+ path: resolver.resolve("./runtime/components"),
69
+ prefix: options.prefix,
70
+ pathPrefix: false
71
+ });
72
+ }
73
+ });
74
+
75
+ module.exports = module$1;
@@ -0,0 +1,46 @@
1
+ import * as _nuxt_schema from '@nuxt/schema';
2
+
3
+ interface ModuleOptions {
4
+ /**
5
+ * Custom icon base path
6
+ * @default '/assets/icons'
7
+ */
8
+ iconPath?: string;
9
+ /**
10
+ * Custom icon namespaces and their paths
11
+ * @example { icons: '/custom/icons', logos: '/custom/logos' }
12
+ */
13
+ iconNamespaces?: Record<string, string>;
14
+ /**
15
+ * Component prefix
16
+ * @default 'Ur'
17
+ */
18
+ prefix?: string;
19
+ /**
20
+ * Custom color overrides
21
+ * Override default purple theme with your brand colors
22
+ * @example
23
+ * {
24
+ * primary: {
25
+ * 50: '#f0f9ff',
26
+ * 100: '#e0f2fe',
27
+ * 500: '#0ea5e9',
28
+ * 600: '#0284c7',
29
+ * 700: '#0369a1'
30
+ * },
31
+ * neutral: {
32
+ * 1: '#fafafa',
33
+ * 5: '#737373',
34
+ * 12: '#171717'
35
+ * }
36
+ * }
37
+ */
38
+ colors?: {
39
+ primary?: Partial<Record<50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900, string>>;
40
+ neutral?: Partial<Record<1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12, string>>;
41
+ };
42
+ }
43
+ declare const _default: _nuxt_schema.NuxtModule<ModuleOptions, ModuleOptions, false>;
44
+
45
+ export = _default;
46
+ export type { ModuleOptions };
@@ -0,0 +1,46 @@
1
+ import * as _nuxt_schema from '@nuxt/schema';
2
+
3
+ interface ModuleOptions {
4
+ /**
5
+ * Custom icon base path
6
+ * @default '/assets/icons'
7
+ */
8
+ iconPath?: string;
9
+ /**
10
+ * Custom icon namespaces and their paths
11
+ * @example { icons: '/custom/icons', logos: '/custom/logos' }
12
+ */
13
+ iconNamespaces?: Record<string, string>;
14
+ /**
15
+ * Component prefix
16
+ * @default 'Ur'
17
+ */
18
+ prefix?: string;
19
+ /**
20
+ * Custom color overrides
21
+ * Override default purple theme with your brand colors
22
+ * @example
23
+ * {
24
+ * primary: {
25
+ * 50: '#f0f9ff',
26
+ * 100: '#e0f2fe',
27
+ * 500: '#0ea5e9',
28
+ * 600: '#0284c7',
29
+ * 700: '#0369a1'
30
+ * },
31
+ * neutral: {
32
+ * 1: '#fafafa',
33
+ * 5: '#737373',
34
+ * 12: '#171717'
35
+ * }
36
+ * }
37
+ */
38
+ colors?: {
39
+ primary?: Partial<Record<50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900, string>>;
40
+ neutral?: Partial<Record<1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12, string>>;
41
+ };
42
+ }
43
+ declare const _default: _nuxt_schema.NuxtModule<ModuleOptions, ModuleOptions, false>;
44
+
45
+ export { _default as default };
46
+ export type { ModuleOptions };
@@ -0,0 +1,46 @@
1
+ import * as _nuxt_schema from '@nuxt/schema';
2
+
3
+ interface ModuleOptions {
4
+ /**
5
+ * Custom icon base path
6
+ * @default '/assets/icons'
7
+ */
8
+ iconPath?: string;
9
+ /**
10
+ * Custom icon namespaces and their paths
11
+ * @example { icons: '/custom/icons', logos: '/custom/logos' }
12
+ */
13
+ iconNamespaces?: Record<string, string>;
14
+ /**
15
+ * Component prefix
16
+ * @default 'Ur'
17
+ */
18
+ prefix?: string;
19
+ /**
20
+ * Custom color overrides
21
+ * Override default purple theme with your brand colors
22
+ * @example
23
+ * {
24
+ * primary: {
25
+ * 50: '#f0f9ff',
26
+ * 100: '#e0f2fe',
27
+ * 500: '#0ea5e9',
28
+ * 600: '#0284c7',
29
+ * 700: '#0369a1'
30
+ * },
31
+ * neutral: {
32
+ * 1: '#fafafa',
33
+ * 5: '#737373',
34
+ * 12: '#171717'
35
+ * }
36
+ * }
37
+ */
38
+ colors?: {
39
+ primary?: Partial<Record<50 | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900, string>>;
40
+ neutral?: Partial<Record<1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12, string>>;
41
+ };
42
+ }
43
+ declare const _default: _nuxt_schema.NuxtModule<ModuleOptions, ModuleOptions, false>;
44
+
45
+ export = _default;
46
+ export type { ModuleOptions };
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "urkit",
3
+ "configKey": "urkit",
4
+ "compatibility": {
5
+ "nuxt": ">=4.0.0"
6
+ },
7
+ "version": "0.1.5",
8
+ "builder": {
9
+ "@nuxt/module-builder": "1.0.2",
10
+ "unbuild": "3.6.1"
11
+ }
12
+ }
@@ -0,0 +1,72 @@
1
+ import { defineNuxtModule, createResolver, addTemplate, addComponentsDir } from '@nuxt/kit';
2
+
3
+ function generateCustomColorCSS(colors) {
4
+ if (!colors) return "";
5
+ const cssVars = [];
6
+ if (colors.primary) {
7
+ Object.entries(colors.primary).forEach(([shade, value]) => {
8
+ cssVars.push(` --primary-${shade}: ${value};`);
9
+ });
10
+ }
11
+ if (colors.neutral) {
12
+ Object.entries(colors.neutral).forEach(([shade, value]) => {
13
+ cssVars.push(` --neutral-${shade}: ${value};`);
14
+ });
15
+ }
16
+ if (cssVars.length === 0) return "";
17
+ return `:root {
18
+ ${cssVars.join("\n")}
19
+ }`;
20
+ }
21
+ const module$1 = defineNuxtModule({
22
+ meta: {
23
+ name: "urkit",
24
+ configKey: "urkit",
25
+ compatibility: {
26
+ nuxt: ">=4.0.0"
27
+ }
28
+ },
29
+ defaults: {
30
+ iconPath: "/assets/icons",
31
+ iconNamespaces: {
32
+ icons: "/assets/icons",
33
+ logos: "/assets/logos"
34
+ },
35
+ prefix: "Ur"
36
+ },
37
+ async setup(options, nuxt) {
38
+ const resolver = createResolver(import.meta.url);
39
+ nuxt.options.css.push(resolver.resolve("./runtime/assets/css/colors.css"));
40
+ nuxt.options.css.push(resolver.resolve("./runtime/assets/css/buttons.css"));
41
+ nuxt.options.css.push(resolver.resolve("./runtime/assets/css/form-fields.css"));
42
+ nuxt.options.css.push(resolver.resolve("./runtime/assets/css/global.css"));
43
+ if (options.colors) {
44
+ const customColors = generateCustomColorCSS(options.colors);
45
+ if (customColors) {
46
+ const customColorsFile = addTemplate({
47
+ filename: "urkit-custom-colors.css",
48
+ getContents: () => customColors,
49
+ write: true
50
+ });
51
+ nuxt.options.css.push(customColorsFile.dst);
52
+ }
53
+ }
54
+ nuxt.options.nitro = nuxt.options.nitro || {};
55
+ nuxt.options.nitro.publicAssets = nuxt.options.nitro.publicAssets || [];
56
+ nuxt.options.nitro.publicAssets.push({
57
+ dir: resolver.resolve("./runtime/public"),
58
+ maxAge: 60 * 60 * 24 * 365
59
+ // 1 year cache for icons
60
+ });
61
+ nuxt.options.runtimeConfig.public.urkit = {
62
+ iconNamespaces: options.iconNamespaces
63
+ };
64
+ await addComponentsDir({
65
+ path: resolver.resolve("./runtime/components"),
66
+ prefix: options.prefix,
67
+ pathPrefix: false
68
+ });
69
+ }
70
+ });
71
+
72
+ export { module$1 as default };
@@ -0,0 +1 @@
1
+ .btn{align-items:center;border:transparent;border-radius:var(--border-radius-2);color:var(--white);cursor:pointer;display:inline-flex;font-family:inherit;font-size:14px;font-weight:500;gap:10px;height:44px;justify-content:center;padding:0 16px;transition:all .3s ease-out}.btn .label{display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn:active{box-shadow:none!important;transform:scale(.97);transition:all .3s ease-out}.btn:disabled{background-color:var(--neutral-9);color:var(--neutral-6);cursor:not-allowed;pointer-events:none}.btn--loading{box-shadow:none}.btn--primary{background-color:var(--primary-600);box-shadow:0 0 0 0 var(--primary-500)}.btn--loading.btn--primary,.btn--primary:hover{background-color:var(--primary-700);box-shadow:0 3px 0 0 var(--primary-900)}.btn--outline{background-color:transparent;border:1.5px solid var(--primary-800)}.btn--loading.btn--outline,.btn--outline:hover{background-color:var(--neutral-11);box-shadow:0 3px 0 0 var(--primary-900)}.btn--white{background-color:var(--white);box-shadow:0 0 0 0 var(--neutral-3);color:var(--neutral-12)}.btn--loading.btn--white,.btn--white:hover{box-shadow:0 3px 0 0 var(--neutral-5)}.btn--danger{background-color:var(--btn-danger-bg)}.btn--danger:hover,.btn--loading.btn--danger{background-color:var(--btn-danger-bg-hover);box-shadow:0 3px 0 0 var(--btn-danger-bg-hover-shadow)}.btn--success{background-color:var(--btn-success-bg)}.btn--loading.btn--success,.btn--success:hover{background-color:var(--btn-success-bg-hover);box-shadow:0 3px 0 0 var(--btn-success-bg-hover-shadow)}.btn--sm{height:32px;padding:0 16px}.btn--md{height:36px;padding:0 16px}.btn--lg{height:40px;padding:0 16px}.btn--xlg{height:44px;padding:0 16px}.btn--rounded{border-radius:9999px}.btn--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn--loading{cursor:not-allowed;pointer-events:none}.btn--disabled{opacity:.5;pointer-events:none}.btn__spinner{margin-right:8px}.btn__icon{display:flex}.btn__icon--right{margin-left:8px;margin-right:0}
@@ -0,0 +1 @@
1
+ :root{--white:#fff;--black:#000;--primary-50:#f2f0ff;--primary-100:#d6d2ff;--primary-200:#c2bcff;--primary-300:#a79dff;--primary-400:#958aff;--primary-500:#7b6dff;--primary-600:#7063e8;--primary-700:#574db5;--primary-800:#443c8c;--primary-900:#342e6b;--neutral-1:#fdfdfd;--neutral-2:#f6f6f7;--neutral-3:#f1f1f2;--neutral-4:#dddcdf;--neutral-5:#c6c5ca;--neutral-6:#9897a0;--neutral-7:#6a6876;--neutral-8:#575665;--neutral-9:#3c3a4c;--neutral-10:#353345;--neutral-11:#2b2a3d;--neutral-12:#19172c;--success-light:#b8f2d8;--success:#2ebd85;--success-dark:#13703f;--success-contrast:#004f0d;--error-light:#ffc7c7;--error:#f6465d;--error-dark:#841927;--error-contrast:#5a101a;--info-light:#cce6ff;--info:#1994ff;--info-dark:#0f5999;--info-contrast:#072f52;--warning-light:#ffe7b3;--warning:#ffa913;--warning-dark:#99640b;--warning-contrast:#664207;--accent-light:#e0cfff;--accent:#7b6dff;--accent-dark:#574db5;--accent-contrast:#342e6b;--req-green:#21c16b;--alert-error-bg:#fb3748;--alert-error-light:#ffc1c5;--alert-error-lighter:#ffebec;--alert-error-border:#f87171;--alert-warning-bg:#fa731a;--alert-warning-light:#ffd9c0;--alert-warning-lighter:#fff3eb;--alert-warning-border:#fbbf24;--alert-success-bg:#21c16b;--alert-success-light:#c1f5da;--alert-success-lighter:#e0faec;--alert-success-border:#34d399;--alert-info-bg:#335cff;--alert-info-light:#c0d5ff;--alert-info-lighter:#ebf1ff;--alert-info-border:#60a5fa;--alert-feature-bg:#7b7b7b;--alert-feature-light:#ebebeb;--alert-feature-lighter:#f5f5f5;--alert-feature-border:#9ca3af}
@@ -0,0 +1 @@
1
+ .field-wrapper{display:flex;flex-direction:column;gap:8px}.field-label{color:var(--neutral-10);font-size:14px;font-weight:500;line-height:14px;margin:0;width:100%}.field-wrapper.is-disabled .field-label{color:var(--neutral-6)}.field-container{align-items:center;background:var(--white);border:none;box-shadow:0 0 0 1px var(--neutral-4),0 0 #0000,0 0 #0000,0 1px 2px 0 #0a0d1408;display:flex;outline:none;position:relative;transition:all .2s ease;width:100%}.field-container--textarea{align-items:stretch;flex-direction:column}.field-container--sm{height:32px}.field-container--md{height:35px}.field-container--lg{height:40px}.field-container--textarea.field-container--sm{height:auto;min-height:80px}.field-container--textarea.field-container--md{height:auto;min-height:90px}.field-container--textarea.field-container--lg{height:auto;min-height:100px}.field-container--focused{box-shadow:0 0 0 1.5px var(--primary-500),0 0 0 3.5px var(--white),0 0 0 5px var(--primary-50)}.field-container--focused .field-input::-moz-placeholder,.field-container--focused .field-textarea::-moz-placeholder{color:var(--neutral-12);-moz-transition:color .3s ease-out;transition:color .3s ease-out}.field-container--focused .field-input::placeholder,.field-container--focused .field-textarea::placeholder{color:var(--neutral-12);transition:color .3s ease-out}.field-container--error{border-color:var(--error);box-shadow:0 0 0 1.5px var(--error),0 0 0 3.5px var(--white),0 0 0 5px rgba(246,70,93,.1)}.field-container--disabled{background:var(--neutral-2);border-color:var(--neutral-3)}.field-container:hover:not(.field-container--disabled):not(.field-container--focused):not(.field-container--error){background:var(--neutral-2);box-shadow:0 0 0 1px var(--neutral-2)}.field-container:hover:not(.field-container--disabled):not(.field-container--error) .field-input::-moz-placeholder,.field-container:hover:not(.field-container--disabled):not(.field-container--error) .field-textarea::-moz-placeholder{color:var(--neutral-8);-moz-transition:color .3s ease-out;transition:color .3s ease-out}.field-container:hover:not(.field-container--disabled):not(.field-container--error) .field-input::placeholder,.field-container:hover:not(.field-container--disabled):not(.field-container--error) .field-textarea::placeholder{color:var(--neutral-8);transition:color .3s ease-out}.field-input,.field-textarea{background:transparent;border:none;box-sizing:border-box;color:var(--neutral-12);font-family:inherit;font-size:14px;font-weight:400;line-height:1.4;outline:none}.field-input{flex:1;height:100%;padding:0 12px}.field-textarea{flex:1;padding:12px;width:100%}.field-input::-moz-placeholder,.field-textarea::-moz-placeholder{color:var(--neutral-6);font-size:13px}.field-input::placeholder,.field-textarea::placeholder{color:var(--neutral-6);font-size:13px}.field-input:disabled,.field-textarea:disabled{color:var(--neutral-6);cursor:default}.field-input--with-inline-left-affix{padding-left:8px}.field-input--with-inline-right-affix{padding-right:8px}.field-container--with-left-icon .field-input{padding-left:40px}.field-container--with-right-icon .field-input{padding-right:36px}.field-textarea--resizable{display:block;flex:none;max-height:none;min-height:60px;overflow-y:auto;resize:vertical}.field-textarea--non-resizable{flex:1;resize:none}.field-icon--left{left:12px;position:absolute;top:50%;transform:translateY(-50%)}.field-icon{align-items:center;color:var(--neutral-6);display:flex;justify-content:center;transition:color .2s ease}.field-icon--right{position:absolute;right:12px;top:50%;transform:translateY(-50%)}.field-container--error .field-icon{color:var(--error)}.field-container--disabled .field-icon{color:var(--neutral-5)}.password-toggle{cursor:pointer;transition:color .2s ease}.password-toggle:hover{color:var(--neutral-8)}.password-toggle path{stroke:var(--neutral-6)}.field-affix{align-items:center;background:var(--white);color:var(--neutral-6);display:flex;font-size:14px;font-weight:450;height:100%;padding:0 12px;white-space:nowrap}.field-affix--left{border-right:1px solid var(--neutral-3)}.field-affix--right{border-left:1px solid var(--neutral-3)}.field-inline-affix{align-items:center;color:var(--neutral-6);display:flex;font-size:14px;font-weight:450;height:100%;padding:0 12px;white-space:nowrap}.field-inline-affix--left{padding-right:0}.field-inline-affix--right{padding-left:0}.field-button{flex-shrink:0;margin-left:8px;margin-right:4px}.field-select-container{background:var(--white);border-left:1px solid var(--neutral-3);height:100%;position:relative}.field-select-trigger{background:transparent;border:none;color:var(--neutral-12);cursor:pointer;font-size:14px;height:100%;min-width:80px;padding:0 12px;transition:background-color .2s ease}.field-select-trigger,.field-select-value{align-items:center;display:flex;gap:8px}.field-select-chevron{color:var(--neutral-6);transition:transform .2s ease}.field-select-trigger--open .field-select-chevron{transform:rotate(180deg)}.field-select-dropdown{background:var(--white);border-radius:10px;box-shadow:0 2px 4px rgba(41,41,41,.04),0 1px 2px rgba(41,41,41,.04),0 0 0 1px rgba(41,41,41,.04),inset 0 -.5px .5px rgba(41,41,41,.08);left:0;margin-top:4px;min-width:120px;overflow:hidden;padding:4px;position:absolute;right:0;top:104%;z-index:1000}.field-select-option{align-items:center;border-radius:8px;color:var(--neutral-12);cursor:pointer;display:flex;font-size:14px;gap:8px;padding:8px 12px;transition:background-color .2s ease}.field-select-option:hover{background:var(--neutral-1)}.field-select-option--selected{background:var(--primary-50);color:var(--primary-600)}.field-select-option--selected .select-option-icon{color:var(--primary-500)}.select-option-flag{border-radius:2px;height:16px;-o-object-fit:cover;object-fit:cover;width:16px}.select-option-icon{color:var(--neutral-6)}.field-select-value .select-option-icon{color:var(--primary-500)}.select-option-check{color:var(--primary-600)}.field-character-counter{background:var(--white);border-radius:4px;bottom:8px;color:var(--neutral-6);font-size:12px;padding:2px 4px;pointer-events:none;position:absolute;right:12px}.field-container--with-counter .field-textarea{padding-bottom:32px}.counter-over-limit{color:var(--error)!important}.field-hint{color:var(--neutral-6);font-size:13px;line-height:1.4;margin:0}.field-errors{display:flex;flex-direction:column;gap:4px}.field-error{color:var(--error);font-size:13px;line-height:1.4;margin:0}.password-requirements{display:flex;flex-direction:column;gap:8px;margin-top:6px}.password-progress{display:flex;gap:8px;margin-bottom:4px}.progress-bar{border-radius:2px;flex:1;height:4px;transition:background-color .3s ease}.progress-bar,.progress-bar--inactive{background-color:var(--neutral-3)}.progress-bar--weak{background-color:#fb3748}.progress-bar--medium{background-color:#fa731a}.progress-bar--strong{background-color:var(--req-green)}.requirements-title{color:var(--neutral-8);font-size:13px;font-weight:500;line-height:1.4;margin:0}.requirements-list{display:flex;flex-direction:column;gap:6px}.requirement-item{align-items:center;color:var(--neutral-8);display:flex;font-size:13px;font-weight:500;gap:8px;line-height:1.4;transition:color .2s ease}.requirement-item.requirement-met{color:var(--req-green)}.requirement-icon--success{color:var(--req-green)!important}.requirement-icon--error{color:var(--neutral-6)!important}@media screen and (max-width:768px){.field-container--sm{height:40px}.field-container--md{height:44px}.field-container--lg{height:48px}.field-container--textarea.field-container--sm{min-height:90px}.field-container--textarea.field-container--md{min-height:100px}.field-container--textarea.field-container--lg{min-height:110px}.field-input,.field-textarea{font-size:16px}}.field-container--radius-none{border-radius:0}.field-container--radius-none .field-affix--left{border-bottom-left-radius:0;border-top-left-radius:0}.field-container--radius-none .field-affix--right,.field-container--radius-none .field-select-container{border-bottom-right-radius:0;border-top-right-radius:0}.field-container--radius-soft.field-container--md,.field-container--radius-soft.field-container--sm{border-radius:6px}.field-container--radius-soft.field-container--md .field-affix--left,.field-container--radius-soft.field-container--sm .field-affix--left{border-bottom-left-radius:6px;border-top-left-radius:6px}.field-container--radius-soft.field-container--md .field-affix--right,.field-container--radius-soft.field-container--md .field-select-container,.field-container--radius-soft.field-container--sm .field-affix--right,.field-container--radius-soft.field-container--sm .field-select-container{border-bottom-right-radius:6px;border-top-right-radius:6px}.field-container--radius-soft.field-container--lg{border-radius:8px}.field-container--radius-soft.field-container--lg .field-affix--left{border-bottom-left-radius:8px;border-top-left-radius:8px}.field-container--radius-soft.field-container--lg .field-affix--right,.field-container--radius-soft.field-container--lg .field-select-container{border-bottom-right-radius:8px;border-top-right-radius:8px}.field-container--radius-medium.field-container--md,.field-container--radius-medium.field-container--sm{border-radius:8px}.field-container--radius-medium.field-container--md .field-affix--left,.field-container--radius-medium.field-container--sm .field-affix--left{border-bottom-left-radius:8px;border-top-left-radius:8px}.field-container--radius-medium.field-container--md .field-affix--right,.field-container--radius-medium.field-container--md .field-select-container,.field-container--radius-medium.field-container--sm .field-affix--right,.field-container--radius-medium.field-container--sm .field-select-container{border-bottom-right-radius:8px;border-top-right-radius:8px}.field-container--radius-medium.field-container--lg{border-radius:10px}.field-container--radius-medium.field-container--lg .field-affix--left{border-bottom-left-radius:10px;border-top-left-radius:10px}.field-container--radius-medium.field-container--lg .field-affix--right,.field-container--radius-medium.field-container--lg .field-select-container{border-bottom-right-radius:10px;border-top-right-radius:10px}.field-container--radius-pill{border-radius:999px}.field-container--radius-pill .field-affix--left{border-bottom-left-radius:999px;border-top-left-radius:999px}.field-container--radius-pill .field-affix--right,.field-container--radius-pill .field-select-container{border-bottom-right-radius:999px;border-top-right-radius:999px}
@@ -0,0 +1 @@
1
+ @font-face{font-display:swap;font-family:InterFull;font-weight:100 900;src:url(/fonts/Inter-VariableFont_opsz,wght.ttf) format("truetype")}@font-face{font-display:swap;font-family:Instrument;font-style:normal;font-weight:400;src:url(/fonts/Instrument_Serif/InstrumentSerif-Regular.ttf) format("truetype")}@font-face{font-display:swap;font-family:Instrument Italic;font-style:italic;font-weight:400;src:url(/fonts/Instrument_Serif/InstrumentSerif-Italic.ttf) format("truetype")}body{background-color:var(--white);color:var(--white);font-family:InterFull,sans-serif;font-feature-settings:"salt" on,"ss01" on,"ss03" on,"ss07" on,"ss08" on,"tnum" on,"cv01" 1,"cv02" 1,"cv03" 1,"cv04" 1,"cv05" 1,"cv06" 1,"cv08" 1,"cv09" 1,"cv10" 1,"cv12" 1,"cv11" 1,"cv13" 1,"calt" 1,"liga" 1;font-optical-sizing:auto;font-style:normal}body.no-scroll{overflow:hidden!important}*{border-style:solid;border-width:0;box-sizing:border-box}#__nuxt{min-height:inherit}.heading{display:inline-block;font-size:24px;font-weight:600;margin-bottom:32px}.trading-heading{color:var(--white);font-size:14px;font-weight:700}.b-r{border:1px solid red}.b-l{border:1px solid lime}.b-y{border:1px solid #ff0}.b-g{border:1px solid green}.b-b{border:1px solid blue}.section-divider{background:var(--neutral-3);border:none;height:1px;margin:56px 0}.page-enter-active,.page-leave-active{transition:all .4s cubic-bezier(.4,0,.2,1)}.page-enter-from,.page-leave-to{filter:blur(10px);opacity:0}.page-enter-to,.page-leave-from{filter:blur(0);opacity:1}::selection{background-color:var(--neutral-3);text-shadow:none}::-moz-selection{background-color:var(--neutral-3);text-shadow:none}::-webkit-scrollbar{height:6px;width:6px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background-color:transparent;border-radius:6px;-webkit-transition:background-color .3s ease;transition:background-color .3s ease}::-webkit-scrollbar-corner{background:transparent}body:hover::-webkit-scrollbar-thumb{background-color:var(--neutral-4)}body:hover::-webkit-scrollbar-thumb:hover{background-color:var(--neutral-6)}html{scrollbar-color:transparent transparent;scrollbar-width:thin}html:hover{scrollbar-color:var(--neutral-4) transparent}