@channel.io/bezier-react 2.0.0-alpha.14 → 2.0.0-alpha.16

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 (103) hide show
  1. package/README.md +32 -13
  2. package/dist/cjs/components/Checkbox/Checkbox.js +9 -2
  3. package/dist/cjs/components/Checkbox/Checkbox.js.map +1 -1
  4. package/dist/cjs/components/Overlay/Overlay.js +4 -1
  5. package/dist/cjs/components/Overlay/Overlay.js.map +1 -1
  6. package/dist/cjs/components/Tabs/Tabs.js +1 -1
  7. package/dist/cjs/components/Tabs/Tabs.js.map +1 -1
  8. package/dist/cjs/components/Toast/Toast.js.map +1 -1
  9. package/dist/cjs/components/Toast/ToastService.js +0 -1
  10. package/dist/cjs/components/Toast/ToastService.js.map +1 -1
  11. package/dist/cjs/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js.map +1 -0
  12. package/dist/cjs/node_modules/@floating-ui/core/dist/floating-ui.core.js +102 -190
  13. package/dist/cjs/node_modules/@floating-ui/core/dist/floating-ui.core.js.map +1 -1
  14. package/dist/cjs/node_modules/@floating-ui/dom/dist/floating-ui.dom.js +250 -280
  15. package/dist/cjs/node_modules/@floating-ui/dom/dist/floating-ui.dom.js.map +1 -1
  16. package/dist/cjs/node_modules/@floating-ui/react-dom/dist/{floating-ui.react-dom.esm.js → floating-ui.react-dom.js} +26 -23
  17. package/dist/cjs/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.js.map +1 -0
  18. package/dist/cjs/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js +148 -0
  19. package/dist/cjs/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.js.map +1 -0
  20. package/dist/cjs/node_modules/@floating-ui/utils/dist/floating-ui.utils.js +151 -0
  21. package/dist/cjs/node_modules/@floating-ui/utils/dist/floating-ui.utils.js.map +1 -0
  22. package/dist/cjs/node_modules/@radix-ui/react-popper/dist/index.js +8 -8
  23. package/dist/cjs/node_modules/aria-hidden/dist/es2015/index.js.map +1 -1
  24. package/dist/cjs/node_modules/classnames/index.js +34 -23
  25. package/dist/cjs/node_modules/classnames/index.js.map +1 -1
  26. package/dist/cjs/node_modules/get-nonce/dist/es2015/index.js +0 -4
  27. package/dist/cjs/node_modules/get-nonce/dist/es2015/index.js.map +1 -1
  28. package/dist/cjs/node_modules/react-remove-scroll/dist/es2015/SideEffect.js +0 -1
  29. package/dist/cjs/node_modules/react-remove-scroll/dist/es2015/SideEffect.js.map +1 -1
  30. package/dist/cjs/node_modules/react-remove-scroll/dist/es2015/UI.js +4 -4
  31. package/dist/cjs/node_modules/react-remove-scroll/dist/es2015/UI.js.map +1 -1
  32. package/dist/cjs/node_modules/react-remove-scroll-bar/dist/es2015/component.js +9 -1
  33. package/dist/cjs/node_modules/react-remove-scroll-bar/dist/es2015/component.js.map +1 -1
  34. package/dist/cjs/node_modules/react-textarea-autosize/dist/react-textarea-autosize.esm.js +2 -2
  35. package/dist/cjs/node_modules/tslib/tslib.es6.js +18 -14
  36. package/dist/cjs/node_modules/tslib/tslib.es6.js.map +1 -1
  37. package/dist/cjs/node_modules/use-callback-ref/dist/es2015/useMergeRef.js +43 -1
  38. package/dist/cjs/node_modules/use-callback-ref/dist/es2015/useMergeRef.js.map +1 -1
  39. package/dist/cjs/styles.css +1 -1
  40. package/dist/esm/components/Checkbox/Checkbox.mjs +9 -2
  41. package/dist/esm/components/Checkbox/Checkbox.mjs.map +1 -1
  42. package/dist/esm/components/Overlay/Overlay.mjs +4 -1
  43. package/dist/esm/components/Overlay/Overlay.mjs.map +1 -1
  44. package/dist/esm/components/Tabs/Tabs.mjs +1 -1
  45. package/dist/esm/components/Tabs/Tabs.mjs.map +1 -1
  46. package/dist/esm/components/Toast/Toast.mjs.map +1 -1
  47. package/dist/esm/components/Toast/ToastService.mjs +0 -1
  48. package/dist/esm/components/Toast/ToastService.mjs.map +1 -1
  49. package/dist/esm/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.mjs.map +1 -0
  50. package/dist/esm/node_modules/@floating-ui/core/dist/floating-ui.core.mjs +69 -157
  51. package/dist/esm/node_modules/@floating-ui/core/dist/floating-ui.core.mjs.map +1 -1
  52. package/dist/esm/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs +201 -231
  53. package/dist/esm/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs.map +1 -1
  54. package/dist/esm/node_modules/@floating-ui/react-dom/dist/{floating-ui.react-dom.esm.mjs → floating-ui.react-dom.mjs} +21 -16
  55. package/dist/esm/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs.map +1 -0
  56. package/dist/esm/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs +129 -0
  57. package/dist/esm/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs.map +1 -0
  58. package/dist/esm/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs +128 -0
  59. package/dist/esm/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs.map +1 -0
  60. package/dist/esm/node_modules/@radix-ui/react-popper/dist/index.mjs +3 -3
  61. package/dist/esm/node_modules/aria-hidden/dist/es2015/index.mjs.map +1 -1
  62. package/dist/esm/node_modules/classnames/index.mjs +34 -23
  63. package/dist/esm/node_modules/classnames/index.mjs.map +1 -1
  64. package/dist/esm/node_modules/get-nonce/dist/es2015/index.mjs +0 -4
  65. package/dist/esm/node_modules/get-nonce/dist/es2015/index.mjs.map +1 -1
  66. package/dist/esm/node_modules/react-remove-scroll/dist/es2015/SideEffect.mjs +0 -1
  67. package/dist/esm/node_modules/react-remove-scroll/dist/es2015/SideEffect.mjs.map +1 -1
  68. package/dist/esm/node_modules/react-remove-scroll/dist/es2015/UI.mjs +4 -4
  69. package/dist/esm/node_modules/react-remove-scroll/dist/es2015/UI.mjs.map +1 -1
  70. package/dist/esm/node_modules/react-remove-scroll-bar/dist/es2015/component.mjs +9 -2
  71. package/dist/esm/node_modules/react-remove-scroll-bar/dist/es2015/component.mjs.map +1 -1
  72. package/dist/esm/node_modules/react-textarea-autosize/dist/react-textarea-autosize.esm.mjs +2 -2
  73. package/dist/esm/node_modules/tslib/tslib.es6.mjs +18 -14
  74. package/dist/esm/node_modules/tslib/tslib.es6.mjs.map +1 -1
  75. package/dist/esm/node_modules/use-callback-ref/dist/es2015/useMergeRef.mjs +24 -1
  76. package/dist/esm/node_modules/use-callback-ref/dist/es2015/useMergeRef.mjs.map +1 -1
  77. package/dist/esm/styles.css +1 -1
  78. package/dist/types/components/Checkbox/Checkbox.d.ts.map +1 -1
  79. package/dist/types/components/Overlay/Overlay.d.ts.map +1 -1
  80. package/dist/types/components/SegmentedControl/SegmentedControl.d.ts +1 -1
  81. package/package.json +45 -54
  82. package/src/components/Checkbox/Checkbox.module.scss +0 -7
  83. package/src/components/Checkbox/Checkbox.tsx +9 -3
  84. package/src/components/KeyValueItem/KeyValueItem.module.scss +1 -0
  85. package/src/components/LegacyStack/LegacyStack.mdx +2 -2
  86. package/src/components/ListItem/ListItem.module.scss +19 -0
  87. package/src/components/ListItem/ListItem.stories.tsx +2 -0
  88. package/src/components/OutlineItem/OutlineItem.module.scss +0 -2
  89. package/src/components/Overlay/Overlay.tsx +4 -1
  90. package/src/components/Tabs/Tabs.module.scss +0 -1
  91. package/src/components/Tabs/Tabs.tsx +1 -1
  92. package/src/components/Text/Text.module.scss +1 -1
  93. package/src/utils/test.tsx +1 -1
  94. package/dist/cjs/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.esm.js.map +0 -1
  95. package/dist/cjs/node_modules/react-textarea-autosize/node_modules/@babel/runtime/helpers/esm/extends.js +0 -21
  96. package/dist/cjs/node_modules/react-textarea-autosize/node_modules/@babel/runtime/helpers/esm/extends.js.map +0 -1
  97. package/dist/cjs/node_modules/react-textarea-autosize/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js.map +0 -1
  98. package/dist/esm/node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.esm.mjs.map +0 -1
  99. package/dist/esm/node_modules/react-textarea-autosize/node_modules/@babel/runtime/helpers/esm/extends.mjs +0 -17
  100. package/dist/esm/node_modules/react-textarea-autosize/node_modules/@babel/runtime/helpers/esm/extends.mjs.map +0 -1
  101. package/dist/esm/node_modules/react-textarea-autosize/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.mjs.map +0 -1
  102. /package/dist/cjs/node_modules/{react-textarea-autosize/node_modules/@babel → @babel}/runtime/helpers/esm/objectWithoutPropertiesLoose.js +0 -0
  103. /package/dist/esm/node_modules/{react-textarea-autosize/node_modules/@babel → @babel}/runtime/helpers/esm/objectWithoutPropertiesLoose.mjs +0 -0
package/README.md CHANGED
@@ -7,46 +7,65 @@ Bezier React is a React components library that implements Bezier design system.
7
7
  ### npm
8
8
 
9
9
  ```bash
10
- npm i @channel.io/bezier-react styled-components@5
11
- npm i -D @types/styled-components@5
10
+ npm i @channel.io/bezier-react
12
11
  ```
13
12
 
14
13
  ### yarn
15
14
 
16
15
  ```bash
17
- yarn add @channel.io/bezier-react styled-components@5
18
- yarn add -D @types/styled-components@5
16
+ yarn add @channel.io/bezier-react
19
17
  ```
20
18
 
21
19
  ### pnpm
22
20
 
23
21
  ```bash
24
- pnpm install @channel.io/bezier-react styled-components@5
25
- pnpm install -D @types/styled-components@5
22
+ pnpm install @channel.io/bezier-react
26
23
  ```
27
24
 
28
- **bezier-react has [styled-components](https://styled-components.com/) as peer dependency** so don't forget to install it.
29
-
30
25
  ## Usage
31
26
 
32
- 1. Wrap `BezierProvider` at the root of your application.
33
- 2. Pass the `foundation` value like `LightFoundation` or `DarkFoundation`.
27
+ ### 1. CSS import
28
+
29
+ In order to use bezier-react's styles, you need to import CSS. If you're using the module bundler, you can import CSS directly from within your JavaScript file.
30
+
31
+ ```tsx
32
+ import "@channel.io/bezier-react/styles.css"
33
+ ```
34
+
35
+ Or if you're not using the module bundler, you can add the CSS directly to your HTML. We recommend referring to your styles file and copy-pasting it. As bezier-react updates, your styles should update with it.
36
+
37
+ ```html
38
+ <link rel="stylesheet" href="styles.css" />
39
+ ```
40
+
41
+ ### 2. Wrap `AppProvider`
42
+
43
+ Wrap `AppProvider` at the root of your application. If necessary, you can change the theme by specifying the `themeName` property.
34
44
 
35
45
  ```tsx
36
46
  import React from 'react'
37
47
  import { createRoot } from 'react-dom/client'
38
- import { BezierProvider, LightFoundation, Text } from '@channel.io/bezier-react'
48
+ import { AppProvider, Text } from '@channel.io/bezier-react'
39
49
 
40
50
  const container = document.getElementById('root') as HTMLElement
41
51
  const root = createRoot(container)
42
52
 
43
53
  root.render(
44
- <BezierProvider foundation={LightFoundation}>
54
+ <AppProvider themeName="dark">
45
55
  <Text as="h1">Hello World</Text>
46
- </BezierProvider>,
56
+ </AppProvider>,
47
57
  )
48
58
  ```
49
59
 
60
+ ### 3. Font import
61
+
62
+ Import font from CDN of Channel Corp. Or you can import it from [Google Fonts](https://fonts.google.com/specimen/Inter).
63
+
64
+ ```html
65
+ <link rel="preconnect" href="https://cf.channel.io" />
66
+ <link rel="stylesheet" href="https://cf.channel.io/asset/font/Inter/inter.css" />
67
+ ```
68
+
50
69
  ## Contributing
51
70
 
52
71
  See [contribution guide](https://github.com/channel-io/bezier-react/wiki/Contribute).
@@ -9,6 +9,7 @@ var propsHelpers = require('../../types/props-helpers.js');
9
9
  var Checkbox_module = require('./Checkbox.module.scss.js');
10
10
  var FormControl = require('../FormControl/FormControl.js');
11
11
  var BaseButton = require('../BaseButton/BaseButton.js');
12
+ var Text = require('../Text/Text.js');
12
13
  var Icon = require('../Icon/Icon.js');
13
14
  var Icon_types = require('../Icon/Icon.types.js');
14
15
 
@@ -52,9 +53,15 @@ function CheckboxImpl({
52
53
  asChild: true
53
54
  /* NOTE: To allow the icon to be rendered even if unchecked. */,
54
55
  forceMount: true
55
- }, /*#__PURE__*/React.createElement(CheckIcon, null)))), children && /*#__PURE__*/React.createElement("label", {
56
+ }, /*#__PURE__*/React.createElement(CheckIcon, null)))), children && /*#__PURE__*/React.createElement(Text.Text, {
57
+ as: "label"
58
+ // TODO: Apply polymorphic types to `as` prop.
59
+ // @ts-expect-error
60
+ ,
61
+ htmlFor: id,
56
62
  className: Checkbox_module.default.Label,
57
- htmlFor: id
63
+ typo: "14",
64
+ color: "txt-black-darkest"
58
65
  }, children));
59
66
  }
60
67
 
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox.js","sources":["../../../../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\n\nimport {\n CheckBoldIcon,\n HyphenBoldIcon,\n} from '@channel.io/bezier-icons'\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\nimport classNames from 'classnames'\n\nimport useId from '~/src/hooks/useId'\nimport { getFormFieldSizeClassName } from '~/src/types/props-helpers'\n\nimport { BaseButton } from '~/src/components/BaseButton'\nimport { useFormFieldProps } from '~/src/components/FormControl'\nimport {\n Icon,\n IconSize,\n} from '~/src/components/Icon'\n\nimport {\n type CheckboxProps,\n type CheckedState,\n} from './Checkbox.types'\n\nimport styles from './Checkbox.module.scss'\n\ntype CheckIconProps = {} | {\n style: React.CSSProperties\n 'data-state': 'checked' | 'unchecked' | 'indeterminate'\n 'data-disabled': boolean | undefined\n}\n\n/* NOTE: Props are injected at runtime by `CheckboxPrimitive.Indicator`. */\nconst CheckIcon = forwardRef<SVGSVGElement, CheckIconProps>(function CheckIcon(\n props,\n forwardedRef,\n) {\n // eslint-disable-next-line react/destructuring-assignment\n const state = props['data-state']\n const isUnchecked = state === 'unchecked'\n const isIndeterminate = state === 'indeterminate'\n\n return (\n <Icon\n className={styles.CheckIcon}\n ref={forwardedRef}\n source={!isIndeterminate ? CheckBoldIcon : HyphenBoldIcon}\n size={IconSize.XS}\n color={isUnchecked ? 'bg-black-dark' : 'bgtxt-absolute-white-dark'}\n {...props}\n />\n )\n})\n\nfunction CheckboxImpl<Checked extends CheckedState>({\n children,\n className,\n checked,\n id: idProp,\n ...rest\n}: CheckboxProps<Checked>, forwardedRef: React.Ref<HTMLButtonElement>) {\n const {\n id: formFieldId,\n hasError,\n ...formFieldProps\n } = useFormFieldProps(rest)\n\n const id = useId(idProp ?? formFieldId, 'bezier-checkbox')\n\n return (\n <div className={classNames(\n styles.Container,\n getFormFieldSizeClassName('m'),\n )}\n >\n <CheckboxPrimitive.Root\n asChild\n className={classNames(\n styles.Checkbox,\n className,\n )}\n ref={forwardedRef}\n id={id}\n checked={checked}\n data-invalid={formFieldProps['aria-invalid']}\n {...formFieldProps}\n >\n <BaseButton>\n <CheckboxPrimitive.Indicator\n asChild\n /* NOTE: To allow the icon to be rendered even if unchecked. */\n forceMount\n >\n <CheckIcon />\n </CheckboxPrimitive.Indicator>\n </BaseButton>\n </CheckboxPrimitive.Root>\n { children && (\n <label\n className={styles.Label}\n htmlFor={id}\n >\n { children }\n </label>\n ) }\n </div>\n )\n}\n\n/**\n * `Checkbox` is a control that allows the user to toggle between checked and not checked.\n * It can be used with labels or standalone.\n * @example\n *\n * ```tsx\n * const [checked, setChecked] = useState(false)\n * // Controlled / With label\n * <Checkbox\n * checked={checked}\n * onCheckedChange={setChecked}\n * >\n * Label\n * </Checkbox>\n * // Controlled / Standalone\n * <Checkbox\n * checked={checked}\n * onCheckedChange={setChecked}\n * />\n * // Uncontrolled\n * <Checkbox\n * defaultChecked={true}\n * >\n * Label\n * </Checkbox>\n * ```\n */\nexport const Checkbox = forwardRef(CheckboxImpl) as <Checked extends CheckedState>(\n props: CheckboxProps<Checked> & { ref?: React.ForwardedRef<HTMLButtonElement> }\n) => ReturnType<typeof CheckboxImpl<Checked>>\n"],"names":["CheckIcon","forwardRef","props","forwardedRef","state","isUnchecked","isIndeterminate","React","createElement","Icon","Object","assign","className","styles","ref","source","CheckBoldIcon","HyphenBoldIcon","size","IconSize","XS","color","CheckboxImpl","children","checked","id","idProp","rest","formFieldId","hasError","formFieldProps","useFormFieldProps","useId","classNames","Container","getFormFieldSizeClassName","CheckboxPrimitive","asChild","Checkbox","BaseButton","forceMount","Label","htmlFor"],"mappings":";;;;;;;;;;;;;;AAgCA;AACA,MAAMA,SAAS,gBAAGC,gBAAU,CAAgC,SAASD,SAASA,CAC5EE,KAAK,EACLC,YAAY,EACZ;AACA;AACA,EAAA,MAAMC,KAAK,GAAGF,KAAK,CAAC,YAAY,CAAC,CAAA;AACjC,EAAA,MAAMG,WAAW,GAAGD,KAAK,KAAK,WAAW,CAAA;AACzC,EAAA,MAAME,eAAe,GAAGF,KAAK,KAAK,eAAe,CAAA;EAEjD,oBACEG,KAAA,CAAAC,aAAA,CAACC,SAAI,EAAAC,MAAA,CAAAC,MAAA,CAAA;IACHC,SAAS,EAAEC,uBAAM,CAACb,SAAU;AAC5Bc,IAAAA,GAAG,EAAEX,YAAa;AAClBY,IAAAA,MAAM,EAAE,CAACT,eAAe,GAAGU,yBAAa,GAAGC,0BAAe;IAC1DC,IAAI,EAAEC,mBAAQ,CAACC,EAAG;AAClBC,IAAAA,KAAK,EAAEhB,WAAW,GAAG,eAAe,GAAG,2BAAA;GACnCH,EAAAA,KAAK,CACV,CAAC,CAAA;AAEN,CAAC,CAAC,CAAA;AAEF,SAASoB,YAAYA,CAA+B;EAClDC,QAAQ;EACRX,SAAS;EACTY,OAAO;AACPC,EAAAA,EAAE,EAAEC,MAAM;EACV,GAAGC,IAAAA;AACmB,CAAC,EAAExB,YAA0C,EAAE;EACrE,MAAM;AACJsB,IAAAA,EAAE,EAAEG,WAAW;IACfC,QAAQ;IACR,GAAGC,cAAAA;AACL,GAAC,GAAGC,6BAAiB,CAACJ,IAAI,CAAC,CAAA;EAE3B,MAAMF,EAAE,GAAGO,aAAK,CAACN,MAAM,IAAIE,WAAW,EAAE,iBAAiB,CAAC,CAAA;EAE1D,oBACErB,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;IAAKI,SAAS,EAAEqB,aAAU,CACxBpB,uBAAM,CAACqB,SAAS,EAChBC,sCAAyB,CAAC,GAAG,CAC/B,CAAA;GAEE5B,eAAAA,KAAA,CAAAC,aAAA,CAAC4B,YAAsB,EAAA1B,MAAA,CAAAC,MAAA,CAAA;IACrB0B,OAAO,EAAA,IAAA;IACPzB,SAAS,EAAEqB,aAAU,CACnBpB,uBAAM,CAACyB,QAAQ,EACf1B,SACF,CAAE;AACFE,IAAAA,GAAG,EAAEX,YAAa;AAClBsB,IAAAA,EAAE,EAAEA,EAAG;AACPD,IAAAA,OAAO,EAAEA,OAAQ;IACjB,cAAcM,EAAAA,cAAc,CAAC,cAAc,CAAA;AAAE,GAAA,EACzCA,cAAc,CAAA,eAElBvB,KAAA,CAAAC,aAAA,CAAC+B,qBAAU,EACThC,IAAAA,eAAAA,KAAA,CAAAC,aAAA,CAAC4B,iBAA2B,EAAA;IAC1BC,OAAO,EAAA,IAAA;AACP;IACAG,UAAU,EAAA,IAAA;AAAA,GAAA,eAEVjC,KAAA,CAAAC,aAAA,CAACR,SAAS,EAAE,IAAA,CACe,CACnB,CACU,CAAC,EACvBuB,QAAQ,iBACRhB,KAAA,CAAAC,aAAA,CAAA,OAAA,EAAA;IACEI,SAAS,EAAEC,uBAAM,CAAC4B,KAAM;AACxBC,IAAAA,OAAO,EAAEjB,EAAAA;GAEPF,EAAAA,QACG,CAEN,CAAC,CAAA;AAEV,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MACae,QAAQ,gBAAGrC,gBAAU,CAACqB,YAAY;;;;"}
1
+ {"version":3,"file":"Checkbox.js","sources":["../../../../src/components/Checkbox/Checkbox.tsx"],"sourcesContent":["import React, { forwardRef } from 'react'\n\nimport {\n CheckBoldIcon,\n HyphenBoldIcon,\n} from '@channel.io/bezier-icons'\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\nimport classNames from 'classnames'\n\nimport useId from '~/src/hooks/useId'\nimport { getFormFieldSizeClassName } from '~/src/types/props-helpers'\n\nimport { BaseButton } from '~/src/components/BaseButton'\nimport { useFormFieldProps } from '~/src/components/FormControl'\nimport {\n Icon,\n IconSize,\n} from '~/src/components/Icon'\nimport { Text } from '~/src/components/Text'\n\nimport {\n type CheckboxProps,\n type CheckedState,\n} from './Checkbox.types'\n\nimport styles from './Checkbox.module.scss'\n\ntype CheckIconProps = {} | {\n style: React.CSSProperties\n 'data-state': 'checked' | 'unchecked' | 'indeterminate'\n 'data-disabled': boolean | undefined\n}\n\n/* NOTE: Props are injected at runtime by `CheckboxPrimitive.Indicator`. */\nconst CheckIcon = forwardRef<SVGSVGElement, CheckIconProps>(function CheckIcon(\n props,\n forwardedRef,\n) {\n // eslint-disable-next-line react/destructuring-assignment\n const state = props['data-state']\n const isUnchecked = state === 'unchecked'\n const isIndeterminate = state === 'indeterminate'\n\n return (\n <Icon\n className={styles.CheckIcon}\n ref={forwardedRef}\n source={!isIndeterminate ? CheckBoldIcon : HyphenBoldIcon}\n size={IconSize.XS}\n color={isUnchecked ? 'bg-black-dark' : 'bgtxt-absolute-white-dark'}\n {...props}\n />\n )\n})\n\nfunction CheckboxImpl<Checked extends CheckedState>({\n children,\n className,\n checked,\n id: idProp,\n ...rest\n}: CheckboxProps<Checked>, forwardedRef: React.Ref<HTMLButtonElement>) {\n const {\n id: formFieldId,\n hasError,\n ...formFieldProps\n } = useFormFieldProps(rest)\n\n const id = useId(idProp ?? formFieldId, 'bezier-checkbox')\n\n return (\n <div className={classNames(\n styles.Container,\n getFormFieldSizeClassName('m'),\n )}\n >\n <CheckboxPrimitive.Root\n asChild\n className={classNames(\n styles.Checkbox,\n className,\n )}\n ref={forwardedRef}\n id={id}\n checked={checked}\n data-invalid={formFieldProps['aria-invalid']}\n {...formFieldProps}\n >\n <BaseButton>\n <CheckboxPrimitive.Indicator\n asChild\n /* NOTE: To allow the icon to be rendered even if unchecked. */\n forceMount\n >\n <CheckIcon />\n </CheckboxPrimitive.Indicator>\n </BaseButton>\n </CheckboxPrimitive.Root>\n { children && (\n <Text\n as=\"label\"\n // TODO: Apply polymorphic types to `as` prop.\n // @ts-expect-error\n htmlFor={id}\n className={styles.Label}\n typo=\"14\"\n color=\"txt-black-darkest\"\n >\n { children }\n </Text>\n ) }\n </div>\n )\n}\n\n/**\n * `Checkbox` is a control that allows the user to toggle between checked and not checked.\n * It can be used with labels or standalone.\n * @example\n *\n * ```tsx\n * const [checked, setChecked] = useState(false)\n * // Controlled / With label\n * <Checkbox\n * checked={checked}\n * onCheckedChange={setChecked}\n * >\n * Label\n * </Checkbox>\n * // Controlled / Standalone\n * <Checkbox\n * checked={checked}\n * onCheckedChange={setChecked}\n * />\n * // Uncontrolled\n * <Checkbox\n * defaultChecked={true}\n * >\n * Label\n * </Checkbox>\n * ```\n */\nexport const Checkbox = forwardRef(CheckboxImpl) as <Checked extends CheckedState>(\n props: CheckboxProps<Checked> & { ref?: React.ForwardedRef<HTMLButtonElement> }\n) => ReturnType<typeof CheckboxImpl<Checked>>\n"],"names":["CheckIcon","forwardRef","props","forwardedRef","state","isUnchecked","isIndeterminate","React","createElement","Icon","Object","assign","className","styles","ref","source","CheckBoldIcon","HyphenBoldIcon","size","IconSize","XS","color","CheckboxImpl","children","checked","id","idProp","rest","formFieldId","hasError","formFieldProps","useFormFieldProps","useId","classNames","Container","getFormFieldSizeClassName","CheckboxPrimitive","asChild","Checkbox","BaseButton","forceMount","Text","as","htmlFor","Label","typo"],"mappings":";;;;;;;;;;;;;;;AAiCA;AACA,MAAMA,SAAS,gBAAGC,gBAAU,CAAgC,SAASD,SAASA,CAC5EE,KAAK,EACLC,YAAY,EACZ;AACA;AACA,EAAA,MAAMC,KAAK,GAAGF,KAAK,CAAC,YAAY,CAAC,CAAA;AACjC,EAAA,MAAMG,WAAW,GAAGD,KAAK,KAAK,WAAW,CAAA;AACzC,EAAA,MAAME,eAAe,GAAGF,KAAK,KAAK,eAAe,CAAA;EAEjD,oBACEG,KAAA,CAAAC,aAAA,CAACC,SAAI,EAAAC,MAAA,CAAAC,MAAA,CAAA;IACHC,SAAS,EAAEC,uBAAM,CAACb,SAAU;AAC5Bc,IAAAA,GAAG,EAAEX,YAAa;AAClBY,IAAAA,MAAM,EAAE,CAACT,eAAe,GAAGU,yBAAa,GAAGC,0BAAe;IAC1DC,IAAI,EAAEC,mBAAQ,CAACC,EAAG;AAClBC,IAAAA,KAAK,EAAEhB,WAAW,GAAG,eAAe,GAAG,2BAAA;GACnCH,EAAAA,KAAK,CACV,CAAC,CAAA;AAEN,CAAC,CAAC,CAAA;AAEF,SAASoB,YAAYA,CAA+B;EAClDC,QAAQ;EACRX,SAAS;EACTY,OAAO;AACPC,EAAAA,EAAE,EAAEC,MAAM;EACV,GAAGC,IAAAA;AACmB,CAAC,EAAExB,YAA0C,EAAE;EACrE,MAAM;AACJsB,IAAAA,EAAE,EAAEG,WAAW;IACfC,QAAQ;IACR,GAAGC,cAAAA;AACL,GAAC,GAAGC,6BAAiB,CAACJ,IAAI,CAAC,CAAA;EAE3B,MAAMF,EAAE,GAAGO,aAAK,CAACN,MAAM,IAAIE,WAAW,EAAE,iBAAiB,CAAC,CAAA;EAE1D,oBACErB,KAAA,CAAAC,aAAA,CAAA,KAAA,EAAA;IAAKI,SAAS,EAAEqB,aAAU,CACxBpB,uBAAM,CAACqB,SAAS,EAChBC,sCAAyB,CAAC,GAAG,CAC/B,CAAA;GAEE5B,eAAAA,KAAA,CAAAC,aAAA,CAAC4B,YAAsB,EAAA1B,MAAA,CAAAC,MAAA,CAAA;IACrB0B,OAAO,EAAA,IAAA;IACPzB,SAAS,EAAEqB,aAAU,CACnBpB,uBAAM,CAACyB,QAAQ,EACf1B,SACF,CAAE;AACFE,IAAAA,GAAG,EAAEX,YAAa;AAClBsB,IAAAA,EAAE,EAAEA,EAAG;AACPD,IAAAA,OAAO,EAAEA,OAAQ;IACjB,cAAcM,EAAAA,cAAc,CAAC,cAAc,CAAA;AAAE,GAAA,EACzCA,cAAc,CAAA,eAElBvB,KAAA,CAAAC,aAAA,CAAC+B,qBAAU,EACThC,IAAAA,eAAAA,KAAA,CAAAC,aAAA,CAAC4B,iBAA2B,EAAA;IAC1BC,OAAO,EAAA,IAAA;AACP;IACAG,UAAU,EAAA,IAAA;AAAA,GAAA,eAEVjC,KAAA,CAAAC,aAAA,CAACR,SAAS,MAAE,CACe,CACnB,CACU,CAAC,EACvBuB,QAAQ,iBACRhB,KAAA,CAAAC,aAAA,CAACiC,SAAI,EAAA;AACHC,IAAAA,EAAE,EAAC,OAAA;AACH;AACA;AAAA;AACAC,IAAAA,OAAO,EAAElB,EAAG;IACZb,SAAS,EAAEC,uBAAM,CAAC+B,KAAM;AACxBC,IAAAA,IAAI,EAAC,IAAI;AACTxB,IAAAA,KAAK,EAAC,mBAAA;GAEJE,EAAAA,QACE,CAEL,CAAC,CAAA;AAEV,CAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;MACae,QAAQ,gBAAGrC,gBAAU,CAACqB,YAAY;;;;"}
@@ -112,7 +112,10 @@ const Overlay = /*#__PURE__*/React.forwardRef(function Overlay({
112
112
  event.stopPropagation();
113
113
  }, []);
114
114
  const handleHideOverlay = React.useCallback(event => {
115
- if (!event.target || event.target instanceof HTMLElement && !event.target.closest(`.${Overlay_module.default.Overlay}`)) {
115
+ /**
116
+ * NOTE: Type checking with instanceof makes it difficult to handle cases where the window object is different.
117
+ */
118
+ if (!event.target || !event.target.closest(`.${Overlay_module.default.Overlay}`)) {
116
119
  onHide?.();
117
120
  if (!enableClickOutside) {
118
121
  event.stopPropagation();
@@ -1 +1 @@
1
- {"version":3,"file":"Overlay.js","sources":["../../../../src/components/Overlay/Overlay.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useReducer,\n useRef,\n useState,\n} from 'react'\n\nimport ReactDOM from 'react-dom'\n\nimport classNames from 'classnames'\n\nimport useEventHandler from '~/src/hooks/useEventHandler'\nimport useMergeRefs from '~/src/hooks/useMergeRefs'\n\nimport { useModalContainerContext } from '~/src/components/Modal'\nimport {\n ThemeProvider,\n useThemeName,\n} from '~/src/components/ThemeProvider'\nimport { useWindow } from '~/src/components/WindowProvider'\n\nimport type {\n ContainerRectAttr,\n OverlayProps,\n TargetRectAttr,\n} from './Overlay.types'\nimport { OverlayPosition } from './Overlay.types'\nimport { getOverlayStyle } from './utils'\n\nimport styles from './Overlay.module.scss'\n\nexport const CONTAINER_TEST_ID = 'bezier-container'\nexport const OVERLAY_TEST_ID = 'bezier-overlay'\nexport const ESCAPE_KEY = 'Escape'\n\nexport const Overlay = forwardRef<HTMLDivElement, OverlayProps>(function Overlay({\n children,\n style,\n className,\n show = false,\n container: givenContainer,\n target,\n position = OverlayPosition.LeftCenter,\n marginX = 0,\n marginY = 0,\n keepInContainer = false,\n withTransition = false,\n enableClickOutside = false,\n containerStyle,\n containerClassName,\n onHide,\n onTransitionEnd,\n ...rest\n}, forwardedRef) {\n const { window, document, rootElement } = useWindow()\n\n const [shouldRender, setShouldRender] = useState(false)\n const [shouldShow, setShouldShow] = useState(false)\n\n const containerRect = useRef<ContainerRectAttr | null>(null)\n const targetRect = useRef<TargetRectAttr | null>(null)\n\n const [, forceUpdate] = useReducer(x => !x, true)\n\n const containerRef = useRef<HTMLDivElement>(null)\n const overlayRef = useRef<HTMLDivElement>(null)\n const mergedRef = useMergeRefs<HTMLDivElement>(overlayRef, forwardedRef)\n\n const modalContainer = useModalContainerContext()\n const hasContainer = Boolean(givenContainer || modalContainer)\n const container = givenContainer ?? modalContainer ?? rootElement\n\n const handleOverlayForceUpdate = useCallback(() => {\n forceUpdate()\n }, [])\n\n const handleContainerRect = useCallback(() => {\n const {\n width: containerWidth,\n height: containerHeight,\n top: containerTop,\n left: containerLeft,\n } = container.getBoundingClientRect()\n\n containerRect.current = {\n containerWidth,\n containerHeight,\n containerTop,\n containerLeft,\n scrollTop: hasContainer ? container.scrollTop : 0,\n scrollLeft: hasContainer ? container.scrollLeft : 0,\n }\n }, [\n container,\n hasContainer,\n ])\n\n useLayoutEffect(function initContainerRect() {\n if (show) {\n handleContainerRect()\n }\n }, [\n show,\n handleContainerRect,\n ])\n\n const handleTargetRect = useCallback(() => {\n if (!target) {\n return\n }\n const {\n width: targetWidth,\n height: targetHeight,\n top: targetTop,\n left: targetLeft,\n } = target.getBoundingClientRect()\n const { clientTop, clientLeft } = target\n\n targetRect.current = {\n targetWidth,\n targetHeight,\n targetTop,\n targetLeft,\n clientTop,\n clientLeft,\n }\n }, [target])\n\n useLayoutEffect(function initTargetRect() {\n if (show) {\n handleTargetRect()\n }\n }, [\n show,\n handleTargetRect,\n ])\n\n const handleTransitionEnd = useCallback<React.TransitionEventHandler<HTMLDivElement>>((event) => {\n onTransitionEnd?.(event)\n if (!show) {\n setShouldRender(false)\n }\n }, [\n show,\n onTransitionEnd,\n ])\n\n const handleBlockMouseWheel = useCallback((event: HTMLElementEventMap['wheel']) => {\n event.stopPropagation()\n }, [])\n\n const handleHideOverlay = useCallback((event: MouseEvent) => {\n if (!event.target || (event.target instanceof HTMLElement && !event.target.closest(`.${styles.Overlay}`))) {\n onHide?.()\n\n if (!enableClickOutside) {\n event.stopPropagation()\n }\n }\n }, [\n enableClickOutside,\n onHide,\n ])\n\n const handleKeydown = useCallback((event: HTMLElementEventMap['keyup']) => {\n if (event.key === ESCAPE_KEY) {\n onHide?.()\n }\n }, [onHide])\n\n useEventHandler(document, 'click', handleHideOverlay, show, true)\n useEventHandler(document, 'keydown', handleKeydown, show)\n useEventHandler(containerRef.current, 'wheel', handleBlockMouseWheel, show)\n\n useEffect(() => {\n handleOverlayForceUpdate()\n }, [\n children,\n handleOverlayForceUpdate,\n ])\n\n /**\n * Case 1: show === true\n * show -> shouldRender -> shouldShow\n * shouldRender 를 true 로 설정하고, 직후에 shouldShow 를 true 로 설정하여 transition 유발\n *\n * Case 2: show === false\n * show -> shouldShow -> (...) -> shouldRender\n * shouldShow 를 false 로 설정하고, shouldRender 는 transition 필요 여부에 따라 다르게 결정함\n * Case 2-1: withTransition === true\n * shouldShow -> onTransitionEnd -> shouldRender\n * onTransitionEnd handler 를 이용해 transition 이 끝난 다음 shouldRender 를 false 로 설정\n * Case 2-2: withTransition === false\n * shouldShow && shouldRender\n * transition 을 기다릴 필요가 없으므로 바로 shouldRender 를 false 로 설정\n */\n useEffect(() => {\n if (show) {\n if (shouldRender) {\n window.requestAnimationFrame(() => setShouldShow(true))\n } else {\n window.requestAnimationFrame(() => setShouldRender(true))\n }\n }\n\n if (!show) {\n window.requestAnimationFrame(() => setShouldShow(false))\n\n if (!withTransition) {\n window.requestAnimationFrame(() => setShouldRender(false))\n }\n }\n }, [\n show,\n withTransition,\n shouldRender,\n shouldShow,\n window,\n ])\n\n const themeName = useThemeName()\n\n if (!shouldRender) {\n return null\n }\n\n const Content = (\n <ThemeProvider themeName={themeName}>\n <div\n className={classNames(\n styles.Overlay,\n !shouldShow && styles.hidden,\n withTransition && styles.transition,\n className,\n )}\n style={{\n ...style,\n ...getOverlayStyle({\n containerRect: containerRect.current,\n targetRect: targetRect.current,\n overlay: overlayRef.current,\n position,\n marginX,\n marginY,\n keepInContainer,\n show: shouldShow,\n }),\n }}\n ref={mergedRef}\n data-testid={OVERLAY_TEST_ID}\n onTransitionEnd={handleTransitionEnd}\n {...rest}\n >\n { children }\n </div>\n </ThemeProvider>\n )\n\n return ReactDOM.createPortal(\n hasContainer\n ? Content\n : (\n <div\n style={containerStyle}\n className={classNames(\n styles.OverlayContainer,\n !show && styles.hidden,\n containerClassName,\n )}\n ref={containerRef}\n data-testid={CONTAINER_TEST_ID}\n >\n <div className={styles.OverlayWrapper}>\n { Content }\n </div>\n </div>\n ),\n container,\n )\n})\n"],"names":["CONTAINER_TEST_ID","OVERLAY_TEST_ID","ESCAPE_KEY","Overlay","forwardRef","children","style","className","show","container","givenContainer","target","position","OverlayPosition","LeftCenter","marginX","marginY","keepInContainer","withTransition","enableClickOutside","containerStyle","containerClassName","onHide","onTransitionEnd","rest","forwardedRef","window","document","rootElement","useWindow","shouldRender","setShouldRender","useState","shouldShow","setShouldShow","containerRect","useRef","targetRect","forceUpdate","useReducer","x","containerRef","overlayRef","mergedRef","useMergeRefs","modalContainer","useModalContainerContext","hasContainer","Boolean","handleOverlayForceUpdate","useCallback","handleContainerRect","width","containerWidth","height","containerHeight","top","containerTop","left","containerLeft","getBoundingClientRect","current","scrollTop","scrollLeft","useLayoutEffect","initContainerRect","handleTargetRect","targetWidth","targetHeight","targetTop","targetLeft","clientTop","clientLeft","initTargetRect","handleTransitionEnd","event","handleBlockMouseWheel","stopPropagation","handleHideOverlay","HTMLElement","closest","styles","handleKeydown","key","useEventHandler","useEffect","requestAnimationFrame","themeName","useThemeName","Content","React","createElement","ThemeProvider","Object","assign","classNames","hidden","transition","getOverlayStyle","overlay","ref","ReactDOM","createPortal","OverlayContainer","OverlayWrapper"],"mappings":"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"}
1
+ {"version":3,"file":"Overlay.js","sources":["../../../../src/components/Overlay/Overlay.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useReducer,\n useRef,\n useState,\n} from 'react'\n\nimport ReactDOM from 'react-dom'\n\nimport classNames from 'classnames'\n\nimport useEventHandler from '~/src/hooks/useEventHandler'\nimport useMergeRefs from '~/src/hooks/useMergeRefs'\n\nimport { useModalContainerContext } from '~/src/components/Modal'\nimport {\n ThemeProvider,\n useThemeName,\n} from '~/src/components/ThemeProvider'\nimport { useWindow } from '~/src/components/WindowProvider'\n\nimport type {\n ContainerRectAttr,\n OverlayProps,\n TargetRectAttr,\n} from './Overlay.types'\nimport { OverlayPosition } from './Overlay.types'\nimport { getOverlayStyle } from './utils'\n\nimport styles from './Overlay.module.scss'\n\nexport const CONTAINER_TEST_ID = 'bezier-container'\nexport const OVERLAY_TEST_ID = 'bezier-overlay'\nexport const ESCAPE_KEY = 'Escape'\n\nexport const Overlay = forwardRef<HTMLDivElement, OverlayProps>(function Overlay({\n children,\n style,\n className,\n show = false,\n container: givenContainer,\n target,\n position = OverlayPosition.LeftCenter,\n marginX = 0,\n marginY = 0,\n keepInContainer = false,\n withTransition = false,\n enableClickOutside = false,\n containerStyle,\n containerClassName,\n onHide,\n onTransitionEnd,\n ...rest\n}, forwardedRef) {\n const { window, document, rootElement } = useWindow()\n\n const [shouldRender, setShouldRender] = useState(false)\n const [shouldShow, setShouldShow] = useState(false)\n\n const containerRect = useRef<ContainerRectAttr | null>(null)\n const targetRect = useRef<TargetRectAttr | null>(null)\n\n const [, forceUpdate] = useReducer(x => !x, true)\n\n const containerRef = useRef<HTMLDivElement>(null)\n const overlayRef = useRef<HTMLDivElement>(null)\n const mergedRef = useMergeRefs<HTMLDivElement>(overlayRef, forwardedRef)\n\n const modalContainer = useModalContainerContext()\n const hasContainer = Boolean(givenContainer || modalContainer)\n const container = givenContainer ?? modalContainer ?? rootElement\n\n const handleOverlayForceUpdate = useCallback(() => {\n forceUpdate()\n }, [])\n\n const handleContainerRect = useCallback(() => {\n const {\n width: containerWidth,\n height: containerHeight,\n top: containerTop,\n left: containerLeft,\n } = container.getBoundingClientRect()\n\n containerRect.current = {\n containerWidth,\n containerHeight,\n containerTop,\n containerLeft,\n scrollTop: hasContainer ? container.scrollTop : 0,\n scrollLeft: hasContainer ? container.scrollLeft : 0,\n }\n }, [\n container,\n hasContainer,\n ])\n\n useLayoutEffect(function initContainerRect() {\n if (show) {\n handleContainerRect()\n }\n }, [\n show,\n handleContainerRect,\n ])\n\n const handleTargetRect = useCallback(() => {\n if (!target) {\n return\n }\n const {\n width: targetWidth,\n height: targetHeight,\n top: targetTop,\n left: targetLeft,\n } = target.getBoundingClientRect()\n const { clientTop, clientLeft } = target\n\n targetRect.current = {\n targetWidth,\n targetHeight,\n targetTop,\n targetLeft,\n clientTop,\n clientLeft,\n }\n }, [target])\n\n useLayoutEffect(function initTargetRect() {\n if (show) {\n handleTargetRect()\n }\n }, [\n show,\n handleTargetRect,\n ])\n\n const handleTransitionEnd = useCallback<React.TransitionEventHandler<HTMLDivElement>>((event) => {\n onTransitionEnd?.(event)\n if (!show) {\n setShouldRender(false)\n }\n }, [\n show,\n onTransitionEnd,\n ])\n\n const handleBlockMouseWheel = useCallback((event: HTMLElementEventMap['wheel']) => {\n event.stopPropagation()\n }, [])\n\n const handleHideOverlay = useCallback((event: MouseEvent) => {\n /**\n * NOTE: Type checking with instanceof makes it difficult to handle cases where the window object is different.\n */\n if (!event.target || !(event.target as HTMLElement).closest(`.${styles.Overlay}`)) {\n onHide?.()\n\n if (!enableClickOutside) {\n event.stopPropagation()\n }\n }\n }, [\n enableClickOutside,\n onHide,\n ])\n\n const handleKeydown = useCallback((event: HTMLElementEventMap['keyup']) => {\n if (event.key === ESCAPE_KEY) {\n onHide?.()\n }\n }, [onHide])\n\n useEventHandler(document, 'click', handleHideOverlay, show, true)\n useEventHandler(document, 'keydown', handleKeydown, show)\n useEventHandler(containerRef.current, 'wheel', handleBlockMouseWheel, show)\n\n useEffect(() => {\n handleOverlayForceUpdate()\n }, [\n children,\n handleOverlayForceUpdate,\n ])\n\n /**\n * Case 1: show === true\n * show -> shouldRender -> shouldShow\n * shouldRender 를 true 로 설정하고, 직후에 shouldShow 를 true 로 설정하여 transition 유발\n *\n * Case 2: show === false\n * show -> shouldShow -> (...) -> shouldRender\n * shouldShow 를 false 로 설정하고, shouldRender 는 transition 필요 여부에 따라 다르게 결정함\n * Case 2-1: withTransition === true\n * shouldShow -> onTransitionEnd -> shouldRender\n * onTransitionEnd handler 를 이용해 transition 이 끝난 다음 shouldRender 를 false 로 설정\n * Case 2-2: withTransition === false\n * shouldShow && shouldRender\n * transition 을 기다릴 필요가 없으므로 바로 shouldRender 를 false 로 설정\n */\n useEffect(() => {\n if (show) {\n if (shouldRender) {\n window.requestAnimationFrame(() => setShouldShow(true))\n } else {\n window.requestAnimationFrame(() => setShouldRender(true))\n }\n }\n\n if (!show) {\n window.requestAnimationFrame(() => setShouldShow(false))\n\n if (!withTransition) {\n window.requestAnimationFrame(() => setShouldRender(false))\n }\n }\n }, [\n show,\n withTransition,\n shouldRender,\n shouldShow,\n window,\n ])\n\n const themeName = useThemeName()\n\n if (!shouldRender) {\n return null\n }\n\n const Content = (\n <ThemeProvider themeName={themeName}>\n <div\n className={classNames(\n styles.Overlay,\n !shouldShow && styles.hidden,\n withTransition && styles.transition,\n className,\n )}\n style={{\n ...style,\n ...getOverlayStyle({\n containerRect: containerRect.current,\n targetRect: targetRect.current,\n overlay: overlayRef.current,\n position,\n marginX,\n marginY,\n keepInContainer,\n show: shouldShow,\n }),\n }}\n ref={mergedRef}\n data-testid={OVERLAY_TEST_ID}\n onTransitionEnd={handleTransitionEnd}\n {...rest}\n >\n { children }\n </div>\n </ThemeProvider>\n )\n\n return ReactDOM.createPortal(\n hasContainer\n ? Content\n : (\n <div\n style={containerStyle}\n className={classNames(\n styles.OverlayContainer,\n !show && styles.hidden,\n containerClassName,\n )}\n ref={containerRef}\n data-testid={CONTAINER_TEST_ID}\n >\n <div className={styles.OverlayWrapper}>\n { Content }\n </div>\n </div>\n ),\n container,\n )\n})\n"],"names":["CONTAINER_TEST_ID","OVERLAY_TEST_ID","ESCAPE_KEY","Overlay","forwardRef","children","style","className","show","container","givenContainer","target","position","OverlayPosition","LeftCenter","marginX","marginY","keepInContainer","withTransition","enableClickOutside","containerStyle","containerClassName","onHide","onTransitionEnd","rest","forwardedRef","window","document","rootElement","useWindow","shouldRender","setShouldRender","useState","shouldShow","setShouldShow","containerRect","useRef","targetRect","forceUpdate","useReducer","x","containerRef","overlayRef","mergedRef","useMergeRefs","modalContainer","useModalContainerContext","hasContainer","Boolean","handleOverlayForceUpdate","useCallback","handleContainerRect","width","containerWidth","height","containerHeight","top","containerTop","left","containerLeft","getBoundingClientRect","current","scrollTop","scrollLeft","useLayoutEffect","initContainerRect","handleTargetRect","targetWidth","targetHeight","targetTop","targetLeft","clientTop","clientLeft","initTargetRect","handleTransitionEnd","event","handleBlockMouseWheel","stopPropagation","handleHideOverlay","closest","styles","handleKeydown","key","useEventHandler","useEffect","requestAnimationFrame","themeName","useThemeName","Content","React","createElement","ThemeProvider","Object","assign","classNames","hidden","transition","getOverlayStyle","overlay","ref","ReactDOM","createPortal","OverlayContainer","OverlayWrapper"],"mappings":"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"}
@@ -161,7 +161,7 @@ const TabActions = /*#__PURE__*/React.forwardRef(function TabActions({
161
161
  function getTypoBy(size) {
162
162
  return {
163
163
  [Tabs_types.TabSize.L]: '14',
164
- [Tabs_types.TabSize.M]: '14',
164
+ [Tabs_types.TabSize.M]: '13',
165
165
  [Tabs_types.TabSize.S]: '13'
166
166
  }[size];
167
167
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.js","sources":["../../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useMemo,\n} from 'react'\n\nimport { OpenInNewIcon } from '@channel.io/bezier-icons'\nimport * as TabsPrimitive from '@radix-ui/react-tabs'\nimport * as ToolbarPrimitive from '@radix-ui/react-toolbar'\nimport classNames from 'classnames'\n\nimport { createContext } from '~/src/utils/react'\nimport { isNil } from '~/src/utils/type'\n\nimport { BaseButton } from '~/src/components/BaseButton'\nimport {\n Button,\n ButtonColorVariant,\n ButtonSize,\n ButtonStyleVariant,\n} from '~/src/components/Button'\nimport {\n Icon,\n IconSize,\n} from '~/src/components/Icon'\nimport {\n type TabActionElement,\n type TabActionProps,\n type TabActionsProps,\n type TabContentProps,\n type TabItemProps,\n type TabItemsProps,\n type TabListContextValue,\n type TabListProps,\n TabSize,\n type TabsProps,\n} from '~/src/components/Tabs/Tabs.types'\nimport { Text } from '~/src/components/Text'\n\nimport styles from './Tabs.module.scss'\n\n/**\n * `Tabs` is a set of layered section of content.\n *\n * `Tabs` is a context of the Tab-related components and gives accessibility properties to Tab-related components.\n * @example\n *\n * ```tsx\n * <Tabs>\n * <TabList>\n * <TabItems>\n * <TabItem />\n * <TabItems />\n * <TabActions>\n * <TabAction />\n * </TabActions>\n * </TabList>\n * <TabContent />\n * </Tabs>\n * ```\n */\n\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(function Tabs({\n className,\n activationMode = 'automatic',\n dir,\n children,\n ...rest\n}, forwardedRef) {\n return (\n <TabsPrimitive.Root\n className={classNames(\n styles.Tabs,\n className,\n )}\n activationMode={activationMode}\n ref={forwardedRef}\n dir={dir as 'ltr' | 'rtl'}\n {...rest}\n >\n { children }\n </TabsPrimitive.Root>\n )\n})\n\nconst [\n TabListContextProvider,\n useTabListContext,\n] = createContext<TabListContextValue>({\n size: TabSize.M,\n})\n\n/**\n * `TabList` gives size context to its children and decides the layout of `TabItems` and `TabActions`.\n */\nexport const TabList = forwardRef<HTMLDivElement, TabListProps>(function TabList({\n className,\n children,\n size = TabSize.M,\n ...rest\n}, forwardedRef) {\n const heightContextValue = useMemo(() => ({\n size,\n }), [size])\n\n return (\n <TabListContextProvider value={heightContextValue}>\n <div\n className={classNames(\n styles.TabList,\n styles[`size-${size}`],\n className,\n )}\n ref={forwardedRef}\n {...rest}\n >\n { children }\n </div>\n </TabListContextProvider>\n )\n})\n\n/**\n * `TabItems` is a flex container which has `TabItem` flex items.\n */\nexport const TabItems = forwardRef<HTMLDivElement, TabItemsProps>(function TabItems({\n className,\n children,\n ...rest\n}, forwardedRef) {\n return (\n <TabsPrimitive.TabsList\n className={classNames(\n styles.TabItems,\n className,\n )}\n ref={forwardedRef}\n {...rest}\n >\n { children }\n </TabsPrimitive.TabsList>\n )\n})\n\nfunction getButtonSizeBy(size: TabSize) {\n return ({\n [TabSize.L]: ButtonSize.L,\n [TabSize.M]: ButtonSize.M,\n [TabSize.S]: ButtonSize.S,\n } as const)[size]\n}\n\n/**\n * `TabItem` is a button that activates its associated content.\n */\nexport const TabItem = forwardRef<HTMLButtonElement, TabItemProps>(function TabItem({\n className,\n disabled,\n value,\n children,\n ...rest\n}, forwardedRef) {\n const { size } = useTabListContext()\n\n if (typeof children !== 'string') {\n return null\n }\n\n return (\n <TabsPrimitive.TabsTrigger\n disabled={disabled}\n value={value}\n asChild\n >\n <Button\n className={classNames(\n styles.TabItem,\n className,\n )}\n disabled={disabled}\n text={children}\n size={getButtonSizeBy(size)}\n colorVariant={ButtonColorVariant.MonochromeLight}\n styleVariant={ButtonStyleVariant.Tertiary}\n ref={forwardedRef}\n {...rest}\n />\n </TabsPrimitive.TabsTrigger>\n )\n})\n\n/**\n * `TabContent` has content associated with `TabItem`.\n */\nexport const TabContent = forwardRef<HTMLDivElement, TabContentProps>(function TabContent({\n children,\n value,\n ...rest\n}, forwardedRef) {\n return (\n <TabsPrimitive.Content\n value={value}\n ref={forwardedRef}\n {...rest}\n >\n { children }\n </TabsPrimitive.Content>\n )\n})\n\n/**\n * `TabActions` is a flex container which has `TabAction` flex items.\n * It also gives accessibility properties to its children.\n */\nexport const TabActions = forwardRef<HTMLDivElement, TabActionsProps>(function TabActions({\n className,\n dir,\n children,\n ...rest\n}, forwardedRef) {\n return (\n <ToolbarPrimitive.Root\n className={classNames(\n styles.TabActions,\n className,\n )}\n aria-label=\"More actions\"\n ref={forwardedRef}\n dir={dir as 'ltr' | 'rtl'}\n {...rest}\n >\n { children }\n </ToolbarPrimitive.Root>\n )\n})\n\nfunction getTypoBy(size: TabSize) {\n return ({\n [TabSize.L]: '14',\n [TabSize.M]: '14',\n [TabSize.S]: '13',\n } as const)[size]\n}\n\nfunction getIconSizeBy(size: TabSize) {\n return ({\n [TabSize.L]: IconSize.S,\n [TabSize.M]: IconSize.XS,\n [TabSize.S]: IconSize.XS,\n } as const)[size]\n}\n\n/**\n * `TabAction` is a button for more action to open a new link or navigate to a different url.\n * If it has `href` props, it should act as a link.\n */\nexport const TabAction = forwardRef<TabActionElement<string | undefined>, TabActionProps<string | undefined>>(function TabAction({\n className: classNameProp,\n href,\n children,\n onClick,\n ...rest\n}, forwardedRef,\n) {\n const { size } = useTabListContext()\n const className = classNames(\n styles.TabAction,\n styles[`size-${size}`],\n classNameProp,\n )\n\n return (\n isNil(href) ? (\n <ToolbarPrimitive.Button\n asChild\n className={className}\n onClick={onClick}\n ref={forwardedRef}\n {...rest}\n >\n <BaseButton>\n <Text\n bold\n typo={getTypoBy(size)}\n >\n { children }\n </Text>\n </BaseButton>\n </ToolbarPrimitive.Button>\n ) : (\n <ToolbarPrimitive.Link\n className={className}\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n // @ts-expect-error\n ref={forwardedRef}\n {...rest}\n >\n <Text\n bold\n typo={getTypoBy(size)}\n >\n { children }\n </Text>\n <Icon\n source={OpenInNewIcon}\n size={getIconSizeBy(size)}\n marginLeft={5}\n />\n </ToolbarPrimitive.Link>\n )\n )\n}) as <Link extends string | undefined>(\n props: TabActionProps<Link> & {\n ref?: React.ForwardedRef<TabActionElement<Link>>\n }\n) => JSX.Element\n"],"names":["Tabs","forwardRef","className","activationMode","dir","children","rest","forwardedRef","React","createElement","TabsPrimitive","Object","assign","classNames","styles","ref","TabListContextProvider","useTabListContext","createContext","size","TabSize","M","TabList","heightContextValue","useMemo","value","TabItems","getButtonSizeBy","L","ButtonSize","S","TabItem","disabled","asChild","Button","text","colorVariant","ButtonColorVariant","MonochromeLight","styleVariant","ButtonStyleVariant","Tertiary","TabContent","TabActions","ToolbarPrimitive","getTypoBy","getIconSizeBy","IconSize","XS","TabAction","classNameProp","href","onClick","isNil","BaseButton","Text","bold","typo","target","rel","Icon","source","OpenInNewIcon","marginLeft"],"mappings":"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"}
1
+ {"version":3,"file":"Tabs.js","sources":["../../../../src/components/Tabs/Tabs.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useMemo,\n} from 'react'\n\nimport { OpenInNewIcon } from '@channel.io/bezier-icons'\nimport * as TabsPrimitive from '@radix-ui/react-tabs'\nimport * as ToolbarPrimitive from '@radix-ui/react-toolbar'\nimport classNames from 'classnames'\n\nimport { createContext } from '~/src/utils/react'\nimport { isNil } from '~/src/utils/type'\n\nimport { BaseButton } from '~/src/components/BaseButton'\nimport {\n Button,\n ButtonColorVariant,\n ButtonSize,\n ButtonStyleVariant,\n} from '~/src/components/Button'\nimport {\n Icon,\n IconSize,\n} from '~/src/components/Icon'\nimport {\n type TabActionElement,\n type TabActionProps,\n type TabActionsProps,\n type TabContentProps,\n type TabItemProps,\n type TabItemsProps,\n type TabListContextValue,\n type TabListProps,\n TabSize,\n type TabsProps,\n} from '~/src/components/Tabs/Tabs.types'\nimport { Text } from '~/src/components/Text'\n\nimport styles from './Tabs.module.scss'\n\n/**\n * `Tabs` is a set of layered section of content.\n *\n * `Tabs` is a context of the Tab-related components and gives accessibility properties to Tab-related components.\n * @example\n *\n * ```tsx\n * <Tabs>\n * <TabList>\n * <TabItems>\n * <TabItem />\n * <TabItems />\n * <TabActions>\n * <TabAction />\n * </TabActions>\n * </TabList>\n * <TabContent />\n * </Tabs>\n * ```\n */\n\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(function Tabs({\n className,\n activationMode = 'automatic',\n dir,\n children,\n ...rest\n}, forwardedRef) {\n return (\n <TabsPrimitive.Root\n className={classNames(\n styles.Tabs,\n className,\n )}\n activationMode={activationMode}\n ref={forwardedRef}\n dir={dir as 'ltr' | 'rtl'}\n {...rest}\n >\n { children }\n </TabsPrimitive.Root>\n )\n})\n\nconst [\n TabListContextProvider,\n useTabListContext,\n] = createContext<TabListContextValue>({\n size: TabSize.M,\n})\n\n/**\n * `TabList` gives size context to its children and decides the layout of `TabItems` and `TabActions`.\n */\nexport const TabList = forwardRef<HTMLDivElement, TabListProps>(function TabList({\n className,\n children,\n size = TabSize.M,\n ...rest\n}, forwardedRef) {\n const heightContextValue = useMemo(() => ({\n size,\n }), [size])\n\n return (\n <TabListContextProvider value={heightContextValue}>\n <div\n className={classNames(\n styles.TabList,\n styles[`size-${size}`],\n className,\n )}\n ref={forwardedRef}\n {...rest}\n >\n { children }\n </div>\n </TabListContextProvider>\n )\n})\n\n/**\n * `TabItems` is a flex container which has `TabItem` flex items.\n */\nexport const TabItems = forwardRef<HTMLDivElement, TabItemsProps>(function TabItems({\n className,\n children,\n ...rest\n}, forwardedRef) {\n return (\n <TabsPrimitive.TabsList\n className={classNames(\n styles.TabItems,\n className,\n )}\n ref={forwardedRef}\n {...rest}\n >\n { children }\n </TabsPrimitive.TabsList>\n )\n})\n\nfunction getButtonSizeBy(size: TabSize) {\n return ({\n [TabSize.L]: ButtonSize.L,\n [TabSize.M]: ButtonSize.M,\n [TabSize.S]: ButtonSize.S,\n } as const)[size]\n}\n\n/**\n * `TabItem` is a button that activates its associated content.\n */\nexport const TabItem = forwardRef<HTMLButtonElement, TabItemProps>(function TabItem({\n className,\n disabled,\n value,\n children,\n ...rest\n}, forwardedRef) {\n const { size } = useTabListContext()\n\n if (typeof children !== 'string') {\n return null\n }\n\n return (\n <TabsPrimitive.TabsTrigger\n disabled={disabled}\n value={value}\n asChild\n >\n <Button\n className={classNames(\n styles.TabItem,\n className,\n )}\n disabled={disabled}\n text={children}\n size={getButtonSizeBy(size)}\n colorVariant={ButtonColorVariant.MonochromeLight}\n styleVariant={ButtonStyleVariant.Tertiary}\n ref={forwardedRef}\n {...rest}\n />\n </TabsPrimitive.TabsTrigger>\n )\n})\n\n/**\n * `TabContent` has content associated with `TabItem`.\n */\nexport const TabContent = forwardRef<HTMLDivElement, TabContentProps>(function TabContent({\n children,\n value,\n ...rest\n}, forwardedRef) {\n return (\n <TabsPrimitive.Content\n value={value}\n ref={forwardedRef}\n {...rest}\n >\n { children }\n </TabsPrimitive.Content>\n )\n})\n\n/**\n * `TabActions` is a flex container which has `TabAction` flex items.\n * It also gives accessibility properties to its children.\n */\nexport const TabActions = forwardRef<HTMLDivElement, TabActionsProps>(function TabActions({\n className,\n dir,\n children,\n ...rest\n}, forwardedRef) {\n return (\n <ToolbarPrimitive.Root\n className={classNames(\n styles.TabActions,\n className,\n )}\n aria-label=\"More actions\"\n ref={forwardedRef}\n dir={dir as 'ltr' | 'rtl'}\n {...rest}\n >\n { children }\n </ToolbarPrimitive.Root>\n )\n})\n\nfunction getTypoBy(size: TabSize) {\n return ({\n [TabSize.L]: '14',\n [TabSize.M]: '13',\n [TabSize.S]: '13',\n } as const)[size]\n}\n\nfunction getIconSizeBy(size: TabSize) {\n return ({\n [TabSize.L]: IconSize.S,\n [TabSize.M]: IconSize.XS,\n [TabSize.S]: IconSize.XS,\n } as const)[size]\n}\n\n/**\n * `TabAction` is a button for more action to open a new link or navigate to a different url.\n * If it has `href` props, it should act as a link.\n */\nexport const TabAction = forwardRef<TabActionElement<string | undefined>, TabActionProps<string | undefined>>(function TabAction({\n className: classNameProp,\n href,\n children,\n onClick,\n ...rest\n}, forwardedRef,\n) {\n const { size } = useTabListContext()\n const className = classNames(\n styles.TabAction,\n styles[`size-${size}`],\n classNameProp,\n )\n\n return (\n isNil(href) ? (\n <ToolbarPrimitive.Button\n asChild\n className={className}\n onClick={onClick}\n ref={forwardedRef}\n {...rest}\n >\n <BaseButton>\n <Text\n bold\n typo={getTypoBy(size)}\n >\n { children }\n </Text>\n </BaseButton>\n </ToolbarPrimitive.Button>\n ) : (\n <ToolbarPrimitive.Link\n className={className}\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n // @ts-expect-error\n ref={forwardedRef}\n {...rest}\n >\n <Text\n bold\n typo={getTypoBy(size)}\n >\n { children }\n </Text>\n <Icon\n source={OpenInNewIcon}\n size={getIconSizeBy(size)}\n marginLeft={5}\n />\n </ToolbarPrimitive.Link>\n )\n )\n}) as <Link extends string | undefined>(\n props: TabActionProps<Link> & {\n ref?: React.ForwardedRef<TabActionElement<Link>>\n }\n) => JSX.Element\n"],"names":["Tabs","forwardRef","className","activationMode","dir","children","rest","forwardedRef","React","createElement","TabsPrimitive","Object","assign","classNames","styles","ref","TabListContextProvider","useTabListContext","createContext","size","TabSize","M","TabList","heightContextValue","useMemo","value","TabItems","getButtonSizeBy","L","ButtonSize","S","TabItem","disabled","asChild","Button","text","colorVariant","ButtonColorVariant","MonochromeLight","styleVariant","ButtonStyleVariant","Tertiary","TabContent","TabActions","ToolbarPrimitive","getTypoBy","getIconSizeBy","IconSize","XS","TabAction","classNameProp","href","onClick","isNil","BaseButton","Text","bold","typo","target","rel","Icon","source","OpenInNewIcon","marginLeft"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Toast.js","sources":["../../../../src/components/Toast/Toast.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react'\n\nimport { createPortal } from 'react-dom'\n\nimport {\n CancelIcon,\n CheckCircleFilledIcon,\n ErrorTriangleFilledIcon,\n InfoFilledIcon,\n WifiIcon,\n WifiOffIcon,\n} from '@channel.io/bezier-icons'\nimport classNames from 'classnames'\n\nimport useIsMounted from '~/src/hooks/useIsMounted'\nimport { getZIndexClassName } from '~/src/types/props-helpers'\nimport { ariaAttr } from '~/src/utils/aria'\nimport { noop } from '~/src/utils/function'\nimport { createContext } from '~/src/utils/react'\nimport { px } from '~/src/utils/style'\nimport { isString } from '~/src/utils/type'\n\nimport { BaseButton } from '~/src/components/BaseButton'\nimport {\n Icon,\n IconSize,\n} from '~/src/components/Icon'\nimport { Text } from '~/src/components/Text'\nimport { InvertedThemeProvider } from '~/src/components/ThemeProvider'\nimport {\n useRootElement,\n useWindow,\n} from '~/src/components/WindowProvider'\n\nimport {\n type ToastContextValue,\n ToastPlacement,\n type ToastProps,\n type ToastProviderProps,\n type ToastType,\n} from './Toast.types'\nimport {\n ToastAppearance,\n ToastPreset,\n} from './Toast.types'\nimport useToastProviderValues from './useToastContextValues'\n\nimport styles from './Toast.module.scss'\n\nfunction getToastPreset(preset: ToastPreset) {\n return {\n [ToastPreset.Success]: {\n icon: CheckCircleFilledIcon,\n appearance: ToastAppearance.Success,\n },\n [ToastPreset.Error]: {\n icon: ErrorTriangleFilledIcon,\n appearance: ToastAppearance.Error,\n },\n [ToastPreset.Offline]: {\n icon: WifiOffIcon,\n appearance: ToastAppearance.Warning,\n },\n [ToastPreset.Online]: {\n icon: WifiIcon,\n appearance: ToastAppearance.Success,\n },\n [ToastPreset.Default]: {\n icon: InfoFilledIcon,\n appearance: ToastAppearance.Info,\n },\n }[preset]\n}\n\nexport function Toast({\n placement,\n appearance: appearanceProp,\n preset = ToastPreset.Default,\n icon: iconProp,\n content,\n zIndex = 'toast',\n autoDismiss = true,\n autoDismissTimeout,\n version = 0,\n onDismiss,\n}: ToastProps) {\n const { window } = useWindow()\n\n const dismissTimer = useRef<ReturnType<Window['setTimeout']>>()\n\n const [isSlidingOut, setIsSlidingOut] = useState(false)\n\n const className = classNames(\n styles.ToastElement,\n zIndex && getZIndexClassName(zIndex),\n placement && styles[`placement-${placement}`],\n isSlidingOut && styles['slide-out'],\n )\n\n const runSlideOutAnimation = useCallback(() => {\n setIsSlidingOut(true)\n }, [])\n\n const handleAnimationEnd = useCallback<React.AnimationEventHandler>((event) => {\n if (\n event.animationName === styles['slide-out-left']\n || event.animationName === styles['slide-out-right']\n ) {\n onDismiss?.()\n }\n }, [onDismiss])\n\n useEffect(function startDismissTimer() {\n if (autoDismiss) {\n dismissTimer.current = window.setTimeout(runSlideOutAnimation, autoDismissTimeout)\n }\n\n return function cleanup() {\n if (dismissTimer.current != null) {\n clearTimeout(dismissTimer.current)\n }\n }\n }, [\n autoDismiss,\n autoDismissTimeout,\n runSlideOutAnimation,\n window,\n version,\n ])\n\n const {\n appearance,\n icon,\n } = getToastPreset(preset)\n\n return (\n <div\n role=\"status\"\n className={className}\n onAnimationEnd={handleAnimationEnd}\n aria-hidden={ariaAttr(isSlidingOut)}\n >\n <div\n className={classNames(\n styles.IconWrapper,\n styles[`appearance-${appearanceProp ?? appearance}`],\n )}\n >\n <Icon\n source={iconProp ?? icon}\n size={IconSize.S}\n />\n </div>\n\n <div className={styles.Content}>\n <Text\n className={styles.EllipsisableContent}\n typo=\"14\"\n color=\"txt-black-darkest\"\n truncated={5}\n >\n { isString(content)\n ? content.split('\\n').map((str, index) => (\n // eslint-disable-next-line react/no-array-index-key\n <React.Fragment key={index}>\n { index !== 0 && (<br />) }\n { str }\n </React.Fragment>\n ))\n : content }\n </Text>\n </div>\n\n <BaseButton\n className={styles.Close}\n onClick={runSlideOutAnimation}\n >\n <Icon\n source={CancelIcon}\n size={IconSize.XS}\n />\n </BaseButton>\n </div>\n )\n}\n\nconst [\n ToastContextProvider,\n useToastContext,\n] = createContext<ToastContextValue>({\n add: () => '',\n update: () => '',\n remove: noop,\n removeAll: noop,\n leftToasts: [],\n rightToasts: [],\n})\n\n/**\n * @deprecated\n * FIXME: Styling dependent on specific applications.\n */\nconst GNB_WIDTH = 68\n\nexport function ToastProvider({\n autoDismissTimeout = 3000,\n container: givenContainer,\n offset = {\n left: GNB_WIDTH,\n right: 0,\n bottom: 0,\n },\n children = [],\n}: ToastProviderProps) {\n const rootElement = useRootElement()\n const isMounted = useIsMounted()\n\n const toastContextValue = useToastProviderValues()\n const {\n leftToasts,\n rightToasts,\n dismiss,\n } = toastContextValue\n const container = givenContainer ?? rootElement\n\n const createContainer = useCallback((placement: ToastPlacement, toasts: ToastType[]) => (\n <InvertedThemeProvider>\n <div\n key={placement}\n style={{\n bottom: px(offset?.bottom),\n ...(placement === ToastPlacement.BottomRight\n ? { right: px(offset?.right) }\n : { left: px(offset?.left) }),\n }}\n className={styles.ToastContainer}\n >\n { toasts.map(({\n id,\n onDismiss,\n ...rest\n }) => (\n <Toast\n {...rest}\n key={id}\n placement={placement}\n autoDismissTimeout={autoDismissTimeout}\n onDismiss={() => dismiss(id, onDismiss)}\n />\n )) }\n </div>\n </InvertedThemeProvider>\n ), [\n autoDismissTimeout,\n dismiss,\n offset,\n ])\n\n return (\n <ToastContextProvider value={toastContextValue}>\n { children }\n { isMounted && createPortal(\n [\n createContainer(ToastPlacement.BottomLeft, leftToasts),\n createContainer(ToastPlacement.BottomRight, rightToasts),\n ],\n container,\n ) }\n </ToastContextProvider>\n )\n}\n\nexport function useToast() {\n const context = useToastContext()\n\n if (!context) {\n throw Error('\\'useToast\\' must be used within \\'ToastProvider\\'')\n }\n\n return {\n addToast: context.add,\n updateToast: context.update,\n removeToast: context.remove,\n removeAllToasts: context.removeAll,\n leftToasts: context.leftToasts,\n rightToasts: context.rightToasts,\n }\n}\n"],"names":["getToastPreset","preset","ToastPreset","Success","icon","CheckCircleFilledIcon","appearance","ToastAppearance","Error","ErrorTriangleFilledIcon","Offline","WifiOffIcon","Warning","Online","WifiIcon","Default","InfoFilledIcon","Info","Toast","placement","appearanceProp","iconProp","content","zIndex","autoDismiss","autoDismissTimeout","version","onDismiss","window","useWindow","dismissTimer","useRef","isSlidingOut","setIsSlidingOut","useState","className","classNames","styles","ToastElement","getZIndexClassName","runSlideOutAnimation","useCallback","handleAnimationEnd","event","animationName","useEffect","startDismissTimer","current","setTimeout","cleanup","clearTimeout","React","createElement","role","onAnimationEnd","ariaAttr","IconWrapper","Icon","source","size","IconSize","S","Content","Text","EllipsisableContent","typo","color","truncated","isString","split","map","str","index","Fragment","key","BaseButton","Close","onClick","CancelIcon","XS","ToastContextProvider","useToastContext","createContext","add","update","remove","noop","removeAll","leftToasts","rightToasts","GNB_WIDTH","ToastProvider","container","givenContainer","offset","left","right","bottom","children","rootElement","useRootElement","isMounted","useIsMounted","toastContextValue","useToastProviderValues","dismiss","createContainer","toasts","InvertedThemeProvider","style","px","ToastPlacement","BottomRight","ToastContainer","id","rest","Object","assign","value","createPortal","BottomLeft","useToast","context","addToast","updateToast","removeToast","removeAllToasts"],"mappings":"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"}
1
+ {"version":3,"file":"Toast.js","sources":["../../../../src/components/Toast/Toast.tsx"],"sourcesContent":["import React, {\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react'\n\nimport { createPortal } from 'react-dom'\n\nimport {\n CancelIcon,\n CheckCircleFilledIcon,\n ErrorTriangleFilledIcon,\n InfoFilledIcon,\n WifiIcon,\n WifiOffIcon,\n} from '@channel.io/bezier-icons'\nimport classNames from 'classnames'\n\nimport useIsMounted from '~/src/hooks/useIsMounted'\nimport { getZIndexClassName } from '~/src/types/props-helpers'\nimport { ariaAttr } from '~/src/utils/aria'\nimport { noop } from '~/src/utils/function'\nimport { createContext } from '~/src/utils/react'\nimport { px } from '~/src/utils/style'\nimport { isString } from '~/src/utils/type'\n\nimport { BaseButton } from '~/src/components/BaseButton'\nimport {\n Icon,\n IconSize,\n} from '~/src/components/Icon'\nimport { Text } from '~/src/components/Text'\nimport { InvertedThemeProvider } from '~/src/components/ThemeProvider'\nimport {\n useRootElement,\n useWindow,\n} from '~/src/components/WindowProvider'\n\nimport {\n type ToastContextValue,\n ToastPlacement,\n type ToastProps,\n type ToastProviderProps,\n type ToastType,\n} from './Toast.types'\nimport {\n ToastAppearance,\n ToastPreset,\n} from './Toast.types'\nimport useToastProviderValues from './useToastContextValues'\n\nimport styles from './Toast.module.scss'\n\nfunction getToastPreset(preset: ToastPreset) {\n return {\n [ToastPreset.Success]: {\n icon: CheckCircleFilledIcon,\n appearance: ToastAppearance.Success,\n },\n [ToastPreset.Error]: {\n icon: ErrorTriangleFilledIcon,\n appearance: ToastAppearance.Error,\n },\n [ToastPreset.Offline]: {\n icon: WifiOffIcon,\n appearance: ToastAppearance.Warning,\n },\n [ToastPreset.Online]: {\n icon: WifiIcon,\n appearance: ToastAppearance.Success,\n },\n [ToastPreset.Default]: {\n icon: InfoFilledIcon,\n appearance: ToastAppearance.Info,\n },\n }[preset]\n}\n\nexport function Toast({\n placement,\n appearance: appearanceProp,\n preset = ToastPreset.Default,\n icon: iconProp,\n content,\n zIndex = 'toast',\n autoDismiss = true,\n autoDismissTimeout,\n version = 0,\n onDismiss,\n}: ToastProps) {\n const { window } = useWindow()\n\n const dismissTimer = useRef<ReturnType<Window['setTimeout']>>()\n\n const [isSlidingOut, setIsSlidingOut] = useState(false)\n\n const className = classNames(\n styles.ToastElement,\n zIndex && getZIndexClassName(zIndex),\n placement && styles[`placement-${placement}`],\n isSlidingOut && styles['slide-out'],\n )\n\n const runSlideOutAnimation = useCallback(() => {\n setIsSlidingOut(true)\n }, [])\n\n const handleAnimationEnd = useCallback<React.AnimationEventHandler>((event) => {\n if (\n event.animationName === styles['slide-out-left']\n || event.animationName === styles['slide-out-right']\n ) {\n onDismiss?.()\n }\n }, [onDismiss])\n\n useEffect(function startDismissTimer() {\n if (autoDismiss) {\n dismissTimer.current = window.setTimeout(runSlideOutAnimation, autoDismissTimeout)\n }\n\n return function cleanup() {\n if (dismissTimer.current != null) {\n clearTimeout(dismissTimer.current)\n }\n }\n }, [\n autoDismiss,\n autoDismissTimeout,\n runSlideOutAnimation,\n window,\n version,\n ])\n\n const {\n appearance,\n icon,\n } = getToastPreset(preset)\n\n return (\n <div\n role=\"status\"\n className={className}\n onAnimationEnd={handleAnimationEnd}\n aria-hidden={ariaAttr(isSlidingOut)}\n >\n <div\n className={classNames(\n styles.IconWrapper,\n styles[`appearance-${appearanceProp ?? appearance}`],\n )}\n >\n <Icon\n source={iconProp ?? icon}\n size={IconSize.S}\n />\n </div>\n\n <div className={styles.Content}>\n <Text\n className={styles.EllipsisableContent}\n typo=\"14\"\n color=\"txt-black-darkest\"\n truncated={5}\n >\n { isString(content)\n ? content.split('\\n').map((str, index) => (\n // eslint-disable-next-line react/no-array-index-key\n <React.Fragment key={index}>\n { index !== 0 && (<br />) }\n { str }\n </React.Fragment>\n ))\n : content }\n </Text>\n </div>\n\n <BaseButton\n className={styles.Close}\n onClick={runSlideOutAnimation}\n >\n <Icon\n source={CancelIcon}\n size={IconSize.XS}\n />\n </BaseButton>\n </div>\n )\n}\n\nconst [\n ToastContextProvider,\n useToastContext,\n] = createContext<ToastContextValue>({\n add: () => '',\n update: () => '',\n remove: noop,\n removeAll: noop,\n leftToasts: [],\n rightToasts: [],\n})\n\n/**\n * @deprecated\n * FIXME: Styling dependent on specific applications.\n */\nconst GNB_WIDTH = 68\n\nexport function ToastProvider({\n autoDismissTimeout = 3000,\n container: givenContainer,\n offset = {\n left: GNB_WIDTH,\n right: 0,\n bottom: 0,\n },\n children = [],\n}: ToastProviderProps) {\n const rootElement = useRootElement()\n const isMounted = useIsMounted()\n\n const toastContextValue = useToastProviderValues()\n const {\n leftToasts,\n rightToasts,\n dismiss,\n } = toastContextValue\n const container = givenContainer ?? rootElement\n\n const createContainer = useCallback((placement: ToastPlacement, toasts: ToastType[]) => (\n <InvertedThemeProvider>\n <div\n key={placement}\n style={{\n bottom: px(offset?.bottom),\n ...(placement === ToastPlacement.BottomRight\n ? { right: px(offset?.right) }\n : { left: px(offset?.left) }),\n }}\n className={styles.ToastContainer}\n >\n { toasts.map(({\n id,\n onDismiss,\n ...rest\n }) => (\n <Toast\n {...rest}\n key={id}\n placement={placement}\n autoDismissTimeout={autoDismissTimeout}\n onDismiss={() => dismiss(id, onDismiss)}\n />\n )) }\n </div>\n </InvertedThemeProvider>\n ), [\n autoDismissTimeout,\n dismiss,\n offset,\n ])\n\n return (\n <ToastContextProvider value={toastContextValue}>\n { children }\n { isMounted && createPortal(\n [\n createContainer(ToastPlacement.BottomLeft, leftToasts),\n createContainer(ToastPlacement.BottomRight, rightToasts),\n ],\n container,\n ) }\n </ToastContextProvider>\n )\n}\n\nexport function useToast() {\n const context = useToastContext()\n\n if (!context) {\n throw Error('\\'useToast\\' must be used within \\'ToastProvider\\'')\n }\n\n return {\n addToast: context.add,\n updateToast: context.update,\n removeToast: context.remove,\n removeAllToasts: context.removeAll,\n leftToasts: context.leftToasts,\n rightToasts: context.rightToasts,\n }\n}\n"],"names":["getToastPreset","preset","ToastPreset","Success","icon","CheckCircleFilledIcon","appearance","ToastAppearance","Error","ErrorTriangleFilledIcon","Offline","WifiOffIcon","Warning","Online","WifiIcon","Default","InfoFilledIcon","Info","Toast","placement","appearanceProp","iconProp","content","zIndex","autoDismiss","autoDismissTimeout","version","onDismiss","window","useWindow","dismissTimer","useRef","isSlidingOut","setIsSlidingOut","useState","className","classNames","styles","ToastElement","getZIndexClassName","runSlideOutAnimation","useCallback","handleAnimationEnd","event","animationName","useEffect","startDismissTimer","current","setTimeout","cleanup","clearTimeout","React","createElement","role","onAnimationEnd","ariaAttr","IconWrapper","Icon","source","size","IconSize","S","Content","Text","EllipsisableContent","typo","color","truncated","isString","split","map","str","index","Fragment","key","BaseButton","Close","onClick","CancelIcon","XS","ToastContextProvider","useToastContext","createContext","add","update","remove","noop","removeAll","leftToasts","rightToasts","GNB_WIDTH","ToastProvider","container","givenContainer","offset","left","right","bottom","children","rootElement","useRootElement","isMounted","useIsMounted","toastContextValue","useToastProviderValues","dismiss","createContainer","toasts","InvertedThemeProvider","style","px","ToastPlacement","BottomRight","ToastContainer","id","rest","Object","assign","value","createPortal","BottomLeft","useToast","context","addToast","updateToast","removeToast","removeAllToasts"],"mappings":"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"}
@@ -66,7 +66,6 @@ class ToastService {
66
66
  this.setToasts(newToasts);
67
67
  return true; // remove success
68
68
  };
69
-
70
69
  removeAll = () => {
71
70
  if (!this.toasts.length) {
72
71
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"ToastService.js","sources":["../../../../src/components/Toast/ToastService.ts"],"sourcesContent":["import { v4 as uuid } from 'uuid'\n\nimport {\n type ToastContent,\n type ToastId,\n type ToastOptions,\n type ToastType,\n} from './Toast.types'\n\nconst defaultOptions: ToastOptions = {\n autoDismiss: false,\n rightSide: false,\n}\n\n/* ToastService를 사용하는 이유\nNotion: https://www.notion.so/channelio/Toast-bc13dfbc81314141909250d9cf02c4c7#82b94a73d2f34257ab4799cdeccbc70c\n*/\n\nclass ToastService {\n toasts: ToastType[] = []\n\n getToasts = () => this.toasts\n\n setToasts = (newToasts: ToastType[]) => {\n this.toasts = newToasts\n }\n\n has = (toastId: ToastId) => {\n if (!this.toasts.length) {\n return false\n }\n return this.toasts.reduce((flag, toast) => (toast.id === toastId ? true : flag), false)\n }\n\n add = (content: ToastContent, options: ToastOptions = defaultOptions) => {\n const newId: ToastId = uuid()\n\n if (this.has(newId)) {\n return ''\n }\n\n const newToast: ToastType = {\n id: newId,\n content,\n version: 0,\n ...options,\n }\n const newToasts: ToastType[] = [...this.toasts, newToast]\n this.setToasts(newToasts)\n return newId\n }\n\n update = (toastId: ToastId, content: ToastContent, options: ToastOptions = {}) => {\n if (!this.has(toastId)) {\n return ''\n }\n\n const newToasts: ToastType[] = this.toasts.map((toast) => {\n if (toast.id === toastId) {\n return {\n ...toast,\n ...options,\n version: toast?.version != null ? toast.version + 1 : 0,\n content,\n }\n }\n return toast\n })\n this.setToasts(newToasts)\n return toastId\n }\n\n remove = (id: ToastId): boolean => {\n if (!this.has(id)) {\n return false\n }\n const newToasts: ToastType[] = this.toasts.filter((toast) => toast.id !== id)\n this.setToasts(newToasts)\n return true // remove success\n }\n\n removeAll = () => {\n if (!this.toasts.length) {\n return\n }\n\n this.setToasts([])\n }\n}\n\nexport default ToastService\n"],"names":["defaultOptions","autoDismiss","rightSide","ToastService","toasts","getToasts","setToasts","newToasts","has","toastId","length","reduce","flag","toast","id","add","content","options","newId","uuid","newToast","version","update","map","remove","filter","removeAll"],"mappings":"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"}
1
+ {"version":3,"file":"ToastService.js","sources":["../../../../src/components/Toast/ToastService.ts"],"sourcesContent":["import { v4 as uuid } from 'uuid'\n\nimport {\n type ToastContent,\n type ToastId,\n type ToastOptions,\n type ToastType,\n} from './Toast.types'\n\nconst defaultOptions: ToastOptions = {\n autoDismiss: false,\n rightSide: false,\n}\n\n/* ToastService를 사용하는 이유\nNotion: https://www.notion.so/channelio/Toast-bc13dfbc81314141909250d9cf02c4c7#82b94a73d2f34257ab4799cdeccbc70c\n*/\n\nclass ToastService {\n toasts: ToastType[] = []\n\n getToasts = () => this.toasts\n\n setToasts = (newToasts: ToastType[]) => {\n this.toasts = newToasts\n }\n\n has = (toastId: ToastId) => {\n if (!this.toasts.length) {\n return false\n }\n return this.toasts.reduce((flag, toast) => (toast.id === toastId ? true : flag), false)\n }\n\n add = (content: ToastContent, options: ToastOptions = defaultOptions) => {\n const newId: ToastId = uuid()\n\n if (this.has(newId)) {\n return ''\n }\n\n const newToast: ToastType = {\n id: newId,\n content,\n version: 0,\n ...options,\n }\n const newToasts: ToastType[] = [...this.toasts, newToast]\n this.setToasts(newToasts)\n return newId\n }\n\n update = (toastId: ToastId, content: ToastContent, options: ToastOptions = {}) => {\n if (!this.has(toastId)) {\n return ''\n }\n\n const newToasts: ToastType[] = this.toasts.map((toast) => {\n if (toast.id === toastId) {\n return {\n ...toast,\n ...options,\n version: toast?.version != null ? toast.version + 1 : 0,\n content,\n }\n }\n return toast\n })\n this.setToasts(newToasts)\n return toastId\n }\n\n remove = (id: ToastId): boolean => {\n if (!this.has(id)) {\n return false\n }\n const newToasts: ToastType[] = this.toasts.filter((toast) => toast.id !== id)\n this.setToasts(newToasts)\n return true // remove success\n }\n\n removeAll = () => {\n if (!this.toasts.length) {\n return\n }\n\n this.setToasts([])\n }\n}\n\nexport default ToastService\n"],"names":["defaultOptions","autoDismiss","rightSide","ToastService","toasts","getToasts","setToasts","newToasts","has","toastId","length","reduce","flag","toast","id","add","content","options","newId","uuid","newToast","version","update","map","remove","filter","removeAll"],"mappings":";;;;;;AASA,MAAMA,cAA4B,GAAG;AACnCC,EAAAA,WAAW,EAAE,KAAK;AAClBC,EAAAA,SAAS,EAAE,KAAA;AACb,CAAC,CAAA;;AAED;AACA;AACA;;AAEA,MAAMC,YAAY,CAAC;AACjBC,EAAAA,MAAM,GAAgB,EAAE,CAAA;AAExBC,EAAAA,SAAS,GAAGA,MAAM,IAAI,CAACD,MAAM,CAAA;EAE7BE,SAAS,GAAIC,SAAsB,IAAK;IACtC,IAAI,CAACH,MAAM,GAAGG,SAAS,CAAA;GACxB,CAAA;EAEDC,GAAG,GAAIC,OAAgB,IAAK;AAC1B,IAAA,IAAI,CAAC,IAAI,CAACL,MAAM,CAACM,MAAM,EAAE;AACvB,MAAA,OAAO,KAAK,CAAA;AACd,KAAA;IACA,OAAO,IAAI,CAACN,MAAM,CAACO,MAAM,CAAC,CAACC,IAAI,EAAEC,KAAK,KAAMA,KAAK,CAACC,EAAE,KAAKL,OAAO,GAAG,IAAI,GAAGG,IAAK,EAAE,KAAK,CAAC,CAAA;GACxF,CAAA;AAEDG,EAAAA,GAAG,GAAGA,CAACC,OAAqB,EAAEC,OAAqB,GAAGjB,cAAc,KAAK;AACvE,IAAA,MAAMkB,KAAc,GAAGC,UAAI,EAAE,CAAA;AAE7B,IAAA,IAAI,IAAI,CAACX,GAAG,CAACU,KAAK,CAAC,EAAE;AACnB,MAAA,OAAO,EAAE,CAAA;AACX,KAAA;AAEA,IAAA,MAAME,QAAmB,GAAG;AAC1BN,MAAAA,EAAE,EAAEI,KAAK;MACTF,OAAO;AACPK,MAAAA,OAAO,EAAE,CAAC;MACV,GAAGJ,OAAAA;KACJ,CAAA;IACD,MAAMV,SAAsB,GAAG,CAAC,GAAG,IAAI,CAACH,MAAM,EAAEgB,QAAQ,CAAC,CAAA;AACzD,IAAA,IAAI,CAACd,SAAS,CAACC,SAAS,CAAC,CAAA;AACzB,IAAA,OAAOW,KAAK,CAAA;GACb,CAAA;EAEDI,MAAM,GAAGA,CAACb,OAAgB,EAAEO,OAAqB,EAAEC,OAAqB,GAAG,EAAE,KAAK;AAChF,IAAA,IAAI,CAAC,IAAI,CAACT,GAAG,CAACC,OAAO,CAAC,EAAE;AACtB,MAAA,OAAO,EAAE,CAAA;AACX,KAAA;IAEA,MAAMF,SAAsB,GAAG,IAAI,CAACH,MAAM,CAACmB,GAAG,CAAEV,KAAK,IAAK;AACxD,MAAA,IAAIA,KAAK,CAACC,EAAE,KAAKL,OAAO,EAAE;QACxB,OAAO;AACL,UAAA,GAAGI,KAAK;AACR,UAAA,GAAGI,OAAO;AACVI,UAAAA,OAAO,EAAER,KAAK,EAAEQ,OAAO,IAAI,IAAI,GAAGR,KAAK,CAACQ,OAAO,GAAG,CAAC,GAAG,CAAC;AACvDL,UAAAA,OAAAA;SACD,CAAA;AACH,OAAA;AACA,MAAA,OAAOH,KAAK,CAAA;AACd,KAAC,CAAC,CAAA;AACF,IAAA,IAAI,CAACP,SAAS,CAACC,SAAS,CAAC,CAAA;AACzB,IAAA,OAAOE,OAAO,CAAA;GACf,CAAA;EAEDe,MAAM,GAAIV,EAAW,IAAc;AACjC,IAAA,IAAI,CAAC,IAAI,CAACN,GAAG,CAACM,EAAE,CAAC,EAAE;AACjB,MAAA,OAAO,KAAK,CAAA;AACd,KAAA;AACA,IAAA,MAAMP,SAAsB,GAAG,IAAI,CAACH,MAAM,CAACqB,MAAM,CAAEZ,KAAK,IAAKA,KAAK,CAACC,EAAE,KAAKA,EAAE,CAAC,CAAA;AAC7E,IAAA,IAAI,CAACR,SAAS,CAACC,SAAS,CAAC,CAAA;AACzB,IAAA,OAAO,IAAI,CAAC;GACb,CAAA;EAEDmB,SAAS,GAAGA,MAAM;AAChB,IAAA,IAAI,CAAC,IAAI,CAACtB,MAAM,CAACM,MAAM,EAAE;AACvB,MAAA,OAAA;AACF,KAAA;AAEA,IAAA,IAAI,CAACJ,SAAS,CAAC,EAAE,CAAC,CAAA;GACnB,CAAA;AACH,CAAA;AAEA,qBAAeH,YAAY;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"objectWithoutPropertiesLoose.js","sources":["../../../../../../../../../node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js"],"sourcesContent":["export default function _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}"],"names":["_objectWithoutPropertiesLoose","source","excluded","target","sourceKeys","Object","keys","key","i","length","indexOf"],"mappings":";;;;AAAe,SAASA,6BAA6BA,CAACC,MAAM,EAAEC,QAAQ,EAAE;AACtE,EAAA,IAAID,MAAM,IAAI,IAAI,EAAE,OAAO,EAAE,CAAA;EAC7B,IAAIE,MAAM,GAAG,EAAE,CAAA;AACf,EAAA,IAAIC,UAAU,GAAGC,MAAM,CAACC,IAAI,CAACL,MAAM,CAAC,CAAA;EACpC,IAAIM,GAAG,EAAEC,CAAC,CAAA;AACV,EAAA,KAAKA,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGJ,UAAU,CAACK,MAAM,EAAED,CAAC,EAAE,EAAE;AACtCD,IAAAA,GAAG,GAAGH,UAAU,CAACI,CAAC,CAAC,CAAA;IACnB,IAAIN,QAAQ,CAACQ,OAAO,CAACH,GAAG,CAAC,IAAI,CAAC,EAAE,SAAA;AAChCJ,IAAAA,MAAM,CAACI,GAAG,CAAC,GAAGN,MAAM,CAACM,GAAG,CAAC,CAAA;AAC3B,GAAA;AACA,EAAA,OAAOJ,MAAM,CAAA;AACf;;;;","x_google_ignoreList":[0]}