@teamturing/react-kit 2.3.1 → 2.5.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 (231) hide show
  1. package/dist/core/Dialog/index.d.ts +16 -0
  2. package/dist/core/DialogHandler/index.d.ts +13 -0
  3. package/dist/core/Grid/index.d.ts +2 -2
  4. package/dist/core/MotionView/index.d.ts +3 -0
  5. package/dist/core/Stack/index.d.ts +2 -2
  6. package/dist/enigma/EnigmaUI/index.d.ts +12 -2
  7. package/dist/hook/useDialogHandler.d.ts +6 -0
  8. package/dist/index.d.ts +4 -0
  9. package/dist/index.js +9769 -325
  10. package/dist/utils/index.d.ts +1 -0
  11. package/dist/utils/isFunction.d.ts +1 -0
  12. package/esm/core/Dialog/index.js +188 -0
  13. package/esm/core/DialogHandler/index.js +33 -0
  14. package/esm/core/MotionView/index.js +6 -0
  15. package/esm/enigma/EnigmaUI/index.js +6 -1
  16. package/esm/hook/useDialogHandler.js +14 -0
  17. package/esm/index.js +3 -0
  18. package/esm/node_modules/framer-motion/dist/es/animation/animators/instant.js +40 -0
  19. package/esm/node_modules/framer-motion/dist/es/animation/animators/js/driver-frameloop.js +16 -0
  20. package/esm/node_modules/framer-motion/dist/es/animation/animators/js/index.js +303 -0
  21. package/esm/node_modules/framer-motion/dist/es/animation/animators/waapi/create-accelerated-animation.js +199 -0
  22. package/esm/node_modules/framer-motion/dist/es/animation/animators/waapi/easing.js +31 -0
  23. package/esm/node_modules/framer-motion/dist/es/animation/animators/waapi/index.js +23 -0
  24. package/esm/node_modules/framer-motion/dist/es/animation/animators/waapi/utils/get-final-keyframe.js +8 -0
  25. package/esm/node_modules/framer-motion/dist/es/animation/generators/inertia.js +87 -0
  26. package/esm/node_modules/framer-motion/dist/es/animation/generators/keyframes.js +51 -0
  27. package/esm/node_modules/framer-motion/dist/es/animation/generators/spring/find.js +89 -0
  28. package/esm/node_modules/framer-motion/dist/es/animation/generators/spring/index.js +129 -0
  29. package/esm/node_modules/framer-motion/dist/es/animation/generators/utils/calc-duration.js +17 -0
  30. package/esm/node_modules/framer-motion/dist/es/animation/generators/utils/velocity.js +9 -0
  31. package/esm/node_modules/framer-motion/dist/es/animation/interfaces/motion-value.js +101 -0
  32. package/esm/node_modules/framer-motion/dist/es/animation/interfaces/single-value.js +11 -0
  33. package/esm/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-target.js +71 -0
  34. package/esm/node_modules/framer-motion/dist/es/animation/interfaces/visual-element-variant.js +63 -0
  35. package/esm/node_modules/framer-motion/dist/es/animation/interfaces/visual-element.js +24 -0
  36. package/esm/node_modules/framer-motion/dist/es/animation/optimized-appear/data-id.js +6 -0
  37. package/esm/node_modules/framer-motion/dist/es/animation/utils/default-transitions.js +40 -0
  38. package/esm/node_modules/framer-motion/dist/es/animation/utils/is-animatable.js +30 -0
  39. package/esm/node_modules/framer-motion/dist/es/animation/utils/is-animation-controls.js +5 -0
  40. package/esm/node_modules/framer-motion/dist/es/animation/utils/is-keyframes-target.js +5 -0
  41. package/esm/node_modules/framer-motion/dist/es/animation/utils/is-none.js +12 -0
  42. package/esm/node_modules/framer-motion/dist/es/animation/utils/keyframes.js +45 -0
  43. package/esm/node_modules/framer-motion/dist/es/animation/utils/transitions.js +13 -0
  44. package/esm/node_modules/framer-motion/dist/es/components/AnimatePresence/PopChild.js +71 -0
  45. package/esm/node_modules/framer-motion/dist/es/components/AnimatePresence/PresenceChild.js +56 -0
  46. package/esm/node_modules/framer-motion/dist/es/components/AnimatePresence/index.js +158 -0
  47. package/esm/node_modules/framer-motion/dist/es/components/AnimatePresence/use-presence.js +40 -0
  48. package/esm/node_modules/framer-motion/dist/es/context/LayoutGroupContext.js +5 -0
  49. package/esm/node_modules/framer-motion/dist/es/context/LazyContext.js +5 -0
  50. package/esm/node_modules/framer-motion/dist/es/context/MotionConfigContext.js +12 -0
  51. package/esm/node_modules/framer-motion/dist/es/context/MotionContext/create.js +13 -0
  52. package/esm/node_modules/framer-motion/dist/es/context/MotionContext/index.js +5 -0
  53. package/esm/node_modules/framer-motion/dist/es/context/MotionContext/utils.js +17 -0
  54. package/esm/node_modules/framer-motion/dist/es/context/PresenceContext.js +8 -0
  55. package/esm/node_modules/framer-motion/dist/es/context/SwitchLayoutGroupContext.js +8 -0
  56. package/esm/node_modules/framer-motion/dist/es/debug/record.js +7 -0
  57. package/esm/node_modules/framer-motion/dist/es/easing/anticipate.js +5 -0
  58. package/esm/node_modules/framer-motion/dist/es/easing/back.js +9 -0
  59. package/esm/node_modules/framer-motion/dist/es/easing/circ.js +8 -0
  60. package/esm/node_modules/framer-motion/dist/es/easing/cubic-bezier.js +51 -0
  61. package/esm/node_modules/framer-motion/dist/es/easing/ease.js +7 -0
  62. package/esm/node_modules/framer-motion/dist/es/easing/modifiers/mirror.js +5 -0
  63. package/esm/node_modules/framer-motion/dist/es/easing/modifiers/reverse.js +5 -0
  64. package/esm/node_modules/framer-motion/dist/es/easing/utils/is-bezier-definition.js +3 -0
  65. package/esm/node_modules/framer-motion/dist/es/easing/utils/is-easing-array.js +5 -0
  66. package/esm/node_modules/framer-motion/dist/es/easing/utils/map.js +37 -0
  67. package/esm/node_modules/framer-motion/dist/es/events/add-dom-event.js +6 -0
  68. package/esm/node_modules/framer-motion/dist/es/events/add-pointer-event.js +8 -0
  69. package/esm/node_modules/framer-motion/dist/es/events/event-info.js +15 -0
  70. package/esm/node_modules/framer-motion/dist/es/events/utils/is-primary-pointer.js +18 -0
  71. package/esm/node_modules/framer-motion/dist/es/frameloop/batcher.js +60 -0
  72. package/esm/node_modules/framer-motion/dist/es/frameloop/frame.js +6 -0
  73. package/esm/node_modules/framer-motion/dist/es/frameloop/render-step.js +104 -0
  74. package/esm/node_modules/framer-motion/dist/es/gestures/drag/VisualElementDragControls.js +457 -0
  75. package/esm/node_modules/framer-motion/dist/es/gestures/drag/index.js +27 -0
  76. package/esm/node_modules/framer-motion/dist/es/gestures/drag/utils/constraints.js +125 -0
  77. package/esm/node_modules/framer-motion/dist/es/gestures/drag/utils/lock.js +53 -0
  78. package/esm/node_modules/framer-motion/dist/es/gestures/focus.js +41 -0
  79. package/esm/node_modules/framer-motion/dist/es/gestures/hover.js +32 -0
  80. package/esm/node_modules/framer-motion/dist/es/gestures/pan/PanSession.js +148 -0
  81. package/esm/node_modules/framer-motion/dist/es/gestures/pan/index.js +46 -0
  82. package/esm/node_modules/framer-motion/dist/es/gestures/press.js +120 -0
  83. package/esm/node_modules/framer-motion/dist/es/gestures/utils/is-node-or-child.js +20 -0
  84. package/esm/node_modules/framer-motion/dist/es/motion/features/Feature.js +9 -0
  85. package/esm/node_modules/framer-motion/dist/es/motion/features/animation/exit.js +31 -0
  86. package/esm/node_modules/framer-motion/dist/es/motion/features/animation/index.js +38 -0
  87. package/esm/node_modules/framer-motion/dist/es/motion/features/animations.js +13 -0
  88. package/esm/node_modules/framer-motion/dist/es/motion/features/definitions.js +28 -0
  89. package/esm/node_modules/framer-motion/dist/es/motion/features/drag.js +17 -0
  90. package/esm/node_modules/framer-motion/dist/es/motion/features/gestures.js +21 -0
  91. package/esm/node_modules/framer-motion/dist/es/motion/features/layout/MeasureLayout.js +131 -0
  92. package/esm/node_modules/framer-motion/dist/es/motion/features/layout.js +11 -0
  93. package/esm/node_modules/framer-motion/dist/es/motion/features/load-features.js +12 -0
  94. package/esm/node_modules/framer-motion/dist/es/motion/features/viewport/index.js +72 -0
  95. package/esm/node_modules/framer-motion/dist/es/motion/features/viewport/observers.js +49 -0
  96. package/esm/node_modules/framer-motion/dist/es/motion/index.js +79 -0
  97. package/esm/node_modules/framer-motion/dist/es/motion/utils/is-forced-motion-value.js +11 -0
  98. package/esm/node_modules/framer-motion/dist/es/motion/utils/symbol.js +3 -0
  99. package/esm/node_modules/framer-motion/dist/es/motion/utils/use-motion-ref.js +33 -0
  100. package/esm/node_modules/framer-motion/dist/es/motion/utils/use-visual-element.js +75 -0
  101. package/esm/node_modules/framer-motion/dist/es/motion/utils/use-visual-state.js +81 -0
  102. package/esm/node_modules/framer-motion/dist/es/motion/utils/valid-prop.js +59 -0
  103. package/esm/node_modules/framer-motion/dist/es/projection/animation/mix-values.js +93 -0
  104. package/esm/node_modules/framer-motion/dist/es/projection/geometry/conversion.js +33 -0
  105. package/esm/node_modules/framer-motion/dist/es/projection/geometry/copy.js +20 -0
  106. package/esm/node_modules/framer-motion/dist/es/projection/geometry/delta-apply.js +122 -0
  107. package/esm/node_modules/framer-motion/dist/es/projection/geometry/delta-calc.js +41 -0
  108. package/esm/node_modules/framer-motion/dist/es/projection/geometry/delta-remove.js +54 -0
  109. package/esm/node_modules/framer-motion/dist/es/projection/geometry/models.js +17 -0
  110. package/esm/node_modules/framer-motion/dist/es/projection/geometry/utils.js +25 -0
  111. package/esm/node_modules/framer-motion/dist/es/projection/node/DocumentProjectionNode.js +13 -0
  112. package/esm/node_modules/framer-motion/dist/es/projection/node/HTMLProjectionNode.js +27 -0
  113. package/esm/node_modules/framer-motion/dist/es/projection/node/create-projection-node.js +1494 -0
  114. package/esm/node_modules/framer-motion/dist/es/projection/node/state.js +19 -0
  115. package/esm/node_modules/framer-motion/dist/es/projection/shared/stack.js +112 -0
  116. package/esm/node_modules/framer-motion/dist/es/projection/styles/scale-border-radius.js +41 -0
  117. package/esm/node_modules/framer-motion/dist/es/projection/styles/scale-box-shadow.js +35 -0
  118. package/esm/node_modules/framer-motion/dist/es/projection/styles/scale-correction.js +6 -0
  119. package/esm/node_modules/framer-motion/dist/es/projection/styles/transform.js +42 -0
  120. package/esm/node_modules/framer-motion/dist/es/projection/utils/each-axis.js +5 -0
  121. package/esm/node_modules/framer-motion/dist/es/projection/utils/has-transform.js +24 -0
  122. package/esm/node_modules/framer-motion/dist/es/projection/utils/measure.js +17 -0
  123. package/esm/node_modules/framer-motion/dist/es/render/VisualElement.js +507 -0
  124. package/esm/node_modules/framer-motion/dist/es/render/dom/DOMVisualElement.js +48 -0
  125. package/esm/node_modules/framer-motion/dist/es/render/dom/create-visual-element.js +11 -0
  126. package/esm/node_modules/framer-motion/dist/es/render/dom/motion-proxy.js +47 -0
  127. package/esm/node_modules/framer-motion/dist/es/render/dom/motion.js +23 -0
  128. package/esm/node_modules/framer-motion/dist/es/render/dom/use-render.js +35 -0
  129. package/esm/node_modules/framer-motion/dist/es/render/dom/utils/camel-to-dash.js +6 -0
  130. package/esm/node_modules/framer-motion/dist/es/render/dom/utils/create-config.js +19 -0
  131. package/esm/node_modules/framer-motion/dist/es/render/dom/utils/css-variables-conversion.js +89 -0
  132. package/esm/node_modules/framer-motion/dist/es/render/dom/utils/filter-props.js +57 -0
  133. package/esm/node_modules/framer-motion/dist/es/render/dom/utils/is-css-variable.js +6 -0
  134. package/esm/node_modules/framer-motion/dist/es/render/dom/utils/is-svg-component.js +30 -0
  135. package/esm/node_modules/framer-motion/dist/es/render/dom/utils/is-svg-element.js +5 -0
  136. package/esm/node_modules/framer-motion/dist/es/render/dom/utils/parse-dom-variant.js +15 -0
  137. package/esm/node_modules/framer-motion/dist/es/render/dom/utils/unit-conversion.js +230 -0
  138. package/esm/node_modules/framer-motion/dist/es/render/dom/value-types/animatable-none.js +15 -0
  139. package/esm/node_modules/framer-motion/dist/es/render/dom/value-types/defaults.js +30 -0
  140. package/esm/node_modules/framer-motion/dist/es/render/dom/value-types/dimensions.js +15 -0
  141. package/esm/node_modules/framer-motion/dist/es/render/dom/value-types/find.js +15 -0
  142. package/esm/node_modules/framer-motion/dist/es/render/dom/value-types/get-as-type.js +10 -0
  143. package/esm/node_modules/framer-motion/dist/es/render/dom/value-types/number.js +72 -0
  144. package/esm/node_modules/framer-motion/dist/es/render/dom/value-types/test.js +6 -0
  145. package/esm/node_modules/framer-motion/dist/es/render/dom/value-types/type-auto.js +9 -0
  146. package/esm/node_modules/framer-motion/dist/es/render/dom/value-types/type-int.js +8 -0
  147. package/esm/node_modules/framer-motion/dist/es/render/html/HTMLVisualElement.js +55 -0
  148. package/esm/node_modules/framer-motion/dist/es/render/html/config-motion.js +12 -0
  149. package/esm/node_modules/framer-motion/dist/es/render/html/use-props.js +57 -0
  150. package/esm/node_modules/framer-motion/dist/es/render/html/utils/build-styles.js +74 -0
  151. package/esm/node_modules/framer-motion/dist/es/render/html/utils/build-transform.js +45 -0
  152. package/esm/node_modules/framer-motion/dist/es/render/html/utils/create-render-state.js +8 -0
  153. package/esm/node_modules/framer-motion/dist/es/render/html/utils/render.js +9 -0
  154. package/esm/node_modules/framer-motion/dist/es/render/html/utils/scrape-motion-values.js +17 -0
  155. package/esm/node_modules/framer-motion/dist/es/render/html/utils/transform.js +28 -0
  156. package/esm/node_modules/framer-motion/dist/es/render/store.js +3 -0
  157. package/esm/node_modules/framer-motion/dist/es/render/svg/SVGVisualElement.js +46 -0
  158. package/esm/node_modules/framer-motion/dist/es/render/svg/config-motion.js +40 -0
  159. package/esm/node_modules/framer-motion/dist/es/render/svg/lowercase-elements.js +33 -0
  160. package/esm/node_modules/framer-motion/dist/es/render/svg/use-props.js +24 -0
  161. package/esm/node_modules/framer-motion/dist/es/render/svg/utils/build-attrs.js +52 -0
  162. package/esm/node_modules/framer-motion/dist/es/render/svg/utils/camel-case-attrs.js +30 -0
  163. package/esm/node_modules/framer-motion/dist/es/render/svg/utils/create-render-state.js +8 -0
  164. package/esm/node_modules/framer-motion/dist/es/render/svg/utils/is-svg-tag.js +3 -0
  165. package/esm/node_modules/framer-motion/dist/es/render/svg/utils/path.js +32 -0
  166. package/esm/node_modules/framer-motion/dist/es/render/svg/utils/render.js +12 -0
  167. package/esm/node_modules/framer-motion/dist/es/render/svg/utils/scrape-motion-values.js +18 -0
  168. package/esm/node_modules/framer-motion/dist/es/render/svg/utils/transform-origin.js +18 -0
  169. package/esm/node_modules/framer-motion/dist/es/render/utils/animation-state.js +319 -0
  170. package/esm/node_modules/framer-motion/dist/es/render/utils/compare-by-depth.js +3 -0
  171. package/esm/node_modules/framer-motion/dist/es/render/utils/flat-tree.js +24 -0
  172. package/esm/node_modules/framer-motion/dist/es/render/utils/is-controlling-variants.js +13 -0
  173. package/esm/node_modules/framer-motion/dist/es/render/utils/is-variant-label.js +8 -0
  174. package/esm/node_modules/framer-motion/dist/es/render/utils/motion-values.js +63 -0
  175. package/esm/node_modules/framer-motion/dist/es/render/utils/resolve-dynamic-variants.js +24 -0
  176. package/esm/node_modules/framer-motion/dist/es/render/utils/resolve-variants.js +26 -0
  177. package/esm/node_modules/framer-motion/dist/es/render/utils/setters.js +101 -0
  178. package/esm/node_modules/framer-motion/dist/es/render/utils/variant-props.js +12 -0
  179. package/esm/node_modules/framer-motion/dist/es/utils/array.js +11 -0
  180. package/esm/node_modules/framer-motion/dist/es/utils/clamp.js +3 -0
  181. package/esm/node_modules/framer-motion/dist/es/utils/delay.js +19 -0
  182. package/esm/node_modules/framer-motion/dist/es/utils/distance.js +9 -0
  183. package/esm/node_modules/framer-motion/dist/es/utils/errors.js +18 -0
  184. package/esm/node_modules/framer-motion/dist/es/utils/hsla-to-rgba.js +42 -0
  185. package/esm/node_modules/framer-motion/dist/es/utils/interpolate.js +92 -0
  186. package/esm/node_modules/framer-motion/dist/es/utils/is-browser.js +3 -0
  187. package/esm/node_modules/framer-motion/dist/es/utils/is-numerical-string.js +6 -0
  188. package/esm/node_modules/framer-motion/dist/es/utils/is-ref-object.js +6 -0
  189. package/esm/node_modules/framer-motion/dist/es/utils/is-zero-value-string.js +6 -0
  190. package/esm/node_modules/framer-motion/dist/es/utils/memo.js +10 -0
  191. package/esm/node_modules/framer-motion/dist/es/utils/mix-color.js +40 -0
  192. package/esm/node_modules/framer-motion/dist/es/utils/mix-complex.js +64 -0
  193. package/esm/node_modules/framer-motion/dist/es/utils/mix.js +24 -0
  194. package/esm/node_modules/framer-motion/dist/es/utils/noop.js +3 -0
  195. package/esm/node_modules/framer-motion/dist/es/utils/offsets/default.js +9 -0
  196. package/esm/node_modules/framer-motion/dist/es/utils/offsets/fill.js +12 -0
  197. package/esm/node_modules/framer-motion/dist/es/utils/offsets/time.js +5 -0
  198. package/esm/node_modules/framer-motion/dist/es/utils/pipe.js +11 -0
  199. package/esm/node_modules/framer-motion/dist/es/utils/progress.js +18 -0
  200. package/esm/node_modules/framer-motion/dist/es/utils/reduced-motion/index.js +19 -0
  201. package/esm/node_modules/framer-motion/dist/es/utils/reduced-motion/state.js +5 -0
  202. package/esm/node_modules/framer-motion/dist/es/utils/resolve-value.js +11 -0
  203. package/esm/node_modules/framer-motion/dist/es/utils/shallow-compare.js +14 -0
  204. package/esm/node_modules/framer-motion/dist/es/utils/subscription-manager.js +40 -0
  205. package/esm/node_modules/framer-motion/dist/es/utils/time-conversion.js +10 -0
  206. package/esm/node_modules/framer-motion/dist/es/utils/use-constant.js +18 -0
  207. package/esm/node_modules/framer-motion/dist/es/utils/use-force-update.js +19 -0
  208. package/esm/node_modules/framer-motion/dist/es/utils/use-instant-transition-state.js +5 -0
  209. package/esm/node_modules/framer-motion/dist/es/utils/use-is-mounted.js +15 -0
  210. package/esm/node_modules/framer-motion/dist/es/utils/use-isomorphic-effect.js +6 -0
  211. package/esm/node_modules/framer-motion/dist/es/utils/use-unmount-effect.js +7 -0
  212. package/esm/node_modules/framer-motion/dist/es/utils/velocity-per-second.js +11 -0
  213. package/esm/node_modules/framer-motion/dist/es/utils/warn-once.js +11 -0
  214. package/esm/node_modules/framer-motion/dist/es/value/index.js +331 -0
  215. package/esm/node_modules/framer-motion/dist/es/value/types/color/hex.js +40 -0
  216. package/esm/node_modules/framer-motion/dist/es/value/types/color/hsla.js +22 -0
  217. package/esm/node_modules/framer-motion/dist/es/value/types/color/index.js +28 -0
  218. package/esm/node_modules/framer-motion/dist/es/value/types/color/rgba.js +25 -0
  219. package/esm/node_modules/framer-motion/dist/es/value/types/color/utils.js +23 -0
  220. package/esm/node_modules/framer-motion/dist/es/value/types/complex/filter.js +30 -0
  221. package/esm/node_modules/framer-motion/dist/es/value/types/complex/index.js +92 -0
  222. package/esm/node_modules/framer-motion/dist/es/value/types/numbers/index.js +17 -0
  223. package/esm/node_modules/framer-motion/dist/es/value/types/numbers/units.js +19 -0
  224. package/esm/node_modules/framer-motion/dist/es/value/types/utils.js +15 -0
  225. package/esm/node_modules/framer-motion/dist/es/value/use-will-change/is.js +7 -0
  226. package/esm/node_modules/framer-motion/dist/es/value/utils/is-motion-value.js +3 -0
  227. package/esm/node_modules/framer-motion/dist/es/value/utils/resolve-motion-value.js +16 -0
  228. package/esm/packages/icons/esm/Close.js +17 -0
  229. package/esm/packages/token-studio/esm/token/elevation/index.js +5 -1
  230. package/esm/utils/isFunction.js +3 -0
  231. package/package.json +3 -3
@@ -1,3 +1,4 @@
1
1
  export { forcePixelValue } from './forcePixelValue';
2
2
  export { isArray } from './isArray';
3
+ export { isFunction } from './isFunction';
3
4
  export { isNullable } from './isNullable';
@@ -0,0 +1 @@
1
+ export declare const isFunction: (value: any) => value is (...args: any[]) => any;
@@ -0,0 +1,188 @@
1
+ import { forwardRef, useCallback, useRef, useImperativeHandle, useEffect } from 'react';
2
+ import SvgClose from '../../packages/icons/esm/Close.js';
3
+ import color from '../../packages/token-studio/esm/token/color/index.js';
4
+ import elevation from '../../packages/token-studio/esm/token/elevation/index.js';
5
+ import '../../packages/token-studio/esm/token/typography/index.js';
6
+ import styled from 'styled-components';
7
+ import IconButton from '../IconButton/index.js';
8
+ import View from '../View/index.js';
9
+ import { sx } from '../../utils/styled-system/index.js';
10
+ import MotionView from '../MotionView/index.js';
11
+ import { j as jsxRuntimeExports } from '../../node_modules/react/jsx-runtime.js';
12
+ import { AnimatePresence } from '../../node_modules/framer-motion/dist/es/components/AnimatePresence/index.js';
13
+ import { cubicBezier } from '../../node_modules/framer-motion/dist/es/easing/cubic-bezier.js';
14
+
15
+ function visible(el) {
16
+ return !el.hidden && (!el.type || el.type !== 'hidden') && (el.offsetWidth > 0 || el.offsetHeight > 0);
17
+ }
18
+ function focusable(el) {
19
+ const inputEl = el;
20
+ return inputEl.tabIndex >= 0 && !inputEl.disabled && visible(inputEl);
21
+ }
22
+ const Dialog = ({
23
+ children,
24
+ isOpen,
25
+ onDismiss,
26
+ size,
27
+ sx
28
+ }, ref) => {
29
+ const dialogRoot = typeof document !== 'undefined' ? document.getElementById('dialog_root') : null;
30
+ if (dialogRoot === null) return null;
31
+ const handleDismiss = useCallback(() => onDismiss?.(), [onDismiss]);
32
+ const overlayRef = useRef(null);
33
+ const dialogRef = useRef(null);
34
+ const closeButtonRef = useRef(null);
35
+ useImperativeHandle(ref, () => dialogRef.current);
36
+ const handleOutsideClick = useCallback(e => {
37
+ if (dialogRef.current && overlayRef.current && e.target instanceof Node && !dialogRef.current.contains(e.target) && overlayRef.current.contains(e.target)) {
38
+ handleDismiss?.();
39
+ }
40
+ }, [handleDismiss, dialogRef, overlayRef]);
41
+ const getFocusableItem = useCallback((e, movement) => {
42
+ if (dialogRef.current) {
43
+ const items = Array.from(dialogRef.current.querySelectorAll('*')).filter(focusable);
44
+ if (items.length === 0) return;
45
+ e.preventDefault();
46
+ const focusedElement = document.activeElement;
47
+ if (!focusedElement) {
48
+ return;
49
+ }
50
+ const index = items.indexOf(focusedElement);
51
+ const offsetIndex = index + movement;
52
+ const fallbackIndex = movement === 1 ? 0 : items.length - 1;
53
+ const focusableItem = items[offsetIndex] || items[fallbackIndex];
54
+ return focusableItem;
55
+ }
56
+ }, [dialogRef]);
57
+ const handleTab = useCallback(e => {
58
+ const movement = e.shiftKey ? -1 : 1;
59
+ const focusableItem = getFocusableItem(e, movement);
60
+ if (!focusableItem) {
61
+ return;
62
+ }
63
+ focusableItem.focus();
64
+ }, [getFocusableItem]);
65
+ const handleKeyDown = useCallback(event => {
66
+ switch (event.key) {
67
+ case 'Tab':
68
+ handleTab(event);
69
+ break;
70
+ case 'Escape':
71
+ handleDismiss?.();
72
+ event.stopPropagation();
73
+ break;
74
+ }
75
+ }, [handleDismiss]);
76
+ useEffect(() => {
77
+ if (isOpen) {
78
+ document.addEventListener('click', handleOutsideClick);
79
+ return () => {
80
+ document.removeEventListener('click', handleOutsideClick);
81
+ };
82
+ }
83
+ }, [isOpen, handleOutsideClick]);
84
+ useEffect(() => {
85
+ if (isOpen) {
86
+ if (closeButtonRef && closeButtonRef.current) {
87
+ closeButtonRef.current.focus();
88
+ }
89
+ }
90
+ }, [isOpen, closeButtonRef]);
91
+ return /*#__PURE__*/jsxRuntimeExports.jsx(AnimatePresence, {
92
+ children: isOpen ? /*#__PURE__*/jsxRuntimeExports.jsxs(MotionView, {
93
+ initial: {
94
+ opacity: 0,
95
+ scale: 1.1
96
+ },
97
+ animate: {
98
+ opacity: 1,
99
+ scale: 1
100
+ },
101
+ exit: {
102
+ opacity: 0,
103
+ scale: 1.1
104
+ },
105
+ transition: {
106
+ duration: 0.25,
107
+ /**
108
+ * easeOutQuad by https://easings.net/ko#easeOutQuad
109
+ */
110
+ ease: cubicBezier(0.5, 1, 0.89, 1)
111
+ },
112
+ sx: {
113
+ position: 'fixed',
114
+ display: 'flex',
115
+ top: 0,
116
+ left: 0,
117
+ width: '100%',
118
+ height: '100%',
119
+ zIndex: 9999
120
+ },
121
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx(Overlay, {
122
+ ref: overlayRef
123
+ }), /*#__PURE__*/jsxRuntimeExports.jsxs(BaseDialog, {
124
+ ref: dialogRef,
125
+ "aria-modal": 'true',
126
+ role: 'dialog',
127
+ tabIndex: -1,
128
+ sx: {
129
+ ...(size === 's' ? {
130
+ maxHeight: 'calc(100vh - 32px)',
131
+ width: ['100%', 400, 400],
132
+ marginX: [8, 'auto', 'auto'],
133
+ marginY: 'auto',
134
+ borderRadius: 'l'
135
+ } : size === 'l' ? {
136
+ maxHeight: '100vh',
137
+ height: ['100%', '100%', 'auto'],
138
+ minHeight: ['-webkit-fill-available', '-webkit-fill-available', 'auto'],
139
+ width: ['100%', '100%', 820],
140
+ marginX: [0, 0, 'auto'],
141
+ marginY: 'auto',
142
+ borderRadius: ['none', 'none', 'l']
143
+ } : {}),
144
+ ...sx
145
+ },
146
+ onKeyDown: handleKeyDown,
147
+ children: [/*#__PURE__*/jsxRuntimeExports.jsx(View, {
148
+ sx: {
149
+ position: 'absolute',
150
+ top: 4,
151
+ right: 4
152
+ },
153
+ children: /*#__PURE__*/jsxRuntimeExports.jsx(IconButton, {
154
+ ref: closeButtonRef,
155
+ icon: SvgClose,
156
+ variant: 'plain',
157
+ size: 'm',
158
+ onClick: handleDismiss
159
+ })
160
+ }), children]
161
+ })]
162
+ }) : null
163
+ });
164
+ };
165
+ const Overlay = styled.span`
166
+ &:before {
167
+ position: fixed;
168
+ top: 0;
169
+ right: 0;
170
+ bottom: 0;
171
+ left: 0;
172
+ display: block;
173
+ cursor: default;
174
+ content: '';
175
+ background: ${color.dim};
176
+ }
177
+ `;
178
+ const BaseDialog = styled.div(() => ({
179
+ position: 'relative',
180
+ boxShadow: elevation['shadow/overlay'],
181
+ backgroundColor: elevation['surface/overlay'],
182
+ outline: 'none',
183
+ overflow: 'hidden',
184
+ margin: 'auto'
185
+ }), sx);
186
+ var index = /*#__PURE__*/forwardRef(Dialog);
187
+
188
+ export { index as default };
@@ -0,0 +1,33 @@
1
+ import { Children, cloneElement } from 'react';
2
+ import useDialogHandler from '../../hook/useDialogHandler.js';
3
+ import { isFunction } from '../../utils/isFunction.js';
4
+ import { j as jsxRuntimeExports } from '../../node_modules/react/jsx-runtime.js';
5
+
6
+ const DialogHandler = ({
7
+ renderDialog,
8
+ onClick,
9
+ children: propChildren
10
+ }) => {
11
+ const {
12
+ isOpen,
13
+ openDialog,
14
+ closeDialog
15
+ } = useDialogHandler();
16
+ const handleClick = e => {
17
+ onClick?.(e);
18
+ openDialog();
19
+ };
20
+ const children = isFunction(propChildren) ? propChildren({
21
+ openDialog
22
+ }) : Children.map(propChildren, child => /*#__PURE__*/cloneElement(child, {
23
+ onClick: handleClick
24
+ }));
25
+ return /*#__PURE__*/jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, {
26
+ children: [children, renderDialog({
27
+ isOpen,
28
+ closeDialog
29
+ })]
30
+ });
31
+ };
32
+
33
+ export { DialogHandler as default };
@@ -0,0 +1,6 @@
1
+ import View from '../View/index.js';
2
+ import { motion } from '../../node_modules/framer-motion/dist/es/render/dom/motion.js';
3
+
4
+ const MotionView = motion(View);
5
+
6
+ export { MotionView as default };
@@ -47,5 +47,10 @@ const getViewComponent = viewContainer => {
47
47
  const ViewComponent = renderableViewComponent[viewContainer.viewComponentType];
48
48
  return ViewComponent;
49
49
  };
50
+ var index = Object.assign(EnigmaUI, {
51
+ TextView,
52
+ ImageView,
53
+ ChipGroupViewType: ChipGroupView
54
+ });
50
55
 
51
- export { EnigmaUI as default };
56
+ export { index as default };
@@ -0,0 +1,14 @@
1
+ import { useState } from 'react';
2
+
3
+ const useDialogHandler = () => {
4
+ const [isOpen, setIsOpen] = useState(false);
5
+ const openDialog = () => setIsOpen(true);
6
+ const closeDialog = () => setIsOpen(false);
7
+ return {
8
+ isOpen,
9
+ openDialog,
10
+ closeDialog
11
+ };
12
+ };
13
+
14
+ export { useDialogHandler as default };
package/esm/index.js CHANGED
@@ -1,11 +1,14 @@
1
1
  export { default as Button } from './core/Button/index.js';
2
2
  export { default as Chip } from './core/Chip/index.js';
3
+ export { default as Dialog } from './core/Dialog/index.js';
4
+ export { default as DialogHandler } from './core/DialogHandler/index.js';
3
5
  export { default as GradientText } from './core/GradientText/index.js';
4
6
  export { default as Grid } from './core/Grid/index.js';
5
7
  export { default as IconButton } from './core/IconButton/index.js';
6
8
  export { default as IconToggleButton } from './core/IconToggleButton/index.js';
7
9
  export { default as Image } from './core/Image/index.js';
8
10
  export { default as ItemList } from './core/ItemList/index.js';
11
+ export { default as MotionView } from './core/MotionView/index.js';
9
12
  export { default as Space } from './core/Space/index.js';
10
13
  export { default as Spinner } from './core/Spinner/index.js';
11
14
  export { default as Stack } from './core/Stack/index.js';
@@ -0,0 +1,40 @@
1
+ import { animateValue } from './js/index.js';
2
+ import { noop } from '../../utils/noop.js';
3
+
4
+ function createInstantAnimation({ keyframes, delay, onUpdate, onComplete, }) {
5
+ const setValue = () => {
6
+ onUpdate && onUpdate(keyframes[keyframes.length - 1]);
7
+ onComplete && onComplete();
8
+ /**
9
+ * TODO: As this API grows it could make sense to always return
10
+ * animateValue. This will be a bigger project as animateValue
11
+ * is frame-locked whereas this function resolves instantly.
12
+ * This is a behavioural change and also has ramifications regarding
13
+ * assumptions within tests.
14
+ */
15
+ return {
16
+ time: 0,
17
+ speed: 1,
18
+ duration: 0,
19
+ play: (noop),
20
+ pause: (noop),
21
+ stop: (noop),
22
+ then: (resolve) => {
23
+ resolve();
24
+ return Promise.resolve();
25
+ },
26
+ cancel: (noop),
27
+ complete: (noop),
28
+ };
29
+ };
30
+ return delay
31
+ ? animateValue({
32
+ keyframes: [0, 1],
33
+ duration: 0,
34
+ delay,
35
+ onComplete: setValue,
36
+ })
37
+ : setValue();
38
+ }
39
+
40
+ export { createInstantAnimation };
@@ -0,0 +1,16 @@
1
+ import { frame, cancelFrame, frameData } from '../../../frameloop/frame.js';
2
+
3
+ const frameloopDriver = (update) => {
4
+ const passTimestamp = ({ timestamp }) => update(timestamp);
5
+ return {
6
+ start: () => frame.update(passTimestamp, true),
7
+ stop: () => cancelFrame(passTimestamp),
8
+ /**
9
+ * If we're processing this frame we can use the
10
+ * framelocked timestamp to keep things in sync.
11
+ */
12
+ now: () => frameData.isProcessing ? frameData.timestamp : performance.now(),
13
+ };
14
+ };
15
+
16
+ export { frameloopDriver };
@@ -0,0 +1,303 @@
1
+ import { keyframes } from '../../generators/keyframes.js';
2
+ import { spring } from '../../generators/spring/index.js';
3
+ import { inertia } from '../../generators/inertia.js';
4
+ import { frameloopDriver } from './driver-frameloop.js';
5
+ import { interpolate } from '../../../utils/interpolate.js';
6
+ import { clamp } from '../../../utils/clamp.js';
7
+ import { millisecondsToSeconds, secondsToMilliseconds } from '../../../utils/time-conversion.js';
8
+ import { calcGeneratorDuration } from '../../generators/utils/calc-duration.js';
9
+
10
+ const types = {
11
+ decay: inertia,
12
+ inertia,
13
+ tween: keyframes,
14
+ keyframes: keyframes,
15
+ spring,
16
+ };
17
+ /**
18
+ * Animate a single value on the main thread.
19
+ *
20
+ * This function is written, where functionality overlaps,
21
+ * to be largely spec-compliant with WAAPI to allow fungibility
22
+ * between the two.
23
+ */
24
+ function animateValue({ autoplay = true, delay = 0, driver = frameloopDriver, keyframes: keyframes$1, type = "keyframes", repeat = 0, repeatDelay = 0, repeatType = "loop", onPlay, onStop, onComplete, onUpdate, ...options }) {
25
+ let speed = 1;
26
+ let hasStopped = false;
27
+ let resolveFinishedPromise;
28
+ let currentFinishedPromise;
29
+ /**
30
+ * Resolve the current Promise every time we enter the
31
+ * finished state. This is WAAPI-compatible behaviour.
32
+ */
33
+ const updateFinishedPromise = () => {
34
+ currentFinishedPromise = new Promise((resolve) => {
35
+ resolveFinishedPromise = resolve;
36
+ });
37
+ };
38
+ // Create the first finished promise
39
+ updateFinishedPromise();
40
+ let animationDriver;
41
+ const generatorFactory = types[type] || keyframes;
42
+ /**
43
+ * If this isn't the keyframes generator and we've been provided
44
+ * strings as keyframes, we need to interpolate these.
45
+ * TODO: Support velocity for units and complex value types/
46
+ */
47
+ let mapNumbersToKeyframes;
48
+ if (generatorFactory !== keyframes &&
49
+ typeof keyframes$1[0] !== "number") {
50
+ mapNumbersToKeyframes = interpolate([0, 100], keyframes$1, {
51
+ clamp: false,
52
+ });
53
+ keyframes$1 = [0, 100];
54
+ }
55
+ const generator = generatorFactory({ ...options, keyframes: keyframes$1 });
56
+ let mirroredGenerator;
57
+ if (repeatType === "mirror") {
58
+ mirroredGenerator = generatorFactory({
59
+ ...options,
60
+ keyframes: [...keyframes$1].reverse(),
61
+ velocity: -(options.velocity || 0),
62
+ });
63
+ }
64
+ let playState = "idle";
65
+ let holdTime = null;
66
+ let startTime = null;
67
+ let cancelTime = null;
68
+ /**
69
+ * If duration is undefined and we have repeat options,
70
+ * we need to calculate a duration from the generator.
71
+ *
72
+ * We set it to the generator itself to cache the duration.
73
+ * Any timeline resolver will need to have already precalculated
74
+ * the duration by this step.
75
+ */
76
+ if (generator.calculatedDuration === null && repeat) {
77
+ generator.calculatedDuration = calcGeneratorDuration(generator);
78
+ }
79
+ const { calculatedDuration } = generator;
80
+ let resolvedDuration = Infinity;
81
+ let totalDuration = Infinity;
82
+ if (calculatedDuration !== null) {
83
+ resolvedDuration = calculatedDuration + repeatDelay;
84
+ totalDuration = resolvedDuration * (repeat + 1) - repeatDelay;
85
+ }
86
+ let currentTime = 0;
87
+ const tick = (timestamp) => {
88
+ if (startTime === null)
89
+ return;
90
+ /**
91
+ * requestAnimationFrame timestamps can come through as lower than
92
+ * the startTime as set by performance.now(). Here we prevent this,
93
+ * though in the future it could be possible to make setting startTime
94
+ * a pending operation that gets resolved here.
95
+ */
96
+ if (speed > 0)
97
+ startTime = Math.min(startTime, timestamp);
98
+ if (speed < 0)
99
+ startTime = Math.min(timestamp - totalDuration / speed, startTime);
100
+ if (holdTime !== null) {
101
+ currentTime = holdTime;
102
+ }
103
+ else {
104
+ // Rounding the time because floating point arithmetic is not always accurate, e.g. 3000.367 - 1000.367 =
105
+ // 2000.0000000000002. This is a problem when we are comparing the currentTime with the duration, for
106
+ // example.
107
+ currentTime = Math.round(timestamp - startTime) * speed;
108
+ }
109
+ // Rebase on delay
110
+ const timeWithoutDelay = currentTime - delay * (speed >= 0 ? 1 : -1);
111
+ const isInDelayPhase = speed >= 0 ? timeWithoutDelay < 0 : timeWithoutDelay > totalDuration;
112
+ currentTime = Math.max(timeWithoutDelay, 0);
113
+ /**
114
+ * If this animation has finished, set the current time
115
+ * to the total duration.
116
+ */
117
+ if (playState === "finished" && holdTime === null) {
118
+ currentTime = totalDuration;
119
+ }
120
+ let elapsed = currentTime;
121
+ let frameGenerator = generator;
122
+ if (repeat) {
123
+ /**
124
+ * Get the current progress (0-1) of the animation. If t is >
125
+ * than duration we'll get values like 2.5 (midway through the
126
+ * third iteration)
127
+ */
128
+ const progress = currentTime / resolvedDuration;
129
+ /**
130
+ * Get the current iteration (0 indexed). For instance the floor of
131
+ * 2.5 is 2.
132
+ */
133
+ let currentIteration = Math.floor(progress);
134
+ /**
135
+ * Get the current progress of the iteration by taking the remainder
136
+ * so 2.5 is 0.5 through iteration 2
137
+ */
138
+ let iterationProgress = progress % 1.0;
139
+ /**
140
+ * If iteration progress is 1 we count that as the end
141
+ * of the previous iteration.
142
+ */
143
+ if (!iterationProgress && progress >= 1) {
144
+ iterationProgress = 1;
145
+ }
146
+ iterationProgress === 1 && currentIteration--;
147
+ currentIteration = Math.min(currentIteration, repeat + 1);
148
+ /**
149
+ * Reverse progress if we're not running in "normal" direction
150
+ */
151
+ const iterationIsOdd = Boolean(currentIteration % 2);
152
+ if (iterationIsOdd) {
153
+ if (repeatType === "reverse") {
154
+ iterationProgress = 1 - iterationProgress;
155
+ if (repeatDelay) {
156
+ iterationProgress -= repeatDelay / resolvedDuration;
157
+ }
158
+ }
159
+ else if (repeatType === "mirror") {
160
+ frameGenerator = mirroredGenerator;
161
+ }
162
+ }
163
+ let p = clamp(0, 1, iterationProgress);
164
+ if (currentTime > totalDuration) {
165
+ p = repeatType === "reverse" && iterationIsOdd ? 1 : 0;
166
+ }
167
+ elapsed = p * resolvedDuration;
168
+ }
169
+ /**
170
+ * If we're in negative time, set state as the initial keyframe.
171
+ * This prevents delay: x, duration: 0 animations from finishing
172
+ * instantly.
173
+ */
174
+ const state = isInDelayPhase
175
+ ? { done: false, value: keyframes$1[0] }
176
+ : frameGenerator.next(elapsed);
177
+ if (mapNumbersToKeyframes) {
178
+ state.value = mapNumbersToKeyframes(state.value);
179
+ }
180
+ let { done } = state;
181
+ if (!isInDelayPhase && calculatedDuration !== null) {
182
+ done = speed >= 0 ? currentTime >= totalDuration : currentTime <= 0;
183
+ }
184
+ const isAnimationFinished = holdTime === null &&
185
+ (playState === "finished" || (playState === "running" && done));
186
+ if (onUpdate) {
187
+ onUpdate(state.value);
188
+ }
189
+ if (isAnimationFinished) {
190
+ finish();
191
+ }
192
+ return state;
193
+ };
194
+ const stopAnimationDriver = () => {
195
+ animationDriver && animationDriver.stop();
196
+ animationDriver = undefined;
197
+ };
198
+ const cancel = () => {
199
+ playState = "idle";
200
+ stopAnimationDriver();
201
+ resolveFinishedPromise();
202
+ updateFinishedPromise();
203
+ startTime = cancelTime = null;
204
+ };
205
+ const finish = () => {
206
+ playState = "finished";
207
+ onComplete && onComplete();
208
+ stopAnimationDriver();
209
+ resolveFinishedPromise();
210
+ };
211
+ const play = () => {
212
+ if (hasStopped)
213
+ return;
214
+ if (!animationDriver)
215
+ animationDriver = driver(tick);
216
+ const now = animationDriver.now();
217
+ onPlay && onPlay();
218
+ if (holdTime !== null) {
219
+ startTime = now - holdTime;
220
+ }
221
+ else if (!startTime || playState === "finished") {
222
+ startTime = now;
223
+ }
224
+ if (playState === "finished") {
225
+ updateFinishedPromise();
226
+ }
227
+ cancelTime = startTime;
228
+ holdTime = null;
229
+ /**
230
+ * Set playState to running only after we've used it in
231
+ * the previous logic.
232
+ */
233
+ playState = "running";
234
+ animationDriver.start();
235
+ };
236
+ if (autoplay) {
237
+ play();
238
+ }
239
+ const controls = {
240
+ then(resolve, reject) {
241
+ return currentFinishedPromise.then(resolve, reject);
242
+ },
243
+ get time() {
244
+ return millisecondsToSeconds(currentTime);
245
+ },
246
+ set time(newTime) {
247
+ newTime = secondsToMilliseconds(newTime);
248
+ currentTime = newTime;
249
+ if (holdTime !== null || !animationDriver || speed === 0) {
250
+ holdTime = newTime;
251
+ }
252
+ else {
253
+ startTime = animationDriver.now() - newTime / speed;
254
+ }
255
+ },
256
+ get duration() {
257
+ const duration = generator.calculatedDuration === null
258
+ ? calcGeneratorDuration(generator)
259
+ : generator.calculatedDuration;
260
+ return millisecondsToSeconds(duration);
261
+ },
262
+ get speed() {
263
+ return speed;
264
+ },
265
+ set speed(newSpeed) {
266
+ if (newSpeed === speed || !animationDriver)
267
+ return;
268
+ speed = newSpeed;
269
+ controls.time = millisecondsToSeconds(currentTime);
270
+ },
271
+ get state() {
272
+ return playState;
273
+ },
274
+ play,
275
+ pause: () => {
276
+ playState = "paused";
277
+ holdTime = currentTime;
278
+ },
279
+ stop: () => {
280
+ hasStopped = true;
281
+ if (playState === "idle")
282
+ return;
283
+ playState = "idle";
284
+ onStop && onStop();
285
+ cancel();
286
+ },
287
+ cancel: () => {
288
+ if (cancelTime !== null)
289
+ tick(cancelTime);
290
+ cancel();
291
+ },
292
+ complete: () => {
293
+ playState = "finished";
294
+ },
295
+ sample: (elapsed) => {
296
+ startTime = 0;
297
+ return tick(elapsed);
298
+ },
299
+ };
300
+ return controls;
301
+ }
302
+
303
+ export { animateValue };