ds-one 0.2.0-alpha.2 → 0.2.5-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. package/DS1/{utils/language.ts → 0-face/i18n.ts} +197 -2
  2. package/DS1/0-face/preferences.ts +23 -0
  3. package/DS1/0-face/pricing.ts +57 -0
  4. package/DS1/1-root/one.css +1 -1
  5. package/DS1/2-core/ds-button.ts +1 -1
  6. package/DS1/2-core/ds-cycle.ts +17 -18
  7. package/DS1/2-core/{ds-year.ts → ds-date.ts} +4 -4
  8. package/DS1/2-core/ds-input.ts +1 -0
  9. package/DS1/2-core/ds-text.ts +1 -1
  10. package/DS1/2-core/ds-tooltip.ts +4 -3
  11. package/DS1/3-unit/doublenav-v1.ts +105 -0
  12. package/DS1/3-unit/{ds-doublenav.ts → ds-portfolio-doublenav.ts} +4 -5
  13. package/DS1/3-unit/ds-portfolio-panel.ts +27 -0
  14. package/DS1/3-unit/ds-portfolio-singlenav.ts +79 -0
  15. package/DS1/3-unit/list-v1.ts +24 -0
  16. package/DS1/3-unit/{ds-panel.ts → panel-v1.ts} +2 -3
  17. package/DS1/3-unit/row-v1.ts +52 -0
  18. package/DS1/3-unit/{ds-singlenav.ts → singlenav-v1.ts} +4 -5
  19. package/DS1/4-page/ds-grid.ts +1 -1
  20. package/DS1/index.ts +39 -37
  21. package/README.md +3 -3
  22. package/dist/0-face/{2025-04-23-device.d.ts → device.d.ts} +1 -1
  23. package/dist/0-face/device.d.ts.map +1 -0
  24. package/dist/{utils/language.d.ts → 0-face/i18n.d.ts} +1 -1
  25. package/dist/0-face/i18n.d.ts.map +1 -0
  26. package/dist/{utils/language.js → 0-face/i18n.js} +141 -2
  27. package/dist/0-face/preferences.d.ts +9 -0
  28. package/dist/0-face/preferences.d.ts.map +1 -0
  29. package/dist/0-face/preferences.js +14 -0
  30. package/dist/0-face/pricing.d.ts +15 -0
  31. package/dist/0-face/pricing.d.ts.map +1 -0
  32. package/dist/0-face/pricing.js +46 -0
  33. package/dist/0-face/theme.d.ts.map +1 -0
  34. package/dist/2-core/ds-button.js +1 -1
  35. package/dist/2-core/ds-cycle.js +15 -15
  36. package/dist/2-core/{ds-year.d.ts → ds-date.d.ts} +4 -4
  37. package/dist/2-core/ds-date.d.ts.map +1 -0
  38. package/dist/2-core/{ds-year.js → ds-date.js} +4 -4
  39. package/dist/2-core/ds-input.d.ts +1 -0
  40. package/dist/2-core/ds-input.d.ts.map +1 -0
  41. package/dist/2-core/ds-input.js +1 -0
  42. package/dist/2-core/ds-text.js +1 -1
  43. package/dist/2-core/ds-tooltip.d.ts.map +1 -1
  44. package/dist/2-core/ds-tooltip.js +4 -2
  45. package/dist/3-unit/{ds-doublenav.d.ts → ds-portfolio-doublenav.d.ts} +4 -4
  46. package/dist/3-unit/ds-portfolio-doublenav.d.ts.map +1 -0
  47. package/dist/3-unit/{ds-doublenav.js → ds-portfolio-doublenav.js} +4 -4
  48. package/dist/3-unit/{ds-panel.d.ts → ds-portfolio-panel.d.ts} +3 -3
  49. package/dist/3-unit/ds-portfolio-panel.d.ts.map +1 -0
  50. package/dist/3-unit/{ds-panel.js → ds-portfolio-panel.js} +3 -3
  51. package/dist/3-unit/{ds-singlenav.d.ts → ds-portfolio-singlenav.d.ts} +4 -4
  52. package/dist/3-unit/ds-portfolio-singlenav.d.ts.map +1 -0
  53. package/dist/3-unit/{ds-singlenav.js → ds-portfolio-singlenav.js} +4 -4
  54. package/dist/4-page/ds-grid.js +1 -1
  55. package/dist/ds-one.bundle.js +2087 -3806
  56. package/dist/ds-one.bundle.js.map +4 -4
  57. package/dist/ds-one.bundle.min.js +74 -740
  58. package/dist/ds-one.bundle.min.js.map +4 -4
  59. package/dist/index.d.ts +16 -26
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +32 -34
  62. package/package.json +2 -2
  63. package/DS1/0-face/2025-04-23-language.ts +0 -4
  64. package/DS1/2-core/ds-article.ts +0 -454
  65. package/DS1/2-core/ds-attributes.ts +0 -155
  66. package/DS1/2-core/ds-downloadcv.ts +0 -146
  67. package/DS1/2-core/ds-header.ts +0 -82
  68. package/DS1/2-core/ds-home.ts +0 -168
  69. package/DS1/2-core/ds-link.ts +0 -121
  70. package/DS1/2-core/ds-markdown.ts +0 -252
  71. package/DS1/2-core/ds-price.ts +0 -108
  72. package/DS1/2-core/ds-squarecircle.ts +0 -155
  73. package/DS1/2-core/ds-title.ts +0 -139
  74. package/DS1/2-core/ds-viewtoggle.ts +0 -83
  75. package/DS1/utils/cdn-loader.ts +0 -232
  76. package/DS1/utils/keys.json +0 -41
  77. package/DS1/utils/pricing.ts +0 -24
  78. package/DS1/utils/scroll.ts +0 -184
  79. package/DS1/utils/settings.ts +0 -23
  80. package/DS1/utils/viewMode.ts +0 -55
  81. package/dist/0-face/2025-04-23-device.d.ts.map +0 -1
  82. package/dist/0-face/2025-04-23-language.d.ts +0 -1
  83. package/dist/0-face/2025-04-23-language.d.ts.map +0 -1
  84. package/dist/0-face/2025-04-23-language.js +0 -3
  85. package/dist/2-core/article-v1.d.ts +0 -129
  86. package/dist/2-core/article-v1.d.ts.map +0 -1
  87. package/dist/2-core/article-v1.js +0 -361
  88. package/dist/2-core/attributes-v1.d.ts +0 -47
  89. package/dist/2-core/attributes-v1.d.ts.map +0 -1
  90. package/dist/2-core/attributes-v1.js +0 -128
  91. package/dist/2-core/cycle-v1.d.ts +0 -66
  92. package/dist/2-core/cycle-v1.d.ts.map +0 -1
  93. package/dist/2-core/cycle-v1.js +0 -586
  94. package/dist/2-core/downloadcv-v1.d.ts +0 -58
  95. package/dist/2-core/downloadcv-v1.d.ts.map +0 -1
  96. package/dist/2-core/downloadcv-v1.js +0 -119
  97. package/dist/2-core/ds-article.d.ts +0 -129
  98. package/dist/2-core/ds-article.d.ts.map +0 -1
  99. package/dist/2-core/ds-article.js +0 -361
  100. package/dist/2-core/ds-attributes.d.ts +0 -47
  101. package/dist/2-core/ds-attributes.d.ts.map +0 -1
  102. package/dist/2-core/ds-attributes.js +0 -128
  103. package/dist/2-core/ds-button.figma.d.ts +0 -2
  104. package/dist/2-core/ds-button.figma.d.ts.map +0 -1
  105. package/dist/2-core/ds-button.figma.js +0 -6
  106. package/dist/2-core/ds-downloadcv.d.ts +0 -58
  107. package/dist/2-core/ds-downloadcv.d.ts.map +0 -1
  108. package/dist/2-core/ds-downloadcv.js +0 -119
  109. package/dist/2-core/ds-header.d.ts +0 -28
  110. package/dist/2-core/ds-header.d.ts.map +0 -1
  111. package/dist/2-core/ds-header.js +0 -66
  112. package/dist/2-core/ds-home.d.ts +0 -26
  113. package/dist/2-core/ds-home.d.ts.map +0 -1
  114. package/dist/2-core/ds-home.js +0 -148
  115. package/dist/2-core/ds-link.d.ts +0 -35
  116. package/dist/2-core/ds-link.d.ts.map +0 -1
  117. package/dist/2-core/ds-link.js +0 -85
  118. package/dist/2-core/ds-markdown.d.ts +0 -7
  119. package/dist/2-core/ds-markdown.d.ts.map +0 -1
  120. package/dist/2-core/ds-markdown.js +0 -240
  121. package/dist/2-core/ds-price.d.ts +0 -46
  122. package/dist/2-core/ds-price.d.ts.map +0 -1
  123. package/dist/2-core/ds-price.js +0 -72
  124. package/dist/2-core/ds-squarecircle.d.ts +0 -50
  125. package/dist/2-core/ds-squarecircle.d.ts.map +0 -1
  126. package/dist/2-core/ds-squarecircle.js +0 -133
  127. package/dist/2-core/ds-title.d.ts +0 -50
  128. package/dist/2-core/ds-title.d.ts.map +0 -1
  129. package/dist/2-core/ds-title.js +0 -103
  130. package/dist/2-core/ds-viewtoggle.d.ts +0 -27
  131. package/dist/2-core/ds-viewtoggle.d.ts.map +0 -1
  132. package/dist/2-core/ds-viewtoggle.js +0 -49
  133. package/dist/2-core/ds-year.d.ts.map +0 -1
  134. package/dist/2-core/header-v1.d.ts +0 -28
  135. package/dist/2-core/header-v1.d.ts.map +0 -1
  136. package/dist/2-core/header-v1.js +0 -66
  137. package/dist/2-core/home-v1.d.ts +0 -26
  138. package/dist/2-core/home-v1.d.ts.map +0 -1
  139. package/dist/2-core/home-v1.js +0 -148
  140. package/dist/2-core/icon-v1.d.ts +0 -28
  141. package/dist/2-core/icon-v1.d.ts.map +0 -1
  142. package/dist/2-core/icon-v1.js +0 -297
  143. package/dist/2-core/link-v1.d.ts +0 -35
  144. package/dist/2-core/link-v1.d.ts.map +0 -1
  145. package/dist/2-core/link-v1.js +0 -85
  146. package/dist/2-core/markdown-v1.d.ts +0 -7
  147. package/dist/2-core/markdown-v1.d.ts.map +0 -1
  148. package/dist/2-core/markdown-v1.js +0 -240
  149. package/dist/2-core/price-v1.d.ts +0 -46
  150. package/dist/2-core/price-v1.d.ts.map +0 -1
  151. package/dist/2-core/price-v1.js +0 -72
  152. package/dist/2-core/squarecircle-v1.d.ts +0 -50
  153. package/dist/2-core/squarecircle-v1.d.ts.map +0 -1
  154. package/dist/2-core/squarecircle-v1.js +0 -133
  155. package/dist/2-core/text-v1.d.ts +0 -48
  156. package/dist/2-core/text-v1.d.ts.map +0 -1
  157. package/dist/2-core/text-v1.js +0 -83
  158. package/dist/2-core/title-v1.d.ts +0 -50
  159. package/dist/2-core/title-v1.d.ts.map +0 -1
  160. package/dist/2-core/title-v1.js +0 -103
  161. package/dist/2-core/tooltip-v1.d.ts +0 -39
  162. package/dist/2-core/tooltip-v1.d.ts.map +0 -1
  163. package/dist/2-core/tooltip-v1.js +0 -145
  164. package/dist/2-core/viewtoggle-v1.d.ts +0 -27
  165. package/dist/2-core/viewtoggle-v1.d.ts.map +0 -1
  166. package/dist/2-core/viewtoggle-v1.js +0 -49
  167. package/dist/2-core/year-v1.d.ts +0 -16
  168. package/dist/2-core/year-v1.d.ts.map +0 -1
  169. package/dist/2-core/year-v1.js +0 -21
  170. package/dist/3-unit/ds-doublenav.d.ts.map +0 -1
  171. package/dist/3-unit/ds-panel.d.ts.map +0 -1
  172. package/dist/3-unit/ds-singlenav.d.ts.map +0 -1
  173. package/dist/utils/cdn-loader.d.ts +0 -19
  174. package/dist/utils/cdn-loader.d.ts.map +0 -1
  175. package/dist/utils/cdn-loader.js +0 -160
  176. package/dist/utils/keys.json +0 -41
  177. package/dist/utils/language.d.ts.map +0 -1
  178. package/dist/utils/pricing.d.ts +0 -8
  179. package/dist/utils/pricing.d.ts.map +0 -1
  180. package/dist/utils/pricing.js +0 -14
  181. package/dist/utils/scroll.d.ts +0 -34
  182. package/dist/utils/scroll.d.ts.map +0 -1
  183. package/dist/utils/scroll.js +0 -140
  184. package/dist/utils/settings.d.ts +0 -9
  185. package/dist/utils/settings.d.ts.map +0 -1
  186. package/dist/utils/settings.js +0 -14
  187. package/dist/utils/theme.d.ts.map +0 -1
  188. package/dist/utils/viewMode.d.ts +0 -14
  189. package/dist/utils/viewMode.d.ts.map +0 -1
  190. package/dist/utils/viewMode.js +0 -46
  191. /package/DS1/0-face/{2025-04-23-device.ts → device.ts} +0 -0
  192. /package/DS1/{utils → 0-face}/theme.ts +0 -0
  193. /package/DS1/{x Icon → x-icon}/1x.svg +0 -0
  194. /package/DS1/{x Icon → x-icon}/1xdots.svg +0 -0
  195. /package/DS1/{x Icon → x-icon}/1xgrid.svg +0 -0
  196. /package/DS1/{x Icon → x-icon}/1xlines.svg +0 -0
  197. /package/DS1/{x Icon → x-icon}/2x.svg +0 -0
  198. /package/DS1/{x Icon → x-icon}/2xdots.svg +0 -0
  199. /package/DS1/{x Icon → x-icon}/2xgrid.svg +0 -0
  200. /package/DS1/{x Icon → x-icon}/2xlines.svg +0 -0
  201. /package/DS1/{x Icon → x-icon}/big.svg +0 -0
  202. /package/DS1/{x Icon → x-icon}/blank.svg +0 -0
  203. /package/DS1/{x Icon → x-icon}/check.svg +0 -0
  204. /package/DS1/{x Icon → x-icon}/close.svg +0 -0
  205. /package/DS1/{x Icon → x-icon}/collapse.svg +0 -0
  206. /package/DS1/{x Icon → x-icon}/color.svg +0 -0
  207. /package/DS1/{x Icon → x-icon}/column.svg +0 -0
  208. /package/DS1/{x Icon → x-icon}/default.svg +0 -0
  209. /package/DS1/{x Icon → x-icon}/delete.svg +0 -0
  210. /package/DS1/{x Icon → x-icon}/do.svg +0 -0
  211. /package/DS1/{x Icon → x-icon}/down.svg +0 -0
  212. /package/DS1/{x Icon → x-icon}/duplicate.svg +0 -0
  213. /package/DS1/{x Icon → x-icon}/email.svg +0 -0
  214. /package/DS1/{x Icon → x-icon}/expand.svg +0 -0
  215. /package/DS1/{x Icon → x-icon}/gallery.svg +0 -0
  216. /package/DS1/{x Icon → x-icon}/group.svg +0 -0
  217. /package/DS1/{x Icon → x-icon}/head.svg +0 -0
  218. /package/DS1/{x Icon → x-icon}/icon.svg +0 -0
  219. /package/DS1/{x Icon → x-icon}/left.svg +0 -0
  220. /package/DS1/{x Icon → x-icon}/lock.svg +0 -0
  221. /package/DS1/{x Icon → x-icon}/mic.svg +0 -0
  222. /package/DS1/{x Icon → x-icon}/minimize.svg +0 -0
  223. /package/DS1/{x Icon → x-icon}/more.svg +0 -0
  224. /package/DS1/{x Icon → x-icon}/note.svg +0 -0
  225. /package/DS1/{x Icon → x-icon}/open.svg +0 -0
  226. /package/DS1/{x Icon → x-icon}/page.svg +0 -0
  227. /package/DS1/{x Icon → x-icon}/plus.svg +0 -0
  228. /package/DS1/{x Icon → x-icon}/rewind.svg +0 -0
  229. /package/DS1/{x Icon → x-icon}/right.svg +0 -0
  230. /package/DS1/{x Icon → x-icon}/row..svg +0 -0
  231. /package/DS1/{x Icon → x-icon}/search.svg +0 -0
  232. /package/DS1/{x Icon → x-icon}/see.svg +0 -0
  233. /package/DS1/{x Icon → x-icon}/star.svg +0 -0
  234. /package/DS1/{x Icon → x-icon}/title.svg +0 -0
  235. /package/DS1/{x Icon → x-icon}/undo.svg +0 -0
  236. /package/DS1/{x Icon → x-icon}/ungroup.svg +0 -0
  237. /package/DS1/{x Icon → x-icon}/unhead.svg +0 -0
  238. /package/DS1/{x Icon → x-icon}/unicon.svg +0 -0
  239. /package/DS1/{x Icon → x-icon}/unlock.svg +0 -0
  240. /package/DS1/{x Icon → x-icon}/unmic.svg +0 -0
  241. /package/DS1/{x Icon → x-icon}/unsee.svg +0 -0
  242. /package/DS1/{x Icon → x-icon}/unstar.svg +0 -0
  243. /package/DS1/{x Icon → x-icon}/untitle.svg +0 -0
  244. /package/DS1/{x Icon → x-icon}/up.svg +0 -0
  245. /package/dist/0-face/{2025-04-23-device.js → device.js} +0 -0
  246. /package/dist/{utils → 0-face}/theme.d.ts +0 -0
  247. /package/dist/{utils → 0-face}/theme.js +0 -0
package/dist/index.d.ts CHANGED
@@ -1,35 +1,25 @@
1
- import "./0-face/2025-04-23-device";
2
- import "./utils/cdn-loader";
1
+ /**
2
+ * DS one - Main entry point for all components
3
+ *
4
+ * This module initializes core utilities and exports all design system components
5
+ * organized by layer: 0-face (foundation), 2-core (components), 3-unit (composites), 4-page (layouts)
6
+ */
7
+ import "./0-face/device";
8
+ import "./0-face/i18n";
9
+ export * from "./0-face/device";
10
+ export * from "./0-face/i18n";
11
+ export * from "./0-face/preferences";
12
+ export * from "./0-face/pricing";
13
+ export * from "./0-face/theme";
3
14
  export * from "./2-core/ds-button";
4
- export * from "./2-core/ds-text";
5
- export * from "./2-core/ds-icon";
6
- export * from "./2-core/ds-link";
7
15
  export * from "./2-core/ds-cycle";
16
+ export * from "./2-core/ds-icon";
17
+ export * from "./2-core/ds-text";
8
18
  export * from "./2-core/ds-tooltip";
9
- export * from "./2-core/ds-price";
10
- export * from "./2-core/ds-markdown";
11
- export * from "./2-core/ds-home";
12
- export * from "./2-core/ds-year";
13
- export * from "./2-core/ds-title";
14
- export * from "./2-core/ds-header";
15
- export * from "./2-core/ds-attributes";
16
- export * from "./2-core/ds-downloadcv";
17
- export * from "./2-core/ds-article";
18
- export * from "./2-core/ds-viewtoggle";
19
- export * from "./2-core/ds-squarecircle";
19
+ export * from "./2-core/ds-date";
20
20
  export * from "./3-unit/ds-list";
21
- export * from "./3-unit/ds-panel";
22
21
  export * from "./3-unit/ds-row";
23
- export * from "./3-unit/ds-singlenav";
24
- export * from "./3-unit/ds-doublenav";
25
22
  export * from "./3-unit/ds-table";
26
23
  export * from "./4-page/ds-grid";
27
24
  export * from "./4-page/ds-layout";
28
- export * from "./utils/language";
29
- export * from "./utils/theme";
30
- export * from "./utils/viewMode";
31
- export * from "./utils/settings";
32
- export * from "./utils/pricing";
33
- export * from "./utils/scroll";
34
- export * from "./0-face/2025-04-23-device";
35
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../DS1/index.ts"],"names":[],"mappings":"AAIA,OAAO,4BAA4B,CAAC;AAGpC,OAAO,oBAAoB,CAAC;AAG5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AAGnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAG/B,cAAc,4BAA4B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../DS1/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,iBAAiB,CAAC;AAGzB,OAAO,eAAe,CAAC;AAMvB,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAM/B,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AAMjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAMlC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -1,43 +1,41 @@
1
- // DS one - Main entry point for all components
2
- // Export all components for easy importing
1
+ /**
2
+ * DS one - Main entry point for all components
3
+ *
4
+ * This module initializes core utilities and exports all design system components
5
+ * organized by layer: 0-face (foundation), 2-core (components), 3-unit (composites), 4-page (layouts)
6
+ */
7
+ // ============================================================================
8
+ // Initialization (side-effect imports)
9
+ // ============================================================================
3
10
  // Initialize device detection (will auto-detect and log on load)
4
- import "./0-face/2025-04-23-device";
5
- // Initialize CDN loader (will auto-load external translations if available)
6
- import "./utils/cdn-loader";
7
- // Core components
11
+ import "./0-face/device";
12
+ // Initialize language utilities (will auto-load external translations if available)
13
+ import "./0-face/i18n";
14
+ // ============================================================================
15
+ // 0-face: Foundation & Utilities
16
+ // ============================================================================
17
+ export * from "./0-face/device";
18
+ export * from "./0-face/i18n";
19
+ export * from "./0-face/preferences";
20
+ export * from "./0-face/pricing";
21
+ export * from "./0-face/theme";
22
+ // ============================================================================
23
+ // 2-core: Core Components
24
+ // ============================================================================
8
25
  export * from "./2-core/ds-button";
9
- export * from "./2-core/ds-text";
10
- export * from "./2-core/ds-icon";
11
- export * from "./2-core/ds-link";
12
26
  export * from "./2-core/ds-cycle";
27
+ export * from "./2-core/ds-icon";
28
+ export * from "./2-core/ds-text";
13
29
  export * from "./2-core/ds-tooltip";
14
- export * from "./2-core/ds-price";
15
- export * from "./2-core/ds-markdown";
16
- export * from "./2-core/ds-home";
17
- export * from "./2-core/ds-year";
18
- export * from "./2-core/ds-title";
19
- export * from "./2-core/ds-header";
20
- export * from "./2-core/ds-attributes";
21
- export * from "./2-core/ds-downloadcv";
22
- export * from "./2-core/ds-article";
23
- export * from "./2-core/ds-viewtoggle";
24
- export * from "./2-core/ds-squarecircle";
25
- // Unit components
30
+ export * from "./2-core/ds-date";
31
+ // ============================================================================
32
+ // 3-unit: Composite Components
33
+ // ============================================================================
26
34
  export * from "./3-unit/ds-list";
27
- export * from "./3-unit/ds-panel";
28
35
  export * from "./3-unit/ds-row";
29
- export * from "./3-unit/ds-singlenav";
30
- export * from "./3-unit/ds-doublenav";
31
36
  export * from "./3-unit/ds-table";
32
- // Page components
37
+ // ============================================================================
38
+ // 4-page: Layout Components
39
+ // ============================================================================
33
40
  export * from "./4-page/ds-grid";
34
41
  export * from "./4-page/ds-layout";
35
- // Utilities
36
- export * from "./utils/language";
37
- export * from "./utils/theme";
38
- export * from "./utils/viewMode";
39
- export * from "./utils/settings";
40
- export * from "./utils/pricing";
41
- export * from "./utils/scroll";
42
- // Device detection
43
- export * from "./0-face/2025-04-23-device";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ds-one",
3
- "version": "0.2.0-alpha.2",
3
+ "version": "0.2.5-alpha.1",
4
4
  "description": "A component-based design system built with TypeScript and LitElement that provides reusable UI components with built-in theming, internationalization, and accessibility features.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",
@@ -40,7 +40,7 @@
40
40
  "lint:fix": "eslint . --ext .ts,.js --fix",
41
41
  "format": "prettier --write .",
42
42
  "test": "bun test",
43
- "clean": "rm -rf node_modules web/node_modules",
43
+ "clean": "rm -rf node_modules web/node_modules dist",
44
44
  "release:patch": "bun run scripts/release.ts patch",
45
45
  "release:minor": "bun run scripts/release.ts minor",
46
46
  "release:major": "bun run scripts/release.ts major",
@@ -1,4 +0,0 @@
1
- // 2025-04-23-language.ts
2
- // Language detection and internationalization utilities
3
-
4
- // TODO: Implement language detection utilities
@@ -1,454 +0,0 @@
1
- import { LitElement, css, html } from "lit";
2
- import { getText } from "../utils/language";
3
- import { getViewMode } from "../utils/viewMode";
4
-
5
- /**
6
- * A component for displaying article content with image/text toggle
7
- *
8
- * @element ds-article
9
- */
10
- export class Article extends LitElement {
11
- static get properties() {
12
- return {
13
- imgLightDesktop: {
14
- type: String,
15
- reflect: true,
16
- attribute: "img-light-desktop",
17
- },
18
- imgDarkDesktop: {
19
- type: String,
20
- reflect: true,
21
- attribute: "img-dark-desktop",
22
- },
23
- imgLightMobile: {
24
- type: String,
25
- reflect: true,
26
- attribute: "img-light-mobile",
27
- },
28
- imgDarkMobile: {
29
- type: String,
30
- reflect: true,
31
- attribute: "img-dark-mobile",
32
- },
33
- src: { type: String, reflect: true },
34
- alt: { type: String, reflect: true },
35
- imageToggle: { type: Boolean, reflect: true, attribute: "image-toggle" },
36
- imageOnlyWidth: {
37
- type: Number,
38
- reflect: true,
39
- attribute: "image-only-width",
40
- },
41
- priority: { type: Boolean, reflect: true },
42
- externalToggle: {
43
- type: Boolean,
44
- reflect: true,
45
- attribute: "external-toggle",
46
- },
47
- mobileKey: { type: String, reflect: true, attribute: "mobile-key" },
48
- desktopKey: { type: String, reflect: true, attribute: "desktop-key" },
49
- textKey: { type: String, reflect: true, attribute: "text-key" },
50
- defaultValue: { type: String, reflect: true, attribute: "default-value" },
51
- _text: { type: String, state: true },
52
- _currentImage: { type: String, state: true },
53
- _imageVisible: { type: Boolean, state: true },
54
- _shouldAnimate: { type: Boolean, state: true },
55
- };
56
- }
57
-
58
- declare imgLightDesktop: string;
59
- declare imgDarkDesktop: string;
60
- declare imgLightMobile: string;
61
- declare imgDarkMobile: string;
62
- declare src: string;
63
- declare alt: string;
64
- declare imageToggle: boolean;
65
- declare imageOnlyWidth: number;
66
- declare priority: boolean;
67
- declare externalToggle: boolean;
68
- declare mobileKey: string;
69
- declare desktopKey: string;
70
- declare textKey: string;
71
- declare defaultValue: string;
72
- declare _text: string;
73
- declare _currentImage: string;
74
- declare _imageVisible: boolean;
75
- declare _shouldAnimate: boolean;
76
-
77
- private _mql: MediaQueryList | null;
78
- private boundHandlers: {
79
- languageChanged: EventListener;
80
- themeChanged: EventListener;
81
- viewportChanged?: (e: MediaQueryListEvent) => void;
82
- viewModeChanged: EventListener;
83
- };
84
-
85
- constructor() {
86
- super();
87
- this.imgLightDesktop = "";
88
- this.imgDarkDesktop = "";
89
- this.imgLightMobile = "";
90
- this.imgDarkMobile = "";
91
- this.src = "";
92
- this.alt = "";
93
- this.imageToggle = false;
94
- this.imageOnlyWidth = 480;
95
- this.priority = false;
96
- this.externalToggle = false;
97
- this.mobileKey = "";
98
- this.desktopKey = "";
99
- this.textKey = "";
100
- this.defaultValue = "";
101
- this._text = "";
102
- this._currentImage = "";
103
- this._imageVisible = true;
104
- this._shouldAnimate = false;
105
- this._mql = null;
106
-
107
- this.boundHandlers = {
108
- languageChanged: (() => {
109
- this._loadText();
110
- }) as EventListener,
111
- themeChanged: (() => {
112
- this._resolveImage();
113
- }) as EventListener,
114
- viewportChanged: (e: MediaQueryListEvent) => {
115
- this._resolveImage();
116
- this._loadText();
117
- },
118
- viewModeChanged: ((e: CustomEvent) => {
119
- if (this.imageToggle && this.externalToggle) {
120
- const newMode = e.detail;
121
- const shouldShowImage = newMode === "image";
122
- if (this._imageVisible !== shouldShowImage) {
123
- this._shouldAnimate = true;
124
- this._imageVisible = shouldShowImage;
125
- this.requestUpdate();
126
- }
127
- }
128
- }) as EventListener,
129
- };
130
- }
131
-
132
- static styles = css`
133
- :host {
134
- display: block;
135
- font-family: var(--typeface);
136
- overflow-wrap: break-word;
137
- word-wrap: break-word;
138
- word-break: break-word;
139
- hyphens: auto;
140
- color: light-dark(var(--black), var(--white));
141
- line-height: calc(20px * var(--scaling-factor));
142
- padding: calc(2px * var(--scaling-factor));
143
- }
144
-
145
- .container {
146
- position: relative;
147
- width: min(100%, var(--image-only-width));
148
- }
149
-
150
- figure.media,
151
- .copy {
152
- margin: 0;
153
- width: 100%;
154
- overflow: hidden;
155
- display: block;
156
- margin-bottom: calc(8px * var(--scaling-factor));
157
- }
158
-
159
- .fade-in {
160
- animation: fade-in 0.25s ease;
161
- }
162
-
163
- @keyframes fade-in {
164
- from {
165
- opacity: 0;
166
- }
167
- to {
168
- opacity: 1;
169
- }
170
- }
171
-
172
- img {
173
- display: block;
174
- width: 100%;
175
- height: auto;
176
- opacity: 0;
177
- transition: opacity 0.2s ease-in-out;
178
- }
179
-
180
- img.loaded {
181
- opacity: 1;
182
- }
183
-
184
- .toggle-button {
185
- background: none;
186
- border: none;
187
- color: inherit;
188
- cursor: pointer;
189
- font-family: var(--typeface);
190
- font-size: calc(14px * var(--scaling-factor));
191
- margin-bottom: calc(8px * var(--scaling-factor));
192
- padding: 0;
193
- text-decoration: underline;
194
- }
195
-
196
- .toggle-button:hover {
197
- opacity: 0.7;
198
- }
199
- `;
200
-
201
- updated(changed: Map<string, unknown>) {
202
- if (changed.has("imageOnlyWidth")) {
203
- const opx = Number(this.imageOnlyWidth) || 480;
204
- this.style.setProperty("--image-only-width", `${opx}px`);
205
- }
206
- if (
207
- changed.has("imgLightDesktop") ||
208
- changed.has("imgDarkDesktop") ||
209
- changed.has("imgLightMobile") ||
210
- changed.has("imgDarkMobile") ||
211
- changed.has("src")
212
- ) {
213
- this._resolveImage();
214
- }
215
- if (
216
- changed.has("textKey") ||
217
- changed.has("defaultValue") ||
218
- changed.has("mobileKey") ||
219
- changed.has("desktopKey")
220
- ) {
221
- this._loadText();
222
- }
223
- if (changed.has("imageToggle")) {
224
- const isExternallyControlled = this.imageToggle && this.externalToggle;
225
- if (!isExternallyControlled) {
226
- const newImageVisible = !this.imageToggle;
227
- if (this._imageVisible !== newImageVisible) {
228
- this._shouldAnimate = true;
229
- this._imageVisible = newImageVisible;
230
- }
231
- }
232
- }
233
- }
234
-
235
- connectedCallback() {
236
- super.connectedCallback();
237
- this._loadText();
238
- this._resolveImage();
239
-
240
- if (this.imageToggle && this.externalToggle) {
241
- const currentMode = getViewMode();
242
- this._imageVisible = currentMode === "image";
243
- } else {
244
- this._imageVisible = !this.imageToggle;
245
- }
246
-
247
- this.style.setProperty("--image-only-width", `${this.imageOnlyWidth}px`);
248
-
249
- try {
250
- this._mql = window.matchMedia("(max-width: 720px)");
251
- if (this._mql && this.boundHandlers.viewportChanged) {
252
- this._mql.addEventListener(
253
- "change",
254
- this.boundHandlers.viewportChanged
255
- );
256
- }
257
- } catch (err) {
258
- // no-op
259
- }
260
-
261
- window.addEventListener(
262
- "language-changed",
263
- this.boundHandlers.languageChanged
264
- );
265
- window.addEventListener("theme-changed", this.boundHandlers.themeChanged);
266
-
267
- if (this.imageToggle && this.externalToggle) {
268
- window.addEventListener(
269
- "view-mode-changed",
270
- this.boundHandlers.viewModeChanged
271
- );
272
-
273
- setTimeout(() => {
274
- const currentMode = getViewMode();
275
- const shouldShowImage = currentMode === "image";
276
- if (this._imageVisible !== shouldShowImage) {
277
- this._shouldAnimate = true;
278
- this._imageVisible = shouldShowImage;
279
- this.requestUpdate();
280
- }
281
- }, 100);
282
- } else if (this.imageToggle) {
283
- window.addEventListener(
284
- "article-toggle",
285
- this._toggleImage as EventListener
286
- );
287
- }
288
- }
289
-
290
- disconnectedCallback() {
291
- super.disconnectedCallback();
292
- window.removeEventListener(
293
- "language-changed",
294
- this.boundHandlers.languageChanged
295
- );
296
- window.removeEventListener(
297
- "theme-changed",
298
- this.boundHandlers.themeChanged
299
- );
300
- window.removeEventListener(
301
- "article-toggle",
302
- this._toggleImage as EventListener
303
- );
304
- window.removeEventListener(
305
- "view-mode-changed",
306
- this.boundHandlers.viewModeChanged
307
- );
308
-
309
- if (this._mql && this.boundHandlers.viewportChanged) {
310
- try {
311
- this._mql.removeEventListener(
312
- "change",
313
- this.boundHandlers.viewportChanged
314
- );
315
- } catch (err) {
316
- // no-op
317
- }
318
- }
319
- }
320
-
321
- private _loadText() {
322
- const isMobile = (() => {
323
- try {
324
- return (
325
- window.matchMedia && window.matchMedia("(max-width: 720px)").matches
326
- );
327
- } catch (err) {
328
- return false;
329
- }
330
- })();
331
-
332
- const selectedKey = (() => {
333
- const mobile = (this.mobileKey || "").trim();
334
- const desktop = (this.desktopKey || "").trim();
335
- const base = (this.textKey || "").trim();
336
- if (mobile || desktop) {
337
- return isMobile ? mobile || base : desktop || base;
338
- }
339
- return base;
340
- })();
341
-
342
- if (!selectedKey) {
343
- this._text = this.defaultValue || "";
344
- return;
345
- }
346
-
347
- try {
348
- const text = getText(selectedKey);
349
- this._text = text || this.defaultValue || selectedKey;
350
- } catch (error) {
351
- console.error(
352
- `[ds-article] Error loading text for key "${selectedKey}":`,
353
- error
354
- );
355
- this._text = this.defaultValue || selectedKey;
356
- }
357
- }
358
-
359
- private _resolveImage() {
360
- if (this.src && typeof this.src === "string") {
361
- const direct = this.src.startsWith("@") ? this.src.slice(1) : this.src;
362
- this._currentImage = direct;
363
- return;
364
- }
365
-
366
- const theme =
367
- document.documentElement.getAttribute("data-theme") || "light";
368
- const isMobile = (() => {
369
- try {
370
- return (
371
- window.matchMedia && window.matchMedia("(max-width: 720px)").matches
372
- );
373
- } catch (err) {
374
- return false;
375
- }
376
- })();
377
-
378
- let chosen = "";
379
- if (isMobile) {
380
- if (theme === "dark") {
381
- chosen = this.imgDarkMobile || this.imgLightMobile;
382
- } else {
383
- chosen = this.imgLightMobile || this.imgDarkMobile;
384
- }
385
- } else {
386
- if (theme === "dark") {
387
- chosen = this.imgDarkDesktop || this.imgLightDesktop;
388
- } else {
389
- chosen = this.imgLightDesktop || this.imgDarkDesktop;
390
- }
391
- }
392
-
393
- if (typeof chosen === "string" && chosen.startsWith("@")) {
394
- chosen = chosen.slice(1);
395
- }
396
- this._currentImage = chosen || "";
397
- }
398
-
399
- private _toggleImage = () => {
400
- this._shouldAnimate = true;
401
- this._imageVisible = !this._imageVisible;
402
- this.requestUpdate();
403
- };
404
-
405
- private _handleImageLoad = (e: Event) => {
406
- const img = e.target as HTMLImageElement;
407
- img.classList.add("loaded");
408
- };
409
-
410
- render() {
411
- const showImage =
412
- (this.imageToggle ? this._imageVisible : true) && !!this._currentImage;
413
- const animationClass = this._shouldAnimate ? "fade-in" : "";
414
-
415
- if (this._shouldAnimate) {
416
- this._shouldAnimate = false;
417
- }
418
-
419
- const buttonText = this._imageVisible
420
- ? getText("hideImage")
421
- : getText("viewImage");
422
-
423
- return html`
424
- <div class="container">
425
- ${this.imageToggle && !this.externalToggle
426
- ? html`<button @click="${this._toggleImage}" class="toggle-button">
427
- ${buttonText}
428
- </button>`
429
- : ""}
430
- ${showImage
431
- ? html`<figure class="media ${animationClass}">
432
- <img
433
- src="${this._currentImage}"
434
- alt="${this.alt || ""}"
435
- loading="${this.priority ? "eager" : "lazy"}"
436
- fetchpriority="${this.priority ? "high" : "auto"}"
437
- decoding="async"
438
- @load="${this._handleImageLoad}"
439
- />
440
- </figure>`
441
- : html`<p class="copy ${animationClass}">${this._text}</p>`}
442
- </div>
443
- `;
444
- }
445
- }
446
-
447
- customElements.define("ds-article", Article);
448
-
449
- declare global {
450
- interface HTMLElementTagNameMap {
451
- "ds-article": Article;
452
- }
453
- }
454
-