ds-one 0.2.5-alpha.18 → 0.2.5-alpha.19

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 (199) hide show
  1. package/DS1/0-face/device.ts +130 -0
  2. package/DS1/0-face/scaling.ts +152 -0
  3. package/DS1/1-root/one.css +48 -18
  4. package/DS1/2-core/ds-banner.ts +3 -77
  5. package/DS1/2-core/ds-button.ts +3 -67
  6. package/DS1/2-core/ds-card.ts +137 -0
  7. package/DS1/2-core/ds-cycle.ts +3 -22
  8. package/DS1/2-core/ds-date.ts +3 -9
  9. package/DS1/2-core/ds-gap.ts +3 -75
  10. package/DS1/2-core/ds-icon.ts +3 -33
  11. package/DS1/2-core/ds-input.ts +306 -1
  12. package/DS1/2-core/ds-pagedots.ts +52 -0
  13. package/DS1/2-core/ds-text.ts +3 -29
  14. package/DS1/2-core/ds-tooltip.ts +3 -49
  15. package/DS1/2-core/styles/ds-banner.css +77 -0
  16. package/DS1/2-core/styles/ds-button.css +67 -0
  17. package/DS1/2-core/styles/ds-cycle.css +21 -0
  18. package/DS1/2-core/styles/ds-date.css +9 -0
  19. package/DS1/2-core/styles/ds-gap.css +93 -0
  20. package/DS1/2-core/styles/ds-icon.css +30 -0
  21. package/DS1/2-core/styles/ds-input.css +46 -0
  22. package/DS1/2-core/styles/ds-pagedots.css +27 -0
  23. package/DS1/2-core/styles/ds-text.css +29 -0
  24. package/DS1/2-core/styles/ds-tooltip.css +49 -0
  25. package/DS1/3-unit/ds-accordion.ts +3 -46
  26. package/DS1/3-unit/ds-form.ts +304 -0
  27. package/DS1/3-unit/ds-list.ts +5 -14
  28. package/DS1/3-unit/ds-row.ts +3 -19
  29. package/DS1/3-unit/ds-table.ts +3 -85
  30. package/DS1/3-unit/styles/ds-accordion.css +46 -0
  31. package/DS1/3-unit/styles/ds-list.css +9 -0
  32. package/DS1/3-unit/styles/ds-row.css +19 -0
  33. package/DS1/3-unit/styles/ds-table.css +80 -0
  34. package/DS1/4-page/ds-container.ts +3 -35
  35. package/DS1/4-page/ds-grid.ts +3 -56
  36. package/DS1/4-page/ds-layout.ts +528 -50
  37. package/DS1/4-page/styles/ds-container.css +35 -0
  38. package/DS1/4-page/styles/ds-grid.css +56 -0
  39. package/DS1/4-page/styles/ds-layout.css +251 -0
  40. package/DS1/index.ts +7 -3
  41. package/DS1/vite-env.d.ts +9 -0
  42. package/DS1/x-icon/2x.svg +4 -0
  43. package/DS1/x-icon/2xdots.svg +18 -0
  44. package/DS1/x-icon/2xgrid.svg +6 -0
  45. package/DS1/x-icon/2xlines.svg +6 -0
  46. package/DS1/x-icon/4x4.svg +18 -0
  47. package/DS1/x-icon/apple.svg +4 -0
  48. package/DS1/x-icon/avatar.svg +4 -0
  49. package/DS1/x-icon/big.svg +4 -0
  50. package/DS1/x-icon/blank.svg +3 -0
  51. package/DS1/x-icon/check.svg +3 -0
  52. package/DS1/x-icon/close.svg +3 -0
  53. package/DS1/x-icon/collapse.svg +3 -0
  54. package/DS1/x-icon/color.svg +4 -0
  55. package/DS1/x-icon/column.svg +5 -0
  56. package/DS1/x-icon/default.svg +3 -0
  57. package/DS1/x-icon/delete.svg +5 -0
  58. package/DS1/x-icon/dictate.svg +6 -0
  59. package/DS1/x-icon/do.svg +3 -0
  60. package/DS1/x-icon/down.svg +3 -0
  61. package/DS1/x-icon/duplicate.svg +4 -0
  62. package/DS1/x-icon/gallery.svg +5 -0
  63. package/DS1/x-icon/google.svg +6 -0
  64. package/DS1/x-icon/head.svg +5 -0
  65. package/DS1/x-icon/home.svg +3 -0
  66. package/DS1/x-icon/icon.svg +4 -0
  67. package/DS1/x-icon/in.svg +4 -0
  68. package/DS1/x-icon/lock.svg +5 -0
  69. package/DS1/x-icon/loop.svg +5 -0
  70. package/DS1/x-icon/mic.svg +5 -0
  71. package/DS1/x-icon/minimize.svg +3 -0
  72. package/DS1/x-icon/more.svg +5 -0
  73. package/DS1/x-icon/neutral.svg +6 -0
  74. package/DS1/x-icon/note.svg +6 -0
  75. package/DS1/x-icon/page.svg +4 -0
  76. package/DS1/x-icon/plus.svg +3 -0
  77. package/DS1/x-icon/rewind.svg +4 -0
  78. package/DS1/x-icon/row.svg +5 -0
  79. package/DS1/x-icon/sdown.svg +3 -0
  80. package/DS1/x-icon/search.svg +4 -0
  81. package/DS1/x-icon/see.svg +4 -0
  82. package/DS1/x-icon/ship.svg +5 -0
  83. package/DS1/x-icon/star.svg +3 -0
  84. package/DS1/x-icon/status.svg +4 -0
  85. package/DS1/x-icon/sup.svg +3 -0
  86. package/DS1/x-icon/title.svg +3 -0
  87. package/DS1/x-icon/undo.svg +3 -0
  88. package/DS1/x-icon/ungroup.svg +4 -0
  89. package/DS1/x-icon/unhead.svg +3 -0
  90. package/DS1/x-icon/unicon.svg +3 -0
  91. package/DS1/x-icon/unlock.svg +5 -0
  92. package/DS1/x-icon/unmic.svg +6 -0
  93. package/DS1/x-icon/unsee.svg +5 -0
  94. package/DS1/x-icon/unstar.svg +3 -0
  95. package/DS1/x-icon/untitle.svg +3 -0
  96. package/DS1/x-icon/up.svg +3 -0
  97. package/README.md +2 -2
  98. package/dist/0-face/device.d.ts +5 -0
  99. package/dist/0-face/device.d.ts.map +1 -1
  100. package/dist/0-face/device.js +105 -0
  101. package/dist/0-face/scaling.d.ts +48 -0
  102. package/dist/0-face/scaling.d.ts.map +1 -0
  103. package/dist/0-face/scaling.js +114 -0
  104. package/dist/2-core/ds-banner.d.ts.map +1 -1
  105. package/dist/2-core/ds-banner.js +3 -77
  106. package/dist/2-core/ds-button.d.ts.map +1 -1
  107. package/dist/2-core/ds-button.js +3 -67
  108. package/dist/2-core/ds-card.d.ts +39 -0
  109. package/dist/2-core/ds-card.d.ts.map +1 -0
  110. package/dist/2-core/ds-card.js +119 -0
  111. package/dist/2-core/ds-cycle.d.ts.map +1 -1
  112. package/dist/2-core/ds-cycle.js +3 -22
  113. package/dist/2-core/ds-date.d.ts.map +1 -1
  114. package/dist/2-core/ds-date.js +3 -9
  115. package/dist/2-core/ds-gap.d.ts.map +1 -1
  116. package/dist/2-core/ds-gap.js +3 -75
  117. package/dist/2-core/ds-icon.d.ts.map +1 -1
  118. package/dist/2-core/ds-icon.js +3 -33
  119. package/dist/2-core/ds-input.d.ts +127 -0
  120. package/dist/2-core/ds-input.d.ts.map +1 -1
  121. package/dist/2-core/ds-input.js +252 -1
  122. package/dist/2-core/ds-pagedots.d.ts +32 -0
  123. package/dist/2-core/ds-pagedots.d.ts.map +1 -0
  124. package/dist/2-core/ds-pagedots.js +36 -0
  125. package/dist/2-core/ds-text.d.ts.map +1 -1
  126. package/dist/2-core/ds-text.js +3 -29
  127. package/dist/2-core/ds-tooltip.d.ts.map +1 -1
  128. package/dist/2-core/ds-tooltip.js +3 -49
  129. package/dist/2-core/styles/ds-banner.css +77 -0
  130. package/dist/2-core/styles/ds-button.css +67 -0
  131. package/dist/2-core/styles/ds-cycle.css +21 -0
  132. package/dist/2-core/styles/ds-date.css +9 -0
  133. package/dist/2-core/styles/ds-gap.css +93 -0
  134. package/dist/2-core/styles/ds-icon.css +30 -0
  135. package/dist/2-core/styles/ds-input.css +46 -0
  136. package/dist/2-core/styles/ds-pagedots.css +26 -0
  137. package/dist/2-core/styles/ds-text.css +29 -0
  138. package/dist/2-core/styles/ds-tooltip.css +49 -0
  139. package/dist/3-unit/ds-accordion.d.ts.map +1 -1
  140. package/dist/3-unit/ds-accordion.js +3 -46
  141. package/dist/3-unit/ds-form.d.ts +70 -0
  142. package/dist/3-unit/ds-form.d.ts.map +1 -0
  143. package/dist/3-unit/ds-form.js +232 -0
  144. package/dist/3-unit/ds-list.d.ts.map +1 -1
  145. package/dist/3-unit/ds-list.js +5 -11
  146. package/dist/3-unit/ds-row.d.ts.map +1 -1
  147. package/dist/3-unit/ds-row.js +3 -19
  148. package/dist/3-unit/ds-table.d.ts.map +1 -1
  149. package/dist/3-unit/ds-table.js +3 -85
  150. package/dist/3-unit/styles/ds-accordion.css +46 -0
  151. package/dist/3-unit/styles/ds-list.css +9 -0
  152. package/dist/3-unit/styles/ds-row.css +19 -0
  153. package/dist/3-unit/styles/ds-table.css +80 -0
  154. package/dist/4-page/ds-container.d.ts.map +1 -1
  155. package/dist/4-page/ds-container.js +3 -35
  156. package/dist/4-page/ds-grid.d.ts.map +1 -1
  157. package/dist/4-page/ds-grid.js +3 -56
  158. package/dist/4-page/ds-layout.d.ts +1 -1
  159. package/dist/4-page/ds-layout.d.ts.map +1 -1
  160. package/dist/4-page/ds-layout.js +528 -50
  161. package/dist/4-page/styles/ds-container.css +35 -0
  162. package/dist/4-page/styles/ds-grid.css +56 -0
  163. package/dist/4-page/styles/ds-layout.css +251 -0
  164. package/dist/ds-one.bundle.css +700 -0
  165. package/dist/ds-one.bundle.css.map +7 -0
  166. package/dist/ds-one.bundle.js +1285 -607
  167. package/dist/ds-one.bundle.js.map +4 -4
  168. package/dist/ds-one.bundle.min.css +2 -0
  169. package/dist/ds-one.bundle.min.css.map +7 -0
  170. package/dist/ds-one.bundle.min.js +766 -599
  171. package/dist/ds-one.bundle.min.js.map +4 -4
  172. package/dist/index.d.ts +7 -3
  173. package/dist/index.d.ts.map +1 -1
  174. package/dist/index.js +7 -3
  175. package/package.json +1 -1
  176. package/dist/3-unit/doublenav-v1.d.ts +0 -51
  177. package/dist/3-unit/doublenav-v1.d.ts.map +0 -1
  178. package/dist/3-unit/doublenav-v1.js +0 -88
  179. package/dist/3-unit/ds-portfolio-doublenav.d.ts +0 -51
  180. package/dist/3-unit/ds-portfolio-doublenav.d.ts.map +0 -1
  181. package/dist/3-unit/ds-portfolio-doublenav.js +0 -88
  182. package/dist/3-unit/ds-portfolio-panel.d.ts +0 -11
  183. package/dist/3-unit/ds-portfolio-panel.d.ts.map +0 -1
  184. package/dist/3-unit/ds-portfolio-panel.js +0 -16
  185. package/dist/3-unit/ds-portfolio-singlenav.d.ts +0 -32
  186. package/dist/3-unit/ds-portfolio-singlenav.d.ts.map +0 -1
  187. package/dist/3-unit/ds-portfolio-singlenav.js +0 -62
  188. package/dist/3-unit/list-v1.d.ts +0 -11
  189. package/dist/3-unit/list-v1.d.ts.map +0 -1
  190. package/dist/3-unit/list-v1.js +0 -15
  191. package/dist/3-unit/panel-v1.d.ts +0 -11
  192. package/dist/3-unit/panel-v1.d.ts.map +0 -1
  193. package/dist/3-unit/panel-v1.js +0 -16
  194. package/dist/3-unit/row-v1.d.ts +0 -25
  195. package/dist/3-unit/row-v1.d.ts.map +0 -1
  196. package/dist/3-unit/row-v1.js +0 -32
  197. package/dist/3-unit/singlenav-v1.d.ts +0 -32
  198. package/dist/3-unit/singlenav-v1.d.ts.map +0 -1
  199. package/dist/3-unit/singlenav-v1.js +0 -62
@@ -37,12 +37,12 @@ function initDeviceDetection() {
37
37
  if (deviceInfo.isMobile && typeof document !== "undefined") {
38
38
  const designWidth = 280;
39
39
  const actualWidth = deviceInfo.screenWidth;
40
- const scalingFactor = actualWidth / designWidth;
41
- document.documentElement.style.setProperty("--sf", scalingFactor.toFixed(3));
42
- document.documentElement.style.setProperty("--sf", scalingFactor.toFixed(3));
40
+ const scalingFactor2 = actualWidth / designWidth;
41
+ document.documentElement.style.setProperty("--sf", scalingFactor2.toFixed(3));
42
+ document.documentElement.style.setProperty("--sf", scalingFactor2.toFixed(3));
43
43
  document.documentElement.classList.add("mobile");
44
44
  document.documentElement.classList.remove("desktop");
45
- console.log(`[DS one] Mobile device detected - ${deviceInfo.deviceType} (${deviceInfo.screenWidth}x${deviceInfo.screenHeight}), scaling factor: ${scalingFactor.toFixed(2)}`);
45
+ console.log(`[DS one] Mobile device detected - ${deviceInfo.deviceType} (${deviceInfo.screenWidth}x${deviceInfo.screenHeight}), scaling factor: ${scalingFactor2.toFixed(2)}`);
46
46
  } else {
47
47
  if (typeof document !== "undefined") {
48
48
  document.documentElement.style.setProperty("--sf", "1");
@@ -81,6 +81,92 @@ if (typeof window !== "undefined") {
81
81
  }, 100);
82
82
  });
83
83
  }
84
+ function applike() {
85
+ if (typeof document === "undefined" || typeof window === "undefined") {
86
+ return;
87
+ }
88
+ let viewport = document.querySelector('meta[name="viewport"]');
89
+ if (!viewport) {
90
+ viewport = document.createElement("meta");
91
+ viewport.setAttribute("name", "viewport");
92
+ document.head.appendChild(viewport);
93
+ }
94
+ viewport.setAttribute("content", "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no");
95
+ const style = document.createElement("style");
96
+ style.id = "ds-one-applike-style";
97
+ style.textContent = `
98
+ * {
99
+ touch-action: pan-x pan-y !important;
100
+ -ms-touch-action: pan-x pan-y !important;
101
+ }
102
+ html, body {
103
+ touch-action: pan-x pan-y !important;
104
+ -ms-touch-action: pan-x pan-y !important;
105
+ }
106
+ `;
107
+ const existingStyle = document.getElementById("ds-one-applike-style");
108
+ if (existingStyle) {
109
+ existingStyle.remove();
110
+ }
111
+ document.head.appendChild(style);
112
+ let lastTouchEnd = 0;
113
+ let touchStartTime = 0;
114
+ const preventZoom = (event) => {
115
+ if (event instanceof TouchEvent) {
116
+ if (event.touches.length > 1) {
117
+ event.preventDefault();
118
+ event.stopPropagation();
119
+ return;
120
+ }
121
+ const now = Date.now();
122
+ if (event.type === "touchstart") {
123
+ if (now - lastTouchEnd < 300) {
124
+ event.preventDefault();
125
+ event.stopPropagation();
126
+ return;
127
+ }
128
+ touchStartTime = now;
129
+ } else if (event.type === "touchend") {
130
+ const touchDuration = now - touchStartTime;
131
+ if (touchDuration < 300 && now - lastTouchEnd < 300) {
132
+ event.preventDefault();
133
+ event.stopPropagation();
134
+ return;
135
+ }
136
+ lastTouchEnd = now;
137
+ } else if (event.type === "touchmove") {
138
+ if (event.touches.length > 1) {
139
+ event.preventDefault();
140
+ event.stopPropagation();
141
+ return;
142
+ }
143
+ }
144
+ }
145
+ if (event instanceof WheelEvent && (event.ctrlKey || event.metaKey)) {
146
+ event.preventDefault();
147
+ event.stopPropagation();
148
+ return;
149
+ }
150
+ };
151
+ const options = { passive: false, capture: true };
152
+ document.addEventListener("touchstart", preventZoom, options);
153
+ document.addEventListener("touchmove", preventZoom, options);
154
+ document.addEventListener("touchend", preventZoom, options);
155
+ document.addEventListener("touchcancel", preventZoom, options);
156
+ document.addEventListener("wheel", preventZoom, options);
157
+ document.addEventListener("gesturestart", (e7) => {
158
+ e7.preventDefault();
159
+ e7.stopPropagation();
160
+ }, options);
161
+ document.addEventListener("gesturechange", (e7) => {
162
+ e7.preventDefault();
163
+ e7.stopPropagation();
164
+ }, options);
165
+ document.addEventListener("gestureend", (e7) => {
166
+ e7.preventDefault();
167
+ e7.stopPropagation();
168
+ }, options);
169
+ }
84
170
 
85
171
  // dist/0-face/i18n.js
86
172
  var translationKeys = {};
@@ -1473,6 +1559,78 @@ var l3 = Signal.State;
1473
1559
  var o4 = Signal.Computed;
1474
1560
  var r4 = (l5, o9) => new Signal.State(l5, o9);
1475
1561
 
1562
+ // dist/0-face/scaling.js
1563
+ var defaultConfig = {
1564
+ mode: "auto",
1565
+ baseWidth: 280,
1566
+ minScale: 0.75,
1567
+ maxScale: 2
1568
+ };
1569
+ var scalingFactor = r4(1);
1570
+ var scalingConfig = r4(defaultConfig);
1571
+ function calculateScalingFactor(viewportWidth, config = scalingConfig.get()) {
1572
+ if (config.mode === "fixed") {
1573
+ return 1;
1574
+ }
1575
+ const rawScale = viewportWidth / config.baseWidth;
1576
+ const clampedScale = Math.max(config.minScale, Math.min(config.maxScale, rawScale));
1577
+ return Number(clampedScale.toFixed(3));
1578
+ }
1579
+ function setScalingConfig(config) {
1580
+ const currentConfig = scalingConfig.get();
1581
+ const newConfig = { ...currentConfig, ...config };
1582
+ scalingConfig.set(newConfig);
1583
+ if (typeof window !== "undefined") {
1584
+ updateScalingFactor();
1585
+ }
1586
+ }
1587
+ function updateScalingFactor() {
1588
+ if (typeof window === "undefined" || typeof document === "undefined") {
1589
+ return;
1590
+ }
1591
+ const viewportWidth = document.documentElement.clientWidth;
1592
+ const config = scalingConfig.get();
1593
+ const newFactor = calculateScalingFactor(viewportWidth, config);
1594
+ scalingFactor.set(newFactor);
1595
+ document.documentElement.style.setProperty("--sf", newFactor.toString());
1596
+ window.dispatchEvent(new CustomEvent("scaling-changed", {
1597
+ detail: { scalingFactor: newFactor, config }
1598
+ }));
1599
+ }
1600
+ function getScalingFactor() {
1601
+ return scalingFactor.get();
1602
+ }
1603
+ function scale(designPx) {
1604
+ return designPx * scalingFactor.get();
1605
+ }
1606
+ function unscale(scaledPx) {
1607
+ const factor = scalingFactor.get();
1608
+ return factor === 0 ? scaledPx : scaledPx / factor;
1609
+ }
1610
+ function initScaling() {
1611
+ if (typeof window === "undefined") {
1612
+ return;
1613
+ }
1614
+ updateScalingFactor();
1615
+ let resizeTimeout;
1616
+ window.addEventListener("resize", () => {
1617
+ clearTimeout(resizeTimeout);
1618
+ resizeTimeout = setTimeout(() => {
1619
+ updateScalingFactor();
1620
+ }, 100);
1621
+ });
1622
+ window.addEventListener("orientationchange", () => {
1623
+ setTimeout(updateScalingFactor, 100);
1624
+ });
1625
+ }
1626
+ if (typeof window !== "undefined") {
1627
+ if (document.readyState === "loading") {
1628
+ document.addEventListener("DOMContentLoaded", initScaling);
1629
+ } else {
1630
+ initScaling();
1631
+ }
1632
+ }
1633
+
1476
1634
  // dist/0-face/theme.js
1477
1635
  function getInitialTheme() {
1478
1636
  if (typeof window === "undefined") {
@@ -1811,6 +1969,9 @@ var o7 = s5.litElementPolyfillSupport;
1811
1969
  o7?.({ LitElement: i6 });
1812
1970
  (s5.litElementVersions ?? (s5.litElementVersions = [])).push("4.2.1");
1813
1971
 
1972
+ // dist/2-core/styles/ds-text.css?inline
1973
+ var ds_text_default = {};
1974
+
1814
1975
  // dist/2-core/ds-text.js
1815
1976
  var Text = class extends i6 {
1816
1977
  static get properties() {
@@ -1900,36 +2061,12 @@ var Text = class extends i6 {
1900
2061
  return x`<span>${this._text || this.defaultValue || this.key}</span>`;
1901
2062
  }
1902
2063
  };
1903
- Text.styles = i4`
1904
- :host {
1905
- display: inline;
1906
- font-family: var(--typeface-regular);
1907
- font-size: var(--type-size-default);
1908
- font-weight: var(--type-weight-default);
1909
- line-height: calc(var(--type-lineheight-default) * var(--sf));
1910
- letter-spacing: calc(var(--type-letterspacing-default) * var(--sf));
1911
- text-align: var(--text-align-default);
1912
- text-transform: var(--text-transform-default);
1913
- text-decoration: var(--text-decoration-default);
1914
- }
1915
-
1916
- :host([data-language="ja"]) {
1917
- font-family: var(--typeface-regular-jp);
1918
- }
1919
-
1920
- :host([data-language="zh"]),
1921
- :host([data-language="zh-hant"]) {
1922
- font-family: var(--typeface-regular-zh-hant);
1923
- font-weight: 800;
1924
- }
1925
-
1926
- :host([data-language="zh-hans"]) {
1927
- font-family: var(--typeface-regular-zh-hans);
1928
- font-weight: 800;
1929
- }
1930
- `;
2064
+ Text.styles = r5(ds_text_default);
1931
2065
  customElements.define("ds-text", Text);
1932
2066
 
2067
+ // dist/2-core/styles/ds-button.css?inline
2068
+ var ds_button_default = {};
2069
+
1933
2070
  // dist/2-core/ds-button.js
1934
2071
  var Button = class extends i6 {
1935
2072
  constructor() {
@@ -2002,74 +2139,12 @@ Button.properties = {
2002
2139
  href: { type: String },
2003
2140
  _loading: { type: Boolean, state: true }
2004
2141
  };
2005
- Button.styles = i4`
2006
- button {
2007
- max-height: calc(var(--08) * var(--sf));
2008
- display: inline-flex;
2009
- align-items: center;
2010
- justify-content: center;
2011
- border: none;
2012
- cursor: pointer;
2013
- padding: 0 calc(0.5px * var(--sf));
2014
- color: var(--button-text-color);
2015
- font-family: var(--typeface-regular);
2016
- }
2017
-
2018
- button.title {
2019
- background-color: var(--button-background-color-secondary);
2020
- color: var(--button-text-color);
2021
- }
2022
-
2023
- button.primary {
2024
- background-color: var(--accent-color);
2025
- color: var(--button-text-color);
2026
- text-decoration-line: none;
2027
- font-family: var(--typeface-regular);
2028
- }
2029
-
2030
- button.secondary {
2031
- background-color: var(--button-background-color-secondary);
2032
- color: var(--button-text-color);
2033
- font-family: var(--typeface-regular);
2034
- }
2035
-
2036
- button.text {
2037
- background-color: transparent;
2038
- color: var(--button-color, var(--button-text-color));
2039
- font-family: var(--typeface-regular);
2040
- padding: 0;
2041
- text-decoration: none;
2042
- }
2043
-
2044
- button.text:hover {
2045
- opacity: 0.8;
2046
- text-decoration: none;
2047
- }
2048
-
2049
- button[bold] {
2050
- font-weight: var(--type-weight-bold);
2051
- font-family: var(--typeface-medium);
2052
- }
2053
-
2054
- button[no-background] {
2055
- background-color: transparent;
2056
- max-height: var(--1);
2057
- padding: 0;
2058
- color: var(--button-color, var(--button-text-color-secondary));
2059
- }
2060
-
2061
- button[no-background][bold] {
2062
- font-weight: var(--type-weight-bold);
2063
- font-family: var(--typeface-medium);
2064
- color: var(--button-color, var(--button-text-color-secondary));
2065
- }
2066
-
2067
- .loading {
2068
- opacity: 0.7;
2069
- }
2070
- `;
2142
+ Button.styles = r5(ds_button_default);
2071
2143
  customElements.define("ds-button", Button);
2072
2144
 
2145
+ // dist/2-core/styles/ds-banner.css?inline
2146
+ var ds_banner_default = {};
2147
+
2073
2148
  // dist/2-core/ds-banner.js
2074
2149
  var Banner = class extends i6 {
2075
2150
  constructor() {
@@ -2148,83 +2223,126 @@ Banner.properties = {
2148
2223
  version: { type: String },
2149
2224
  _showVersion: { type: Boolean, state: true }
2150
2225
  };
2151
- Banner.styles = i4`
2226
+ Banner.styles = r5(ds_banner_default);
2227
+ customElements.define("ds-banner", Banner);
2228
+
2229
+ // dist/2-core/ds-card.js
2230
+ var Card = class extends i6 {
2231
+ constructor() {
2232
+ super();
2233
+ this.variant = "default";
2234
+ this.elevation = 1;
2235
+ this.interactive = false;
2236
+ this.disabled = false;
2237
+ this.padding = "medium";
2238
+ }
2239
+ render() {
2240
+ return x`
2241
+ <div class="card-content" part="content">
2242
+ <slot></slot>
2243
+ </div>
2244
+ `;
2245
+ }
2246
+ };
2247
+ Card.properties = {
2248
+ variant: { type: String, reflect: true },
2249
+ elevation: { type: Number, reflect: true },
2250
+ interactive: { type: Boolean, reflect: true },
2251
+ disabled: { type: Boolean, reflect: true },
2252
+ padding: { type: String, reflect: true }
2253
+ };
2254
+ Card.styles = i4`
2152
2255
  :host {
2153
- display: flex;
2154
- position: absolute;
2155
- top: 0;
2156
- left: 0;
2157
- right: 0;
2158
- width: 100%;
2159
- height: calc(var(--unit) * var(--sf, 1));
2160
- align-items: center;
2161
- justify-content: space-between;
2162
- padding: 0 calc(var(--unit) * var(--sf, 1));
2256
+ display: block;
2163
2257
  box-sizing: border-box;
2164
- z-index: 9999;
2258
+ border-radius: calc(var(--025) * var(--sf, 1));
2259
+ background-color: var(--card-background, var(--surface-color, #fff));
2260
+ color: var(--text-color-primary);
2261
+ transition:
2262
+ box-shadow 0.2s ease,
2263
+ transform 0.2s ease;
2165
2264
  }
2166
2265
 
2167
- :host([variant="warning"]) {
2168
- background-color: color-mix(in srgb, var(--yellow) 50%, transparent);
2169
- --banner-text-color: color-mix(in srgb, var(--black) 50%, transparent);
2170
- --banner-action-color: var(--slate);
2266
+ :host([variant="default"]) {
2267
+ background-color: var(--card-background, var(--surface-color, #fff));
2268
+ border: 1px solid var(--border-color, rgba(0, 0, 0, 0.1));
2171
2269
  }
2172
2270
 
2173
- :host([variant="info"]) {
2174
- background-color: rgba(var(--sharp-blue-rgb, 0, 122, 255), 0.7);
2175
- --banner-text-color: var(--white, #fff);
2176
- --banner-action-color: var(--white, #fff);
2271
+ :host([variant="outlined"]) {
2272
+ background-color: transparent;
2273
+ border: 1px solid var(--border-color, rgba(0, 0, 0, 0.2));
2177
2274
  }
2178
2275
 
2179
- :host([variant="success"]) {
2180
- background-color: rgba(var(--apple-green-rgb, 52, 199, 89), 0.7);
2181
- --banner-text-color: var(--white, #fff);
2182
- --banner-action-color: var(--white, #fff);
2276
+ :host([variant="elevated"]) {
2277
+ background-color: var(--card-background, var(--surface-color, #fff));
2278
+ border: none;
2279
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
2183
2280
  }
2184
2281
 
2185
- :host([variant="error"]) {
2186
- background-color: rgba(var(--tuned-red-rgb, 255, 59, 48), 0.7);
2187
- --banner-text-color: var(--white, #fff);
2188
- --banner-action-color: var(--slate, #1e1e1e);
2282
+ :host([variant="filled"]) {
2283
+ background-color: var(
2284
+ --card-background-filled,
2285
+ var(--surface-color-secondary, #f5f5f5)
2286
+ );
2287
+ border: none;
2189
2288
  }
2190
2289
 
2191
- .text-wrapper {
2192
- flex: 1;
2193
- cursor: pointer;
2194
- user-select: none;
2290
+ :host([elevation="0"]) {
2291
+ box-shadow: none;
2195
2292
  }
2196
2293
 
2197
- .text-wrapper ds-text,
2198
- .text-wrapper .version {
2199
- color: var(--banner-text-color);
2294
+ :host([elevation="1"]) {
2295
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
2200
2296
  }
2201
2297
 
2202
- .action-wrapper {
2203
- font-size: calc(12px * var(--sf, 1));
2298
+ :host([elevation="2"]) {
2299
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.12);
2204
2300
  }
2205
2301
 
2206
- .action-wrapper a {
2207
- color: var(--banner-action-color);
2208
- text-decoration: none;
2209
- font-family: var(--typeface-regular);
2210
- font-size: calc(12px * var(--sf, 1));
2302
+ :host([elevation="3"]) {
2303
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.16);
2304
+ }
2305
+
2306
+ :host([interactive]) {
2211
2307
  cursor: pointer;
2212
- pointer-events: auto;
2213
- display: inline-block;
2214
2308
  }
2215
2309
 
2216
- .action-wrapper a:hover {
2217
- opacity: 0.8;
2310
+ :host([interactive]:hover:not([disabled])) {
2311
+ transform: translateY(-2px);
2312
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
2218
2313
  }
2219
2314
 
2220
- .action-wrapper ds-text {
2221
- color: var(--banner-action-color);
2222
- font-family: var(--typeface-regular);
2223
- font-size: calc(12px * var(--sf, 1));
2315
+ :host([interactive]:active:not([disabled])) {
2316
+ transform: translateY(0);
2317
+ }
2318
+
2319
+ :host([disabled]) {
2320
+ opacity: 0.5;
2224
2321
  pointer-events: none;
2225
2322
  }
2323
+
2324
+ :host([padding="none"]) {
2325
+ padding: 0;
2326
+ }
2327
+
2328
+ :host([padding="small"]) {
2329
+ padding: calc(var(--025) * var(--sf, 1));
2330
+ }
2331
+
2332
+ :host([padding="medium"]) {
2333
+ padding: calc(var(--05) * var(--sf, 1));
2334
+ }
2335
+
2336
+ :host([padding="large"]) {
2337
+ padding: calc(var(--1) * var(--sf, 1));
2338
+ }
2339
+
2340
+ .card-content {
2341
+ width: 100%;
2342
+ height: 100%;
2343
+ }
2226
2344
  `;
2227
- customElements.define("ds-banner", Banner);
2345
+ customElements.define("ds-card", Card);
2228
2346
 
2229
2347
  // node_modules/lit-html/directives/unsafe-html.js
2230
2348
  var e6 = class extends i2 {
@@ -2244,6 +2362,9 @@ var e6 = class extends i2 {
2244
2362
  e6.directiveName = "unsafeHTML", e6.resultType = 1;
2245
2363
  var o8 = e(e6);
2246
2364
 
2365
+ // dist/2-core/styles/ds-icon.css?inline
2366
+ var ds_icon_default = {};
2367
+
2247
2368
  // dist/2-core/ds-icon.js
2248
2369
  var Icon = class _Icon extends i6 {
2249
2370
  get type() {
@@ -2479,38 +2600,7 @@ var Icon = class _Icon extends i6 {
2479
2600
  Icon.properties = {
2480
2601
  type: { type: String, reflect: true }
2481
2602
  };
2482
- Icon.styles = i4`
2483
- :host {
2484
- display: inline-flex;
2485
- justify-content: center;
2486
- align-items: center;
2487
- width: calc(16px * var(--sf));
2488
- height: calc(16px * var(--sf));
2489
- }
2490
-
2491
- svg {
2492
- width: 100%;
2493
- height: 100%;
2494
- fill: var(--icon-color, currentColor);
2495
- }
2496
-
2497
- path {
2498
- fill: var(--icon-color, currentColor);
2499
- }
2500
-
2501
- .icon-container {
2502
- display: flex;
2503
- justify-content: center;
2504
- align-items: center;
2505
- width: calc(16px * var(--sf));
2506
- height: calc(16px * var(--sf));
2507
- }
2508
-
2509
- /* Notes style color variable for future implementation */
2510
- :host {
2511
- --notes-style-color: #ffb6b9;
2512
- }
2513
- `;
2603
+ Icon.styles = r5(ds_icon_default);
2514
2604
  Icon.iconNameToSvgMap = (() => {
2515
2605
  try {
2516
2606
  const modules = import.meta.glob("../x Icon/*.svg", {
@@ -2534,6 +2624,9 @@ Icon.iconNameToSvgMap = (() => {
2534
2624
  customElements.define("ds-icon", Icon);
2535
2625
  console.log("Icon component registered with custom elements registry");
2536
2626
 
2627
+ // dist/2-core/styles/ds-cycle.css?inline
2628
+ var ds_cycle_default = {};
2629
+
2537
2630
  // dist/2-core/ds-cycle.js
2538
2631
  var saveAccentColor = (color) => {
2539
2632
  localStorage.setItem("accentColor", color);
@@ -2918,28 +3011,24 @@ var Cycle = class extends i6 {
2918
3011
  this.setupInitialValue();
2919
3012
  }
2920
3013
  };
2921
- Cycle.styles = i4`
2922
- :host {
2923
- display: inline-flex;
2924
- align-items: center;
2925
- }
3014
+ Cycle.styles = r5(ds_cycle_default);
3015
+ customElements.define("ds-cycle", Cycle);
2926
3016
 
2927
- .cycle {
2928
- display: inline-flex;
2929
- align-items: center;
2930
- gap: var(--025);
2931
- }
3017
+ // dist/2-core/styles/ds-date.css?inline
3018
+ var ds_date_default = {};
2932
3019
 
2933
- .color-preview {
2934
- width: var(--05);
2935
- height: var(--05);
2936
- border-radius: 999px;
2937
- border: 1px solid
2938
- color-mix(in srgb, var(--text-color-primary) 20%, transparent);
2939
- flex: 0 0 auto;
2940
- }
2941
- `;
2942
- customElements.define("ds-cycle", Cycle);
3020
+ // dist/2-core/ds-date.js
3021
+ var DateComponent = class extends i6 {
3022
+ render() {
3023
+ const year = (/* @__PURE__ */ new Date()).getFullYear();
3024
+ return x`<span>${year}</span>`;
3025
+ }
3026
+ };
3027
+ DateComponent.styles = r5(ds_date_default);
3028
+ customElements.define("ds-date", DateComponent);
3029
+
3030
+ // dist/2-core/styles/ds-gap.css?inline
3031
+ var ds_gap_default = {};
2943
3032
 
2944
3033
  // dist/2-core/ds-gap.js
2945
3034
  var Gap = class extends i6 {
@@ -2955,81 +3044,253 @@ Gap.properties = {
2955
3044
  /** Raw scale token selector ("01", "025", "05", "08", "1", "2", "3", "4", "8", "12") */
2956
3045
  size: { type: String, reflect: true }
2957
3046
  };
2958
- Gap.styles = i4`
3047
+ Gap.styles = r5(ds_gap_default);
3048
+ customElements.define("ds-gap", Gap);
3049
+
3050
+ // dist/2-core/ds-input.js
3051
+ var Input = class extends i6 {
3052
+ constructor() {
3053
+ super();
3054
+ this.type = "text";
3055
+ this.name = "";
3056
+ this.value = "";
3057
+ this.placeholder = "";
3058
+ this.placeholderKey = "";
3059
+ this.label = "";
3060
+ this.labelKey = "";
3061
+ this.disabled = false;
3062
+ this.readonly = false;
3063
+ this.required = false;
3064
+ this.autofocus = false;
3065
+ this.autocomplete = "off";
3066
+ this.pattern = "";
3067
+ this.minlength = 0;
3068
+ this.maxlength = 0;
3069
+ this.min = "";
3070
+ this.max = "";
3071
+ this.step = "";
3072
+ this.variant = "default";
3073
+ this.error = "";
3074
+ this.errorKey = "";
3075
+ this._focused = false;
3076
+ }
3077
+ _handleInput(e7) {
3078
+ const target = e7.target;
3079
+ this.value = target.value;
3080
+ this.dispatchEvent(new CustomEvent("input-change", {
3081
+ detail: { value: this.value, name: this.name },
3082
+ bubbles: true
3083
+ }));
3084
+ }
3085
+ _handleFocus() {
3086
+ this._focused = true;
3087
+ this.dispatchEvent(new CustomEvent("input-focus", { bubbles: true }));
3088
+ }
3089
+ _handleBlur() {
3090
+ this._focused = false;
3091
+ this.dispatchEvent(new CustomEvent("input-blur", { bubbles: true }));
3092
+ }
3093
+ /**
3094
+ * Focus the input element
3095
+ */
3096
+ focus() {
3097
+ const input = this.shadowRoot?.querySelector("input");
3098
+ input?.focus();
3099
+ }
3100
+ /**
3101
+ * Blur the input element
3102
+ */
3103
+ blur() {
3104
+ const input = this.shadowRoot?.querySelector("input");
3105
+ input?.blur();
3106
+ }
3107
+ /**
3108
+ * Select all text in the input
3109
+ */
3110
+ select() {
3111
+ const input = this.shadowRoot?.querySelector("input");
3112
+ input?.select();
3113
+ }
3114
+ render() {
3115
+ const hasError = Boolean(this.error || this.errorKey);
3116
+ return x`
3117
+ <div class="input-wrapper">
3118
+ ${this.label || this.labelKey ? x`
3119
+ <label for="input">
3120
+ ${this.labelKey ? x`<ds-text .key=${this.labelKey}></ds-text>` : this.label}
3121
+ </label>
3122
+ ` : null}
3123
+
3124
+ <div class="input-container">
3125
+ <input
3126
+ id="input"
3127
+ .type=${this.type}
3128
+ .name=${this.name}
3129
+ .value=${this.value}
3130
+ .placeholder=${this.placeholder}
3131
+ ?disabled=${this.disabled}
3132
+ ?readonly=${this.readonly}
3133
+ ?required=${this.required}
3134
+ ?autofocus=${this.autofocus}
3135
+ autocomplete=${this.autocomplete}
3136
+ pattern=${this.pattern || ""}
3137
+ minlength=${this.minlength || ""}
3138
+ maxlength=${this.maxlength || ""}
3139
+ min=${this.min}
3140
+ max=${this.max}
3141
+ step=${this.step}
3142
+ class=${hasError ? "has-error" : ""}
3143
+ @input=${this._handleInput}
3144
+ @focus=${this._handleFocus}
3145
+ @blur=${this._handleBlur}
3146
+ />
3147
+ </div>
3148
+
3149
+ ${hasError ? x`
3150
+ <div class="error-message">
3151
+ ${this.errorKey ? x`<ds-text .key=${this.errorKey}></ds-text>` : this.error}
3152
+ </div>
3153
+ ` : null}
3154
+ </div>
3155
+ `;
3156
+ }
3157
+ };
3158
+ Input.properties = {
3159
+ type: { type: String, reflect: true },
3160
+ name: { type: String, reflect: true },
3161
+ value: { type: String },
3162
+ placeholder: { type: String },
3163
+ placeholderKey: { type: String, attribute: "placeholder-key" },
3164
+ label: { type: String },
3165
+ labelKey: { type: String, attribute: "label-key" },
3166
+ disabled: { type: Boolean, reflect: true },
3167
+ readonly: { type: Boolean, reflect: true },
3168
+ required: { type: Boolean, reflect: true },
3169
+ autofocus: { type: Boolean },
3170
+ autocomplete: { type: String },
3171
+ pattern: { type: String },
3172
+ minlength: { type: Number },
3173
+ maxlength: { type: Number },
3174
+ min: { type: String },
3175
+ max: { type: String },
3176
+ step: { type: String },
3177
+ variant: { type: String, reflect: true },
3178
+ error: { type: String },
3179
+ errorKey: { type: String, attribute: "error-key" },
3180
+ _focused: { type: Boolean, state: true }
3181
+ };
3182
+ Input.styles = i4`
2959
3183
  :host {
2960
3184
  display: block;
2961
3185
  width: 100%;
2962
- /* Default if no attribute is provided */
2963
- --gap-size: var(--unit);
2964
- height: var(--gap-size);
2965
- flex: 0 0 auto;
2966
3186
  }
2967
3187
 
2968
- /* Semantic sizing tokens (from DS1/1-root/one.css) */
2969
- :host([tenth]) {
2970
- --gap-size: var(--tenth);
2971
- }
2972
- :host([quarter]) {
2973
- --gap-size: var(--quarter);
2974
- }
2975
- :host([half]) {
2976
- --gap-size: var(--half);
2977
- }
2978
- :host([eight-tenth]) {
2979
- --gap-size: var(--eight-tenth);
2980
- }
2981
- :host([unit]) {
2982
- --gap-size: var(--unit);
3188
+ .input-wrapper {
3189
+ display: flex;
3190
+ flex-direction: column;
3191
+ gap: calc(var(--025) * var(--sf, 1));
3192
+ width: 100%;
2983
3193
  }
2984
- :host([double]) {
2985
- --gap-size: var(--double);
3194
+
3195
+ label {
3196
+ font-family: var(--typeface-regular);
3197
+ font-size: calc(12px * var(--sf, 1));
3198
+ color: var(--text-color-secondary);
2986
3199
  }
2987
- :host([triple]) {
2988
- --gap-size: var(--triple);
3200
+
3201
+ .input-container {
3202
+ position: relative;
3203
+ display: flex;
3204
+ align-items: center;
3205
+ width: 100%;
2989
3206
  }
2990
- :host([quad]) {
2991
- --gap-size: var(--quad);
3207
+
3208
+ input {
3209
+ width: 100%;
3210
+ height: calc(var(--1) * var(--sf, 1));
3211
+ padding: 0 calc(var(--025) * var(--sf, 1));
3212
+ font-family: var(--typeface-regular);
3213
+ font-size: calc(14px * var(--sf, 1));
3214
+ color: var(--text-color-primary);
3215
+ background-color: var(--input-background, transparent);
3216
+ border: 1px solid var(--input-border-color, var(--border-color, #ccc));
3217
+ border-radius: calc(var(--025) * var(--sf, 1));
3218
+ outline: none;
3219
+ transition:
3220
+ border-color 0.2s ease,
3221
+ box-shadow 0.2s ease;
3222
+ box-sizing: border-box;
2992
3223
  }
2993
- :host([oct]) {
2994
- --gap-size: var(--oct);
3224
+
3225
+ input::placeholder {
3226
+ color: var(--text-color-tertiary, #999);
2995
3227
  }
2996
- :host([dozen]) {
2997
- --gap-size: var(--dozen);
3228
+
3229
+ input:focus {
3230
+ border-color: var(--accent-color, #007aff);
3231
+ box-shadow: 0 0 0 2px var(--input-focus-ring, rgba(0, 122, 255, 0.2));
2998
3232
  }
2999
3233
 
3000
- /* Raw scale sizing (size="...") */
3001
- :host([size="01"]) {
3002
- --gap-size: var(--01);
3234
+ input:disabled {
3235
+ opacity: 0.5;
3236
+ cursor: not-allowed;
3237
+ background-color: var(--input-disabled-background, #f5f5f5);
3003
3238
  }
3004
- :host([size="025"]) {
3005
- --gap-size: var(--025);
3239
+
3240
+ input:read-only {
3241
+ background-color: var(--input-readonly-background, #fafafa);
3006
3242
  }
3007
- :host([size="05"]) {
3008
- --gap-size: var(--05);
3243
+
3244
+ :host([variant="filled"]) input {
3245
+ background-color: var(
3246
+ --input-filled-background,
3247
+ var(--surface-color-secondary, #f5f5f5)
3248
+ );
3249
+ border: none;
3250
+ border-bottom: 2px solid var(--border-color, #ccc);
3251
+ border-radius: calc(var(--025) * var(--sf, 1))
3252
+ calc(var(--025) * var(--sf, 1)) 0 0;
3009
3253
  }
3010
- :host([size="08"]) {
3011
- --gap-size: var(--08);
3254
+
3255
+ :host([variant="filled"]) input:focus {
3256
+ border-bottom-color: var(--accent-color, #007aff);
3257
+ box-shadow: none;
3012
3258
  }
3013
- :host([size="1"]) {
3014
- --gap-size: var(--1);
3259
+
3260
+ :host([variant="outlined"]) input {
3261
+ background-color: transparent;
3262
+ border: 2px solid var(--border-color, #ccc);
3015
3263
  }
3016
- :host([size="2"]) {
3017
- --gap-size: var(--2);
3264
+
3265
+ :host([variant="outlined"]) input:focus {
3266
+ border-color: var(--accent-color, #007aff);
3018
3267
  }
3019
- :host([size="3"]) {
3020
- --gap-size: var(--3);
3268
+
3269
+ .error-message {
3270
+ font-family: var(--typeface-regular);
3271
+ font-size: calc(12px * var(--sf, 1));
3272
+ color: var(--error-color, #ff3b30);
3273
+ margin-top: calc(var(--025) * var(--sf, 1));
3021
3274
  }
3022
- :host([size="4"]) {
3023
- --gap-size: var(--4);
3275
+
3276
+ :host([required]) label::after {
3277
+ content: " *";
3278
+ color: var(--error-color, #ff3b30);
3024
3279
  }
3025
- :host([size="8"]) {
3026
- --gap-size: var(--8);
3280
+
3281
+ /* Error state */
3282
+ input.has-error {
3283
+ border-color: var(--error-color, #ff3b30);
3027
3284
  }
3028
- :host([size="12"]) {
3029
- --gap-size: var(--12);
3285
+
3286
+ input.has-error:focus {
3287
+ box-shadow: 0 0 0 2px rgba(255, 59, 48, 0.2);
3030
3288
  }
3031
3289
  `;
3032
- customElements.define("ds-gap", Gap);
3290
+ customElements.define("ds-input", Input);
3291
+
3292
+ // dist/2-core/styles/ds-tooltip.css?inline
3293
+ var ds_tooltip_default = {};
3033
3294
 
3034
3295
  // dist/2-core/ds-tooltip.js
3035
3296
  var Tooltip = class extends i6 {
@@ -3119,88 +3380,11 @@ Tooltip.properties = {
3119
3380
  _text: { state: true },
3120
3381
  _visible: { state: true }
3121
3382
  };
3122
- Tooltip.styles = i4`
3123
- :host {
3124
- position: relative;
3125
- display: inline-block;
3126
- }
3383
+ Tooltip.styles = r5(ds_tooltip_default);
3384
+ customElements.define("ds-tooltip", Tooltip);
3127
3385
 
3128
- .slot-wrapper {
3129
- display: inline-flex;
3130
- align-items: center;
3131
- }
3132
-
3133
- .bubble {
3134
- display: flex;
3135
- align-items: center;
3136
- justify-content: center;
3137
- position: absolute;
3138
- left: 50%;
3139
- bottom: 100%;
3140
- transform: translate(-50%, calc(-2px * var(--sf)));
3141
- z-index: 1000;
3142
- pointer-events: none;
3143
- height: calc(var(--08) * var(--sf));
3144
- opacity: 0;
3145
- transition:
3146
- opacity 120ms ease,
3147
- transform 120ms ease;
3148
- background-color: light-dark(var(--black), var(--white));
3149
- color: light-dark(var(--white), var(--black));
3150
- border-radius: 0;
3151
- font-size: var(--type-size-default);
3152
- padding: 0px calc(1px * var(--sf));
3153
- font-family: var(
3154
- --typeface-regular,
3155
- -apple-system,
3156
- BlinkMacSystemFont,
3157
- "Segoe UI",
3158
- Roboto,
3159
- sans-serif
3160
- );
3161
- font-weight: 500;
3162
- white-space: nowrap;
3163
- min-width: max-content;
3164
- }
3165
-
3166
- .bubble.visible {
3167
- opacity: 1;
3168
- }
3169
- `;
3170
- customElements.define("ds-tooltip", Tooltip);
3171
-
3172
- // dist/2-core/ds-date.js
3173
- var DateComponent = class extends i6 {
3174
- render() {
3175
- const year = (/* @__PURE__ */ new Date()).getFullYear();
3176
- return x`<span>${year}</span>`;
3177
- }
3178
- };
3179
- DateComponent.styles = i4`
3180
- :host {
3181
- display: inline;
3182
- font-family: var(--typeface-regular, var(--typeface-regular-regular));
3183
- font-size: inherit;
3184
- color: inherit;
3185
- }
3186
- `;
3187
- customElements.define("ds-date", DateComponent);
3188
-
3189
- // dist/3-unit/ds-list.js
3190
- var List = class extends i6 {
3191
- render() {
3192
- return x`<slot></slot>`;
3193
- }
3194
- };
3195
- List.styles = i4`
3196
- :host {
3197
- display: flex;
3198
- flex-direction: column;
3199
- gap: 0;
3200
- width: 100%;
3201
- }
3202
- `;
3203
- customElements.define("ds-list", List);
3386
+ // dist/3-unit/styles/ds-row.css?inline
3387
+ var ds_row_default = {};
3204
3388
 
3205
3389
  // dist/3-unit/ds-row.js
3206
3390
  var Row = class extends i6 {
@@ -3215,26 +3399,12 @@ var Row = class extends i6 {
3215
3399
  Row.properties = {
3216
3400
  type: { type: String, reflect: true }
3217
3401
  };
3218
- Row.styles = i4`
3219
- :host {
3220
- display: flex;
3221
- align-items: end;
3222
- width: calc(240px * var(--sf));
3223
- }
3224
-
3225
- :host([type="fill"]) {
3226
- justify-content: space-between;
3227
- height: calc(var(--1) * var(--sf));
3228
- }
3229
-
3230
- :host([type="centered"]) {
3231
- justify-content: center;
3232
- height: calc(var(--1) * var(--sf));
3233
- gap: calc(var(--025) * var(--sf));
3234
- }
3235
- `;
3402
+ Row.styles = r5(ds_row_default);
3236
3403
  customElements.define("ds-row", Row);
3237
3404
 
3405
+ // dist/3-unit/styles/ds-accordion.css?inline
3406
+ var ds_accordion_default = {};
3407
+
3238
3408
  // dist/3-unit/ds-accordion.js
3239
3409
  var Accordion = class extends i6 {
3240
3410
  constructor() {
@@ -3277,52 +3447,235 @@ Accordion.properties = {
3277
3447
  detailsKey: { type: String, attribute: "details-key" },
3278
3448
  open: { type: Boolean, reflect: true }
3279
3449
  };
3280
- Accordion.styles = i4`
3450
+ Accordion.styles = r5(ds_accordion_default);
3451
+ customElements.define("ds-accordion", Accordion);
3452
+
3453
+ // dist/3-unit/ds-form.js
3454
+ var Form = class extends i6 {
3455
+ constructor() {
3456
+ super();
3457
+ this.action = "";
3458
+ this.method = "post";
3459
+ this.name = "";
3460
+ this.novalidate = false;
3461
+ this.autocomplete = "on";
3462
+ this._isSubmitting = false;
3463
+ }
3464
+ /**
3465
+ * Get all form data as an object
3466
+ */
3467
+ getFormData() {
3468
+ const data = {};
3469
+ const slot = this.shadowRoot?.querySelector("slot");
3470
+ const elements = slot?.assignedElements({ flatten: true }) || [];
3471
+ for (const element of elements) {
3472
+ this._collectFormData(element, data);
3473
+ }
3474
+ return data;
3475
+ }
3476
+ _collectFormData(element, data) {
3477
+ const name = element.getAttribute("name") || element.name;
3478
+ if (name) {
3479
+ const value = element.value;
3480
+ if (value !== void 0) {
3481
+ if (element instanceof HTMLInputElement && (element.type === "checkbox" || element.type === "radio")) {
3482
+ if (element.type === "checkbox") {
3483
+ data[name] = element.checked;
3484
+ } else if (element.type === "radio" && element.checked) {
3485
+ data[name] = value;
3486
+ }
3487
+ } else {
3488
+ data[name] = value;
3489
+ }
3490
+ }
3491
+ }
3492
+ const children = element.shadowRoot?.querySelectorAll("*") || element.querySelectorAll("*");
3493
+ children.forEach((child) => {
3494
+ this._collectFormData(child, data);
3495
+ });
3496
+ }
3497
+ /**
3498
+ * Validate the form
3499
+ */
3500
+ validate() {
3501
+ const result = {
3502
+ valid: true,
3503
+ errors: {}
3504
+ };
3505
+ if (this.novalidate) {
3506
+ return result;
3507
+ }
3508
+ const slot = this.shadowRoot?.querySelector("slot");
3509
+ const elements = slot?.assignedElements({ flatten: true }) || [];
3510
+ for (const element of elements) {
3511
+ this._validateElement(element, result);
3512
+ }
3513
+ return result;
3514
+ }
3515
+ _validateElement(element, result) {
3516
+ const name = element.getAttribute("name") || element.name;
3517
+ if (element.tagName.toLowerCase() === "ds-input") {
3518
+ const input = element;
3519
+ if (input.required && !input.value) {
3520
+ result.valid = false;
3521
+ result.errors[name || "unknown"] = "This field is required";
3522
+ }
3523
+ }
3524
+ if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement || element instanceof HTMLSelectElement) {
3525
+ if (!element.checkValidity()) {
3526
+ result.valid = false;
3527
+ result.errors[name || "unknown"] = element.validationMessage;
3528
+ }
3529
+ }
3530
+ const children = element.shadowRoot?.querySelectorAll("*") || element.querySelectorAll("*");
3531
+ children.forEach((child) => {
3532
+ this._validateElement(child, result);
3533
+ });
3534
+ }
3535
+ /**
3536
+ * Reset the form
3537
+ */
3538
+ reset() {
3539
+ const slot = this.shadowRoot?.querySelector("slot");
3540
+ const elements = slot?.assignedElements({ flatten: true }) || [];
3541
+ for (const element of elements) {
3542
+ this._resetElement(element);
3543
+ }
3544
+ this.dispatchEvent(new CustomEvent("form-reset", { bubbles: true }));
3545
+ }
3546
+ _resetElement(element) {
3547
+ if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement || element instanceof HTMLSelectElement) {
3548
+ if (element instanceof HTMLInputElement && element.type === "checkbox") {
3549
+ element.checked = false;
3550
+ } else {
3551
+ element.value = "";
3552
+ }
3553
+ }
3554
+ if (element.tagName.toLowerCase() === "ds-input") {
3555
+ element.value = "";
3556
+ }
3557
+ const children = element.shadowRoot?.querySelectorAll("*") || element.querySelectorAll("*");
3558
+ children.forEach((child) => {
3559
+ this._resetElement(child);
3560
+ });
3561
+ }
3562
+ /**
3563
+ * Submit the form
3564
+ */
3565
+ async submit() {
3566
+ if (this._isSubmitting)
3567
+ return;
3568
+ const validationResult = this.validate();
3569
+ if (!validationResult.valid) {
3570
+ this.dispatchEvent(new CustomEvent("form-invalid", {
3571
+ detail: validationResult.errors,
3572
+ bubbles: true
3573
+ }));
3574
+ return;
3575
+ }
3576
+ this._isSubmitting = true;
3577
+ const formData = this.getFormData();
3578
+ this.dispatchEvent(new CustomEvent("form-submit", {
3579
+ detail: { data: formData },
3580
+ bubbles: true
3581
+ }));
3582
+ if (this.action) {
3583
+ try {
3584
+ const response = await fetch(this.action, {
3585
+ method: this.method.toUpperCase(),
3586
+ headers: {
3587
+ "Content-Type": "application/json"
3588
+ },
3589
+ body: JSON.stringify(formData)
3590
+ });
3591
+ this.dispatchEvent(new CustomEvent("form-response", {
3592
+ detail: { response, data: formData },
3593
+ bubbles: true
3594
+ }));
3595
+ } catch (error) {
3596
+ this.dispatchEvent(new CustomEvent("form-error", {
3597
+ detail: { error, data: formData },
3598
+ bubbles: true
3599
+ }));
3600
+ }
3601
+ }
3602
+ this._isSubmitting = false;
3603
+ }
3604
+ _handleSubmit(e7) {
3605
+ e7.preventDefault();
3606
+ this.submit();
3607
+ }
3608
+ _handleKeydown(e7) {
3609
+ if (e7.key === "Enter" && !e7.shiftKey) {
3610
+ const target = e7.target;
3611
+ if (target.tagName.toLowerCase() !== "textarea") {
3612
+ e7.preventDefault();
3613
+ this.submit();
3614
+ }
3615
+ }
3616
+ }
3617
+ render() {
3618
+ return x`
3619
+ <form
3620
+ .action=${this.action}
3621
+ .method=${this.method}
3622
+ .name=${this.name}
3623
+ ?novalidate=${this.novalidate}
3624
+ autocomplete=${this.autocomplete}
3625
+ @submit=${this._handleSubmit}
3626
+ @keydown=${this._handleKeydown}
3627
+ >
3628
+ <slot></slot>
3629
+ </form>
3630
+ `;
3631
+ }
3632
+ };
3633
+ Form.properties = {
3634
+ action: { type: String },
3635
+ method: { type: String },
3636
+ name: { type: String },
3637
+ novalidate: { type: Boolean, reflect: true },
3638
+ autocomplete: { type: String },
3639
+ _isSubmitting: { type: Boolean, state: true }
3640
+ };
3641
+ Form.styles = i4`
3281
3642
  :host {
3282
3643
  display: block;
3283
- width: calc(240px * var(--sf));
3284
- color: var(--text-color-primary);
3285
- }
3286
-
3287
- details {
3288
3644
  width: 100%;
3289
3645
  }
3290
3646
 
3291
- summary {
3292
- cursor: pointer;
3293
- user-select: none;
3294
- list-style: none;
3295
- outline: none;
3296
- }
3297
-
3298
- summary::-webkit-details-marker {
3299
- display: none;
3647
+ form {
3648
+ display: flex;
3649
+ flex-direction: column;
3650
+ gap: calc(var(--05) * var(--sf, 1));
3651
+ width: 100%;
3300
3652
  }
3301
3653
 
3302
- .summaryRow {
3654
+ ::slotted(*) {
3303
3655
  width: 100%;
3304
3656
  }
3305
3657
 
3306
- ds-icon.chevron {
3307
- transform: rotate(0deg);
3308
- transition: transform 140ms ease;
3658
+ :host([disabled]) {
3659
+ opacity: 0.6;
3660
+ pointer-events: none;
3309
3661
  }
3662
+ `;
3663
+ customElements.define("ds-form", Form);
3310
3664
 
3311
- details[open] ds-icon.chevron {
3312
- transform: rotate(180deg);
3313
- }
3665
+ // dist/3-unit/styles/ds-list.css?inline
3666
+ var ds_list_default = {};
3314
3667
 
3315
- .detailsBody {
3316
- padding-top: calc(var(--half) * var(--sf));
3317
- }
3668
+ // dist/3-unit/ds-list.js
3669
+ var List = class extends i6 {
3670
+ render() {
3671
+ return x`<slot></slot>`;
3672
+ }
3673
+ };
3674
+ List.styles = r5(ds_list_default);
3675
+ customElements.define("ds-list", List);
3318
3676
 
3319
- .detailsText {
3320
- display: block;
3321
- white-space: normal;
3322
- text-align: left;
3323
- }
3324
- `;
3325
- customElements.define("ds-accordion", Accordion);
3677
+ // dist/3-unit/styles/ds-table.css?inline
3678
+ var ds_table_default = {};
3326
3679
 
3327
3680
  // dist/3-unit/ds-table.js
3328
3681
  var DsTable = class extends i6 {
@@ -3360,134 +3713,24 @@ DsTable.properties = {
3360
3713
  columns: { type: Array },
3361
3714
  showStatus: { type: Boolean, attribute: "show-status" }
3362
3715
  };
3363
- DsTable.styles = i4`
3364
- :host {
3365
- display: block;
3366
- width: 100%;
3367
- }
3368
-
3369
- .table-container {
3370
- display: flex;
3371
- flex-direction: column;
3372
- width: 100%;
3373
- }
3374
-
3375
- .table-header {
3376
- display: grid;
3377
- grid-template-columns: 160px 80px 80px 80px;
3378
- height: 20px;
3379
- width: 400px;
3380
- }
3381
-
3382
- .table-body {
3383
- display: grid;
3384
- grid-template-columns: 160px 80px 80px 80px;
3385
- border: 1px solid var(--black);
3386
- width: 400px;
3387
- }
3388
-
3389
- .header-cell {
3390
- height: 20px;
3391
- display: flex;
3392
- align-items: center;
3393
- justify-content: left;
3394
- padding: 0 2px;
3395
- font-family: var(--typeface-regular);
3396
- font-size: var(--type-size-default);
3397
- font-weight: var(--type-weight-default);
3398
- line-height: var(--type-lineheight-default);
3399
- color: var(--black);
3400
- letter-spacing: -0.26px;
3401
- }
3402
-
3403
- .data-cell {
3404
- height: 20px;
3405
- margin-top: -1px;
3406
- display: flex;
3407
- align-items: center;
3408
- justify-content: left;
3409
-
3410
- outline: 1px solid var(--black);
3411
-
3412
- font-family: var(--typeface-regular);
3413
- font-size: var(--type-size-default);
3414
- font-weight: var(--type-weight-default);
3415
- line-height: var(--type-lineheight-default);
3416
- color: var(--black);
3417
- letter-spacing: -0.26px;
3418
- }
3419
-
3420
- .status-cell {
3421
- background-color: var(--apple-green);
3422
- }
3423
-
3424
- .product-cell {
3425
- text-align: left;
3426
- justify-content: flex-start;
3427
- }
3428
-
3429
- .users-cell,
3430
- .retention-cell {
3431
- text-align: center;
3432
- }
3433
-
3434
- .status-cell {
3435
- text-align: center;
3436
- }
3437
-
3438
- /* Responsive adjustments */
3439
- @media (max-width: 480px) {
3440
- .table-header,
3441
- .table-body {
3442
- width: 100%;
3443
- grid-template-columns: 1fr 60px 60px 60px;
3444
- }
3445
- }
3446
- `;
3716
+ DsTable.styles = r5(ds_table_default);
3447
3717
  customElements.define("ds-table", DsTable);
3448
3718
 
3719
+ // dist/4-page/styles/ds-container.css?inline
3720
+ var ds_container_default = {};
3721
+
3449
3722
  // dist/4-page/ds-container.js
3450
3723
  var Container = class extends i6 {
3451
3724
  render() {
3452
3725
  return x`<slot></slot>`;
3453
3726
  }
3454
3727
  };
3455
- Container.styles = i4`
3456
- :host {
3457
- display: flex;
3458
- width: 100%;
3459
- max-width: 100%;
3460
- flex-direction: column;
3461
- background-color: var(--background-color);
3462
- box-sizing: border-box;
3463
- }
3464
-
3465
- /* Ensure children don't overflow */
3466
- :host ::slotted(*) {
3467
- max-width: 100%;
3468
- box-sizing: border-box;
3469
- }
3470
-
3471
- /* Mobile: 100% width */
3472
- @media (max-width: 820px) {
3473
- :host {
3474
- width: 100%;
3475
- max-width: 100%;
3476
- }
3477
- }
3478
-
3479
- /* Desktop: max-width 1000px, centered */
3480
- @media (min-width: 821px) {
3481
- :host {
3482
- max-width: 1000px;
3483
- margin-left: auto;
3484
- margin-right: auto;
3485
- width: 100%;
3486
- }
3487
- }
3488
- `;
3728
+ Container.styles = r5(ds_container_default);
3489
3729
  customElements.define("ds-container", Container);
3490
3730
 
3731
+ // dist/4-page/styles/ds-grid.css?inline
3732
+ var ds_grid_default = {};
3733
+
3491
3734
  // dist/4-page/ds-grid.js
3492
3735
  var Grid = class extends i6 {
3493
3736
  connectedCallback() {
@@ -3529,63 +3772,12 @@ var Grid = class extends i6 {
3529
3772
  Grid.properties = {
3530
3773
  align: { type: String }
3531
3774
  };
3532
- Grid.styles = i4`
3533
- :host {
3534
- margin-top: 0.5px !important;
3535
- margin-left: 0.5px !important;
3536
- display: grid;
3537
- width: 1440px;
3538
- height: 1280px;
3539
- grid-template-columns: repeat(auto-fill, 19px);
3540
- grid-template-rows: repeat(auto-fill, 19px);
3541
- gap: 1px;
3542
- row-rule: calc(1px * var(--sf)) solid var(--grid-color);
3543
- column-rule: calc(1px * var(--sf)) solid var(--grid-color);
3544
- outline: calc(1px * var(--sf)) solid var(--yellow);
3545
- position: fixed;
3546
- top: 0;
3547
- left: 50%;
3548
- transform: translateX(-50%);
3549
- pointer-events: none;
3550
- z-index: 300;
3551
- }
3552
-
3553
- /* DO NOT CHANGE THIS GRID CODE FOR MOBILE. ITS PERFECT FOR MOBILE. */
3554
- :host(.mobile) {
3555
- width: calc(100% - calc(1px * var(--sf)));
3556
- max-width: 100vw;
3557
- margin-left: 0.5px !important;
3558
- margin-top: 0 !important;
3559
- box-sizing: border-box;
3560
- position: fixed;
3561
- top: calc(0.5px * var(--sf));
3562
- left: 50%;
3563
- transform: translateX(-50%);
3564
- pointer-events: none;
3565
- z-index: 300;
3566
- gap: calc(1px * var(--sf));
3567
- grid-template-columns: repeat(14, calc(19px * var(--sf)));
3568
- grid-template-rows: repeat(auto-fill, calc(19px * var(--sf)));
3569
- }
3570
-
3571
- :host([align="left"]) {
3572
- left: 0;
3573
- transform: none;
3574
- }
3575
-
3576
- :host([align="center"]) {
3577
- left: 50%;
3578
- transform: translateX(-50%);
3579
- }
3580
-
3581
- :host([align="right"]) {
3582
- left: auto;
3583
- right: 0;
3584
- transform: none;
3585
- }
3586
- `;
3775
+ Grid.styles = r5(ds_grid_default);
3587
3776
  customElements.define("ds-grid", Grid);
3588
3777
 
3778
+ // dist/4-page/styles/ds-layout.css?inline
3779
+ var ds_layout_default = {};
3780
+
3589
3781
  // dist/4-page/ds-layout.js
3590
3782
  var Layout = class extends i6 {
3591
3783
  constructor() {
@@ -3597,57 +3789,184 @@ var Layout = class extends i6 {
3597
3789
  const isPortfolio = this.mode === "portfolio";
3598
3790
  const isCompany = this.mode === "company";
3599
3791
  const isApp = this.mode === "app";
3792
+ const isList = this.mode === "list";
3793
+ const isHome = this.mode === "home";
3600
3794
  return x`
3601
3795
  <slot></slot>
3602
3796
  ${isView ? x`
3603
3797
  <div class="view-overlay">
3604
- ${isApp ? x`
3798
+ ${isHome ? x`
3605
3799
  <div class="view-area view-banner">
3606
- <ds-text key="banner">banner</ds-text>
3800
+ <div class="grid-area-label">
3801
+ <ds-text key="banner" default-value="banner"></ds-text>
3802
+ </div>
3607
3803
  </div>
3608
3804
  <div class="view-area view-header">
3609
- <ds-text key="header">header</ds-text>
3805
+ <div class="grid-area-label">
3806
+ <ds-text key="header" default-value="header"></ds-text>
3807
+ </div>
3610
3808
  </div>
3611
-
3612
- <div class="view-area view-main">
3613
- <ds-text key="main">main</ds-text>
3809
+ <div class="view-area view-message">
3810
+ <div class="grid-area-label">
3811
+ <ds-text
3812
+ key="message"
3813
+ default-value="message"
3814
+ ></ds-text>
3815
+ </div>
3614
3816
  </div>
3615
- <div class="view-area view-footer">
3616
- <ds-text key="footer">footer</ds-text>
3817
+ <div class="view-area view-lists">
3818
+ <div class="grid-area-label">
3819
+ <ds-text key="lists" default-value="lists"></ds-text>
3820
+ </div>
3617
3821
  </div>
3618
- ` : isCompany ? x`
3619
- <div class="view-area view-header">
3620
- <ds-text key="header">header</ds-text>
3822
+ <div class="view-area view-footer">
3823
+ <div class="grid-area-label">
3824
+ <ds-text key="footer" default-value="footer"></ds-text>
3621
3825
  </div>
3622
- <div class="view-area view-content">
3623
- <ds-text key="content">content</ds-text>
3826
+ </div>
3827
+ ` : isList ? x`
3828
+ <div class="view-area view-banner">
3829
+ <div class="grid-area-label">
3830
+ <ds-text
3831
+ key="banner"
3832
+ default-value="banner"
3833
+ ></ds-text>
3834
+ </div>
3624
3835
  </div>
3625
- <div class="view-area view-footer">
3626
- <ds-text key="footer">footer</ds-text>
3836
+ <div class="view-area view-header">
3837
+ <div class="grid-area-label">
3838
+ <ds-text
3839
+ key="header"
3840
+ default-value="header"
3841
+ ></ds-text>
3842
+ </div>
3627
3843
  </div>
3628
- ` : isPortfolio ? x`
3629
- <div class="view-area view-square">
3630
- <ds-text key="square">square</ds-text>
3844
+ <div class="view-area view-board">
3845
+ <div class="grid-area-label">
3846
+ <ds-text key="board" default-value="board"></ds-text>
3631
3847
  </div>
3632
- <div class="view-area view-title">
3633
- <ds-text key="title">title</ds-text>
3848
+ </div>
3849
+ ` : isApp ? x`
3850
+ <div class="view-area view-banner">
3851
+ <div class="grid-area-label">
3852
+ <ds-text
3853
+ key="banner"
3854
+ default-value="banner"
3855
+ ></ds-text>
3856
+ </div>
3634
3857
  </div>
3635
3858
  <div class="view-area view-header">
3636
- <ds-text key="header">header</ds-text>
3859
+ <div class="grid-area-label">
3860
+ <ds-text
3861
+ key="header"
3862
+ default-value="header"
3863
+ ></ds-text>
3864
+ </div>
3637
3865
  </div>
3638
- <div class="view-area view-projects">
3639
- <ds-text key="projects">projects</ds-text>
3866
+ <div class="view-area view-main">
3867
+ <div class="grid-area-label">
3868
+ <ds-text key="main" default-value="main"></ds-text>
3869
+ </div>
3640
3870
  </div>
3641
- <div class="view-area view-bio">
3642
- <ds-text key="bio">bio</ds-text>
3643
- </div>
3644
- <div class="view-area view-nav">
3645
- <ds-text key="nav">nav</ds-text>
3871
+ <div class="view-area view-page-dots">
3872
+ <div class="grid-area-label">
3873
+ <ds-text
3874
+ key="pageDots"
3875
+ default-value="page-dots"
3876
+ ></ds-text>
3877
+ </div>
3646
3878
  </div>
3647
3879
  <div class="view-area view-footer">
3648
- <ds-text key="footer">footer</ds-text>
3880
+ <div class="grid-area-label">
3881
+ <ds-text
3882
+ key="footer"
3883
+ default-value="footer"
3884
+ ></ds-text>
3885
+ </div>
3649
3886
  </div>
3650
- ` : ""}
3887
+ ` : isCompany ? x`
3888
+ <div class="view-area view-header">
3889
+ <div class="grid-area-label">
3890
+ <ds-text
3891
+ key="header"
3892
+ default-value="header"
3893
+ ></ds-text>
3894
+ </div>
3895
+ </div>
3896
+ <div class="view-area view-content">
3897
+ <div class="grid-area-label">
3898
+ <ds-text
3899
+ key="content"
3900
+ default-value="content"
3901
+ ></ds-text>
3902
+ </div>
3903
+ </div>
3904
+ <div class="view-area view-footer">
3905
+ <div class="grid-area-label">
3906
+ <ds-text
3907
+ key="footer"
3908
+ default-value="footer"
3909
+ ></ds-text>
3910
+ </div>
3911
+ </div>
3912
+ ` : isPortfolio ? x`
3913
+ <div class="view-area view-square">
3914
+ <div class="grid-area-label">
3915
+ <ds-text
3916
+ key="square"
3917
+ default-value="square"
3918
+ ></ds-text>
3919
+ </div>
3920
+ </div>
3921
+ <div class="view-area view-title">
3922
+ <div class="grid-area-label">
3923
+ <ds-text
3924
+ key="title"
3925
+ default-value="title"
3926
+ ></ds-text>
3927
+ </div>
3928
+ </div>
3929
+ <div class="view-area view-header">
3930
+ <div class="grid-area-label">
3931
+ <ds-text
3932
+ key="header"
3933
+ default-value="header"
3934
+ ></ds-text>
3935
+ </div>
3936
+ </div>
3937
+ <div class="view-area view-projects">
3938
+ <div class="grid-area-label">
3939
+ <ds-text
3940
+ key="projects"
3941
+ default-value="projects"
3942
+ ></ds-text>
3943
+ </div>
3944
+ </div>
3945
+ <div class="view-area view-bio">
3946
+ <div class="grid-area-label">
3947
+ <ds-text
3948
+ key="bio"
3949
+ default-value="bio"
3950
+ ></ds-text>
3951
+ </div>
3952
+ </div>
3953
+ <div class="view-area view-nav">
3954
+ <div class="grid-area-label">
3955
+ <ds-text
3956
+ key="nav"
3957
+ default-value="nav"
3958
+ ></ds-text>
3959
+ </div>
3960
+ </div>
3961
+ <div class="view-area view-footer">
3962
+ <div class="grid-area-label">
3963
+ <ds-text
3964
+ key="footer"
3965
+ default-value="footer"
3966
+ ></ds-text>
3967
+ </div>
3968
+ </div>
3969
+ ` : ""}
3651
3970
  </div>
3652
3971
  ` : ""}
3653
3972
  `;
@@ -3658,7 +3977,9 @@ Layout.properties = {
3658
3977
  align: { type: String },
3659
3978
  view: { type: Boolean }
3660
3979
  };
3661
- Layout.styles = i4`
3980
+ Layout.styles = [
3981
+ r5(ds_layout_default),
3982
+ i4`
3662
3983
  :host {
3663
3984
  display: grid;
3664
3985
  position: relative;
@@ -3714,7 +4035,9 @@ Layout.styles = i4`
3714
4035
  :host([align="left"]),
3715
4036
  :host([mode="portfolio"][align="left"]),
3716
4037
  :host([mode="company"][align="left"]),
3717
- :host([mode="app"][align="left"]) {
4038
+ :host([mode="app"][align="left"]),
4039
+ :host([mode="list"][align="left"]),
4040
+ :host([mode="home"][align="left"]) {
3718
4041
  margin: 0;
3719
4042
  justify-self: start;
3720
4043
  }
@@ -3722,7 +4045,9 @@ Layout.styles = i4`
3722
4045
  :host([align="center"]),
3723
4046
  :host([mode="portfolio"][align="center"]),
3724
4047
  :host([mode="company"][align="center"]),
3725
- :host([mode="app"][align="center"]) {
4048
+ :host([mode="app"][align="center"]),
4049
+ :host([mode="list"][align="center"]),
4050
+ :host([mode="home"][align="center"]) {
3726
4051
  margin: 0 auto;
3727
4052
  justify-self: center;
3728
4053
  }
@@ -3730,7 +4055,9 @@ Layout.styles = i4`
3730
4055
  :host([align="right"]),
3731
4056
  :host([mode="portfolio"][align="right"]),
3732
4057
  :host([mode="company"][align="right"]),
3733
- :host([mode="app"][align="right"]) {
4058
+ :host([mode="app"][align="right"]),
4059
+ :host([mode="list"][align="right"]),
4060
+ :host([mode="home"][align="right"]) {
3734
4061
  margin: 0 0 0 auto;
3735
4062
  justify-self: end;
3736
4063
  }
@@ -3738,20 +4065,10 @@ Layout.styles = i4`
3738
4065
  /* App mode - Base */
3739
4066
  :host([mode="app"]) {
3740
4067
  --app-cols: 100%;
3741
- --app-rows: calc(var(--unit) * var(--sf)) calc(var(--unit) * var(--sf))
3742
- calc(var(--unit) * var(--sf)) calc(var(--double) * var(--sf))
3743
- calc(var(--dozen) * var(--sf)) calc(var(--quad) * var(--sf))
3744
- calc(var(--unit) * var(--sf));
3745
- --app-areas: "banner" "." "header" "." "main" "." "footer";
3746
4068
  --app-overlay-cols: 100%;
3747
- --app-overlay-rows: calc(var(--unit) * var(--sf))
3748
- calc(var(--unit) * var(--sf)) calc(var(--unit) * var(--sf))
3749
- calc(var(--double) * var(--sf)) calc(var(--dozen) * var(--sf))
3750
- calc(var(--quad) * var(--sf)) calc(var(--unit) * var(--sf));
3751
- --app-overlay-areas: "banner" "." "header" "." "main" "." "footer";
3752
4069
  grid-template-columns: var(--app-cols);
3753
- grid-template-rows: var(--app-rows);
3754
- grid-template-areas: var(--app-areas);
4070
+ grid-template-rows: var(--app-layout);
4071
+ grid-template-areas: var(--app-layout-areas);
3755
4072
  min-height: 100vh;
3756
4073
  background-color: transparent;
3757
4074
  width: calc(240px * var(--sf, 1));
@@ -3761,8 +4078,58 @@ Layout.styles = i4`
3761
4078
 
3762
4079
  :host([mode="app"]) .view-overlay {
3763
4080
  grid-template-columns: var(--app-overlay-cols);
3764
- grid-template-rows: var(--app-overlay-rows);
3765
- grid-template-areas: var(--app-overlay-areas);
4081
+ grid-template-rows: var(--app-layout);
4082
+ grid-template-areas: var(--app-layout-areas);
4083
+ }
4084
+
4085
+ /* List mode - Base */
4086
+ :host([mode="list"]) {
4087
+ --list-cols: 100%;
4088
+ --list-rows: calc(var(--unit) * var(--sf)) calc(var(--unit) * var(--sf))
4089
+ calc(var(--unit) * var(--sf)) calc(var(--twenty) * var(--sf));
4090
+ --list-areas: "banner" "." "header" "board";
4091
+ --list-overlay-cols: 100%;
4092
+ --list-overlay-rows: calc(var(--unit) * var(--sf))
4093
+ calc(var(--unit) * var(--sf)) calc(var(--unit) * var(--sf))
4094
+ calc(var(--twenty) * var(--sf));
4095
+ --list-overlay-areas: "banner" "." "header" "board";
4096
+ grid-template-columns: var(--list-cols);
4097
+ grid-template-rows: var(--list-rows);
4098
+ grid-template-areas: var(--list-areas);
4099
+ min-height: 100vh;
4100
+ background-color: transparent;
4101
+ width: calc(240px * var(--sf, 1));
4102
+ max-width: calc(240px * var(--sf, 1));
4103
+ margin: 0 auto;
4104
+ }
4105
+
4106
+ :host([mode="list"]) .view-overlay {
4107
+ grid-template-columns: var(--list-overlay-cols);
4108
+ grid-template-rows: var(--list-overlay-rows);
4109
+ grid-template-areas: var(--list-overlay-areas);
4110
+ }
4111
+
4112
+ /* Home mode - Base */
4113
+ :host([mode="home"]) {
4114
+ --home-cols: 100%;
4115
+ --home-areas: "banner" "." "header" "." "message" "lists" "." "footer";
4116
+ --home-overlay-cols: 100%;
4117
+ --home-overlay-areas: "banner" "." "header" "." "message" "lists" "."
4118
+ "footer";
4119
+ grid-template-columns: var(--home-cols);
4120
+ grid-template-rows: var(--home-layout);
4121
+ grid-template-areas: var(--home-areas);
4122
+ min-height: 100vh;
4123
+ background-color: transparent;
4124
+ width: calc(240px * var(--sf, 1));
4125
+ max-width: calc(240px * var(--sf, 1));
4126
+ margin: 0 auto;
4127
+ }
4128
+
4129
+ :host([mode="home"]) .view-overlay {
4130
+ grid-template-columns: var(--home-overlay-cols);
4131
+ grid-template-rows: var(--home-layout);
4132
+ grid-template-areas: var(--home-overlay-areas);
3766
4133
  }
3767
4134
 
3768
4135
  .view-overlay {
@@ -3792,52 +4159,333 @@ Layout.styles = i4`
3792
4159
  transparent
3793
4160
  );
3794
4161
  opacity: 1;
4162
+ position: relative;
4163
+ }
4164
+
4165
+ .grid-area-label {
4166
+ position: absolute;
4167
+ top: calc(-20px * var(--sf, 1));
4168
+ left: 0;
4169
+ height: calc(20px * var(--sf, 1));
4170
+ width: fit-content;
4171
+ display: inline-flex;
4172
+ align-items: center;
4173
+ justify-content: center;
4174
+ padding: 0 calc(4px * var(--sf, 1));
4175
+ border-radius: calc(2px * var(--sf, 1));
4176
+ z-index: 10000;
4177
+ pointer-events: none;
4178
+ white-space: nowrap;
4179
+ }
4180
+
4181
+ /* Banner label stays inside the area (first item) */
4182
+ :host([mode="app"]) .view-area.view-banner .grid-area-label,
4183
+ :host([mode="list"]) .view-area.view-banner .grid-area-label,
4184
+ :host([mode="home"]) .view-area.view-banner .grid-area-label,
4185
+ :host([mode="company"]) .view-area.view-header .grid-area-label,
4186
+ :host([mode="portfolio"]) .view-area.view-square .grid-area-label {
4187
+ top: 0;
4188
+ }
4189
+
4190
+ .grid-area-label ds-text {
4191
+ font-size: calc(11px * var(--sf, 1));
4192
+ line-height: 1;
4193
+ color: white;
4194
+ text-transform: lowercase;
3795
4195
  }
3796
4196
 
3797
4197
  :host([mode="portfolio"]) .view-area:nth-of-type(1) {
3798
4198
  background-color: color-mix(in srgb, var(--tuned-red) 25%, transparent);
3799
4199
  }
4200
+ :host([mode="portfolio"]) .view-area:nth-of-type(1) .grid-area-label {
4201
+ background-image:
4202
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4203
+ linear-gradient(
4204
+ 90deg,
4205
+ color-mix(in srgb, var(--tuned-red) 70%, black) 0%,
4206
+ color-mix(in srgb, var(--tuned-red) 70%, black) 100%
4207
+ );
4208
+ }
3800
4209
  :host([mode="portfolio"]) .view-area:nth-of-type(2) {
3801
4210
  border-color: var(--sharp-blue);
3802
4211
  }
4212
+ :host([mode="portfolio"]) .view-area:nth-of-type(2) .grid-area-label {
4213
+ background-image:
4214
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4215
+ linear-gradient(
4216
+ 90deg,
4217
+ color-mix(in srgb, var(--sharp-blue) 70%, black) 0%,
4218
+ color-mix(in srgb, var(--sharp-blue) 70%, black) 100%
4219
+ );
4220
+ }
3803
4221
  :host([mode="portfolio"]) .view-area:nth-of-type(3) {
3804
4222
  border-color: var(--yellow);
3805
4223
  }
4224
+ :host([mode="portfolio"]) .view-area:nth-of-type(3) .grid-area-label {
4225
+ background-image:
4226
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4227
+ linear-gradient(
4228
+ 90deg,
4229
+ color-mix(in srgb, var(--yellow) 70%, black) 0%,
4230
+ color-mix(in srgb, var(--yellow) 70%, black) 100%
4231
+ );
4232
+ }
3806
4233
  :host([mode="portfolio"]) .view-area:nth-of-type(4) {
3807
4234
  border-color: var(--apple-green);
3808
4235
  }
4236
+ :host([mode="portfolio"]) .view-area:nth-of-type(4) .grid-area-label {
4237
+ background-image:
4238
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4239
+ linear-gradient(
4240
+ 90deg,
4241
+ color-mix(in srgb, var(--apple-green) 70%, black) 0%,
4242
+ color-mix(in srgb, var(--apple-green) 70%, black) 100%
4243
+ );
4244
+ }
3809
4245
  :host([mode="portfolio"]) .view-area:nth-of-type(5) {
3810
4246
  border-color: var(--pink);
3811
4247
  }
4248
+ :host([mode="portfolio"]) .view-area:nth-of-type(5) .grid-area-label {
4249
+ background-image:
4250
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4251
+ linear-gradient(
4252
+ 90deg,
4253
+ color-mix(in srgb, var(--pink) 70%, black) 0%,
4254
+ color-mix(in srgb, var(--pink) 70%, black) 100%
4255
+ );
4256
+ }
3812
4257
  :host([mode="portfolio"]) .view-area:nth-of-type(6) {
3813
4258
  border-color: var(--orange);
3814
4259
  }
4260
+ :host([mode="portfolio"]) .view-area:nth-of-type(6) .grid-area-label {
4261
+ background-image:
4262
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4263
+ linear-gradient(
4264
+ 90deg,
4265
+ color-mix(in srgb, var(--orange) 70%, black) 0%,
4266
+ color-mix(in srgb, var(--orange) 70%, black) 100%
4267
+ );
4268
+ }
3815
4269
  :host([mode="portfolio"]) .view-area:nth-of-type(7) {
3816
4270
  border-color: var(--zenith-blue);
3817
4271
  }
4272
+ :host([mode="portfolio"]) .view-area:nth-of-type(7) .grid-area-label {
4273
+ background-image:
4274
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4275
+ linear-gradient(
4276
+ 90deg,
4277
+ color-mix(in srgb, var(--zenith-blue) 70%, black) 0%,
4278
+ color-mix(in srgb, var(--zenith-blue) 70%, black) 100%
4279
+ );
4280
+ }
3818
4281
 
3819
4282
  :host([mode="company"]) .view-area:nth-of-type(1) {
3820
4283
  border-color: var(--tuned-red);
3821
4284
  }
4285
+ :host([mode="company"]) .view-area:nth-of-type(1) .grid-area-label {
4286
+ background-image:
4287
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4288
+ linear-gradient(
4289
+ 90deg,
4290
+ color-mix(in srgb, var(--tuned-red) 70%, black) 0%,
4291
+ color-mix(in srgb, var(--tuned-red) 70%, black) 100%
4292
+ );
4293
+ }
3822
4294
  :host([mode="company"]) .view-area:nth-of-type(2) {
3823
4295
  border-color: var(--sharp-blue);
3824
4296
  }
4297
+ :host([mode="company"]) .view-area:nth-of-type(2) .grid-area-label {
4298
+ background-image:
4299
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4300
+ linear-gradient(
4301
+ 90deg,
4302
+ color-mix(in srgb, var(--sharp-blue) 70%, black) 0%,
4303
+ color-mix(in srgb, var(--sharp-blue) 70%, black) 100%
4304
+ );
4305
+ }
3825
4306
  :host([mode="company"]) .view-area:nth-of-type(3) {
3826
4307
  border-color: var(--yellow);
3827
4308
  }
4309
+ :host([mode="company"]) .view-area:nth-of-type(3) .grid-area-label {
4310
+ background-image:
4311
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4312
+ linear-gradient(
4313
+ 90deg,
4314
+ color-mix(in srgb, var(--yellow) 70%, black) 0%,
4315
+ color-mix(in srgb, var(--yellow) 70%, black) 100%
4316
+ );
4317
+ }
3828
4318
 
3829
4319
  :host([mode="app"]) .view-area:nth-of-type(1) {
3830
4320
  background-color: color-mix(in srgb, var(--tuned-red) 25%, transparent);
3831
4321
  }
4322
+ :host([mode="app"]) .view-area:nth-of-type(1) .grid-area-label {
4323
+ background-image:
4324
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4325
+ linear-gradient(
4326
+ 90deg,
4327
+ color-mix(in srgb, var(--tuned-red) 70%, black) 0%,
4328
+ color-mix(in srgb, var(--tuned-red) 70%, black) 100%
4329
+ );
4330
+ }
3832
4331
  :host([mode="app"]) .view-area:nth-of-type(2) {
3833
4332
  background-color: color-mix(in srgb, var(--sharp-blue) 25%, transparent);
3834
4333
  }
4334
+ :host([mode="app"]) .view-area:nth-of-type(2) .grid-area-label {
4335
+ background-image:
4336
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4337
+ linear-gradient(
4338
+ 90deg,
4339
+ color-mix(in srgb, var(--sharp-blue) 70%, black) 0%,
4340
+ color-mix(in srgb, var(--sharp-blue) 70%, black) 100%
4341
+ );
4342
+ }
3835
4343
  :host([mode="app"]) .view-area:nth-of-type(3) {
3836
4344
  background-color: color-mix(in srgb, var(--yellow) 25%, transparent);
3837
4345
  }
4346
+ :host([mode="app"]) .view-area:nth-of-type(3) .grid-area-label {
4347
+ background-image:
4348
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4349
+ linear-gradient(
4350
+ 90deg,
4351
+ color-mix(in srgb, var(--yellow) 70%, black) 0%,
4352
+ color-mix(in srgb, var(--yellow) 70%, black) 100%
4353
+ );
4354
+ }
3838
4355
  :host([mode="app"]) .view-area:nth-of-type(4) {
3839
4356
  background-color: color-mix(in srgb, var(--apple-green) 25%, transparent);
3840
4357
  }
4358
+ :host([mode="app"]) .view-area:nth-of-type(4) .grid-area-label {
4359
+ background-image:
4360
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4361
+ linear-gradient(
4362
+ 90deg,
4363
+ color-mix(in srgb, var(--apple-green) 70%, black) 0%,
4364
+ color-mix(in srgb, var(--apple-green) 70%, black) 100%
4365
+ );
4366
+ }
4367
+ :host([mode="app"]) .view-area:nth-of-type(5) {
4368
+ background-color: color-mix(in srgb, var(--pink) 25%, transparent);
4369
+ }
4370
+ :host([mode="app"]) .view-area:nth-of-type(5) .grid-area-label {
4371
+ background-image:
4372
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4373
+ linear-gradient(
4374
+ 90deg,
4375
+ color-mix(in srgb, var(--pink) 70%, black) 0%,
4376
+ color-mix(in srgb, var(--pink) 70%, black) 100%
4377
+ );
4378
+ }
4379
+
4380
+ :host([mode="list"]) .view-area:nth-of-type(1) {
4381
+ background-color: color-mix(in srgb, var(--tuned-red) 25%, transparent);
4382
+ }
4383
+ :host([mode="list"]) .view-area:nth-of-type(1) .grid-area-label {
4384
+ background-image:
4385
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4386
+ linear-gradient(
4387
+ 90deg,
4388
+ color-mix(in srgb, var(--tuned-red) 70%, black) 0%,
4389
+ color-mix(in srgb, var(--tuned-red) 70%, black) 100%
4390
+ );
4391
+ }
4392
+ :host([mode="list"]) .view-area:nth-of-type(2) {
4393
+ background-color: color-mix(in srgb, var(--sharp-blue) 25%, transparent);
4394
+ }
4395
+ :host([mode="list"]) .view-area:nth-of-type(2) .grid-area-label {
4396
+ background-image:
4397
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4398
+ linear-gradient(
4399
+ 90deg,
4400
+ color-mix(in srgb, var(--sharp-blue) 70%, black) 0%,
4401
+ color-mix(in srgb, var(--sharp-blue) 70%, black) 100%
4402
+ );
4403
+ }
4404
+ :host([mode="list"]) .view-area:nth-of-type(3) {
4405
+ background-color: color-mix(in srgb, var(--yellow) 25%, transparent);
4406
+ }
4407
+ :host([mode="list"]) .view-area:nth-of-type(3) .grid-area-label {
4408
+ background-image:
4409
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4410
+ linear-gradient(
4411
+ 90deg,
4412
+ color-mix(in srgb, var(--yellow) 70%, black) 0%,
4413
+ color-mix(in srgb, var(--yellow) 70%, black) 100%
4414
+ );
4415
+ }
4416
+ :host([mode="list"]) .view-area:nth-of-type(4) {
4417
+ background-color: color-mix(in srgb, var(--apple-green) 25%, transparent);
4418
+ }
4419
+ :host([mode="list"]) .view-area:nth-of-type(4) .grid-area-label {
4420
+ background-image:
4421
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4422
+ linear-gradient(
4423
+ 90deg,
4424
+ color-mix(in srgb, var(--apple-green) 70%, black) 0%,
4425
+ color-mix(in srgb, var(--apple-green) 70%, black) 100%
4426
+ );
4427
+ }
4428
+
4429
+ :host([mode="home"]) .view-area:nth-of-type(1) {
4430
+ background-color: color-mix(in srgb, var(--tuned-red) 25%, transparent);
4431
+ }
4432
+ :host([mode="home"]) .view-area:nth-of-type(1) .grid-area-label {
4433
+ background-image:
4434
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4435
+ linear-gradient(
4436
+ 90deg,
4437
+ color-mix(in srgb, var(--tuned-red) 70%, black) 0%,
4438
+ color-mix(in srgb, var(--tuned-red) 70%, black) 100%
4439
+ );
4440
+ }
4441
+ :host([mode="home"]) .view-area:nth-of-type(2) {
4442
+ background-color: color-mix(in srgb, var(--sharp-blue) 25%, transparent);
4443
+ }
4444
+ :host([mode="home"]) .view-area:nth-of-type(2) .grid-area-label {
4445
+ background-image:
4446
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4447
+ linear-gradient(
4448
+ 90deg,
4449
+ color-mix(in srgb, var(--sharp-blue) 70%, black) 0%,
4450
+ color-mix(in srgb, var(--sharp-blue) 70%, black) 100%
4451
+ );
4452
+ }
4453
+ :host([mode="home"]) .view-area:nth-of-type(3) {
4454
+ background-color: color-mix(in srgb, var(--yellow) 25%, transparent);
4455
+ }
4456
+ :host([mode="home"]) .view-area:nth-of-type(3) .grid-area-label {
4457
+ background-image:
4458
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4459
+ linear-gradient(
4460
+ 90deg,
4461
+ color-mix(in srgb, var(--yellow) 70%, black) 0%,
4462
+ color-mix(in srgb, var(--yellow) 70%, black) 100%
4463
+ );
4464
+ }
4465
+ :host([mode="home"]) .view-area:nth-of-type(4) {
4466
+ background-color: color-mix(in srgb, var(--apple-green) 25%, transparent);
4467
+ }
4468
+ :host([mode="home"]) .view-area:nth-of-type(4) .grid-area-label {
4469
+ background-image:
4470
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4471
+ linear-gradient(
4472
+ 90deg,
4473
+ color-mix(in srgb, var(--apple-green) 70%, black) 0%,
4474
+ color-mix(in srgb, var(--apple-green) 70%, black) 100%
4475
+ );
4476
+ }
4477
+ :host([mode="home"]) .view-area:nth-of-type(5) {
4478
+ background-color: color-mix(in srgb, var(--pink) 25%, transparent);
4479
+ }
4480
+ :host([mode="home"]) .view-area:nth-of-type(5) .grid-area-label {
4481
+ background-image:
4482
+ linear-gradient(90deg, rgba(0, 0, 0, 0.2) 0%, rgba(0, 0, 0, 0.2) 100%),
4483
+ linear-gradient(
4484
+ 90deg,
4485
+ color-mix(in srgb, var(--pink) 70%, black) 0%,
4486
+ color-mix(in srgb, var(--pink) 70%, black) 100%
4487
+ );
4488
+ }
3841
4489
 
3842
4490
  .view-square {
3843
4491
  grid-area: square;
@@ -3878,24 +4526,46 @@ Layout.styles = i4`
3878
4526
  .view-main {
3879
4527
  grid-area: main;
3880
4528
  }
3881
- `;
4529
+
4530
+ .view-page-dots {
4531
+ grid-area: page-dots;
4532
+ }
4533
+
4534
+ .view-board {
4535
+ grid-area: board;
4536
+ }
4537
+
4538
+ .view-message {
4539
+ grid-area: message;
4540
+ }
4541
+
4542
+ .view-lists {
4543
+ grid-area: lists;
4544
+ }
4545
+ `
4546
+ ];
3882
4547
  customElements.define("ds-layout", Layout);
3883
4548
  export {
3884
4549
  Accordion,
3885
4550
  Banner,
3886
4551
  Button,
4552
+ Card,
3887
4553
  Container,
3888
4554
  Cycle,
3889
4555
  DateComponent,
3890
4556
  DsTable,
4557
+ Form,
3891
4558
  Gap,
3892
4559
  Grid,
3893
4560
  Icon,
4561
+ Input,
3894
4562
  Layout,
3895
4563
  List,
3896
4564
  Row,
3897
4565
  Text,
3898
4566
  Tooltip,
4567
+ applike,
4568
+ calculateScalingFactor,
3899
4569
  currentLanguage,
3900
4570
  currentTheme,
3901
4571
  detectMobileDevice,
@@ -3905,14 +4575,22 @@ export {
3905
4575
  getDeviceInfo,
3906
4576
  getLanguageDisplayName,
3907
4577
  getPriceLabel,
4578
+ getScalingFactor,
3908
4579
  getText,
3909
4580
  hasTranslation,
3910
4581
  initDeviceDetection,
4582
+ initScaling,
3911
4583
  loadTranslations,
3912
4584
  savePreferences,
4585
+ scale,
4586
+ scalingConfig,
4587
+ scalingFactor,
3913
4588
  setLanguage,
4589
+ setScalingConfig,
3914
4590
  setTheme,
3915
- translate
4591
+ translate,
4592
+ unscale,
4593
+ updateScalingFactor
3916
4594
  };
3917
4595
  /*! Bundled license information:
3918
4596