@razorpay/blade 12.0.3 → 12.1.1
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.
- package/build/lib/native/components/Button/IconButton/IconButton.js +1 -1
- package/build/lib/native/components/Button/IconButton/IconButton.js.map +1 -1
- package/build/lib/native/components/Radio/Radio.js +1 -1
- package/build/lib/native/components/Radio/Radio.js.map +1 -1
- package/build/lib/native/components/Radio/RadioGroup/RadioGroup.js.map +1 -1
- package/build/lib/native/components/Radio/RadioGroup/useRadioGroup.js +1 -1
- package/build/lib/native/components/Radio/RadioGroup/useRadioGroup.js.map +1 -1
- package/build/lib/native/components/Radio/useRadio.js.map +1 -1
- package/build/lib/native/utils/useControllable.js +1 -1
- package/build/lib/native/utils/useControllable.js.map +1 -1
- package/build/lib/web/development/components/BottomSheet/BottomSheet.web.js +17 -1
- package/build/lib/web/development/components/BottomSheet/BottomSheet.web.js.map +1 -1
- package/build/lib/web/development/components/Button/IconButton/IconButton.js +2 -2
- package/build/lib/web/development/components/Button/IconButton/IconButton.js.map +1 -1
- package/build/lib/web/development/components/Button/IconButton/StyledIconButton.web.js +7 -4
- package/build/lib/web/development/components/Button/IconButton/StyledIconButton.web.js.map +1 -1
- package/build/lib/web/development/components/ButtonGroup/ButtonGroup.web.js +7 -17
- package/build/lib/web/development/components/ButtonGroup/ButtonGroup.web.js.map +1 -1
- package/build/lib/web/development/components/Drawer/Drawer.web.js +6 -4
- package/build/lib/web/development/components/Drawer/Drawer.web.js.map +1 -1
- package/build/lib/web/development/components/Radio/Radio.js +3 -2
- package/build/lib/web/development/components/Radio/Radio.js.map +1 -1
- package/build/lib/web/development/components/Radio/RadioGroup/RadioGroup.js.map +1 -1
- package/build/lib/web/development/components/Radio/RadioGroup/useRadioGroup.js +7 -6
- package/build/lib/web/development/components/Radio/RadioGroup/useRadioGroup.js.map +1 -1
- package/build/lib/web/development/components/Radio/useRadio.js.map +1 -1
- package/build/lib/web/development/components/SideNav/SideNav.web.js +22 -8
- package/build/lib/web/development/components/SideNav/SideNav.web.js.map +1 -1
- package/build/lib/web/development/components/SideNav/SideNavItems/SideNavLink.web.js +14 -7
- package/build/lib/web/development/components/SideNav/SideNavItems/SideNavLink.web.js.map +1 -1
- package/build/lib/web/development/components/Tooltip/Tooltip.web.js +7 -1
- package/build/lib/web/development/components/Tooltip/Tooltip.web.js.map +1 -1
- package/build/lib/web/development/components/Tooltip/componentIds.js +6 -0
- package/build/lib/web/development/components/Tooltip/componentIds.js.map +1 -0
- package/build/lib/web/development/components/TopNav/TabNav/TabNavItem.web.js +1 -1
- package/build/lib/web/development/components/TopNav/TabNav/TabNavItem.web.js.map +1 -1
- package/build/lib/web/development/components/TopNav/TopNav.web.js +1 -1
- package/build/lib/web/development/components/TopNav/TopNav.web.js.map +1 -1
- package/build/lib/web/development/utils/useControllable.js +2 -1
- package/build/lib/web/development/utils/useControllable.js.map +1 -1
- package/build/lib/web/production/components/BottomSheet/BottomSheet.web.js +17 -1
- package/build/lib/web/production/components/BottomSheet/BottomSheet.web.js.map +1 -1
- package/build/lib/web/production/components/Button/IconButton/IconButton.js +2 -2
- package/build/lib/web/production/components/Button/IconButton/IconButton.js.map +1 -1
- package/build/lib/web/production/components/Button/IconButton/StyledIconButton.web.js +7 -4
- package/build/lib/web/production/components/Button/IconButton/StyledIconButton.web.js.map +1 -1
- package/build/lib/web/production/components/ButtonGroup/ButtonGroup.web.js +7 -17
- package/build/lib/web/production/components/ButtonGroup/ButtonGroup.web.js.map +1 -1
- package/build/lib/web/production/components/Drawer/Drawer.web.js +6 -4
- package/build/lib/web/production/components/Drawer/Drawer.web.js.map +1 -1
- package/build/lib/web/production/components/Radio/Radio.js +3 -2
- package/build/lib/web/production/components/Radio/Radio.js.map +1 -1
- package/build/lib/web/production/components/Radio/RadioGroup/RadioGroup.js.map +1 -1
- package/build/lib/web/production/components/Radio/RadioGroup/useRadioGroup.js +7 -6
- package/build/lib/web/production/components/Radio/RadioGroup/useRadioGroup.js.map +1 -1
- package/build/lib/web/production/components/Radio/useRadio.js.map +1 -1
- package/build/lib/web/production/components/SideNav/SideNav.web.js +22 -8
- package/build/lib/web/production/components/SideNav/SideNav.web.js.map +1 -1
- package/build/lib/web/production/components/SideNav/SideNavItems/SideNavLink.web.js +14 -7
- package/build/lib/web/production/components/SideNav/SideNavItems/SideNavLink.web.js.map +1 -1
- package/build/lib/web/production/components/Tooltip/Tooltip.web.js +7 -1
- package/build/lib/web/production/components/Tooltip/Tooltip.web.js.map +1 -1
- package/build/lib/web/production/components/Tooltip/componentIds.js +6 -0
- package/build/lib/web/production/components/Tooltip/componentIds.js.map +1 -0
- package/build/lib/web/production/components/TopNav/TabNav/TabNavItem.web.js +1 -1
- package/build/lib/web/production/components/TopNav/TabNav/TabNavItem.web.js.map +1 -1
- package/build/lib/web/production/components/TopNav/TopNav.web.js +1 -1
- package/build/lib/web/production/components/TopNav/TopNav.web.js.map +1 -1
- package/build/lib/web/production/utils/useControllable.js +2 -1
- package/build/lib/web/production/utils/useControllable.js.map +1 -1
- package/build/types/components/index.d.ts +1168 -45
- package/build/types/components/index.native.d.ts +345 -4
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TopNav.web.js","sources":["../../../../../../src/components/TopNav/TopNav.web.tsx"],"sourcesContent":["import React from 'react';\nimport type { BoxProps } from '~components/Box';\nimport { Box } from '~components/Box';\nimport BaseBox from '~components/Box/BaseBox';\nimport {\n SIDE_NAV_EXPANDED_L1_WIDTH_XL,\n SIDE_NAV_EXPANDED_L1_WIDTH_BASE,\n} from '~components/SideNav/tokens';\nimport { size } from '~tokens/global';\nimport { makeSize } from '~utils';\nimport { metaAttribute, MetaConstants } from '~utils/metaAttribute';\nimport type { StyledPropsBlade } from '~components/Box/styledProps';\nimport { componentZIndices } from '~utils/componentZIndices';\nimport type { DataAnalyticsAttribute, BladeElementRef, TestID } from '~utils/types';\nimport { makeAnalyticsAttribute } from '~utils/makeAnalyticsAttribute';\n\nconst TOP_NAV_HEIGHT = size[56];\nconst CONTENT_RIGHT_GAP = size[80];\n\ntype TopNavProps = {\n children: React.ReactNode;\n} & Pick<\n BoxProps,\n | 'padding'\n | 'paddingTop'\n | 'paddingBottom'\n | 'paddingLeft'\n | 'paddingRight'\n | 'paddingX'\n | 'paddingY'\n | 'backgroundColor'\n | 'position'\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'width'\n | 'zIndex'\n | keyof DataAnalyticsAttribute\n> &\n TestID &\n StyledPropsBlade;\n\nconst _TopNav = (\n { children, ...rest }: TopNavProps,\n ref: React.Ref<BladeElementRef>,\n): React.ReactElement => {\n return (\n <Box\n ref={ref as never}\n display=\"grid\"\n gridTemplateColumns=\"auto minmax(0, 1fr) auto\"\n alignItems=\"center\"\n position=\"sticky\"\n top=\"0px\"\n width=\"100%\"\n paddingY={{ base: 'spacing.3', m: 'spacing.0' }}\n paddingX={{ base: 'spacing.4', m: 'spacing.3' }}\n height={makeSize(TOP_NAV_HEIGHT)}\n zIndex={componentZIndices.topnav}\n {...rest}\n {...metaAttribute({ name: MetaConstants.TopNav, testID: rest.testID })}\n {...makeAnalyticsAttribute(rest)}\n >\n {children}\n </Box>\n );\n};\n\nconst TopNav = React.forwardRef(_TopNav);\n\nconst TopNavBrand = ({ children }: { children: React.ReactNode }): React.ReactElement => {\n return (\n <Box\n flexDirection=\"row\"\n marginTop=\"spacing.4\"\n width={{\n base: makeSize(SIDE_NAV_EXPANDED_L1_WIDTH_BASE),\n xl: makeSize(SIDE_NAV_EXPANDED_L1_WIDTH_XL),\n }}\n {...metaAttribute({ name: MetaConstants.TopNavBrand })}\n >\n <BaseBox width=\"100%\" textAlign=\"center\">\n {children}\n </BaseBox>\n </Box>\n );\n};\n\nconst TopNavContent = ({ children }: { children: React.ReactNode }): React.ReactElement => {\n return (\n <BaseBox\n display=\"flex\"\n alignItems=\"center\"\n alignSelf=\"end\"\n paddingRight={{ base: 'spacing.0', m: makeSize(CONTENT_RIGHT_GAP) }}\n {...metaAttribute({ name: MetaConstants.TopNavContent })}\n >\n {children}\n </BaseBox>\n );\n};\n\nconst TopNavActions = ({ children }: { children: React.ReactNode }): React.ReactElement => {\n return (\n <BaseBox\n alignSelf=\"end\"\n display=\"flex\"\n gap=\"spacing.3\"\n alignItems=\"center\"\n marginTop=\"spacing.1\"\n padding=\"spacing.3\"\n backgroundColor=\"surface.background.gray.
|
|
1
|
+
{"version":3,"file":"TopNav.web.js","sources":["../../../../../../src/components/TopNav/TopNav.web.tsx"],"sourcesContent":["import React from 'react';\nimport type { BoxProps } from '~components/Box';\nimport { Box } from '~components/Box';\nimport BaseBox from '~components/Box/BaseBox';\nimport {\n SIDE_NAV_EXPANDED_L1_WIDTH_XL,\n SIDE_NAV_EXPANDED_L1_WIDTH_BASE,\n} from '~components/SideNav/tokens';\nimport { size } from '~tokens/global';\nimport { makeSize } from '~utils';\nimport { metaAttribute, MetaConstants } from '~utils/metaAttribute';\nimport type { StyledPropsBlade } from '~components/Box/styledProps';\nimport { componentZIndices } from '~utils/componentZIndices';\nimport type { DataAnalyticsAttribute, BladeElementRef, TestID } from '~utils/types';\nimport { makeAnalyticsAttribute } from '~utils/makeAnalyticsAttribute';\n\nconst TOP_NAV_HEIGHT = size[56];\nconst CONTENT_RIGHT_GAP = size[80];\n\ntype TopNavProps = {\n children: React.ReactNode;\n} & Pick<\n BoxProps,\n | 'padding'\n | 'paddingTop'\n | 'paddingBottom'\n | 'paddingLeft'\n | 'paddingRight'\n | 'paddingX'\n | 'paddingY'\n | 'backgroundColor'\n | 'position'\n | 'top'\n | 'bottom'\n | 'left'\n | 'right'\n | 'width'\n | 'zIndex'\n | keyof DataAnalyticsAttribute\n> &\n TestID &\n StyledPropsBlade;\n\nconst _TopNav = (\n { children, ...rest }: TopNavProps,\n ref: React.Ref<BladeElementRef>,\n): React.ReactElement => {\n return (\n <Box\n ref={ref as never}\n display=\"grid\"\n gridTemplateColumns=\"auto minmax(0, 1fr) auto\"\n alignItems=\"center\"\n position=\"sticky\"\n top=\"0px\"\n width=\"100%\"\n paddingY={{ base: 'spacing.3', m: 'spacing.0' }}\n paddingX={{ base: 'spacing.4', m: 'spacing.3' }}\n height={makeSize(TOP_NAV_HEIGHT)}\n zIndex={componentZIndices.topnav}\n {...rest}\n {...metaAttribute({ name: MetaConstants.TopNav, testID: rest.testID })}\n {...makeAnalyticsAttribute(rest)}\n >\n {children}\n </Box>\n );\n};\n\nconst TopNav = React.forwardRef(_TopNav);\n\nconst TopNavBrand = ({ children }: { children: React.ReactNode }): React.ReactElement => {\n return (\n <Box\n flexDirection=\"row\"\n marginTop=\"spacing.4\"\n width={{\n base: makeSize(SIDE_NAV_EXPANDED_L1_WIDTH_BASE),\n xl: makeSize(SIDE_NAV_EXPANDED_L1_WIDTH_XL),\n }}\n {...metaAttribute({ name: MetaConstants.TopNavBrand })}\n >\n <BaseBox width=\"100%\" textAlign=\"center\">\n {children}\n </BaseBox>\n </Box>\n );\n};\n\nconst TopNavContent = ({ children }: { children: React.ReactNode }): React.ReactElement => {\n return (\n <BaseBox\n display=\"flex\"\n alignItems=\"center\"\n alignSelf=\"end\"\n paddingRight={{ base: 'spacing.0', m: makeSize(CONTENT_RIGHT_GAP) }}\n {...metaAttribute({ name: MetaConstants.TopNavContent })}\n >\n {children}\n </BaseBox>\n );\n};\n\nconst TopNavActions = ({ children }: { children: React.ReactNode }): React.ReactElement => {\n return (\n <BaseBox\n alignSelf=\"end\"\n display=\"flex\"\n gap=\"spacing.3\"\n alignItems=\"center\"\n marginTop=\"spacing.1\"\n padding=\"spacing.3\"\n backgroundColor=\"surface.background.gray.moderate\"\n borderTopLeftRadius=\"medium\"\n borderTopRightRadius=\"medium\"\n {...metaAttribute({ name: MetaConstants.TopNavActions })}\n >\n {children}\n </BaseBox>\n );\n};\n\nexport { TopNav, TopNavBrand, TopNavContent, TopNavActions };\nexport type { TopNavProps };\n"],"names":["TOP_NAV_HEIGHT","size","CONTENT_RIGHT_GAP","_TopNav","_ref","ref","children","rest","_objectWithoutProperties","_excluded","_jsx","Box","_objectSpread","display","gridTemplateColumns","alignItems","position","top","width","paddingY","base","m","paddingX","height","makeSize","zIndex","componentZIndices","topnav","metaAttribute","name","MetaConstants","TopNav","testID","makeAnalyticsAttribute","React","forwardRef","TopNavBrand","_ref2","flexDirection","marginTop","SIDE_NAV_EXPANDED_L1_WIDTH_BASE","xl","SIDE_NAV_EXPANDED_L1_WIDTH_XL","BaseBox","textAlign","TopNavContent","_ref3","alignSelf","paddingRight","TopNavActions","_ref4","gap","padding","backgroundColor","borderTopLeftRadius","borderTopRightRadius"],"mappings":"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"}
|
|
@@ -31,12 +31,13 @@ function useControllableState(props) {
|
|
|
31
31
|
var value = isControlled && typeof valueProp !== 'undefined' ? valueProp : valueState;
|
|
32
32
|
var updateValue = useCallbackRef(function (next) {
|
|
33
33
|
var skipUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
34
|
+
var extraData = arguments.length > 2 ? arguments[2] : undefined;
|
|
34
35
|
var nextValue = next(value);
|
|
35
36
|
if (!isControlled) setValue(nextValue);
|
|
36
37
|
// We don't want to call onChange if skipUpdate is true or if the value is not changed
|
|
37
38
|
if (!shouldUpdateProp(value, nextValue)) return;
|
|
38
39
|
if (skipUpdate) return;
|
|
39
|
-
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp(nextValue);
|
|
40
|
+
onChangeProp === null || onChangeProp === void 0 ? void 0 : onChangeProp(nextValue, extraData);
|
|
40
41
|
}, [isControlled, onChangeProp, value, shouldUpdateProp]);
|
|
41
42
|
return [value, updateValue];
|
|
42
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useControllable.js","sources":["../../../../../src/utils/useControllable.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable react-hooks/exhaustive-deps */\nimport * as React from 'react';\nimport { useCallbackRef } from './useCallbackRef';\n\ntype ControllableStateSetter<T> = (\n /**\n * Sets the state to the given value\n */\n next: (prevState: T) => T,\n /**\n * If `true`, `onChange` won't be called\n */\n skipUpdate?: boolean,\n) => void;\n\ntype UseControllableStateProps<T> = {\n /**\n * The value to used in controlled mode\n */\n value?: T;\n /**\n * The initial value to be used, in uncontrolled mode\n */\n defaultValue?: T | (() => T);\n /**\n * The callback fired when the value changes\n */\n onChange?: (value: T) => void;\n shouldUpdate?: (prev: T, next: T) => boolean;\n};\n\n/**\n * React hook for using controlling component state.\n *\n * It automatically handles controlled and uncontrolled state,\n * while internally giving us the state value so that we can react to the changes.\n *\n * @example\n * In checkbox we want to internally track the checked state to be able to render the correct Icon\n * but also want to provide controlled and uncontrolled behavior to user\n */\nfunction useControllableState<T>(props: UseControllableStateProps<T>) {\n const {\n value: valueProp,\n defaultValue,\n onChange,\n shouldUpdate = (prev, next) => prev !== next,\n } = props;\n\n const onChangeProp = useCallbackRef(onChange);\n const shouldUpdateProp = useCallbackRef(shouldUpdate);\n\n const [valueState, setValue] = React.useState(defaultValue as T);\n const { current: isControlled } = React.useRef(valueProp !== undefined);\n const value = isControlled && typeof valueProp !== 'undefined' ? valueProp : valueState;\n\n const updateValue: ControllableStateSetter<T> = useCallbackRef(\n (next, skipUpdate = false) => {\n const nextValue = next(value);\n if (!isControlled) setValue(nextValue);\n // We don't want to call onChange if skipUpdate is true or if the value is not changed\n if (!shouldUpdateProp(value, nextValue)) return;\n if (skipUpdate) return;\n onChangeProp?.(nextValue);\n },\n [isControlled, onChangeProp, value, shouldUpdateProp],\n );\n\n return [value, updateValue] as [T, ControllableStateSetter<T>];\n}\n\nexport { useControllableState };\nexport type { ControllableStateSetter };\n"],"names":["useControllableState","props","valueProp","value","defaultValue","onChange","_props$shouldUpdate","shouldUpdate","prev","next","onChangeProp","useCallbackRef","shouldUpdateProp","_React$useState","React","useState","_React$useState2","_slicedToArray","valueState","setValue","_React$useRef","useRef","undefined","isControlled","current","updateValue","skipUpdate","arguments","length","nextValue"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"useControllable.js","sources":["../../../../../src/utils/useControllable.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n/* eslint-disable @typescript-eslint/explicit-function-return-type */\n/* eslint-disable react-hooks/exhaustive-deps */\nimport * as React from 'react';\nimport { useCallbackRef } from './useCallbackRef';\n\ntype ControllableStateSetter<T> = (\n /**\n * Sets the state to the given value\n */\n next: (prevState: T) => T,\n /**\n * If `true`, `onChange` won't be called\n */\n skipUpdate?: boolean,\n /**\n * Extra data to be passed to `onChange` callback\n * Example use case: passing event object to `onChange` callback\n */\n extraData?: any,\n) => void;\n\ntype UseControllableStateProps<T> = {\n /**\n * The value to used in controlled mode\n */\n value?: T;\n /**\n * The initial value to be used, in uncontrolled mode\n */\n defaultValue?: T | (() => T);\n /**\n * The callback fired when the value changes\n */\n onChange?: (value: T, extraData: any) => void;\n shouldUpdate?: (prev: T, next: T) => boolean;\n};\n\n/**\n * React hook for using controlling component state.\n *\n * It automatically handles controlled and uncontrolled state,\n * while internally giving us the state value so that we can react to the changes.\n *\n * @example\n * In checkbox we want to internally track the checked state to be able to render the correct Icon\n * but also want to provide controlled and uncontrolled behavior to user\n */\nfunction useControllableState<T>(props: UseControllableStateProps<T>) {\n const {\n value: valueProp,\n defaultValue,\n onChange,\n shouldUpdate = (prev, next) => prev !== next,\n } = props;\n\n const onChangeProp = useCallbackRef(onChange);\n const shouldUpdateProp = useCallbackRef(shouldUpdate);\n\n const [valueState, setValue] = React.useState(defaultValue as T);\n const { current: isControlled } = React.useRef(valueProp !== undefined);\n const value = isControlled && typeof valueProp !== 'undefined' ? valueProp : valueState;\n\n const updateValue: ControllableStateSetter<T> = useCallbackRef(\n (next, skipUpdate = false, extraData) => {\n const nextValue = next(value);\n if (!isControlled) setValue(nextValue);\n // We don't want to call onChange if skipUpdate is true or if the value is not changed\n if (!shouldUpdateProp(value, nextValue)) return;\n if (skipUpdate) return;\n onChangeProp?.(nextValue, extraData);\n },\n [isControlled, onChangeProp, value, shouldUpdateProp],\n );\n\n return [value, updateValue] as [T, ControllableStateSetter<T>];\n}\n\nexport { useControllableState };\nexport type { ControllableStateSetter };\n"],"names":["useControllableState","props","valueProp","value","defaultValue","onChange","_props$shouldUpdate","shouldUpdate","prev","next","onChangeProp","useCallbackRef","shouldUpdateProp","_React$useState","React","useState","_React$useState2","_slicedToArray","valueState","setValue","_React$useRef","useRef","undefined","isControlled","current","updateValue","skipUpdate","arguments","length","extraData","nextValue"],"mappings":";;;;AAuCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,oBAAoBA,CAAIC,KAAmC,EAAE;AACpE,EAAA,IACSC,SAAS,GAIdD,KAAK,CAJPE,KAAK;IACLC,YAAY,GAGVH,KAAK,CAHPG,YAAY;IACZC,QAAQ,GAENJ,KAAK,CAFPI,QAAQ;IAAAC,mBAAA,GAENL,KAAK,CADPM,YAAY;AAAZA,IAAAA,YAAY,GAAAD,mBAAA,KAAA,KAAA,CAAA,GAAG,UAACE,IAAI,EAAEC,IAAI,EAAA;MAAA,OAAKD,IAAI,KAAKC,IAAI,CAAA;AAAA,KAAA,GAAAH,mBAAA,CAAA;AAG9C,EAAA,IAAMI,YAAY,GAAGC,cAAc,CAACN,QAAQ,CAAC,CAAA;AAC7C,EAAA,IAAMO,gBAAgB,GAAGD,cAAc,CAACJ,YAAY,CAAC,CAAA;AAErD,EAAA,IAAAM,eAAA,GAA+BC,KAAK,CAACC,QAAQ,CAACX,YAAiB,CAAC;IAAAY,gBAAA,GAAAC,cAAA,CAAAJ,eAAA,EAAA,CAAA,CAAA;AAAzDK,IAAAA,UAAU,GAAAF,gBAAA,CAAA,CAAA,CAAA;AAAEG,IAAAA,QAAQ,GAAAH,gBAAA,CAAA,CAAA,CAAA,CAAA;EAC3B,IAAAI,aAAA,GAAkCN,KAAK,CAACO,MAAM,CAACnB,SAAS,KAAKoB,SAAS,CAAC;IAAtDC,YAAY,GAAAH,aAAA,CAArBI,OAAO,CAAA;EACf,IAAMrB,KAAK,GAAGoB,YAAY,IAAI,OAAOrB,SAAS,KAAK,WAAW,GAAGA,SAAS,GAAGgB,UAAU,CAAA;AAEvF,EAAA,IAAMO,WAAuC,GAAGd,cAAc,CAC5D,UAACF,IAAI,EAAoC;AAAA,IAAA,IAAlCiB,UAAU,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAL,SAAA,GAAAK,SAAA,CAAA,CAAA,CAAA,GAAG,KAAK,CAAA;IAAA,IAAEE,SAAS,GAAAF,SAAA,CAAAC,MAAA,GAAAD,CAAAA,GAAAA,SAAA,MAAAL,SAAA,CAAA;AAClC,IAAA,IAAMQ,SAAS,GAAGrB,IAAI,CAACN,KAAK,CAAC,CAAA;AAC7B,IAAA,IAAI,CAACoB,YAAY,EAAEJ,QAAQ,CAACW,SAAS,CAAC,CAAA;AACtC;AACA,IAAA,IAAI,CAAClB,gBAAgB,CAACT,KAAK,EAAE2B,SAAS,CAAC,EAAE,OAAA;AACzC,IAAA,IAAIJ,UAAU,EAAE,OAAA;IAChBhB,YAAY,KAAA,IAAA,IAAZA,YAAY,KAAZA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,YAAY,CAAGoB,SAAS,EAAED,SAAS,CAAC,CAAA;GACrC,EACD,CAACN,YAAY,EAAEb,YAAY,EAAEP,KAAK,EAAES,gBAAgB,CACtD,CAAC,CAAA;AAED,EAAA,OAAO,CAACT,KAAK,EAAEsB,WAAW,CAAC,CAAA;AAC7B;;;;"}
|