svelte-ag 0.0.2-dev.72

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 (313) hide show
  1. package/README.md +6 -0
  2. package/dist/app.css +209 -0
  3. package/dist/app.d.ts +13 -0
  4. package/dist/app.html +12 -0
  5. package/dist/icons.css +6 -0
  6. package/dist/lib/bits/internal/arrays.d.ts +95 -0
  7. package/dist/lib/bits/internal/arrays.js +250 -0
  8. package/dist/lib/bits/internal/arrays.test.d.ts +1 -0
  9. package/dist/lib/bits/internal/arrays.test.js +366 -0
  10. package/dist/lib/bits/internal/attrs.d.ts +22 -0
  11. package/dist/lib/bits/internal/attrs.js +69 -0
  12. package/dist/lib/bits/internal/box-auto-reset.svelte.d.ts +8 -0
  13. package/dist/lib/bits/internal/box-auto-reset.svelte.js +31 -0
  14. package/dist/lib/bits/internal/box.svelte.d.ts +21 -0
  15. package/dist/lib/bits/internal/box.svelte.js +26 -0
  16. package/dist/lib/bits/internal/clamp.d.ts +4 -0
  17. package/dist/lib/bits/internal/clamp.js +6 -0
  18. package/dist/lib/bits/internal/clamp.test.d.ts +1 -0
  19. package/dist/lib/bits/internal/clamp.test.js +31 -0
  20. package/dist/lib/bits/internal/create-event-hook.svelte.d.ts +18 -0
  21. package/dist/lib/bits/internal/create-event-hook.svelte.js +29 -0
  22. package/dist/lib/bits/internal/create-shared-hook.svelte.d.ts +2 -0
  23. package/dist/lib/bits/internal/create-shared-hook.svelte.js +27 -0
  24. package/dist/lib/bits/internal/date-time/announcer.d.ts +7 -0
  25. package/dist/lib/bits/internal/date-time/announcer.js +82 -0
  26. package/dist/lib/bits/internal/date-time/calendar-helpers.svelte.d.ts +201 -0
  27. package/dist/lib/bits/internal/date-time/calendar-helpers.svelte.js +510 -0
  28. package/dist/lib/bits/internal/date-time/field/helpers.d.ts +76 -0
  29. package/dist/lib/bits/internal/date-time/field/helpers.js +378 -0
  30. package/dist/lib/bits/internal/date-time/field/parts.d.ts +6 -0
  31. package/dist/lib/bits/internal/date-time/field/parts.js +9 -0
  32. package/dist/lib/bits/internal/date-time/field/segments.d.ts +51 -0
  33. package/dist/lib/bits/internal/date-time/field/segments.js +128 -0
  34. package/dist/lib/bits/internal/date-time/field/types.d.ts +25 -0
  35. package/dist/lib/bits/internal/date-time/field/types.js +1 -0
  36. package/dist/lib/bits/internal/date-time/formatter.d.ts +24 -0
  37. package/dist/lib/bits/internal/date-time/formatter.js +97 -0
  38. package/dist/lib/bits/internal/date-time/placeholders.d.ts +8 -0
  39. package/dist/lib/bits/internal/date-time/placeholders.js +129 -0
  40. package/dist/lib/bits/internal/date-time/utils.d.ts +69 -0
  41. package/dist/lib/bits/internal/date-time/utils.js +212 -0
  42. package/dist/lib/bits/internal/debounce.d.ts +4 -0
  43. package/dist/lib/bits/internal/debounce.js +19 -0
  44. package/dist/lib/bits/internal/debounce.test.d.ts +1 -0
  45. package/dist/lib/bits/internal/debounce.test.js +50 -0
  46. package/dist/lib/bits/internal/dom.d.ts +10 -0
  47. package/dist/lib/bits/internal/dom.js +38 -0
  48. package/dist/lib/bits/internal/elements.d.ts +2 -0
  49. package/dist/lib/bits/internal/elements.js +6 -0
  50. package/dist/lib/bits/internal/events.d.ts +21 -0
  51. package/dist/lib/bits/internal/events.js +49 -0
  52. package/dist/lib/bits/internal/floating-svelte/floating-utils.svelte.d.ts +7 -0
  53. package/dist/lib/bits/internal/floating-svelte/floating-utils.svelte.js +24 -0
  54. package/dist/lib/bits/internal/floating-svelte/types.d.ts +85 -0
  55. package/dist/lib/bits/internal/floating-svelte/types.js +1 -0
  56. package/dist/lib/bits/internal/floating-svelte/use-floating.svelte.d.ts +2 -0
  57. package/dist/lib/bits/internal/floating-svelte/use-floating.svelte.js +112 -0
  58. package/dist/lib/bits/internal/focus.d.ts +46 -0
  59. package/dist/lib/bits/internal/focus.js +109 -0
  60. package/dist/lib/bits/internal/get-directional-keys.d.ts +21 -0
  61. package/dist/lib/bits/internal/get-directional-keys.js +37 -0
  62. package/dist/lib/bits/internal/get-directional-keys.test.d.ts +1 -0
  63. package/dist/lib/bits/internal/get-directional-keys.test.js +46 -0
  64. package/dist/lib/bits/internal/is.d.ts +25 -0
  65. package/dist/lib/bits/internal/is.js +62 -0
  66. package/dist/lib/bits/internal/is.test.d.ts +1 -0
  67. package/dist/lib/bits/internal/is.test.js +34 -0
  68. package/dist/lib/bits/internal/kbd-constants.d.ts +40 -0
  69. package/dist/lib/bits/internal/kbd-constants.js +40 -0
  70. package/dist/lib/bits/internal/kbd.d.ts +1 -0
  71. package/dist/lib/bits/internal/kbd.js +1 -0
  72. package/dist/lib/bits/internal/locale.d.ts +6 -0
  73. package/dist/lib/bits/internal/locale.js +9 -0
  74. package/dist/lib/bits/internal/math.d.ts +5 -0
  75. package/dist/lib/bits/internal/math.js +43 -0
  76. package/dist/lib/bits/internal/math.test.d.ts +1 -0
  77. package/dist/lib/bits/internal/math.test.js +71 -0
  78. package/dist/lib/bits/internal/noop.d.ts +4 -0
  79. package/dist/lib/bits/internal/noop.js +4 -0
  80. package/dist/lib/bits/internal/should-trap-focus.d.ts +6 -0
  81. package/dist/lib/bits/internal/should-trap-focus.js +6 -0
  82. package/dist/lib/bits/internal/sleep.d.ts +1 -0
  83. package/dist/lib/bits/internal/sleep.js +3 -0
  84. package/dist/lib/bits/internal/tabbable.d.ts +10 -0
  85. package/dist/lib/bits/internal/tabbable.js +66 -0
  86. package/dist/lib/bits/internal/types.d.ts +92 -0
  87. package/dist/lib/bits/internal/types.js +1 -0
  88. package/dist/lib/bits/internal/use-after-animations.svelte.d.ts +5 -0
  89. package/dist/lib/bits/internal/use-after-animations.svelte.js +27 -0
  90. package/dist/lib/bits/internal/use-arrow-navigation.d.ts +62 -0
  91. package/dist/lib/bits/internal/use-arrow-navigation.js +76 -0
  92. package/dist/lib/bits/internal/use-body-scroll-lock.svelte.d.ts +6 -0
  93. package/dist/lib/bits/internal/use-body-scroll-lock.svelte.js +106 -0
  94. package/dist/lib/bits/internal/use-data-typeahead.svelte.d.ts +14 -0
  95. package/dist/lib/bits/internal/use-data-typeahead.svelte.js +31 -0
  96. package/dist/lib/bits/internal/use-dom-typeahead.svelte.d.ts +11 -0
  97. package/dist/lib/bits/internal/use-dom-typeahead.svelte.js +30 -0
  98. package/dist/lib/bits/internal/use-form-control.svelte.d.ts +4 -0
  99. package/dist/lib/bits/internal/use-form-control.svelte.js +16 -0
  100. package/dist/lib/bits/internal/use-grace-area.svelte.d.ts +12 -0
  101. package/dist/lib/bits/internal/use-grace-area.svelte.js +197 -0
  102. package/dist/lib/bits/internal/use-id.d.ts +4 -0
  103. package/dist/lib/bits/internal/use-id.js +8 -0
  104. package/dist/lib/bits/internal/use-resize-observer.svelte.d.ts +2 -0
  105. package/dist/lib/bits/internal/use-resize-observer.svelte.js +17 -0
  106. package/dist/lib/bits/internal/use-roving-focus.svelte.d.ts +38 -0
  107. package/dist/lib/bits/internal/use-roving-focus.svelte.js +91 -0
  108. package/dist/lib/bits/internal/use-size.svelte.d.ts +7 -0
  109. package/dist/lib/bits/internal/use-size.svelte.js +54 -0
  110. package/dist/lib/bits/internal/use-state-machine.svelte.d.ts +24 -0
  111. package/dist/lib/bits/internal/use-state-machine.svelte.js +28 -0
  112. package/dist/lib/bits/internal/use-timeout-fn.svelte.d.ts +25 -0
  113. package/dist/lib/bits/internal/use-timeout-fn.svelte.js +39 -0
  114. package/dist/lib/components/Typeahead.svelte.d.ts +47 -0
  115. package/dist/lib/components/Typeahead.svelte.js +150 -0
  116. package/dist/lib/components/animated/animated.svelte +244 -0
  117. package/dist/lib/components/animated/animated.svelte.d.ts +61 -0
  118. package/dist/lib/components/animated/index.d.ts +2 -0
  119. package/dist/lib/components/animated/index.js +2 -0
  120. package/dist/lib/components/combo/combo.svelte +186 -0
  121. package/dist/lib/components/combo/combo.svelte.d.ts +21 -0
  122. package/dist/lib/components/combo/index.d.ts +2 -0
  123. package/dist/lib/components/combo/index.js +2 -0
  124. package/dist/lib/components/dnd/Droppable.svelte +25 -0
  125. package/dist/lib/components/dnd/Droppable.svelte.d.ts +10 -0
  126. package/dist/lib/components/dnd/context.svelte.d.ts +22 -0
  127. package/dist/lib/components/dnd/context.svelte.js +25 -0
  128. package/dist/lib/components/dnd/dnd-context.svelte +45 -0
  129. package/dist/lib/components/dnd/dnd-context.svelte.d.ts +30 -0
  130. package/dist/lib/components/dnd/dnd-drag-overlay.svelte +44 -0
  131. package/dist/lib/components/dnd/dnd-drag-overlay.svelte.d.ts +27 -0
  132. package/dist/lib/components/dnd/dnd-drag-placeholder.svelte +24 -0
  133. package/dist/lib/components/dnd/dnd-drag-placeholder.svelte.d.ts +9 -0
  134. package/dist/lib/components/dnd/dnd-draghandle.svelte +30 -0
  135. package/dist/lib/components/dnd/dnd-draghandle.svelte.d.ts +6 -0
  136. package/dist/lib/components/dnd/dnd-overlay.svelte +0 -0
  137. package/dist/lib/components/dnd/dnd-overlay.svelte.d.ts +26 -0
  138. package/dist/lib/components/dnd/dnd-sortable-context.svelte +18 -0
  139. package/dist/lib/components/dnd/dnd-sortable-context.svelte.d.ts +8 -0
  140. package/dist/lib/components/dnd/dnd-sortable-item.svelte +68 -0
  141. package/dist/lib/components/dnd/dnd-sortable-item.svelte.d.ts +23 -0
  142. package/dist/lib/components/dnd/example.svelte +109 -0
  143. package/dist/lib/components/dnd/example.svelte.d.ts +3 -0
  144. package/dist/lib/components/dnd/exports.d.ts +9 -0
  145. package/dist/lib/components/dnd/exports.js +9 -0
  146. package/dist/lib/components/dnd/index.d.ts +1 -0
  147. package/dist/lib/components/dnd/index.js +1 -0
  148. package/dist/lib/components/dnd/sortable.svelte.d.ts +13 -0
  149. package/dist/lib/components/dnd/sortable.svelte.js +70 -0
  150. package/dist/lib/components/dnd/utils.svelte.d.ts +20 -0
  151. package/dist/lib/components/dnd/utils.svelte.js +20 -0
  152. package/dist/lib/components/search/combinations/searchPopover.svelte +68 -0
  153. package/dist/lib/components/search/combinations/searchPopover.svelte.d.ts +22 -0
  154. package/dist/lib/components/search/components/search-empty.svelte +28 -0
  155. package/dist/lib/components/search/components/search-empty.svelte.d.ts +4 -0
  156. package/dist/lib/components/search/components/search-input.svelte +53 -0
  157. package/dist/lib/components/search/components/search-input.svelte.d.ts +4 -0
  158. package/dist/lib/components/search/components/search-list.svelte +46 -0
  159. package/dist/lib/components/search/components/search-list.svelte.d.ts +4 -0
  160. package/dist/lib/components/search/components/search-pagnation.svelte +68 -0
  161. package/dist/lib/components/search/components/search-pagnation.svelte.d.ts +8 -0
  162. package/dist/lib/components/search/components/search.svelte +47 -0
  163. package/dist/lib/components/search/components/search.svelte.d.ts +4 -0
  164. package/dist/lib/components/search/exports.d.ts +6 -0
  165. package/dist/lib/components/search/exports.js +5 -0
  166. package/dist/lib/components/search/index.d.ts +2 -0
  167. package/dist/lib/components/search/index.js +2 -0
  168. package/dist/lib/components/search/search.svelte.d.ts +102 -0
  169. package/dist/lib/components/search/search.svelte.js +202 -0
  170. package/dist/lib/components/search/types.d.ts +28 -0
  171. package/dist/lib/components/search/types.js +1 -0
  172. package/dist/lib/components/utilities/arrow/arrow.svelte +23 -0
  173. package/dist/lib/components/utilities/arrow/arrow.svelte.d.ts +3 -0
  174. package/dist/lib/components/utilities/arrow/index.d.ts +2 -0
  175. package/dist/lib/components/utilities/arrow/index.js +1 -0
  176. package/dist/lib/components/utilities/arrow/types.d.ts +17 -0
  177. package/dist/lib/components/utilities/arrow/types.js +1 -0
  178. package/dist/lib/components/utilities/floating-layer/components/floating-layer-anchor.svelte +15 -0
  179. package/dist/lib/components/utilities/floating-layer/components/floating-layer-anchor.svelte.d.ts +4 -0
  180. package/dist/lib/components/utilities/floating-layer/components/floating-layer-arrow.svelte +20 -0
  181. package/dist/lib/components/utilities/floating-layer/components/floating-layer-arrow.svelte.d.ts +3 -0
  182. package/dist/lib/components/utilities/floating-layer/components/floating-layer-content-static.svelte +19 -0
  183. package/dist/lib/components/utilities/floating-layer/components/floating-layer-content-static.svelte.d.ts +13 -0
  184. package/dist/lib/components/utilities/floating-layer/components/floating-layer-content.svelte +61 -0
  185. package/dist/lib/components/utilities/floating-layer/components/floating-layer-content.svelte.d.ts +4 -0
  186. package/dist/lib/components/utilities/floating-layer/components/floating-layer.svelte +10 -0
  187. package/dist/lib/components/utilities/floating-layer/components/floating-layer.svelte.d.ts +7 -0
  188. package/dist/lib/components/utilities/floating-layer/components/index.d.ts +6 -0
  189. package/dist/lib/components/utilities/floating-layer/components/index.js +5 -0
  190. package/dist/lib/components/utilities/floating-layer/index.d.ts +1 -0
  191. package/dist/lib/components/utilities/floating-layer/index.js +1 -0
  192. package/dist/lib/components/utilities/floating-layer/types.d.ts +115 -0
  193. package/dist/lib/components/utilities/floating-layer/types.js +1 -0
  194. package/dist/lib/components/utilities/floating-layer/use-floating-layer.svelte.d.ts +118 -0
  195. package/dist/lib/components/utilities/floating-layer/use-floating-layer.svelte.js +311 -0
  196. package/dist/lib/index.d.ts +1 -0
  197. package/dist/lib/index.js +1 -0
  198. package/dist/lib/utils/asyncDerived.svelte.d.ts +12 -0
  199. package/dist/lib/utils/asyncDerived.svelte.js +26 -0
  200. package/dist/lib/utils/bits.d.ts +39 -0
  201. package/dist/lib/utils/bits.js +69 -0
  202. package/dist/lib/utils/index.d.ts +3 -0
  203. package/dist/lib/utils/index.js +3 -0
  204. package/dist/lib/utils/utils.d.ts +21 -0
  205. package/dist/lib/utils/utils.js +72 -0
  206. package/dist/routes/+layout.svelte +0 -0
  207. package/dist/routes/+layout.svelte.d.ts +26 -0
  208. package/package.json +79 -0
  209. package/src/app.css +209 -0
  210. package/src/app.d.ts +13 -0
  211. package/src/app.html +12 -0
  212. package/src/icons.css +6 -0
  213. package/src/lib/bits/internal/arrays.test.ts +460 -0
  214. package/src/lib/bits/internal/arrays.ts +301 -0
  215. package/src/lib/bits/internal/attrs.ts +97 -0
  216. package/src/lib/bits/internal/box-auto-reset.svelte.ts +40 -0
  217. package/src/lib/bits/internal/box.svelte.ts +60 -0
  218. package/src/lib/bits/internal/clamp.test.ts +37 -0
  219. package/src/lib/bits/internal/clamp.ts +6 -0
  220. package/src/lib/bits/internal/create-event-hook.svelte.ts +64 -0
  221. package/src/lib/bits/internal/create-shared-hook.svelte.ts +33 -0
  222. package/src/lib/bits/internal/date-time/announcer.ts +88 -0
  223. package/src/lib/bits/internal/date-time/calendar-helpers.svelte.ts +815 -0
  224. package/src/lib/bits/internal/date-time/field/helpers.ts +441 -0
  225. package/src/lib/bits/internal/date-time/field/parts.ts +9 -0
  226. package/src/lib/bits/internal/date-time/field/segments.ts +126 -0
  227. package/src/lib/bits/internal/date-time/field/types.ts +35 -0
  228. package/src/lib/bits/internal/date-time/formatter.ts +116 -0
  229. package/src/lib/bits/internal/date-time/placeholders.ts +143 -0
  230. package/src/lib/bits/internal/date-time/utils.ts +261 -0
  231. package/src/lib/bits/internal/debounce.test.ts +67 -0
  232. package/src/lib/bits/internal/debounce.ts +22 -0
  233. package/src/lib/bits/internal/dom.ts +47 -0
  234. package/src/lib/bits/internal/elements.ts +7 -0
  235. package/src/lib/bits/internal/events.ts +89 -0
  236. package/src/lib/bits/internal/floating-svelte/floating-utils.svelte.ts +28 -0
  237. package/src/lib/bits/internal/floating-svelte/types.ts +108 -0
  238. package/src/lib/bits/internal/floating-svelte/use-floating.svelte.ts +133 -0
  239. package/src/lib/bits/internal/focus.ts +111 -0
  240. package/src/lib/bits/internal/get-directional-keys.test.ts +51 -0
  241. package/src/lib/bits/internal/get-directional-keys.ts +43 -0
  242. package/src/lib/bits/internal/is.test.ts +40 -0
  243. package/src/lib/bits/internal/is.ts +78 -0
  244. package/src/lib/bits/internal/kbd-constants.ts +40 -0
  245. package/src/lib/bits/internal/kbd.ts +1 -0
  246. package/src/lib/bits/internal/locale.ts +13 -0
  247. package/src/lib/bits/internal/math.test.ts +88 -0
  248. package/src/lib/bits/internal/math.ts +50 -0
  249. package/src/lib/bits/internal/noop.ts +4 -0
  250. package/src/lib/bits/internal/should-trap-focus.ts +16 -0
  251. package/src/lib/bits/internal/sleep.ts +3 -0
  252. package/src/lib/bits/internal/tabbable.ts +76 -0
  253. package/src/lib/bits/internal/types.ts +91 -0
  254. package/src/lib/bits/internal/use-after-animations.svelte.ts +30 -0
  255. package/src/lib/bits/internal/use-arrow-navigation.ts +168 -0
  256. package/src/lib/bits/internal/use-body-scroll-lock.svelte.ts +138 -0
  257. package/src/lib/bits/internal/use-data-typeahead.svelte.ts +44 -0
  258. package/src/lib/bits/internal/use-dom-typeahead.svelte.ts +44 -0
  259. package/src/lib/bits/internal/use-form-control.svelte.ts +17 -0
  260. package/src/lib/bits/internal/use-grace-area.svelte.ts +229 -0
  261. package/src/lib/bits/internal/use-id.ts +9 -0
  262. package/src/lib/bits/internal/use-resize-observer.svelte.ts +19 -0
  263. package/src/lib/bits/internal/use-roving-focus.svelte.ts +141 -0
  264. package/src/lib/bits/internal/use-size.svelte.ts +60 -0
  265. package/src/lib/bits/internal/use-state-machine.svelte.ts +46 -0
  266. package/src/lib/bits/internal/use-timeout-fn.svelte.ts +80 -0
  267. package/src/lib/components/Typeahead.svelte.ts +200 -0
  268. package/src/lib/components/animated/animated.svelte +244 -0
  269. package/src/lib/components/animated/index.ts +3 -0
  270. package/src/lib/components/combo/combo.svelte +186 -0
  271. package/src/lib/components/combo/index.ts +3 -0
  272. package/src/lib/components/dnd/Droppable.svelte +25 -0
  273. package/src/lib/components/dnd/context.svelte.ts +30 -0
  274. package/src/lib/components/dnd/dnd-context.svelte +45 -0
  275. package/src/lib/components/dnd/dnd-drag-overlay.svelte +44 -0
  276. package/src/lib/components/dnd/dnd-drag-placeholder.svelte +24 -0
  277. package/src/lib/components/dnd/dnd-draghandle.svelte +30 -0
  278. package/src/lib/components/dnd/dnd-overlay.svelte +0 -0
  279. package/src/lib/components/dnd/dnd-sortable-context.svelte +18 -0
  280. package/src/lib/components/dnd/dnd-sortable-item.svelte +68 -0
  281. package/src/lib/components/dnd/example.svelte +109 -0
  282. package/src/lib/components/dnd/exports.ts +12 -0
  283. package/src/lib/components/dnd/index.ts +1 -0
  284. package/src/lib/components/dnd/sortable.svelte.ts +82 -0
  285. package/src/lib/components/dnd/utils.svelte.ts +29 -0
  286. package/src/lib/components/search/combinations/searchPopover.svelte +68 -0
  287. package/src/lib/components/search/components/search-empty.svelte +28 -0
  288. package/src/lib/components/search/components/search-input.svelte +53 -0
  289. package/src/lib/components/search/components/search-list.svelte +46 -0
  290. package/src/lib/components/search/components/search-pagnation.svelte +68 -0
  291. package/src/lib/components/search/components/search.svelte +47 -0
  292. package/src/lib/components/search/exports.ts +13 -0
  293. package/src/lib/components/search/index.ts +2 -0
  294. package/src/lib/components/search/search.svelte.ts +286 -0
  295. package/src/lib/components/search/types.ts +48 -0
  296. package/src/lib/components/utilities/arrow/arrow.svelte +23 -0
  297. package/src/lib/components/utilities/arrow/index.ts +2 -0
  298. package/src/lib/components/utilities/arrow/types.ts +20 -0
  299. package/src/lib/components/utilities/floating-layer/components/floating-layer-anchor.svelte +15 -0
  300. package/src/lib/components/utilities/floating-layer/components/floating-layer-arrow.svelte +20 -0
  301. package/src/lib/components/utilities/floating-layer/components/floating-layer-content-static.svelte +19 -0
  302. package/src/lib/components/utilities/floating-layer/components/floating-layer-content.svelte +61 -0
  303. package/src/lib/components/utilities/floating-layer/components/floating-layer.svelte +10 -0
  304. package/src/lib/components/utilities/floating-layer/components/index.ts +11 -0
  305. package/src/lib/components/utilities/floating-layer/index.ts +1 -0
  306. package/src/lib/components/utilities/floating-layer/types.ts +133 -0
  307. package/src/lib/components/utilities/floating-layer/use-floating-layer.svelte.ts +406 -0
  308. package/src/lib/index.ts +1 -0
  309. package/src/lib/utils/asyncDerived.svelte.ts +38 -0
  310. package/src/lib/utils/bits.ts +93 -0
  311. package/src/lib/utils/index.ts +3 -0
  312. package/src/lib/utils/utils.ts +97 -0
  313. package/src/routes/+layout.svelte +0 -0
@@ -0,0 +1,406 @@
1
+ import {
2
+ type Middleware,
3
+ type Placement,
4
+ arrow,
5
+ autoUpdate,
6
+ flip,
7
+ hide,
8
+ limitShift,
9
+ offset,
10
+ shift,
11
+ size
12
+ } from '@floating-ui/dom';
13
+ import { box, cssToStyleObj, styleToString, useRefById } from 'svelte-toolbelt';
14
+ import { Context, ElementSize, watch } from 'runed';
15
+ import type { Arrayable, WithRefProps } from '$bits/internal/types.js';
16
+ import { isNotNull } from '$bits/internal/is.js';
17
+ import { useId } from 'bits-ui';
18
+ import type { Box, ReadableBoxedValues } from 'svelte-toolbelt';
19
+ import { useFloating } from '$bits/internal/floating-svelte/use-floating.svelte.js';
20
+ import type { Measurable, UseFloatingReturn } from '$bits/internal/floating-svelte/types.js';
21
+ import type { Direction, StyleProperties } from 'bits-ui';
22
+
23
+ export const SIDE_OPTIONS = ['top', 'right', 'bottom', 'left'] as const;
24
+ export const ALIGN_OPTIONS = ['start', 'center', 'end'] as const;
25
+
26
+ const OPPOSITE_SIDE: Record<Side, Side> = {
27
+ top: 'bottom',
28
+ right: 'left',
29
+ bottom: 'top',
30
+ left: 'right'
31
+ };
32
+
33
+ export type Side = (typeof SIDE_OPTIONS)[number];
34
+ export type Align = (typeof ALIGN_OPTIONS)[number];
35
+
36
+ export type Boundary = Element | null;
37
+
38
+ class FloatingRootState {
39
+ anchorNode = box<Measurable | HTMLElement | null>(null);
40
+ customAnchorNode = box<Measurable | HTMLElement | null | string>(null);
41
+ triggerNode = box<Measurable | HTMLElement | null>(null);
42
+
43
+ constructor() {
44
+ $effect(() => {
45
+ if (this.customAnchorNode.current) {
46
+ if (typeof this.customAnchorNode.current === 'string') {
47
+ this.anchorNode.current = document.querySelector(this.customAnchorNode.current);
48
+ } else {
49
+ this.anchorNode.current = this.customAnchorNode.current;
50
+ }
51
+ } else {
52
+ this.anchorNode.current = this.triggerNode.current;
53
+ }
54
+ });
55
+ }
56
+ }
57
+
58
+ export type FloatingContentStateProps = ReadableBoxedValues<{
59
+ id: string;
60
+ wrapperId: string;
61
+ side: Side;
62
+ sideOffset: number;
63
+ align: Align;
64
+ alignOffset: number;
65
+ arrowPadding: number;
66
+ avoidCollisions: boolean;
67
+ collisionBoundary: Arrayable<Boundary>;
68
+ collisionPadding: number | Partial<Record<Side, number>>;
69
+ sticky: 'partial' | 'always';
70
+ hideWhenDetached: boolean;
71
+ updatePositionStrategy: 'optimized' | 'always';
72
+ strategy: 'fixed' | 'absolute';
73
+ onPlaced: () => void;
74
+ dir: Direction;
75
+ style: StyleProperties | null | undefined | string;
76
+ enabled: boolean;
77
+ customAnchor: string | HTMLElement | null | Measurable;
78
+ }>;
79
+
80
+ class FloatingContentState {
81
+ // nodes
82
+ contentRef = box<HTMLElement | null>(null);
83
+ wrapperRef = box<HTMLElement | null>(null);
84
+ arrowRef = box<HTMLElement | null>(null);
85
+
86
+ // ids
87
+ arrowId: Box<string> = box(useId());
88
+
89
+ #transformedStyle = $derived.by(() => {
90
+ if (typeof this.opts.style === 'string') return cssToStyleObj(this.opts.style);
91
+ if (!this.opts.style) return {};
92
+ });
93
+
94
+ #updatePositionStrategy = undefined as unknown as FloatingContentStateProps['updatePositionStrategy'];
95
+ #arrowSize = new ElementSize(() => this.arrowRef.current ?? undefined);
96
+ #arrowWidth = $derived(this.#arrowSize?.width ?? 0);
97
+ #arrowHeight = $derived(this.#arrowSize?.height ?? 0);
98
+ #desiredPlacement = $derived.by(
99
+ () =>
100
+ (this.opts.side?.current +
101
+ (this.opts.align.current !== 'center' ? `-${this.opts.align.current}` : '')) as Placement
102
+ );
103
+ #boundary = $derived.by(() =>
104
+ Array.isArray(this.opts.collisionBoundary.current)
105
+ ? this.opts.collisionBoundary.current
106
+ : [this.opts.collisionBoundary.current]
107
+ );
108
+ hasExplicitBoundaries = $derived(this.#boundary.length > 0);
109
+ detectOverflowOptions = $derived.by(() => ({
110
+ padding: this.opts.collisionPadding.current,
111
+ boundary: this.#boundary.filter(isNotNull),
112
+ altBoundary: this.hasExplicitBoundaries
113
+ }));
114
+ #availableWidth = $state<number | undefined>(undefined);
115
+ #availableHeight = $state<number | undefined>(undefined);
116
+ #anchorWidth = $state<number | undefined>(undefined);
117
+ #anchorHeight = $state<number | undefined>(undefined);
118
+ middleware: Middleware[] = $derived.by(
119
+ () =>
120
+ [
121
+ offset({
122
+ mainAxis: this.opts.sideOffset.current + this.#arrowHeight,
123
+ alignmentAxis: this.opts.alignOffset.current
124
+ }),
125
+ this.opts.avoidCollisions.current &&
126
+ shift({
127
+ mainAxis: true,
128
+ crossAxis: false,
129
+ limiter: this.opts.sticky.current === 'partial' ? limitShift() : undefined,
130
+ ...this.detectOverflowOptions
131
+ }),
132
+ this.opts.avoidCollisions.current && flip({ ...this.detectOverflowOptions }),
133
+ size({
134
+ ...this.detectOverflowOptions,
135
+ apply: ({ rects, availableWidth, availableHeight }) => {
136
+ const { width: anchorWidth, height: anchorHeight } = rects.reference;
137
+ this.#availableWidth = availableWidth;
138
+ this.#availableHeight = availableHeight;
139
+ this.#anchorWidth = anchorWidth;
140
+ this.#anchorHeight = anchorHeight;
141
+ }
142
+ }),
143
+ this.arrowRef.current &&
144
+ arrow({
145
+ element: this.arrowRef.current,
146
+ padding: this.opts.arrowPadding.current
147
+ }),
148
+ transformOrigin({ arrowWidth: this.#arrowWidth, arrowHeight: this.#arrowHeight }),
149
+ this.opts.hideWhenDetached.current && hide({ strategy: 'referenceHidden', ...this.detectOverflowOptions })
150
+ ].filter(Boolean) as Middleware[]
151
+ );
152
+ floating: UseFloatingReturn;
153
+ placedSide = $derived.by(() => getSideFromPlacement(this.floating.placement));
154
+ placedAlign = $derived.by(() => getAlignFromPlacement(this.floating.placement));
155
+ arrowX = $derived.by(() => this.floating.middlewareData.arrow?.x ?? 0);
156
+ arrowY = $derived.by(() => this.floating.middlewareData.arrow?.y ?? 0);
157
+ cannotCenterArrow = $derived.by(() => this.floating.middlewareData.arrow?.centerOffset !== 0);
158
+ contentZIndex = $state<string>();
159
+ arrowBaseSide = $derived(OPPOSITE_SIDE[this.placedSide]);
160
+ wrapperProps = $derived.by(
161
+ () =>
162
+ ({
163
+ id: this.opts.wrapperId.current,
164
+ 'data-bits-floating-content-wrapper': '',
165
+ style: {
166
+ ...this.floating.floatingStyles,
167
+ // keep off page when measuring
168
+ transform: this.floating.isPositioned ? this.floating.floatingStyles.transform : 'translate(0, -200%)',
169
+ minWidth: 'max-content',
170
+ zIndex: this.contentZIndex,
171
+ '--bits-floating-transform-origin': `${this.floating.middlewareData.transformOrigin?.x} ${this.floating.middlewareData.transformOrigin?.y}`,
172
+ '--bits-floating-available-width': `${this.#availableWidth}px`,
173
+ '--bits-floating-available-height': `${this.#availableHeight}px`,
174
+ '--bits-floating-anchor-width': `${this.#anchorWidth}px`,
175
+ '--bits-floating-anchor-height': `${this.#anchorHeight}px`,
176
+ // hide the content if using the hide middleware and should be hidden
177
+ ...(this.floating.middlewareData.hide?.referenceHidden && {
178
+ visibility: 'hidden',
179
+ 'pointer-events': 'none'
180
+ }),
181
+ ...this.#transformedStyle
182
+ },
183
+ // Floating UI calculates logical alignment based the `dir` attribute
184
+ dir: this.opts.dir.current
185
+ }) as const
186
+ );
187
+ props = $derived.by(
188
+ () =>
189
+ ({
190
+ 'data-side': this.placedSide,
191
+ 'data-align': this.placedAlign,
192
+ style: styleToString({
193
+ ...this.#transformedStyle
194
+ // if the FloatingContent hasn't been placed yet (not all measurements done)
195
+ // we prevent animations so that users's animation don't kick in too early referring wrong sides
196
+ // animation: !this.floating.isPositioned ? "none" : undefined,
197
+ })
198
+ }) as const
199
+ );
200
+
201
+ arrowStyle = $derived({
202
+ position: 'absolute',
203
+ left: this.arrowX ? `${this.arrowX}px` : undefined,
204
+ top: this.arrowY ? `${this.arrowY}px` : undefined,
205
+ [this.arrowBaseSide]: 0,
206
+ 'transform-origin': {
207
+ top: '',
208
+ right: '0 0',
209
+ bottom: 'center 0',
210
+ left: '100% 0'
211
+ }[this.placedSide],
212
+ transform: {
213
+ top: 'translateY(100%)',
214
+ right: 'translateY(50%) rotate(90deg) translateX(-50%)',
215
+ bottom: 'rotate(180deg)',
216
+ left: 'translateY(50%) rotate(-90deg) translateX(50%)'
217
+ }[this.placedSide],
218
+ visibility: this.cannotCenterArrow ? 'hidden' : undefined
219
+ });
220
+
221
+ constructor(
222
+ readonly opts: FloatingContentStateProps,
223
+ readonly root: FloatingRootState
224
+ ) {
225
+ if (opts.customAnchor) {
226
+ this.root.customAnchorNode.current = opts.customAnchor.current;
227
+ }
228
+
229
+ watch(
230
+ () => opts.customAnchor.current,
231
+ (customAnchor) => {
232
+ this.root.customAnchorNode.current = customAnchor;
233
+ }
234
+ );
235
+
236
+ useRefById({
237
+ id: this.opts.wrapperId,
238
+ ref: this.wrapperRef,
239
+ deps: () => this.opts.enabled.current
240
+ });
241
+
242
+ useRefById({
243
+ id: this.opts.id,
244
+ ref: this.contentRef,
245
+ deps: () => this.opts.enabled.current
246
+ });
247
+
248
+ this.floating = useFloating({
249
+ strategy: () => this.opts.strategy.current,
250
+ placement: () => this.#desiredPlacement,
251
+ middleware: () => this.middleware,
252
+ reference: this.root.anchorNode,
253
+ whileElementsMounted: (...args) => {
254
+ const cleanup = autoUpdate(...args, {
255
+ animationFrame: this.#updatePositionStrategy?.current === 'always'
256
+ });
257
+ return cleanup;
258
+ },
259
+ open: () => this.opts.enabled.current
260
+ });
261
+
262
+ $effect(() => {
263
+ if (!this.floating.isPositioned) return;
264
+ this.opts.onPlaced?.current();
265
+ });
266
+
267
+ watch(
268
+ () => this.contentRef.current,
269
+ (contentNode) => {
270
+ if (!contentNode) return;
271
+ this.contentZIndex = window.getComputedStyle(contentNode).zIndex;
272
+ }
273
+ );
274
+
275
+ $effect(() => {
276
+ this.floating.floating.current = this.wrapperRef.current;
277
+ });
278
+ }
279
+ }
280
+
281
+ type FloatingArrowStateProps = WithRefProps;
282
+
283
+ class FloatingArrowState {
284
+ constructor(
285
+ readonly opts: FloatingArrowStateProps,
286
+ readonly content: FloatingContentState
287
+ ) {
288
+ useRefById({
289
+ ...opts,
290
+ onRefChange: (node) => {
291
+ this.content.arrowRef.current = node;
292
+ },
293
+ deps: () => this.content.opts.enabled.current
294
+ });
295
+ }
296
+
297
+ props = $derived.by(
298
+ () =>
299
+ ({
300
+ id: this.opts.id.current,
301
+ style: this.content.arrowStyle,
302
+ 'data-side': this.content.placedSide
303
+ }) as const
304
+ );
305
+ }
306
+
307
+ type FloatingAnchorStateProps = ReadableBoxedValues<{
308
+ id: string;
309
+ virtualEl?: Measurable | null;
310
+ }>;
311
+
312
+ class FloatingAnchorState {
313
+ ref = box<HTMLElement | null>(null);
314
+
315
+ constructor(
316
+ readonly opts: FloatingAnchorStateProps,
317
+ readonly root: FloatingRootState
318
+ ) {
319
+ if (opts.virtualEl && opts.virtualEl.current) {
320
+ root.triggerNode = box.from(opts.virtualEl.current);
321
+ } else {
322
+ useRefById({
323
+ id: opts.id,
324
+ ref: this.ref,
325
+ onRefChange: (node) => {
326
+ root.triggerNode.current = node;
327
+ }
328
+ });
329
+ }
330
+ }
331
+ }
332
+
333
+ const FloatingRootContext = new Context<FloatingRootState>('Floating.Root');
334
+ const FloatingContentContext = new Context<FloatingContentState>('Floating.Content');
335
+
336
+ export function useFloatingRootState() {
337
+ return FloatingRootContext.set(new FloatingRootState());
338
+ }
339
+
340
+ export function useFloatingContentState(props: FloatingContentStateProps): FloatingContentState {
341
+ return FloatingContentContext.set(new FloatingContentState(props, FloatingRootContext.get()));
342
+ }
343
+
344
+ export function useFloatingArrowState(props: FloatingArrowStateProps): FloatingArrowState {
345
+ return new FloatingArrowState(props, FloatingContentContext.get());
346
+ }
347
+
348
+ export function useFloatingAnchorState(props: FloatingAnchorStateProps): FloatingAnchorState {
349
+ return new FloatingAnchorState(props, FloatingRootContext.get());
350
+ }
351
+
352
+ //
353
+ // HELPERS
354
+ //
355
+
356
+ function transformOrigin(options: { arrowWidth: number; arrowHeight: number }): Middleware {
357
+ return {
358
+ name: 'transformOrigin',
359
+ options,
360
+ fn(data) {
361
+ const { placement, rects, middlewareData } = data;
362
+
363
+ const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;
364
+ const isArrowHidden = cannotCenterArrow;
365
+ const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;
366
+ const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;
367
+
368
+ const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);
369
+ const noArrowAlign = { start: '0%', center: '50%', end: '100%' }[placedAlign];
370
+
371
+ const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;
372
+ const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;
373
+
374
+ let x = '';
375
+ let y = '';
376
+
377
+ if (placedSide === 'bottom') {
378
+ x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;
379
+ y = `${-arrowHeight}px`;
380
+ } else if (placedSide === 'top') {
381
+ x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;
382
+ y = `${rects.floating.height + arrowHeight}px`;
383
+ } else if (placedSide === 'right') {
384
+ x = `${-arrowHeight}px`;
385
+ y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;
386
+ } else if (placedSide === 'left') {
387
+ x = `${rects.floating.width + arrowHeight}px`;
388
+ y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;
389
+ }
390
+ return { data: { x, y } };
391
+ }
392
+ };
393
+ }
394
+
395
+ function getSideAndAlignFromPlacement(placement: Placement) {
396
+ const [side, align = 'center'] = placement.split('-');
397
+ return [side as Side, align as Align] as const;
398
+ }
399
+
400
+ export function getSideFromPlacement(placement: Placement) {
401
+ return getSideAndAlignFromPlacement(placement)[0];
402
+ }
403
+
404
+ export function getAlignFromPlacement(placement: Placement) {
405
+ return getSideAndAlignFromPlacement(placement)[1];
406
+ }
@@ -0,0 +1 @@
1
+ export * from "./utils/index.js";
@@ -0,0 +1,38 @@
1
+ import { type Readable, derived } from "svelte/store";
2
+
3
+ /**
4
+ * Creates a derived store whose value is transformed asynchronously.
5
+ *
6
+ * @template T The type of the source store(s)
7
+ * @template R The type of the result
8
+ * @param stores The source store(s)
9
+ * @param callback An async function that transforms the source values
10
+ * @param initial_value Initial value to use until the first async resolution
11
+ * @returns A readable store with the transformed value
12
+ */
13
+ export function asyncDerived<T, R>(
14
+ stores: Readable<T> | Array<Readable<unknown>>,
15
+ callback: (values: T) => Promise<R>,
16
+ initial_value: R
17
+ ): Readable<R> {
18
+ let guard: object | undefined;
19
+
20
+ return derived(
21
+ stores,
22
+ ($stores, set) => {
23
+ // Create a unique object for this execution
24
+ const inner = (guard = {});
25
+
26
+ // Set the initial value immediately
27
+ set(initial_value);
28
+
29
+ // Run the async callback and update the value if this execution is still valid
30
+ Promise.resolve(callback($stores)).then((value) => {
31
+ if (guard === inner) {
32
+ set(value);
33
+ }
34
+ });
35
+ },
36
+ initial_value
37
+ );
38
+ }
@@ -0,0 +1,93 @@
1
+ import type { WritableBoxedValues, ReadableBoxedValues } from 'svelte-toolbelt';
2
+
3
+ export type WithRefProps<T = {}> = T &
4
+ ReadableBoxedValues<{
5
+ id: string;
6
+ }> &
7
+ WritableBoxedValues<{
8
+ ref: HTMLElement | null;
9
+ }>;
10
+
11
+ export function getDataOpenClosed(condition) {
12
+ return condition ? 'open' : 'closed';
13
+ }
14
+ export function getDataChecked(condition) {
15
+ return condition ? 'checked' : 'unchecked';
16
+ }
17
+ export function getAriaDisabled(condition) {
18
+ return condition ? 'true' : 'false';
19
+ }
20
+ export function getAriaReadonly(condition) {
21
+ return condition ? 'true' : 'false';
22
+ }
23
+ export function getAriaExpanded(condition) {
24
+ return condition ? 'true' : 'false';
25
+ }
26
+ export function getDataDisabled(condition) {
27
+ return condition ? '' : undefined;
28
+ }
29
+ export function getAriaRequired(condition) {
30
+ return condition ? 'true' : 'false';
31
+ }
32
+ export function getAriaSelected(condition) {
33
+ return condition ? 'true' : 'false';
34
+ }
35
+ export function getAriaChecked(checked, indeterminate) {
36
+ if (indeterminate) {
37
+ return 'mixed';
38
+ }
39
+ return checked ? 'true' : 'false';
40
+ }
41
+ export function getAriaOrientation(orientation) {
42
+ return orientation;
43
+ }
44
+ export function getAriaHidden(condition) {
45
+ return condition ? 'true' : undefined;
46
+ }
47
+ export function getAriaInvalid(condition) {
48
+ return condition ? 'true' : undefined;
49
+ }
50
+ export function getDataOrientation(orientation) {
51
+ return orientation;
52
+ }
53
+ export function getDataInvalid(condition) {
54
+ return condition ? '' : undefined;
55
+ }
56
+ export function getDataRequired(condition) {
57
+ return condition ? '' : undefined;
58
+ }
59
+ export function getDataReadonly(condition) {
60
+ return condition ? '' : undefined;
61
+ }
62
+ export function getDataSelected(condition) {
63
+ return condition ? '' : undefined;
64
+ }
65
+ export function getDataUnavailable(condition) {
66
+ return condition ? '' : undefined;
67
+ }
68
+ export function getHidden(condition) {
69
+ return condition ? true : undefined;
70
+ }
71
+ export function getDisabled(condition) {
72
+ return condition ? true : undefined;
73
+ }
74
+ export function getAriaPressed(condition) {
75
+ return condition ? 'true' : 'false';
76
+ }
77
+ export function getRequired(condition) {
78
+ return condition ? true : undefined;
79
+ }
80
+
81
+ import type { HTMLFormAttributes } from 'svelte/elements';
82
+ import type { HTMLAttributes } from 'svelte/elements';
83
+
84
+ type BitsPrimitive<T> = Omit<T, 'style' | 'id' | 'children'> & {
85
+ id?: string;
86
+ };
87
+ export type BitsPrimitiveFormAttributes = BitsPrimitive<HTMLFormAttributes>;
88
+
89
+ export type HTMLDivAttributes = HTMLAttributes<HTMLDivElement>;
90
+
91
+ export interface Test {
92
+ test: string;
93
+ }
@@ -0,0 +1,3 @@
1
+ export * from "./utils.js";
2
+ export * from "./bits.js";
3
+ export * from "./asyncDerived.svelte.js";
@@ -0,0 +1,97 @@
1
+ import { type ClassValue, clsx } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs));
6
+ }
7
+
8
+ import { cubicOut } from 'svelte/easing';
9
+ import type { TransitionConfig } from 'svelte/transition';
10
+
11
+ type FlyAndScaleParams = {
12
+ y?: number;
13
+ x?: number;
14
+ start?: number;
15
+ duration?: number;
16
+ delay?: number;
17
+ };
18
+
19
+ export const flyAndScale = (
20
+ node: Element,
21
+ params: FlyAndScaleParams = { y: -8, x: 0, start: 0.95, duration: 200, delay: 0 }
22
+ ): TransitionConfig => {
23
+ const style = getComputedStyle(node);
24
+ const transform = style.transform === 'none' ? '' : style.transform;
25
+
26
+ const scaleConversion = (valueA: number, scaleA: [number, number], scaleB: [number, number]) => {
27
+ const [minA, maxA] = scaleA;
28
+ const [minB, maxB] = scaleB;
29
+
30
+ const percentage = (valueA - minA) / (maxA - minA);
31
+ const valueB = percentage * (maxB - minB) + minB;
32
+
33
+ return valueB;
34
+ };
35
+
36
+ const styleToString = (style: Record<string, number | string | undefined>): string => {
37
+ return Object.keys(style).reduce((str, key) => {
38
+ if (style[key] === undefined) return str;
39
+ return str + key + ':' + style[key] + ';';
40
+ }, '');
41
+ };
42
+
43
+ return {
44
+ duration: params.duration ?? 200,
45
+ delay: params.delay ?? 0,
46
+ css: (t) => {
47
+ const y = scaleConversion(t, [0, 1], [params.y ?? 5, 0]);
48
+ const x = scaleConversion(t, [0, 1], [params.x ?? 0, 0]);
49
+ const scale = scaleConversion(t, [0, 1], [params.start ?? 0.95, 1]);
50
+ const opacity = t;
51
+
52
+ const style: any = {
53
+ transform: transform + 'translate3d(' + x + 'px, ' + y + 'px, 0) scale(' + scale + ')',
54
+ opacity
55
+ };
56
+
57
+ if (params.delay && params.delay > 0) {
58
+ const visibility = t === 0 ? 'hidden' : 'visible'; // Hide when fully collapsed
59
+ const position = t === 0 ? 'absolute' : 'relative'; // Remove from the flow at the start
60
+ style.visibility = visibility;
61
+ style.position = position;
62
+ }
63
+
64
+ return styleToString(style);
65
+ },
66
+ easing: cubicOut
67
+ };
68
+ };
69
+
70
+ export function flexSlide(node: Element, { duration = 300, easing = cubicOut } = {}) {
71
+ const style = getComputedStyle(node);
72
+ const opacity = +style.opacity;
73
+ const height = parseFloat(style.height);
74
+ const paddingTop = parseFloat(style.paddingTop);
75
+ const paddingBottom = parseFloat(style.paddingBottom);
76
+ const marginTop = parseFloat(style.marginTop);
77
+ const marginBottom = parseFloat(style.marginBottom);
78
+ const borderTopWidth = parseFloat(style.borderTopWidth);
79
+ const borderBottomWidth = parseFloat(style.borderBottomWidth);
80
+
81
+ return {
82
+ duration,
83
+ easing,
84
+ css: (t: number) =>
85
+ `overflow: hidden;
86
+ opacity: ${Math.min(t * 20, 1) * opacity};
87
+ flex-grow: ${t};
88
+ height: ${t * height}px;
89
+ padding-top: ${t * paddingTop}px;
90
+ padding-bottom: ${t * paddingBottom}px;
91
+ margin-top: ${t * marginTop}px;
92
+ margin-bottom: ${t * marginBottom}px;
93
+ border-top-width: ${t * borderTopWidth}px;
94
+ border-bottom-width: ${t * borderBottomWidth}px;
95
+ `
96
+ };
97
+ }
File without changes