@vuu-ui/vuu-utils 2.1.0-alpha.1 → 2.1.0-alpha.2

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 (155) hide show
  1. package/cjs/node_modules/@dnd-kit/react/hooks.js +3 -3
  2. package/cjs/node_modules/@floating-ui/dom/dist/floating-ui.dom.js +492 -0
  3. package/cjs/node_modules/@floating-ui/dom/dist/floating-ui.dom.js.map +1 -0
  4. package/cjs/node_modules/@floating-ui/react/dist/floating-ui.react.js +987 -0
  5. package/cjs/node_modules/@floating-ui/react/dist/floating-ui.react.js.map +1 -0
  6. package/cjs/node_modules/@floating-ui/react/dist/floating-ui.react.utils.js +130 -0
  7. package/cjs/node_modules/@floating-ui/react/dist/floating-ui.react.utils.js.map +1 -0
  8. package/cjs/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js +183 -0
  9. package/cjs/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js.map +1 -0
  10. package/cjs/node_modules/@floating-ui/utils/dist/floating-ui.utils.js +39 -0
  11. package/cjs/node_modules/@floating-ui/utils/dist/floating-ui.utils.js.map +1 -0
  12. package/cjs/node_modules/@salt-ds/core/dist-es/aria-announcer/AriaAnnouncerContext.js +10 -0
  13. package/cjs/node_modules/@salt-ds/core/dist-es/aria-announcer/AriaAnnouncerContext.js.map +1 -0
  14. package/cjs/node_modules/@salt-ds/core/dist-es/aria-announcer/AriaAnnouncerProvider.js +76 -0
  15. package/cjs/node_modules/@salt-ds/core/dist-es/aria-announcer/AriaAnnouncerProvider.js.map +1 -0
  16. package/cjs/node_modules/@salt-ds/core/dist-es/aria-announcer/useAriaAnnouncer.js +52 -0
  17. package/cjs/node_modules/@salt-ds/core/dist-es/aria-announcer/useAriaAnnouncer.js.map +1 -0
  18. package/cjs/node_modules/@salt-ds/core/dist-es/breakpoints/BreakpointProvider.js +59 -0
  19. package/cjs/node_modules/@salt-ds/core/dist-es/breakpoints/BreakpointProvider.js.map +1 -0
  20. package/cjs/node_modules/@salt-ds/core/dist-es/breakpoints/Breakpoints.js +12 -0
  21. package/cjs/node_modules/@salt-ds/core/dist-es/breakpoints/Breakpoints.js.map +1 -0
  22. package/cjs/node_modules/@salt-ds/core/dist-es/button/Button.css.js +6 -0
  23. package/cjs/node_modules/@salt-ds/core/dist-es/button/Button.css.js.map +1 -0
  24. package/cjs/node_modules/@salt-ds/core/dist-es/button/Button.js +96 -0
  25. package/cjs/node_modules/@salt-ds/core/dist-es/button/Button.js.map +1 -0
  26. package/cjs/node_modules/@salt-ds/core/dist-es/button/useButton.js +65 -0
  27. package/cjs/node_modules/@salt-ds/core/dist-es/button/useButton.js.map +1 -0
  28. package/cjs/node_modules/@salt-ds/core/dist-es/salt-provider/ProviderContext.js +11 -0
  29. package/cjs/node_modules/@salt-ds/core/dist-es/salt-provider/ProviderContext.js.map +1 -0
  30. package/cjs/node_modules/@salt-ds/core/dist-es/salt-provider/SaltProvider.css.js +6 -0
  31. package/cjs/node_modules/@salt-ds/core/dist-es/salt-provider/SaltProvider.css.js.map +1 -0
  32. package/cjs/node_modules/@salt-ds/core/dist-es/salt-provider/SaltProvider.js +160 -0
  33. package/cjs/node_modules/@salt-ds/core/dist-es/salt-provider/SaltProvider.js.map +1 -0
  34. package/cjs/node_modules/@salt-ds/core/dist-es/salt-provider/ThemeApplicator.js +115 -0
  35. package/cjs/node_modules/@salt-ds/core/dist-es/salt-provider/ThemeApplicator.js.map +1 -0
  36. package/cjs/node_modules/@salt-ds/core/dist-es/spinner/Spinner.css.js +6 -0
  37. package/cjs/node_modules/@salt-ds/core/dist-es/spinner/Spinner.css.js.map +1 -0
  38. package/cjs/node_modules/@salt-ds/core/dist-es/spinner/Spinner.js +86 -0
  39. package/cjs/node_modules/@salt-ds/core/dist-es/spinner/Spinner.js.map +1 -0
  40. package/cjs/node_modules/@salt-ds/core/dist-es/spinner/svgSpinners/SpinnerSVG.js +93 -0
  41. package/cjs/node_modules/@salt-ds/core/dist-es/spinner/svgSpinners/SpinnerSVG.js.map +1 -0
  42. package/cjs/node_modules/@salt-ds/core/dist-es/utils/createChainedFunction.js +20 -0
  43. package/cjs/node_modules/@salt-ds/core/dist-es/utils/createChainedFunction.js.map +1 -0
  44. package/cjs/node_modules/@salt-ds/core/dist-es/utils/createContext.js +14 -0
  45. package/cjs/node_modules/@salt-ds/core/dist-es/utils/createContext.js.map +1 -0
  46. package/cjs/node_modules/@salt-ds/core/dist-es/utils/debounce.js +22 -0
  47. package/cjs/node_modules/@salt-ds/core/dist-es/utils/debounce.js.map +1 -0
  48. package/cjs/node_modules/@salt-ds/core/dist-es/utils/makePrefixer.js +6 -0
  49. package/cjs/node_modules/@salt-ds/core/dist-es/utils/makePrefixer.js.map +1 -0
  50. package/cjs/node_modules/@salt-ds/core/dist-es/utils/useFloatingUI/useFloatingUI.js +52 -0
  51. package/cjs/node_modules/@salt-ds/core/dist-es/utils/useFloatingUI/useFloatingUI.js.map +1 -0
  52. package/cjs/node_modules/@salt-ds/core/dist-es/utils/useId.js +45 -0
  53. package/cjs/node_modules/@salt-ds/core/dist-es/utils/useId.js.map +1 -0
  54. package/cjs/node_modules/@salt-ds/core/dist-es/utils/useIsomorphicLayoutEffect.js +8 -0
  55. package/cjs/node_modules/@salt-ds/core/dist-es/utils/useIsomorphicLayoutEffect.js.map +1 -0
  56. package/cjs/node_modules/@salt-ds/core/dist-es/utils/usePreventScroll.js +233 -0
  57. package/cjs/node_modules/@salt-ds/core/dist-es/utils/usePreventScroll.js.map +1 -0
  58. package/cjs/node_modules/@salt-ds/core/dist-es/viewport/ViewportProvider.js +35 -0
  59. package/cjs/node_modules/@salt-ds/core/dist-es/viewport/ViewportProvider.js.map +1 -0
  60. package/cjs/node_modules/@salt-ds/styles/dist-es/style-injection-provider/index.js +22 -0
  61. package/cjs/node_modules/@salt-ds/styles/dist-es/style-injection-provider/index.js.map +1 -0
  62. package/cjs/node_modules/@salt-ds/styles/dist-es/use-style-injection/InsertionPointProvider.js +16 -0
  63. package/cjs/node_modules/@salt-ds/styles/dist-es/use-style-injection/InsertionPointProvider.js.map +1 -0
  64. package/cjs/node_modules/@salt-ds/styles/dist-es/use-style-injection/useStyleInjection.js +75 -0
  65. package/cjs/node_modules/@salt-ds/styles/dist-es/use-style-injection/useStyleInjection.js.map +1 -0
  66. package/cjs/node_modules/@salt-ds/window/dist-es/WindowProvider.js +17 -0
  67. package/cjs/node_modules/@salt-ds/window/dist-es/WindowProvider.js.map +1 -0
  68. package/cjs/node_modules/tabbable/dist/index.esm.js +550 -0
  69. package/cjs/node_modules/tabbable/dist/index.esm.js.map +1 -0
  70. package/cjs/packages/vuu-utils/src/ThemeProvider.js +2 -2
  71. package/cjs/packages/vuu-utils/src/ThemeProvider.js.map +1 -1
  72. package/cjs/packages/vuu-utils/src/data-editing/EditButtons.js +23 -0
  73. package/cjs/packages/vuu-utils/src/data-editing/EditButtons.js.map +1 -0
  74. package/cjs/packages/vuu-utils/src/index.js +2 -0
  75. package/cjs/packages/vuu-utils/src/index.js.map +1 -1
  76. package/esm/node_modules/@floating-ui/dom/dist/floating-ui.dom.js +489 -0
  77. package/esm/node_modules/@floating-ui/dom/dist/floating-ui.dom.js.map +1 -0
  78. package/esm/node_modules/@floating-ui/react/dist/floating-ui.react.js +962 -0
  79. package/esm/node_modules/@floating-ui/react/dist/floating-ui.react.js.map +1 -0
  80. package/esm/node_modules/@floating-ui/react/dist/floating-ui.react.utils.js +114 -0
  81. package/esm/node_modules/@floating-ui/react/dist/floating-ui.react.utils.js.map +1 -0
  82. package/esm/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js +162 -0
  83. package/esm/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js.map +1 -0
  84. package/esm/node_modules/@floating-ui/utils/dist/floating-ui.utils.js +33 -0
  85. package/esm/node_modules/@floating-ui/utils/dist/floating-ui.utils.js.map +1 -0
  86. package/esm/node_modules/@salt-ds/core/dist-es/aria-announcer/AriaAnnouncerContext.js +8 -0
  87. package/esm/node_modules/@salt-ds/core/dist-es/aria-announcer/AriaAnnouncerContext.js.map +1 -0
  88. package/esm/node_modules/@salt-ds/core/dist-es/aria-announcer/AriaAnnouncerProvider.js +73 -0
  89. package/esm/node_modules/@salt-ds/core/dist-es/aria-announcer/AriaAnnouncerProvider.js.map +1 -0
  90. package/esm/node_modules/@salt-ds/core/dist-es/aria-announcer/useAriaAnnouncer.js +50 -0
  91. package/esm/node_modules/@salt-ds/core/dist-es/aria-announcer/useAriaAnnouncer.js.map +1 -0
  92. package/esm/node_modules/@salt-ds/core/dist-es/breakpoints/BreakpointProvider.js +56 -0
  93. package/esm/node_modules/@salt-ds/core/dist-es/breakpoints/BreakpointProvider.js.map +1 -0
  94. package/esm/node_modules/@salt-ds/core/dist-es/breakpoints/Breakpoints.js +10 -0
  95. package/esm/node_modules/@salt-ds/core/dist-es/breakpoints/Breakpoints.js.map +1 -0
  96. package/esm/node_modules/@salt-ds/core/dist-es/button/Button.css.js +4 -0
  97. package/esm/node_modules/@salt-ds/core/dist-es/button/Button.css.js.map +1 -0
  98. package/esm/node_modules/@salt-ds/core/dist-es/button/Button.js +94 -0
  99. package/esm/node_modules/@salt-ds/core/dist-es/button/Button.js.map +1 -0
  100. package/esm/node_modules/@salt-ds/core/dist-es/button/useButton.js +63 -0
  101. package/esm/node_modules/@salt-ds/core/dist-es/button/useButton.js.map +1 -0
  102. package/esm/node_modules/@salt-ds/core/dist-es/salt-provider/ProviderContext.js +9 -0
  103. package/esm/node_modules/@salt-ds/core/dist-es/salt-provider/ProviderContext.js.map +1 -0
  104. package/esm/node_modules/@salt-ds/core/dist-es/salt-provider/SaltProvider.css.js +4 -0
  105. package/esm/node_modules/@salt-ds/core/dist-es/salt-provider/SaltProvider.css.js.map +1 -0
  106. package/esm/node_modules/@salt-ds/core/dist-es/salt-provider/SaltProvider.js +151 -0
  107. package/esm/node_modules/@salt-ds/core/dist-es/salt-provider/SaltProvider.js.map +1 -0
  108. package/esm/node_modules/@salt-ds/core/dist-es/salt-provider/ThemeApplicator.js +113 -0
  109. package/esm/node_modules/@salt-ds/core/dist-es/salt-provider/ThemeApplicator.js.map +1 -0
  110. package/esm/node_modules/@salt-ds/core/dist-es/spinner/Spinner.css.js +4 -0
  111. package/esm/node_modules/@salt-ds/core/dist-es/spinner/Spinner.css.js.map +1 -0
  112. package/esm/node_modules/@salt-ds/core/dist-es/spinner/Spinner.js +84 -0
  113. package/esm/node_modules/@salt-ds/core/dist-es/spinner/Spinner.js.map +1 -0
  114. package/esm/node_modules/@salt-ds/core/dist-es/spinner/svgSpinners/SpinnerSVG.js +91 -0
  115. package/esm/node_modules/@salt-ds/core/dist-es/spinner/svgSpinners/SpinnerSVG.js.map +1 -0
  116. package/esm/node_modules/@salt-ds/core/dist-es/utils/createChainedFunction.js +18 -0
  117. package/esm/node_modules/@salt-ds/core/dist-es/utils/createChainedFunction.js.map +1 -0
  118. package/esm/node_modules/@salt-ds/core/dist-es/utils/createContext.js +12 -0
  119. package/esm/node_modules/@salt-ds/core/dist-es/utils/createContext.js.map +1 -0
  120. package/esm/node_modules/@salt-ds/core/dist-es/utils/debounce.js +20 -0
  121. package/esm/node_modules/@salt-ds/core/dist-es/utils/debounce.js.map +1 -0
  122. package/esm/node_modules/@salt-ds/core/dist-es/utils/makePrefixer.js +4 -0
  123. package/esm/node_modules/@salt-ds/core/dist-es/utils/makePrefixer.js.map +1 -0
  124. package/esm/node_modules/@salt-ds/core/dist-es/utils/useFloatingUI/useFloatingUI.js +50 -0
  125. package/esm/node_modules/@salt-ds/core/dist-es/utils/useFloatingUI/useFloatingUI.js.map +1 -0
  126. package/esm/node_modules/@salt-ds/core/dist-es/utils/useId.js +24 -0
  127. package/esm/node_modules/@salt-ds/core/dist-es/utils/useId.js.map +1 -0
  128. package/esm/node_modules/@salt-ds/core/dist-es/utils/useIsomorphicLayoutEffect.js +6 -0
  129. package/esm/node_modules/@salt-ds/core/dist-es/utils/useIsomorphicLayoutEffect.js.map +1 -0
  130. package/esm/node_modules/@salt-ds/core/dist-es/utils/usePreventScroll.js +231 -0
  131. package/esm/node_modules/@salt-ds/core/dist-es/utils/usePreventScroll.js.map +1 -0
  132. package/esm/node_modules/@salt-ds/core/dist-es/viewport/ViewportProvider.js +32 -0
  133. package/esm/node_modules/@salt-ds/core/dist-es/viewport/ViewportProvider.js.map +1 -0
  134. package/esm/node_modules/@salt-ds/styles/dist-es/style-injection-provider/index.js +19 -0
  135. package/esm/node_modules/@salt-ds/styles/dist-es/style-injection-provider/index.js.map +1 -0
  136. package/esm/node_modules/@salt-ds/styles/dist-es/use-style-injection/InsertionPointProvider.js +14 -0
  137. package/esm/node_modules/@salt-ds/styles/dist-es/use-style-injection/InsertionPointProvider.js.map +1 -0
  138. package/esm/node_modules/@salt-ds/styles/dist-es/use-style-injection/useStyleInjection.js +54 -0
  139. package/esm/node_modules/@salt-ds/styles/dist-es/use-style-injection/useStyleInjection.js.map +1 -0
  140. package/esm/node_modules/@salt-ds/window/dist-es/WindowProvider.js +15 -0
  141. package/esm/node_modules/@salt-ds/window/dist-es/WindowProvider.js.map +1 -0
  142. package/esm/node_modules/tabbable/dist/index.esm.js +546 -0
  143. package/esm/node_modules/tabbable/dist/index.esm.js.map +1 -0
  144. package/esm/packages/vuu-utils/src/ThemeProvider.js +2 -2
  145. package/esm/packages/vuu-utils/src/ThemeProvider.js.map +1 -1
  146. package/esm/packages/vuu-utils/src/context-definitions/WorkspaceContext.js +2 -2
  147. package/esm/packages/vuu-utils/src/context-definitions/WorkspaceContext.js.map +1 -1
  148. package/esm/packages/vuu-utils/src/data-editing/EditButtons.js +21 -0
  149. package/esm/packages/vuu-utils/src/data-editing/EditButtons.js.map +1 -0
  150. package/esm/packages/vuu-utils/src/feature-utils.js +2 -2
  151. package/esm/packages/vuu-utils/src/feature-utils.js.map +1 -1
  152. package/esm/packages/vuu-utils/src/index.js +1 -0
  153. package/esm/packages/vuu-utils/src/index.js.map +1 -1
  154. package/package.json +6 -6
  155. package/types/index.d.ts +1 -0
@@ -2,7 +2,7 @@
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var React = require('react');
5
- var cx = require('clsx');
5
+ var clsx = require('clsx');
6
6
 
7
7
  const DEFAULT_DENSITY = "medium";
8
8
  const DEFAULT_THEME = "salt-theme";
@@ -37,7 +37,7 @@ const useThemeAttributes = (themeAttributes) => {
37
37
  const createThemedChildren = (children, theme, themeMode, density) => {
38
38
  if (React.isValidElement(children)) {
39
39
  return React.cloneElement(children, {
40
- className: cx(
40
+ className: clsx(
41
41
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
42
42
  children.props?.className,
43
43
  `${theme}-theme`,
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeProvider.js","sources":["../../../../../../packages/vuu-utils/src/ThemeProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n HTMLAttributes,\n ReactNode,\n isValidElement,\n cloneElement,\n useContext,\n} from \"react\";\nimport cx from \"clsx\";\n\nexport const DEFAULT_DENSITY: Density = \"medium\";\nexport const DEFAULT_THEME = \"salt-theme\";\nexport const DEFAULT_THEME_MODE: ThemeMode = \"light\";\n\nexport type Density = \"high\" | \"medium\" | \"low\" | \"touch\";\nexport type ThemeMode = \"light\" | \"dark\";\nexport type TargetElement = \"root\" | \"scope\" | \"child\";\n\nexport interface ThemeContextProps {\n density: Density;\n theme: string;\n themeMode: ThemeMode;\n}\n\nexport const ThemeContext = createContext<ThemeContextProps>({\n density: \"high\",\n theme: \"vuu\",\n themeMode: \"light\",\n});\n\nexport type ThemeClasses = [string, string, ThemeMode];\n\nconst DEFAULT_THEME_ATTRIBUTES: ThemeClasses = [\n \"vuu\",\n \"salt-density-high\",\n \"light\" as ThemeMode,\n];\n\nexport type ThemeAttributes = {\n themeClass: string;\n densityClass: string;\n dataMode: ThemeMode;\n};\n\nexport const useThemeAttributes = (\n themeAttributes?: ThemeAttributes\n): [string, string, ThemeMode] => {\n const context = useContext(ThemeContext);\n if (themeAttributes) {\n return [\n themeAttributes.themeClass,\n themeAttributes.densityClass,\n themeAttributes.dataMode,\n ];\n } else if (context) {\n return [\n `${context.theme}-theme`,\n `salt-density-${context.density}`,\n context.themeMode,\n ];\n }\n return DEFAULT_THEME_ATTRIBUTES;\n};\n\nconst createThemedChildren = (\n children: ReactNode,\n theme: string,\n themeMode: ThemeMode,\n density: Density\n) => {\n if (isValidElement<HTMLAttributes<HTMLElement>>(children)) {\n return cloneElement(children, {\n className: cx(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n children.props?.className,\n `${theme}-theme`,\n `salt-density-${density}`\n ),\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n \"data-mode\": themeMode,\n });\n } else {\n console.warn(\n `\\nThemeProvider can only apply CSS classes for theming to a single nested child element of the ThemeProvider.\n Wrap elements with a single container`\n );\n return children;\n }\n};\n\ninterface ThemeProviderProps {\n applyThemeClasses?: boolean;\n children: ReactNode;\n density?: Density;\n theme?: string;\n themeMode?: ThemeMode;\n}\n\nexport const ThemeProvider = ({\n applyThemeClasses = false,\n children,\n theme: themeProp,\n themeMode: themeModeProp,\n density: densityProp,\n}: ThemeProviderProps) => {\n const {\n density: inheritedDensity,\n themeMode: inheritedThemeMode,\n theme: inheritedTheme,\n } = useContext(ThemeContext);\n const density = densityProp ?? inheritedDensity ?? DEFAULT_DENSITY;\n const themeMode = themeModeProp ?? inheritedThemeMode ?? DEFAULT_THEME_MODE;\n const theme = themeProp ?? inheritedTheme ?? DEFAULT_THEME;\n const themedChildren = applyThemeClasses\n ? createThemedChildren(children, theme, themeMode, density)\n : children;\n\n return (\n <ThemeContext.Provider value={{ themeMode, density, theme }}>\n {themedChildren}\n </ThemeContext.Provider>\n );\n};\n\nThemeProvider.displayName = \"ThemeProvider\";\n"],"names":["createContext","useContext","isValidElement","cloneElement","jsx"],"mappings":";;;;;;AAUO,MAAM,eAA2B,GAAA;AACjC,MAAM,aAAgB,GAAA;AACtB,MAAM,kBAAgC,GAAA;AAYtC,MAAM,eAAeA,mBAAiC,CAAA;AAAA,EAC3D,OAAS,EAAA,MAAA;AAAA,EACT,KAAO,EAAA,KAAA;AAAA,EACP,SAAW,EAAA;AACb,CAAC;AAID,MAAM,wBAAyC,GAAA;AAAA,EAC7C,KAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAA;AAQa,MAAA,kBAAA,GAAqB,CAChC,eACgC,KAAA;AAChC,EAAM,MAAA,OAAA,GAAUC,iBAAW,YAAY,CAAA;AACvC,EAAA,IAAI,eAAiB,EAAA;AACnB,IAAO,OAAA;AAAA,MACL,eAAgB,CAAA,UAAA;AAAA,MAChB,eAAgB,CAAA,YAAA;AAAA,MAChB,eAAgB,CAAA;AAAA,KAClB;AAAA,aACS,OAAS,EAAA;AAClB,IAAO,OAAA;AAAA,MACL,CAAA,EAAG,QAAQ,KAAK,CAAA,MAAA,CAAA;AAAA,MAChB,CAAA,aAAA,EAAgB,QAAQ,OAAO,CAAA,CAAA;AAAA,MAC/B,OAAQ,CAAA;AAAA,KACV;AAAA;AAEF,EAAO,OAAA,wBAAA;AACT;AAEA,MAAM,oBAAuB,GAAA,CAC3B,QACA,EAAA,KAAA,EACA,WACA,OACG,KAAA;AACH,EAAI,IAAAC,oBAAA,CAA4C,QAAQ,CAAG,EAAA;AACzD,IAAA,OAAOC,mBAAa,QAAU,EAAA;AAAA,MAC5B,SAAW,EAAA,EAAA;AAAA;AAAA,QAET,SAAS,KAAO,EAAA,SAAA;AAAA,QAChB,GAAG,KAAK,CAAA,MAAA,CAAA;AAAA,QACR,gBAAgB,OAAO,CAAA;AAAA,OACzB;AAAA;AAAA;AAAA,MAGA,WAAa,EAAA;AAAA,KACd,CAAA;AAAA,GACI,MAAA;AACL,IAAQ,OAAA,CAAA,IAAA;AAAA,MACN;AAAA;AAAA,iDAAA;AAAA,KAEF;AACA,IAAO,OAAA,QAAA;AAAA;AAEX,CAAA;AAUO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,iBAAoB,GAAA,KAAA;AAAA,EACpB,QAAA;AAAA,EACA,KAAO,EAAA,SAAA;AAAA,EACP,SAAW,EAAA,aAAA;AAAA,EACX,OAAS,EAAA;AACX,CAA0B,KAAA;AACxB,EAAM,MAAA;AAAA,IACJ,OAAS,EAAA,gBAAA;AAAA,IACT,SAAW,EAAA,kBAAA;AAAA,IACX,KAAO,EAAA;AAAA,GACT,GAAIF,iBAAW,YAAY,CAAA;AAC3B,EAAM,MAAA,OAAA,GAAU,eAAe,gBAAoB,IAAA,eAAA;AACnD,EAAM,MAAA,SAAA,GAAY,iBAAiB,kBAAsB,IAAA,kBAAA;AACzD,EAAM,MAAA,KAAA,GAAQ,aAAa,cAAkB,IAAA,aAAA;AAC7C,EAAA,MAAM,iBAAiB,iBACnB,GAAA,oBAAA,CAAqB,UAAU,KAAO,EAAA,SAAA,EAAW,OAAO,CACxD,GAAA,QAAA;AAEJ,EACE,uBAAAG,cAAA,CAAC,YAAa,CAAA,QAAA,EAAb,EAAsB,KAAA,EAAO,EAAE,SAAW,EAAA,OAAA,EAAS,KAAM,EAAA,EACvD,QACH,EAAA,cAAA,EAAA,CAAA;AAEJ;AAEA,aAAA,CAAc,WAAc,GAAA,eAAA;;;;;;;;;"}
1
+ {"version":3,"file":"ThemeProvider.js","sources":["../../../../../../packages/vuu-utils/src/ThemeProvider.tsx"],"sourcesContent":["import React, {\n createContext,\n HTMLAttributes,\n ReactNode,\n isValidElement,\n cloneElement,\n useContext,\n} from \"react\";\nimport cx from \"clsx\";\n\nexport const DEFAULT_DENSITY: Density = \"medium\";\nexport const DEFAULT_THEME = \"salt-theme\";\nexport const DEFAULT_THEME_MODE: ThemeMode = \"light\";\n\nexport type Density = \"high\" | \"medium\" | \"low\" | \"touch\";\nexport type ThemeMode = \"light\" | \"dark\";\nexport type TargetElement = \"root\" | \"scope\" | \"child\";\n\nexport interface ThemeContextProps {\n density: Density;\n theme: string;\n themeMode: ThemeMode;\n}\n\nexport const ThemeContext = createContext<ThemeContextProps>({\n density: \"high\",\n theme: \"vuu\",\n themeMode: \"light\",\n});\n\nexport type ThemeClasses = [string, string, ThemeMode];\n\nconst DEFAULT_THEME_ATTRIBUTES: ThemeClasses = [\n \"vuu\",\n \"salt-density-high\",\n \"light\" as ThemeMode,\n];\n\nexport type ThemeAttributes = {\n themeClass: string;\n densityClass: string;\n dataMode: ThemeMode;\n};\n\nexport const useThemeAttributes = (\n themeAttributes?: ThemeAttributes\n): [string, string, ThemeMode] => {\n const context = useContext(ThemeContext);\n if (themeAttributes) {\n return [\n themeAttributes.themeClass,\n themeAttributes.densityClass,\n themeAttributes.dataMode,\n ];\n } else if (context) {\n return [\n `${context.theme}-theme`,\n `salt-density-${context.density}`,\n context.themeMode,\n ];\n }\n return DEFAULT_THEME_ATTRIBUTES;\n};\n\nconst createThemedChildren = (\n children: ReactNode,\n theme: string,\n themeMode: ThemeMode,\n density: Density\n) => {\n if (isValidElement<HTMLAttributes<HTMLElement>>(children)) {\n return cloneElement(children, {\n className: cx(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n children.props?.className,\n `${theme}-theme`,\n `salt-density-${density}`\n ),\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n \"data-mode\": themeMode,\n });\n } else {\n console.warn(\n `\\nThemeProvider can only apply CSS classes for theming to a single nested child element of the ThemeProvider.\n Wrap elements with a single container`\n );\n return children;\n }\n};\n\ninterface ThemeProviderProps {\n applyThemeClasses?: boolean;\n children: ReactNode;\n density?: Density;\n theme?: string;\n themeMode?: ThemeMode;\n}\n\nexport const ThemeProvider = ({\n applyThemeClasses = false,\n children,\n theme: themeProp,\n themeMode: themeModeProp,\n density: densityProp,\n}: ThemeProviderProps) => {\n const {\n density: inheritedDensity,\n themeMode: inheritedThemeMode,\n theme: inheritedTheme,\n } = useContext(ThemeContext);\n const density = densityProp ?? inheritedDensity ?? DEFAULT_DENSITY;\n const themeMode = themeModeProp ?? inheritedThemeMode ?? DEFAULT_THEME_MODE;\n const theme = themeProp ?? inheritedTheme ?? DEFAULT_THEME;\n const themedChildren = applyThemeClasses\n ? createThemedChildren(children, theme, themeMode, density)\n : children;\n\n return (\n <ThemeContext.Provider value={{ themeMode, density, theme }}>\n {themedChildren}\n </ThemeContext.Provider>\n );\n};\n\nThemeProvider.displayName = \"ThemeProvider\";\n"],"names":["createContext","useContext","isValidElement","cloneElement","cx","jsx"],"mappings":";;;;;;AAUO,MAAM,eAA2B,GAAA;AACjC,MAAM,aAAgB,GAAA;AACtB,MAAM,kBAAgC,GAAA;AAYtC,MAAM,eAAeA,mBAAiC,CAAA;AAAA,EAC3D,OAAS,EAAA,MAAA;AAAA,EACT,KAAO,EAAA,KAAA;AAAA,EACP,SAAW,EAAA;AACb,CAAC;AAID,MAAM,wBAAyC,GAAA;AAAA,EAC7C,KAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAA;AAQa,MAAA,kBAAA,GAAqB,CAChC,eACgC,KAAA;AAChC,EAAM,MAAA,OAAA,GAAUC,iBAAW,YAAY,CAAA;AACvC,EAAA,IAAI,eAAiB,EAAA;AACnB,IAAO,OAAA;AAAA,MACL,eAAgB,CAAA,UAAA;AAAA,MAChB,eAAgB,CAAA,YAAA;AAAA,MAChB,eAAgB,CAAA;AAAA,KAClB;AAAA,aACS,OAAS,EAAA;AAClB,IAAO,OAAA;AAAA,MACL,CAAA,EAAG,QAAQ,KAAK,CAAA,MAAA,CAAA;AAAA,MAChB,CAAA,aAAA,EAAgB,QAAQ,OAAO,CAAA,CAAA;AAAA,MAC/B,OAAQ,CAAA;AAAA,KACV;AAAA;AAEF,EAAO,OAAA,wBAAA;AACT;AAEA,MAAM,oBAAuB,GAAA,CAC3B,QACA,EAAA,KAAA,EACA,WACA,OACG,KAAA;AACH,EAAI,IAAAC,oBAAA,CAA4C,QAAQ,CAAG,EAAA;AACzD,IAAA,OAAOC,mBAAa,QAAU,EAAA;AAAA,MAC5B,SAAW,EAAAC,IAAA;AAAA;AAAA,QAET,SAAS,KAAO,EAAA,SAAA;AAAA,QAChB,GAAG,KAAK,CAAA,MAAA,CAAA;AAAA,QACR,gBAAgB,OAAO,CAAA;AAAA,OACzB;AAAA;AAAA;AAAA,MAGA,WAAa,EAAA;AAAA,KACd,CAAA;AAAA,GACI,MAAA;AACL,IAAQ,OAAA,CAAA,IAAA;AAAA,MACN;AAAA;AAAA,iDAAA;AAAA,KAEF;AACA,IAAO,OAAA,QAAA;AAAA;AAEX,CAAA;AAUO,MAAM,gBAAgB,CAAC;AAAA,EAC5B,iBAAoB,GAAA,KAAA;AAAA,EACpB,QAAA;AAAA,EACA,KAAO,EAAA,SAAA;AAAA,EACP,SAAW,EAAA,aAAA;AAAA,EACX,OAAS,EAAA;AACX,CAA0B,KAAA;AACxB,EAAM,MAAA;AAAA,IACJ,OAAS,EAAA,gBAAA;AAAA,IACT,SAAW,EAAA,kBAAA;AAAA,IACX,KAAO,EAAA;AAAA,GACT,GAAIH,iBAAW,YAAY,CAAA;AAC3B,EAAM,MAAA,OAAA,GAAU,eAAe,gBAAoB,IAAA,eAAA;AACnD,EAAM,MAAA,SAAA,GAAY,iBAAiB,kBAAsB,IAAA,kBAAA;AACzD,EAAM,MAAA,KAAA,GAAQ,aAAa,cAAkB,IAAA,aAAA;AAC7C,EAAA,MAAM,iBAAiB,iBACnB,GAAA,oBAAA,CAAqB,UAAU,KAAO,EAAA,SAAA,EAAW,OAAO,CACxD,GAAA,QAAA;AAEJ,EACE,uBAAAI,cAAA,CAAC,YAAa,CAAA,QAAA,EAAb,EAAsB,KAAA,EAAO,EAAE,SAAW,EAAA,OAAA,EAAS,KAAM,EAAA,EACvD,QACH,EAAA,cAAA,EAAA,CAAA;AAEJ;AAEA,aAAA,CAAc,WAAc,GAAA,eAAA;;;;;;;;;"}
@@ -0,0 +1,23 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var Button = require('../../../../node_modules/@salt-ds/core/dist-es/button/Button.js');
6
+
7
+ const EditButtons = ({
8
+ editTracker,
9
+ onCancel,
10
+ onSave
11
+ }) => {
12
+ const [editState, setEditState] = React.useState("clean");
13
+ React.useMemo(() => {
14
+ editTracker?.on("editState", setEditState);
15
+ }, [editTracker]);
16
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
17
+ /* @__PURE__ */ jsxRuntime.jsx(Button.Button, { disabled: editState === "clean", onClick: onSave, children: "Save" }),
18
+ /* @__PURE__ */ jsxRuntime.jsx(Button.Button, { onClick: onCancel, children: "Cancel" })
19
+ ] });
20
+ };
21
+
22
+ exports.EditButtons = EditButtons;
23
+ //# sourceMappingURL=EditButtons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditButtons.js","sources":["../../../../../../../packages/vuu-utils/src/data-editing/EditButtons.tsx"],"sourcesContent":["import { Button } from \"@salt-ds/core\";\nimport { EditState, EditTracker } from \"./EditTracker\";\nimport { useMemo, useState } from \"react\";\n\nexport interface EditButtonProps {\n editTracker?: EditTracker;\n onCancel: () => void;\n onSave: () => void;\n}\n\nexport const EditButtons = ({\n editTracker,\n onCancel,\n onSave,\n}: EditButtonProps) => {\n const [editState, setEditState] = useState<EditState>(\"clean\");\n\n useMemo(() => {\n editTracker?.on(\"editState\", setEditState);\n }, [editTracker]);\n\n return (\n <>\n <Button disabled={editState === \"clean\"} onClick={onSave}>\n Save\n </Button>\n <Button onClick={onCancel}>Cancel</Button>\n </>\n );\n};\n"],"names":["useState","useMemo","jsxs","Fragment","jsx","Button"],"mappings":";;;;;;AAUO,MAAM,cAAc,CAAC;AAAA,EAC1B,WAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAuB,KAAA;AACrB,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAoB,OAAO,CAAA;AAE7D,EAAAC,aAAA,CAAQ,MAAM;AACZ,IAAa,WAAA,EAAA,EAAA,CAAG,aAAa,YAAY,CAAA;AAAA,GAC3C,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,uBAEIC,eAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAACC,iBAAO,QAAU,EAAA,SAAA,KAAc,OAAS,EAAA,OAAA,EAAS,QAAQ,QAE1D,EAAA,MAAA,EAAA,CAAA;AAAA,oBACCD,cAAA,CAAAC,aAAA,EAAA,EAAO,OAAS,EAAA,QAAA,EAAU,QAAM,EAAA,QAAA,EAAA;AAAA,GACnC,EAAA,CAAA;AAEJ;;;;"}
@@ -12,6 +12,7 @@ var commonTypes = require('./common-types.js');
12
12
  var componentRegistry = require('./component-registry.js');
13
13
  var cookieUtils = require('./cookie-utils.js');
14
14
  var cssUtils = require('./css-utils.js');
15
+ var EditButtons = require('./data-editing/EditButtons.js');
15
16
  var DataEditingProvider = require('./data-editing/DataEditingProvider.js');
16
17
  var EditTracker = require('./data-editing/EditTracker.js');
17
18
  var useEditableTable = require('./data-editing/useEditableTable.js');
@@ -201,6 +202,7 @@ exports.registerConfigurationEditor = componentRegistry.registerConfigurationEdi
201
202
  exports.getCookieValue = cookieUtils.getCookieValue;
202
203
  exports.setCookieValue = cookieUtils.setCookieValue;
203
204
  exports.importCSS = cssUtils.importCSS;
205
+ exports.EditButtons = EditButtons.EditButtons;
204
206
  exports.DataEditingProvider = DataEditingProvider.DataEditingProvider;
205
207
  exports.useEditTracker = DataEditingProvider.useEditTracker;
206
208
  exports.EditTracker = EditTracker.EditTracker;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,489 @@
1
+ import { createCoords, round, max, min, rectToClientRect } from '../../utils/dist/floating-ui.utils.js';
2
+ import { getDocumentElement, isElement, isHTMLElement, isTopLayer, getNodeName, isOverflowElement, getNodeScroll, getWindow, getParentNode, isLastTraversableNode, isTableElement, isContainingBlock, getContainingBlock, getComputedStyle, getFrameElement, getOverflowAncestors, isWebKit } from '../../utils/dist/floating-ui.utils.dom.js';
3
+
4
+ function getCssDimensions(element) {
5
+ const css = getComputedStyle(element);
6
+ // In testing environments, the `width` and `height` properties are empty
7
+ // strings for SVG elements, returning NaN. Fallback to `0` in this case.
8
+ let width = parseFloat(css.width) || 0;
9
+ let height = parseFloat(css.height) || 0;
10
+ const hasOffset = isHTMLElement(element);
11
+ const offsetWidth = hasOffset ? element.offsetWidth : width;
12
+ const offsetHeight = hasOffset ? element.offsetHeight : height;
13
+ const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;
14
+ if (shouldFallback) {
15
+ width = offsetWidth;
16
+ height = offsetHeight;
17
+ }
18
+ return {
19
+ width,
20
+ height,
21
+ $: shouldFallback
22
+ };
23
+ }
24
+
25
+ function unwrapElement(element) {
26
+ return !isElement(element) ? element.contextElement : element;
27
+ }
28
+
29
+ function getScale(element) {
30
+ const domElement = unwrapElement(element);
31
+ if (!isHTMLElement(domElement)) {
32
+ return createCoords(1);
33
+ }
34
+ const rect = domElement.getBoundingClientRect();
35
+ const {
36
+ width,
37
+ height,
38
+ $
39
+ } = getCssDimensions(domElement);
40
+ let x = ($ ? round(rect.width) : rect.width) / width;
41
+ let y = ($ ? round(rect.height) : rect.height) / height;
42
+
43
+ // 0, NaN, or Infinity should always fallback to 1.
44
+
45
+ if (!x || !Number.isFinite(x)) {
46
+ x = 1;
47
+ }
48
+ if (!y || !Number.isFinite(y)) {
49
+ y = 1;
50
+ }
51
+ return {
52
+ x,
53
+ y
54
+ };
55
+ }
56
+
57
+ const noOffsets = /*#__PURE__*/createCoords(0);
58
+ function getVisualOffsets(element) {
59
+ const win = getWindow(element);
60
+ if (!isWebKit() || !win.visualViewport) {
61
+ return noOffsets;
62
+ }
63
+ return {
64
+ x: win.visualViewport.offsetLeft,
65
+ y: win.visualViewport.offsetTop
66
+ };
67
+ }
68
+ function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {
69
+ if (isFixed === void 0) {
70
+ isFixed = false;
71
+ }
72
+ if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {
73
+ return false;
74
+ }
75
+ return isFixed;
76
+ }
77
+
78
+ function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {
79
+ if (includeScale === void 0) {
80
+ includeScale = false;
81
+ }
82
+ if (isFixedStrategy === void 0) {
83
+ isFixedStrategy = false;
84
+ }
85
+ const clientRect = element.getBoundingClientRect();
86
+ const domElement = unwrapElement(element);
87
+ let scale = createCoords(1);
88
+ if (includeScale) {
89
+ if (offsetParent) {
90
+ if (isElement(offsetParent)) {
91
+ scale = getScale(offsetParent);
92
+ }
93
+ } else {
94
+ scale = getScale(element);
95
+ }
96
+ }
97
+ const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);
98
+ let x = (clientRect.left + visualOffsets.x) / scale.x;
99
+ let y = (clientRect.top + visualOffsets.y) / scale.y;
100
+ let width = clientRect.width / scale.x;
101
+ let height = clientRect.height / scale.y;
102
+ if (domElement) {
103
+ const win = getWindow(domElement);
104
+ const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;
105
+ let currentWin = win;
106
+ let currentIFrame = getFrameElement(currentWin);
107
+ while (currentIFrame && offsetParent && offsetWin !== currentWin) {
108
+ const iframeScale = getScale(currentIFrame);
109
+ const iframeRect = currentIFrame.getBoundingClientRect();
110
+ const css = getComputedStyle(currentIFrame);
111
+ const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;
112
+ const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;
113
+ x *= iframeScale.x;
114
+ y *= iframeScale.y;
115
+ width *= iframeScale.x;
116
+ height *= iframeScale.y;
117
+ x += left;
118
+ y += top;
119
+ currentWin = getWindow(currentIFrame);
120
+ currentIFrame = getFrameElement(currentWin);
121
+ }
122
+ }
123
+ return rectToClientRect({
124
+ width,
125
+ height,
126
+ x,
127
+ y
128
+ });
129
+ }
130
+
131
+ // If <html> has a CSS width greater than the viewport, then this will be
132
+ // incorrect for RTL.
133
+ function getWindowScrollBarX(element, rect) {
134
+ const leftScroll = getNodeScroll(element).scrollLeft;
135
+ if (!rect) {
136
+ return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;
137
+ }
138
+ return rect.left + leftScroll;
139
+ }
140
+
141
+ function getHTMLOffset(documentElement, scroll, ignoreScrollbarX) {
142
+ if (ignoreScrollbarX === void 0) {
143
+ ignoreScrollbarX = false;
144
+ }
145
+ const htmlRect = documentElement.getBoundingClientRect();
146
+ const x = htmlRect.left + scroll.scrollLeft - (ignoreScrollbarX ? 0 :
147
+ // RTL <body> scrollbar.
148
+ getWindowScrollBarX(documentElement, htmlRect));
149
+ const y = htmlRect.top + scroll.scrollTop;
150
+ return {
151
+ x,
152
+ y
153
+ };
154
+ }
155
+
156
+ function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
157
+ let {
158
+ elements,
159
+ rect,
160
+ offsetParent,
161
+ strategy
162
+ } = _ref;
163
+ const isFixed = strategy === 'fixed';
164
+ const documentElement = getDocumentElement(offsetParent);
165
+ const topLayer = elements ? isTopLayer(elements.floating) : false;
166
+ if (offsetParent === documentElement || topLayer && isFixed) {
167
+ return rect;
168
+ }
169
+ let scroll = {
170
+ scrollLeft: 0,
171
+ scrollTop: 0
172
+ };
173
+ let scale = createCoords(1);
174
+ const offsets = createCoords(0);
175
+ const isOffsetParentAnElement = isHTMLElement(offsetParent);
176
+ if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
177
+ if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {
178
+ scroll = getNodeScroll(offsetParent);
179
+ }
180
+ if (isHTMLElement(offsetParent)) {
181
+ const offsetRect = getBoundingClientRect(offsetParent);
182
+ scale = getScale(offsetParent);
183
+ offsets.x = offsetRect.x + offsetParent.clientLeft;
184
+ offsets.y = offsetRect.y + offsetParent.clientTop;
185
+ }
186
+ }
187
+ const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll, true) : createCoords(0);
188
+ return {
189
+ width: rect.width * scale.x,
190
+ height: rect.height * scale.y,
191
+ x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,
192
+ y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y
193
+ };
194
+ }
195
+
196
+ function getClientRects(element) {
197
+ return Array.from(element.getClientRects());
198
+ }
199
+
200
+ // Gets the entire size of the scrollable document area, even extending outside
201
+ // of the `<html>` and `<body>` rect bounds if horizontally scrollable.
202
+ function getDocumentRect(element) {
203
+ const html = getDocumentElement(element);
204
+ const scroll = getNodeScroll(element);
205
+ const body = element.ownerDocument.body;
206
+ const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);
207
+ const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);
208
+ let x = -scroll.scrollLeft + getWindowScrollBarX(element);
209
+ const y = -scroll.scrollTop;
210
+ if (getComputedStyle(body).direction === 'rtl') {
211
+ x += max(html.clientWidth, body.clientWidth) - width;
212
+ }
213
+ return {
214
+ width,
215
+ height,
216
+ x,
217
+ y
218
+ };
219
+ }
220
+
221
+ function getViewportRect(element, strategy) {
222
+ const win = getWindow(element);
223
+ const html = getDocumentElement(element);
224
+ const visualViewport = win.visualViewport;
225
+ let width = html.clientWidth;
226
+ let height = html.clientHeight;
227
+ let x = 0;
228
+ let y = 0;
229
+ if (visualViewport) {
230
+ width = visualViewport.width;
231
+ height = visualViewport.height;
232
+ const visualViewportBased = isWebKit();
233
+ if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {
234
+ x = visualViewport.offsetLeft;
235
+ y = visualViewport.offsetTop;
236
+ }
237
+ }
238
+ return {
239
+ width,
240
+ height,
241
+ x,
242
+ y
243
+ };
244
+ }
245
+
246
+ const absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);
247
+ // Returns the inner client rect, subtracting scrollbars if present.
248
+ function getInnerBoundingClientRect(element, strategy) {
249
+ const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');
250
+ const top = clientRect.top + element.clientTop;
251
+ const left = clientRect.left + element.clientLeft;
252
+ const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);
253
+ const width = element.clientWidth * scale.x;
254
+ const height = element.clientHeight * scale.y;
255
+ const x = left * scale.x;
256
+ const y = top * scale.y;
257
+ return {
258
+ width,
259
+ height,
260
+ x,
261
+ y
262
+ };
263
+ }
264
+ function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {
265
+ let rect;
266
+ if (clippingAncestor === 'viewport') {
267
+ rect = getViewportRect(element, strategy);
268
+ } else if (clippingAncestor === 'document') {
269
+ rect = getDocumentRect(getDocumentElement(element));
270
+ } else if (isElement(clippingAncestor)) {
271
+ rect = getInnerBoundingClientRect(clippingAncestor, strategy);
272
+ } else {
273
+ const visualOffsets = getVisualOffsets(element);
274
+ rect = {
275
+ x: clippingAncestor.x - visualOffsets.x,
276
+ y: clippingAncestor.y - visualOffsets.y,
277
+ width: clippingAncestor.width,
278
+ height: clippingAncestor.height
279
+ };
280
+ }
281
+ return rectToClientRect(rect);
282
+ }
283
+ function hasFixedPositionAncestor(element, stopNode) {
284
+ const parentNode = getParentNode(element);
285
+ if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {
286
+ return false;
287
+ }
288
+ return getComputedStyle(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);
289
+ }
290
+
291
+ // A "clipping ancestor" is an `overflow` element with the characteristic of
292
+ // clipping (or hiding) child elements. This returns all clipping ancestors
293
+ // of the given element up the tree.
294
+ function getClippingElementAncestors(element, cache) {
295
+ const cachedResult = cache.get(element);
296
+ if (cachedResult) {
297
+ return cachedResult;
298
+ }
299
+ let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');
300
+ let currentContainingBlockComputedStyle = null;
301
+ const elementIsFixed = getComputedStyle(element).position === 'fixed';
302
+ let currentNode = elementIsFixed ? getParentNode(element) : element;
303
+
304
+ // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
305
+ while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {
306
+ const computedStyle = getComputedStyle(currentNode);
307
+ const currentNodeIsContaining = isContainingBlock(currentNode);
308
+ if (!currentNodeIsContaining && computedStyle.position === 'fixed') {
309
+ currentContainingBlockComputedStyle = null;
310
+ }
311
+ const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);
312
+ if (shouldDropCurrentNode) {
313
+ // Drop non-containing blocks.
314
+ result = result.filter(ancestor => ancestor !== currentNode);
315
+ } else {
316
+ // Record last containing block for next iteration.
317
+ currentContainingBlockComputedStyle = computedStyle;
318
+ }
319
+ currentNode = getParentNode(currentNode);
320
+ }
321
+ cache.set(element, result);
322
+ return result;
323
+ }
324
+
325
+ // Gets the maximum area that the element is visible in due to any number of
326
+ // clipping ancestors.
327
+ function getClippingRect(_ref) {
328
+ let {
329
+ element,
330
+ boundary,
331
+ rootBoundary,
332
+ strategy
333
+ } = _ref;
334
+ const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);
335
+ const clippingAncestors = [...elementClippingAncestors, rootBoundary];
336
+ const firstClippingAncestor = clippingAncestors[0];
337
+ const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {
338
+ const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);
339
+ accRect.top = max(rect.top, accRect.top);
340
+ accRect.right = min(rect.right, accRect.right);
341
+ accRect.bottom = min(rect.bottom, accRect.bottom);
342
+ accRect.left = max(rect.left, accRect.left);
343
+ return accRect;
344
+ }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));
345
+ return {
346
+ width: clippingRect.right - clippingRect.left,
347
+ height: clippingRect.bottom - clippingRect.top,
348
+ x: clippingRect.left,
349
+ y: clippingRect.top
350
+ };
351
+ }
352
+
353
+ function getDimensions(element) {
354
+ const {
355
+ width,
356
+ height
357
+ } = getCssDimensions(element);
358
+ return {
359
+ width,
360
+ height
361
+ };
362
+ }
363
+
364
+ function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
365
+ const isOffsetParentAnElement = isHTMLElement(offsetParent);
366
+ const documentElement = getDocumentElement(offsetParent);
367
+ const isFixed = strategy === 'fixed';
368
+ const rect = getBoundingClientRect(element, true, isFixed, offsetParent);
369
+ let scroll = {
370
+ scrollLeft: 0,
371
+ scrollTop: 0
372
+ };
373
+ const offsets = createCoords(0);
374
+
375
+ // If the <body> scrollbar appears on the left (e.g. RTL systems). Use
376
+ // Firefox with layout.scrollbar.side = 3 in about:config to test this.
377
+ function setLeftRTLScrollbarOffset() {
378
+ offsets.x = getWindowScrollBarX(documentElement);
379
+ }
380
+ if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {
381
+ if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {
382
+ scroll = getNodeScroll(offsetParent);
383
+ }
384
+ if (isOffsetParentAnElement) {
385
+ const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);
386
+ offsets.x = offsetRect.x + offsetParent.clientLeft;
387
+ offsets.y = offsetRect.y + offsetParent.clientTop;
388
+ } else if (documentElement) {
389
+ setLeftRTLScrollbarOffset();
390
+ }
391
+ }
392
+ if (isFixed && !isOffsetParentAnElement && documentElement) {
393
+ setLeftRTLScrollbarOffset();
394
+ }
395
+ const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
396
+ const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;
397
+ const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;
398
+ return {
399
+ x,
400
+ y,
401
+ width: rect.width,
402
+ height: rect.height
403
+ };
404
+ }
405
+
406
+ function isStaticPositioned(element) {
407
+ return getComputedStyle(element).position === 'static';
408
+ }
409
+
410
+ function getTrueOffsetParent(element, polyfill) {
411
+ if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {
412
+ return null;
413
+ }
414
+ if (polyfill) {
415
+ return polyfill(element);
416
+ }
417
+ let rawOffsetParent = element.offsetParent;
418
+
419
+ // Firefox returns the <html> element as the offsetParent if it's non-static,
420
+ // while Chrome and Safari return the <body> element. The <body> element must
421
+ // be used to perform the correct calculations even if the <html> element is
422
+ // non-static.
423
+ if (getDocumentElement(element) === rawOffsetParent) {
424
+ rawOffsetParent = rawOffsetParent.ownerDocument.body;
425
+ }
426
+ return rawOffsetParent;
427
+ }
428
+
429
+ // Gets the closest ancestor positioned element. Handles some edge cases,
430
+ // such as table ancestors and cross browser bugs.
431
+ function getOffsetParent(element, polyfill) {
432
+ const win = getWindow(element);
433
+ if (isTopLayer(element)) {
434
+ return win;
435
+ }
436
+ if (!isHTMLElement(element)) {
437
+ let svgOffsetParent = getParentNode(element);
438
+ while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {
439
+ if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {
440
+ return svgOffsetParent;
441
+ }
442
+ svgOffsetParent = getParentNode(svgOffsetParent);
443
+ }
444
+ return win;
445
+ }
446
+ let offsetParent = getTrueOffsetParent(element, polyfill);
447
+ while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {
448
+ offsetParent = getTrueOffsetParent(offsetParent, polyfill);
449
+ }
450
+ if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {
451
+ return win;
452
+ }
453
+ return offsetParent || getContainingBlock(element) || win;
454
+ }
455
+
456
+ const getElementRects = async function (data) {
457
+ const getOffsetParentFn = this.getOffsetParent || getOffsetParent;
458
+ const getDimensionsFn = this.getDimensions;
459
+ const floatingDimensions = await getDimensionsFn(data.floating);
460
+ return {
461
+ reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),
462
+ floating: {
463
+ x: 0,
464
+ y: 0,
465
+ width: floatingDimensions.width,
466
+ height: floatingDimensions.height
467
+ }
468
+ };
469
+ };
470
+
471
+ function isRTL(element) {
472
+ return getComputedStyle(element).direction === 'rtl';
473
+ }
474
+
475
+ const platform = {
476
+ convertOffsetParentRelativeRectToViewportRelativeRect,
477
+ getDocumentElement,
478
+ getClippingRect,
479
+ getOffsetParent,
480
+ getElementRects,
481
+ getClientRects,
482
+ getDimensions,
483
+ getScale,
484
+ isElement,
485
+ isRTL
486
+ };
487
+
488
+ export { getOverflowAncestors, platform };
489
+ //# sourceMappingURL=floating-ui.dom.js.map