ds-one 0.2.5-alpha.9 → 0.3.0-alpha.1

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 (209) hide show
  1. package/DS1/0-face/device.ts +138 -0
  2. package/DS1/0-face/scaling.ts +152 -0
  3. package/DS1/1-root/fonts/Iosevka-Regular.woff2 +0 -0
  4. package/DS1/1-root/one.css +124 -77
  5. package/DS1/2-core/ds-banner.ts +120 -1
  6. package/DS1/2-core/ds-button.ts +16 -93
  7. package/DS1/2-core/ds-card.ts +137 -0
  8. package/DS1/2-core/ds-cycle.ts +77 -179
  9. package/DS1/2-core/ds-date.ts +3 -10
  10. package/DS1/2-core/ds-gap.ts +38 -0
  11. package/DS1/2-core/ds-icon.ts +6 -35
  12. package/DS1/2-core/ds-input.ts +306 -1
  13. package/DS1/2-core/ds-pagedots.ts +52 -0
  14. package/DS1/2-core/ds-text.ts +55 -28
  15. package/DS1/2-core/ds-tooltip.ts +12 -58
  16. package/DS1/2-core/styles/ds-banner.css +77 -0
  17. package/DS1/2-core/styles/ds-button.css +67 -0
  18. package/DS1/2-core/styles/ds-cycle.css +21 -0
  19. package/DS1/2-core/styles/ds-date.css +9 -0
  20. package/DS1/2-core/styles/ds-gap.css +93 -0
  21. package/DS1/2-core/styles/ds-icon.css +30 -0
  22. package/DS1/2-core/styles/ds-input.css +46 -0
  23. package/DS1/2-core/styles/ds-pagedots.css +31 -0
  24. package/DS1/2-core/styles/ds-text.css +29 -0
  25. package/DS1/2-core/styles/ds-tooltip.css +49 -0
  26. package/DS1/3-unit/ds-accordion.ts +95 -0
  27. package/DS1/3-unit/ds-form.ts +304 -0
  28. package/DS1/3-unit/ds-list.ts +5 -14
  29. package/DS1/3-unit/ds-row.ts +3 -19
  30. package/DS1/3-unit/ds-table.ts +3 -86
  31. package/DS1/3-unit/styles/ds-accordion.css +46 -0
  32. package/DS1/3-unit/styles/ds-list.css +9 -0
  33. package/DS1/3-unit/styles/ds-row.css +19 -0
  34. package/DS1/3-unit/styles/ds-table.css +80 -0
  35. package/DS1/4-page/ds-container.ts +28 -0
  36. package/DS1/4-page/ds-grid.ts +37 -50
  37. package/DS1/4-page/ds-layout.ts +652 -163
  38. package/DS1/4-page/styles/ds-container.css +35 -0
  39. package/DS1/4-page/styles/ds-grid.css +56 -0
  40. package/DS1/4-page/styles/ds-layout.css +246 -0
  41. package/DS1/index.ts +9 -1
  42. package/DS1/vite-env.d.ts +13 -0
  43. package/DS1/x-icon/2x.svg +4 -0
  44. package/DS1/x-icon/2xdots.svg +18 -0
  45. package/DS1/x-icon/2xgrid.svg +6 -0
  46. package/DS1/x-icon/2xlines.svg +6 -0
  47. package/DS1/x-icon/4x4.svg +18 -0
  48. package/DS1/x-icon/apple.svg +4 -0
  49. package/DS1/x-icon/avatar.svg +4 -0
  50. package/DS1/x-icon/big.svg +4 -0
  51. package/DS1/x-icon/blank.svg +3 -0
  52. package/DS1/x-icon/check.svg +3 -0
  53. package/DS1/x-icon/close.svg +3 -0
  54. package/DS1/x-icon/collapse.svg +3 -0
  55. package/DS1/x-icon/color.svg +4 -0
  56. package/DS1/x-icon/column.svg +5 -0
  57. package/DS1/x-icon/default.svg +3 -0
  58. package/DS1/x-icon/delete.svg +5 -0
  59. package/DS1/x-icon/dictate.svg +6 -0
  60. package/DS1/x-icon/do.svg +3 -0
  61. package/DS1/x-icon/down.svg +3 -0
  62. package/DS1/x-icon/duplicate.svg +4 -0
  63. package/DS1/x-icon/gallery.svg +5 -0
  64. package/DS1/x-icon/google.svg +6 -0
  65. package/DS1/x-icon/head.svg +5 -0
  66. package/DS1/x-icon/home.svg +3 -0
  67. package/DS1/x-icon/icon.svg +4 -0
  68. package/DS1/x-icon/in.svg +4 -0
  69. package/DS1/x-icon/lock.svg +5 -0
  70. package/DS1/x-icon/loop.svg +5 -0
  71. package/DS1/x-icon/mic.svg +5 -0
  72. package/DS1/x-icon/minimize.svg +3 -0
  73. package/DS1/x-icon/more.svg +5 -0
  74. package/DS1/x-icon/neutral.svg +6 -0
  75. package/DS1/x-icon/note.svg +6 -0
  76. package/DS1/x-icon/page.svg +4 -0
  77. package/DS1/x-icon/plus.svg +3 -0
  78. package/DS1/x-icon/rewind.svg +4 -0
  79. package/DS1/x-icon/row.svg +5 -0
  80. package/DS1/x-icon/sdown.svg +3 -0
  81. package/DS1/x-icon/search.svg +4 -0
  82. package/DS1/x-icon/see.svg +4 -0
  83. package/DS1/x-icon/ship.svg +5 -0
  84. package/DS1/x-icon/star.svg +3 -0
  85. package/DS1/x-icon/status.svg +4 -0
  86. package/DS1/x-icon/sup.svg +3 -0
  87. package/DS1/x-icon/title.svg +3 -0
  88. package/DS1/x-icon/undo.svg +3 -0
  89. package/DS1/x-icon/ungroup.svg +4 -0
  90. package/DS1/x-icon/unhead.svg +3 -0
  91. package/DS1/x-icon/unicon.svg +3 -0
  92. package/DS1/x-icon/unlock.svg +5 -0
  93. package/DS1/x-icon/unmic.svg +6 -0
  94. package/DS1/x-icon/unsee.svg +5 -0
  95. package/DS1/x-icon/unstar.svg +3 -0
  96. package/DS1/x-icon/untitle.svg +3 -0
  97. package/DS1/x-icon/up.svg +3 -0
  98. package/LICENSE +1 -1
  99. package/README.md +4 -4
  100. package/dist/0-face/device.d.ts +5 -0
  101. package/dist/0-face/device.d.ts.map +1 -1
  102. package/dist/0-face/device.js +111 -0
  103. package/dist/0-face/scaling.d.ts +48 -0
  104. package/dist/0-face/scaling.d.ts.map +1 -0
  105. package/dist/0-face/scaling.js +114 -0
  106. package/dist/2-core/ds-banner.d.ts +67 -0
  107. package/dist/2-core/ds-banner.d.ts.map +1 -1
  108. package/dist/2-core/ds-banner.js +97 -1
  109. package/dist/2-core/ds-button.d.ts +4 -15
  110. package/dist/2-core/ds-button.d.ts.map +1 -1
  111. package/dist/2-core/ds-button.js +14 -86
  112. package/dist/2-core/ds-card.d.ts +39 -0
  113. package/dist/2-core/ds-card.d.ts.map +1 -0
  114. package/dist/2-core/ds-card.js +119 -0
  115. package/dist/2-core/ds-cycle.d.ts +1 -5
  116. package/dist/2-core/ds-cycle.d.ts.map +1 -1
  117. package/dist/2-core/ds-cycle.js +74 -163
  118. package/dist/2-core/ds-date.d.ts.map +1 -1
  119. package/dist/2-core/ds-date.js +3 -9
  120. package/dist/2-core/ds-gap.d.ts +28 -0
  121. package/dist/2-core/ds-gap.d.ts.map +1 -0
  122. package/dist/2-core/ds-gap.js +25 -0
  123. package/dist/2-core/ds-icon.d.ts.map +1 -1
  124. package/dist/2-core/ds-icon.js +6 -35
  125. package/dist/2-core/ds-input.d.ts +127 -0
  126. package/dist/2-core/ds-input.d.ts.map +1 -1
  127. package/dist/2-core/ds-input.js +252 -1
  128. package/dist/2-core/ds-pagedots.d.ts +32 -0
  129. package/dist/2-core/ds-pagedots.d.ts.map +1 -0
  130. package/dist/2-core/ds-pagedots.js +36 -0
  131. package/dist/2-core/ds-text.d.ts +5 -3
  132. package/dist/2-core/ds-text.d.ts.map +1 -1
  133. package/dist/2-core/ds-text.js +49 -27
  134. package/dist/2-core/ds-tooltip.d.ts +2 -2
  135. package/dist/2-core/ds-tooltip.d.ts.map +1 -1
  136. package/dist/2-core/ds-tooltip.js +11 -57
  137. package/dist/2-core/styles/ds-banner.css +77 -0
  138. package/dist/2-core/styles/ds-button.css +67 -0
  139. package/dist/2-core/styles/ds-cycle.css +21 -0
  140. package/dist/2-core/styles/ds-date.css +9 -0
  141. package/dist/2-core/styles/ds-gap.css +93 -0
  142. package/dist/2-core/styles/ds-icon.css +30 -0
  143. package/dist/2-core/styles/ds-input.css +46 -0
  144. package/dist/2-core/styles/ds-pagedots.css +26 -0
  145. package/dist/2-core/styles/ds-text.css +29 -0
  146. package/dist/2-core/styles/ds-tooltip.css +49 -0
  147. package/dist/3-unit/ds-accordion.d.ts +47 -0
  148. package/dist/3-unit/ds-accordion.d.ts.map +1 -0
  149. package/dist/3-unit/ds-accordion.js +75 -0
  150. package/dist/3-unit/ds-form.d.ts +70 -0
  151. package/dist/3-unit/ds-form.d.ts.map +1 -0
  152. package/dist/3-unit/ds-form.js +232 -0
  153. package/dist/3-unit/ds-list.d.ts.map +1 -1
  154. package/dist/3-unit/ds-list.js +5 -11
  155. package/dist/3-unit/ds-row.d.ts.map +1 -1
  156. package/dist/3-unit/ds-row.js +3 -19
  157. package/dist/3-unit/ds-table.d.ts.map +1 -1
  158. package/dist/3-unit/ds-table.js +3 -86
  159. package/dist/3-unit/styles/ds-accordion.css +46 -0
  160. package/dist/3-unit/styles/ds-list.css +9 -0
  161. package/dist/3-unit/styles/ds-row.css +19 -0
  162. package/dist/3-unit/styles/ds-table.css +80 -0
  163. package/dist/{3-unit/row-v1.d.ts → 4-page/ds-container.d.ts} +3 -11
  164. package/dist/4-page/ds-container.d.ts.map +1 -0
  165. package/dist/4-page/ds-container.js +11 -0
  166. package/dist/4-page/ds-grid.d.ts +5 -0
  167. package/dist/4-page/ds-grid.d.ts.map +1 -1
  168. package/dist/4-page/ds-grid.js +38 -56
  169. package/dist/4-page/ds-layout.d.ts +3 -3
  170. package/dist/4-page/ds-layout.d.ts.map +1 -1
  171. package/dist/4-page/ds-layout.js +651 -162
  172. package/dist/4-page/styles/ds-container.css +35 -0
  173. package/dist/4-page/styles/ds-grid.css +56 -0
  174. package/dist/4-page/styles/ds-layout.css +251 -0
  175. package/dist/ds-one.bundle.css +700 -0
  176. package/dist/ds-one.bundle.css.map +7 -0
  177. package/dist/ds-one.bundle.js +2642 -1469
  178. package/dist/ds-one.bundle.js.map +1 -7
  179. package/dist/ds-one.bundle.min.css +2 -0
  180. package/dist/ds-one.bundle.min.css.map +7 -0
  181. package/dist/ds-one.bundle.min.js +3850 -550
  182. package/dist/ds-one.bundle.min.js.map +1 -7
  183. package/dist/index.d.ts +9 -1
  184. package/dist/index.d.ts.map +1 -1
  185. package/dist/index.js +9 -1
  186. package/package.json +4 -2
  187. package/dist/3-unit/doublenav-v1.d.ts +0 -51
  188. package/dist/3-unit/doublenav-v1.d.ts.map +0 -1
  189. package/dist/3-unit/doublenav-v1.js +0 -88
  190. package/dist/3-unit/ds-portfolio-doublenav.d.ts +0 -51
  191. package/dist/3-unit/ds-portfolio-doublenav.d.ts.map +0 -1
  192. package/dist/3-unit/ds-portfolio-doublenav.js +0 -88
  193. package/dist/3-unit/ds-portfolio-panel.d.ts +0 -11
  194. package/dist/3-unit/ds-portfolio-panel.d.ts.map +0 -1
  195. package/dist/3-unit/ds-portfolio-panel.js +0 -16
  196. package/dist/3-unit/ds-portfolio-singlenav.d.ts +0 -32
  197. package/dist/3-unit/ds-portfolio-singlenav.d.ts.map +0 -1
  198. package/dist/3-unit/ds-portfolio-singlenav.js +0 -62
  199. package/dist/3-unit/list-v1.d.ts +0 -11
  200. package/dist/3-unit/list-v1.d.ts.map +0 -1
  201. package/dist/3-unit/list-v1.js +0 -15
  202. package/dist/3-unit/panel-v1.d.ts +0 -11
  203. package/dist/3-unit/panel-v1.d.ts.map +0 -1
  204. package/dist/3-unit/panel-v1.js +0 -16
  205. package/dist/3-unit/row-v1.d.ts.map +0 -1
  206. package/dist/3-unit/row-v1.js +0 -32
  207. package/dist/3-unit/singlenav-v1.d.ts +0 -32
  208. package/dist/3-unit/singlenav-v1.d.ts.map +0 -1
  209. package/dist/3-unit/singlenav-v1.js +0 -62
@@ -104,6 +104,10 @@ export function initDeviceDetection(): DeviceInfo {
104
104
  scalingFactor.toFixed(3)
105
105
  );
106
106
 
107
+ // Add .mobile class to html element for CSS targeting
108
+ document.documentElement.classList.add("mobile");
109
+ document.documentElement.classList.remove("desktop");
110
+
107
111
  console.log(
108
112
  `[DS one] Mobile device detected - ${deviceInfo.deviceType} (${deviceInfo.screenWidth}x${deviceInfo.screenHeight}), scaling factor: ${scalingFactor.toFixed(2)}`
109
113
  );
@@ -113,6 +117,10 @@ export function initDeviceDetection(): DeviceInfo {
113
117
  document.documentElement.style.setProperty("--sf", "1");
114
118
  // Also set --sf for backwards compatibility
115
119
  document.documentElement.style.setProperty("--sf", "1");
120
+
121
+ // Add .desktop class and remove .mobile class
122
+ document.documentElement.classList.add("desktop");
123
+ document.documentElement.classList.remove("mobile");
116
124
  }
117
125
  console.log(
118
126
  `[DS one] Desktop device detected (${deviceInfo.screenWidth}x${deviceInfo.screenHeight})`
@@ -156,3 +164,133 @@ if (typeof window !== "undefined") {
156
164
  }, 100);
157
165
  });
158
166
  }
167
+
168
+ /**
169
+ * Disable double-tap to zoom in the browser (app-like behavior)
170
+ * Prevents all zoom gestures including double-tap and pinch-to-zoom
171
+ */
172
+ export function applike(): void {
173
+ if (typeof document === "undefined" || typeof window === "undefined") {
174
+ return;
175
+ }
176
+
177
+ // Set viewport meta tag to prevent zoom - this is the most important step
178
+ let viewport = document.querySelector('meta[name="viewport"]');
179
+ if (!viewport) {
180
+ viewport = document.createElement("meta");
181
+ viewport.setAttribute("name", "viewport");
182
+ document.head.appendChild(viewport);
183
+ }
184
+ viewport.setAttribute(
185
+ "content",
186
+ "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"
187
+ );
188
+
189
+ // Apply touch-action: pan-x pan-y globally to prevent zoom but allow panning
190
+ const style = document.createElement("style");
191
+ style.id = "ds-one-applike-style";
192
+ style.textContent = `
193
+ * {
194
+ touch-action: pan-x pan-y !important;
195
+ -ms-touch-action: pan-x pan-y !important;
196
+ }
197
+ html, body {
198
+ touch-action: pan-x pan-y !important;
199
+ -ms-touch-action: pan-x pan-y !important;
200
+ }
201
+ `;
202
+ // Remove existing style if present
203
+ const existingStyle = document.getElementById("ds-one-applike-style");
204
+ if (existingStyle) {
205
+ existingStyle.remove();
206
+ }
207
+ document.head.appendChild(style);
208
+
209
+ // Track touch events to prevent double-tap zoom
210
+ let lastTouchEnd = 0;
211
+ let touchStartTime = 0;
212
+
213
+ const preventZoom = (event: TouchEvent | WheelEvent | Event) => {
214
+ // Prevent pinch zoom (two fingers)
215
+ if (event instanceof TouchEvent) {
216
+ if (event.touches.length > 1) {
217
+ event.preventDefault();
218
+ event.stopPropagation();
219
+ return;
220
+ }
221
+
222
+ const now = Date.now();
223
+
224
+ if (event.type === "touchstart") {
225
+ // If touchstart happens within 300ms of last touchend, it's likely a double-tap
226
+ if (now - lastTouchEnd < 300) {
227
+ event.preventDefault();
228
+ event.stopPropagation();
229
+ return;
230
+ }
231
+ touchStartTime = now;
232
+ } else if (event.type === "touchend") {
233
+ const touchDuration = now - touchStartTime;
234
+ // If this is a quick tap (< 300ms) and happened soon after previous touchend, prevent it
235
+ if (touchDuration < 300 && now - lastTouchEnd < 300) {
236
+ event.preventDefault();
237
+ event.stopPropagation();
238
+ return;
239
+ }
240
+ lastTouchEnd = now;
241
+ } else if (event.type === "touchmove") {
242
+ // Prevent any touchmove that might trigger zoom
243
+ if (event.touches.length > 1) {
244
+ event.preventDefault();
245
+ event.stopPropagation();
246
+ return;
247
+ }
248
+ }
249
+ }
250
+
251
+ // Prevent wheel zoom with ctrl/cmd key (common on trackpads)
252
+ if (event instanceof WheelEvent && (event.ctrlKey || event.metaKey)) {
253
+ event.preventDefault();
254
+ event.stopPropagation();
255
+ return;
256
+ }
257
+ };
258
+
259
+ // Use capture phase to catch events earlier
260
+ const options = { passive: false, capture: true };
261
+
262
+ // Prevent all zoom gestures - use capture phase
263
+ document.addEventListener("touchstart", preventZoom, options);
264
+ document.addEventListener("touchmove", preventZoom, options);
265
+ document.addEventListener("touchend", preventZoom, options);
266
+ document.addEventListener("touchcancel", preventZoom, options);
267
+
268
+ // Prevent wheel zoom
269
+ document.addEventListener("wheel", preventZoom, options);
270
+
271
+ // Prevent gesture events (iOS Safari) - use capture phase
272
+ document.addEventListener(
273
+ "gesturestart",
274
+ (e) => {
275
+ e.preventDefault();
276
+ e.stopPropagation();
277
+ },
278
+ options
279
+ );
280
+ document.addEventListener(
281
+ "gesturechange",
282
+ (e) => {
283
+ e.preventDefault();
284
+ e.stopPropagation();
285
+ },
286
+ options
287
+ );
288
+ document.addEventListener(
289
+ "gestureend",
290
+ (e) => {
291
+ e.preventDefault();
292
+ e.stopPropagation();
293
+ },
294
+ options
295
+ );
296
+ }
@@ -0,0 +1,152 @@
1
+ // scaling.ts
2
+ // Responsive scaling utilities for the design system
3
+
4
+ import { signal } from "@lit-labs/signals";
5
+
6
+ export type ScalingMode = "auto" | "fixed" | "fluid";
7
+
8
+ export interface ScalingConfig {
9
+ mode: ScalingMode;
10
+ baseWidth: number;
11
+ minScale: number;
12
+ maxScale: number;
13
+ }
14
+
15
+ const defaultConfig: ScalingConfig = {
16
+ mode: "auto",
17
+ baseWidth: 280,
18
+ minScale: 0.75,
19
+ maxScale: 2.0,
20
+ };
21
+
22
+ // Reactive scaling factor signal
23
+ export const scalingFactor = signal<number>(1);
24
+
25
+ // Current scaling configuration
26
+ export const scalingConfig = signal<ScalingConfig>(defaultConfig);
27
+
28
+ /**
29
+ * Calculate the scaling factor based on viewport width
30
+ * @param viewportWidth - Current viewport width in pixels
31
+ * @param config - Scaling configuration
32
+ * @returns The calculated scaling factor
33
+ */
34
+ export function calculateScalingFactor(
35
+ viewportWidth: number,
36
+ config: ScalingConfig = scalingConfig.get()
37
+ ): number {
38
+ if (config.mode === "fixed") {
39
+ return 1;
40
+ }
41
+
42
+ const rawScale = viewportWidth / config.baseWidth;
43
+ const clampedScale = Math.max(
44
+ config.minScale,
45
+ Math.min(config.maxScale, rawScale)
46
+ );
47
+
48
+ return Number(clampedScale.toFixed(3));
49
+ }
50
+
51
+ /**
52
+ * Set the scaling configuration
53
+ * @param config - Partial scaling configuration to apply
54
+ */
55
+ export function setScalingConfig(config: Partial<ScalingConfig>): void {
56
+ const currentConfig = scalingConfig.get();
57
+ const newConfig = { ...currentConfig, ...config };
58
+ scalingConfig.set(newConfig);
59
+
60
+ // Recalculate scaling factor if in browser
61
+ if (typeof window !== "undefined") {
62
+ updateScalingFactor();
63
+ }
64
+ }
65
+
66
+ /**
67
+ * Update the scaling factor based on current viewport
68
+ */
69
+ export function updateScalingFactor(): void {
70
+ if (typeof window === "undefined" || typeof document === "undefined") {
71
+ return;
72
+ }
73
+
74
+ const viewportWidth = document.documentElement.clientWidth;
75
+ const config = scalingConfig.get();
76
+ const newFactor = calculateScalingFactor(viewportWidth, config);
77
+
78
+ scalingFactor.set(newFactor);
79
+
80
+ // Update CSS custom property
81
+ document.documentElement.style.setProperty("--sf", newFactor.toString());
82
+
83
+ // Dispatch event for components that need to react
84
+ window.dispatchEvent(
85
+ new CustomEvent("scaling-changed", {
86
+ detail: { scalingFactor: newFactor, config },
87
+ })
88
+ );
89
+ }
90
+
91
+ /**
92
+ * Get the current scaling factor
93
+ * @returns The current scaling factor
94
+ */
95
+ export function getScalingFactor(): number {
96
+ return scalingFactor.get();
97
+ }
98
+
99
+ /**
100
+ * Convert a design pixel value to scaled pixels
101
+ * @param designPx - The design pixel value (based on 280px width)
102
+ * @returns The scaled pixel value
103
+ */
104
+ export function scale(designPx: number): number {
105
+ return designPx * scalingFactor.get();
106
+ }
107
+
108
+ /**
109
+ * Convert a scaled pixel value back to design pixels
110
+ * @param scaledPx - The scaled pixel value
111
+ * @returns The design pixel value
112
+ */
113
+ export function unscale(scaledPx: number): number {
114
+ const factor = scalingFactor.get();
115
+ return factor === 0 ? scaledPx : scaledPx / factor;
116
+ }
117
+
118
+ /**
119
+ * Initialize scaling system
120
+ * This is typically called automatically when the module loads
121
+ */
122
+ export function initScaling(): void {
123
+ if (typeof window === "undefined") {
124
+ return;
125
+ }
126
+
127
+ // Initial calculation
128
+ updateScalingFactor();
129
+
130
+ // Update on resize (debounced)
131
+ let resizeTimeout: ReturnType<typeof setTimeout>;
132
+ window.addEventListener("resize", () => {
133
+ clearTimeout(resizeTimeout);
134
+ resizeTimeout = setTimeout(() => {
135
+ updateScalingFactor();
136
+ }, 100);
137
+ });
138
+
139
+ // Update on orientation change
140
+ window.addEventListener("orientationchange", () => {
141
+ setTimeout(updateScalingFactor, 100);
142
+ });
143
+ }
144
+
145
+ // Auto-initialize when module loads in browser
146
+ if (typeof window !== "undefined") {
147
+ if (document.readyState === "loading") {
148
+ document.addEventListener("DOMContentLoaded", initScaling);
149
+ } else {
150
+ initScaling();
151
+ }
152
+ }
@@ -1,57 +1,76 @@
1
- /* version 0.2.5-alpha.9 */
1
+ /* version 0.3.0-alpha.1 */
2
+
3
+ @import url("https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@200");
4
+ @import url("https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@800");
5
+ @import url("https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@800");
6
+
7
+ @font-face {
8
+ font-family: GT-America-Standard-Regular;
9
+ src: url("./fonts/GT-America-Standard-Regular.woff2") format("woff2");
10
+ }
11
+
12
+ @font-face {
13
+ font-family: GT-America-Standard-Medium;
14
+ src: url("./fonts/GT-America-Standard-Medium.woff2") format("woff2");
15
+ }
16
+
17
+ @font-face {
18
+ font-family: GT-America-Compressed-Regular;
19
+ src: url("./fonts/GT-America-Compressed-Regular.woff2") format("woff2");
20
+ }
2
21
 
3
22
  input {
4
23
  padding: 0;
5
24
  }
6
25
 
7
26
  :root {
8
- /* colors */
9
- --black: #2a2a2a;
27
+ /* DS one colors */
28
+
29
+ /* Base/[color] */
30
+
10
31
  --white: rgb(255 255 255);
11
- --slate: #bdbdbd;
32
+ --light-grey: #e8e8e8;
33
+ --slate: #1e1e1e;
12
34
  --slate-light: #e6e6e6;
13
35
  --slate-dark: #3c3c3c;
14
- --light-green: #99ff73;
15
- --green: #979441;
16
- --light-blue: #ccccff;
17
- --blue: #594dff;
36
+ --stealth: #554455;
37
+ --black: #2a2a2a;
38
+
39
+ /* Accent/[color] */
40
+ --tuned-red: #ff5f5f;
18
41
  --pink: #f5aad1;
19
- --red: #ff5f5f;
42
+ --sharp-blue: #594dff;
43
+ --zenith-blue: #ccccff;
44
+ --every-green: #979441;
45
+ --apple-green: #99ff73;
46
+ --chartreuse-green: #ccff4d;
47
+ --yellow: #eaff00;
20
48
  --orange: #fec20d;
21
- --yellow: #ffff00;
22
-
23
- /* DS1 Documentation Colors */
24
- --ds1-docs-header-bg: light-dark(#f5f5f5, #232323);
25
- --ds1-docs-header-border: light-dark(#e0e0e0, #000000);
26
- --ds1-docs-header-text: light-dark(#2a2a2a, #f1f1f1);
27
- --ds1-docs-header-text-secondary: light-dark(#666666, #cdcdcd);
28
- --ds1-docs-accent-green: #72ff3d;
29
- --ds1-docs-sidebar-bg: light-dark(#fafafa, #1f1f1f);
30
- --ds1-docs-content-bg: light-dark(#ffffff, #171717);
31
- --ds1-docs-search-bg: light-dark(#f0f0f0, #171717);
32
- --ds1-docs-divider: light-dark(#e0e0e0, #000000);
49
+
50
+ --accent-color: var(--apple-green);
33
51
 
34
52
  /* 4-page component colors */
35
53
 
36
54
  /* ds-grid color */
37
55
  --grid-color: light-dark(var(--grid-color-light), var(--grid-color-dark));
38
- --grid-color-light: var(--slate);
56
+ --grid-color-light: #1e1e1e2b;
39
57
  --grid-color-dark: var(--white);
40
58
 
41
- /* ds-layout colors */
42
-
43
- --layout-color: light-dark(
44
- var(--layout-color-light),
45
- var(--layout-color-dark)
46
- );
47
-
48
59
  /* typefaces */
49
- --typeface: "GT-America-Standard-Regular";
60
+ --typeface-regular: "GT-America-Standard-Regular";
50
61
  --typeface-medium: "GT-America-Standard-Medium";
51
62
  --typeface-compressed: "GT-America-Compressed-Regular";
52
- --typeface-japanese: "Noto Sans JP";
53
63
  --typeface-mono: "Iosevka";
54
64
 
65
+ /* language specific typefaces */
66
+
67
+ --typeface-regular-jp: "Noto Sans JP";
68
+ --typeface-regular-zh-hans: "Noto Sans SC";
69
+ --typeface-regular-zh-hant: "Noto Sans TC";
70
+ --typeface-regular-zh: var(--typeface-regular-zh-hant);
71
+
72
+ /* typefaces sizes and weight */
73
+
55
74
  --type-size-default: calc(14px * var(--sf));
56
75
  --type-size-small: calc(10px * var(--sf));
57
76
  --type-weight-default: 500;
@@ -68,27 +87,80 @@ input {
68
87
  --type-weight-book: 400;
69
88
  --type-lineheight-book: 15px;
70
89
 
90
+ /* ----------------------------------------------------------
91
+ SIZING SCALE
92
+ - Define a base unit ( --1 ) and derive all other sizes
93
+ - Larger sizes are simple multipliers (×2, ×3, ×4)
94
+ - Smaller sizes use fractional multipliers (0.1, 0.25, 0.8)
95
+ ---------------------------------------------------------- */
96
+
97
+ --01: calc(var(--1) * 0.1);
98
+ --025: calc(var(--1) * 0.25);
99
+ --05: calc(var(--1) * 0.5);
100
+ --08: calc(var(--1) * 0.8);
101
+ --1: 20px; /* SET BASE UNIT HERE FOR EXAMPLE 20px */
102
+ --2: calc(var(--1) * 2);
103
+ --3: calc(var(--1) * 3);
104
+ --4: calc(var(--1) * 4);
105
+ --8: calc(var(--1) * 8);
106
+ --12: calc(var(--1) * 12);
107
+ --20: calc(var(--1) * 20);
108
+
109
+ /* Semantic sizing units */
110
+
111
+ --tenth: var(--01);
112
+ --quarter: var(--025);
113
+ --half: var(--05);
114
+ --eight-tenth: var(--08);
115
+ --unit: var(--1);
116
+ --double: var(--2);
117
+ --triple: var(--3);
118
+ --quad: var(--4);
119
+ --oct: var(--8);
120
+ --dozen: var(--12);
121
+ --twenty: var(--20);
122
+
123
+ /* Layouts */
124
+
125
+ /* App layout (used for app) */
126
+ --app-layout:
127
+
128
+
129
+ /* Home layout (used for lists) */ --home-layout: calc(
130
+ var(--unit) * var(--sf)
131
+ )
132
+ calc(var(--unit) * var(--sf)) calc(var(--unit) * var(--sf))
133
+ calc(var(--unit) * var(--sf)) calc(var(--oct) * var(--sf))
134
+ calc(var(--oct) * var(--sf)) calc(var(--quad) * var(--sf))
135
+ calc(var(--double) * var(--sf));
136
+ --home-layout-areas: "banner" "." "header" "." "message" "lists" "." "footer";
137
+
138
+ /* App layout */
139
+ --app-layout: calc(var(--unit) * var(--sf)) calc(var(--unit) * var(--sf))
140
+ calc(var(--unit) * var(--sf)) calc(var(--double) * var(--sf))
141
+ calc(var(--dozen) * var(--sf)) calc(var(--unit) * var(--sf))
142
+ calc(var(--quad) * var(--sf)) calc(var(--double) * var(--sf));
143
+ --app-layout-areas: "banner" "." "header" "." "main" "page-dots" "." "footer";
144
+
71
145
  /* size */
72
- --outline-stroke: 1px solid light-dark(var(--black), var(--slate-dark));
73
- --outline-stroke-mobile: calc(1px * var(--sf)) solid
74
- light-dark(var(--black), var(--slate-dark));
146
+ --outline-stroke: 1px solid var(--slate-light);
147
+ --outline-stroke-mobile: 2px solid var(--sharp-blue);
75
148
  --item-width: calc(79px * var(--sf));
76
149
  --item-height: calc(19px * var(--sf));
77
150
  --margin-correction: calc(1px * var(--sf));
78
151
 
79
- /* SIZING */
152
+ --column-width: calc(var(--quad) * var(--sf));
80
153
 
81
- /* main unit */
82
- --1: 20px;
83
- /* bigger sizes */
84
- --2: calc(var(--1) * 2);
85
- --3: calc(var(--1) * 3);
86
- --4: calc(var(--1) * 4);
154
+ --column-header-height: calc(var(--unit) * var(--sf));
155
+ --column-header-width: calc(var(--quad) * var(--sf));
87
156
 
88
- /* smaller sizes */
89
- --01: calc(var(--1) * 0.1);
90
- --025: calc(var(--1) * 0.25);
91
- --08: calc(var(--1) * 0.8);
157
+ /* ----------------------------------------------------------
158
+ SURFACE COLORS
159
+ -
160
+ ---------------------------------------------------------- */
161
+
162
+ --background: light-dark(var(--white), var(--black));
163
+ --dialog-background: var(--background);
92
164
 
93
165
  /* button */
94
166
  --button-background-color-primary: var(--accent-color);
@@ -103,7 +175,7 @@ input {
103
175
  );
104
176
 
105
177
  /* text-color */
106
- --text-color-primary: light-dark(var(--black), var(--white));
178
+ --text-color: light-dark(var(--black), var(--white));
107
179
  --text-color-dimmed: light-dark(var(--slate), var(--slate-light));
108
180
 
109
181
  /* icon colors */
@@ -141,24 +213,6 @@ input {
141
213
  navigation: auto;
142
214
  }
143
215
 
144
- @font-face {
145
- font-family: GT-America-Standard-Regular;
146
- src: url("./fonts/GT-America-Standard-Regular.woff2") format("woff2");
147
- font-display: swap;
148
- }
149
-
150
- @font-face {
151
- font-family: GT-America-Standard-Medium;
152
- src: url("./fonts/GT-America-Standard-Medium.woff2") format("woff2");
153
- font-display: swap;
154
- }
155
-
156
- @font-face {
157
- font-family: GT-America-Compressed-Regular;
158
- src: url("./fonts/GT-America-Compressed-Regular.woff2") format("woff2");
159
- font-display: swap;
160
- }
161
-
162
216
  body {
163
217
  margin: 0;
164
218
  padding: 0;
@@ -166,7 +220,6 @@ body {
166
220
 
167
221
  .matrix__board {
168
222
  position: relative;
169
- top: calc(21.5px * var(--sf));
170
223
  left: calc(-20px * var(--sf));
171
224
  width: calc(240px * var(--sf));
172
225
  display: flex;
@@ -207,28 +260,22 @@ body {
207
260
  height: var(--item-height);
208
261
  margin-right: var(--margin-correction);
209
262
  margin-bottom: var(--margin-correction);
210
- outline: var(--outline-stroke);
211
263
  background-color: light-dark(var(--white), var(--black));
212
264
  }
213
265
 
214
266
  .matrix__row-header {
215
267
  position: relative;
216
- top: calc(0.5px * var(--sf));
268
+ /* top: calc(0.5px * var(--sf)); */
217
269
  display: flex;
218
270
  align-items: center;
219
271
  justify-content: center;
220
- width: calc(19px * var(--sf));
221
- height: var(--item-height);
222
- margin-right: var(--margin-correction);
223
- margin-bottom: var(--margin-correction);
224
- outline: var(--outline-stroke);
272
+ width: calc(var(--unit) * var(--sf));
273
+ height: calc(var(--unit) * var(--sf));
274
+ /* margin-right: var(--margin-correction);
275
+ margin-bottom: var(--margin-correction); */
225
276
  background-color: light-dark(rgb(220 241 213), var(--slate-dark));
226
277
  }
227
278
 
228
- .mobile .matrix__row-header {
229
- outline: var(--outline-stroke-mobile);
230
- }
231
-
232
279
  .matrix__column-content {
233
280
  display: flex;
234
281
  flex-direction: column;
@@ -438,7 +485,7 @@ table {
438
485
  }
439
486
 
440
487
  tr {
441
- background-color: var(--light-green);
488
+ background-color: var(--apple-green);
442
489
  }
443
490
 
444
491
  td {