ds-one 0.2.5-alpha.17 → 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 -2
  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 +1370 -535
  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 +783 -527
  171. package/dist/ds-one.bundle.min.js.map +4 -4
  172. package/dist/index.d.ts +7 -2
  173. package/dist/index.d.ts.map +1 -1
  174. package/dist/index.js +7 -2
  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,73 +2139,210 @@ 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);
2142
+ Button.styles = r5(ds_button_default);
2143
+ customElements.define("ds-button", Button);
2144
+
2145
+ // dist/2-core/styles/ds-banner.css?inline
2146
+ var ds_banner_default = {};
2147
+
2148
+ // dist/2-core/ds-banner.js
2149
+ var Banner = class extends i6 {
2150
+ constructor() {
2151
+ super(...arguments);
2152
+ this.textKey = "";
2153
+ this.actionKey = "";
2154
+ this.href = "";
2155
+ this.mailto = "";
2156
+ this.subjectKey = "";
2157
+ this.describeKey = "";
2158
+ this.appVersionKey = "";
2159
+ this.variant = "warning";
2160
+ this.version = "";
2161
+ this._showVersion = false;
2162
+ this._boundUpdate = () => this.requestUpdate();
2163
+ }
2164
+ connectedCallback() {
2165
+ super.connectedCallback();
2166
+ window.addEventListener("translations-loaded", this._boundUpdate);
2167
+ window.addEventListener("language-changed", this._boundUpdate);
2168
+ }
2169
+ disconnectedCallback() {
2170
+ super.disconnectedCallback();
2171
+ window.removeEventListener("translations-loaded", this._boundUpdate);
2172
+ window.removeEventListener("language-changed", this._boundUpdate);
2173
+ }
2174
+ _toggleVersion() {
2175
+ if (this.version) {
2176
+ this._showVersion = !this._showVersion;
2016
2177
  }
2178
+ }
2179
+ _getMailtoHref() {
2180
+ if (this.href && this.href !== "#")
2181
+ return this.href;
2182
+ if (this.mailto) {
2183
+ try {
2184
+ const subject = this.subjectKey ? getText(this.subjectKey) || this.subjectKey : "Issue report";
2185
+ const describe = this.describeKey ? getText(this.describeKey) || this.describeKey : "Describe the issue:";
2186
+ const appVersionLabel = this.appVersionKey ? getText(this.appVersionKey) || this.appVersionKey : "App version:";
2187
+ const body = `${describe}
2188
+
2017
2189
 
2018
- button.title {
2019
- background-color: var(--button-background-color-secondary);
2020
- color: var(--button-text-color);
2190
+ ${appVersionLabel} ${this.version || ""}`;
2191
+ return `mailto:${this.mailto}?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`;
2192
+ } catch (error) {
2193
+ return `mailto:${this.mailto}?subject=Issue%20report&body=Describe%20the%20issue%3A%0A%0A%0AApp%20version%3A%20${this.version || ""}`;
2194
+ }
2021
2195
  }
2196
+ return "#";
2197
+ }
2198
+ render() {
2199
+ const mailtoHref = this._getMailtoHref();
2200
+ return x`
2201
+ <div class="text-wrapper" @click=${this._toggleVersion}>
2202
+ ${this._showVersion && this.version ? x`<ds-text default-value=${this.version}></ds-text>` : x`<ds-text key=${this.textKey}><slot></slot></ds-text>`}
2203
+ </div>
2204
+ ${this.actionKey ? x`
2205
+ <div class="action-wrapper">
2206
+ <a href=${mailtoHref}>
2207
+ <ds-text key=${this.actionKey}></ds-text>
2208
+ </a>
2209
+ </div>
2210
+ ` : ""}
2211
+ `;
2212
+ }
2213
+ };
2214
+ Banner.properties = {
2215
+ textKey: { type: String, attribute: "text-key" },
2216
+ actionKey: { type: String, attribute: "action-key" },
2217
+ href: { type: String },
2218
+ mailto: { type: String },
2219
+ subjectKey: { type: String, attribute: "subject-key" },
2220
+ describeKey: { type: String, attribute: "describe-key" },
2221
+ appVersionKey: { type: String, attribute: "app-version-key" },
2222
+ variant: { type: String },
2223
+ version: { type: String },
2224
+ _showVersion: { type: Boolean, state: true }
2225
+ };
2226
+ Banner.styles = r5(ds_banner_default);
2227
+ customElements.define("ds-banner", Banner);
2022
2228
 
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);
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`
2255
+ :host {
2256
+ display: block;
2257
+ box-sizing: border-box;
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;
2028
2264
  }
2029
2265
 
2030
- button.secondary {
2031
- background-color: var(--button-background-color-secondary);
2032
- color: var(--button-text-color);
2033
- font-family: var(--typeface-regular);
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));
2034
2269
  }
2035
2270
 
2036
- button.text {
2271
+ :host([variant="outlined"]) {
2037
2272
  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;
2273
+ border: 1px solid var(--border-color, rgba(0, 0, 0, 0.2));
2042
2274
  }
2043
2275
 
2044
- button.text:hover {
2045
- opacity: 0.8;
2046
- text-decoration: none;
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);
2047
2280
  }
2048
2281
 
2049
- button[bold] {
2050
- font-weight: var(--type-weight-bold);
2051
- font-family: var(--typeface-medium);
2282
+ :host([variant="filled"]) {
2283
+ background-color: var(
2284
+ --card-background-filled,
2285
+ var(--surface-color-secondary, #f5f5f5)
2286
+ );
2287
+ border: none;
2052
2288
  }
2053
2289
 
2054
- button[no-background] {
2055
- background-color: transparent;
2056
- max-height: var(--1);
2290
+ :host([elevation="0"]) {
2291
+ box-shadow: none;
2292
+ }
2293
+
2294
+ :host([elevation="1"]) {
2295
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.08);
2296
+ }
2297
+
2298
+ :host([elevation="2"]) {
2299
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.12);
2300
+ }
2301
+
2302
+ :host([elevation="3"]) {
2303
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.16);
2304
+ }
2305
+
2306
+ :host([interactive]) {
2307
+ cursor: pointer;
2308
+ }
2309
+
2310
+ :host([interactive]:hover:not([disabled])) {
2311
+ transform: translateY(-2px);
2312
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
2313
+ }
2314
+
2315
+ :host([interactive]:active:not([disabled])) {
2316
+ transform: translateY(0);
2317
+ }
2318
+
2319
+ :host([disabled]) {
2320
+ opacity: 0.5;
2321
+ pointer-events: none;
2322
+ }
2323
+
2324
+ :host([padding="none"]) {
2057
2325
  padding: 0;
2058
- color: var(--button-color, var(--button-text-color-secondary));
2059
2326
  }
2060
2327
 
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));
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));
2065
2334
  }
2066
2335
 
2067
- .loading {
2068
- opacity: 0.7;
2336
+ :host([padding="large"]) {
2337
+ padding: calc(var(--1) * var(--sf, 1));
2338
+ }
2339
+
2340
+ .card-content {
2341
+ width: 100%;
2342
+ height: 100%;
2069
2343
  }
2070
2344
  `;
2071
- customElements.define("ds-button", Button);
2345
+ customElements.define("ds-card", Card);
2072
2346
 
2073
2347
  // node_modules/lit-html/directives/unsafe-html.js
2074
2348
  var e6 = class extends i2 {
@@ -2088,6 +2362,9 @@ var e6 = class extends i2 {
2088
2362
  e6.directiveName = "unsafeHTML", e6.resultType = 1;
2089
2363
  var o8 = e(e6);
2090
2364
 
2365
+ // dist/2-core/styles/ds-icon.css?inline
2366
+ var ds_icon_default = {};
2367
+
2091
2368
  // dist/2-core/ds-icon.js
2092
2369
  var Icon = class _Icon extends i6 {
2093
2370
  get type() {
@@ -2323,38 +2600,7 @@ var Icon = class _Icon extends i6 {
2323
2600
  Icon.properties = {
2324
2601
  type: { type: String, reflect: true }
2325
2602
  };
2326
- Icon.styles = i4`
2327
- :host {
2328
- display: inline-flex;
2329
- justify-content: center;
2330
- align-items: center;
2331
- width: calc(16px * var(--sf));
2332
- height: calc(16px * var(--sf));
2333
- }
2334
-
2335
- svg {
2336
- width: 100%;
2337
- height: 100%;
2338
- fill: var(--icon-color, currentColor);
2339
- }
2340
-
2341
- path {
2342
- fill: var(--icon-color, currentColor);
2343
- }
2344
-
2345
- .icon-container {
2346
- display: flex;
2347
- justify-content: center;
2348
- align-items: center;
2349
- width: calc(16px * var(--sf));
2350
- height: calc(16px * var(--sf));
2351
- }
2352
-
2353
- /* Notes style color variable for future implementation */
2354
- :host {
2355
- --notes-style-color: #ffb6b9;
2356
- }
2357
- `;
2603
+ Icon.styles = r5(ds_icon_default);
2358
2604
  Icon.iconNameToSvgMap = (() => {
2359
2605
  try {
2360
2606
  const modules = import.meta.glob("../x Icon/*.svg", {
@@ -2378,6 +2624,9 @@ Icon.iconNameToSvgMap = (() => {
2378
2624
  customElements.define("ds-icon", Icon);
2379
2625
  console.log("Icon component registered with custom elements registry");
2380
2626
 
2627
+ // dist/2-core/styles/ds-cycle.css?inline
2628
+ var ds_cycle_default = {};
2629
+
2381
2630
  // dist/2-core/ds-cycle.js
2382
2631
  var saveAccentColor = (color) => {
2383
2632
  localStorage.setItem("accentColor", color);
@@ -2762,28 +3011,24 @@ var Cycle = class extends i6 {
2762
3011
  this.setupInitialValue();
2763
3012
  }
2764
3013
  };
2765
- Cycle.styles = i4`
2766
- :host {
2767
- display: inline-flex;
2768
- align-items: center;
2769
- }
3014
+ Cycle.styles = r5(ds_cycle_default);
3015
+ customElements.define("ds-cycle", Cycle);
2770
3016
 
2771
- .cycle {
2772
- display: inline-flex;
2773
- align-items: center;
2774
- gap: var(--025);
2775
- }
3017
+ // dist/2-core/styles/ds-date.css?inline
3018
+ var ds_date_default = {};
2776
3019
 
2777
- .color-preview {
2778
- width: var(--05);
2779
- height: var(--05);
2780
- border-radius: 999px;
2781
- border: 1px solid
2782
- color-mix(in srgb, var(--text-color-primary) 20%, transparent);
2783
- flex: 0 0 auto;
2784
- }
2785
- `;
2786
- 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 = {};
2787
3032
 
2788
3033
  // dist/2-core/ds-gap.js
2789
3034
  var Gap = class extends i6 {
@@ -2799,81 +3044,253 @@ Gap.properties = {
2799
3044
  /** Raw scale token selector ("01", "025", "05", "08", "1", "2", "3", "4", "8", "12") */
2800
3045
  size: { type: String, reflect: true }
2801
3046
  };
2802
- 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`
2803
3183
  :host {
2804
3184
  display: block;
2805
3185
  width: 100%;
2806
- /* Default if no attribute is provided */
2807
- --gap-size: var(--unit);
2808
- height: var(--gap-size);
2809
- flex: 0 0 auto;
2810
3186
  }
2811
3187
 
2812
- /* Semantic sizing tokens (from DS1/1-root/one.css) */
2813
- :host([tenth]) {
2814
- --gap-size: var(--tenth);
2815
- }
2816
- :host([quarter]) {
2817
- --gap-size: var(--quarter);
2818
- }
2819
- :host([half]) {
2820
- --gap-size: var(--half);
2821
- }
2822
- :host([eight-tenth]) {
2823
- --gap-size: var(--eight-tenth);
2824
- }
2825
- :host([unit]) {
2826
- --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%;
2827
3193
  }
2828
- :host([double]) {
2829
- --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);
2830
3199
  }
2831
- :host([triple]) {
2832
- --gap-size: var(--triple);
3200
+
3201
+ .input-container {
3202
+ position: relative;
3203
+ display: flex;
3204
+ align-items: center;
3205
+ width: 100%;
2833
3206
  }
2834
- :host([quad]) {
2835
- --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;
2836
3223
  }
2837
- :host([oct]) {
2838
- --gap-size: var(--oct);
3224
+
3225
+ input::placeholder {
3226
+ color: var(--text-color-tertiary, #999);
2839
3227
  }
2840
- :host([dozen]) {
2841
- --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));
2842
3232
  }
2843
3233
 
2844
- /* Raw scale sizing (size="...") */
2845
- :host([size="01"]) {
2846
- --gap-size: var(--01);
3234
+ input:disabled {
3235
+ opacity: 0.5;
3236
+ cursor: not-allowed;
3237
+ background-color: var(--input-disabled-background, #f5f5f5);
2847
3238
  }
2848
- :host([size="025"]) {
2849
- --gap-size: var(--025);
3239
+
3240
+ input:read-only {
3241
+ background-color: var(--input-readonly-background, #fafafa);
2850
3242
  }
2851
- :host([size="05"]) {
2852
- --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;
2853
3253
  }
2854
- :host([size="08"]) {
2855
- --gap-size: var(--08);
3254
+
3255
+ :host([variant="filled"]) input:focus {
3256
+ border-bottom-color: var(--accent-color, #007aff);
3257
+ box-shadow: none;
2856
3258
  }
2857
- :host([size="1"]) {
2858
- --gap-size: var(--1);
3259
+
3260
+ :host([variant="outlined"]) input {
3261
+ background-color: transparent;
3262
+ border: 2px solid var(--border-color, #ccc);
2859
3263
  }
2860
- :host([size="2"]) {
2861
- --gap-size: var(--2);
3264
+
3265
+ :host([variant="outlined"]) input:focus {
3266
+ border-color: var(--accent-color, #007aff);
2862
3267
  }
2863
- :host([size="3"]) {
2864
- --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));
2865
3274
  }
2866
- :host([size="4"]) {
2867
- --gap-size: var(--4);
3275
+
3276
+ :host([required]) label::after {
3277
+ content: " *";
3278
+ color: var(--error-color, #ff3b30);
2868
3279
  }
2869
- :host([size="8"]) {
2870
- --gap-size: var(--8);
3280
+
3281
+ /* Error state */
3282
+ input.has-error {
3283
+ border-color: var(--error-color, #ff3b30);
2871
3284
  }
2872
- :host([size="12"]) {
2873
- --gap-size: var(--12);
3285
+
3286
+ input.has-error:focus {
3287
+ box-shadow: 0 0 0 2px rgba(255, 59, 48, 0.2);
2874
3288
  }
2875
3289
  `;
2876
- 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 = {};
2877
3294
 
2878
3295
  // dist/2-core/ds-tooltip.js
2879
3296
  var Tooltip = class extends i6 {
@@ -2963,88 +3380,11 @@ Tooltip.properties = {
2963
3380
  _text: { state: true },
2964
3381
  _visible: { state: true }
2965
3382
  };
2966
- Tooltip.styles = i4`
2967
- :host {
2968
- position: relative;
2969
- display: inline-block;
2970
- }
3383
+ Tooltip.styles = r5(ds_tooltip_default);
3384
+ customElements.define("ds-tooltip", Tooltip);
2971
3385
 
2972
- .slot-wrapper {
2973
- display: inline-flex;
2974
- align-items: center;
2975
- }
2976
-
2977
- .bubble {
2978
- display: flex;
2979
- align-items: center;
2980
- justify-content: center;
2981
- position: absolute;
2982
- left: 50%;
2983
- bottom: 100%;
2984
- transform: translate(-50%, calc(-2px * var(--sf)));
2985
- z-index: 1000;
2986
- pointer-events: none;
2987
- height: calc(var(--08) * var(--sf));
2988
- opacity: 0;
2989
- transition:
2990
- opacity 120ms ease,
2991
- transform 120ms ease;
2992
- background-color: light-dark(var(--black), var(--white));
2993
- color: light-dark(var(--white), var(--black));
2994
- border-radius: 0;
2995
- font-size: var(--type-size-default);
2996
- padding: 0px calc(1px * var(--sf));
2997
- font-family: var(
2998
- --typeface-regular,
2999
- -apple-system,
3000
- BlinkMacSystemFont,
3001
- "Segoe UI",
3002
- Roboto,
3003
- sans-serif
3004
- );
3005
- font-weight: 500;
3006
- white-space: nowrap;
3007
- min-width: max-content;
3008
- }
3009
-
3010
- .bubble.visible {
3011
- opacity: 1;
3012
- }
3013
- `;
3014
- customElements.define("ds-tooltip", Tooltip);
3015
-
3016
- // dist/2-core/ds-date.js
3017
- var DateComponent = class extends i6 {
3018
- render() {
3019
- const year = (/* @__PURE__ */ new Date()).getFullYear();
3020
- return x`<span>${year}</span>`;
3021
- }
3022
- };
3023
- DateComponent.styles = i4`
3024
- :host {
3025
- display: inline;
3026
- font-family: var(--typeface-regular, var(--typeface-regular-regular));
3027
- font-size: inherit;
3028
- color: inherit;
3029
- }
3030
- `;
3031
- customElements.define("ds-date", DateComponent);
3032
-
3033
- // dist/3-unit/ds-list.js
3034
- var List = class extends i6 {
3035
- render() {
3036
- return x`<slot></slot>`;
3037
- }
3038
- };
3039
- List.styles = i4`
3040
- :host {
3041
- display: flex;
3042
- flex-direction: column;
3043
- gap: 0;
3044
- width: 100%;
3045
- }
3046
- `;
3047
- customElements.define("ds-list", List);
3386
+ // dist/3-unit/styles/ds-row.css?inline
3387
+ var ds_row_default = {};
3048
3388
 
3049
3389
  // dist/3-unit/ds-row.js
3050
3390
  var Row = class extends i6 {
@@ -3059,26 +3399,12 @@ var Row = class extends i6 {
3059
3399
  Row.properties = {
3060
3400
  type: { type: String, reflect: true }
3061
3401
  };
3062
- Row.styles = i4`
3063
- :host {
3064
- display: flex;
3065
- align-items: end;
3066
- width: calc(240px * var(--sf));
3067
- }
3068
-
3069
- :host([type="fill"]) {
3070
- justify-content: space-between;
3071
- height: calc(var(--1) * var(--sf));
3072
- }
3073
-
3074
- :host([type="centered"]) {
3075
- justify-content: center;
3076
- height: calc(var(--1) * var(--sf));
3077
- gap: calc(var(--025) * var(--sf));
3078
- }
3079
- `;
3402
+ Row.styles = r5(ds_row_default);
3080
3403
  customElements.define("ds-row", Row);
3081
3404
 
3405
+ // dist/3-unit/styles/ds-accordion.css?inline
3406
+ var ds_accordion_default = {};
3407
+
3082
3408
  // dist/3-unit/ds-accordion.js
3083
3409
  var Accordion = class extends i6 {
3084
3410
  constructor() {
@@ -3121,52 +3447,235 @@ Accordion.properties = {
3121
3447
  detailsKey: { type: String, attribute: "details-key" },
3122
3448
  open: { type: Boolean, reflect: true }
3123
3449
  };
3124
- 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`
3125
3642
  :host {
3126
3643
  display: block;
3127
- width: calc(240px * var(--sf));
3128
- color: var(--text-color-primary);
3129
- }
3130
-
3131
- details {
3132
3644
  width: 100%;
3133
3645
  }
3134
3646
 
3135
- summary {
3136
- cursor: pointer;
3137
- user-select: none;
3138
- list-style: none;
3139
- outline: none;
3140
- }
3141
-
3142
- summary::-webkit-details-marker {
3143
- display: none;
3647
+ form {
3648
+ display: flex;
3649
+ flex-direction: column;
3650
+ gap: calc(var(--05) * var(--sf, 1));
3651
+ width: 100%;
3144
3652
  }
3145
3653
 
3146
- .summaryRow {
3654
+ ::slotted(*) {
3147
3655
  width: 100%;
3148
3656
  }
3149
3657
 
3150
- ds-icon.chevron {
3151
- transform: rotate(0deg);
3152
- transition: transform 140ms ease;
3658
+ :host([disabled]) {
3659
+ opacity: 0.6;
3660
+ pointer-events: none;
3153
3661
  }
3662
+ `;
3663
+ customElements.define("ds-form", Form);
3154
3664
 
3155
- details[open] ds-icon.chevron {
3156
- transform: rotate(180deg);
3157
- }
3665
+ // dist/3-unit/styles/ds-list.css?inline
3666
+ var ds_list_default = {};
3158
3667
 
3159
- .detailsBody {
3160
- padding-top: calc(var(--half) * var(--sf));
3161
- }
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);
3162
3676
 
3163
- .detailsText {
3164
- display: block;
3165
- white-space: normal;
3166
- text-align: left;
3167
- }
3168
- `;
3169
- customElements.define("ds-accordion", Accordion);
3677
+ // dist/3-unit/styles/ds-table.css?inline
3678
+ var ds_table_default = {};
3170
3679
 
3171
3680
  // dist/3-unit/ds-table.js
3172
3681
  var DsTable = class extends i6 {
@@ -3204,134 +3713,24 @@ DsTable.properties = {
3204
3713
  columns: { type: Array },
3205
3714
  showStatus: { type: Boolean, attribute: "show-status" }
3206
3715
  };
3207
- DsTable.styles = i4`
3208
- :host {
3209
- display: block;
3210
- width: 100%;
3211
- }
3212
-
3213
- .table-container {
3214
- display: flex;
3215
- flex-direction: column;
3216
- width: 100%;
3217
- }
3218
-
3219
- .table-header {
3220
- display: grid;
3221
- grid-template-columns: 160px 80px 80px 80px;
3222
- height: 20px;
3223
- width: 400px;
3224
- }
3225
-
3226
- .table-body {
3227
- display: grid;
3228
- grid-template-columns: 160px 80px 80px 80px;
3229
- border: 1px solid var(--black);
3230
- width: 400px;
3231
- }
3232
-
3233
- .header-cell {
3234
- height: 20px;
3235
- display: flex;
3236
- align-items: center;
3237
- justify-content: left;
3238
- padding: 0 2px;
3239
- font-family: var(--typeface-regular);
3240
- font-size: var(--type-size-default);
3241
- font-weight: var(--type-weight-default);
3242
- line-height: var(--type-lineheight-default);
3243
- color: var(--black);
3244
- letter-spacing: -0.26px;
3245
- }
3246
-
3247
- .data-cell {
3248
- height: 20px;
3249
- margin-top: -1px;
3250
- display: flex;
3251
- align-items: center;
3252
- justify-content: left;
3253
-
3254
- outline: 1px solid var(--black);
3255
-
3256
- font-family: var(--typeface-regular);
3257
- font-size: var(--type-size-default);
3258
- font-weight: var(--type-weight-default);
3259
- line-height: var(--type-lineheight-default);
3260
- color: var(--black);
3261
- letter-spacing: -0.26px;
3262
- }
3263
-
3264
- .status-cell {
3265
- background-color: var(--apple-green);
3266
- }
3267
-
3268
- .product-cell {
3269
- text-align: left;
3270
- justify-content: flex-start;
3271
- }
3272
-
3273
- .users-cell,
3274
- .retention-cell {
3275
- text-align: center;
3276
- }
3277
-
3278
- .status-cell {
3279
- text-align: center;
3280
- }
3281
-
3282
- /* Responsive adjustments */
3283
- @media (max-width: 480px) {
3284
- .table-header,
3285
- .table-body {
3286
- width: 100%;
3287
- grid-template-columns: 1fr 60px 60px 60px;
3288
- }
3289
- }
3290
- `;
3716
+ DsTable.styles = r5(ds_table_default);
3291
3717
  customElements.define("ds-table", DsTable);
3292
3718
 
3719
+ // dist/4-page/styles/ds-container.css?inline
3720
+ var ds_container_default = {};
3721
+
3293
3722
  // dist/4-page/ds-container.js
3294
3723
  var Container = class extends i6 {
3295
3724
  render() {
3296
3725
  return x`<slot></slot>`;
3297
3726
  }
3298
3727
  };
3299
- Container.styles = i4`
3300
- :host {
3301
- display: flex;
3302
- width: 100%;
3303
- max-width: 100%;
3304
- flex-direction: column;
3305
- background-color: var(--background-color);
3306
- box-sizing: border-box;
3307
- }
3308
-
3309
- /* Ensure children don't overflow */
3310
- :host ::slotted(*) {
3311
- max-width: 100%;
3312
- box-sizing: border-box;
3313
- }
3314
-
3315
- /* Mobile: 100% width */
3316
- @media (max-width: 820px) {
3317
- :host {
3318
- width: 100%;
3319
- max-width: 100%;
3320
- }
3321
- }
3322
-
3323
- /* Desktop: max-width 1000px, centered */
3324
- @media (min-width: 821px) {
3325
- :host {
3326
- max-width: 1000px;
3327
- margin-left: auto;
3328
- margin-right: auto;
3329
- width: 100%;
3330
- }
3331
- }
3332
- `;
3728
+ Container.styles = r5(ds_container_default);
3333
3729
  customElements.define("ds-container", Container);
3334
3730
 
3731
+ // dist/4-page/styles/ds-grid.css?inline
3732
+ var ds_grid_default = {};
3733
+
3335
3734
  // dist/4-page/ds-grid.js
3336
3735
  var Grid = class extends i6 {
3337
3736
  connectedCallback() {
@@ -3373,63 +3772,12 @@ var Grid = class extends i6 {
3373
3772
  Grid.properties = {
3374
3773
  align: { type: String }
3375
3774
  };
3376
- Grid.styles = i4`
3377
- :host {
3378
- margin-top: 0.5px !important;
3379
- margin-left: 0.5px !important;
3380
- display: grid;
3381
- width: 1440px;
3382
- height: 1280px;
3383
- grid-template-columns: repeat(auto-fill, 19px);
3384
- grid-template-rows: repeat(auto-fill, 19px);
3385
- gap: 1px;
3386
- row-rule: calc(1px * var(--sf)) solid var(--grid-color);
3387
- column-rule: calc(1px * var(--sf)) solid var(--grid-color);
3388
- outline: calc(1px * var(--sf)) solid var(--yellow);
3389
- position: fixed;
3390
- top: 0;
3391
- left: 50%;
3392
- transform: translateX(-50%);
3393
- pointer-events: none;
3394
- z-index: 300;
3395
- }
3396
-
3397
- /* DO NOT CHANGE THIS GRID CODE FOR MOBILE. ITS PERFECT FOR MOBILE. */
3398
- :host(.mobile) {
3399
- width: calc(100% - calc(1px * var(--sf)));
3400
- max-width: 100vw;
3401
- margin-left: 0.5px !important;
3402
- margin-top: 0 !important;
3403
- box-sizing: border-box;
3404
- position: fixed;
3405
- top: calc(0.5px * var(--sf));
3406
- left: 50%;
3407
- transform: translateX(-50%);
3408
- pointer-events: none;
3409
- z-index: 300;
3410
- gap: calc(1px * var(--sf));
3411
- grid-template-columns: repeat(14, calc(19px * var(--sf)));
3412
- grid-template-rows: repeat(auto-fill, calc(19px * var(--sf)));
3413
- }
3414
-
3415
- :host([align="left"]) {
3416
- left: 0;
3417
- transform: none;
3418
- }
3419
-
3420
- :host([align="center"]) {
3421
- left: 50%;
3422
- transform: translateX(-50%);
3423
- }
3424
-
3425
- :host([align="right"]) {
3426
- left: auto;
3427
- right: 0;
3428
- transform: none;
3429
- }
3430
- `;
3775
+ Grid.styles = r5(ds_grid_default);
3431
3776
  customElements.define("ds-grid", Grid);
3432
3777
 
3778
+ // dist/4-page/styles/ds-layout.css?inline
3779
+ var ds_layout_default = {};
3780
+
3433
3781
  // dist/4-page/ds-layout.js
3434
3782
  var Layout = class extends i6 {
3435
3783
  constructor() {
@@ -3441,57 +3789,184 @@ var Layout = class extends i6 {
3441
3789
  const isPortfolio = this.mode === "portfolio";
3442
3790
  const isCompany = this.mode === "company";
3443
3791
  const isApp = this.mode === "app";
3792
+ const isList = this.mode === "list";
3793
+ const isHome = this.mode === "home";
3444
3794
  return x`
3445
3795
  <slot></slot>
3446
3796
  ${isView ? x`
3447
3797
  <div class="view-overlay">
3448
- ${isApp ? x`
3798
+ ${isHome ? x`
3449
3799
  <div class="view-area view-banner">
3450
- <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>
3451
3803
  </div>
3452
3804
  <div class="view-area view-header">
3453
- <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>
3454
3808
  </div>
3455
-
3456
- <div class="view-area view-main">
3457
- <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>
3458
3816
  </div>
3459
- <div class="view-area view-footer">
3460
- <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>
3461
3821
  </div>
3462
- ` : isCompany ? x`
3463
- <div class="view-area view-header">
3464
- <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>
3465
3825
  </div>
3466
- <div class="view-area view-content">
3467
- <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>
3468
3835
  </div>
3469
- <div class="view-area view-footer">
3470
- <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>
3471
3843
  </div>
3472
- ` : isPortfolio ? x`
3473
- <div class="view-area view-square">
3474
- <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>
3475
3847
  </div>
3476
- <div class="view-area view-title">
3477
- <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>
3478
3857
  </div>
3479
3858
  <div class="view-area view-header">
3480
- <ds-text key="header">header</ds-text>
3481
- </div>
3482
- <div class="view-area view-projects">
3483
- <ds-text key="projects">projects</ds-text>
3859
+ <div class="grid-area-label">
3860
+ <ds-text
3861
+ key="header"
3862
+ default-value="header"
3863
+ ></ds-text>
3864
+ </div>
3484
3865
  </div>
3485
- <div class="view-area view-bio">
3486
- <ds-text key="bio">bio</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>
3487
3870
  </div>
3488
- <div class="view-area view-nav">
3489
- <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>
3490
3878
  </div>
3491
3879
  <div class="view-area view-footer">
3492
- <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>
3493
3886
  </div>
3494
- ` : ""}
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
+ ` : ""}
3495
3970
  </div>
3496
3971
  ` : ""}
3497
3972
  `;
@@ -3502,7 +3977,9 @@ Layout.properties = {
3502
3977
  align: { type: String },
3503
3978
  view: { type: Boolean }
3504
3979
  };
3505
- Layout.styles = i4`
3980
+ Layout.styles = [
3981
+ r5(ds_layout_default),
3982
+ i4`
3506
3983
  :host {
3507
3984
  display: grid;
3508
3985
  position: relative;
@@ -3558,7 +4035,9 @@ Layout.styles = i4`
3558
4035
  :host([align="left"]),
3559
4036
  :host([mode="portfolio"][align="left"]),
3560
4037
  :host([mode="company"][align="left"]),
3561
- :host([mode="app"][align="left"]) {
4038
+ :host([mode="app"][align="left"]),
4039
+ :host([mode="list"][align="left"]),
4040
+ :host([mode="home"][align="left"]) {
3562
4041
  margin: 0;
3563
4042
  justify-self: start;
3564
4043
  }
@@ -3566,7 +4045,9 @@ Layout.styles = i4`
3566
4045
  :host([align="center"]),
3567
4046
  :host([mode="portfolio"][align="center"]),
3568
4047
  :host([mode="company"][align="center"]),
3569
- :host([mode="app"][align="center"]) {
4048
+ :host([mode="app"][align="center"]),
4049
+ :host([mode="list"][align="center"]),
4050
+ :host([mode="home"][align="center"]) {
3570
4051
  margin: 0 auto;
3571
4052
  justify-self: center;
3572
4053
  }
@@ -3574,7 +4055,9 @@ Layout.styles = i4`
3574
4055
  :host([align="right"]),
3575
4056
  :host([mode="portfolio"][align="right"]),
3576
4057
  :host([mode="company"][align="right"]),
3577
- :host([mode="app"][align="right"]) {
4058
+ :host([mode="app"][align="right"]),
4059
+ :host([mode="list"][align="right"]),
4060
+ :host([mode="home"][align="right"]) {
3578
4061
  margin: 0 0 0 auto;
3579
4062
  justify-self: end;
3580
4063
  }
@@ -3582,20 +4065,10 @@ Layout.styles = i4`
3582
4065
  /* App mode - Base */
3583
4066
  :host([mode="app"]) {
3584
4067
  --app-cols: 100%;
3585
- --app-rows: calc(var(--unit) * var(--sf)) calc(var(--unit) * var(--sf))
3586
- calc(var(--unit) * var(--sf)) calc(var(--double) * var(--sf))
3587
- calc(var(--dozen) * var(--sf)) calc(var(--quad) * var(--sf))
3588
- calc(var(--unit) * var(--sf));
3589
- --app-areas: "banner" "." "header" "." "main" "." "footer";
3590
4068
  --app-overlay-cols: 100%;
3591
- --app-overlay-rows: calc(var(--unit) * var(--sf))
3592
- calc(var(--unit) * var(--sf)) calc(var(--unit) * var(--sf))
3593
- calc(var(--double) * var(--sf)) calc(var(--dozen) * var(--sf))
3594
- calc(var(--quad) * var(--sf)) calc(var(--unit) * var(--sf));
3595
- --app-overlay-areas: "banner" "." "header" "." "main" "." "footer";
3596
4069
  grid-template-columns: var(--app-cols);
3597
- grid-template-rows: var(--app-rows);
3598
- grid-template-areas: var(--app-areas);
4070
+ grid-template-rows: var(--app-layout);
4071
+ grid-template-areas: var(--app-layout-areas);
3599
4072
  min-height: 100vh;
3600
4073
  background-color: transparent;
3601
4074
  width: calc(240px * var(--sf, 1));
@@ -3605,8 +4078,58 @@ Layout.styles = i4`
3605
4078
 
3606
4079
  :host([mode="app"]) .view-overlay {
3607
4080
  grid-template-columns: var(--app-overlay-cols);
3608
- grid-template-rows: var(--app-overlay-rows);
3609
- 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);
3610
4133
  }
3611
4134
 
3612
4135
  .view-overlay {
@@ -3636,52 +4159,333 @@ Layout.styles = i4`
3636
4159
  transparent
3637
4160
  );
3638
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;
3639
4195
  }
3640
4196
 
3641
4197
  :host([mode="portfolio"]) .view-area:nth-of-type(1) {
3642
4198
  background-color: color-mix(in srgb, var(--tuned-red) 25%, transparent);
3643
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
+ }
3644
4209
  :host([mode="portfolio"]) .view-area:nth-of-type(2) {
3645
4210
  border-color: var(--sharp-blue);
3646
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
+ }
3647
4221
  :host([mode="portfolio"]) .view-area:nth-of-type(3) {
3648
4222
  border-color: var(--yellow);
3649
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
+ }
3650
4233
  :host([mode="portfolio"]) .view-area:nth-of-type(4) {
3651
4234
  border-color: var(--apple-green);
3652
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
+ }
3653
4245
  :host([mode="portfolio"]) .view-area:nth-of-type(5) {
3654
4246
  border-color: var(--pink);
3655
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
+ }
3656
4257
  :host([mode="portfolio"]) .view-area:nth-of-type(6) {
3657
4258
  border-color: var(--orange);
3658
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
+ }
3659
4269
  :host([mode="portfolio"]) .view-area:nth-of-type(7) {
3660
4270
  border-color: var(--zenith-blue);
3661
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
+ }
3662
4281
 
3663
4282
  :host([mode="company"]) .view-area:nth-of-type(1) {
3664
4283
  border-color: var(--tuned-red);
3665
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
+ }
3666
4294
  :host([mode="company"]) .view-area:nth-of-type(2) {
3667
4295
  border-color: var(--sharp-blue);
3668
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
+ }
3669
4306
  :host([mode="company"]) .view-area:nth-of-type(3) {
3670
4307
  border-color: var(--yellow);
3671
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
+ }
3672
4318
 
3673
4319
  :host([mode="app"]) .view-area:nth-of-type(1) {
3674
4320
  background-color: color-mix(in srgb, var(--tuned-red) 25%, transparent);
3675
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
+ }
3676
4331
  :host([mode="app"]) .view-area:nth-of-type(2) {
3677
4332
  background-color: color-mix(in srgb, var(--sharp-blue) 25%, transparent);
3678
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
+ }
3679
4343
  :host([mode="app"]) .view-area:nth-of-type(3) {
3680
4344
  background-color: color-mix(in srgb, var(--yellow) 25%, transparent);
3681
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
+ }
3682
4355
  :host([mode="app"]) .view-area:nth-of-type(4) {
3683
4356
  background-color: color-mix(in srgb, var(--apple-green) 25%, transparent);
3684
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
+ }
3685
4489
 
3686
4490
  .view-square {
3687
4491
  grid-area: square;
@@ -3722,23 +4526,46 @@ Layout.styles = i4`
3722
4526
  .view-main {
3723
4527
  grid-area: main;
3724
4528
  }
3725
- `;
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
+ ];
3726
4547
  customElements.define("ds-layout", Layout);
3727
4548
  export {
3728
4549
  Accordion,
4550
+ Banner,
3729
4551
  Button,
4552
+ Card,
3730
4553
  Container,
3731
4554
  Cycle,
3732
4555
  DateComponent,
3733
4556
  DsTable,
4557
+ Form,
3734
4558
  Gap,
3735
4559
  Grid,
3736
4560
  Icon,
4561
+ Input,
3737
4562
  Layout,
3738
4563
  List,
3739
4564
  Row,
3740
4565
  Text,
3741
4566
  Tooltip,
4567
+ applike,
4568
+ calculateScalingFactor,
3742
4569
  currentLanguage,
3743
4570
  currentTheme,
3744
4571
  detectMobileDevice,
@@ -3748,14 +4575,22 @@ export {
3748
4575
  getDeviceInfo,
3749
4576
  getLanguageDisplayName,
3750
4577
  getPriceLabel,
4578
+ getScalingFactor,
3751
4579
  getText,
3752
4580
  hasTranslation,
3753
4581
  initDeviceDetection,
4582
+ initScaling,
3754
4583
  loadTranslations,
3755
4584
  savePreferences,
4585
+ scale,
4586
+ scalingConfig,
4587
+ scalingFactor,
3756
4588
  setLanguage,
4589
+ setScalingConfig,
3757
4590
  setTheme,
3758
- translate
4591
+ translate,
4592
+ unscale,
4593
+ updateScalingFactor
3759
4594
  };
3760
4595
  /*! Bundled license information:
3761
4596