create-nativecore 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/README.md +10 -18
  2. package/bin/index.mjs +407 -489
  3. package/package.json +4 -3
  4. package/template/.env.example +28 -0
  5. package/template/.htmlhintrc +14 -0
  6. package/template/api/data/dashboard.json +11 -0
  7. package/template/api/data/users.json +18 -0
  8. package/template/api/mockApi.js +161 -0
  9. package/template/assets/icon.svg +13 -0
  10. package/template/assets/logo.svg +25 -0
  11. package/template/eslint.config.js +94 -0
  12. package/template/index.html +137 -0
  13. package/template/manifest.json +19 -0
  14. package/template/public/.well-known/security.txt +9 -0
  15. package/template/public/_headers +24 -0
  16. package/template/public/_redirects +14 -0
  17. package/template/public/assets/icon.svg +13 -0
  18. package/template/public/assets/logo.svg +25 -0
  19. package/template/public/manifest.json +19 -0
  20. package/template/public/robots.txt +13 -0
  21. package/template/public/sitemap.xml +27 -0
  22. package/template/scripts/build-for-bots.mjs +121 -0
  23. package/template/scripts/convert-to-ts.mjs +106 -0
  24. package/template/scripts/fix-encoding.mjs +38 -0
  25. package/template/scripts/fix-svg-paths.mjs +32 -0
  26. package/template/scripts/generate-cf-router.mjs +52 -0
  27. package/template/scripts/inject-dev-tools.mjs +41 -0
  28. package/template/scripts/inject-version.mjs +65 -0
  29. package/template/scripts/make-component.mjs +445 -0
  30. package/template/scripts/make-component.mjs.backup +432 -0
  31. package/template/scripts/make-controller.mjs +119 -0
  32. package/template/scripts/make-core-component.mjs +303 -0
  33. package/template/scripts/make-view.mjs +346 -0
  34. package/template/scripts/minify.mjs +71 -0
  35. package/template/scripts/prepare-static-assets.mjs +141 -0
  36. package/template/scripts/prompt-bot-build.mjs +223 -0
  37. package/template/scripts/remove-component.mjs +170 -0
  38. package/template/scripts/remove-core-component.mjs +156 -0
  39. package/template/scripts/remove-dev.mjs +13 -0
  40. package/template/scripts/remove-view.mjs +200 -0
  41. package/template/scripts/strip-dev-blocks.mjs +30 -0
  42. package/template/scripts/watch-compile.mjs +69 -0
  43. package/template/server.js +1066 -0
  44. package/template/src/app.ts +115 -0
  45. package/template/src/components/appRegistry.ts +8 -0
  46. package/template/src/components/core/app-footer.ts +27 -0
  47. package/template/src/components/core/app-header.ts +175 -0
  48. package/template/src/components/core/app-sidebar.ts +238 -0
  49. package/template/src/components/core/loading-spinner.ts +25 -0
  50. package/template/src/components/core/nc-a.ts +313 -0
  51. package/template/src/components/core/nc-accordion.ts +186 -0
  52. package/template/src/components/core/nc-alert.ts +153 -0
  53. package/template/src/components/core/nc-animation.ts +1150 -0
  54. package/template/src/components/core/nc-autocomplete.ts +271 -0
  55. package/template/src/components/core/nc-avatar-group.ts +113 -0
  56. package/template/src/components/core/nc-avatar.ts +148 -0
  57. package/template/src/components/core/nc-badge.ts +86 -0
  58. package/template/src/components/core/nc-bottom-nav.ts +214 -0
  59. package/template/src/components/core/nc-breadcrumb.ts +96 -0
  60. package/template/src/components/core/nc-button.ts +307 -0
  61. package/template/src/components/core/nc-card.ts +160 -0
  62. package/template/src/components/core/nc-checkbox.ts +282 -0
  63. package/template/src/components/core/nc-chip.ts +115 -0
  64. package/template/src/components/core/nc-code.ts +314 -0
  65. package/template/src/components/core/nc-collapsible.ts +154 -0
  66. package/template/src/components/core/nc-color-picker.ts +268 -0
  67. package/template/src/components/core/nc-copy-button.ts +119 -0
  68. package/template/src/components/core/nc-date-picker.ts +443 -0
  69. package/template/src/components/core/nc-div.ts +280 -0
  70. package/template/src/components/core/nc-divider.ts +81 -0
  71. package/template/src/components/core/nc-drawer.ts +230 -0
  72. package/template/src/components/core/nc-dropdown.ts +178 -0
  73. package/template/src/components/core/nc-empty-state.ts +134 -0
  74. package/template/src/components/core/nc-file-upload.ts +354 -0
  75. package/template/src/components/core/nc-form.ts +312 -0
  76. package/template/src/components/core/nc-image.ts +184 -0
  77. package/template/src/components/core/nc-input.ts +383 -0
  78. package/template/src/components/core/nc-kbd.ts +48 -0
  79. package/template/src/components/core/nc-menu-item.ts +193 -0
  80. package/template/src/components/core/nc-menu.ts +376 -0
  81. package/template/src/components/core/nc-modal.ts +238 -0
  82. package/template/src/components/core/nc-nav-item.ts +151 -0
  83. package/template/src/components/core/nc-number-input.ts +350 -0
  84. package/template/src/components/core/nc-otp-input.ts +235 -0
  85. package/template/src/components/core/nc-pagination.ts +178 -0
  86. package/template/src/components/core/nc-popover.ts +260 -0
  87. package/template/src/components/core/nc-progress-circular.ts +119 -0
  88. package/template/src/components/core/nc-progress.ts +134 -0
  89. package/template/src/components/core/nc-radio.ts +235 -0
  90. package/template/src/components/core/nc-rating.ts +266 -0
  91. package/template/src/components/core/nc-rich-text.ts +283 -0
  92. package/template/src/components/core/nc-scroll-top.ts +116 -0
  93. package/template/src/components/core/nc-select.ts +452 -0
  94. package/template/src/components/core/nc-skeleton.ts +107 -0
  95. package/template/src/components/core/nc-slider.ts +285 -0
  96. package/template/src/components/core/nc-snackbar.ts +230 -0
  97. package/template/src/components/core/nc-splash.ts +343 -0
  98. package/template/src/components/core/nc-stepper.ts +247 -0
  99. package/template/src/components/core/nc-switch.ts +281 -0
  100. package/template/src/components/core/nc-tab-item.ts +138 -0
  101. package/template/src/components/core/nc-table.ts +279 -0
  102. package/template/src/components/core/nc-tabs.ts +554 -0
  103. package/template/src/components/core/nc-tag-input.ts +279 -0
  104. package/template/src/components/core/nc-textarea.ts +216 -0
  105. package/template/src/components/core/nc-time-picker.ts +438 -0
  106. package/template/src/components/core/nc-timeline.ts +186 -0
  107. package/template/src/components/core/nc-tooltip.ts +143 -0
  108. package/template/src/components/frameworkRegistry.ts +68 -0
  109. package/template/src/components/preloadRegistry.ts +28 -0
  110. package/template/src/components/registry.ts +8 -0
  111. package/template/src/components/ui/dashboard-signal-lab.ts +284 -0
  112. package/template/src/constants/apiEndpoints.ts +27 -0
  113. package/template/src/constants/errorMessages.ts +23 -0
  114. package/template/src/constants/index.ts +8 -0
  115. package/template/src/constants/routePaths.ts +15 -0
  116. package/template/src/constants/storageKeys.ts +18 -0
  117. package/template/src/controllers/dashboard.controller.ts +200 -0
  118. package/template/src/controllers/home.controller.ts +21 -0
  119. package/template/src/controllers/index.ts +11 -0
  120. package/template/src/controllers/login.controller.ts +131 -0
  121. package/template/src/core/component.ts +354 -0
  122. package/template/src/core/errorHandler.ts +85 -0
  123. package/template/src/core/gpu-animation.ts +604 -0
  124. package/template/src/core/http.ts +173 -0
  125. package/template/src/core/lazyComponents.ts +90 -0
  126. package/template/src/core/router.ts +642 -0
  127. package/template/src/core/signals.ts +146 -0
  128. package/template/src/core/state.ts +248 -0
  129. package/template/src/dev/component-editor.ts +1363 -0
  130. package/template/src/dev/component-overlay.ts +278 -0
  131. package/template/src/dev/context-menu.ts +223 -0
  132. package/template/src/dev/denc-tools.ts +250 -0
  133. package/template/src/dev/hmr.ts +189 -0
  134. package/template/src/dev/nfbs.code-workspace +27 -0
  135. package/template/src/dev/outline-panel.ts +1247 -0
  136. package/template/src/middleware/auth.middleware.ts +23 -0
  137. package/template/src/routes/routes.ts +38 -0
  138. package/template/src/services/api.service.ts +394 -0
  139. package/template/src/services/auth.service.ts +176 -0
  140. package/template/src/services/index.ts +8 -0
  141. package/template/src/services/logger.service.ts +74 -0
  142. package/template/src/services/storage.service.ts +88 -0
  143. package/template/src/stores/appStore.ts +57 -0
  144. package/template/src/stores/uiStore.ts +36 -0
  145. package/template/src/styles/core-variables.css +219 -0
  146. package/template/src/styles/core.css +710 -0
  147. package/template/src/styles/main.css +3164 -0
  148. package/template/src/styles/variables.css +152 -0
  149. package/template/src/types/global.d.ts +47 -0
  150. package/template/src/utils/cacheBuster.ts +20 -0
  151. package/template/src/utils/dom.ts +149 -0
  152. package/template/src/utils/events.ts +203 -0
  153. package/template/src/utils/form.ts +176 -0
  154. package/template/src/utils/formatters.ts +169 -0
  155. package/template/src/utils/helpers.ts +195 -0
  156. package/template/src/utils/markdown.ts +307 -0
  157. package/template/src/utils/sidebar.ts +96 -0
  158. package/template/src/utils/smoothScroll.ts +85 -0
  159. package/template/src/utils/templates.ts +23 -0
  160. package/template/src/utils/validation.ts +73 -0
  161. package/template/src/views/protected/dashboard.html +293 -0
  162. package/template/src/views/public/home.html +150 -0
  163. package/template/src/views/public/login.html +102 -0
  164. package/template/tests/unit/component.test.ts +87 -0
  165. package/template/tests/unit/computed.test.ts +79 -0
  166. package/template/tests/unit/form.test.ts +68 -0
  167. package/template/tests/unit/formatters.test.ts +49 -0
  168. package/template/tests/unit/lazy-components.test.ts +59 -0
  169. package/template/tests/unit/markdown.test.ts +62 -0
  170. package/template/tests/unit/router.test.ts +112 -0
  171. package/template/tests/unit/signals.test.ts +54 -0
  172. package/template/tests/unit/validation.test.ts +50 -0
  173. package/template/tsconfig.build.json +21 -0
  174. package/template/tsconfig.json +51 -0
  175. package/template/vitest.config.ts +36 -0
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Logger Service
3
+ */
4
+
5
+ type LogLevel = 'DEBUG' | 'INFO' | 'WARN' | 'ERROR';
6
+
7
+ class Logger {
8
+ private levels = {
9
+ DEBUG: 0,
10
+ INFO: 1,
11
+ WARN: 2,
12
+ ERROR: 3,
13
+ };
14
+
15
+ private currentLevel: number;
16
+ private enableRemoteLogging = false;
17
+
18
+ constructor() {
19
+ this.currentLevel = this.isDevelopment() ? this.levels.DEBUG : this.levels.WARN;
20
+ }
21
+
22
+ private isDevelopment(): boolean {
23
+ return window.location.hostname === 'localhost';
24
+ }
25
+
26
+ setLevel(level: LogLevel): void {
27
+ this.currentLevel = this.levels[level] ?? this.levels.INFO;
28
+ }
29
+
30
+ setRemoteLogging(enabled: boolean): void {
31
+ this.enableRemoteLogging = enabled;
32
+ }
33
+
34
+ debug(message: string, ...data: any[]): void {
35
+ if (this.currentLevel <= this.levels.DEBUG) {
36
+ console.log(`[DEBUG] ${message}`, ...data);
37
+ }
38
+ }
39
+
40
+ info(message: string, ...data: any[]): void {
41
+ if (this.currentLevel <= this.levels.INFO) {
42
+ console.log(`[INFO] ${message}`, ...data);
43
+ }
44
+ }
45
+
46
+ warn(message: string, ...data: any[]): void {
47
+ if (this.currentLevel <= this.levels.WARN) {
48
+ console.warn(`[WARN] ${message}`, ...data);
49
+ }
50
+ this.sendToRemote('warn', message, data);
51
+ }
52
+
53
+ error(message: string, ...data: any[]): void {
54
+ if (this.currentLevel <= this.levels.ERROR) {
55
+ console.error(`[ERROR] ${message}`, ...data);
56
+ }
57
+ this.sendToRemote('error', message, data);
58
+ }
59
+
60
+ logRequest(method: string, url: string, data?: any): void {
61
+ this.debug(`API Request: ${method} ${url}`, data);
62
+ }
63
+
64
+ logResponse(method: string, url: string, status: number, data?: any): void {
65
+ this.debug(`API Response: ${method} ${url} ${status}`, data);
66
+ }
67
+
68
+ private sendToRemote(_level: string, _message: string, _data: any[]): void {
69
+ if (!this.enableRemoteLogging) return;
70
+ // TODO: Implement remote logging
71
+ }
72
+ }
73
+
74
+ export default new Logger();
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Secure Storage Service
3
+ * Handles secure storage of sensitive data
4
+ */
5
+
6
+ type StorageStrategy = 'memory' | 'session' | 'local';
7
+
8
+ class StorageService {
9
+ private memory: Record<string, string> = {};
10
+ private strategy: StorageStrategy = 'session';
11
+
12
+ /**
13
+ * Set storage strategy
14
+ */
15
+ setStrategy(strategy: StorageStrategy): void {
16
+ if (['memory', 'session', 'local'].includes(strategy)) {
17
+ this.strategy = strategy;
18
+ }
19
+ }
20
+
21
+ /**
22
+ * Get item from storage
23
+ */
24
+ get(key: string): string | null {
25
+ switch (this.strategy) {
26
+ case 'memory':
27
+ return this.memory[key] || null;
28
+ case 'session':
29
+ return sessionStorage.getItem(key);
30
+ case 'local':
31
+ return localStorage.getItem(key);
32
+ default:
33
+ return null;
34
+ }
35
+ }
36
+
37
+ /**
38
+ * Set item in storage
39
+ */
40
+ set(key: string, value: string): void {
41
+ switch (this.strategy) {
42
+ case 'memory':
43
+ this.memory[key] = value;
44
+ break;
45
+ case 'session':
46
+ sessionStorage.setItem(key, value);
47
+ break;
48
+ case 'local':
49
+ localStorage.setItem(key, value);
50
+ break;
51
+ }
52
+ }
53
+
54
+ /**
55
+ * Remove item from storage
56
+ */
57
+ remove(key: string): void {
58
+ switch (this.strategy) {
59
+ case 'memory':
60
+ delete this.memory[key];
61
+ break;
62
+ case 'session':
63
+ sessionStorage.removeItem(key);
64
+ break;
65
+ case 'local':
66
+ localStorage.removeItem(key);
67
+ break;
68
+ }
69
+ }
70
+
71
+ /**
72
+ * Clear all storage
73
+ */
74
+ clear(): void {
75
+ this.memory = {};
76
+ sessionStorage.clear();
77
+ localStorage.clear();
78
+ }
79
+
80
+ /**
81
+ * Check if key exists
82
+ */
83
+ has(key: string): boolean {
84
+ return this.get(key) !== null;
85
+ }
86
+ }
87
+
88
+ export default new StorageService();
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Global Application Store
3
+ * Manages global application state
4
+ */
5
+ import { useState } from '../core/state.js';
6
+ import type { State } from '../core/state.js';
7
+
8
+ export interface User {
9
+ id: string | number;
10
+ email: string;
11
+ name?: string;
12
+ [key: string]: any;
13
+ }
14
+
15
+ class AppStore {
16
+ user: State<User | null>;
17
+ isLoading: State<boolean>;
18
+ error: State<string | null>;
19
+ count: State<number>;
20
+
21
+ constructor() {
22
+ this.user = useState<User | null>(null);
23
+ this.isLoading = useState<boolean>(false);
24
+ this.error = useState<string | null>(null);
25
+ this.count = useState<number>(0);
26
+ }
27
+
28
+ setUser(user: User | null): void {
29
+ this.user.value = user;
30
+ }
31
+
32
+ setLoading(loading: boolean): void {
33
+ this.isLoading.value = loading;
34
+ }
35
+
36
+ setError(error: string | null): void {
37
+ this.error.value = error;
38
+ }
39
+
40
+ clearError(): void {
41
+ this.error.value = null;
42
+ }
43
+
44
+ incrementCount(amount: number = 1): void {
45
+ this.count.value += amount;
46
+ }
47
+
48
+ decrementCount(amount: number = 1): void {
49
+ this.count.value -= amount;
50
+ }
51
+
52
+ resetCount(): void {
53
+ this.count.value = 0;
54
+ }
55
+ }
56
+
57
+ export const store = new AppStore();
@@ -0,0 +1,36 @@
1
+ /**
2
+ * UI State Store
3
+ * Manages UI-specific state
4
+ */
5
+ import { useState } from '../core/state.js';
6
+ import type { State } from '../core/state.js';
7
+
8
+ class UIStore {
9
+ sidebarOpen: State<boolean>;
10
+ theme: State<'light' | 'dark'>;
11
+ notifications: State<any[]>;
12
+
13
+ constructor() {
14
+ this.sidebarOpen = useState<boolean>(false);
15
+ this.theme = useState<'light' | 'dark'>('light');
16
+ this.notifications = useState<any[]>([]);
17
+ }
18
+
19
+ toggleSidebar(): void {
20
+ this.sidebarOpen.value = !this.sidebarOpen.value;
21
+ }
22
+
23
+ setTheme(theme: 'light' | 'dark'): void {
24
+ this.theme.value = theme;
25
+ }
26
+
27
+ addNotification(notification: any): void {
28
+ this.notifications.value = [...this.notifications.value, notification];
29
+ }
30
+
31
+ removeNotification(id: string): void {
32
+ this.notifications.value = this.notifications.value.filter(n => n.id !== id);
33
+ }
34
+ }
35
+
36
+ export const uiStore = new UIStore();
@@ -0,0 +1,219 @@
1
+ /**
2
+ * NativeCore Framework - Core Variables
3
+ *
4
+ * ⚠️ FRAMEWORK INTERNAL USE ONLY - DO NOT MODIFY ⚠️
5
+ *
6
+ * These variables are reserved for NativeCore's built-in components.
7
+ * All variables are prefixed with --nc- to prevent conflicts.
8
+ *
9
+ * For your own components and customization, use variables.css instead.
10
+ *
11
+ * Optional Theming: You can override framework colors by setting
12
+ * --nc-theme-* variables in variables.css (see examples at bottom).
13
+ */
14
+
15
+ :root {
16
+ /* ============================================
17
+ CORE BRAND COLORS (Framework Reserved)
18
+ ============================================ */
19
+ --nc-primary: var(--nc-theme-primary, #10b981);
20
+ --nc-primary-light: var(--nc-theme-primary-light, #34d399);
21
+ --nc-primary-dark: var(--nc-theme-primary-dark, #059669);
22
+ --nc-secondary: var(--nc-theme-secondary, #3b82f6);
23
+ --nc-accent: var(--nc-theme-accent, #0f172a);
24
+
25
+ /* ============================================
26
+ SEMANTIC COLORS
27
+ ============================================ */
28
+ --nc-success: #10b981;
29
+ --nc-success-light: #34d399;
30
+ --nc-success-dark: #059669;
31
+
32
+ --nc-warning: #f59e0b;
33
+ --nc-warning-light: #fbbf24;
34
+ --nc-warning-dark: #d97706;
35
+
36
+ --nc-danger: #ef4444;
37
+ --nc-danger-light: #f87171;
38
+ --nc-danger-dark: #dc2626;
39
+
40
+ --nc-info: #3b82f6;
41
+ --nc-info-light: #60a5fa;
42
+ --nc-info-dark: #2563eb;
43
+
44
+ /* ============================================
45
+ NEUTRAL COLORS
46
+ ============================================ */
47
+ --nc-white: #ffffff;
48
+ --nc-black: #000000;
49
+
50
+ --nc-gray-50: #f8fafc;
51
+ --nc-gray-100: #f1f5f9;
52
+ --nc-gray-200: #e2e8f0;
53
+ --nc-gray-300: #cbd5e1;
54
+ --nc-gray-400: #94a3b8;
55
+ --nc-gray-500: #64748b;
56
+ --nc-gray-600: #475569;
57
+ --nc-gray-700: #334155;
58
+ --nc-gray-800: #1e293b;
59
+ --nc-gray-900: #0f172a;
60
+
61
+ /* ============================================
62
+ TEXT COLORS
63
+ ============================================ */
64
+ --nc-text: #0f172a;
65
+ --nc-text-secondary: #64748b;
66
+ --nc-text-muted: #94a3b8;
67
+ --nc-text-inverse: var(--nc-white);
68
+
69
+ /* ============================================
70
+ BACKGROUND COLORS
71
+ ============================================ */
72
+ --nc-bg: var(--nc-white);
73
+ --nc-bg-secondary: var(--nc-gray-50);
74
+ --nc-bg-tertiary: var(--nc-gray-100);
75
+ --nc-bg-dark: var(--nc-gray-900);
76
+
77
+ /* ============================================
78
+ BORDER & DIVIDERS
79
+ ============================================ */
80
+ --nc-border: var(--nc-gray-200);
81
+ --nc-border-dark: var(--nc-gray-300);
82
+ --nc-divider: var(--nc-gray-100);
83
+
84
+ /* ============================================
85
+ GRADIENTS
86
+ ============================================ */
87
+ --nc-gradient-primary: linear-gradient(135deg, #10b981 0%, #059669 100%);
88
+ --nc-gradient-success: linear-gradient(135deg, #10b981 0%, #059669 100%);
89
+ --nc-gradient-danger: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
90
+ --nc-gradient-info: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%);
91
+ --nc-gradient-overlay: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, 0.02) 100%);
92
+
93
+ /* ============================================
94
+ SHADOWS
95
+ ============================================ */
96
+ --nc-shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
97
+ --nc-shadow-sm: 0 1px 3px 0 rgba(0, 0, 0, 0.08), 0 1px 2px 0 rgba(0, 0, 0, 0.04);
98
+ --nc-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.08), 0 2px 4px -1px rgba(0, 0, 0, 0.04);
99
+ --nc-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.08), 0 4px 6px -2px rgba(0, 0, 0, 0.04);
100
+ --nc-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.08), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
101
+ --nc-shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.15);
102
+ --nc-shadow-inner: inset 0 2px 4px 0 rgba(0, 0, 0, 0.06);
103
+
104
+ /* Colored shadows for components */
105
+ --nc-shadow-primary: 0 4px 12px rgba(16, 185, 129, 0.25);
106
+ --nc-shadow-success: 0 4px 12px rgba(16, 185, 129, 0.25);
107
+ --nc-shadow-danger: 0 4px 12px rgba(239, 68, 68, 0.25);
108
+
109
+ /* ============================================
110
+ TYPOGRAPHY
111
+ ============================================ */
112
+ --nc-font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
113
+ --nc-font-family-mono: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, monospace;
114
+
115
+ --nc-font-size-xs: 0.75rem; /* 12px */
116
+ --nc-font-size-sm: 0.875rem; /* 14px */
117
+ --nc-font-size-base: 1rem; /* 16px */
118
+ --nc-font-size-lg: 1.125rem; /* 18px */
119
+ --nc-font-size-xl: 1.25rem; /* 20px */
120
+ --nc-font-size-2xl: 1.5rem; /* 24px */
121
+
122
+ --nc-font-weight-normal: 400;
123
+ --nc-font-weight-medium: 500;
124
+ --nc-font-weight-semibold: 600;
125
+ --nc-font-weight-bold: 700;
126
+
127
+ --nc-line-height-tight: 1.25;
128
+ --nc-line-height-normal: 1.5;
129
+ --nc-line-height-relaxed: 1.75;
130
+
131
+ /* ============================================
132
+ SPACING SYSTEM
133
+ ============================================ */
134
+ --nc-spacing-xs: 0.25rem; /* 4px */
135
+ --nc-spacing-sm: 0.5rem; /* 8px */
136
+ --nc-spacing-md: 1rem; /* 16px */
137
+ --nc-spacing-lg: 1.5rem; /* 24px */
138
+ --nc-spacing-xl: 2rem; /* 32px */
139
+ --nc-spacing-2xl: 3rem; /* 48px */
140
+
141
+ /* ============================================
142
+ BORDER RADIUS
143
+ ============================================ */
144
+ --nc-radius-sm: 0.25rem; /* 4px */
145
+ --nc-radius-md: 0.5rem; /* 8px */
146
+ --nc-radius-lg: 0.75rem; /* 12px */
147
+ --nc-radius-xl: 1rem; /* 16px */
148
+ --nc-radius-2xl: 1.5rem; /* 24px */
149
+ --nc-radius-full: 9999px;
150
+
151
+ /* ============================================
152
+ TRANSITIONS & ANIMATIONS
153
+ ============================================ */
154
+ --nc-transition-fast: 150ms cubic-bezier(0.4, 0, 0.2, 1);
155
+ --nc-transition-base: 250ms cubic-bezier(0.4, 0, 0.2, 1);
156
+ --nc-transition-slow: 350ms cubic-bezier(0.4, 0, 0.2, 1);
157
+
158
+ --nc-ease-in: cubic-bezier(0.4, 0, 1, 1);
159
+ --nc-ease-out: cubic-bezier(0, 0, 0.2, 1);
160
+ --nc-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
161
+
162
+ /* ============================================
163
+ Z-INDEX SCALE
164
+ ============================================ */
165
+ --nc-z-base: 1;
166
+ --nc-z-dropdown: 1000;
167
+ --nc-z-sticky: 1020;
168
+ --nc-z-fixed: 1030;
169
+ --nc-z-modal-backdrop: 1040;
170
+ --nc-z-modal: 1050;
171
+ --nc-z-popover: 1060;
172
+ --nc-z-tooltip: 1070;
173
+ --nc-z-notification: 1080;
174
+
175
+ /* ============================================
176
+ COMPONENT-SPECIFIC
177
+ ============================================ */
178
+
179
+ /* Buttons */
180
+ --nc-button-padding-sm: var(--nc-spacing-xs) var(--nc-spacing-md);
181
+ --nc-button-padding-md: var(--nc-spacing-sm) var(--nc-spacing-lg);
182
+ --nc-button-padding-lg: var(--nc-spacing-md) var(--nc-spacing-xl);
183
+ --nc-button-radius: var(--nc-radius-md);
184
+
185
+ /* Inputs */
186
+ --nc-input-padding: var(--nc-spacing-sm) var(--nc-spacing-md);
187
+ --nc-input-radius: var(--nc-radius-md);
188
+ --nc-input-border: 1px solid var(--nc-border);
189
+ --nc-input-focus-border: var(--nc-primary);
190
+
191
+ /* Cards */
192
+ --nc-card-padding: var(--nc-spacing-lg);
193
+ --nc-card-radius: var(--nc-radius-lg);
194
+ --nc-card-shadow: var(--nc-shadow-sm);
195
+
196
+ /* Header */
197
+ --nc-header-height: 70px;
198
+ --nc-header-bg: var(--nc-bg);
199
+ --nc-header-border: var(--nc-border);
200
+
201
+ /* Sidebar */
202
+ --nc-sidebar-width: 280px;
203
+ --nc-sidebar-bg: var(--nc-bg);
204
+ --nc-sidebar-border: var(--nc-border);
205
+ }
206
+
207
+ /* ============================================
208
+ THEMING EXAMPLE (for developers)
209
+ ============================================
210
+
211
+ To customize the framework's primary color, add this to variables.css:
212
+
213
+ :root {
214
+ --nc-theme-primary: #your-color;
215
+ --nc-theme-primary-light: #your-light-color;
216
+ --nc-theme-primary-dark: #your-dark-color;
217
+ }
218
+
219
+ ============================================ */