@yewdiel21/motion-kit 0.10.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (459) hide show
  1. package/README.md +81 -0
  2. package/bin/motion-kit.mjs +3 -3
  3. package/dist/auto/index.d.ts +56 -3
  4. package/dist/auto/index.js +107 -3
  5. package/dist/auto/index.js.map +1 -1
  6. package/dist/{chunk-XAKC2QY7.js → chunk-6IRJYXJU.js} +3 -28
  7. package/dist/chunk-6IRJYXJU.js.map +1 -0
  8. package/dist/chunk-A6QQCF6V.js +21333 -0
  9. package/dist/chunk-A6QQCF6V.js.map +1 -0
  10. package/dist/chunk-JXRS3OEA.js +3638 -0
  11. package/dist/chunk-JXRS3OEA.js.map +1 -0
  12. package/dist/chunk-QP4QJOEN.js +72 -0
  13. package/dist/chunk-QP4QJOEN.js.map +1 -0
  14. package/dist/css/components/activity-feed.css +240 -0
  15. package/dist/css/components/add-to-cart.css +72 -0
  16. package/dist/css/components/attachment.css +266 -0
  17. package/dist/css/components/bidirectional-slider.css +168 -0
  18. package/dist/css/components/breadcrumb.css +110 -0
  19. package/dist/css/components/chart-tooltip.css +168 -0
  20. package/dist/css/components/chart.css +296 -0
  21. package/dist/css/components/code-block.css +264 -0
  22. package/dist/css/components/color-area.css +82 -0
  23. package/dist/css/components/color-field.css +67 -0
  24. package/dist/css/components/color-picker.css +131 -0
  25. package/dist/css/components/color-slider.css +113 -0
  26. package/dist/css/components/command-search.css +252 -0
  27. package/dist/css/components/context-menu.css +23 -0
  28. package/dist/css/components/credit-card.css +288 -0
  29. package/dist/css/components/data-table.css +686 -0
  30. package/dist/css/components/date-range-picker.css +168 -0
  31. package/dist/css/components/date-time-picker.css +178 -0
  32. package/dist/css/components/drawer.css +58 -0
  33. package/dist/css/components/editable-table.css +201 -0
  34. package/dist/css/components/empty-state.css +61 -0
  35. package/dist/css/components/file-explorer.css +633 -0
  36. package/dist/css/components/filter-builder.css +227 -0
  37. package/dist/css/components/heatmap-chart.css +391 -0
  38. package/dist/css/components/hold-confirm.css +87 -0
  39. package/dist/css/components/hover-card.css +19 -7
  40. package/dist/css/components/image-preview.css +283 -0
  41. package/dist/css/components/json-viewer.css +304 -0
  42. package/dist/css/components/like-button.css +78 -0
  43. package/dist/css/components/link-preview.css +275 -0
  44. package/dist/css/components/loading-button.css +77 -0
  45. package/dist/css/components/multi-select.css +267 -0
  46. package/dist/css/components/nav.css +102 -102
  47. package/dist/css/components/notification-bell.css +127 -0
  48. package/dist/css/components/orbit-menu.css +130 -0
  49. package/dist/css/components/pagination.css +10 -5
  50. package/dist/css/components/password-strength.css +183 -0
  51. package/dist/css/components/pie-chart.css +390 -0
  52. package/dist/css/components/pill-button.css +135 -0
  53. package/dist/css/components/popover.css +25 -0
  54. package/dist/css/components/progress.css +140 -0
  55. package/dist/css/components/questionnaire.css +217 -0
  56. package/dist/css/components/radar-chart.css +370 -0
  57. package/dist/css/components/radial-chart.css +398 -0
  58. package/dist/css/components/range-calendar.css +186 -0
  59. package/dist/css/components/range-slider.css +192 -0
  60. package/dist/css/components/resizable-panel.css +243 -0
  61. package/dist/css/components/rich-text-editor.css +284 -0
  62. package/dist/css/components/sankey-chart.css +358 -0
  63. package/dist/css/components/scratch-card.css +75 -0
  64. package/dist/css/components/scroll-island.css +111 -0
  65. package/dist/css/components/select.css +136 -0
  66. package/dist/css/components/skeleton.css +108 -0
  67. package/dist/css/components/split-view.css +19 -0
  68. package/dist/css/components/star-rating.css +80 -0
  69. package/dist/css/components/stat-card.css +164 -0
  70. package/dist/css/components/swipe-actions.css +105 -0
  71. package/dist/css/components/tag-input.css +244 -0
  72. package/dist/css/components/time-field.css +88 -0
  73. package/dist/css/components/timeline.css +219 -0
  74. package/dist/css/components/toolbar.css +122 -0
  75. package/dist/css/components/tooltip.css +79 -0
  76. package/dist/css/components/tree-view.css +289 -0
  77. package/dist/css/components/virtual-list.css +195 -0
  78. package/dist/css/components/voice-dots.css +70 -0
  79. package/dist/css/tokens.css +185 -181
  80. package/dist/elements/index.d.ts +849 -7
  81. package/dist/elements/index.js +1642 -8
  82. package/dist/elements/index.js.map +1 -1
  83. package/dist/{engine-GDGwQnJE.d.ts → engine-5zRIssTO.d.ts} +11 -1
  84. package/dist/engine-QECQnGz1.d.ts +33 -0
  85. package/dist/index.css +10890 -311
  86. package/dist/index.d.ts +89 -5
  87. package/dist/index.js +273 -9
  88. package/dist/index.js.map +1 -1
  89. package/dist/react/index.d.ts +686 -24
  90. package/dist/react/index.js +2345 -9
  91. package/dist/react/index.js.map +1 -1
  92. package/dist/{reduced-BmBzKH94.d.ts → reduced-6X_bns60.d.ts} +9 -2
  93. package/dist/reveal-BfyKKsw4.d.ts +2474 -0
  94. package/dist/store-CA2Qcun_.d.ts +453 -0
  95. package/package.json +9 -16
  96. package/registry.json +1096 -543
  97. package/src/auto/auto-init.ts +104 -0
  98. package/src/components/activity-feed/README.md +56 -0
  99. package/src/components/activity-feed/activity-feed.css +239 -0
  100. package/src/components/activity-feed/element.ts +36 -0
  101. package/src/components/activity-feed/engine.ts +351 -0
  102. package/src/components/activity-feed/react.tsx +32 -0
  103. package/src/components/add-to-cart/README.md +34 -0
  104. package/src/components/add-to-cart/add-to-cart.css +71 -0
  105. package/src/components/add-to-cart/element.ts +20 -0
  106. package/src/components/add-to-cart/engine.ts +206 -0
  107. package/src/components/add-to-cart/react.tsx +29 -0
  108. package/src/components/attachment/README.md +27 -0
  109. package/src/components/attachment/attachment.css +265 -0
  110. package/src/components/attachment/element.ts +50 -0
  111. package/src/components/attachment/engine.ts +469 -0
  112. package/src/components/attachment/react.tsx +65 -0
  113. package/src/components/bidirectional-slider/README.md +46 -0
  114. package/src/components/bidirectional-slider/bidirectional-slider.css +167 -0
  115. package/src/components/bidirectional-slider/element.ts +42 -0
  116. package/src/components/bidirectional-slider/engine.ts +289 -0
  117. package/src/components/bidirectional-slider/react.tsx +45 -0
  118. package/src/components/breadcrumb/README.md +38 -0
  119. package/src/components/breadcrumb/breadcrumb.css +109 -0
  120. package/src/components/breadcrumb/element.ts +27 -0
  121. package/src/components/breadcrumb/engine.ts +249 -0
  122. package/src/components/breadcrumb/react.tsx +30 -0
  123. package/src/components/chart/README.md +34 -0
  124. package/src/components/chart/chart.css +295 -0
  125. package/src/components/chart/element.ts +43 -0
  126. package/src/components/chart/engine.ts +838 -0
  127. package/src/components/chart/parts.ts +237 -0
  128. package/src/components/chart/react.tsx +50 -0
  129. package/src/components/chart/use-chart.ts +55 -0
  130. package/src/components/chart-tooltip/README.md +53 -0
  131. package/src/components/chart-tooltip/chart-tooltip.css +167 -0
  132. package/src/components/chart-tooltip/element.ts +37 -0
  133. package/src/components/chart-tooltip/engine.ts +442 -0
  134. package/src/components/chart-tooltip/react.tsx +47 -0
  135. package/src/components/code-block/README.md +19 -0
  136. package/src/components/code-block/code-block.css +263 -0
  137. package/src/components/code-block/element.ts +34 -0
  138. package/src/components/code-block/engine.ts +254 -0
  139. package/src/components/code-block/highlight.ts +244 -0
  140. package/src/components/code-block/react.tsx +94 -0
  141. package/src/components/color-area/README.md +50 -0
  142. package/src/components/color-area/color-area.css +81 -0
  143. package/src/components/color-area/element.ts +26 -0
  144. package/src/components/color-area/engine.ts +246 -0
  145. package/src/components/color-area/react.tsx +42 -0
  146. package/src/components/color-field/README.md +43 -0
  147. package/src/components/color-field/color-field.css +66 -0
  148. package/src/components/color-field/element.ts +26 -0
  149. package/src/components/color-field/engine.ts +174 -0
  150. package/src/components/color-field/react.tsx +42 -0
  151. package/src/components/color-picker/README.md +45 -0
  152. package/src/components/color-picker/color-picker.css +130 -0
  153. package/src/components/color-picker/element.ts +45 -0
  154. package/src/components/color-picker/engine.ts +314 -0
  155. package/src/components/color-picker/react.tsx +47 -0
  156. package/src/components/color-slider/README.md +55 -0
  157. package/src/components/color-slider/color-slider.css +112 -0
  158. package/src/components/color-slider/element.ts +26 -0
  159. package/src/components/color-slider/engine.ts +234 -0
  160. package/src/components/color-slider/react.tsx +45 -0
  161. package/src/components/command-search/README.md +15 -0
  162. package/src/components/command-search/command-search.css +251 -0
  163. package/src/components/command-search/element.ts +36 -0
  164. package/src/components/command-search/engine.ts +356 -0
  165. package/src/components/command-search/match.ts +53 -0
  166. package/src/components/command-search/react.tsx +66 -0
  167. package/src/components/context-menu/README.md +31 -0
  168. package/src/components/context-menu/context-menu.css +22 -0
  169. package/src/components/context-menu/element.ts +40 -0
  170. package/src/components/context-menu/engine.ts +153 -0
  171. package/src/components/context-menu/react.tsx +57 -0
  172. package/src/components/credit-card/README.md +20 -0
  173. package/src/components/credit-card/card.ts +77 -0
  174. package/src/components/credit-card/credit-card.css +287 -0
  175. package/src/components/credit-card/element.ts +33 -0
  176. package/src/components/credit-card/engine.ts +410 -0
  177. package/src/components/credit-card/react.tsx +36 -0
  178. package/src/components/data-table/README.md +83 -0
  179. package/src/components/data-table/data-table.css +685 -0
  180. package/src/components/data-table/element.ts +54 -0
  181. package/src/components/data-table/engine.ts +1111 -0
  182. package/src/components/data-table/react.tsx +94 -0
  183. package/src/components/date-range-picker/README.md +51 -0
  184. package/src/components/date-range-picker/date-range-picker.css +167 -0
  185. package/src/components/date-range-picker/element.ts +52 -0
  186. package/src/components/date-range-picker/engine.ts +352 -0
  187. package/src/components/date-range-picker/react.tsx +57 -0
  188. package/src/components/date-time-picker/README.md +48 -0
  189. package/src/components/date-time-picker/date-time-picker.css +177 -0
  190. package/src/components/date-time-picker/element.ts +47 -0
  191. package/src/components/date-time-picker/engine.ts +350 -0
  192. package/src/components/date-time-picker/react.tsx +54 -0
  193. package/src/components/dialog/README.md +103 -102
  194. package/src/components/dialog/element.ts +123 -118
  195. package/src/components/dialog/engine.ts +449 -432
  196. package/src/components/drawer/README.md +28 -0
  197. package/src/components/drawer/drawer.css +57 -0
  198. package/src/components/drawer/element.ts +21 -0
  199. package/src/components/drawer/engine.ts +56 -0
  200. package/src/components/drawer/react.tsx +85 -0
  201. package/src/components/editable-table/README.md +67 -0
  202. package/src/components/editable-table/editable-table.css +200 -0
  203. package/src/components/editable-table/element.ts +45 -0
  204. package/src/components/editable-table/engine.ts +831 -0
  205. package/src/components/editable-table/react.tsx +79 -0
  206. package/src/components/empty-state/README.md +41 -0
  207. package/src/components/empty-state/element.ts +23 -0
  208. package/src/components/empty-state/empty-state.css +60 -0
  209. package/src/components/empty-state/engine.ts +232 -0
  210. package/src/components/empty-state/react.tsx +34 -0
  211. package/src/components/file-explorer/README.md +67 -0
  212. package/src/components/file-explorer/element.ts +39 -0
  213. package/src/components/file-explorer/engine.ts +1307 -0
  214. package/src/components/file-explorer/file-explorer.css +632 -0
  215. package/src/components/file-explorer/react.tsx +77 -0
  216. package/src/components/filter-builder/README.md +47 -0
  217. package/src/components/filter-builder/element.ts +34 -0
  218. package/src/components/filter-builder/engine.ts +396 -0
  219. package/src/components/filter-builder/filter-builder.css +226 -0
  220. package/src/components/filter-builder/react.tsx +36 -0
  221. package/src/components/heatmap-chart/README.md +48 -0
  222. package/src/components/heatmap-chart/element.ts +21 -0
  223. package/src/components/heatmap-chart/engine.ts +281 -0
  224. package/src/components/heatmap-chart/heatmap-chart.css +93 -0
  225. package/src/components/heatmap-chart/react.tsx +14 -0
  226. package/src/components/hold-confirm/README.md +13 -0
  227. package/src/components/hold-confirm/element.ts +24 -0
  228. package/src/components/hold-confirm/engine.ts +216 -0
  229. package/src/components/hold-confirm/hold-confirm.css +86 -0
  230. package/src/components/hold-confirm/react.tsx +28 -0
  231. package/src/components/hover-card/README.md +6 -2
  232. package/src/components/hover-card/engine.ts +98 -7
  233. package/src/components/hover-card/hover-card.css +19 -7
  234. package/src/components/image-preview/README.md +16 -0
  235. package/src/components/image-preview/element.ts +26 -0
  236. package/src/components/image-preview/engine.ts +405 -0
  237. package/src/components/image-preview/image-preview.css +282 -0
  238. package/src/components/image-preview/react.tsx +43 -0
  239. package/src/components/json-viewer/README.md +56 -0
  240. package/src/components/json-viewer/element.ts +37 -0
  241. package/src/components/json-viewer/engine.ts +449 -0
  242. package/src/components/json-viewer/json-viewer.css +303 -0
  243. package/src/components/json-viewer/react.tsx +56 -0
  244. package/src/components/like-button/README.md +13 -0
  245. package/src/components/like-button/element.ts +47 -0
  246. package/src/components/like-button/engine.ts +145 -0
  247. package/src/components/like-button/like-button.css +77 -0
  248. package/src/components/like-button/react.tsx +39 -0
  249. package/src/components/link-preview/README.md +19 -0
  250. package/src/components/link-preview/element.ts +29 -0
  251. package/src/components/link-preview/engine.ts +192 -0
  252. package/src/components/link-preview/link-preview.css +274 -0
  253. package/src/components/link-preview/react.tsx +101 -0
  254. package/src/components/loading-button/README.md +45 -0
  255. package/src/components/loading-button/element.ts +34 -0
  256. package/src/components/loading-button/engine.ts +201 -0
  257. package/src/components/loading-button/loading-button.css +76 -0
  258. package/src/components/loading-button/react.tsx +43 -0
  259. package/src/components/multi-select/README.md +48 -0
  260. package/src/components/multi-select/element.ts +28 -0
  261. package/src/components/multi-select/engine.ts +294 -0
  262. package/src/components/multi-select/multi-select.css +266 -0
  263. package/src/components/multi-select/react.tsx +39 -0
  264. package/src/components/nav/README.md +12 -10
  265. package/src/components/nav/element.ts +5 -5
  266. package/src/components/nav/engine.ts +21 -14
  267. package/src/components/nav/nav.css +102 -102
  268. package/src/components/nav/react.tsx +4 -4
  269. package/src/components/notification-bell/README.md +14 -0
  270. package/src/components/notification-bell/element.ts +48 -0
  271. package/src/components/notification-bell/engine.ts +202 -0
  272. package/src/components/notification-bell/notification-bell.css +126 -0
  273. package/src/components/notification-bell/react.tsx +57 -0
  274. package/src/components/orbit-menu/README.md +46 -0
  275. package/src/components/orbit-menu/element.ts +27 -0
  276. package/src/components/orbit-menu/engine.ts +179 -0
  277. package/src/components/orbit-menu/orbit-menu.css +129 -0
  278. package/src/components/orbit-menu/react.tsx +44 -0
  279. package/src/components/pagination/README.md +1 -1
  280. package/src/components/pagination/engine.ts +50 -4
  281. package/src/components/pagination/pagination.css +10 -5
  282. package/src/components/password-strength/README.md +17 -0
  283. package/src/components/password-strength/element.ts +22 -0
  284. package/src/components/password-strength/engine.ts +212 -0
  285. package/src/components/password-strength/password-strength.css +182 -0
  286. package/src/components/password-strength/react.tsx +36 -0
  287. package/src/components/password-strength/score.ts +62 -0
  288. package/src/components/pie-chart/README.md +48 -0
  289. package/src/components/pie-chart/element.ts +30 -0
  290. package/src/components/pie-chart/engine.ts +283 -0
  291. package/src/components/pie-chart/pie-chart.css +92 -0
  292. package/src/components/pie-chart/react.tsx +14 -0
  293. package/src/components/pill-button/README.md +46 -0
  294. package/src/components/pill-button/element.ts +16 -0
  295. package/src/components/pill-button/engine.ts +77 -0
  296. package/src/components/pill-button/pill-button.css +134 -0
  297. package/src/components/pill-button/react.tsx +32 -0
  298. package/src/components/popover/README.md +44 -0
  299. package/src/components/popover/element.ts +31 -0
  300. package/src/components/popover/engine.ts +114 -0
  301. package/src/components/popover/popover.css +24 -0
  302. package/src/components/popover/react.tsx +50 -0
  303. package/src/components/progress/README.md +17 -0
  304. package/src/components/progress/element.ts +30 -0
  305. package/src/components/progress/engine.ts +173 -0
  306. package/src/components/progress/progress.css +139 -0
  307. package/src/components/progress/react.tsx +35 -0
  308. package/src/components/questionnaire/README.md +32 -0
  309. package/src/components/questionnaire/element.ts +118 -0
  310. package/src/components/questionnaire/engine.ts +255 -0
  311. package/src/components/questionnaire/questionnaire.css +216 -0
  312. package/src/components/questionnaire/react.tsx +140 -0
  313. package/src/components/radar-chart/README.md +48 -0
  314. package/src/components/radar-chart/element.ts +30 -0
  315. package/src/components/radar-chart/engine.ts +327 -0
  316. package/src/components/radar-chart/radar-chart.css +72 -0
  317. package/src/components/radar-chart/react.tsx +14 -0
  318. package/src/components/radial-chart/README.md +48 -0
  319. package/src/components/radial-chart/element.ts +30 -0
  320. package/src/components/radial-chart/engine.ts +290 -0
  321. package/src/components/radial-chart/radial-chart.css +100 -0
  322. package/src/components/radial-chart/react.tsx +14 -0
  323. package/src/components/range-calendar/README.md +58 -0
  324. package/src/components/range-calendar/element.ts +42 -0
  325. package/src/components/range-calendar/engine.ts +390 -0
  326. package/src/components/range-calendar/range-calendar.css +185 -0
  327. package/src/components/range-calendar/react.tsx +56 -0
  328. package/src/components/range-slider/README.md +23 -0
  329. package/src/components/range-slider/element.ts +53 -0
  330. package/src/components/range-slider/engine.ts +316 -0
  331. package/src/components/range-slider/range-slider.css +191 -0
  332. package/src/components/range-slider/react.tsx +66 -0
  333. package/src/components/resizable-panel/README.md +61 -0
  334. package/src/components/resizable-panel/element.ts +36 -0
  335. package/src/components/resizable-panel/engine.ts +551 -0
  336. package/src/components/resizable-panel/react.tsx +74 -0
  337. package/src/components/resizable-panel/resizable-panel.css +242 -0
  338. package/src/components/rich-text-editor/README.md +57 -0
  339. package/src/components/rich-text-editor/element.ts +34 -0
  340. package/src/components/rich-text-editor/engine.ts +673 -0
  341. package/src/components/rich-text-editor/react.tsx +60 -0
  342. package/src/components/rich-text-editor/rich-text-editor.css +283 -0
  343. package/src/components/sankey-chart/README.md +48 -0
  344. package/src/components/sankey-chart/element.ts +31 -0
  345. package/src/components/sankey-chart/engine.ts +401 -0
  346. package/src/components/sankey-chart/react.tsx +14 -0
  347. package/src/components/sankey-chart/sankey-chart.css +60 -0
  348. package/src/components/scratch-card/README.md +15 -0
  349. package/src/components/scratch-card/element.ts +30 -0
  350. package/src/components/scratch-card/engine.ts +257 -0
  351. package/src/components/scratch-card/react.tsx +40 -0
  352. package/src/components/scratch-card/scratch-card.css +74 -0
  353. package/src/components/scroll-island/README.md +34 -0
  354. package/src/components/scroll-island/element.ts +16 -0
  355. package/src/components/scroll-island/engine.ts +252 -0
  356. package/src/components/scroll-island/react.tsx +26 -0
  357. package/src/components/scroll-island/scroll-island.css +110 -0
  358. package/src/components/select/README.md +34 -0
  359. package/src/components/select/element.ts +26 -0
  360. package/src/components/select/engine.ts +267 -0
  361. package/src/components/select/react.tsx +33 -0
  362. package/src/components/select/select.css +135 -0
  363. package/src/components/skeleton/README.md +15 -0
  364. package/src/components/skeleton/element.ts +32 -0
  365. package/src/components/skeleton/engine.ts +104 -0
  366. package/src/components/skeleton/react.tsx +41 -0
  367. package/src/components/skeleton/skeleton.css +107 -0
  368. package/src/components/split-view/README.md +50 -0
  369. package/src/components/split-view/element.ts +34 -0
  370. package/src/components/split-view/engine.ts +114 -0
  371. package/src/components/split-view/react.tsx +63 -0
  372. package/src/components/split-view/split-view.css +18 -0
  373. package/src/components/star-rating/README.md +14 -0
  374. package/src/components/star-rating/element.ts +26 -0
  375. package/src/components/star-rating/engine.ts +217 -0
  376. package/src/components/star-rating/react.tsx +33 -0
  377. package/src/components/star-rating/star-rating.css +79 -0
  378. package/src/components/stat-card/README.md +42 -0
  379. package/src/components/stat-card/element.ts +40 -0
  380. package/src/components/stat-card/engine.ts +283 -0
  381. package/src/components/stat-card/react.tsx +36 -0
  382. package/src/components/stat-card/stat-card.css +163 -0
  383. package/src/components/swipe-actions/README.md +19 -0
  384. package/src/components/swipe-actions/element.ts +26 -0
  385. package/src/components/swipe-actions/engine.ts +260 -0
  386. package/src/components/swipe-actions/react.tsx +80 -0
  387. package/src/components/swipe-actions/swipe-actions.css +104 -0
  388. package/src/components/tag-input/README.md +42 -0
  389. package/src/components/tag-input/element.ts +39 -0
  390. package/src/components/tag-input/engine.ts +313 -0
  391. package/src/components/tag-input/react.tsx +54 -0
  392. package/src/components/tag-input/tag-input.css +243 -0
  393. package/src/components/time-field/README.md +54 -0
  394. package/src/components/time-field/element.ts +38 -0
  395. package/src/components/time-field/engine.ts +110 -0
  396. package/src/components/time-field/react.tsx +45 -0
  397. package/src/components/time-field/time-field.css +87 -0
  398. package/src/components/timeline/README.md +57 -0
  399. package/src/components/timeline/element.ts +31 -0
  400. package/src/components/timeline/engine.ts +300 -0
  401. package/src/components/timeline/react.tsx +59 -0
  402. package/src/components/timeline/timeline.css +218 -0
  403. package/src/components/toolbar/README.md +46 -0
  404. package/src/components/toolbar/element.ts +30 -0
  405. package/src/components/toolbar/engine.ts +230 -0
  406. package/src/components/toolbar/react.tsx +34 -0
  407. package/src/components/toolbar/toolbar.css +121 -0
  408. package/src/components/tooltip/README.md +46 -0
  409. package/src/components/tooltip/element.ts +22 -0
  410. package/src/components/tooltip/engine.ts +288 -0
  411. package/src/components/tooltip/react.tsx +30 -0
  412. package/src/components/tooltip/tooltip.css +78 -0
  413. package/src/components/tree-view/README.md +61 -0
  414. package/src/components/tree-view/element.ts +32 -0
  415. package/src/components/tree-view/engine.ts +743 -0
  416. package/src/components/tree-view/react.tsx +82 -0
  417. package/src/components/tree-view/tree-view.css +288 -0
  418. package/src/components/virtual-list/README.md +81 -0
  419. package/src/components/virtual-list/element.ts +42 -0
  420. package/src/components/virtual-list/engine.ts +678 -0
  421. package/src/components/virtual-list/react.tsx +101 -0
  422. package/src/components/virtual-list/virtual-list.css +194 -0
  423. package/src/components/voice-dots/README.md +48 -0
  424. package/src/components/voice-dots/element.ts +45 -0
  425. package/src/components/voice-dots/engine.ts +243 -0
  426. package/src/components/voice-dots/react.tsx +52 -0
  427. package/src/components/voice-dots/voice-dots.css +69 -0
  428. package/src/core/chips.ts +196 -0
  429. package/src/core/color.ts +304 -0
  430. package/src/core/date-range.ts +67 -0
  431. package/src/core/dates.ts +11 -1
  432. package/src/core/files.ts +107 -0
  433. package/src/core/filter.ts +229 -0
  434. package/src/core/gsap.ts +80 -65
  435. package/src/core/listbox.ts +332 -0
  436. package/src/core/mark.ts +29 -0
  437. package/src/core/position.ts +89 -0
  438. package/src/core/relative-time.ts +77 -0
  439. package/src/core/segment-field.ts +373 -0
  440. package/src/core/segments.ts +153 -0
  441. package/src/core/tree.ts +116 -0
  442. package/src/core/virtual.ts +79 -0
  443. package/src/css/tokens.css +186 -182
  444. package/src/elements/index.ts +186 -0
  445. package/src/index.ts +88 -0
  446. package/src/motion/liquid.ts +14 -4
  447. package/src/motion/micro.ts +248 -0
  448. package/src/motion/sheet.ts +88 -65
  449. package/src/motion/surface.ts +9 -0
  450. package/src/react/index.ts +71 -1
  451. package/dist/chunk-IKQ5FODN.js +0 -1617
  452. package/dist/chunk-IKQ5FODN.js.map +0 -1
  453. package/dist/chunk-J6OCFNGU.js +0 -177
  454. package/dist/chunk-J6OCFNGU.js.map +0 -1
  455. package/dist/chunk-TFNRIZHU.js +0 -3977
  456. package/dist/chunk-TFNRIZHU.js.map +0 -1
  457. package/dist/chunk-XAKC2QY7.js.map +0 -1
  458. package/dist/reveal-jsX-uwUz.d.ts +0 -625
  459. package/dist/store-DYb3tTsZ.d.ts +0 -195
@@ -0,0 +1,351 @@
1
+ import { gsap, EASE, Flip, registerMotion } from '../../core/gsap';
2
+ import { reduced } from '../../core/reduced';
3
+ import { createScope } from '../../core/scope';
4
+ import { TIMING } from '../../core/timing';
5
+ import { inert, type Instance } from '../../core/types';
6
+ import { dayKey, fromJson } from '../../core/dates';
7
+ import { dayLabel, everyMinute, fullTime, relativeTime, toTime, type TimeInput } from '../../core/relative-time';
8
+ import { blurIn, press, rollDigits } from '../../motion/micro';
9
+
10
+ /*
11
+ * Activity feed: what people did, newest first, under day headings ("Hoy",
12
+ * "Ayer", "Lunes, 12 de noviembre"). Each entry has an avatar (a picture, or
13
+ * initials on a colour from the name) with a badge for the kind of action,
14
+ * "<b>Ana</b> comentó en <a>Tarea 12</a>", a time ("hace 5 min", refreshed
15
+ * every minute) and an optional quote. New activity (prepend()) comes in at the
16
+ * top: the entries below glide down (layout spring) while the new ones drop in
17
+ * out of a blur and keep a soft highlight that fades. If the reader has
18
+ * scrolled down, a "3 novedades" pill pops in at the top instead (its count
19
+ * rolls); pressing it scrolls up and brings them in. "Cargar más" at the end
20
+ * asks onLoadMore() for older entries (working while it waits) and flows them in.
21
+ */
22
+
23
+ export interface ActivityActor {
24
+ name: string;
25
+ /** A picture URL; without it, the initials. */
26
+ avatar?: string;
27
+ }
28
+
29
+ export type ActivityKind = 'comment' | 'create' | 'update' | 'delete' | 'upload' | 'complete' | 'mention';
30
+
31
+ export interface ActivityItem {
32
+ id: string;
33
+ actor: ActivityActor | string;
34
+ /** The verb: "comentó en", "cerró", "subió". */
35
+ action: string;
36
+ /** What it was done to. */
37
+ target?: string;
38
+ /** A link for the target. */
39
+ href?: string;
40
+ time: TimeInput;
41
+ /** A quote under it (the comment). */
42
+ detail?: string;
43
+ kind?: ActivityKind;
44
+ }
45
+
46
+ export interface ActivityFeedOptions {
47
+ items?: ActivityItem[];
48
+ locale?: string;
49
+ /** Accessible name (default 'Actividad'). */
50
+ label?: string;
51
+ /** Older entries for "Cargar más": resolve with them, or with [] when there are no more. */
52
+ onLoadMore?: () => Promise<ActivityItem[]> | ActivityItem[];
53
+ emptyLabel?: string;
54
+ }
55
+
56
+ export interface ActivityFeedInstance extends Instance {
57
+ /** New activity on top (or behind the "novedades" pill when the reader is scrolled down). */
58
+ prepend(items: ActivityItem[]): void;
59
+ append(items: ActivityItem[]): void;
60
+ setItems(items: ActivityItem[]): void;
61
+ readonly items: ActivityItem[];
62
+ }
63
+
64
+ const SVG = (path: string) => `<svg aria-hidden="true" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><path d="${path}"/></svg>`;
65
+ const KIND_ICON: Record<ActivityKind, string> = {
66
+ comment: SVG('M5 6h14v9H9l-4 4z'),
67
+ create: SVG('M12 5v14M5 12h14'),
68
+ update: SVG('M5 19l1-4L16 5l3 3L9 18z'),
69
+ delete: SVG('M6 7h12M9 7V5h6v2M8 7l1 12h6l1-12'),
70
+ upload: SVG('M12 19V6M6 12l6-6 6 6'),
71
+ complete: SVG('M5 12.5l4.5 4.5L19 7.5'),
72
+ mention: SVG('M16 12a4 4 0 1 1-1.2-2.8M16 9v4a2 2 0 0 0 4 0v-1a8 8 0 1 0-3 6.2'),
73
+ };
74
+
75
+ const nameOf = (actor: ActivityActor | string) => (typeof actor === 'string' ? actor : actor.name);
76
+ const initials = (name: string) =>
77
+ name
78
+ .split(/\s+/)
79
+ .filter(Boolean)
80
+ .slice(0, 2)
81
+ .map((part) => part[0]!.toLocaleUpperCase())
82
+ .join('');
83
+ /** A hue from the name, so a person keeps their colour. */
84
+ const hueOf = (name: string) => [...name].reduce((hash, char) => (hash * 31 + char.charCodeAt(0)) % 360, 7);
85
+
86
+ export function createActivityFeed(root: HTMLElement | null, options: ActivityFeedOptions = {}): ActivityFeedInstance {
87
+ if (!root) return inert({ prepend() {}, append() {}, setItems() {}, items: [] });
88
+ registerMotion();
89
+ const scope = createScope();
90
+ const locale = options.locale ?? root.closest('[lang]')?.getAttribute('lang') ?? 'es';
91
+ // JSON text too (data-mk-items through autoInit).
92
+ let items = [...(fromJson(options.items) ?? [])];
93
+ let waiting: ActivityItem[] = [];
94
+ const effects = new Set<gsap.core.Animation>();
95
+ const keep = (animation: gsap.core.Animation | null) => {
96
+ if (!animation) return;
97
+ effects.add(animation);
98
+ // Finished ones leave as new ones arrive: the animation's own onComplete stays untouched.
99
+ for (const effect of effects) if (effect.totalProgress() === 1) effects.delete(effect);
100
+ };
101
+
102
+ const pill = document.createElement('button');
103
+ pill.type = 'button';
104
+ pill.dataset.mkAfNew = '';
105
+ pill.hidden = true;
106
+ const pillCount = document.createElement('span');
107
+ pillCount.dataset.mkAfNewCount = '';
108
+ const pillText = document.createElement('span');
109
+ pill.append('↑ ', pillCount, pillText);
110
+ const feed = document.createElement('div');
111
+ feed.dataset.mkAfFeed = '';
112
+ feed.setAttribute('role', 'feed');
113
+ feed.setAttribute('aria-label', options.label ?? 'Actividad');
114
+ const empty = document.createElement('p');
115
+ empty.dataset.mkAfEmpty = '';
116
+ empty.textContent = options.emptyLabel ?? 'Sin actividad todavía';
117
+ const more = document.createElement('button');
118
+ more.type = 'button';
119
+ more.dataset.mkAfMore = '';
120
+ more.textContent = 'Cargar más';
121
+ more.hidden = !options.onLoadMore;
122
+ const status = document.createElement('span');
123
+ status.className = 'mk-sr-only';
124
+ status.setAttribute('role', 'status');
125
+ root.append(pill, feed, empty, more, status);
126
+ scope.add(() => {
127
+ for (const effect of effects) effect.kill();
128
+ effects.clear();
129
+ for (const part of [pill, feed, empty, more, status]) part.remove();
130
+ });
131
+ scope.attr(root, 'data-mk-ready', '');
132
+
133
+ const entry = (item: ActivityItem) => {
134
+ const li = document.createElement('li');
135
+ li.dataset.mkAfItem = '';
136
+ li.dataset.id = item.id;
137
+ li.setAttribute('role', 'article');
138
+ li.tabIndex = -1;
139
+ const name = nameOf(item.actor);
140
+ const avatar = document.createElement('span');
141
+ avatar.dataset.mkAfAvatar = '';
142
+ avatar.setAttribute('aria-hidden', 'true');
143
+ avatar.style.setProperty('--mk-af-hue', String(hueOf(name)));
144
+ const picture = typeof item.actor === 'string' ? undefined : item.actor.avatar;
145
+ if (picture) {
146
+ const img = document.createElement('img');
147
+ img.src = picture;
148
+ img.alt = '';
149
+ img.loading = 'lazy';
150
+ avatar.append(img);
151
+ } else avatar.textContent = initials(name);
152
+ if (item.kind) {
153
+ const badge = document.createElement('span');
154
+ badge.dataset.mkAfBadge = item.kind;
155
+ badge.innerHTML = KIND_ICON[item.kind];
156
+ avatar.append(badge);
157
+ }
158
+ const body = document.createElement('div');
159
+ body.dataset.mkAfBody = '';
160
+ const line = document.createElement('p');
161
+ line.dataset.mkAfLine = '';
162
+ const who = document.createElement('b');
163
+ who.textContent = name;
164
+ line.append(who, ` ${item.action}`);
165
+ if (item.target) {
166
+ line.append(' ');
167
+ const target = document.createElement(item.href ? 'a' : 'span');
168
+ target.dataset.mkAfTarget = '';
169
+ if (target instanceof HTMLAnchorElement) target.href = item.href!;
170
+ target.textContent = item.target;
171
+ line.append(target);
172
+ }
173
+ body.append(line);
174
+ if (item.detail) {
175
+ const quote = document.createElement('blockquote');
176
+ quote.dataset.mkAfDetail = '';
177
+ quote.textContent = item.detail;
178
+ body.append(quote);
179
+ }
180
+ const date = toTime(item.time);
181
+ if (date) {
182
+ const time = document.createElement('time');
183
+ time.dataset.mkAfTime = '';
184
+ time.dateTime = date.toISOString();
185
+ time.title = fullTime(date, locale);
186
+ time.textContent = relativeTime(date, new Date(), locale);
187
+ body.append(time);
188
+ }
189
+ li.append(avatar, body);
190
+ return li;
191
+ };
192
+
193
+ const render = () => {
194
+ const days = new Map<string, { date: Date | null; list: HTMLUListElement }>();
195
+ const sections: HTMLElement[] = [];
196
+ for (const item of items) {
197
+ const date = toTime(item.time);
198
+ const key = date ? dayKey(date) : '';
199
+ let group = days.get(key);
200
+ if (!group) {
201
+ const section = document.createElement('section');
202
+ section.dataset.mkAfDay = key;
203
+ const heading = document.createElement('h3');
204
+ heading.dataset.mkAfHeading = '';
205
+ heading.textContent = date ? dayLabel(date, new Date(), locale) : 'Sin fecha';
206
+ const list = document.createElement('ul');
207
+ section.append(heading, list);
208
+ sections.push(section);
209
+ group = { date, list };
210
+ days.set(key, group);
211
+ }
212
+ group.list.append(entry(item));
213
+ }
214
+ feed.replaceChildren(...sections);
215
+ empty.hidden = items.length > 0;
216
+ };
217
+
218
+ const refreshTimes = () => {
219
+ for (const time of feed.querySelectorAll<HTMLTimeElement>('[data-mk-af-time]')) time.textContent = relativeTime(new Date(time.dateTime), new Date(), locale);
220
+ for (const section of feed.querySelectorAll<HTMLElement>('[data-mk-af-day]')) {
221
+ const key = section.dataset.mkAfDay!;
222
+ if (key) section.querySelector('h3')!.textContent = dayLabel(toTime(key)!, new Date(), locale);
223
+ }
224
+ };
225
+ scope.add(everyMinute(refreshTimes));
226
+
227
+ /** Re-render with `change`; what stays glides (Flip), the given new ids come in from `from`. */
228
+ const reflow = (change: () => void, fresh: Set<string>, from: 'top' | 'bottom') => {
229
+ const all = () => [...feed.querySelectorAll<HTMLElement>('[data-mk-af-item], [data-mk-af-heading]')];
230
+ for (const element of all()) element.dataset.flipId = element.dataset.id ?? `day-${element.closest<HTMLElement>('[data-mk-af-day]')!.dataset.mkAfDay}`;
231
+ const state = reduced() ? null : Flip.getState(all());
232
+ change();
233
+ for (const element of all()) element.dataset.flipId = element.dataset.id ?? `day-${element.closest<HTMLElement>('[data-mk-af-day]')!.dataset.mkAfDay}`;
234
+ const arriving = [...feed.querySelectorAll<HTMLElement>('[data-mk-af-item]')].filter((li) => fresh.has(li.dataset.id!));
235
+ for (const li of arriving) if (from === 'top') li.setAttribute('data-mk-fresh', '');
236
+ if (!state) return;
237
+ keep(
238
+ Flip.from(state, {
239
+ targets: all(),
240
+ duration: TIMING.layoutTravel,
241
+ ease: EASE.layoutReflow,
242
+ onEnter: (entering) => gsap.fromTo(entering, { opacity: 0, y: from === 'top' ? -14 : 14, filter: 'blur(10px)' }, { opacity: 1, y: 0, filter: 'blur(0px)', duration: 0.45, stagger: 0.05, ease: 'power2.out', clearProps: 'opacity,transform,filter' }),
243
+ }),
244
+ );
245
+ };
246
+
247
+ const showPill = () => {
248
+ const count = waiting.length;
249
+ const text = String(count);
250
+ pillText.textContent = count === 1 ? ' novedad' : ' novedades';
251
+ status.textContent = `${count} ${count === 1 ? 'novedad' : 'novedades'}`;
252
+ if (pill.hidden) {
253
+ pill.hidden = false;
254
+ pillCount.textContent = text;
255
+ if (!reduced()) keep(gsap.fromTo(pill, { opacity: 0, y: -10, scale: 0.85, filter: 'blur(6px)' }, { opacity: 1, y: 0, scale: 1, filter: 'blur(0px)', duration: 0.35, ease: EASE.pop, clearProps: 'opacity,transform,filter' }));
256
+ } else keep(rollDigits(pillCount, text, 1, 0.3));
257
+ };
258
+
259
+ const bringIn = (fresh: ActivityItem[]) => {
260
+ const ids = new Set(fresh.map((item) => item.id));
261
+ reflow(() => {
262
+ items = [...fresh, ...items.filter((item) => !ids.has(item.id))];
263
+ render();
264
+ }, ids, 'top');
265
+ };
266
+
267
+ scope.on(pill, 'click', () => {
268
+ const fresh = waiting;
269
+ waiting = [];
270
+ const finish = () => {
271
+ pill.hidden = true;
272
+ bringIn(fresh);
273
+ feed.querySelector<HTMLElement>('[data-mk-af-item]')?.focus({ preventScroll: true });
274
+ };
275
+ if (reduced() || root.scrollTop === 0) {
276
+ root.scrollTop = 0;
277
+ return finish();
278
+ }
279
+ keep(gsap.to(root, { scrollTop: 0, duration: 0.5, ease: EASE.signature, onComplete: finish }));
280
+ });
281
+
282
+ scope.on(more, 'click', async () => {
283
+ if (!options.onLoadMore || more.getAttribute('aria-busy') === 'true') return;
284
+ keep(press(more));
285
+ more.setAttribute('aria-busy', 'true');
286
+ more.textContent = 'Cargando…';
287
+ let older: ActivityItem[] = [];
288
+ try {
289
+ older = await options.onLoadMore();
290
+ } catch {
291
+ more.textContent = 'Reintentar';
292
+ more.removeAttribute('aria-busy');
293
+ return;
294
+ }
295
+ if (scope.disposed) return;
296
+ more.removeAttribute('aria-busy');
297
+ if (!older.length) {
298
+ more.hidden = true;
299
+ status.textContent = 'No hay más actividad';
300
+ const end = document.createElement('p');
301
+ end.dataset.mkAfEnd = '';
302
+ end.textContent = 'No hay más actividad';
303
+ more.after(end);
304
+ scope.add(() => end.remove());
305
+ return;
306
+ }
307
+ more.textContent = 'Cargar más';
308
+ const known = new Set(items.map((item) => item.id));
309
+ const added = older.filter((item) => !known.has(item.id));
310
+ items = [...items, ...added];
311
+ render();
312
+ const arriving = [...feed.querySelectorAll<HTMLElement>('[data-mk-af-item]')].filter((li) => added.some((item) => item.id === li.dataset.id));
313
+ keep(blurIn(arriving, { from: 'rise', stagger: 0.04 }));
314
+ status.textContent = `${added.length} más`;
315
+ });
316
+
317
+ render();
318
+
319
+ return {
320
+ prepend(fresh) {
321
+ if (scope.disposed || !fresh.length) return;
322
+ if (root.scrollTop > 24) {
323
+ const ids = new Set(fresh.map((item) => item.id));
324
+ waiting = [...fresh, ...waiting.filter((item) => !ids.has(item.id))];
325
+ showPill();
326
+ return;
327
+ }
328
+ bringIn(fresh);
329
+ status.textContent = fresh.length === 1 ? `${nameOf(fresh[0]!.actor)} ${fresh[0]!.action}${fresh[0]!.target ? ` ${fresh[0]!.target}` : ''}` : `${fresh.length} novedades`;
330
+ },
331
+ append(older) {
332
+ if (scope.disposed) return;
333
+ const ids = new Set(older.map((item) => item.id));
334
+ reflow(() => {
335
+ items = [...items.filter((item) => !ids.has(item.id)), ...older];
336
+ render();
337
+ }, ids, 'bottom');
338
+ },
339
+ setItems(next) {
340
+ if (scope.disposed) return;
341
+ items = [...next];
342
+ waiting = [];
343
+ pill.hidden = true;
344
+ render();
345
+ },
346
+ get items() {
347
+ return [...items];
348
+ },
349
+ destroy: () => scope.dispose(),
350
+ };
351
+ }
@@ -0,0 +1,32 @@
1
+ 'use client';
2
+ import { forwardRef, useImperativeHandle, useRef, type HTMLAttributes } from 'react';
3
+ import { useIsomorphicLayoutEffect, useLatest } from '../../react/use-recipe';
4
+ import { createActivityFeed, type ActivityFeedInstance, type ActivityFeedOptions, type ActivityItem } from './engine';
5
+
6
+ export interface ActivityFeedProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'>, Omit<ActivityFeedOptions, 'items'> {
7
+ /** Initial entries; later activity goes through the handle (prepend / append). */
8
+ items?: ActivityItem[];
9
+ }
10
+
11
+ export interface ActivityFeedHandle {
12
+ prepend(items: ActivityItem[]): void;
13
+ append(items: ActivityItem[]): void;
14
+ }
15
+
16
+ /** <ActivityFeed ref={feed} items={recent} onLoadMore={loadOlder} />, then feed.current.prepend(live). */
17
+ export const ActivityFeed = forwardRef<ActivityFeedHandle, ActivityFeedProps>(function ActivityFeed({ items, locale, label, emptyLabel, onLoadMore, className, ...props }, handle) {
18
+ const ref = useRef<HTMLDivElement>(null);
19
+ const instance = useRef<ActivityFeedInstance | null>(null);
20
+ const load = useLatest(onLoadMore);
21
+ useImperativeHandle(handle, () => ({ prepend: (next) => instance.current?.prepend(next), append: (next) => instance.current?.append(next) }), []);
22
+ useIsomorphicLayoutEffect(() => {
23
+ const created = createActivityFeed(ref.current, { items, locale, label, emptyLabel, onLoadMore: onLoadMore ? () => load.current?.() ?? [] : undefined });
24
+ instance.current = created;
25
+ return () => {
26
+ created.destroy();
27
+ instance.current = null;
28
+ };
29
+ // eslint-disable-next-line react-hooks/exhaustive-deps
30
+ }, [locale, label, emptyLabel, Boolean(onLoadMore)]);
31
+ return <div {...props} ref={ref} className={['mk-activity-feed', className].filter(Boolean).join(' ')} />;
32
+ });
@@ -0,0 +1,34 @@
1
+ # add-to-cart
2
+
3
+ Qué hace, en una frase.
4
+
5
+ Origen: archivo del kit y parámetros (tiempos, curvas).
6
+
7
+ ## HTML / Astro
8
+
9
+ ```html
10
+ <mk-add-to-cart></mk-add-to-cart>
11
+ <script>
12
+ import { defineElements } from '@yewdiel21/motion-kit/elements';
13
+ defineElements(['mk-add-to-cart']);
14
+ </script>
15
+ ```
16
+
17
+ ## React
18
+
19
+ ```tsx
20
+ <AddToCart />
21
+ ```
22
+
23
+ ## Opciones
24
+
25
+ | Opción | Atributo | Por defecto | Qué hace |
26
+ |---|---|---|---|
27
+
28
+ ## Variables CSS
29
+
30
+ `--mk-add-to-cart-radius`
31
+
32
+ ## Accesibilidad
33
+
34
+ Roles, foco y teclado. Con movimiento reducido…
@@ -0,0 +1,71 @@
1
+ /* add-to-cart — the little box that carries the product to the cart: a kraft front with a tape stripe in the accent,
2
+ two flaps that close over the picture, a soft shadow; it flies above everything and never takes the pointer. */
3
+ .mk-add-to-cart,
4
+ mk-add-to-cart {
5
+ display: inline-flex;
6
+ }
7
+
8
+ [data-mk-cart-box] {
9
+ --mk-cart-box: #c99a62;
10
+ --mk-cart-box-shade: #b0824d;
11
+ --mk-cart-tape: var(--mk-accent);
12
+ position: fixed;
13
+ z-index: 2147483646;
14
+ pointer-events: none;
15
+ filter: drop-shadow(0 10px 14px rgb(0 0 0 / 0.28));
16
+ }
17
+
18
+ [data-mk-cart-thumb] {
19
+ position: absolute;
20
+ top: 6px;
21
+ left: 50%;
22
+ width: 40px;
23
+ height: 40px;
24
+ margin-left: -20px;
25
+ border-radius: 8px;
26
+ object-fit: cover;
27
+ }
28
+
29
+ [data-mk-cart-front] {
30
+ position: absolute;
31
+ right: 0;
32
+ bottom: 0;
33
+ left: 0;
34
+ height: 70%;
35
+ border-radius: 4px 4px 8px 8px;
36
+ background: linear-gradient(180deg, var(--mk-cart-box), var(--mk-cart-box-shade));
37
+ transform-origin: 50% 100%;
38
+ }
39
+
40
+ [data-mk-cart-tape] {
41
+ position: absolute;
42
+ top: 0;
43
+ left: 50%;
44
+ width: 10px;
45
+ height: 100%;
46
+ margin-left: -5px;
47
+ border-radius: 0 0 2px 2px;
48
+ background: var(--mk-cart-tape);
49
+ opacity: 0.9;
50
+ transform-origin: 50% 0;
51
+ }
52
+
53
+ [data-mk-cart-flap] {
54
+ position: absolute;
55
+ top: 18%;
56
+ width: 50%;
57
+ height: 14%;
58
+ background: var(--mk-cart-box-shade);
59
+ }
60
+
61
+ [data-mk-cart-flap='left'] {
62
+ left: 0;
63
+ border-radius: 4px 0 0 2px;
64
+ transform-origin: 0 100%;
65
+ }
66
+
67
+ [data-mk-cart-flap='right'] {
68
+ right: 0;
69
+ border-radius: 0 4px 2px 0;
70
+ transform-origin: 100% 100%;
71
+ }
@@ -0,0 +1,20 @@
1
+ import { MkElement, defineElement, type OptionType } from '../../elements/base';
2
+ import { createAddToCart, type AddToCartInstance } from './engine';
3
+
4
+ /**
5
+ * <mk-add-to-cart class="mk-add-to-cart" target="#carrito"><button>Agregar</button></mk-add-to-cart>
6
+ * Packs the product's [data-mk-cart-image] and flies it to the cart. Emits mk:add and mk:land ({count}).
7
+ */
8
+ export class MkAddToCartElement extends MkElement<AddToCartInstance> {
9
+ static options: Record<string, OptionType> = { target: 'string', image: 'string', quantity: 'number', count: 'number', label: 'string' };
10
+
11
+ protected create(options: Record<string, unknown>) {
12
+ return createAddToCart(this, options);
13
+ }
14
+
15
+ get count() {
16
+ return this.instance?.count ?? 0;
17
+ }
18
+ }
19
+
20
+ export const defineAddToCart = () => defineElement('mk-add-to-cart', MkAddToCartElement);