@tekton-ui/core 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 (254) hide show
  1. package/README.md +758 -0
  2. package/dist/blueprint.d.ts +44 -0
  3. package/dist/blueprint.d.ts.map +1 -0
  4. package/dist/blueprint.js +163 -0
  5. package/dist/blueprint.js.map +1 -0
  6. package/dist/component-schemas.d.ts +78 -0
  7. package/dist/component-schemas.d.ts.map +1 -0
  8. package/dist/component-schemas.js +1037 -0
  9. package/dist/component-schemas.js.map +1 -0
  10. package/dist/css-generator.d.ts +42 -0
  11. package/dist/css-generator.d.ts.map +1 -0
  12. package/dist/css-generator.js +339 -0
  13. package/dist/css-generator.js.map +1 -0
  14. package/dist/icon-library.d.ts +109 -0
  15. package/dist/icon-library.d.ts.map +1 -0
  16. package/dist/icon-library.js +204 -0
  17. package/dist/icon-library.js.map +1 -0
  18. package/dist/index.d.ts +36 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +51 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/layout-css-generator.d.ts +158 -0
  23. package/dist/layout-css-generator.d.ts.map +1 -0
  24. package/dist/layout-css-generator.js +901 -0
  25. package/dist/layout-css-generator.js.map +1 -0
  26. package/dist/layout-resolver.d.ts +92 -0
  27. package/dist/layout-resolver.d.ts.map +1 -0
  28. package/dist/layout-resolver.js +275 -0
  29. package/dist/layout-resolver.js.map +1 -0
  30. package/dist/layout-tokens/index.d.ts +16 -0
  31. package/dist/layout-tokens/index.d.ts.map +1 -0
  32. package/dist/layout-tokens/index.js +16 -0
  33. package/dist/layout-tokens/index.js.map +1 -0
  34. package/dist/layout-tokens/keyboard.d.ts +254 -0
  35. package/dist/layout-tokens/keyboard.d.ts.map +1 -0
  36. package/dist/layout-tokens/keyboard.js +407 -0
  37. package/dist/layout-tokens/keyboard.js.map +1 -0
  38. package/dist/layout-tokens/mobile-shells.d.ts +78 -0
  39. package/dist/layout-tokens/mobile-shells.d.ts.map +1 -0
  40. package/dist/layout-tokens/mobile-shells.js +635 -0
  41. package/dist/layout-tokens/mobile-shells.js.map +1 -0
  42. package/dist/layout-tokens/pages.d.ts +100 -0
  43. package/dist/layout-tokens/pages.d.ts.map +1 -0
  44. package/dist/layout-tokens/pages.js +576 -0
  45. package/dist/layout-tokens/pages.js.map +1 -0
  46. package/dist/layout-tokens/responsive.d.ts +109 -0
  47. package/dist/layout-tokens/responsive.d.ts.map +1 -0
  48. package/dist/layout-tokens/responsive.js +167 -0
  49. package/dist/layout-tokens/responsive.js.map +1 -0
  50. package/dist/layout-tokens/safe-area.d.ts +156 -0
  51. package/dist/layout-tokens/safe-area.d.ts.map +1 -0
  52. package/dist/layout-tokens/safe-area.js +316 -0
  53. package/dist/layout-tokens/safe-area.js.map +1 -0
  54. package/dist/layout-tokens/sections-advanced.d.ts +277 -0
  55. package/dist/layout-tokens/sections-advanced.d.ts.map +1 -0
  56. package/dist/layout-tokens/sections-advanced.js +593 -0
  57. package/dist/layout-tokens/sections-advanced.js.map +1 -0
  58. package/dist/layout-tokens/sections.d.ts +137 -0
  59. package/dist/layout-tokens/sections.d.ts.map +1 -0
  60. package/dist/layout-tokens/sections.js +694 -0
  61. package/dist/layout-tokens/sections.js.map +1 -0
  62. package/dist/layout-tokens/shells.d.ts +77 -0
  63. package/dist/layout-tokens/shells.d.ts.map +1 -0
  64. package/dist/layout-tokens/shells.js +408 -0
  65. package/dist/layout-tokens/shells.js.map +1 -0
  66. package/dist/layout-tokens/touch-target.d.ts +119 -0
  67. package/dist/layout-tokens/touch-target.d.ts.map +1 -0
  68. package/dist/layout-tokens/touch-target.js +156 -0
  69. package/dist/layout-tokens/touch-target.js.map +1 -0
  70. package/dist/layout-tokens/types.d.ts +632 -0
  71. package/dist/layout-tokens/types.d.ts.map +1 -0
  72. package/dist/layout-tokens/types.js +49 -0
  73. package/dist/layout-tokens/types.js.map +1 -0
  74. package/dist/layout-validation.d.ts +1547 -0
  75. package/dist/layout-validation.d.ts.map +1 -0
  76. package/dist/layout-validation.js +628 -0
  77. package/dist/layout-validation.js.map +1 -0
  78. package/dist/render.d.ts +23 -0
  79. package/dist/render.d.ts.map +1 -0
  80. package/dist/render.js +244 -0
  81. package/dist/render.js.map +1 -0
  82. package/dist/schema-validation.d.ts +208 -0
  83. package/dist/schema-validation.d.ts.map +1 -0
  84. package/dist/schema-validation.js +205 -0
  85. package/dist/schema-validation.js.map +1 -0
  86. package/dist/screen-generation/generators/css-in-js-generator.d.ts +82 -0
  87. package/dist/screen-generation/generators/css-in-js-generator.d.ts.map +1 -0
  88. package/dist/screen-generation/generators/css-in-js-generator.js +335 -0
  89. package/dist/screen-generation/generators/css-in-js-generator.js.map +1 -0
  90. package/dist/screen-generation/generators/index.d.ts +13 -0
  91. package/dist/screen-generation/generators/index.d.ts.map +1 -0
  92. package/dist/screen-generation/generators/index.js +32 -0
  93. package/dist/screen-generation/generators/index.js.map +1 -0
  94. package/dist/screen-generation/generators/react-generator.d.ts +100 -0
  95. package/dist/screen-generation/generators/react-generator.d.ts.map +1 -0
  96. package/dist/screen-generation/generators/react-generator.js +379 -0
  97. package/dist/screen-generation/generators/react-generator.js.map +1 -0
  98. package/dist/screen-generation/generators/tailwind-generator.d.ts +105 -0
  99. package/dist/screen-generation/generators/tailwind-generator.d.ts.map +1 -0
  100. package/dist/screen-generation/generators/tailwind-generator.js +355 -0
  101. package/dist/screen-generation/generators/tailwind-generator.js.map +1 -0
  102. package/dist/screen-generation/generators/types.d.ts +136 -0
  103. package/dist/screen-generation/generators/types.d.ts.map +1 -0
  104. package/dist/screen-generation/generators/types.js +18 -0
  105. package/dist/screen-generation/generators/types.js.map +1 -0
  106. package/dist/screen-generation/generators/utils.d.ts +187 -0
  107. package/dist/screen-generation/generators/utils.d.ts.map +1 -0
  108. package/dist/screen-generation/generators/utils.js +312 -0
  109. package/dist/screen-generation/generators/utils.js.map +1 -0
  110. package/dist/screen-generation/index.d.ts +14 -0
  111. package/dist/screen-generation/index.d.ts.map +1 -0
  112. package/dist/screen-generation/index.js +33 -0
  113. package/dist/screen-generation/index.js.map +1 -0
  114. package/dist/screen-generation/resolver/component-resolver.d.ts +157 -0
  115. package/dist/screen-generation/resolver/component-resolver.d.ts.map +1 -0
  116. package/dist/screen-generation/resolver/component-resolver.js +295 -0
  117. package/dist/screen-generation/resolver/component-resolver.js.map +1 -0
  118. package/dist/screen-generation/resolver/index.d.ts +10 -0
  119. package/dist/screen-generation/resolver/index.d.ts.map +1 -0
  120. package/dist/screen-generation/resolver/index.js +46 -0
  121. package/dist/screen-generation/resolver/index.js.map +1 -0
  122. package/dist/screen-generation/resolver/layout-resolver.d.ts +155 -0
  123. package/dist/screen-generation/resolver/layout-resolver.d.ts.map +1 -0
  124. package/dist/screen-generation/resolver/layout-resolver.js +193 -0
  125. package/dist/screen-generation/resolver/layout-resolver.js.map +1 -0
  126. package/dist/screen-generation/resolver/screen-resolver.d.ts +174 -0
  127. package/dist/screen-generation/resolver/screen-resolver.d.ts.map +1 -0
  128. package/dist/screen-generation/resolver/screen-resolver.js +373 -0
  129. package/dist/screen-generation/resolver/screen-resolver.js.map +1 -0
  130. package/dist/screen-generation/resolver/token-resolver.d.ts +170 -0
  131. package/dist/screen-generation/resolver/token-resolver.d.ts.map +1 -0
  132. package/dist/screen-generation/resolver/token-resolver.js +260 -0
  133. package/dist/screen-generation/resolver/token-resolver.js.map +1 -0
  134. package/dist/screen-generation/types.d.ts +116 -0
  135. package/dist/screen-generation/types.d.ts.map +1 -0
  136. package/dist/screen-generation/types.js +33 -0
  137. package/dist/screen-generation/types.js.map +1 -0
  138. package/dist/screen-generation/validators.d.ts +286 -0
  139. package/dist/screen-generation/validators.d.ts.map +1 -0
  140. package/dist/screen-generation/validators.js +323 -0
  141. package/dist/screen-generation/validators.js.map +1 -0
  142. package/dist/screen-templates/__tests__/registry.test.d.ts +6 -0
  143. package/dist/screen-templates/__tests__/registry.test.d.ts.map +1 -0
  144. package/dist/screen-templates/__tests__/registry.test.js +247 -0
  145. package/dist/screen-templates/__tests__/registry.test.js.map +1 -0
  146. package/dist/screen-templates/__tests__/templates.test.d.ts +6 -0
  147. package/dist/screen-templates/__tests__/templates.test.d.ts.map +1 -0
  148. package/dist/screen-templates/__tests__/templates.test.js +179 -0
  149. package/dist/screen-templates/__tests__/templates.test.js.map +1 -0
  150. package/dist/screen-templates/index.d.ts +39 -0
  151. package/dist/screen-templates/index.d.ts.map +1 -0
  152. package/dist/screen-templates/index.js +79 -0
  153. package/dist/screen-templates/index.js.map +1 -0
  154. package/dist/screen-templates/registry.d.ts +177 -0
  155. package/dist/screen-templates/registry.d.ts.map +1 -0
  156. package/dist/screen-templates/registry.js +274 -0
  157. package/dist/screen-templates/registry.js.map +1 -0
  158. package/dist/screen-templates/templates/account/index.d.ts +6 -0
  159. package/dist/screen-templates/templates/account/index.d.ts.map +1 -0
  160. package/dist/screen-templates/templates/account/index.js +6 -0
  161. package/dist/screen-templates/templates/account/index.js.map +1 -0
  162. package/dist/screen-templates/templates/account/profile.d.ts +23 -0
  163. package/dist/screen-templates/templates/account/profile.d.ts.map +1 -0
  164. package/dist/screen-templates/templates/account/profile.js +249 -0
  165. package/dist/screen-templates/templates/account/profile.js.map +1 -0
  166. package/dist/screen-templates/templates/auth/forgot-password.d.ts +23 -0
  167. package/dist/screen-templates/templates/auth/forgot-password.d.ts.map +1 -0
  168. package/dist/screen-templates/templates/auth/forgot-password.js +203 -0
  169. package/dist/screen-templates/templates/auth/forgot-password.js.map +1 -0
  170. package/dist/screen-templates/templates/auth/index.d.ts +9 -0
  171. package/dist/screen-templates/templates/auth/index.d.ts.map +1 -0
  172. package/dist/screen-templates/templates/auth/index.js +9 -0
  173. package/dist/screen-templates/templates/auth/index.js.map +1 -0
  174. package/dist/screen-templates/templates/auth/login.d.ts +24 -0
  175. package/dist/screen-templates/templates/auth/login.d.ts.map +1 -0
  176. package/dist/screen-templates/templates/auth/login.js +254 -0
  177. package/dist/screen-templates/templates/auth/login.js.map +1 -0
  178. package/dist/screen-templates/templates/auth/signup.d.ts +24 -0
  179. package/dist/screen-templates/templates/auth/signup.d.ts.map +1 -0
  180. package/dist/screen-templates/templates/auth/signup.js +315 -0
  181. package/dist/screen-templates/templates/auth/signup.js.map +1 -0
  182. package/dist/screen-templates/templates/auth/verification.d.ts +23 -0
  183. package/dist/screen-templates/templates/auth/verification.d.ts.map +1 -0
  184. package/dist/screen-templates/templates/auth/verification.js +239 -0
  185. package/dist/screen-templates/templates/auth/verification.js.map +1 -0
  186. package/dist/screen-templates/templates/feedback/confirmation.d.ts +9 -0
  187. package/dist/screen-templates/templates/feedback/confirmation.d.ts.map +1 -0
  188. package/dist/screen-templates/templates/feedback/confirmation.js +107 -0
  189. package/dist/screen-templates/templates/feedback/confirmation.js.map +1 -0
  190. package/dist/screen-templates/templates/feedback/empty.d.ts +9 -0
  191. package/dist/screen-templates/templates/feedback/empty.d.ts.map +1 -0
  192. package/dist/screen-templates/templates/feedback/empty.js +90 -0
  193. package/dist/screen-templates/templates/feedback/empty.js.map +1 -0
  194. package/dist/screen-templates/templates/feedback/error.d.ts +9 -0
  195. package/dist/screen-templates/templates/feedback/error.d.ts.map +1 -0
  196. package/dist/screen-templates/templates/feedback/error.js +99 -0
  197. package/dist/screen-templates/templates/feedback/error.js.map +1 -0
  198. package/dist/screen-templates/templates/feedback/index.d.ts +10 -0
  199. package/dist/screen-templates/templates/feedback/index.d.ts.map +1 -0
  200. package/dist/screen-templates/templates/feedback/index.js +10 -0
  201. package/dist/screen-templates/templates/feedback/index.js.map +1 -0
  202. package/dist/screen-templates/templates/feedback/loading.d.ts +9 -0
  203. package/dist/screen-templates/templates/feedback/loading.d.ts.map +1 -0
  204. package/dist/screen-templates/templates/feedback/loading.js +77 -0
  205. package/dist/screen-templates/templates/feedback/loading.js.map +1 -0
  206. package/dist/screen-templates/templates/feedback/success.d.ts +9 -0
  207. package/dist/screen-templates/templates/feedback/success.d.ts.map +1 -0
  208. package/dist/screen-templates/templates/feedback/success.js +99 -0
  209. package/dist/screen-templates/templates/feedback/success.js.map +1 -0
  210. package/dist/screen-templates/templates/home/index.d.ts +6 -0
  211. package/dist/screen-templates/templates/home/index.d.ts.map +1 -0
  212. package/dist/screen-templates/templates/home/index.js +6 -0
  213. package/dist/screen-templates/templates/home/index.js.map +1 -0
  214. package/dist/screen-templates/templates/home/landing.d.ts +24 -0
  215. package/dist/screen-templates/templates/home/landing.d.ts.map +1 -0
  216. package/dist/screen-templates/templates/home/landing.js +197 -0
  217. package/dist/screen-templates/templates/home/landing.js.map +1 -0
  218. package/dist/screen-templates/templates/settings/index.d.ts +6 -0
  219. package/dist/screen-templates/templates/settings/index.d.ts.map +1 -0
  220. package/dist/screen-templates/templates/settings/index.js +6 -0
  221. package/dist/screen-templates/templates/settings/index.js.map +1 -0
  222. package/dist/screen-templates/templates/settings/preferences.d.ts +24 -0
  223. package/dist/screen-templates/templates/settings/preferences.d.ts.map +1 -0
  224. package/dist/screen-templates/templates/settings/preferences.js +265 -0
  225. package/dist/screen-templates/templates/settings/preferences.js.map +1 -0
  226. package/dist/screen-templates/types.d.ts +229 -0
  227. package/dist/screen-templates/types.d.ts.map +1 -0
  228. package/dist/screen-templates/types.js +7 -0
  229. package/dist/screen-templates/types.js.map +1 -0
  230. package/dist/theme-v2.d.ts +228 -0
  231. package/dist/theme-v2.d.ts.map +1 -0
  232. package/dist/theme-v2.js +158 -0
  233. package/dist/theme-v2.js.map +1 -0
  234. package/dist/theme.d.ts +60 -0
  235. package/dist/theme.d.ts.map +1 -0
  236. package/dist/theme.js +76 -0
  237. package/dist/theme.js.map +1 -0
  238. package/dist/token-resolver.d.ts +69 -0
  239. package/dist/token-resolver.d.ts.map +1 -0
  240. package/dist/token-resolver.js +122 -0
  241. package/dist/token-resolver.js.map +1 -0
  242. package/dist/token-validation.d.ts +432 -0
  243. package/dist/token-validation.d.ts.map +1 -0
  244. package/dist/token-validation.js +140 -0
  245. package/dist/token-validation.js.map +1 -0
  246. package/dist/tokens.d.ts +158 -0
  247. package/dist/tokens.d.ts.map +1 -0
  248. package/dist/tokens.js +10 -0
  249. package/dist/tokens.js.map +1 -0
  250. package/dist/types.d.ts +77 -0
  251. package/dist/types.d.ts.map +1 -0
  252. package/dist/types.js +7 -0
  253. package/dist/types.js.map +1 -0
  254. package/package.json +53 -0
@@ -0,0 +1,316 @@
1
+ /**
2
+ * @tekton-ui/core - SafeArea Utilities
3
+ * SafeArea calculation and application utilities for mobile platforms
4
+ * [SPEC-LAYOUT-004] [MILESTONE-3]
5
+ */
6
+ import { SAFE_AREA_DEFAULTS } from './types.js';
7
+ // ============================================================================
8
+ // Device Detection
9
+ // ============================================================================
10
+ /**
11
+ * Detect device type for SafeArea defaults
12
+ *
13
+ * Uses screen dimensions and platform APIs to determine device classification.
14
+ * Detection strategy:
15
+ * - iOS: Checks screen dimensions and model via window.navigator
16
+ * - Android: Checks navigation mode via WindowInsets API
17
+ * - Web: Returns 'unknown'
18
+ *
19
+ * @returns DeviceType enum value
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const device = detectDeviceType();
24
+ * if (device === 'ios-dynamic-island') {
25
+ * console.log('Using 59pt top safe area');
26
+ * }
27
+ * ```
28
+ */
29
+ export function detectDeviceType() {
30
+ // Web environment - no safe area needed
31
+ if (typeof window === 'undefined') {
32
+ return 'unknown';
33
+ }
34
+ // Check platform
35
+ const platform = getPlatform();
36
+ if (platform === 'ios') {
37
+ return detectiOSDeviceType();
38
+ }
39
+ else if (platform === 'android') {
40
+ return detectAndroidDeviceType();
41
+ }
42
+ // Default to unknown for web and other platforms
43
+ return 'unknown';
44
+ }
45
+ /**
46
+ * Get current platform
47
+ * @internal
48
+ */
49
+ function getPlatform() {
50
+ if (typeof navigator === 'undefined') {
51
+ return 'web';
52
+ }
53
+ const userAgent = navigator.userAgent || navigator.vendor;
54
+ if (/iPad|iPhone|iPod/.test(userAgent)) {
55
+ return 'ios';
56
+ }
57
+ else if (/android/i.test(userAgent)) {
58
+ return 'android';
59
+ }
60
+ return 'web';
61
+ }
62
+ /**
63
+ * Detect iOS device type based on screen dimensions
64
+ * @internal
65
+ */
66
+ function detectiOSDeviceType() {
67
+ if (typeof window === 'undefined') {
68
+ return 'ios-standard';
69
+ }
70
+ const width = window.screen.width;
71
+ const height = window.screen.height;
72
+ // iPhone 14 Pro / 15 Pro / 16 Pro dimensions (Dynamic Island)
73
+ // 393×852 @3x = 1179×2556
74
+ const dynamicIslandModels = [
75
+ { width: 393, height: 852 }, // iPhone 14 Pro, 15 Pro
76
+ { width: 430, height: 932 }, // iPhone 14 Pro Max, 15 Pro Max, 16 Pro Max
77
+ ];
78
+ for (const model of dynamicIslandModels) {
79
+ if ((width === model.width && height === model.height) ||
80
+ (width === model.height && height === model.width)) {
81
+ return 'ios-dynamic-island';
82
+ }
83
+ }
84
+ // iPhone with notch (X, XS, XR, 11, 12, 13 series)
85
+ // 375×812, 390×844, 414×896, 428×926
86
+ const notchModels = [
87
+ { width: 375, height: 812 }, // iPhone X, XS, 11 Pro, 12 mini, 13 mini
88
+ { width: 390, height: 844 }, // iPhone 12, 12 Pro, 13, 13 Pro, 14
89
+ { width: 414, height: 896 }, // iPhone XR, 11, 11 Pro Max, XS Max
90
+ { width: 428, height: 926 }, // iPhone 12 Pro Max, 13 Pro Max, 14 Plus
91
+ ];
92
+ for (const model of notchModels) {
93
+ if ((width === model.width && height === model.height) ||
94
+ (width === model.height && height === model.width)) {
95
+ return 'ios-notch';
96
+ }
97
+ }
98
+ // Standard iOS devices (SE, 8, 7, 6s) - no notch or Dynamic Island
99
+ return 'ios-standard';
100
+ }
101
+ /**
102
+ * Detect Android device navigation type
103
+ * @internal
104
+ */
105
+ function detectAndroidDeviceType() {
106
+ // In React Native, this would check WindowInsets
107
+ // For web, we default to gesture navigation (more common on modern devices)
108
+ if (typeof window === 'undefined') {
109
+ return 'android-gesture';
110
+ }
111
+ // Check if running in React Native environment
112
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
113
+ const isReactNative = typeof window.ReactNativeWebView !== 'undefined';
114
+ if (isReactNative) {
115
+ // In React Native, we could check navigation bar height from WindowInsets
116
+ // For now, default to gesture navigation (24dp)
117
+ return 'android-gesture';
118
+ }
119
+ // Web Android defaults to gesture navigation
120
+ return 'android-gesture';
121
+ }
122
+ // ============================================================================
123
+ // Safe Area Calculation
124
+ // ============================================================================
125
+ /**
126
+ * Get safe area top inset based on device type
127
+ *
128
+ * @returns Top inset in points
129
+ *
130
+ * @example
131
+ * ```typescript
132
+ * const topInset = getSafeAreaTop();
133
+ * // Returns 59 on iPhone 14 Pro (Dynamic Island)
134
+ * // Returns 44 on iPhone 13 (Notch)
135
+ * // Returns 20 on iPhone SE (Standard)
136
+ * ```
137
+ */
138
+ export function getSafeAreaTop() {
139
+ const device = detectDeviceType();
140
+ switch (device) {
141
+ case 'ios-dynamic-island':
142
+ return SAFE_AREA_DEFAULTS.DYNAMIC_ISLAND;
143
+ case 'ios-notch':
144
+ return SAFE_AREA_DEFAULTS.NOTCH;
145
+ case 'ios-standard':
146
+ return SAFE_AREA_DEFAULTS.STATUS_BAR;
147
+ default:
148
+ return 0;
149
+ }
150
+ }
151
+ /**
152
+ * Get safe area bottom inset based on device type
153
+ *
154
+ * @returns Bottom inset in points
155
+ *
156
+ * @example
157
+ * ```typescript
158
+ * const bottomInset = getSafeAreaBottom();
159
+ * // Returns 34 on iPhone with Face ID (home indicator)
160
+ * // Returns 24 on Android with gesture navigation
161
+ * // Returns 48 on Android with 3-button navigation
162
+ * ```
163
+ */
164
+ export function getSafeAreaBottom() {
165
+ const device = detectDeviceType();
166
+ switch (device) {
167
+ case 'ios-dynamic-island':
168
+ case 'ios-notch':
169
+ return SAFE_AREA_DEFAULTS.HOME_INDICATOR;
170
+ case 'android-gesture':
171
+ return 24; // Android gesture navigation bar
172
+ case 'android-button':
173
+ return 48; // Android 3-button navigation
174
+ default:
175
+ return 0;
176
+ }
177
+ }
178
+ /**
179
+ * Get safe area insets for the current device
180
+ *
181
+ * Detection strategy:
182
+ * 1. In browser/web context: Returns zero insets
183
+ * 2. In React Native with react-native-safe-area-context: Uses library
184
+ * 3. Fallback: Uses detectDeviceType() and applies defaults
185
+ *
186
+ * @returns SafeAreaInsets object with top, bottom, left, right values in points
187
+ *
188
+ * @example
189
+ * ```typescript
190
+ * const insets = getSafeAreaInsets();
191
+ * console.log(insets.top); // 44 on iPhone 14, 59 on iPhone 14 Pro
192
+ * console.log(insets.bottom); // 34 on Face ID iPhones, 24 on Android gesture
193
+ * ```
194
+ */
195
+ export function getSafeAreaInsets() {
196
+ // Web environment - no safe area
197
+ if (typeof window === 'undefined') {
198
+ return { top: 0, bottom: 0, left: 0, right: 0 };
199
+ }
200
+ // Check if running in React Native with safe area context
201
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
202
+ const global = window;
203
+ if (global.ReactNativeWebView && global.__SAFE_AREA_INSETS__) {
204
+ // Use provided safe area insets from React Native
205
+ return global.__SAFE_AREA_INSETS__;
206
+ }
207
+ // Fallback to device type detection
208
+ const top = getSafeAreaTop();
209
+ const bottom = getSafeAreaBottom();
210
+ return {
211
+ top,
212
+ bottom,
213
+ left: 0, // Horizontal insets typically handled in landscape
214
+ right: 0,
215
+ };
216
+ }
217
+ // ============================================================================
218
+ // Safe Area Application
219
+ // ============================================================================
220
+ /**
221
+ * Apply safe area configuration to a layout
222
+ *
223
+ * Modifies layout padding based on safe area configuration and edges.
224
+ * Respects the edges configuration to determine which sides receive safe area padding.
225
+ *
226
+ * @param layout - Layout object to modify (must have padding property)
227
+ * @param config - SafeArea configuration from ShellToken
228
+ * @returns Modified layout with safe area applied
229
+ *
230
+ * @example
231
+ * ```typescript
232
+ * const layout = { padding: { top: 0, bottom: 0, left: 0, right: 0 } };
233
+ * const safeLayout = applySafeAreaToLayout(layout, shellConfig.safeArea);
234
+ * // Result: { padding: { top: 44, bottom: 34, left: 0, right: 0 } }
235
+ * ```
236
+ *
237
+ * @example
238
+ * ```typescript
239
+ * // Only apply safe area to top edge
240
+ * const config = {
241
+ * edges: { top: true, bottom: false, horizontal: false },
242
+ * // ... other config
243
+ * };
244
+ * const layout = applySafeAreaToLayout(baseLayout, config);
245
+ * // Result: Only top padding is modified
246
+ * ```
247
+ */
248
+ export function applySafeAreaToLayout(layout, config) {
249
+ // Get current safe area insets
250
+ const insets = getSafeAreaInsets();
251
+ // Initialize padding if not present
252
+ if (!layout.padding) {
253
+ layout.padding = { top: 0, bottom: 0, left: 0, right: 0 };
254
+ }
255
+ // Ensure all padding properties exist
256
+ const padding = layout.padding;
257
+ if (padding.top === undefined) {
258
+ padding.top = 0;
259
+ }
260
+ if (padding.bottom === undefined) {
261
+ padding.bottom = 0;
262
+ }
263
+ if (padding.left === undefined) {
264
+ padding.left = 0;
265
+ }
266
+ if (padding.right === undefined) {
267
+ padding.right = 0;
268
+ }
269
+ // Apply safe area based on edges configuration
270
+ if (config.edges.top) {
271
+ padding.top += insets.top;
272
+ }
273
+ if (config.edges.bottom) {
274
+ padding.bottom += insets.bottom;
275
+ }
276
+ if (config.edges.horizontal) {
277
+ padding.left += insets.left;
278
+ padding.right += insets.right;
279
+ }
280
+ return layout;
281
+ }
282
+ // ============================================================================
283
+ // React Native Hook (Placeholder)
284
+ // ============================================================================
285
+ /**
286
+ * React Native hook to get safe area insets
287
+ *
288
+ * This is a placeholder implementation that wraps getSafeAreaInsets().
289
+ * In a real React Native environment, this should use the
290
+ * react-native-safe-area-context library's useSafeAreaInsets() hook.
291
+ *
292
+ * @returns SafeAreaInsets from react-native-safe-area-context or fallback
293
+ *
294
+ * @example
295
+ * ```typescript
296
+ * function MyComponent() {
297
+ * const insets = useSafeArea();
298
+ * return <View style={{ paddingTop: insets.top }} />;
299
+ * }
300
+ * ```
301
+ *
302
+ * @see https://github.com/th3rdwave/react-native-safe-area-context
303
+ *
304
+ * @remarks
305
+ * For production use, replace this with:
306
+ * ```typescript
307
+ * import { useSafeAreaInsets } from 'react-native-safe-area-context';
308
+ * export const useSafeArea = useSafeAreaInsets;
309
+ * ```
310
+ */
311
+ export function useSafeArea() {
312
+ // Placeholder implementation - returns static insets
313
+ // In a real React environment, this would use React hooks
314
+ return getSafeAreaInsets();
315
+ }
316
+ //# sourceMappingURL=safe-area.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"safe-area.js","sourceRoot":"","sources":["../../src/layout-tokens/safe-area.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,277 @@
1
+ /**
2
+ * @tekton-ui/core - Advanced Section Pattern Token Definitions
3
+ * HIGH Priority Advanced Layout Patterns for SPEC-LAYOUT-005
4
+ *
5
+ * Implements 4 advanced section patterns:
6
+ * 1. section.masonry - Pinterest-style waterfall grid
7
+ * 2. section.sticky-header - Header that sticks to viewport top
8
+ * 3. section.sticky-footer - Footer that sticks to viewport bottom
9
+ * 4. section.collapsible-sidebar - Sidebar with expand/collapse toggle
10
+ *
11
+ * [SPEC-LAYOUT-005] [PHASE-1]
12
+ */
13
+ import type { AdvancedSectionPatternToken, MasonrySectionCSS, StickySectionCSS, CollapsibleSectionCSS, SectionPatternToken } from './types.js';
14
+ /**
15
+ * Pinterest-style waterfall grid layout using CSS columns
16
+ *
17
+ * Uses CSS multi-column layout for broad browser support (IE10+).
18
+ * Items flow vertically within columns, creating the classic masonry effect.
19
+ *
20
+ * Responsive behavior:
21
+ * - default (mobile): 2 columns
22
+ * - sm: 2 columns
23
+ * - md: 3 columns
24
+ * - lg: 4 columns
25
+ * - xl: 5 columns
26
+ * - 2xl: 6 columns
27
+ *
28
+ * @example
29
+ * ```tsx
30
+ * // React usage
31
+ * <div style={{ ...getMasonryStyles(breakpoint) }}>
32
+ * {items.map(item => (
33
+ * <div key={item.id} style={{ breakInside: 'avoid' }}>
34
+ * {item.content}
35
+ * </div>
36
+ * ))}
37
+ * </div>
38
+ * ```
39
+ */
40
+ export declare const SECTION_MASONRY: AdvancedSectionPatternToken;
41
+ /**
42
+ * Header that sticks to the viewport top during scroll
43
+ *
44
+ * Uses CSS `position: sticky` for native scroll-aware behavior.
45
+ * Includes shadow and z-index for proper layering when stuck.
46
+ *
47
+ * Features:
48
+ * - Sticks to top of viewport (top: 0)
49
+ * - High z-index (100) to stay above content
50
+ * - Optional shadow when stuck for visual separation
51
+ * - Full-width with transparent background option
52
+ *
53
+ * Responsive behavior:
54
+ * - Consistent sticky behavior across all breakpoints
55
+ * - Padding adjusts for different screen sizes
56
+ *
57
+ * @example
58
+ * ```tsx
59
+ * // React usage with intersection observer for stuck state
60
+ * const [isStuck, setIsStuck] = useState(false);
61
+ *
62
+ * <header style={{
63
+ * position: 'sticky',
64
+ * top: 0,
65
+ * zIndex: 100,
66
+ * boxShadow: isStuck ? 'var(--shadow-md)' : 'none'
67
+ * }}>
68
+ * {children}
69
+ * </header>
70
+ * ```
71
+ */
72
+ export declare const SECTION_STICKY_HEADER: AdvancedSectionPatternToken;
73
+ /**
74
+ * Footer that sticks to the viewport bottom during scroll
75
+ *
76
+ * Uses CSS `position: sticky` with `bottom: 0` for bottom-stuck behavior.
77
+ * Ideal for action bars, navigation bars, or persistent CTAs.
78
+ *
79
+ * Features:
80
+ * - Sticks to bottom of viewport (bottom: 0)
81
+ * - High z-index (100) to stay above content
82
+ * - Top shadow for visual separation from content
83
+ * - Safe area padding support for mobile devices
84
+ *
85
+ * Responsive behavior:
86
+ * - Consistent sticky behavior across all breakpoints
87
+ * - Padding adjusts for different screen sizes
88
+ * - Mobile: considers safe area for home indicator
89
+ *
90
+ * @example
91
+ * ```tsx
92
+ * // React usage for action bar
93
+ * <footer style={{
94
+ * position: 'sticky',
95
+ * bottom: 0,
96
+ * zIndex: 100,
97
+ * paddingBottom: 'env(safe-area-inset-bottom)'
98
+ * }}>
99
+ * <Button>Save</Button>
100
+ * <Button>Cancel</Button>
101
+ * </footer>
102
+ * ```
103
+ */
104
+ export declare const SECTION_STICKY_FOOTER: AdvancedSectionPatternToken;
105
+ /**
106
+ * Sidebar with expand/collapse toggle capability
107
+ *
108
+ * Provides a collapsible navigation sidebar with smooth CSS transitions.
109
+ * Supports both icon-only collapsed state and full-width expanded state.
110
+ *
111
+ * Features:
112
+ * - Expanded width: 256px (atomic.spacing.64)
113
+ * - Collapsed width: 64px (atomic.spacing.16)
114
+ * - Smooth 200ms transition animation
115
+ * - Icon-only mode when collapsed
116
+ * - Full content when expanded
117
+ *
118
+ * Responsive behavior:
119
+ * - default/sm: Hidden by default (overlay mode recommended)
120
+ * - md: Collapsed by default
121
+ * - lg+: Expanded by default
122
+ *
123
+ * @example
124
+ * ```tsx
125
+ * // React usage with state management
126
+ * const [isCollapsed, setIsCollapsed] = useState(false);
127
+ *
128
+ * <aside style={{
129
+ * width: isCollapsed ? '64px' : '256px',
130
+ * transition: 'width 200ms ease-in-out',
131
+ * overflow: 'hidden'
132
+ * }}>
133
+ * <button onClick={() => setIsCollapsed(!isCollapsed)}>
134
+ * {isCollapsed ? <ChevronRight /> : <ChevronLeft />}
135
+ * </button>
136
+ * <nav>
137
+ * {menuItems.map(item => (
138
+ * <MenuItem
139
+ * key={item.id}
140
+ * icon={item.icon}
141
+ * label={isCollapsed ? '' : item.label}
142
+ * />
143
+ * ))}
144
+ * </nav>
145
+ * </aside>
146
+ * ```
147
+ */
148
+ export declare const SECTION_COLLAPSIBLE_SIDEBAR: AdvancedSectionPatternToken;
149
+ /**
150
+ * Get an advanced section pattern token by its ID
151
+ *
152
+ * @param patternId - Advanced section pattern token ID (e.g., "section.masonry")
153
+ * @returns AdvancedSectionPatternToken if found, undefined otherwise
154
+ *
155
+ * @example
156
+ * ```typescript
157
+ * const masonry = getAdvancedSectionPatternToken('section.masonry');
158
+ * if (masonry) {
159
+ * console.log(masonry.description);
160
+ * // "Pinterest-style waterfall grid using CSS columns for broad browser support"
161
+ * }
162
+ * ```
163
+ */
164
+ export declare function getAdvancedSectionPatternToken(patternId: string): AdvancedSectionPatternToken | undefined;
165
+ /**
166
+ * Get all available advanced section pattern tokens
167
+ *
168
+ * @returns Array of all AdvancedSectionPatternTokens
169
+ *
170
+ * @example
171
+ * ```typescript
172
+ * const allAdvanced = getAllAdvancedSectionPatternTokens();
173
+ * console.log(`Available advanced sections: ${allAdvanced.length}`);
174
+ * // "Available advanced sections: 4"
175
+ *
176
+ * allAdvanced.forEach(token => {
177
+ * console.log(`${token.id}: ${token.type}`);
178
+ * });
179
+ * ```
180
+ */
181
+ export declare function getAllAdvancedSectionPatternTokens(): AdvancedSectionPatternToken[];
182
+ /**
183
+ * Get advanced section pattern tokens filtered by type
184
+ *
185
+ * @param type - Section type ('masonry', 'sticky', or 'collapsible')
186
+ * @returns Array of AdvancedSectionPatternTokens with the specified type
187
+ *
188
+ * @example
189
+ * ```typescript
190
+ * const stickyTokens = getAdvancedSectionsByType('sticky');
191
+ * console.log(`Sticky sections: ${stickyTokens.length}`);
192
+ * // "Sticky sections: 2" (header and footer)
193
+ * ```
194
+ */
195
+ export declare function getAdvancedSectionsByType(type: 'masonry' | 'sticky' | 'collapsible'): AdvancedSectionPatternToken[];
196
+ /**
197
+ * Get CSS properties for an advanced section pattern at a specific breakpoint
198
+ *
199
+ * @param patternId - Advanced section pattern token ID
200
+ * @param breakpoint - Breakpoint key ('default', 'sm', 'md', 'lg', 'xl', '2xl')
201
+ * @returns CSS properties for the specified breakpoint, or undefined if not found
202
+ *
203
+ * @example
204
+ * ```typescript
205
+ * const masonryMd = getAdvancedSectionCSS('section.masonry', 'md');
206
+ * if (masonryMd) {
207
+ * console.log(`Columns at md: ${masonryMd.columnCount}`);
208
+ * // "Columns at md: 3"
209
+ * }
210
+ * ```
211
+ */
212
+ export declare function getAdvancedSectionCSS(patternId: string, breakpoint?: 'default' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'): (MasonrySectionCSS | StickySectionCSS | CollapsibleSectionCSS) | undefined;
213
+ /**
214
+ * Get state-specific CSS for collapsible or sticky patterns
215
+ *
216
+ * @param patternId - Advanced section pattern token ID
217
+ * @param state - State name ('default', 'collapsed', 'stuck')
218
+ * @returns CSS properties for the specified state, or undefined if not found
219
+ *
220
+ * @example
221
+ * ```typescript
222
+ * const collapsedCSS = getAdvancedSectionStateCSS('section.collapsible-sidebar', 'collapsed');
223
+ * if (collapsedCSS) {
224
+ * console.log(`Collapsed width: ${collapsedCSS.width}`);
225
+ * // "Collapsed width: atomic.spacing.16"
226
+ * }
227
+ *
228
+ * const stuckCSS = getAdvancedSectionStateCSS('section.sticky-header', 'stuck');
229
+ * if (stuckCSS) {
230
+ * console.log(`Shadow when stuck: ${stuckCSS.boxShadow}`);
231
+ * // "Shadow when stuck: atomic.shadow.md"
232
+ * }
233
+ * ```
234
+ */
235
+ export declare function getAdvancedSectionStateCSS(patternId: string, state: 'default' | 'collapsed' | 'stuck'): Partial<MasonrySectionCSS | StickySectionCSS | CollapsibleSectionCSS> | undefined;
236
+ /**
237
+ * Check if a pattern ID is an advanced section pattern
238
+ *
239
+ * @param patternId - Pattern ID to check
240
+ * @returns true if the pattern is an advanced section pattern
241
+ *
242
+ * @example
243
+ * ```typescript
244
+ * isAdvancedSectionPattern('section.masonry'); // true
245
+ * isAdvancedSectionPattern('section.grid-3'); // false
246
+ * ```
247
+ */
248
+ export declare function isAdvancedSectionPattern(patternId: string): boolean;
249
+ /**
250
+ * Get all advanced section pattern IDs
251
+ *
252
+ * @returns Array of all advanced section pattern IDs
253
+ *
254
+ * @example
255
+ * ```typescript
256
+ * const ids = getAdvancedSectionPatternIds();
257
+ * // ['section.masonry', 'section.sticky-header', 'section.sticky-footer', 'section.collapsible-sidebar']
258
+ * ```
259
+ */
260
+ export declare function getAdvancedSectionPatternIds(): string[];
261
+ /**
262
+ * Combine base section patterns with advanced section patterns
263
+ * Useful for getting a complete list of all available section patterns
264
+ *
265
+ * @param baseSections - Array of base SectionPatternTokens from sections.ts
266
+ * @returns Combined array of all section pattern tokens
267
+ *
268
+ * @example
269
+ * ```typescript
270
+ * import { getAllSectionPatternTokens } from './sections.js';
271
+ *
272
+ * const allSections = combineWithBaseSections(getAllSectionPatternTokens());
273
+ * console.log(`Total sections: ${allSections.length}`);
274
+ * ```
275
+ */
276
+ export declare function combineWithBaseSections(baseSections: SectionPatternToken[]): (SectionPatternToken | AdvancedSectionPatternToken)[];
277
+ //# sourceMappingURL=sections-advanced.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sections-advanced.d.ts","sourceRoot":"","sources":["../../src/layout-tokens/sections-advanced.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,2BAA2B,EAC3B,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AAOpB;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,eAAe,EAAE,2BAgD7B,CAAC;AAMF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,qBAAqB,EAAE,2BA+DnC,CAAC;AAMF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,eAAO,MAAM,qBAAqB,EAAE,2BAqEnC,CAAC;AAMF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,2BAA2B,EAAE,2BAyEzC,CAAC;AAqBF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,8BAA8B,CAC5C,SAAS,EAAE,MAAM,GAChB,2BAA2B,GAAG,SAAS,CAEzC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kCAAkC,IAAI,2BAA2B,EAAE,CAElF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,aAAa,GACzC,2BAA2B,EAAE,CAE/B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,UAAU,GAAE,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAiB,GACpE,CAAC,iBAAiB,GAAG,gBAAgB,GAAG,qBAAqB,CAAC,GAAG,SAAS,CAsB5E;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,GACvC,OAAO,CAAC,iBAAiB,GAAG,gBAAgB,GAAG,qBAAqB,CAAC,GAAG,SAAS,CAOnF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEnE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,EAAE,CAEvD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,mBAAmB,EAAE,GAClC,CAAC,mBAAmB,GAAG,2BAA2B,CAAC,EAAE,CAEvD"}