@yugnex/nexui 2.0.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 (138) hide show
  1. package/LICENSE +59 -0
  2. package/css/nexui-base.css +157 -0
  3. package/css/nexui-icons.css +86 -0
  4. package/css/nexui-tokens.css +113 -0
  5. package/css/nexui.css +16 -0
  6. package/dist/assets/geometry.d.ts +98 -0
  7. package/dist/assets/geometry.d.ts.map +1 -0
  8. package/dist/assets/geometry.js +114 -0
  9. package/dist/assets/geometry.js.map +1 -0
  10. package/dist/assets/typography.d.ts +3 -0
  11. package/dist/assets/typography.d.ts.map +1 -0
  12. package/dist/assets/typography.js +178 -0
  13. package/dist/assets/typography.js.map +1 -0
  14. package/dist/core/compiler.d.ts +30 -0
  15. package/dist/core/compiler.d.ts.map +1 -0
  16. package/dist/core/compiler.js +124 -0
  17. package/dist/core/compiler.js.map +1 -0
  18. package/dist/core/cx.d.ts +7 -0
  19. package/dist/core/cx.d.ts.map +1 -0
  20. package/dist/core/cx.js +34 -0
  21. package/dist/core/cx.js.map +1 -0
  22. package/dist/core/matrix.d.ts +118 -0
  23. package/dist/core/matrix.d.ts.map +1 -0
  24. package/dist/core/matrix.js +180 -0
  25. package/dist/core/matrix.js.map +1 -0
  26. package/dist/index.d.ts +27 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +74 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/primitives/avatar.d.ts +8 -0
  31. package/dist/primitives/avatar.d.ts.map +1 -0
  32. package/dist/primitives/avatar.js +146 -0
  33. package/dist/primitives/avatar.js.map +1 -0
  34. package/dist/primitives/badge.d.ts +8 -0
  35. package/dist/primitives/badge.d.ts.map +1 -0
  36. package/dist/primitives/badge.js +88 -0
  37. package/dist/primitives/badge.js.map +1 -0
  38. package/dist/primitives/button.d.ts +10 -0
  39. package/dist/primitives/button.d.ts.map +1 -0
  40. package/dist/primitives/button.js +137 -0
  41. package/dist/primitives/button.js.map +1 -0
  42. package/dist/primitives/checkbox.d.ts +13 -0
  43. package/dist/primitives/checkbox.d.ts.map +1 -0
  44. package/dist/primitives/checkbox.js +107 -0
  45. package/dist/primitives/checkbox.js.map +1 -0
  46. package/dist/primitives/input.d.ts +14 -0
  47. package/dist/primitives/input.d.ts.map +1 -0
  48. package/dist/primitives/input.js +177 -0
  49. package/dist/primitives/input.js.map +1 -0
  50. package/dist/primitives/panel.d.ts +9 -0
  51. package/dist/primitives/panel.d.ts.map +1 -0
  52. package/dist/primitives/panel.js +101 -0
  53. package/dist/primitives/panel.js.map +1 -0
  54. package/dist/primitives/progress.d.ts +8 -0
  55. package/dist/primitives/progress.d.ts.map +1 -0
  56. package/dist/primitives/progress.js +105 -0
  57. package/dist/primitives/progress.js.map +1 -0
  58. package/dist/primitives/separator.d.ts +8 -0
  59. package/dist/primitives/separator.d.ts.map +1 -0
  60. package/dist/primitives/separator.js +69 -0
  61. package/dist/primitives/separator.js.map +1 -0
  62. package/dist/primitives/skeleton.d.ts +8 -0
  63. package/dist/primitives/skeleton.d.ts.map +1 -0
  64. package/dist/primitives/skeleton.js +61 -0
  65. package/dist/primitives/skeleton.js.map +1 -0
  66. package/dist/primitives/spinner.d.ts +8 -0
  67. package/dist/primitives/spinner.d.ts.map +1 -0
  68. package/dist/primitives/spinner.js +64 -0
  69. package/dist/primitives/spinner.js.map +1 -0
  70. package/dist/primitives/status-ring.d.ts +8 -0
  71. package/dist/primitives/status-ring.d.ts.map +1 -0
  72. package/dist/primitives/status-ring.js +101 -0
  73. package/dist/primitives/status-ring.js.map +1 -0
  74. package/dist/primitives/switch.d.ts +12 -0
  75. package/dist/primitives/switch.d.ts.map +1 -0
  76. package/dist/primitives/switch.js +124 -0
  77. package/dist/primitives/switch.js.map +1 -0
  78. package/dist/primitives/text-stream.d.ts +23 -0
  79. package/dist/primitives/text-stream.d.ts.map +1 -0
  80. package/dist/primitives/text-stream.js +167 -0
  81. package/dist/primitives/text-stream.js.map +1 -0
  82. package/dist/tokens/colors.d.ts +127 -0
  83. package/dist/tokens/colors.d.ts.map +1 -0
  84. package/dist/tokens/colors.js +135 -0
  85. package/dist/tokens/colors.js.map +1 -0
  86. package/dist/tokens/motion.d.ts +37 -0
  87. package/dist/tokens/motion.d.ts.map +1 -0
  88. package/dist/tokens/motion.js +93 -0
  89. package/dist/tokens/motion.js.map +1 -0
  90. package/dist/tokens/shadows.d.ts +34 -0
  91. package/dist/tokens/shadows.d.ts.map +1 -0
  92. package/dist/tokens/shadows.js +45 -0
  93. package/dist/tokens/shadows.js.map +1 -0
  94. package/dist/tokens/spacing.d.ts +69 -0
  95. package/dist/tokens/spacing.d.ts.map +1 -0
  96. package/dist/tokens/spacing.js +71 -0
  97. package/dist/tokens/spacing.js.map +1 -0
  98. package/dist/tokens/type.d.ts +166 -0
  99. package/dist/tokens/type.d.ts.map +1 -0
  100. package/dist/tokens/type.js +215 -0
  101. package/dist/tokens/type.js.map +1 -0
  102. package/fonts/NexuiIcons.woff2 +0 -0
  103. package/fonts/NexuiMono-Regular.otf +0 -0
  104. package/fonts/NexuiMono-Regular.woff2 +0 -0
  105. package/fonts/NexuiSans-Bold.otf +0 -0
  106. package/fonts/NexuiSans-Bold.woff2 +0 -0
  107. package/fonts/NexuiSans-Medium.otf +0 -0
  108. package/fonts/NexuiSans-Medium.woff2 +0 -0
  109. package/fonts/NexuiSans-Regular.otf +0 -0
  110. package/fonts/NexuiSans-Regular.woff2 +0 -0
  111. package/native/Cargo.toml +16 -0
  112. package/native/src/lib.rs +127 -0
  113. package/nexui-utils.css +485 -0
  114. package/package.json +58 -0
  115. package/src/assets/geometry.ts +144 -0
  116. package/src/assets/typography.ts +184 -0
  117. package/src/core/compiler.ts +139 -0
  118. package/src/core/cx.ts +50 -0
  119. package/src/core/matrix.ts +195 -0
  120. package/src/index.ts +78 -0
  121. package/src/primitives/avatar.ts +159 -0
  122. package/src/primitives/badge.ts +98 -0
  123. package/src/primitives/button.ts +149 -0
  124. package/src/primitives/checkbox.ts +113 -0
  125. package/src/primitives/input.ts +187 -0
  126. package/src/primitives/panel.ts +111 -0
  127. package/src/primitives/progress.ts +112 -0
  128. package/src/primitives/separator.ts +73 -0
  129. package/src/primitives/skeleton.ts +68 -0
  130. package/src/primitives/spinner.ts +71 -0
  131. package/src/primitives/status-ring.ts +109 -0
  132. package/src/primitives/switch.ts +134 -0
  133. package/src/primitives/text-stream.ts +187 -0
  134. package/src/tokens/colors.ts +149 -0
  135. package/src/tokens/motion.ts +97 -0
  136. package/src/tokens/shadows.ts +58 -0
  137. package/src/tokens/spacing.ts +79 -0
  138. package/src/tokens/type.ts +224 -0
@@ -0,0 +1,127 @@
1
+ // @yugnex/nexui — Native Layout Compiler (Rust/WASM)
2
+ // Compiles LayoutMatrix bitmasks to CSS rule strings.
3
+ // This module is optional — the TypeScript compiler in src/core/compiler.ts
4
+ // provides identical output. The Rust path exists for environments that
5
+ // pre-compile CSS at build time rather than at runtime in the browser.
6
+
7
+ use wasm_bindgen::prelude::*;
8
+ use std::collections::HashMap;
9
+
10
+ #[wasm_bindgen]
11
+ pub struct NexuiLayoutCompiler {
12
+ cache: HashMap<u32, String>,
13
+ }
14
+
15
+ #[wasm_bindgen]
16
+ impl NexuiLayoutCompiler {
17
+ #[wasm_bindgen(constructor)]
18
+ pub fn new() -> NexuiLayoutCompiler {
19
+ NexuiLayoutCompiler {
20
+ cache: HashMap::new(),
21
+ }
22
+ }
23
+
24
+ /// Compiles a 32-bit LayoutMatrix bitmask to a complete CSS rule string.
25
+ /// The selector follows the pattern `.nx-m-{HEX}`.
26
+ /// Returns an empty string if the bitmask encodes no layout properties.
27
+ #[wasm_bindgen]
28
+ pub fn compile(&mut self, bitmask: u32) -> String {
29
+ if let Some(cached) = self.cache.get(&bitmask) {
30
+ return cached.clone();
31
+ }
32
+
33
+ let mut css = String::new();
34
+
35
+ // Padding (bits 0-3)
36
+ match bitmask & 0x0F {
37
+ 0x1 => css.push_str("padding:0.25rem;"),
38
+ 0x2 => css.push_str("padding:0.5rem;"),
39
+ 0x3 => css.push_str("padding:0.75rem;"),
40
+ 0x4 => css.push_str("padding:1rem;"),
41
+ 0x5 => css.push_str("padding:1.5rem;"),
42
+ 0x6 => css.push_str("padding:2rem;"),
43
+ _ => {}
44
+ }
45
+
46
+ // Display / Flex / Grid (bits 4-7)
47
+ match bitmask & 0xF0 {
48
+ 0x10 => css.push_str("display:flex;flex-direction:row;"),
49
+ 0x20 => css.push_str("display:flex;flex-direction:column;"),
50
+ 0x30 => css.push_str("display:grid;grid-template-columns:repeat(2,1fr);"),
51
+ 0x40 => css.push_str("display:grid;grid-template-columns:repeat(3,1fr);"),
52
+ 0x50 => css.push_str("display:grid;grid-template-columns:repeat(4,1fr);"),
53
+ 0x60 => css.push_str("align-items:flex-start;"),
54
+ 0x70 => css.push_str("align-items:center;"),
55
+ 0x80 => css.push_str("align-items:flex-end;"),
56
+ 0x90 => css.push_str("align-items:stretch;"),
57
+ 0xA0 => css.push_str("justify-content:flex-start;"),
58
+ 0xB0 => css.push_str("justify-content:center;"),
59
+ 0xC0 => css.push_str("justify-content:flex-end;"),
60
+ 0xD0 => css.push_str("justify-content:space-between;"),
61
+ 0xE0 => css.push_str("justify-content:space-around;"),
62
+ 0xF0 => css.push_str("justify-content:space-evenly;"),
63
+ _ => {}
64
+ }
65
+
66
+ // Border radius (bits 8-11)
67
+ match bitmask & 0xF00 {
68
+ 0x100 => css.push_str("border-radius:2px;"),
69
+ 0x200 => css.push_str("border-radius:4px;"),
70
+ 0x300 => css.push_str("border-radius:6px;"),
71
+ 0x400 => css.push_str("border-radius:8px;"),
72
+ 0x500 => css.push_str("border-radius:12px;"),
73
+ 0x600 => css.push_str("border-radius:16px;"),
74
+ 0x700 => css.push_str("border-radius:9999px;"),
75
+ _ => {}
76
+ }
77
+
78
+ // Gap (bits 12-15)
79
+ match bitmask & 0xF000 {
80
+ 0x1000 => css.push_str("gap:0.25rem;"),
81
+ 0x2000 => css.push_str("gap:0.5rem;"),
82
+ 0x3000 => css.push_str("gap:1rem;"),
83
+ 0x4000 => css.push_str("gap:1.5rem;"),
84
+ 0x5000 => css.push_str("gap:2rem;"),
85
+ _ => {}
86
+ }
87
+
88
+ // Width (bits 16-19)
89
+ match bitmask & 0xF0000 {
90
+ 0x10000 => css.push_str("width:100%;"),
91
+ 0x20000 => css.push_str("width:100vw;"),
92
+ 0x30000 => css.push_str("width:fit-content;"),
93
+ 0x40000 => css.push_str("width:min-content;"),
94
+ 0x50000 => css.push_str("width:max-content;"),
95
+ _ => {}
96
+ }
97
+
98
+ // Overflow (bits 20-23)
99
+ match bitmask & 0xF00000 {
100
+ 0x100000 => css.push_str("overflow:hidden;"),
101
+ 0x200000 => css.push_str("overflow:auto;"),
102
+ 0x300000 => css.push_str("overflow:scroll;"),
103
+ _ => {}
104
+ }
105
+
106
+ let result = if css.is_empty() {
107
+ String::new()
108
+ } else {
109
+ format!(".nx-m-{:X}{{{}}}", bitmask, css)
110
+ };
111
+
112
+ self.cache.insert(bitmask, result.clone());
113
+ result
114
+ }
115
+
116
+ /// Returns the CSS class name for a bitmask (without generating the rule).
117
+ #[wasm_bindgen]
118
+ pub fn class_name(bitmask: u32) -> String {
119
+ format!("nx-m-{:X}", bitmask)
120
+ }
121
+
122
+ /// Clears the internal compilation cache.
123
+ #[wasm_bindgen]
124
+ pub fn clear_cache(&mut self) {
125
+ self.cache.clear();
126
+ }
127
+ }
@@ -0,0 +1,485 @@
1
+ /*
2
+ * @yugnex/nexui — Utility Class System
3
+ * Import once at app root. Replaces Tailwind CSS utility classes.
4
+ * All color/border/text values reference CSS custom properties injected
5
+ * by initializeNexuiEngine() — theme-aware by default.
6
+ *
7
+ * Usage: className="nx-flex nx-gap-md nx-p-lg nx-text-primary"
8
+ */
9
+
10
+ /* ─── Display ────────────────────────────────────────────────────────────── */
11
+ .nx-block { display: block; }
12
+ .nx-inline { display: inline; }
13
+ .nx-inline-block { display: inline-block; }
14
+ .nx-inline-flex { display: inline-flex; }
15
+ .nx-flex { display: flex; }
16
+ .nx-grid { display: grid; }
17
+ .nx-hidden { display: none; }
18
+ .nx-contents { display: contents; }
19
+
20
+ /* ─── Flex Direction ─────────────────────────────────────────────────────── */
21
+ .nx-flex-row { flex-direction: row; }
22
+ .nx-flex-col { flex-direction: column; }
23
+ .nx-flex-row-rev { flex-direction: row-reverse; }
24
+ .nx-flex-col-rev { flex-direction: column-reverse; }
25
+ .nx-flex-wrap { flex-wrap: wrap; }
26
+ .nx-flex-nowrap { flex-wrap: nowrap; }
27
+
28
+ /* ─── Flex Sizing ────────────────────────────────────────────────────────── */
29
+ .nx-flex-1 { flex: 1 1 0%; }
30
+ .nx-flex-auto { flex: 1 1 auto; }
31
+ .nx-flex-none { flex: none; }
32
+ .nx-flex-shrink-0 { flex-shrink: 0; }
33
+ .nx-flex-grow { flex-grow: 1; }
34
+
35
+ /* ─── Align Items ────────────────────────────────────────────────────────── */
36
+ .nx-items-start { align-items: flex-start; }
37
+ .nx-items-center { align-items: center; }
38
+ .nx-items-end { align-items: flex-end; }
39
+ .nx-items-stretch { align-items: stretch; }
40
+ .nx-items-baseline{ align-items: baseline; }
41
+
42
+ /* ─── Justify Content ────────────────────────────────────────────────────── */
43
+ .nx-justify-start { justify-content: flex-start; }
44
+ .nx-justify-center { justify-content: center; }
45
+ .nx-justify-end { justify-content: flex-end; }
46
+ .nx-justify-between { justify-content: space-between; }
47
+ .nx-justify-around { justify-content: space-around; }
48
+ .nx-justify-evenly { justify-content: space-evenly; }
49
+
50
+ /* ─── Align Self ─────────────────────────────────────────────────────────── */
51
+ .nx-self-start { align-self: flex-start; }
52
+ .nx-self-center { align-self: center; }
53
+ .nx-self-end { align-self: flex-end; }
54
+ .nx-self-stretch { align-self: stretch; }
55
+
56
+ /* ─── Grid ───────────────────────────────────────────────────────────────── */
57
+ .nx-grid-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
58
+ .nx-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
59
+ .nx-grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
60
+ .nx-grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
61
+ .nx-grid-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); }
62
+ .nx-grid-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); }
63
+ .nx-col-span-1 { grid-column: span 1; }
64
+ .nx-col-span-2 { grid-column: span 2; }
65
+ .nx-col-span-3 { grid-column: span 3; }
66
+ .nx-col-span-full { grid-column: 1 / -1; }
67
+
68
+ /* ─── Gap ────────────────────────────────────────────────────────────────── */
69
+ .nx-gap-0 { gap: 0; }
70
+ .nx-gap-px { gap: 1px; }
71
+ .nx-gap-1 { gap: 4px; }
72
+ .nx-gap-2 { gap: 8px; }
73
+ .nx-gap-3 { gap: 12px; }
74
+ .nx-gap-4 { gap: 16px; }
75
+ .nx-gap-5 { gap: 20px; }
76
+ .nx-gap-6 { gap: 24px; }
77
+ .nx-gap-8 { gap: 32px; }
78
+ .nx-gap-10 { gap: 40px; }
79
+ .nx-gap-12 { gap: 48px; }
80
+ /* Semantic aliases */
81
+ .nx-gap-xs { gap: 4px; }
82
+ .nx-gap-sm { gap: 8px; }
83
+ .nx-gap-md { gap: 16px; }
84
+ .nx-gap-lg { gap: 24px; }
85
+ .nx-gap-xl { gap: 32px; }
86
+ /* Row / Col gap */
87
+ .nx-gap-x-sm { column-gap: 8px; }
88
+ .nx-gap-x-md { column-gap: 16px; }
89
+ .nx-gap-x-lg { column-gap: 24px; }
90
+ .nx-gap-y-sm { row-gap: 8px; }
91
+ .nx-gap-y-md { row-gap: 16px; }
92
+ .nx-gap-y-lg { row-gap: 24px; }
93
+
94
+ /* ─── Padding ────────────────────────────────────────────────────────────── */
95
+ .nx-p-0 { padding: 0; }
96
+ .nx-p-px { padding: 1px; }
97
+ .nx-p-1 { padding: 4px; }
98
+ .nx-p-2 { padding: 8px; }
99
+ .nx-p-3 { padding: 12px; }
100
+ .nx-p-4 { padding: 16px; }
101
+ .nx-p-5 { padding: 20px; }
102
+ .nx-p-6 { padding: 24px; }
103
+ .nx-p-8 { padding: 32px; }
104
+ .nx-p-10 { padding: 40px; }
105
+ .nx-p-12 { padding: 48px; }
106
+ .nx-p-xs { padding: 4px; }
107
+ .nx-p-sm { padding: 8px; }
108
+ .nx-p-md { padding: 16px; }
109
+ .nx-p-lg { padding: 24px; }
110
+ .nx-p-xl { padding: 32px; }
111
+ /* Axes */
112
+ .nx-px-1 { padding-left: 4px; padding-right: 4px; }
113
+ .nx-px-2 { padding-left: 8px; padding-right: 8px; }
114
+ .nx-px-3 { padding-left: 12px; padding-right: 12px; }
115
+ .nx-px-4 { padding-left: 16px; padding-right: 16px; }
116
+ .nx-px-5 { padding-left: 20px; padding-right: 20px; }
117
+ .nx-px-6 { padding-left: 24px; padding-right: 24px; }
118
+ .nx-py-1 { padding-top: 4px; padding-bottom: 4px; }
119
+ .nx-py-2 { padding-top: 8px; padding-bottom: 8px; }
120
+ .nx-py-3 { padding-top: 12px; padding-bottom: 12px; }
121
+ .nx-py-4 { padding-top: 16px; padding-bottom: 16px; }
122
+ .nx-py-5 { padding-top: 20px; padding-bottom: 20px; }
123
+ .nx-py-6 { padding-top: 24px; padding-bottom: 24px; }
124
+ /* Singles */
125
+ .nx-pt-2 { padding-top: 8px; }
126
+ .nx-pt-4 { padding-top: 16px; }
127
+ .nx-pt-6 { padding-top: 24px; }
128
+ .nx-pb-2 { padding-bottom: 8px; }
129
+ .nx-pb-4 { padding-bottom: 16px; }
130
+ .nx-pb-6 { padding-bottom: 24px; }
131
+ .nx-pl-2 { padding-left: 8px; }
132
+ .nx-pl-4 { padding-left: 16px; }
133
+ .nx-pr-2 { padding-right: 8px; }
134
+ .nx-pr-4 { padding-right: 16px; }
135
+
136
+ /* ─── Margin ─────────────────────────────────────────────────────────────── */
137
+ .nx-m-0 { margin: 0; }
138
+ .nx-m-auto { margin: auto; }
139
+ .nx-mx-auto { margin-left: auto; margin-right: auto; }
140
+ .nx-my-auto { margin-top: auto; margin-bottom: auto; }
141
+ .nx-mt-1 { margin-top: 4px; }
142
+ .nx-mt-2 { margin-top: 8px; }
143
+ .nx-mt-3 { margin-top: 12px; }
144
+ .nx-mt-4 { margin-top: 16px; }
145
+ .nx-mt-6 { margin-top: 24px; }
146
+ .nx-mt-8 { margin-top: 32px; }
147
+ .nx-mb-1 { margin-bottom: 4px; }
148
+ .nx-mb-2 { margin-bottom: 8px; }
149
+ .nx-mb-3 { margin-bottom: 12px; }
150
+ .nx-mb-4 { margin-bottom: 16px; }
151
+ .nx-mb-6 { margin-bottom: 24px; }
152
+ .nx-mb-8 { margin-bottom: 32px; }
153
+ .nx-ml-auto { margin-left: auto; }
154
+ .nx-mr-auto { margin-right: auto; }
155
+ .nx-ml-2 { margin-left: 8px; }
156
+ .nx-ml-4 { margin-left: 16px; }
157
+ .nx-mr-2 { margin-right: 8px; }
158
+ .nx-mr-4 { margin-right: 16px; }
159
+
160
+ /* ─── Width / Height ─────────────────────────────────────────────────────── */
161
+ .nx-w-full { width: 100%; }
162
+ .nx-w-screen { width: 100vw; }
163
+ .nx-w-auto { width: auto; }
164
+ .nx-w-fit { width: fit-content; }
165
+ .nx-w-min { width: min-content; }
166
+ .nx-w-max { width: max-content; }
167
+ .nx-w-0 { width: 0; }
168
+ .nx-w-px { width: 1px; }
169
+ .nx-w-4 { width: 16px; }
170
+ .nx-w-5 { width: 20px; }
171
+ .nx-w-6 { width: 24px; }
172
+ .nx-w-8 { width: 32px; }
173
+ .nx-w-10 { width: 40px; }
174
+ .nx-w-12 { width: 48px; }
175
+ .nx-w-16 { width: 64px; }
176
+ .nx-w-20 { width: 80px; }
177
+ .nx-w-24 { width: 96px; }
178
+ .nx-w-32 { width: 128px; }
179
+ .nx-w-48 { width: 192px; }
180
+ .nx-w-64 { width: 256px; }
181
+ .nx-w-80 { width: 320px; }
182
+ .nx-min-w-0 { min-width: 0; }
183
+ .nx-max-w-sm { max-width: 480px; }
184
+ .nx-max-w-md { max-width: 640px; }
185
+ .nx-max-w-lg { max-width: 768px; }
186
+ .nx-max-w-xl { max-width: 1024px; }
187
+ .nx-max-w-2xl { max-width: 1280px; }
188
+ .nx-max-w-full { max-width: 100%; }
189
+
190
+ .nx-h-full { height: 100%; }
191
+ .nx-h-screen { height: 100vh; }
192
+ .nx-h-auto { height: auto; }
193
+ .nx-h-fit { height: fit-content; }
194
+ .nx-h-0 { height: 0; }
195
+ .nx-h-px { height: 1px; }
196
+ .nx-h-4 { height: 16px; }
197
+ .nx-h-5 { height: 20px; }
198
+ .nx-h-6 { height: 24px; }
199
+ .nx-h-8 { height: 32px; }
200
+ .nx-h-10 { height: 40px; }
201
+ .nx-h-12 { height: 48px; }
202
+ .nx-h-16 { height: 64px; }
203
+ .nx-h-20 { height: 80px; }
204
+ .nx-h-screen-half { height: 50vh; }
205
+ .nx-min-h-0 { min-height: 0; }
206
+ .nx-min-h-screen { min-height: 100vh; }
207
+
208
+ /* ─── Position ───────────────────────────────────────────────────────────── */
209
+ .nx-relative { position: relative; }
210
+ .nx-absolute { position: absolute; }
211
+ .nx-fixed { position: fixed; }
212
+ .nx-sticky { position: sticky; }
213
+ .nx-inset-0 { top: 0; right: 0; bottom: 0; left: 0; }
214
+ .nx-inset-x-0 { left: 0; right: 0; }
215
+ .nx-inset-y-0 { top: 0; bottom: 0; }
216
+ .nx-top-0 { top: 0; }
217
+ .nx-right-0 { right: 0; }
218
+ .nx-bottom-0 { bottom: 0; }
219
+ .nx-left-0 { left: 0; }
220
+ .nx-top-auto { top: auto; }
221
+
222
+ /* ─── Z-Index ────────────────────────────────────────────────────────────── */
223
+ .nx-z-0 { z-index: 0; }
224
+ .nx-z-10 { z-index: 10; }
225
+ .nx-z-20 { z-index: 20; }
226
+ .nx-z-30 { z-index: 30; }
227
+ .nx-z-40 { z-index: 40; }
228
+ .nx-z-50 { z-index: 50; }
229
+ .nx-z-modal { z-index: 200; }
230
+ .nx-z-toast { z-index: 300; }
231
+ .nx-z-tooltip { z-index: 400; }
232
+
233
+ /* ─── Overflow ───────────────────────────────────────────────────────────── */
234
+ .nx-overflow-hidden { overflow: hidden; }
235
+ .nx-overflow-auto { overflow: auto; }
236
+ .nx-overflow-scroll { overflow: scroll; }
237
+ .nx-overflow-visible { overflow: visible; }
238
+ .nx-overflow-x-auto { overflow-x: auto; }
239
+ .nx-overflow-y-auto { overflow-y: auto; }
240
+ .nx-overflow-x-hidden { overflow-x: hidden; }
241
+ .nx-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
242
+ .nx-break-all { word-break: break-all; }
243
+ .nx-whitespace-nowrap { white-space: nowrap; }
244
+ .nx-whitespace-pre { white-space: pre; }
245
+ .nx-whitespace-pre-wrap { white-space: pre-wrap; }
246
+
247
+ /* ─── Background Colors ──────────────────────────────────────────────────── */
248
+ .nx-bg-void { background-color: var(--nx-bg-void); }
249
+ .nx-bg-base { background-color: var(--nx-bg-base); }
250
+ .nx-bg-surface { background-color: var(--nx-bg-surface); }
251
+ .nx-bg-elevated { background-color: var(--nx-bg-elevated); }
252
+ .nx-bg-overlay { background-color: var(--nx-bg-overlay); }
253
+ .nx-bg-accent { background-color: var(--nx-accent-dim); }
254
+ .nx-bg-live { background-color: var(--nx-live-dim); }
255
+ .nx-bg-success { background-color: var(--nx-success-dim); }
256
+ .nx-bg-error { background-color: var(--nx-error-dim); }
257
+ .nx-bg-warning { background-color: var(--nx-warning-dim); }
258
+ .nx-bg-transparent{ background-color: transparent; }
259
+
260
+ /* ─── Text Colors ────────────────────────────────────────────────────────── */
261
+ .nx-text-primary { color: var(--nx-text); }
262
+ .nx-text-secondary { color: var(--nx-text-2); }
263
+ .nx-text-dim { color: var(--nx-text-3); }
264
+ .nx-text-ghost { color: var(--nx-text-4); }
265
+ .nx-text-inverse { color: var(--nx-text-inv); }
266
+ .nx-text-accent { color: var(--nx-accent-text, var(--nx-accent)); }
267
+ .nx-text-live { color: var(--nx-live); }
268
+ .nx-text-success { color: var(--nx-success); }
269
+ .nx-text-error { color: var(--nx-error); }
270
+ .nx-text-warning { color: var(--nx-warning); }
271
+ .nx-text-inherit { color: inherit; }
272
+
273
+ /* ─── Border ─────────────────────────────────────────────────────────────── */
274
+ .nx-border { border: 1px solid var(--nx-border); }
275
+ .nx-border-strong { border: 1px solid var(--nx-border-strong); }
276
+ .nx-border-accent { border: 1px solid var(--nx-accent-border); }
277
+ .nx-border-live { border: 1px solid var(--nx-live-border); }
278
+ .nx-border-error { border: 1px solid rgba(239,68,68,0.35); }
279
+ .nx-border-success{ border: 1px solid rgba(34,197,94,0.30); }
280
+ .nx-border-none { border: none; }
281
+ .nx-border-t { border-top: 1px solid var(--nx-border); }
282
+ .nx-border-b { border-bottom: 1px solid var(--nx-border); }
283
+ .nx-border-l { border-left: 1px solid var(--nx-border); }
284
+ .nx-border-r { border-right: 1px solid var(--nx-border); }
285
+
286
+ /* ─── Border Radius ──────────────────────────────────────────────────────── */
287
+ .nx-rounded-none { border-radius: 0; }
288
+ .nx-rounded-xs { border-radius: 2px; }
289
+ .nx-rounded-sm { border-radius: 4px; }
290
+ .nx-rounded { border-radius: 6px; }
291
+ .nx-rounded-md { border-radius: 8px; }
292
+ .nx-rounded-lg { border-radius: 12px; }
293
+ .nx-rounded-xl { border-radius: 16px; }
294
+ .nx-rounded-2xl { border-radius: 20px; }
295
+ .nx-rounded-full { border-radius: 9999px; }
296
+ .nx-rounded-t-lg { border-top-left-radius: 12px; border-top-right-radius: 12px; }
297
+ .nx-rounded-b-lg { border-bottom-left-radius: 12px; border-bottom-right-radius: 12px; }
298
+
299
+ /* ─── Typography ─────────────────────────────────────────────────────────── */
300
+ .nx-font-sans { font-family: var(--nx-font-sans, system-ui, sans-serif); }
301
+ .nx-font-mono { font-family: var(--nx-font-mono, ui-monospace, monospace); }
302
+ .nx-font-display { font-family: var(--nx-ff-display, system-ui, sans-serif); }
303
+
304
+ .nx-text-2xs { font-size: var(--nx-fs-2xs); }
305
+ .nx-text-xs { font-size: var(--nx-fs-xs); }
306
+ .nx-text-sm { font-size: var(--nx-fs-sm); }
307
+ .nx-text-base { font-size: var(--nx-fs-base); }
308
+ .nx-text-md { font-size: var(--nx-fs-md); }
309
+ .nx-text-lg { font-size: var(--nx-fs-lg); }
310
+ .nx-text-xl { font-size: var(--nx-fs-xl); }
311
+ .nx-text-2xl { font-size: var(--nx-fs-2xl); }
312
+ .nx-text-3xl { font-size: var(--nx-fs-3xl); }
313
+ .nx-text-4xl { font-size: var(--nx-fs-4xl); }
314
+ .nx-text-5xl { font-size: var(--nx-fs-5xl); }
315
+
316
+ .nx-font-thin { font-weight: 100; }
317
+ .nx-font-light { font-weight: 300; }
318
+ .nx-font-normal { font-weight: 400; }
319
+ .nx-font-medium { font-weight: 500; }
320
+ .nx-font-semibold { font-weight: 600; }
321
+ .nx-font-bold { font-weight: 700; }
322
+ .nx-font-extrabold { font-weight: 800; }
323
+ .nx-font-black { font-weight: 900; }
324
+
325
+ .nx-leading-none { line-height: 1; }
326
+ .nx-leading-tight { line-height: 1.15; }
327
+ .nx-leading-snug { line-height: 1.3; }
328
+ .nx-leading-normal { line-height: 1.5; }
329
+ .nx-leading-relaxed { line-height: 1.65; }
330
+ .nx-leading-loose { line-height: 1.8; }
331
+
332
+ .nx-tracking-tighter { letter-spacing: -0.04em; }
333
+ .nx-tracking-tight { letter-spacing: -0.02em; }
334
+ .nx-tracking-normal { letter-spacing: 0; }
335
+ .nx-tracking-wide { letter-spacing: 0.04em; }
336
+ .nx-tracking-wider { letter-spacing: 0.08em; }
337
+ .nx-tracking-widest { letter-spacing: 0.16em; }
338
+ .nx-tracking-caps { letter-spacing: 0.06em; }
339
+
340
+ .nx-text-left { text-align: left; }
341
+ .nx-text-center { text-align: center; }
342
+ .nx-text-right { text-align: right; }
343
+ .nx-text-justify { text-align: justify; }
344
+
345
+ .nx-uppercase { text-transform: uppercase; }
346
+ .nx-lowercase { text-transform: lowercase; }
347
+ .nx-capitalize { text-transform: capitalize; }
348
+ .nx-normal-case { text-transform: none; }
349
+
350
+ .nx-underline { text-decoration: underline; }
351
+ .nx-no-underline { text-decoration: none; }
352
+ .nx-line-through { text-decoration: line-through; }
353
+
354
+ .nx-select-none { user-select: none; }
355
+ .nx-select-text { user-select: text; }
356
+ .nx-select-all { user-select: all; }
357
+
358
+ .nx-antialiased { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }
359
+
360
+ /* ─── Opacity ────────────────────────────────────────────────────────────── */
361
+ .nx-opacity-0 { opacity: 0; }
362
+ .nx-opacity-25 { opacity: 0.25; }
363
+ .nx-opacity-50 { opacity: 0.50; }
364
+ .nx-opacity-75 { opacity: 0.75; }
365
+ .nx-opacity-100 { opacity: 1; }
366
+
367
+ /* ─── Shadow / Elevation ─────────────────────────────────────────────────── */
368
+ .nx-shadow-none { box-shadow: none; }
369
+ .nx-shadow-xs { box-shadow: 0 1px 2px rgba(0,0,0,0.40); }
370
+ .nx-shadow-sm { box-shadow: 0 1px 3px rgba(0,0,0,0.50), 0 1px 2px rgba(0,0,0,0.30); }
371
+ .nx-shadow { box-shadow: 0 4px 6px rgba(0,0,0,0.40), 0 2px 4px rgba(0,0,0,0.30); }
372
+ .nx-shadow-lg { box-shadow: 0 10px 15px rgba(0,0,0,0.50), 0 4px 6px rgba(0,0,0,0.30); }
373
+ .nx-shadow-xl { box-shadow: 0 20px 25px rgba(0,0,0,0.55), 0 8px 10px rgba(0,0,0,0.30); }
374
+ .nx-shadow-inner { box-shadow: inset 0 2px 4px rgba(0,0,0,0.40); }
375
+ .nx-ring-accent { box-shadow: 0 0 0 3px rgba(232,144,16,0.30); }
376
+ .nx-ring-live { box-shadow: 0 0 0 3px rgba(15,212,198,0.25); }
377
+ .nx-ring-error { box-shadow: 0 0 0 3px rgba(239,68,68,0.30); }
378
+ .nx-ring-focus { box-shadow: 0 0 0 2px var(--nx-bg-base, #0D1117), 0 0 0 4px var(--nx-accent, #E89010); }
379
+
380
+ /* ─── Cursor ─────────────────────────────────────────────────────────────── */
381
+ .nx-cursor-pointer { cursor: pointer; }
382
+ .nx-cursor-default { cursor: default; }
383
+ .nx-cursor-not-allowed { cursor: not-allowed; }
384
+ .nx-cursor-text { cursor: text; }
385
+ .nx-cursor-move { cursor: move; }
386
+ .nx-pointer-none { pointer-events: none; }
387
+ .nx-pointer-auto { pointer-events: auto; }
388
+
389
+ /* ─── Transitions ────────────────────────────────────────────────────────── */
390
+ .nx-transition { transition: all 200ms ease; }
391
+ .nx-transition-fast { transition: all 150ms ease; }
392
+ .nx-transition-slow { transition: all 300ms ease; }
393
+ .nx-transition-colors{ transition: color 150ms ease, background-color 150ms ease, border-color 150ms ease; }
394
+ .nx-transition-none { transition: none; }
395
+
396
+ /* ─── Animation ──────────────────────────────────────────────────────────── */
397
+ .nx-animate-spin { animation: nx-spin 700ms linear infinite; }
398
+ .nx-animate-pulse { animation: nx-pulse-ring 2s ease-in-out infinite; }
399
+ .nx-animate-fade-in { animation: nx-fade-in 200ms ease forwards; }
400
+ .nx-animate-slide-up { animation: nx-slide-up 200ms ease forwards; }
401
+ .nx-animate-none { animation: none; }
402
+
403
+ /* ─── Misc Utilities ─────────────────────────────────────────────────────── */
404
+ .nx-sr-only {
405
+ position: absolute;
406
+ width: 1px;
407
+ height: 1px;
408
+ padding: 0;
409
+ margin: -1px;
410
+ overflow: hidden;
411
+ clip: rect(0, 0, 0, 0);
412
+ white-space: nowrap;
413
+ border-width: 0;
414
+ }
415
+ .nx-not-sr-only {
416
+ position: static;
417
+ width: auto;
418
+ height: auto;
419
+ padding: 0;
420
+ margin: 0;
421
+ overflow: visible;
422
+ clip: auto;
423
+ white-space: normal;
424
+ }
425
+
426
+ .nx-outline-none { outline: none; }
427
+ .nx-outline-accent { outline: 2px solid var(--nx-accent, #E89010); outline-offset: 2px; }
428
+
429
+ .nx-resize-none { resize: none; }
430
+ .nx-resize { resize: both; }
431
+ .nx-resize-y { resize: vertical; }
432
+ .nx-resize-x { resize: horizontal; }
433
+
434
+ .nx-list-none { list-style: none; padding: 0; margin: 0; }
435
+
436
+ .nx-aspect-square { aspect-ratio: 1 / 1; }
437
+ .nx-aspect-video { aspect-ratio: 16 / 9; }
438
+
439
+ /* ─── Responsive Breakpoints ─────────────────────────────────────────────── */
440
+ /* sm: 640px, md: 768px, lg: 1024px, xl: 1280px, 2xl: 1536px */
441
+ @media (min-width: 640px) {
442
+ .sm\:nx-hidden { display: none; }
443
+ .sm\:nx-block { display: block; }
444
+ .sm\:nx-flex { display: flex; }
445
+ .sm\:nx-grid { display: grid; }
446
+ .sm\:nx-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
447
+ .sm\:nx-flex-row { flex-direction: row; }
448
+ .sm\:nx-flex-col { flex-direction: column; }
449
+ .sm\:nx-gap-md { gap: 16px; }
450
+ .sm\:nx-p-md { padding: 16px; }
451
+ .sm\:nx-text-lg { font-size: var(--nx-fs-lg); }
452
+ }
453
+
454
+ @media (min-width: 768px) {
455
+ .md\:nx-hidden { display: none; }
456
+ .md\:nx-block { display: block; }
457
+ .md\:nx-flex { display: flex; }
458
+ .md\:nx-grid { display: grid; }
459
+ .md\:nx-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
460
+ .md\:nx-grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
461
+ .md\:nx-flex-row { flex-direction: row; }
462
+ .md\:nx-flex-col { flex-direction: column; }
463
+ .md\:nx-gap-lg { gap: 24px; }
464
+ .md\:nx-p-lg { padding: 24px; }
465
+ .md\:nx-text-xl { font-size: var(--nx-fs-xl); }
466
+ }
467
+
468
+ @media (min-width: 1024px) {
469
+ .lg\:nx-hidden { display: none; }
470
+ .lg\:nx-block { display: block; }
471
+ .lg\:nx-flex { display: flex; }
472
+ .lg\:nx-grid { display: grid; }
473
+ .lg\:nx-grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
474
+ .lg\:nx-grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
475
+ .lg\:nx-flex-row { flex-direction: row; }
476
+ .lg\:nx-gap-xl { gap: 32px; }
477
+ .lg\:nx-p-xl { padding: 32px; }
478
+ .lg\:nx-text-2xl { font-size: var(--nx-fs-2xl); }
479
+ }
480
+
481
+ @media (min-width: 1280px) {
482
+ .xl\:nx-grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
483
+ .xl\:nx-grid-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); }
484
+ .xl\:nx-grid-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); }
485
+ }
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@yugnex/nexui",
3
+ "version": "2.0.0",
4
+ "description": "YugNex sovereign UI framework. Zero external dependencies. Web Components core + utility CSS.",
5
+ "license": "LicenseRef-YugNex-Proprietary",
6
+ "author": "YugNex Technology (OPC) Private Limited <legal@yugnex.com>",
7
+ "type": "module",
8
+ "main": "./dist/index.js",
9
+ "module": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "exports": {
12
+ ".": { "import": "./dist/index.js", "types": "./dist/index.d.ts" },
13
+ "./css/nexui.css": "./css/nexui.css",
14
+ "./css/nexui-tokens.css":"./css/nexui-tokens.css",
15
+ "./css/nexui-base.css": "./css/nexui-base.css",
16
+ "./css/nexui-icons.css":"./css/nexui-icons.css",
17
+ "./nexui-utils.css": "./nexui-utils.css",
18
+ "./fonts/*": "./fonts/*",
19
+ "./tokens/colors": { "import": "./dist/tokens/colors.js", "types": "./dist/tokens/colors.d.ts" },
20
+ "./tokens/spacing": { "import": "./dist/tokens/spacing.js", "types": "./dist/tokens/spacing.d.ts" },
21
+ "./tokens/motion": { "import": "./dist/tokens/motion.js", "types": "./dist/tokens/motion.d.ts" },
22
+ "./tokens/shadows": { "import": "./dist/tokens/shadows.js", "types": "./dist/tokens/shadows.d.ts" },
23
+ "./tokens/type": { "import": "./dist/tokens/type.js", "types": "./dist/tokens/type.d.ts" },
24
+ "./core/matrix": { "import": "./dist/core/matrix.js", "types": "./dist/core/matrix.d.ts" },
25
+ "./core/compiler": { "import": "./dist/core/compiler.js", "types": "./dist/core/compiler.d.ts" },
26
+ "./core/cx": { "import": "./dist/core/cx.js", "types": "./dist/core/cx.d.ts" },
27
+ "./assets/typography":{ "import": "./dist/assets/typography.js", "types": "./dist/assets/typography.d.ts" },
28
+ "./assets/geometry": { "import": "./dist/assets/geometry.js", "types": "./dist/assets/geometry.d.ts" },
29
+ "./primitives/panel": { "import": "./dist/primitives/panel.js", "types": "./dist/primitives/panel.d.ts" },
30
+ "./primitives/status-ring": { "import": "./dist/primitives/status-ring.js", "types": "./dist/primitives/status-ring.d.ts" },
31
+ "./primitives/text-stream": { "import": "./dist/primitives/text-stream.js", "types": "./dist/primitives/text-stream.d.ts" },
32
+ "./primitives/button": { "import": "./dist/primitives/button.js", "types": "./dist/primitives/button.d.ts" },
33
+ "./primitives/badge": { "import": "./dist/primitives/badge.js", "types": "./dist/primitives/badge.d.ts" },
34
+ "./primitives/input": { "import": "./dist/primitives/input.js", "types": "./dist/primitives/input.d.ts" },
35
+ "./primitives/avatar": { "import": "./dist/primitives/avatar.js", "types": "./dist/primitives/avatar.d.ts" },
36
+ "./primitives/progress": { "import": "./dist/primitives/progress.js", "types": "./dist/primitives/progress.d.ts" },
37
+ "./primitives/switch": { "import": "./dist/primitives/switch.js", "types": "./dist/primitives/switch.d.ts" },
38
+ "./primitives/checkbox": { "import": "./dist/primitives/checkbox.js", "types": "./dist/primitives/checkbox.d.ts" },
39
+ "./primitives/skeleton": { "import": "./dist/primitives/skeleton.js", "types": "./dist/primitives/skeleton.d.ts" },
40
+ "./primitives/separator": { "import": "./dist/primitives/separator.js", "types": "./dist/primitives/separator.d.ts" },
41
+ "./primitives/spinner": { "import": "./dist/primitives/spinner.js", "types": "./dist/primitives/spinner.d.ts" }
42
+ },
43
+ "files": ["dist", "src", "native", "fonts", "css", "nexui-utils.css", "LICENSE"],
44
+ "scripts": {
45
+ "build": "tsc --project tsconfig.json",
46
+ "build:watch": "tsc --project tsconfig.json --watch",
47
+ "build:wasm": "cd native && wasm-pack build --target web --out-dir ../dist/native",
48
+ "build:fonts": "python3 scripts/build-fonts.py",
49
+ "build:icons": "python3 scripts/build-icons.py",
50
+ "build:all": "python3 scripts/build-fonts.py && python3 scripts/build-icons.py && tsc --project tsconfig.json",
51
+ "typecheck": "tsc --noEmit",
52
+ "clean": "rm -rf dist"
53
+ },
54
+ "devDependencies": { "typescript": "^5.5.0" },
55
+ "dependencies": {},
56
+ "peerDependencies": {},
57
+ "sideEffects": ["./nexui-utils.css", "./css/*.css"]
58
+ }