construct-hub-webapp 0.1.255 → 0.1.256

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 (38) hide show
  1. package/build/asset-manifest.json +29 -29
  2. package/build/index.html +1 -1
  3. package/build/service-worker.js +1 -1
  4. package/build/service-worker.js.map +1 -1
  5. package/build/static/js/{10.4d9b4ad2.chunk.js → 10.85c70ef7.chunk.js} +1 -1
  6. package/build/static/js/{10.4d9b4ad2.chunk.js.map → 10.85c70ef7.chunk.js.map} +1 -1
  7. package/build/static/js/11.cc98cce3.chunk.js +2 -0
  8. package/build/static/js/11.cc98cce3.chunk.js.map +1 -0
  9. package/build/static/js/{12.23aa8975.chunk.js → 12.161d7784.chunk.js} +2 -2
  10. package/build/static/js/{12.23aa8975.chunk.js.map → 12.161d7784.chunk.js.map} +1 -1
  11. package/build/static/js/{13.92cdbaff.chunk.js → 13.c1230b1f.chunk.js} +1 -1
  12. package/build/static/js/{13.92cdbaff.chunk.js.map → 13.c1230b1f.chunk.js.map} +1 -1
  13. package/build/static/js/{2.dbf90c22.chunk.js → 2.4cb37f37.chunk.js} +2 -2
  14. package/build/static/js/{2.dbf90c22.chunk.js.map → 2.4cb37f37.chunk.js.map} +1 -1
  15. package/build/static/js/{5.3919b128.chunk.js → 5.2f773d84.chunk.js} +2 -2
  16. package/build/static/js/{5.3919b128.chunk.js.LICENSE.txt → 5.2f773d84.chunk.js.LICENSE.txt} +0 -0
  17. package/build/static/js/{5.3919b128.chunk.js.map → 5.2f773d84.chunk.js.map} +1 -1
  18. package/build/static/js/{6.7cbae0bb.chunk.js → 6.e528e116.chunk.js} +3 -3
  19. package/build/static/js/{6.7cbae0bb.chunk.js.LICENSE.txt → 6.e528e116.chunk.js.LICENSE.txt} +0 -0
  20. package/build/static/js/{6.7cbae0bb.chunk.js.map → 6.e528e116.chunk.js.map} +1 -1
  21. package/build/static/js/{7.9653e0a4.chunk.js → 7.5cdcd2ea.chunk.js} +2 -2
  22. package/build/static/js/{7.9653e0a4.chunk.js.map → 7.5cdcd2ea.chunk.js.map} +1 -1
  23. package/build/static/js/8.b8f9b0c8.chunk.js +2 -0
  24. package/build/static/js/8.b8f9b0c8.chunk.js.map +1 -0
  25. package/build/static/js/{9.a8590c2f.chunk.js → 9.340b7752.chunk.js} +2 -2
  26. package/build/static/js/{9.a8590c2f.chunk.js.map → 9.340b7752.chunk.js.map} +1 -1
  27. package/build/static/js/main.792688eb.chunk.js +2 -0
  28. package/build/static/js/main.792688eb.chunk.js.map +1 -0
  29. package/build/static/js/runtime-main.fd23188e.js +2 -0
  30. package/build/static/js/{runtime-main.3169756d.js.map → runtime-main.fd23188e.js.map} +1 -1
  31. package/package.json +1 -1
  32. package/build/static/js/11.854e84b2.chunk.js +0 -2
  33. package/build/static/js/11.854e84b2.chunk.js.map +0 -1
  34. package/build/static/js/8.c543459b.chunk.js +0 -2
  35. package/build/static/js/8.c543459b.chunk.js.map +0 -1
  36. package/build/static/js/main.33715459.chunk.js +0 -2
  37. package/build/static/js/main.33715459.chunk.js.map +0 -1
  38. package/build/static/js/runtime-main.3169756d.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","../../../src/use-accordion.ts","../../../src/accordion.tsx","views/FAQ/FAQItem.tsx","views/FAQ/FAQLink.tsx","views/FAQ/FAQSection.tsx","views/FAQ/FAQ.tsx"],"names":["pageInfo","home","event","name","faq","packageProfile","search","siteTerms","notFound","page","pageType","Page","children","meta","pageName","trackPageView","usePageView","useEffect","suffix","title","description","formattedTitle","Helmet","process","content","charSet","property","createDescendantContext","useAccordion","props","index","allowToggle","condition","isUndefined","isArray","warn","message","allowMultipleWarning","allowMultipleAndAllowToggleWarning","descendants","useAccordionDescendants","useState","useUnmountEffect","setFocusedIndex","useControllableState","value","defaultValue","defaultIndex","onChange","setIndex","htmlProps","getAccordionItemProps","idx","isOpen","allowMultiple","nextState","addItem","removeItem","focusedIndex","createContext","errorMessage","useAccordionItem","id","useAccordionContext","buttonRef","useRef","useIds","focusableNotDisabledWarning","useAccordionDescendant","disabled","isDisabled","isFocusable","warnIfOpenAndDisabled","onClick","useCallback","onKeyDown","action","ArrowDown","next","focus","ArrowUp","prev","Home","first","End","last","normalizeEventKey","onFocus","getButtonProps","ref","type","mergeRefs","register","callAllHandlers","getPanelProps","role","hidden","buttonId","onOpen","onClose","Accordion","forwardRef","reduceMotion","styles","useMultiStyleConfig","omitThemingProps","ctx","context","className","cx","AccordionItem","containerStyles","useStyles","overflowAnchor","React","__css","runIfFn","isExpanded","AccordionButton","buttonProps","useAccordionItemContext","buttonStyles","display","alignItems","width","outline","AccordionPanel","panelProps","_className","child","in","AccordionIcon","iconStyles","opacity","transform","transition","undefined","transformOrigin","viewBox","fill","d","FAQItem","question","flex","py","textAlign","as","ml","size","px","color","fontSize","sx","p","marginTop","marginBottom","FAQLink","href","ExternalLink","hasWarning","textDecoration","FAQSection","heading","w","FAQ","bg","h","mx"],"mappings":"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","file":"static/js/13.92cdbaff.chunk.js","sourcesContent":["export const pageInfo = {\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\nexport const Page: FunctionComponent<PageProps> = ({\n children,\n meta,\n pageName,\n}) => {\n const trackPageView = usePageView(pageInfo[pageName]);\n\n useEffect(() => {\n trackPageView();\n }, [trackPageView]);\n\n const { suffix = true, title, description } = meta;\n const formattedTitle = suffix ? `${title} - Construct Hub` : title;\n\n return (\n <>\n <Helmet>\n {process.env.NODE_ENV === \"development\" && (\n <meta\n content=\"default-src 'self' 'unsafe-inline' https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; connect-src 'self' https://*.shortbread.aws.dev ws://localhost:3000 https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; frame-src 'none'; img-src 'self' https://* http://*.omtrdc.net; object-src 'none'; style-src 'self' 'unsafe-inline';\"\n httpEquiv=\"Content-Security-Policy\"\n />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n\n <title>{formattedTitle}</title>\n <meta content={formattedTitle} property=\"og:title\" />\n <meta content={formattedTitle} name=\"twitter:title\" />\n <meta content=\"summary\" name=\"twitter:card\" />\n\n <meta content={description} name=\"description\" />\n <meta content={description} property=\"og:description\" />\n <meta content={description} name=\"twitter:description\" />\n </Helmet>\n {children}\n </>\n );\n};\n","import { createDescendantContext } from \"@chakra-ui/descendant\"\nimport {\n useControllableState,\n useIds,\n useUnmountEffect,\n} from \"@chakra-ui/hooks\"\nimport {\n createContext,\n EventKeyMap,\n mergeRefs,\n PropGetter,\n} from \"@chakra-ui/react-utils\"\nimport {\n addItem,\n callAllHandlers,\n focus,\n isArray,\n isUndefined,\n normalizeEventKey,\n removeItem,\n warn,\n} from \"@chakra-ui/utils\"\nimport React, { useCallback, useRef, useState } from \"react\"\n\n/* -------------------------------------------------------------------------------------------------\n * Create context to track descendants and their indices\n * -----------------------------------------------------------------------------------------------*/\n\nexport const [\n AccordionDescendantsProvider,\n useAccordionDescendantsContext,\n useAccordionDescendants,\n useAccordionDescendant,\n] = createDescendantContext<HTMLButtonElement>()\n\n/* -------------------------------------------------------------------------------------------------\n * useAccordion - The root react hook that manages all accordion items\n * -----------------------------------------------------------------------------------------------*/\n\nexport type ExpandedIndex = number | number[]\n\nexport interface UseAccordionProps {\n /**\n * If `true`, multiple accordion items can be expanded at once.\n */\n allowMultiple?: boolean\n /**\n * If `true`, any expanded accordion item can be collapsed again.\n */\n allowToggle?: boolean\n /**\n * The index(es) of the expanded accordion item\n */\n index?: ExpandedIndex\n /**\n * The initial index(es) of the expanded accordion item\n */\n defaultIndex?: ExpandedIndex\n /**\n * The callback invoked when accordion items are expanded or collapsed.\n */\n onChange?(expandedIndex: ExpandedIndex): void\n}\n\n/**\n * useAccordion hook provides all the state and focus management logic\n * for accordion items.\n */\nexport function useAccordion(props: UseAccordionProps) {\n const {\n onChange,\n defaultIndex,\n index: indexProp,\n allowMultiple,\n allowToggle,\n ...htmlProps\n } = props\n\n // validate the props and `warn` if used incorrectly\n allowMultipleWarning(props)\n allowMultipleAndAllowToggleWarning(props)\n\n /**\n * Think of this as the register to each accordion item.\n * We used to manage focus between accordion item buttons.\n *\n * Every accordion item, registers their button refs in this context\n */\n const descendants = useAccordionDescendants()\n\n /**\n * This state is used to track the index focused accordion\n * button when click on the button, tab on the button, or\n * use the down/up arrow to navigate.\n */\n const [focusedIndex, setFocusedIndex] = useState(-1)\n\n /**\n * Reset focused index when accordion unmounts\n * or descendants change\n */\n useUnmountEffect(() => {\n setFocusedIndex(-1)\n })\n\n /**\n * Hook that manages the controlled and un-controlled state\n * for the accordion.\n */\n const [index, setIndex] = useControllableState({\n value: indexProp,\n defaultValue() {\n if (allowMultiple) return defaultIndex ?? []\n return defaultIndex ?? -1\n },\n onChange,\n })\n\n /**\n * Gets the `isOpen` and `onChange` props for a child accordion item based on\n * the child's index.\n *\n * @param idx {number} The index of the child accordion item\n */\n const getAccordionItemProps = (idx: number | null) => {\n let isOpen = false\n if (idx !== null) {\n isOpen = isArray(index) ? index.includes(idx) : index === idx\n }\n\n const onChange = (isOpen: boolean) => {\n if (idx === null) return\n\n if (allowMultiple && isArray(index)) {\n const nextState = isOpen ? addItem(index, idx) : removeItem(index, idx)\n setIndex(nextState)\n } else if (isOpen) {\n setIndex(idx)\n } else if (allowToggle) {\n setIndex(-1)\n }\n }\n\n return { isOpen, onChange }\n }\n\n return {\n index,\n setIndex,\n htmlProps,\n getAccordionItemProps,\n focusedIndex,\n setFocusedIndex,\n descendants,\n }\n}\n\nexport type UseAccordionReturn = ReturnType<typeof useAccordion>\n\n/* -------------------------------------------------------------------------------------------------\n * Create context for the root accordion logic\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AccordionContext\n extends Omit<UseAccordionReturn, \"htmlProps\" | \"descendants\"> {\n reduceMotion: boolean\n}\n\nexport const [\n AccordionProvider,\n useAccordionContext,\n] = createContext<AccordionContext>({\n name: \"AccordionContext\",\n errorMessage:\n \"useAccordionContext: `context` is undefined. Seems you forgot to wrap the accordion components in `<Accordion />`\",\n})\n\n/* -------------------------------------------------------------------------------------------------\n * Hook for a single accordion item\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface UseAccordionItemProps {\n /**\n * If `true`, the accordion item will be disabled.\n */\n isDisabled?: boolean\n /**\n * If `true`, the accordion item will be focusable.\n */\n isFocusable?: boolean\n /**\n * A unique id for the accordion item.\n */\n id?: string\n}\n\n/**\n * useAccordionItem\n *\n * React hook that provides the open/close functionality\n * for an accordion item and its children\n */\nexport function useAccordionItem(props: UseAccordionItemProps) {\n const { isDisabled, isFocusable, id, ...htmlProps } = props\n const { getAccordionItemProps, setFocusedIndex } = useAccordionContext()\n\n const buttonRef = useRef<HTMLElement>(null)\n\n /**\n * Generate unique ids for all accordion item components (button and panel)\n */\n const [buttonId, panelId] = useIds(id, `accordion-button`, `accordion-panel`)\n\n focusableNotDisabledWarning(props)\n\n /**\n * Think of this as a way to register this accordion item\n * with its parent `useAccordion`\n */\n const { register, index, descendants } = useAccordionDescendant({\n disabled: isDisabled && !isFocusable,\n })\n\n const { isOpen, onChange } = getAccordionItemProps(\n index === -1 ? null : index,\n )\n\n warnIfOpenAndDisabled({ isOpen, isDisabled })\n\n const onOpen = () => {\n onChange?.(true)\n }\n\n const onClose = () => {\n onChange?.(false)\n }\n\n /**\n * Toggle the visibility of the accordion item\n */\n const onClick = useCallback(() => {\n onChange?.(!isOpen)\n setFocusedIndex(index)\n }, [index, setFocusedIndex, isOpen, onChange])\n\n /**\n * Manage keyboard navigation between accordion items.\n */\n const onKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n const eventKey = normalizeEventKey(event)\n\n const keyMap: EventKeyMap = {\n ArrowDown: () => {\n const next = descendants.nextEnabled(index)\n if (next) focus(next.node)\n },\n ArrowUp: () => {\n const prev = descendants.prevEnabled(index)\n if (prev) focus(prev.node)\n },\n Home: () => {\n const first = descendants.firstEnabled()\n if (first) focus(first.node)\n },\n End: () => {\n const last = descendants.lastEnabled()\n if (last) focus(last.node)\n },\n }\n\n const action = keyMap[eventKey]\n\n if (action) {\n event.preventDefault()\n action(event)\n }\n },\n [descendants, index],\n )\n\n /**\n * Since each accordion item's button still remains tabbable, let's\n * update the focusedIndex when it receives focus\n */\n const onFocus = useCallback(() => {\n setFocusedIndex(index)\n }, [setFocusedIndex, index])\n\n const getButtonProps: PropGetter<HTMLButtonElement> = useCallback(\n (props = {}, ref = null) => ({\n ...props,\n type: \"button\",\n ref: mergeRefs(register, buttonRef, ref),\n id: buttonId,\n disabled: !!isDisabled,\n \"aria-expanded\": !!isOpen,\n \"aria-controls\": panelId,\n onClick: callAllHandlers(props.onClick, onClick),\n onFocus: callAllHandlers(props.onFocus, onFocus),\n onKeyDown: callAllHandlers(props.onKeyDown, onKeyDown),\n }),\n [\n buttonId,\n isDisabled,\n isOpen,\n onClick,\n onFocus,\n onKeyDown,\n panelId,\n register,\n ],\n )\n\n const getPanelProps: PropGetter = useCallback(\n (props = {}, ref = null) => ({\n ...props,\n ref,\n role: \"region\",\n id: panelId,\n \"aria-labelledby\": buttonId,\n hidden: !isOpen,\n }),\n [buttonId, isOpen, panelId],\n )\n\n return {\n isOpen,\n isDisabled,\n isFocusable,\n onOpen,\n onClose,\n getButtonProps,\n getPanelProps,\n htmlProps,\n }\n}\n\nexport type UseAccordionItemReturn = ReturnType<typeof useAccordionItem>\n\n/* -------------------------------------------------------------------------------------------------\n * Validate accordion and accordion item props, and emit warnings.\n * -----------------------------------------------------------------------------------------------*/\n\nfunction allowMultipleWarning(props: UseAccordionProps) {\n const index = props.index || props.defaultIndex\n const condition =\n !isUndefined(index) && !isArray(index) && props.allowMultiple\n\n warn({\n condition: !!condition,\n message: `If 'allowMultiple' is passed, then 'index' or 'defaultIndex' must be an array. You passed: ${typeof index},`,\n })\n}\n\nfunction allowMultipleAndAllowToggleWarning(props: UseAccordionProps) {\n warn({\n condition: !!(props.allowMultiple && props.allowToggle),\n message: `If 'allowMultiple' is passed, 'allowToggle' will be ignored. Either remove 'allowToggle' or 'allowMultiple' depending on whether you want multiple accordions visible or not`,\n })\n}\n\nfunction focusableNotDisabledWarning(props: UseAccordionItemProps) {\n warn({\n condition: !!(props.isFocusable && !props.isDisabled),\n message: `Using only 'isFocusable', this prop is reserved for situations where you pass 'isDisabled' but you still want the element to receive focus (A11y). Either remove it or pass 'isDisabled' as well.\n `,\n })\n}\n\nfunction warnIfOpenAndDisabled(props: {\n isOpen: boolean\n isDisabled?: boolean\n}) {\n warn({\n condition: props.isOpen && !!props.isDisabled,\n message: \"Cannot open a disabled accordion item\",\n })\n}\n","import { Icon, IconProps } from \"@chakra-ui/icon\"\nimport {\n chakra,\n forwardRef,\n omitThemingProps,\n StylesProvider,\n SystemStyleObject,\n ThemingProps,\n useMultiStyleConfig,\n useStyles,\n HTMLChakraProps,\n} from \"@chakra-ui/system\"\nimport { Collapse } from \"@chakra-ui/transition\"\nimport { cx, Omit, runIfFn, __DEV__ } from \"@chakra-ui/utils\"\nimport { createContext, MaybeRenderProp } from \"@chakra-ui/react-utils\"\nimport * as React from \"react\"\nimport {\n AccordionProvider,\n useAccordion,\n useAccordionContext,\n useAccordionItem,\n UseAccordionItemProps,\n UseAccordionItemReturn,\n UseAccordionProps,\n AccordionDescendantsProvider,\n} from \"./use-accordion\"\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion - The wrapper that provides context for all accordion items\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface AccordionProps\n extends UseAccordionProps,\n Omit<HTMLChakraProps<\"div\">, keyof UseAccordionProps>,\n ThemingProps<\"Accordion\"> {\n /**\n * If `true`, height animation and transitions will be disabled.\n */\n reduceMotion?: boolean\n}\n\n/**\n * The wrapper that provides context and focus management\n * for all accordion items.\n *\n * It wraps all accordion items in a `div` for better grouping.\n * @see Docs https://chakra-ui.com/accordion\n */\nexport const Accordion = forwardRef<AccordionProps, \"div\">(\n ({ children, reduceMotion, ...props }, ref) => {\n const styles = useMultiStyleConfig(\"Accordion\", props)\n const ownProps = omitThemingProps(props)\n\n const { htmlProps, descendants, ...context } = useAccordion(ownProps)\n\n const ctx = React.useMemo(\n () => ({ ...context, reduceMotion: !!reduceMotion }),\n [context, reduceMotion],\n )\n\n return (\n <AccordionDescendantsProvider value={descendants}>\n <AccordionProvider value={ctx}>\n <StylesProvider value={styles}>\n <chakra.div\n ref={ref}\n {...htmlProps}\n className={cx(\"chakra-accordion\", props.className)}\n >\n {children}\n </chakra.div>\n </StylesProvider>\n </AccordionProvider>\n </AccordionDescendantsProvider>\n )\n },\n)\n\nif (__DEV__) {\n Accordion.displayName = \"Accordion\"\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion Item\n * -----------------------------------------------------------------------------------------------*/\n\ntype AccordionItemContext = Omit<UseAccordionItemReturn, \"htmlProps\">\n\nconst [\n AccordionItemProvider,\n useAccordionItemContext,\n] = createContext<AccordionItemContext>({\n name: \"AccordionItemContext\",\n errorMessage:\n \"useAccordionItemContext: `context` is undefined. Seems you forgot to wrap the accordion item parts in `<AccordionItem />` \",\n})\n\nexport interface AccordionItemProps\n extends Omit<HTMLChakraProps<\"div\">, keyof UseAccordionItemProps>,\n UseAccordionItemProps {\n children?: MaybeRenderProp<{\n isExpanded: boolean\n isDisabled: boolean\n }>\n}\n\n/**\n * AccordionItem is a single accordion that provides the open-close\n * behavior when the accordion button is clicked.\n *\n * It also provides context for the accordion button and panel.\n */\nexport const AccordionItem = forwardRef<AccordionItemProps, \"div\">(\n (props, ref) => {\n const { children, className } = props\n const { htmlProps, ...context } = useAccordionItem(props)\n\n const styles = useStyles()\n const containerStyles: SystemStyleObject = {\n ...styles.container,\n overflowAnchor: \"none\",\n }\n\n const ctx = React.useMemo(() => context, [context])\n\n return (\n <AccordionItemProvider value={ctx}>\n <chakra.div\n ref={ref}\n {...htmlProps}\n className={cx(\"chakra-accordion__item\", className)}\n __css={containerStyles}\n >\n {runIfFn(children, {\n isExpanded: !!context.isOpen,\n isDisabled: !!context.isDisabled,\n })}\n </chakra.div>\n </AccordionItemProvider>\n )\n },\n)\n\nif (__DEV__) {\n AccordionItem.displayName = \"AccordionItem\"\n}\n\n/**\n * React hook to get the state and actions of an accordion item\n */\nexport function useAccordionItemState() {\n const { isOpen, isDisabled, onClose, onOpen } = useAccordionItemContext()\n return { isOpen, onClose, isDisabled, onOpen }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion Item => Button\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface AccordionButtonProps extends HTMLChakraProps<\"button\"> {}\n\n/**\n * AccordionButton is used expands and collapses an accordion item.\n * It must be a child of `AccordionItem`.\n *\n * Note 🚨: Each accordion button must be wrapped in an heading tag,\n * that is appropriate for the information architecture of the page.\n */\nexport const AccordionButton = forwardRef<AccordionButtonProps, \"button\">(\n (props, ref) => {\n const { getButtonProps } = useAccordionItemContext()\n const buttonProps = getButtonProps(props, ref)\n\n const styles = useStyles()\n const buttonStyles: SystemStyleObject = {\n display: \"flex\",\n alignItems: \"center\",\n width: \"100%\",\n outline: 0,\n ...styles.button,\n }\n\n return (\n <chakra.button\n {...buttonProps}\n className={cx(\"chakra-accordion__button\", props.className)}\n __css={buttonStyles}\n />\n )\n },\n)\n\nif (__DEV__) {\n AccordionButton.displayName = \"AccordionButton\"\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion Item => Panel\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface AccordionPanelProps extends HTMLChakraProps<\"div\"> {}\n\n/**\n * Accordion panel that holds the content for each accordion.\n * It shows and hides based on the state login from the `AccordionItem`.\n *\n * It uses the `Collapse` component to animate its height.\n */\nexport const AccordionPanel = forwardRef<AccordionPanelProps, \"div\">(\n (props, ref) => {\n const { reduceMotion } = useAccordionContext()\n const { getPanelProps, isOpen } = useAccordionItemContext()\n\n // remove `hidden` prop, 'coz we're using height animation\n const panelProps = getPanelProps(props, ref)\n\n const _className = cx(\"chakra-accordion__panel\", props.className)\n const styles = useStyles()\n\n if (!reduceMotion) {\n delete panelProps.hidden\n }\n\n const child = (\n <chakra.div {...panelProps} __css={styles.panel} className={_className} />\n )\n\n if (!reduceMotion) {\n return <Collapse in={isOpen}>{child}</Collapse>\n }\n\n return child\n },\n)\n\nif (__DEV__) {\n AccordionPanel.displayName = \"AccordionPanel\"\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion Item => Icon\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * AccordionIcon that gives a visual cue of the open/close state of the accordion item.\n * It rotates `180deg` based on the open/close state.\n */\nexport const AccordionIcon: React.FC<IconProps> = (props) => {\n const { isOpen, isDisabled } = useAccordionItemContext()\n const { reduceMotion } = useAccordionContext()\n\n const _className = cx(\"chakra-accordion__icon\", props.className)\n const styles = useStyles()\n\n const iconStyles: SystemStyleObject = {\n opacity: isDisabled ? 0.4 : 1,\n transform: isOpen ? \"rotate(-180deg)\" : undefined,\n transition: reduceMotion ? undefined : \"transform 0.2s\",\n transformOrigin: \"center\",\n ...styles.icon,\n }\n\n return (\n <Icon\n viewBox=\"0 0 24 24\"\n aria-hidden\n className={_className}\n __css={iconStyles}\n {...props}\n >\n <path\n fill=\"currentColor\"\n d=\"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z\"\n />\n </Icon>\n )\n}\n\nif (__DEV__) {\n AccordionIcon.displayName = \"AccordionIcon\"\n}\n","import {\n Heading,\n Text,\n AccordionIcon,\n AccordionButton,\n AccordionItem,\n AccordionPanel,\n Box,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent, ReactChild } from \"react\";\n\nexport interface FAQItemProps {\n question: ReactChild;\n}\n\nexport const FAQItem: FunctionComponent<FAQItemProps> = ({\n question,\n children,\n}) => (\n <AccordionItem>\n <AccordionButton>\n <Box flex=\"1\" py={2} textAlign=\"left\">\n <Heading as=\"h3\" ml={8} size=\"sm\">\n {question}\n </Heading>\n </Box>\n <AccordionIcon />\n </AccordionButton>\n <AccordionPanel px={12} py={4}>\n <Text\n color=\"gray.800\"\n fontSize=\"md\"\n sx={{ p: { marginTop: \"0\", marginBottom: \"4\" } }}\n >\n {children}\n </Text>\n </AccordionPanel>\n </AccordionItem>\n);\n","import { FunctionComponent } from \"react\";\nimport { ExternalLink } from \"../../components/ExternalLink\";\n\nexport interface FAQLinkProps {\n href: string;\n}\n\nexport const FAQLink: FunctionComponent<FAQLinkProps> = ({\n href,\n children,\n}) => (\n <ExternalLink\n color=\"inherit\"\n hasWarning={false}\n href={href}\n textDecoration=\"underline\"\n >\n {children}\n </ExternalLink>\n);\n","import {\n AccordionIcon,\n AccordionButton,\n AccordionItem,\n AccordionPanel,\n Heading,\n Box,\n Accordion,\n} from \"@chakra-ui/react\";\n\nimport type { FunctionComponent } from \"react\";\n\nexport interface FAQSectionProps {\n heading: string;\n}\n\nexport const FAQSection: FunctionComponent<FAQSectionProps> = ({\n heading,\n children,\n}) => (\n <AccordionItem>\n <AccordionButton>\n <Box flex=\"1\" textAlign=\"left\">\n <Heading as=\"h2\" ml={4} size=\"lg\">\n {heading}\n </Heading>\n </Box>\n <AccordionIcon />\n </AccordionButton>\n <AccordionPanel p={0}>\n <Accordion allowMultiple w=\"100%\">\n {children}\n </Accordion>\n </AccordionPanel>\n </AccordionItem>\n);\n","import { Box, Heading, Accordion } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Page } from \"../../components/Page\";\nimport { FAQItem } from \"./FAQItem\";\nimport { FAQLink } from \"./FAQLink\";\nimport { FAQSection } from \"./FAQSection\";\n\nexport const FAQ: FunctionComponent = () => (\n <Page\n meta={{\n title: \"FAQ\",\n description: \"Frequently Asked Questions\",\n }}\n pageName=\"faq\"\n >\n <Box bg=\"white\" color=\"blue.800\" h=\"100%\" w=\"100%\">\n <Box bg=\"gray.50\" py={20} width=\"100%\">\n <Heading as=\"h1\" mx=\"auto\" textAlign=\"center\">\n Frequently Asked Questions\n </Heading>\n </Box>\n <Accordion allowMultiple defaultIndex={[0, 1]}>\n <FAQSection heading=\"General\">\n <FAQItem question=\"What is Construct Hub?\">\n <p>\n It is a central destination to discover and share cloud\n application design patterns and reference architectures defined\n for the AWS CDK, CDK for Kubernetes (CDK8s), CDK for Terraform\n (CDKtf) and any other construct-based tool.\n </p>\n </FAQItem>\n <FAQItem question=\"Why should I use Construct Hub?\">\n <p>\n Construct Hub is built to serve the community that uses the\n constructs programming model (CPM) and to allow them find publicly\n available constructs they can reuse. Before the Construct Hub,\n developers did not have an easy way to discover construct\n libraries created by the community since they were published\n across various package managers and without a central index.\n </p>\n <p>\n The Construct Hub is a central, trusted venue CDK developers can\n use to discover published constructs to help them build their\n applications. In the Dev Preview Construct Hub you can discover\n constructs in TypeScript and Python and read their documentation\n and improved API reference in the programming language that the\n package supports.\n </p>\n </FAQItem>\n <FAQItem question=\"How can I add my construct to the Construct Hub?\">\n <p>\n In order to add your construct to the Construct Hub, you will need\n to publish it to the{\" \"}\n <FAQLink href=\"https://www.npmjs.com/\">npmjs.com</FAQLink>{\" \"}\n registry, use a permissive license (Apache, BSD, MIT), and\n annotate it with one of the supported keywords (aws-cdk, cdk8s or\n cdktf).\n </p>\n <p>\n Additionally, since one of the main goals of the Construct Hub is\n to enable an ecosystem of constructs that can be consumed by all\n CDK languages, your library <strong>must</strong> be compiled with{\" \"}\n <FAQLink href=\"https://aws.github.io/jsii/\">JSII</FAQLink>, which\n is a TypeScript-based, which is a TypeScript-based programming\n language for creating multi-language libraries. The Construct Hub\n leverages the type information produced by the JSII compiler in\n order to render the rich multi-language API reference displayed at\n the Construct Hub.\n </p>\n <p>\n The Construct Hub monitors all updates to the npm Registry and\n will list any packages that meet the above requirements within\n 5-10 minutes. If your package does not appear in the Construct\n Hub, please file an issue on our GitHub repository.\n </p>\n <p>\n There’s some great community content about publishing construct\n libraries. Check out{\" \"}\n <FAQLink href=\"https://dev.to/aws-builders/a-beginner-s-guide-to-create-aws-cdk-construct-library-with-projen-5eh4\">\n &quot;A Beginner&apos;s Guide to Create AWS CDK Construct\n Library with projen&quot;\n </FAQLink>{\" \"}\n by <FAQLink href=\"https://hayao-k.dev/\">hayao-k</FAQLink>.\n </p>\n <p>\n If you already have a library written in TypeScript and you are\n looking for information on how to migrate to JSII, see the{\" \"}\n <FAQLink href=\"https://aws.github.io/jsii/user-guides/#library-author-guide\">\n JSII library author guide\n </FAQLink>\n .\n </p>\n </FAQItem>\n <FAQItem question=\"What is a construct?\">\n <p>\n The Constructs Programming Model (CPM) introduces the notion of{\" \"}\n <strong>constructs</strong>, which represent cloud building blocks\n that can be used to assemble complete applications of any\n complexity. AWS, enterprises, start-ups, and individual developers\n use CDK constructs to share proven architecture patterns as\n reusable code libraries, so that everyone can benefit from the\n collective wisdom of the community.\n </p>\n </FAQItem>\n <FAQItem question=\"Who owns the constructs in the Construct Hub?\">\n <p>\n The constructs are owned by the publishers of the packages.\n Constructs are user generated content that are governed by their\n own license terms which is displayed in the search results and can\n be accessed directly through the hyperlinked package page.\n </p>\n </FAQItem>\n <FAQItem question=\"Is the content served in Construct Hub meant to be consumed programmatically?\">\n <p>\n No. The content displayed in the site is user generated, with some\n display formatting. We do not advise that you consume constructs\n from the search results programmatically. Please note that\n Construct Hub is a search engine intended to surface third party\n content from a public endpoint and we provide these results for\n your convenience AS-IS in accordance with our{\" \"}\n <FAQLink href=\"https://constructs.dev/terms\">Site Terms</FAQLink>.\n </p>\n </FAQItem>\n <FAQItem question=\"Which CDK types are available on the Construct Hub?\">\n <p>\n AWS CDK, CDK for Kubernetes (CDK8s) and CDK for Terraform (CDKtf).\n </p>\n </FAQItem>\n <FAQItem question=\"What is AWS CDK?\">\n <p>\n AWS CDK is an open-source software development framework for\n defining applications on AWS and reusable abstractions using\n familiar programming languages and rich object-oriented APIs. AWS\n CDK apps synthesize intostandard CloudFormation templates which\n can be deployed to create infrastructure on AWS. For more\n information, click{\" \"}\n <FAQLink href=\"https://docs.aws.amazon.com/cdk/latest/guide/home.html\">\n here\n </FAQLink>\n .\n </p>\n </FAQItem>\n <FAQItem question=\"What is CDK8s?\">\n <p>\n CDK8s is an open-source software development framework for\n defining Kubernetes applications and reusable abstractions using\n familiar programming languages and rich object-oriented APIs.{\" \"}\n <strong>cdk8s</strong> apps synthesize into standard Kubernetes\n manifests which can be applied to any Kubernetes cluster. For more\n information, click{\" \"}\n <FAQLink href=\"https://cdk8s.io/\">here</FAQLink>.\n </p>\n </FAQItem>\n <FAQItem question=\"What is CDKtf?\">\n <p>\n The community preview of the{\" \"}\n <FAQLink href=\"https://aws.amazon.com/cdk/\">\n Cloud Development Kit\n </FAQLink>\n for Terraform allows you to define infrastructure using a familiar\n programming language such as TypeScript, Python, or Go, while\n leveraging the hundreds of providers and thousands of module\n definitions provided by Terraform and the Terraform ecosystem. For\n more information, click{\" \"}\n <FAQLink href=\"https://learn.hashicorp.com/tutorials/terraform/cdktf\">\n here\n </FAQLink>\n .\n </p>\n </FAQItem>\n <FAQItem question=\"What programming languages are supported in Dev Preview?\">\n <p>The Construct Hub Dev Preview supports Python and TypeScript.</p>\n </FAQItem>\n <FAQItem question=\"Is the support for .NET, Java and Go in the roadmap?\">\n <p>Yes.</p>\n </FAQItem>\n <FAQItem question=\"Can I view the source code of a construct?\">\n <p>\n For each package you can click the repository link that the\n publisher provided with the package. Theoretically this link\n should redirect your to the package’s repository. However, we\n noticed that sometimes the code in the repository can be more or\n less updated than the package’s code. Please take that into\n account.\n </p>\n </FAQItem>\n <FAQItem question=\"How can I install a package?\">\n <p>\n Press “Install” in the package page and you’ll see the\n installation instructions.\n </p>\n </FAQItem>\n <FAQItem question=\"How can I report a package?\">\n <p>\n You can report a package by clicking &quot;Report a package&quot;\n from the package page. For claims of copyright infringement, read\n here:{\" \"}\n <FAQLink href=\"https://aws.amazon.com/terms/#notice-and-procedure-for-making-claims-of-copyright-infringement\">\n https://aws.amazon.com/terms/#notice-and-procedure-for-making-claims-of-copyright-infringement\n </FAQLink>\n .\n </p>\n </FAQItem>\n <FAQItem question=\"How can I open a bug or send a PR for a package?\">\n <p>\n The package is owned by the publisher. To report a bug or send a\n PR, you should go to the repository link the publisher provided\n and open a ticket there\n </p>\n </FAQItem>\n <FAQItem question=\"Why isn’t my package displayed in the Construct Hub?\">\n <p>\n The Construct Hub displays only publicly available constructs that\n are JSII compatible and that were published on a public npm\n registry with an open source license. The package should be\n published on npm registry with the one of the following Keywords:\n aws-cdk, cdk8s or cdktf.\n </p>\n </FAQItem>\n <FAQItem question=\"Can I update my package after it has been displayed?\">\n <p>\n Yes. You should publish a new valid version to the public npm\n registry. We will detect the new version and display it on the\n Construct Hub.\n </p>\n </FAQItem>\n <FAQItem question=\"How does the Construct Hub relates to the Construct Catalog?\">\n <p>\n The Construct Catalog was built by the CDK community in\n collaboration with the AWS CDK team. The Construct Hub is the\n official version for the Construct Catalog.{\" \"}\n <FAQLink href=\"https://awscdk.io\">https://awscdk.io</FAQLink> now\n redirects to the Construct Hub.\n </p>\n </FAQItem>\n <FAQItem question=\"How can I participate in the Construct Hub community?\">\n <p>\n The Construct Hub is built as a public construct. Please join the{\" \"}\n <FAQLink href=\"https://github.com/cdklabs/construct-hub-webapp\">\n Construct Hub GitHub community\n </FAQLink>\n . You are also welcome to join the #construct-hub-dev channel in\n the <FAQLink href=\"https://cdk.dev/\">CDK community</FAQLink> Slack\n workspace.\n </p>\n </FAQItem>\n <FAQItem question=\"Is there a community slack channel for the CDK community?\">\n <p>\n Please join the CDK Slack channel (\n <FAQLink href=\"https://cdk.dev/\">https://cdk.dev/</FAQLink>). This\n Slack channel is managed by the CDK community for the CDK\n community.\n </p>\n </FAQItem>\n </FAQSection>\n <FAQSection heading=\"Getting Started\">\n <FAQItem question=\"Do I need a user for the Construct Hub?\">\n <p>No. The Construct Hub doesn’t require any signup.</p>\n </FAQItem>\n <FAQItem question=\"How do I get started?\">\n <p>\n Use our home page to discover publicly available packages. You may\n run a search to find packages you’re interested in and mention\n your preferred programming language. For each package you will\n find helpful information such as README and API reference for the\n supported programming languages. You will also find links and\n keywords that the publisher provided with the package and\n installation instructions.\n </p>\n </FAQItem>\n </FAQSection>\n </Accordion>\n </Box>\n </Page>\n);\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","../../../src/use-accordion.ts","../../../src/accordion.tsx","views/FAQ/FAQItem.tsx","views/FAQ/FAQLink.tsx","views/FAQ/FAQSection.tsx","views/FAQ/FAQ.tsx"],"names":["pageInfo","home","event","name","faq","packageProfile","search","siteTerms","notFound","page","pageType","Page","children","meta","pageName","trackPageView","usePageView","useEffect","suffix","title","description","formattedTitle","Helmet","process","content","charSet","property","createDescendantContext","useAccordion","props","index","allowToggle","condition","isUndefined","isArray","warn","message","allowMultipleWarning","allowMultipleAndAllowToggleWarning","descendants","useAccordionDescendants","useState","useUnmountEffect","setFocusedIndex","useControllableState","value","defaultValue","defaultIndex","onChange","setIndex","htmlProps","getAccordionItemProps","idx","isOpen","allowMultiple","nextState","addItem","removeItem","focusedIndex","createContext","errorMessage","useAccordionItem","id","useAccordionContext","buttonRef","useRef","useIds","focusableNotDisabledWarning","useAccordionDescendant","disabled","isDisabled","isFocusable","warnIfOpenAndDisabled","onClick","useCallback","onKeyDown","action","ArrowDown","next","focus","ArrowUp","prev","Home","first","End","last","normalizeEventKey","onFocus","getButtonProps","ref","type","mergeRefs","register","callAllHandlers","getPanelProps","role","hidden","buttonId","onOpen","onClose","Accordion","forwardRef","reduceMotion","styles","useMultiStyleConfig","omitThemingProps","ctx","context","className","cx","AccordionItem","containerStyles","useStyles","overflowAnchor","React","__css","runIfFn","isExpanded","AccordionButton","buttonProps","useAccordionItemContext","buttonStyles","display","alignItems","width","outline","AccordionPanel","panelProps","_className","child","in","AccordionIcon","iconStyles","opacity","transform","transition","undefined","transformOrigin","viewBox","fill","d","FAQItem","question","flex","py","textAlign","as","ml","size","px","color","fontSize","sx","p","marginTop","marginBottom","FAQLink","href","ExternalLink","hasWarning","textDecoration","FAQSection","heading","w","FAQ","bg","h","mx"],"mappings":"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","file":"static/js/13.c1230b1f.chunk.js","sourcesContent":["export const pageInfo = {\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\nexport const Page: FunctionComponent<PageProps> = ({\n children,\n meta,\n pageName,\n}) => {\n const trackPageView = usePageView(pageInfo[pageName]);\n\n useEffect(() => {\n trackPageView();\n }, [trackPageView]);\n\n const { suffix = true, title, description } = meta;\n const formattedTitle = suffix ? `${title} - Construct Hub` : title;\n\n return (\n <>\n <Helmet>\n {process.env.NODE_ENV === \"development\" && (\n <meta\n content=\"default-src 'self' 'unsafe-inline' https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; connect-src 'self' https://*.shortbread.aws.dev ws://localhost:3000 https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; frame-src 'none'; img-src 'self' https://* http://*.omtrdc.net; object-src 'none'; style-src 'self' 'unsafe-inline';\"\n httpEquiv=\"Content-Security-Policy\"\n />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n\n <title>{formattedTitle}</title>\n <meta content={formattedTitle} property=\"og:title\" />\n <meta content={formattedTitle} name=\"twitter:title\" />\n <meta content=\"summary\" name=\"twitter:card\" />\n\n <meta content={description} name=\"description\" />\n <meta content={description} property=\"og:description\" />\n <meta content={description} name=\"twitter:description\" />\n </Helmet>\n {children}\n </>\n );\n};\n","import { createDescendantContext } from \"@chakra-ui/descendant\"\nimport {\n useControllableState,\n useIds,\n useUnmountEffect,\n} from \"@chakra-ui/hooks\"\nimport {\n createContext,\n EventKeyMap,\n mergeRefs,\n PropGetter,\n} from \"@chakra-ui/react-utils\"\nimport {\n addItem,\n callAllHandlers,\n focus,\n isArray,\n isUndefined,\n normalizeEventKey,\n removeItem,\n warn,\n} from \"@chakra-ui/utils\"\nimport React, { useCallback, useRef, useState } from \"react\"\n\n/* -------------------------------------------------------------------------------------------------\n * Create context to track descendants and their indices\n * -----------------------------------------------------------------------------------------------*/\n\nexport const [\n AccordionDescendantsProvider,\n useAccordionDescendantsContext,\n useAccordionDescendants,\n useAccordionDescendant,\n] = createDescendantContext<HTMLButtonElement>()\n\n/* -------------------------------------------------------------------------------------------------\n * useAccordion - The root react hook that manages all accordion items\n * -----------------------------------------------------------------------------------------------*/\n\nexport type ExpandedIndex = number | number[]\n\nexport interface UseAccordionProps {\n /**\n * If `true`, multiple accordion items can be expanded at once.\n */\n allowMultiple?: boolean\n /**\n * If `true`, any expanded accordion item can be collapsed again.\n */\n allowToggle?: boolean\n /**\n * The index(es) of the expanded accordion item\n */\n index?: ExpandedIndex\n /**\n * The initial index(es) of the expanded accordion item\n */\n defaultIndex?: ExpandedIndex\n /**\n * The callback invoked when accordion items are expanded or collapsed.\n */\n onChange?(expandedIndex: ExpandedIndex): void\n}\n\n/**\n * useAccordion hook provides all the state and focus management logic\n * for accordion items.\n */\nexport function useAccordion(props: UseAccordionProps) {\n const {\n onChange,\n defaultIndex,\n index: indexProp,\n allowMultiple,\n allowToggle,\n ...htmlProps\n } = props\n\n // validate the props and `warn` if used incorrectly\n allowMultipleWarning(props)\n allowMultipleAndAllowToggleWarning(props)\n\n /**\n * Think of this as the register to each accordion item.\n * We used to manage focus between accordion item buttons.\n *\n * Every accordion item, registers their button refs in this context\n */\n const descendants = useAccordionDescendants()\n\n /**\n * This state is used to track the index focused accordion\n * button when click on the button, tab on the button, or\n * use the down/up arrow to navigate.\n */\n const [focusedIndex, setFocusedIndex] = useState(-1)\n\n /**\n * Reset focused index when accordion unmounts\n * or descendants change\n */\n useUnmountEffect(() => {\n setFocusedIndex(-1)\n })\n\n /**\n * Hook that manages the controlled and un-controlled state\n * for the accordion.\n */\n const [index, setIndex] = useControllableState({\n value: indexProp,\n defaultValue() {\n if (allowMultiple) return defaultIndex ?? []\n return defaultIndex ?? -1\n },\n onChange,\n })\n\n /**\n * Gets the `isOpen` and `onChange` props for a child accordion item based on\n * the child's index.\n *\n * @param idx {number} The index of the child accordion item\n */\n const getAccordionItemProps = (idx: number | null) => {\n let isOpen = false\n if (idx !== null) {\n isOpen = isArray(index) ? index.includes(idx) : index === idx\n }\n\n const onChange = (isOpen: boolean) => {\n if (idx === null) return\n\n if (allowMultiple && isArray(index)) {\n const nextState = isOpen ? addItem(index, idx) : removeItem(index, idx)\n setIndex(nextState)\n } else if (isOpen) {\n setIndex(idx)\n } else if (allowToggle) {\n setIndex(-1)\n }\n }\n\n return { isOpen, onChange }\n }\n\n return {\n index,\n setIndex,\n htmlProps,\n getAccordionItemProps,\n focusedIndex,\n setFocusedIndex,\n descendants,\n }\n}\n\nexport type UseAccordionReturn = ReturnType<typeof useAccordion>\n\n/* -------------------------------------------------------------------------------------------------\n * Create context for the root accordion logic\n * -----------------------------------------------------------------------------------------------*/\n\ninterface AccordionContext\n extends Omit<UseAccordionReturn, \"htmlProps\" | \"descendants\"> {\n reduceMotion: boolean\n}\n\nexport const [\n AccordionProvider,\n useAccordionContext,\n] = createContext<AccordionContext>({\n name: \"AccordionContext\",\n errorMessage:\n \"useAccordionContext: `context` is undefined. Seems you forgot to wrap the accordion components in `<Accordion />`\",\n})\n\n/* -------------------------------------------------------------------------------------------------\n * Hook for a single accordion item\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface UseAccordionItemProps {\n /**\n * If `true`, the accordion item will be disabled.\n */\n isDisabled?: boolean\n /**\n * If `true`, the accordion item will be focusable.\n */\n isFocusable?: boolean\n /**\n * A unique id for the accordion item.\n */\n id?: string\n}\n\n/**\n * useAccordionItem\n *\n * React hook that provides the open/close functionality\n * for an accordion item and its children\n */\nexport function useAccordionItem(props: UseAccordionItemProps) {\n const { isDisabled, isFocusable, id, ...htmlProps } = props\n const { getAccordionItemProps, setFocusedIndex } = useAccordionContext()\n\n const buttonRef = useRef<HTMLElement>(null)\n\n /**\n * Generate unique ids for all accordion item components (button and panel)\n */\n const [buttonId, panelId] = useIds(id, `accordion-button`, `accordion-panel`)\n\n focusableNotDisabledWarning(props)\n\n /**\n * Think of this as a way to register this accordion item\n * with its parent `useAccordion`\n */\n const { register, index, descendants } = useAccordionDescendant({\n disabled: isDisabled && !isFocusable,\n })\n\n const { isOpen, onChange } = getAccordionItemProps(\n index === -1 ? null : index,\n )\n\n warnIfOpenAndDisabled({ isOpen, isDisabled })\n\n const onOpen = () => {\n onChange?.(true)\n }\n\n const onClose = () => {\n onChange?.(false)\n }\n\n /**\n * Toggle the visibility of the accordion item\n */\n const onClick = useCallback(() => {\n onChange?.(!isOpen)\n setFocusedIndex(index)\n }, [index, setFocusedIndex, isOpen, onChange])\n\n /**\n * Manage keyboard navigation between accordion items.\n */\n const onKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n const eventKey = normalizeEventKey(event)\n\n const keyMap: EventKeyMap = {\n ArrowDown: () => {\n const next = descendants.nextEnabled(index)\n if (next) focus(next.node)\n },\n ArrowUp: () => {\n const prev = descendants.prevEnabled(index)\n if (prev) focus(prev.node)\n },\n Home: () => {\n const first = descendants.firstEnabled()\n if (first) focus(first.node)\n },\n End: () => {\n const last = descendants.lastEnabled()\n if (last) focus(last.node)\n },\n }\n\n const action = keyMap[eventKey]\n\n if (action) {\n event.preventDefault()\n action(event)\n }\n },\n [descendants, index],\n )\n\n /**\n * Since each accordion item's button still remains tabbable, let's\n * update the focusedIndex when it receives focus\n */\n const onFocus = useCallback(() => {\n setFocusedIndex(index)\n }, [setFocusedIndex, index])\n\n const getButtonProps: PropGetter<HTMLButtonElement> = useCallback(\n (props = {}, ref = null) => ({\n ...props,\n type: \"button\",\n ref: mergeRefs(register, buttonRef, ref),\n id: buttonId,\n disabled: !!isDisabled,\n \"aria-expanded\": !!isOpen,\n \"aria-controls\": panelId,\n onClick: callAllHandlers(props.onClick, onClick),\n onFocus: callAllHandlers(props.onFocus, onFocus),\n onKeyDown: callAllHandlers(props.onKeyDown, onKeyDown),\n }),\n [\n buttonId,\n isDisabled,\n isOpen,\n onClick,\n onFocus,\n onKeyDown,\n panelId,\n register,\n ],\n )\n\n const getPanelProps: PropGetter = useCallback(\n (props = {}, ref = null) => ({\n ...props,\n ref,\n role: \"region\",\n id: panelId,\n \"aria-labelledby\": buttonId,\n hidden: !isOpen,\n }),\n [buttonId, isOpen, panelId],\n )\n\n return {\n isOpen,\n isDisabled,\n isFocusable,\n onOpen,\n onClose,\n getButtonProps,\n getPanelProps,\n htmlProps,\n }\n}\n\nexport type UseAccordionItemReturn = ReturnType<typeof useAccordionItem>\n\n/* -------------------------------------------------------------------------------------------------\n * Validate accordion and accordion item props, and emit warnings.\n * -----------------------------------------------------------------------------------------------*/\n\nfunction allowMultipleWarning(props: UseAccordionProps) {\n const index = props.index || props.defaultIndex\n const condition =\n !isUndefined(index) && !isArray(index) && props.allowMultiple\n\n warn({\n condition: !!condition,\n message: `If 'allowMultiple' is passed, then 'index' or 'defaultIndex' must be an array. You passed: ${typeof index},`,\n })\n}\n\nfunction allowMultipleAndAllowToggleWarning(props: UseAccordionProps) {\n warn({\n condition: !!(props.allowMultiple && props.allowToggle),\n message: `If 'allowMultiple' is passed, 'allowToggle' will be ignored. Either remove 'allowToggle' or 'allowMultiple' depending on whether you want multiple accordions visible or not`,\n })\n}\n\nfunction focusableNotDisabledWarning(props: UseAccordionItemProps) {\n warn({\n condition: !!(props.isFocusable && !props.isDisabled),\n message: `Using only 'isFocusable', this prop is reserved for situations where you pass 'isDisabled' but you still want the element to receive focus (A11y). Either remove it or pass 'isDisabled' as well.\n `,\n })\n}\n\nfunction warnIfOpenAndDisabled(props: {\n isOpen: boolean\n isDisabled?: boolean\n}) {\n warn({\n condition: props.isOpen && !!props.isDisabled,\n message: \"Cannot open a disabled accordion item\",\n })\n}\n","import { Icon, IconProps } from \"@chakra-ui/icon\"\nimport {\n chakra,\n forwardRef,\n omitThemingProps,\n StylesProvider,\n SystemStyleObject,\n ThemingProps,\n useMultiStyleConfig,\n useStyles,\n HTMLChakraProps,\n} from \"@chakra-ui/system\"\nimport { Collapse } from \"@chakra-ui/transition\"\nimport { cx, Omit, runIfFn, __DEV__ } from \"@chakra-ui/utils\"\nimport { createContext, MaybeRenderProp } from \"@chakra-ui/react-utils\"\nimport * as React from \"react\"\nimport {\n AccordionProvider,\n useAccordion,\n useAccordionContext,\n useAccordionItem,\n UseAccordionItemProps,\n UseAccordionItemReturn,\n UseAccordionProps,\n AccordionDescendantsProvider,\n} from \"./use-accordion\"\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion - The wrapper that provides context for all accordion items\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface AccordionProps\n extends UseAccordionProps,\n Omit<HTMLChakraProps<\"div\">, keyof UseAccordionProps>,\n ThemingProps<\"Accordion\"> {\n /**\n * If `true`, height animation and transitions will be disabled.\n */\n reduceMotion?: boolean\n}\n\n/**\n * The wrapper that provides context and focus management\n * for all accordion items.\n *\n * It wraps all accordion items in a `div` for better grouping.\n * @see Docs https://chakra-ui.com/accordion\n */\nexport const Accordion = forwardRef<AccordionProps, \"div\">(\n ({ children, reduceMotion, ...props }, ref) => {\n const styles = useMultiStyleConfig(\"Accordion\", props)\n const ownProps = omitThemingProps(props)\n\n const { htmlProps, descendants, ...context } = useAccordion(ownProps)\n\n const ctx = React.useMemo(\n () => ({ ...context, reduceMotion: !!reduceMotion }),\n [context, reduceMotion],\n )\n\n return (\n <AccordionDescendantsProvider value={descendants}>\n <AccordionProvider value={ctx}>\n <StylesProvider value={styles}>\n <chakra.div\n ref={ref}\n {...htmlProps}\n className={cx(\"chakra-accordion\", props.className)}\n >\n {children}\n </chakra.div>\n </StylesProvider>\n </AccordionProvider>\n </AccordionDescendantsProvider>\n )\n },\n)\n\nif (__DEV__) {\n Accordion.displayName = \"Accordion\"\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion Item\n * -----------------------------------------------------------------------------------------------*/\n\ntype AccordionItemContext = Omit<UseAccordionItemReturn, \"htmlProps\">\n\nconst [\n AccordionItemProvider,\n useAccordionItemContext,\n] = createContext<AccordionItemContext>({\n name: \"AccordionItemContext\",\n errorMessage:\n \"useAccordionItemContext: `context` is undefined. Seems you forgot to wrap the accordion item parts in `<AccordionItem />` \",\n})\n\nexport interface AccordionItemProps\n extends Omit<HTMLChakraProps<\"div\">, keyof UseAccordionItemProps>,\n UseAccordionItemProps {\n children?: MaybeRenderProp<{\n isExpanded: boolean\n isDisabled: boolean\n }>\n}\n\n/**\n * AccordionItem is a single accordion that provides the open-close\n * behavior when the accordion button is clicked.\n *\n * It also provides context for the accordion button and panel.\n */\nexport const AccordionItem = forwardRef<AccordionItemProps, \"div\">(\n (props, ref) => {\n const { children, className } = props\n const { htmlProps, ...context } = useAccordionItem(props)\n\n const styles = useStyles()\n const containerStyles: SystemStyleObject = {\n ...styles.container,\n overflowAnchor: \"none\",\n }\n\n const ctx = React.useMemo(() => context, [context])\n\n return (\n <AccordionItemProvider value={ctx}>\n <chakra.div\n ref={ref}\n {...htmlProps}\n className={cx(\"chakra-accordion__item\", className)}\n __css={containerStyles}\n >\n {runIfFn(children, {\n isExpanded: !!context.isOpen,\n isDisabled: !!context.isDisabled,\n })}\n </chakra.div>\n </AccordionItemProvider>\n )\n },\n)\n\nif (__DEV__) {\n AccordionItem.displayName = \"AccordionItem\"\n}\n\n/**\n * React hook to get the state and actions of an accordion item\n */\nexport function useAccordionItemState() {\n const { isOpen, isDisabled, onClose, onOpen } = useAccordionItemContext()\n return { isOpen, onClose, isDisabled, onOpen }\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion Item => Button\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface AccordionButtonProps extends HTMLChakraProps<\"button\"> {}\n\n/**\n * AccordionButton is used expands and collapses an accordion item.\n * It must be a child of `AccordionItem`.\n *\n * Note 🚨: Each accordion button must be wrapped in an heading tag,\n * that is appropriate for the information architecture of the page.\n */\nexport const AccordionButton = forwardRef<AccordionButtonProps, \"button\">(\n (props, ref) => {\n const { getButtonProps } = useAccordionItemContext()\n const buttonProps = getButtonProps(props, ref)\n\n const styles = useStyles()\n const buttonStyles: SystemStyleObject = {\n display: \"flex\",\n alignItems: \"center\",\n width: \"100%\",\n outline: 0,\n ...styles.button,\n }\n\n return (\n <chakra.button\n {...buttonProps}\n className={cx(\"chakra-accordion__button\", props.className)}\n __css={buttonStyles}\n />\n )\n },\n)\n\nif (__DEV__) {\n AccordionButton.displayName = \"AccordionButton\"\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion Item => Panel\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface AccordionPanelProps extends HTMLChakraProps<\"div\"> {}\n\n/**\n * Accordion panel that holds the content for each accordion.\n * It shows and hides based on the state login from the `AccordionItem`.\n *\n * It uses the `Collapse` component to animate its height.\n */\nexport const AccordionPanel = forwardRef<AccordionPanelProps, \"div\">(\n (props, ref) => {\n const { reduceMotion } = useAccordionContext()\n const { getPanelProps, isOpen } = useAccordionItemContext()\n\n // remove `hidden` prop, 'coz we're using height animation\n const panelProps = getPanelProps(props, ref)\n\n const _className = cx(\"chakra-accordion__panel\", props.className)\n const styles = useStyles()\n\n if (!reduceMotion) {\n delete panelProps.hidden\n }\n\n const child = (\n <chakra.div {...panelProps} __css={styles.panel} className={_className} />\n )\n\n if (!reduceMotion) {\n return <Collapse in={isOpen}>{child}</Collapse>\n }\n\n return child\n },\n)\n\nif (__DEV__) {\n AccordionPanel.displayName = \"AccordionPanel\"\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Accordion Item => Icon\n * -----------------------------------------------------------------------------------------------*/\n\n/**\n * AccordionIcon that gives a visual cue of the open/close state of the accordion item.\n * It rotates `180deg` based on the open/close state.\n */\nexport const AccordionIcon: React.FC<IconProps> = (props) => {\n const { isOpen, isDisabled } = useAccordionItemContext()\n const { reduceMotion } = useAccordionContext()\n\n const _className = cx(\"chakra-accordion__icon\", props.className)\n const styles = useStyles()\n\n const iconStyles: SystemStyleObject = {\n opacity: isDisabled ? 0.4 : 1,\n transform: isOpen ? \"rotate(-180deg)\" : undefined,\n transition: reduceMotion ? undefined : \"transform 0.2s\",\n transformOrigin: \"center\",\n ...styles.icon,\n }\n\n return (\n <Icon\n viewBox=\"0 0 24 24\"\n aria-hidden\n className={_className}\n __css={iconStyles}\n {...props}\n >\n <path\n fill=\"currentColor\"\n d=\"M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z\"\n />\n </Icon>\n )\n}\n\nif (__DEV__) {\n AccordionIcon.displayName = \"AccordionIcon\"\n}\n","import {\n Heading,\n Text,\n AccordionIcon,\n AccordionButton,\n AccordionItem,\n AccordionPanel,\n Box,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent, ReactChild } from \"react\";\n\nexport interface FAQItemProps {\n question: ReactChild;\n}\n\nexport const FAQItem: FunctionComponent<FAQItemProps> = ({\n question,\n children,\n}) => (\n <AccordionItem>\n <AccordionButton>\n <Box flex=\"1\" py={2} textAlign=\"left\">\n <Heading as=\"h3\" ml={8} size=\"sm\">\n {question}\n </Heading>\n </Box>\n <AccordionIcon />\n </AccordionButton>\n <AccordionPanel px={12} py={4}>\n <Text\n color=\"gray.800\"\n fontSize=\"md\"\n sx={{ p: { marginTop: \"0\", marginBottom: \"4\" } }}\n >\n {children}\n </Text>\n </AccordionPanel>\n </AccordionItem>\n);\n","import { FunctionComponent } from \"react\";\nimport { ExternalLink } from \"../../components/ExternalLink\";\n\nexport interface FAQLinkProps {\n href: string;\n}\n\nexport const FAQLink: FunctionComponent<FAQLinkProps> = ({\n href,\n children,\n}) => (\n <ExternalLink\n color=\"inherit\"\n hasWarning={false}\n href={href}\n textDecoration=\"underline\"\n >\n {children}\n </ExternalLink>\n);\n","import {\n AccordionIcon,\n AccordionButton,\n AccordionItem,\n AccordionPanel,\n Heading,\n Box,\n Accordion,\n} from \"@chakra-ui/react\";\n\nimport type { FunctionComponent } from \"react\";\n\nexport interface FAQSectionProps {\n heading: string;\n}\n\nexport const FAQSection: FunctionComponent<FAQSectionProps> = ({\n heading,\n children,\n}) => (\n <AccordionItem>\n <AccordionButton>\n <Box flex=\"1\" textAlign=\"left\">\n <Heading as=\"h2\" ml={4} size=\"lg\">\n {heading}\n </Heading>\n </Box>\n <AccordionIcon />\n </AccordionButton>\n <AccordionPanel p={0}>\n <Accordion allowMultiple w=\"100%\">\n {children}\n </Accordion>\n </AccordionPanel>\n </AccordionItem>\n);\n","import { Box, Heading, Accordion } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Page } from \"../../components/Page\";\nimport { FAQItem } from \"./FAQItem\";\nimport { FAQLink } from \"./FAQLink\";\nimport { FAQSection } from \"./FAQSection\";\n\nexport const FAQ: FunctionComponent = () => (\n <Page\n meta={{\n title: \"FAQ\",\n description: \"Frequently Asked Questions\",\n }}\n pageName=\"faq\"\n >\n <Box bg=\"white\" color=\"blue.800\" h=\"100%\" w=\"100%\">\n <Box bg=\"gray.50\" py={20} width=\"100%\">\n <Heading as=\"h1\" mx=\"auto\" textAlign=\"center\">\n Frequently Asked Questions\n </Heading>\n </Box>\n <Accordion allowMultiple defaultIndex={[0, 1]}>\n <FAQSection heading=\"General\">\n <FAQItem question=\"What is Construct Hub?\">\n <p>\n It is a central destination to discover and share cloud\n application design patterns and reference architectures defined\n for the AWS CDK, CDK for Kubernetes (CDK8s), CDK for Terraform\n (CDKtf) and any other construct-based tool.\n </p>\n </FAQItem>\n <FAQItem question=\"Why should I use Construct Hub?\">\n <p>\n Construct Hub is built to serve the community that uses the\n constructs programming model (CPM) and to allow them find publicly\n available constructs they can reuse. Before the Construct Hub,\n developers did not have an easy way to discover construct\n libraries created by the community since they were published\n across various package managers and without a central index.\n </p>\n <p>\n The Construct Hub is a central, trusted venue CDK developers can\n use to discover published constructs to help them build their\n applications. In the Dev Preview Construct Hub you can discover\n constructs in TypeScript and Python and read their documentation\n and improved API reference in the programming language that the\n package supports.\n </p>\n </FAQItem>\n <FAQItem question=\"How can I add my construct to the Construct Hub?\">\n <p>\n In order to add your construct to the Construct Hub, you will need\n to publish it to the{\" \"}\n <FAQLink href=\"https://www.npmjs.com/\">npmjs.com</FAQLink>{\" \"}\n registry, use a permissive license (Apache, BSD, MIT), and\n annotate it with one of the supported keywords (aws-cdk, cdk8s or\n cdktf).\n </p>\n <p>\n Additionally, since one of the main goals of the Construct Hub is\n to enable an ecosystem of constructs that can be consumed by all\n CDK languages, your library <strong>must</strong> be compiled with{\" \"}\n <FAQLink href=\"https://aws.github.io/jsii/\">JSII</FAQLink>, which\n is a TypeScript-based, which is a TypeScript-based programming\n language for creating multi-language libraries. The Construct Hub\n leverages the type information produced by the JSII compiler in\n order to render the rich multi-language API reference displayed at\n the Construct Hub.\n </p>\n <p>\n The Construct Hub monitors all updates to the npm Registry and\n will list any packages that meet the above requirements within\n 5-10 minutes. If your package does not appear in the Construct\n Hub, please file an issue on our GitHub repository.\n </p>\n <p>\n There’s some great community content about publishing construct\n libraries. Check out{\" \"}\n <FAQLink href=\"https://dev.to/aws-builders/a-beginner-s-guide-to-create-aws-cdk-construct-library-with-projen-5eh4\">\n &quot;A Beginner&apos;s Guide to Create AWS CDK Construct\n Library with projen&quot;\n </FAQLink>{\" \"}\n by <FAQLink href=\"https://hayao-k.dev/\">hayao-k</FAQLink>.\n </p>\n <p>\n If you already have a library written in TypeScript and you are\n looking for information on how to migrate to JSII, see the{\" \"}\n <FAQLink href=\"https://aws.github.io/jsii/user-guides/#library-author-guide\">\n JSII library author guide\n </FAQLink>\n .\n </p>\n </FAQItem>\n <FAQItem question=\"What is a construct?\">\n <p>\n The Constructs Programming Model (CPM) introduces the notion of{\" \"}\n <strong>constructs</strong>, which represent cloud building blocks\n that can be used to assemble complete applications of any\n complexity. AWS, enterprises, start-ups, and individual developers\n use CDK constructs to share proven architecture patterns as\n reusable code libraries, so that everyone can benefit from the\n collective wisdom of the community.\n </p>\n </FAQItem>\n <FAQItem question=\"Who owns the constructs in the Construct Hub?\">\n <p>\n The constructs are owned by the publishers of the packages.\n Constructs are user generated content that are governed by their\n own license terms which is displayed in the search results and can\n be accessed directly through the hyperlinked package page.\n </p>\n </FAQItem>\n <FAQItem question=\"Is the content served in Construct Hub meant to be consumed programmatically?\">\n <p>\n No. The content displayed in the site is user generated, with some\n display formatting. We do not advise that you consume constructs\n from the search results programmatically. Please note that\n Construct Hub is a search engine intended to surface third party\n content from a public endpoint and we provide these results for\n your convenience AS-IS in accordance with our{\" \"}\n <FAQLink href=\"https://constructs.dev/terms\">Site Terms</FAQLink>.\n </p>\n </FAQItem>\n <FAQItem question=\"Which CDK types are available on the Construct Hub?\">\n <p>\n AWS CDK, CDK for Kubernetes (CDK8s) and CDK for Terraform (CDKtf).\n </p>\n </FAQItem>\n <FAQItem question=\"What is AWS CDK?\">\n <p>\n AWS CDK is an open-source software development framework for\n defining applications on AWS and reusable abstractions using\n familiar programming languages and rich object-oriented APIs. AWS\n CDK apps synthesize intostandard CloudFormation templates which\n can be deployed to create infrastructure on AWS. For more\n information, click{\" \"}\n <FAQLink href=\"https://docs.aws.amazon.com/cdk/latest/guide/home.html\">\n here\n </FAQLink>\n .\n </p>\n </FAQItem>\n <FAQItem question=\"What is CDK8s?\">\n <p>\n CDK8s is an open-source software development framework for\n defining Kubernetes applications and reusable abstractions using\n familiar programming languages and rich object-oriented APIs.{\" \"}\n <strong>cdk8s</strong> apps synthesize into standard Kubernetes\n manifests which can be applied to any Kubernetes cluster. For more\n information, click{\" \"}\n <FAQLink href=\"https://cdk8s.io/\">here</FAQLink>.\n </p>\n </FAQItem>\n <FAQItem question=\"What is CDKtf?\">\n <p>\n The community preview of the{\" \"}\n <FAQLink href=\"https://aws.amazon.com/cdk/\">\n Cloud Development Kit\n </FAQLink>\n for Terraform allows you to define infrastructure using a familiar\n programming language such as TypeScript, Python, or Go, while\n leveraging the hundreds of providers and thousands of module\n definitions provided by Terraform and the Terraform ecosystem. For\n more information, click{\" \"}\n <FAQLink href=\"https://learn.hashicorp.com/tutorials/terraform/cdktf\">\n here\n </FAQLink>\n .\n </p>\n </FAQItem>\n <FAQItem question=\"What programming languages are supported in Dev Preview?\">\n <p>The Construct Hub Dev Preview supports Python and TypeScript.</p>\n </FAQItem>\n <FAQItem question=\"Is the support for .NET, Java and Go in the roadmap?\">\n <p>Yes.</p>\n </FAQItem>\n <FAQItem question=\"Can I view the source code of a construct?\">\n <p>\n For each package you can click the repository link that the\n publisher provided with the package. Theoretically this link\n should redirect your to the package’s repository. However, we\n noticed that sometimes the code in the repository can be more or\n less updated than the package’s code. Please take that into\n account.\n </p>\n </FAQItem>\n <FAQItem question=\"How can I install a package?\">\n <p>\n Press “Install” in the package page and you’ll see the\n installation instructions.\n </p>\n </FAQItem>\n <FAQItem question=\"How can I report a package?\">\n <p>\n You can report a package by clicking &quot;Report a package&quot;\n from the package page. For claims of copyright infringement, read\n here:{\" \"}\n <FAQLink href=\"https://aws.amazon.com/terms/#notice-and-procedure-for-making-claims-of-copyright-infringement\">\n https://aws.amazon.com/terms/#notice-and-procedure-for-making-claims-of-copyright-infringement\n </FAQLink>\n .\n </p>\n </FAQItem>\n <FAQItem question=\"How can I open a bug or send a PR for a package?\">\n <p>\n The package is owned by the publisher. To report a bug or send a\n PR, you should go to the repository link the publisher provided\n and open a ticket there\n </p>\n </FAQItem>\n <FAQItem question=\"Why isn’t my package displayed in the Construct Hub?\">\n <p>\n The Construct Hub displays only publicly available constructs that\n are JSII compatible and that were published on a public npm\n registry with an open source license. The package should be\n published on npm registry with the one of the following Keywords:\n aws-cdk, cdk8s or cdktf.\n </p>\n </FAQItem>\n <FAQItem question=\"Can I update my package after it has been displayed?\">\n <p>\n Yes. You should publish a new valid version to the public npm\n registry. We will detect the new version and display it on the\n Construct Hub.\n </p>\n </FAQItem>\n <FAQItem question=\"How does the Construct Hub relates to the Construct Catalog?\">\n <p>\n The Construct Catalog was built by the CDK community in\n collaboration with the AWS CDK team. The Construct Hub is the\n official version for the Construct Catalog.{\" \"}\n <FAQLink href=\"https://awscdk.io\">https://awscdk.io</FAQLink> now\n redirects to the Construct Hub.\n </p>\n </FAQItem>\n <FAQItem question=\"How can I participate in the Construct Hub community?\">\n <p>\n The Construct Hub is built as a public construct. Please join the{\" \"}\n <FAQLink href=\"https://github.com/cdklabs/construct-hub-webapp\">\n Construct Hub GitHub community\n </FAQLink>\n . You are also welcome to join the #construct-hub-dev channel in\n the <FAQLink href=\"https://cdk.dev/\">CDK community</FAQLink> Slack\n workspace.\n </p>\n </FAQItem>\n <FAQItem question=\"Is there a community slack channel for the CDK community?\">\n <p>\n Please join the CDK Slack channel (\n <FAQLink href=\"https://cdk.dev/\">https://cdk.dev/</FAQLink>). This\n Slack channel is managed by the CDK community for the CDK\n community.\n </p>\n </FAQItem>\n </FAQSection>\n <FAQSection heading=\"Getting Started\">\n <FAQItem question=\"Do I need a user for the Construct Hub?\">\n <p>No. The Construct Hub doesn’t require any signup.</p>\n </FAQItem>\n <FAQItem question=\"How do I get started?\">\n <p>\n Use our home page to discover publicly available packages. You may\n run a search to find packages you’re interested in and mention\n your preferred programming language. For each package you will\n find helpful information such as README and API reference for the\n supported programming languages. You will also find links and\n keywords that the publisher provided with the package and\n installation instructions.\n </p>\n </FAQItem>\n </FAQSection>\n </Accordion>\n </Box>\n </Page>\n);\n"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[2],{228:function(e,t,a){"use strict";a.d(t,"a",(function(){return o}));var n=a(0),r=a(241),c={home:{event:{name:"Home Load"}},faq:{event:{name:"Frequently Asked Questions Load"}},packageProfile:{event:{name:"Package Profile Load"}},search:{event:{name:"Search Load"}},siteTerms:{event:{name:"Site Terms Load"}},notFound:{page:{pageType:"errorPage"},event:{name:"404 Page Load"}}},i=a(114),s=a(1),o=function(e){var t=e.children,a=e.meta,o=e.pageName,l=Object(i.b)(c[o]);Object(n.useEffect)((function(){l()}),[l]);var u=a.suffix,d=void 0===u||u,j=a.title,b=a.description,f=d?"".concat(j," - Construct Hub"):j;return Object(s.jsxs)(s.Fragment,{children:[Object(s.jsxs)(r.a,{children:[!1,Object(s.jsx)("meta",{content:"width=device-width, initial-scale=1",name:"viewport"}),Object(s.jsx)("meta",{charSet:"utf-8"}),Object(s.jsx)("title",{children:f}),Object(s.jsx)("meta",{content:f,property:"og:title"}),Object(s.jsx)("meta",{content:f,name:"twitter:title"}),Object(s.jsx)("meta",{content:"summary",name:"twitter:card"}),Object(s.jsx)("meta",{content:b,name:"description"}),Object(s.jsx)("meta",{content:b,property:"og:description"}),Object(s.jsx)("meta",{content:b,name:"twitter:description"})]}),t]})}},245:function(e,t,a){"use strict";a.d(t,"a",(function(){return i}));var n=a(219),r=a(53),c=a(1),i=function(e){var t=e.children,a=e.language;return r.e.has(a)?Object(c.jsx)(c.Fragment,{children:t}):Object(c.jsx)(n.a,{hasArrow:!0,label:"Documentation support for ".concat(r.b[a]," is coming soon!"),placement:"top-start",children:Object(c.jsx)("span",{children:t})})}},246:function(e,t,a){"use strict";a.d(t,"a",(function(){return u}));var n=a(6),r=a(22),c=a(21),i=a(188),s=a(591),o=a(1),l=["date","format"],u=Object(c.a)((function(e,t){var a=e.date,c=e.format,u=Object(r.a)(e,l);return Object(o.jsx)(i.a,Object(n.a)(Object(n.a)({as:"time",dateTime:a.toISOString(),ref:t},u),{},{children:Object(s.a)(a,c)}))}));u.displayName="Time"},271:function(e,t,a){"use strict";a.d(t,"a",(function(){return n}));var n=new Set(["aws","aws-cdk","awscdk","cdk"])},296:function(e,t,a){"use strict";a.d(t,"a",(function(){return u}));var n=a(6),r=a(22),c=a(350),i=a(112),s=a(82),o=a(1),l=["children","language","value","label","zIndex"],u=function(e){var t=e.children,a=e.language,u=e.value,d=e.label,j=void 0===d?u:d,b=e.zIndex,f=Object(r.a)(e,l);return Object(o.jsx)(s.a,{"aria-label":"Tag: ".concat(j),to:Object(i.c)({query:"".concat(u),language:a}),zIndex:b,children:Object(o.jsx)(c.a,Object(n.a)(Object(n.a)({_hover:{textDecoration:"underline"}},f),{},{children:Object(o.jsx)(c.b,{children:t})}))})}},297:function(e,t,a){"use strict";a.d(t,"b",(function(){return l})),a.d(t,"a",(function(){return u}));var n=a(21),r=a(25),c=a(20),i=a(0);function s(){return s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},s.apply(this,arguments)}function o(e,t){if(null==e)return{};var a,n,r={},c=Object.keys(e);for(n=0;n<c.length;n++)a=c[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}var l=Object(n.a)((function(e,t){var a=e.isExternal,n=e.target,l=e.rel,u=e.className,d=o(e,["isExternal","target","rel","className"]);return i.createElement(r.a.a,s({},d,{ref:t,className:Object(c.d)("chakra-linkbox__overlay",u),rel:a?"noopener noreferrer":l,target:a?"_blank":n,__css:{position:"static","&::before":{content:"''",cursor:"inherit",display:"block",position:"absolute",top:0,left:0,zIndex:0,width:"100%",height:"100%"}}}))})),u=Object(n.a)((function(e,t){var a=e.className,n=o(e,["className"]);return i.createElement(r.a.div,s({ref:t,position:"relative"},n,{className:Object(c.d)("chakra-linkbox",a),__css:{"a[href]:not(.chakra-linkbox__overlay), abbr[title]":{position:"relative",zIndex:1}}}))}))},298:function(e,t,a){"use strict";a.d(t,"a",(function(){return r}));var n=a(75),r=Object(n.a)({d:"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z",displayName:"ChevronRightIcon"})},348:function(e,t,a){"use strict";a.d(t,"a",(function(){return P}));var n=a(0),r=a(4),c=a(17),i=a(6),s=a(225),o=a(297),l=a(193),u=a(203),d=a(188),j=a(205),b=a(198),f=a(29),O=a(271),h=a(53),m=a(112),p=a(245),v=a(296),x=a(246),g=a(143),w=a(117),y=a(56),k=Object(y.a)("catalogCard",["container","name","version","tags","description","date","author","languages"]),N=a(1),L=function(e){var t=e.children;return Object(N.jsx)(w.a,{h:64,p:0,w:"100%",children:Object(N.jsx)(g.a,{as:"article",h:"100%",overflow:"hidden",templateColumns:"1fr",templateRows:"2fr 1fr",children:t})})},S=function(e){var t=e.children;return e.isLink?Object(N.jsx)(o.a,{_hover:{"> :first-child":{bg:"gray.50"}},"data-testid":k.container,children:Object(N.jsx)(L,{children:t})}):Object(N.jsx)(L,{children:t})},_=a(594),E=function(){return Object(N.jsxs)(N.Fragment,{children:[Object(N.jsxs)(s.a,{p:4,spacing:4,children:[Object(N.jsx)(_.a,{h:5,w:"50%"}),Object(N.jsxs)(s.a,{align:"center",direction:"row",spacing:2,children:[Object(N.jsx)(_.a,{h:5,w:10}),Object(N.jsx)(_.a,{h:5,w:10}),Object(N.jsx)(_.a,{h:5,w:10})]}),Object(N.jsx)(_.a,{h:3,w:"75%"}),Object(N.jsx)(_.a,{h:3,w:"50%"})]}),Object(N.jsxs)(d.a,{children:[Object(N.jsx)(j.a,{}),Object(N.jsxs)(s.a,{px:4,py:2,spacing:2,children:[Object(N.jsx)(_.a,{h:5,w:"25%"}),Object(N.jsxs)(s.a,{align:"center",direction:"row",spacing:2,children:[Object(N.jsx)(_.a,{h:5,w:10}),Object(N.jsx)(_.a,{h:5,w:10}),Object(N.jsx)(_.a,{h:5,w:10}),Object(N.jsx)(_.a,{h:5,w:10})]})]})]})]})},T=function(e){var t,a,n,g=e.language,w=e.pkg;if(!w)return Object(N.jsx)(S,{children:Object(N.jsx)(E,{})});var y=(null===(t=w.metadata)||void 0===t?void 0:t.date)?Object(N.jsx)(x.a,{date:new Date(w.metadata.date),fontSize:"sm",format:"MMMM dd, yyyy"}):null,L=null!==(a=w.author)&&void 0!==a?a:{},_=null!==(n=w.languages)&&void 0!==n?n:{},T=Object.keys(_),z=function(e){return Object(m.a)(Object(i.a)({name:w.name,version:w.version,language:g},e))},I="string"===typeof L?L:L.name;return Object(N.jsxs)(S,{isLink:!0,children:[Object(N.jsxs)(s.a,{maxH:"100%",maxW:"100%",overflow:"hidden",p:4,spacing:0,children:[Object(N.jsx)(o.b,{as:f.b,to:z(),children:Object(N.jsxs)(l.a,{color:"blue.800","data-testid":k.name,fontWeight:"semibold",isTruncated:!0,children:[w.name,Object(N.jsx)(l.a,{as:"span",color:"blue.500","data-testid":k.version,fontSize:"xs",ml:2,children:w.version})]})}),Object(N.jsx)(o.a,{as:u.a,"data-testid":k.tags,flexWrap:"wrap",maxH:6,overflow:"hidden",children:[w.name.startsWith("@aws-cdk/")?Object(N.jsx)(v.a,{label:"official",language:g,mr:1,value:"@aws-cdk",variant:"official",children:"Official"},"official"):null].concat(Object(c.a)(w.keywords.filter((function(e){return Boolean(e)&&!O.a.has(e)})).slice(0,3).map((function(e){return Object(N.jsx)(v.a,{language:g,mr:1,value:'"'.concat(e,'"'),zIndex:"0 !important",children:e},e)}))))}),Object(N.jsx)(l.a,{"data-testid":k.description,fontSize:"sm",noOfLines:2,children:w.description})]}),Object(N.jsxs)(d.a,{children:[Object(N.jsx)(j.a,{}),Object(N.jsxs)(s.a,{maxW:"100%",overflow:"hidden",px:4,py:2,spacing:2,children:[Object(N.jsx)(l.a,{"data-testid":k.date,fontSize:"sm",isTruncated:!0,children:y}),Object(N.jsx)(b.a,{as:f.b,color:"blue.500","data-testid":k.author,fontSize:"sm",to:Object(m.c)({query:I}),children:I}),Object(N.jsx)(o.a,{align:"center",as:s.a,"data-testid":k.languages,direction:"row",children:Object.entries(h.c).sort((function(e,t){var a=Object(r.a)(e,1)[0],n=Object(r.a)(t,1)[0];return h.a.indexOf(a)-h.a.indexOf(n)})).map((function(e){var t=Object(r.a)(e,2),a=t[0],n=t[1],c=a,i=c===h.d.TypeScript||T.includes(c),s=c===h.d.TypeScript||h.e.has(c);if(!i)return null;var o=n.name,l=n.icon,u=Object(N.jsx)(l,{"aria-label":"Supports ".concat(o),h:6,opacity:s?1:.2,w:6});return Object(N.jsx)(p.a,{language:c,children:s?Object(N.jsx)(f.b,{"aria-label":"View package docs for ".concat(c),to:z({language:c}),children:u}):u},c)}))})]})]})]})},z=a(204),I=function(e){var t=e.children;return Object(N.jsx)(z.a,{columns:{base:1,sm:2,md:3,lg:4,xl:5,"2xl":6},spacing:6,children:t})},C=function(e){var t=e.language,a=e.results;return Object(N.jsx)(I,{children:a.map((function(e,a){return Object(N.jsx)(T,{language:t,pkg:e},"".concat(e.name,"-").concat(a))}))})},P=Object(n.memo)(C)},350:function(e,t,a){"use strict";a.d(t,"a",(function(){return j})),a.d(t,"b",(function(){return b}));var n=a(102),r=a(21),c=a(67),i=a(42),s=a(74),o=a(25),l=a(8),u=a(0);function d(){return d=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},d.apply(this,arguments)}var j=Object(r.a)((function(e,t){var a=Object(c.a)("Tag",e),n=Object(i.b)(e),r=d({display:"inline-flex",verticalAlign:"top",alignItems:"center",maxWidth:"100%"},a.container);return u.createElement(s.b,{value:a},u.createElement(o.a.span,d({ref:t},n,{__css:r})))}));l.a&&(j.displayName="Tag");var b=Object(r.a)((function(e,t){var a=Object(s.d)();return u.createElement(o.a.span,d({ref:t,isTruncated:!0},e,{__css:a.label}))}));l.a&&(b.displayName="TagLabel");var f=Object(r.a)((function(e,t){return u.createElement(n.a,d({ref:t,verticalAlign:"top",marginEnd:"0.5rem"},e))}));l.a&&(f.displayName="TagLeftIcon");var O=Object(r.a)((function(e,t){return u.createElement(n.a,d({ref:t,verticalAlign:"top",marginStart:"0.5rem"},e))}));l.a&&(O.displayName="TagRightIcon");var h=function(e){return u.createElement(n.a,d({verticalAlign:"inherit",viewBox:"0 0 512 512"},e),u.createElement("path",{fill:"currentColor",d:"M289.94 256l95-95A24 24 0 00351 127l-95 95-95-95a24 24 0 00-34 34l95 95-95 95a24 24 0 1034 34l95-95 95 95a24 24 0 0034-34z"}))};l.a&&(h.displayName="TagCloseIcon");l.a},351:function(e,t,a){"use strict";a.d(t,"a",(function(){return r}));var n=a(75),r=Object(n.a)({d:"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z",displayName:"ArrowForwardIcon"})},352:function(e,t,a){"use strict";a.d(t,"a",(function(){return r}));var n=a(75),r=Object(n.a)({d:"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z",displayName:"ChevronLeftIcon"})},594:function(e,t,a){"use strict";a.d(t,"a",(function(){return O}));a(4),a(74);var n=a(8);a(26),a(111);a(222);var r=a(0);var c=a(25),i=a(59),s=a(21),o=a(67),l=a(42);var u=a(20);function d(){return d=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},d.apply(this,arguments)}function j(e,t){if(null==e)return{};var a,n,r={},c=Object.keys(e);for(n=0;n<c.length;n++)a=c[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}var b=Object(c.a)("div",{baseStyle:{boxShadow:"none",backgroundClip:"padding-box",cursor:"default",color:"transparent",pointerEvents:"none",userSelect:"none","&::before, &::after, *":{visibility:"hidden"}}}),f=Object(i.b)({from:{opacity:0},to:{opacity:1}}),O=Object(s.a)((function(e,t){var a=Object(o.b)("Skeleton",e),n=function(){var e=r.useRef(!0);return r.useEffect((function(){e.current=!1}),[]),e.current}(),i=Object(l.b)(e),s=i.isLoaded,O=i.fadeDuration,h=i.className,m=j(i,["startColor","endColor","isLoaded","fadeDuration","speed","className"]),p=function(e){var t=Object(r.useRef)();return Object(r.useEffect)((function(){t.current=e}),[e]),t.current}(s),v=Object(u.d)("chakra-skeleton",h);if(s){var x=n||p?"none":f+" "+O+"s";return r.createElement(c.a.div,d({ref:t,className:v,__css:{animation:x}},m))}return r.createElement(b,d({ref:t,className:v},m,{__css:a}))}));O.defaultProps={fadeDuration:.4,speed:.8},n.a&&(O.displayName="Skeleton");n.a;n.a}}]);
2
- //# sourceMappingURL=2.dbf90c22.chunk.js.map
1
+ (this["webpackJsonpconstruct-hub-webapp"]=this["webpackJsonpconstruct-hub-webapp"]||[]).push([[2],{228:function(e,t,a){"use strict";a.d(t,"a",(function(){return o}));var n=a(0),r=a(241),c={home:{event:{name:"Home Load"}},faq:{event:{name:"Frequently Asked Questions Load"}},packageProfile:{event:{name:"Package Profile Load"}},search:{event:{name:"Search Load"}},siteTerms:{event:{name:"Site Terms Load"}},notFound:{page:{pageType:"errorPage"},event:{name:"404 Page Load"}}},i=a(114),s=a(1),o=function(e){var t=e.children,a=e.meta,o=e.pageName,l=Object(i.b)(c[o]);Object(n.useEffect)((function(){l()}),[l]);var u=a.suffix,d=void 0===u||u,j=a.title,b=a.description,f=d?"".concat(j," - Construct Hub"):j;return Object(s.jsxs)(s.Fragment,{children:[Object(s.jsxs)(r.a,{children:[!1,Object(s.jsx)("meta",{content:"width=device-width, initial-scale=1",name:"viewport"}),Object(s.jsx)("meta",{charSet:"utf-8"}),Object(s.jsx)("title",{children:f}),Object(s.jsx)("meta",{content:f,property:"og:title"}),Object(s.jsx)("meta",{content:f,name:"twitter:title"}),Object(s.jsx)("meta",{content:"summary",name:"twitter:card"}),Object(s.jsx)("meta",{content:b,name:"description"}),Object(s.jsx)("meta",{content:b,property:"og:description"}),Object(s.jsx)("meta",{content:b,name:"twitter:description"})]}),t]})}},245:function(e,t,a){"use strict";a.d(t,"a",(function(){return i}));var n=a(219),r=a(47),c=a(1),i=function(e){var t=e.children,a=e.language;return r.e.has(a)?Object(c.jsx)(c.Fragment,{children:t}):Object(c.jsx)(n.a,{hasArrow:!0,label:"Documentation support for ".concat(r.b[a]," is coming soon!"),placement:"top-start",children:Object(c.jsx)("span",{children:t})})}},246:function(e,t,a){"use strict";a.d(t,"a",(function(){return u}));var n=a(6),r=a(22),c=a(21),i=a(188),s=a(591),o=a(1),l=["date","format"],u=Object(c.a)((function(e,t){var a=e.date,c=e.format,u=Object(r.a)(e,l);return Object(o.jsx)(i.a,Object(n.a)(Object(n.a)({as:"time",dateTime:a.toISOString(),ref:t},u),{},{children:Object(s.a)(a,c)}))}));u.displayName="Time"},271:function(e,t,a){"use strict";a.d(t,"a",(function(){return n}));var n=new Set(["aws","aws-cdk","awscdk","cdk"])},296:function(e,t,a){"use strict";a.d(t,"a",(function(){return u}));var n=a(6),r=a(22),c=a(350),i=a(112),s=a(82),o=a(1),l=["children","language","value","label","zIndex"],u=function(e){var t=e.children,a=e.language,u=e.value,d=e.label,j=void 0===d?u:d,b=e.zIndex,f=Object(r.a)(e,l);return Object(o.jsx)(s.a,{"aria-label":"Tag: ".concat(j),to:Object(i.c)({query:"".concat(u),language:a}),zIndex:b,children:Object(o.jsx)(c.a,Object(n.a)(Object(n.a)({_hover:{textDecoration:"underline"}},f),{},{children:Object(o.jsx)(c.b,{children:t})}))})}},297:function(e,t,a){"use strict";a.d(t,"b",(function(){return l})),a.d(t,"a",(function(){return u}));var n=a(21),r=a(25),c=a(20),i=a(0);function s(){return s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},s.apply(this,arguments)}function o(e,t){if(null==e)return{};var a,n,r={},c=Object.keys(e);for(n=0;n<c.length;n++)a=c[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}var l=Object(n.a)((function(e,t){var a=e.isExternal,n=e.target,l=e.rel,u=e.className,d=o(e,["isExternal","target","rel","className"]);return i.createElement(r.a.a,s({},d,{ref:t,className:Object(c.d)("chakra-linkbox__overlay",u),rel:a?"noopener noreferrer":l,target:a?"_blank":n,__css:{position:"static","&::before":{content:"''",cursor:"inherit",display:"block",position:"absolute",top:0,left:0,zIndex:0,width:"100%",height:"100%"}}}))})),u=Object(n.a)((function(e,t){var a=e.className,n=o(e,["className"]);return i.createElement(r.a.div,s({ref:t,position:"relative"},n,{className:Object(c.d)("chakra-linkbox",a),__css:{"a[href]:not(.chakra-linkbox__overlay), abbr[title]":{position:"relative",zIndex:1}}}))}))},298:function(e,t,a){"use strict";a.d(t,"a",(function(){return r}));var n=a(75),r=Object(n.a)({d:"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z",displayName:"ChevronRightIcon"})},348:function(e,t,a){"use strict";a.d(t,"a",(function(){return P}));var n=a(0),r=a(4),c=a(17),i=a(6),s=a(225),o=a(297),l=a(193),u=a(203),d=a(188),j=a(205),b=a(198),f=a(29),O=a(271),h=a(47),m=a(112),p=a(245),v=a(296),x=a(246),g=a(143),w=a(117),y=a(56),k=Object(y.a)("catalogCard",["container","name","version","tags","description","date","author","languages"]),N=a(1),L=function(e){var t=e.children;return Object(N.jsx)(w.a,{h:64,p:0,w:"100%",children:Object(N.jsx)(g.a,{as:"article",h:"100%",overflow:"hidden",templateColumns:"1fr",templateRows:"2fr 1fr",children:t})})},S=function(e){var t=e.children;return e.isLink?Object(N.jsx)(o.a,{_hover:{"> :first-child":{bg:"gray.50"}},"data-testid":k.container,children:Object(N.jsx)(L,{children:t})}):Object(N.jsx)(L,{children:t})},_=a(595),E=function(){return Object(N.jsxs)(N.Fragment,{children:[Object(N.jsxs)(s.a,{p:4,spacing:4,children:[Object(N.jsx)(_.a,{h:5,w:"50%"}),Object(N.jsxs)(s.a,{align:"center",direction:"row",spacing:2,children:[Object(N.jsx)(_.a,{h:5,w:10}),Object(N.jsx)(_.a,{h:5,w:10}),Object(N.jsx)(_.a,{h:5,w:10})]}),Object(N.jsx)(_.a,{h:3,w:"75%"}),Object(N.jsx)(_.a,{h:3,w:"50%"})]}),Object(N.jsxs)(d.a,{children:[Object(N.jsx)(j.a,{}),Object(N.jsxs)(s.a,{px:4,py:2,spacing:2,children:[Object(N.jsx)(_.a,{h:5,w:"25%"}),Object(N.jsxs)(s.a,{align:"center",direction:"row",spacing:2,children:[Object(N.jsx)(_.a,{h:5,w:10}),Object(N.jsx)(_.a,{h:5,w:10}),Object(N.jsx)(_.a,{h:5,w:10}),Object(N.jsx)(_.a,{h:5,w:10})]})]})]})]})},T=function(e){var t,a,n,g=e.language,w=e.pkg;if(!w)return Object(N.jsx)(S,{children:Object(N.jsx)(E,{})});var y=(null===(t=w.metadata)||void 0===t?void 0:t.date)?Object(N.jsx)(x.a,{date:new Date(w.metadata.date),fontSize:"sm",format:"MMMM dd, yyyy"}):null,L=null!==(a=w.author)&&void 0!==a?a:{},_=null!==(n=w.languages)&&void 0!==n?n:{},T=Object.keys(_),z=function(e){return Object(m.a)(Object(i.a)({name:w.name,version:w.version,language:g},e))},I="string"===typeof L?L:L.name;return Object(N.jsxs)(S,{isLink:!0,children:[Object(N.jsxs)(s.a,{maxH:"100%",maxW:"100%",overflow:"hidden",p:4,spacing:0,children:[Object(N.jsx)(o.b,{as:f.b,to:z(),children:Object(N.jsxs)(l.a,{color:"blue.800","data-testid":k.name,fontWeight:"semibold",isTruncated:!0,children:[w.name,Object(N.jsx)(l.a,{as:"span",color:"blue.500","data-testid":k.version,fontSize:"xs",ml:2,children:w.version})]})}),Object(N.jsx)(o.a,{as:u.a,"data-testid":k.tags,flexWrap:"wrap",maxH:6,overflow:"hidden",children:[w.name.startsWith("@aws-cdk/")?Object(N.jsx)(v.a,{label:"official",language:g,mr:1,value:"@aws-cdk",variant:"official",children:"Official"},"official"):null].concat(Object(c.a)(w.keywords.filter((function(e){return Boolean(e)&&!O.a.has(e)})).slice(0,3).map((function(e){return Object(N.jsx)(v.a,{language:g,mr:1,value:'"'.concat(e,'"'),zIndex:"0 !important",children:e},e)}))))}),Object(N.jsx)(l.a,{"data-testid":k.description,fontSize:"sm",noOfLines:2,children:w.description})]}),Object(N.jsxs)(d.a,{children:[Object(N.jsx)(j.a,{}),Object(N.jsxs)(s.a,{maxW:"100%",overflow:"hidden",px:4,py:2,spacing:2,children:[Object(N.jsx)(l.a,{"data-testid":k.date,fontSize:"sm",isTruncated:!0,children:y}),Object(N.jsx)(b.a,{as:f.b,color:"blue.500","data-testid":k.author,fontSize:"sm",to:Object(m.c)({query:I}),children:I}),Object(N.jsx)(o.a,{align:"center",as:s.a,"data-testid":k.languages,direction:"row",children:Object.entries(h.c).sort((function(e,t){var a=Object(r.a)(e,1)[0],n=Object(r.a)(t,1)[0];return h.a.indexOf(a)-h.a.indexOf(n)})).map((function(e){var t=Object(r.a)(e,2),a=t[0],n=t[1],c=a,i=c===h.d.TypeScript||T.includes(c),s=c===h.d.TypeScript||h.e.has(c);if(!i)return null;var o=n.name,l=n.icon,u=Object(N.jsx)(l,{"aria-label":"Supports ".concat(o),h:6,opacity:s?1:.2,w:6});return Object(N.jsx)(p.a,{language:c,children:s?Object(N.jsx)(f.b,{"aria-label":"View package docs for ".concat(c),to:z({language:c}),children:u}):u},c)}))})]})]})]})},z=a(204),I=function(e){var t=e.children;return Object(N.jsx)(z.a,{columns:{base:1,sm:2,md:3,lg:4,xl:5,"2xl":6},spacing:6,children:t})},C=function(e){var t=e.language,a=e.results;return Object(N.jsx)(I,{children:a.map((function(e,a){return Object(N.jsx)(T,{language:t,pkg:e},"".concat(e.name,"-").concat(a))}))})},P=Object(n.memo)(C)},350:function(e,t,a){"use strict";a.d(t,"a",(function(){return j})),a.d(t,"b",(function(){return b}));var n=a(102),r=a(21),c=a(67),i=a(42),s=a(74),o=a(25),l=a(8),u=a(0);function d(){return d=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},d.apply(this,arguments)}var j=Object(r.a)((function(e,t){var a=Object(c.a)("Tag",e),n=Object(i.b)(e),r=d({display:"inline-flex",verticalAlign:"top",alignItems:"center",maxWidth:"100%"},a.container);return u.createElement(s.b,{value:a},u.createElement(o.a.span,d({ref:t},n,{__css:r})))}));l.a&&(j.displayName="Tag");var b=Object(r.a)((function(e,t){var a=Object(s.d)();return u.createElement(o.a.span,d({ref:t,isTruncated:!0},e,{__css:a.label}))}));l.a&&(b.displayName="TagLabel");var f=Object(r.a)((function(e,t){return u.createElement(n.a,d({ref:t,verticalAlign:"top",marginEnd:"0.5rem"},e))}));l.a&&(f.displayName="TagLeftIcon");var O=Object(r.a)((function(e,t){return u.createElement(n.a,d({ref:t,verticalAlign:"top",marginStart:"0.5rem"},e))}));l.a&&(O.displayName="TagRightIcon");var h=function(e){return u.createElement(n.a,d({verticalAlign:"inherit",viewBox:"0 0 512 512"},e),u.createElement("path",{fill:"currentColor",d:"M289.94 256l95-95A24 24 0 00351 127l-95 95-95-95a24 24 0 00-34 34l95 95-95 95a24 24 0 1034 34l95-95 95 95a24 24 0 0034-34z"}))};l.a&&(h.displayName="TagCloseIcon");l.a},351:function(e,t,a){"use strict";a.d(t,"a",(function(){return r}));var n=a(75),r=Object(n.a)({d:"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z",displayName:"ArrowForwardIcon"})},352:function(e,t,a){"use strict";a.d(t,"a",(function(){return r}));var n=a(75),r=Object(n.a)({d:"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z",displayName:"ChevronLeftIcon"})},595:function(e,t,a){"use strict";a.d(t,"a",(function(){return O}));a(4),a(74);var n=a(8);a(26),a(111);a(222);var r=a(0);var c=a(25),i=a(59),s=a(21),o=a(67),l=a(42);var u=a(20);function d(){return d=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var n in a)Object.prototype.hasOwnProperty.call(a,n)&&(e[n]=a[n])}return e},d.apply(this,arguments)}function j(e,t){if(null==e)return{};var a,n,r={},c=Object.keys(e);for(n=0;n<c.length;n++)a=c[n],t.indexOf(a)>=0||(r[a]=e[a]);return r}var b=Object(c.a)("div",{baseStyle:{boxShadow:"none",backgroundClip:"padding-box",cursor:"default",color:"transparent",pointerEvents:"none",userSelect:"none","&::before, &::after, *":{visibility:"hidden"}}}),f=Object(i.b)({from:{opacity:0},to:{opacity:1}}),O=Object(s.a)((function(e,t){var a=Object(o.b)("Skeleton",e),n=function(){var e=r.useRef(!0);return r.useEffect((function(){e.current=!1}),[]),e.current}(),i=Object(l.b)(e),s=i.isLoaded,O=i.fadeDuration,h=i.className,m=j(i,["startColor","endColor","isLoaded","fadeDuration","speed","className"]),p=function(e){var t=Object(r.useRef)();return Object(r.useEffect)((function(){t.current=e}),[e]),t.current}(s),v=Object(u.d)("chakra-skeleton",h);if(s){var x=n||p?"none":f+" "+O+"s";return r.createElement(c.a.div,d({ref:t,className:v,__css:{animation:x}},m))}return r.createElement(b,d({ref:t,className:v},m,{__css:a}))}));O.defaultProps={fadeDuration:.4,speed:.8},n.a&&(O.displayName="Skeleton");n.a;n.a}}]);
2
+ //# sourceMappingURL=2.4cb37f37.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","components/LanguageSupportTooltip/LanguageSupportTooltip.tsx","components/Time/Time.tsx","constants/keywords.ts","components/PackageTag/PackageTag.tsx","../../../src/link-box.tsx","../../../src/ChevronRight.tsx","components/CatalogCard/testIds.ts","components/CatalogCard/CatalogCardContainer.tsx","components/CatalogCard/CatalogCardSkeleton.tsx","components/CatalogCard/CatalogCard.tsx","components/Results/ResultsGrid.tsx","components/Results/Results.tsx","../../../src/tag.tsx","../../../src/ArrowForward.tsx","../../../src/ChevronLeft.tsx","../../../src/skeleton.tsx","../../../src/use-previous.ts"],"names":["pageInfo","home","event","name","faq","packageProfile","search","siteTerms","notFound","page","pageType","Page","children","meta","pageName","trackPageView","usePageView","useEffect","suffix","title","description","formattedTitle","Helmet","process","content","charSet","property","LanguageSupportTooltip","language","TEMP_SUPPORTED_LANGUAGES","has","hasArrow","label","LANGUAGE_NAME_MAP","placement","Time","forwardRef","ref","date","formatString","format","boxProps","as","dateTime","toISOString","displayName","KEYWORD_IGNORE_LIST","Set","PackageTag","value","zIndex","tagProps","NavLink","to","getSearchPath","query","_hover","textDecoration","LinkOverlay","className","cx","rel","isExternal","target","__css","position","cursor","display","top","left","width","height","LinkBox","ChevronRightIcon","createIcon","d","testIds","createTestIds","CardContainer","Card","h","p","w","overflow","templateColumns","templateRows","CatalogCardContainer","isLink","bg","container","CatalogCardSkeleton","spacing","align","direction","px","py","CatalogCard","currentLanguage","pkg","publishDate","metadata","Date","fontSize","author","languages","targets","Object","keys","getUrl","params","getPackagePath","version","authorName","maxH","maxW","Link","color","fontWeight","isTruncated","ml","Flex","tags","flexWrap","startsWith","mr","variant","keywords","filter","v","Boolean","slice","map","tag","noOfLines","Stack","entries","LANGUAGE_RENDER_MAP","sort","right","LANGUAGES","indexOf","lang","info","isSupportedByLibrary","Language","TypeScript","includes","isSupportedByConstructHub","Icon","icon","opacity","ResultsGrid","columns","base","sm","md","lg","xl","ResultsComponent","results","idx","Results","memo","Tag","styles","useMultiStyleConfig","ownProps","omitThemingProps","containerStyles","verticalAlign","alignItems","maxWidth","TagLabel","useStyles","TagLeftIcon","marginEnd","TagRightIcon","marginStart","TagCloseIcon","props","viewBox","fill","ArrowForwardIcon","ChevronLeftIcon","StyledSkeleton","chakra","baseStyle","boxShadow","backgroundClip","pointerEvents","userSelect","visibility","fade","keyframes","from","Skeleton","useStyleConfig","isFirstRender","React","useIsFirstRender","wasPreviouslyLoaded","useRef","usePrevious","_className","animation","fadeDuration","speed"],"mappings":"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","file":"static/js/2.dbf90c22.chunk.js","sourcesContent":["export const pageInfo = {\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\nexport const Page: FunctionComponent<PageProps> = ({\n children,\n meta,\n pageName,\n}) => {\n const trackPageView = usePageView(pageInfo[pageName]);\n\n useEffect(() => {\n trackPageView();\n }, [trackPageView]);\n\n const { suffix = true, title, description } = meta;\n const formattedTitle = suffix ? `${title} - Construct Hub` : title;\n\n return (\n <>\n <Helmet>\n {process.env.NODE_ENV === \"development\" && (\n <meta\n content=\"default-src 'self' 'unsafe-inline' https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; connect-src 'self' https://*.shortbread.aws.dev ws://localhost:3000 https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; frame-src 'none'; img-src 'self' https://* http://*.omtrdc.net; object-src 'none'; style-src 'self' 'unsafe-inline';\"\n httpEquiv=\"Content-Security-Policy\"\n />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n\n <title>{formattedTitle}</title>\n <meta content={formattedTitle} property=\"og:title\" />\n <meta content={formattedTitle} name=\"twitter:title\" />\n <meta content=\"summary\" name=\"twitter:card\" />\n\n <meta content={description} name=\"description\" />\n <meta content={description} property=\"og:description\" />\n <meta content={description} name=\"twitter:description\" />\n </Helmet>\n {children}\n </>\n );\n};\n","import { Tooltip } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport {\n Language,\n LANGUAGE_NAME_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\n\nexport interface LanguageSupportTooltipProps {\n language: Language;\n}\n\nexport const LanguageSupportTooltip: FunctionComponent<LanguageSupportTooltipProps> =\n ({ children, language }) => {\n const isSupported = TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (isSupported) {\n return <>{children}</>;\n }\n\n return (\n <Tooltip\n hasArrow\n label={`Documentation support for ${LANGUAGE_NAME_MAP[language]} is coming soon!`}\n placement=\"top-start\"\n >\n <span>{children}</span>\n </Tooltip>\n );\n };\n","import { Box, BoxProps, forwardRef } from \"@chakra-ui/react\";\nimport { format } from \"date-fns\";\n\nexport interface TimeOptions {\n date: Date;\n format: string;\n}\n\nexport interface TimeProps extends BoxProps, TimeOptions {}\n\nexport const Time = forwardRef<TimeProps, \"time\">(\n ({ date, format: formatString, ...boxProps }, ref) => {\n return (\n <Box as=\"time\" dateTime={date.toISOString()} ref={ref} {...boxProps}>\n {format(date, formatString)}\n </Box>\n );\n }\n);\n\nTime.displayName = \"Time\";\n","export const KEYWORD_IGNORE_LIST = new Set([\"aws\", \"aws-cdk\", \"awscdk\", \"cdk\"]);\n","import { Tag, TagLabel, TagProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Language } from \"../../constants/languages\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\n\nexport interface PackageTagProps extends TagProps {\n language?: Language;\n value: string;\n label?: string;\n zIndex?: string | number;\n}\n\nexport const PackageTag: FunctionComponent<PackageTagProps> = ({\n children,\n language,\n value,\n label = value,\n zIndex,\n ...tagProps\n}) => {\n return (\n <NavLink\n aria-label={`Tag: ${label}`}\n to={getSearchPath({ query: `${value}`, language })}\n zIndex={zIndex}\n >\n <Tag\n _hover={{\n textDecoration: \"underline\",\n }}\n {...tagProps}\n >\n <TagLabel>{children}</TagLabel>\n </Tag>\n </NavLink>\n );\n};\n","import { chakra, forwardRef, HTMLChakraProps } from \"@chakra-ui/system\"\nimport { cx } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\n\nexport interface LinkOverlayProps extends HTMLChakraProps<\"a\"> {\n /**\n * If `true`, the link will open in new tab\n */\n isExternal?: boolean\n}\n\nexport const LinkOverlay = forwardRef<LinkOverlayProps, \"a\">((props, ref) => {\n const { isExternal, target, rel, className, ...rest } = props\n return (\n <chakra.a\n {...rest}\n ref={ref}\n className={cx(\"chakra-linkbox__overlay\", className)}\n rel={isExternal ? \"noopener noreferrer\" : rel}\n target={isExternal ? \"_blank\" : target}\n __css={{\n position: \"static\",\n \"&::before\": {\n content: \"''\",\n cursor: \"inherit\",\n display: \"block\",\n position: \"absolute\",\n top: 0,\n left: 0,\n zIndex: 0,\n width: \"100%\",\n height: \"100%\",\n },\n }}\n />\n )\n})\n\nexport interface LinkBoxProps extends HTMLChakraProps<\"div\"> {}\n\n/**\n * `LinkBox` is used to wrap content areas within a link while ensuring semantic html\n *\n * @see Docs https://chakra-ui.com/docs/navigation/link-overlay\n * @see Resources https://www.sarasoueidan.com/blog/nested-links\n */\nexport const LinkBox = forwardRef<LinkBoxProps, \"div\">((props, ref) => {\n const { className, ...rest } = props\n\n return (\n <chakra.div\n ref={ref}\n position=\"relative\"\n {...rest}\n className={cx(\"chakra-linkbox\", className)}\n __css={{\n /* Elevate the links and abbreviations up */\n \"a[href]:not(.chakra-linkbox__overlay), abbr[title]\": {\n position: \"relative\",\n zIndex: 1,\n },\n }}\n />\n )\n})\n","import { createIcon } from \"@chakra-ui/icon\"\n\nexport const ChevronRightIcon = createIcon({\n d: \"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\",\n displayName: \"ChevronRightIcon\",\n})\n","import { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"catalogCard\", [\n \"container\",\n \"name\",\n \"version\",\n \"tags\",\n \"description\",\n \"date\",\n \"author\",\n \"languages\",\n] as const);\n\nexport default testIds;\n","import { Grid, LinkBox } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Card } from \"../Card\";\nimport testIds from \"./testIds\";\n\nconst CardContainer: FunctionComponent = ({ children }) => (\n <Card h={64} p={0} w=\"100%\">\n <Grid\n as=\"article\"\n h=\"100%\"\n overflow=\"hidden\"\n templateColumns=\"1fr\"\n templateRows=\"2fr 1fr\"\n >\n {children}\n </Grid>\n </Card>\n);\n\nexport const CatalogCardContainer: FunctionComponent<{ isLink?: boolean }> = ({\n children,\n isLink,\n}) => {\n return isLink ? (\n <LinkBox\n _hover={{\n \"> :first-child\": {\n bg: \"gray.50\",\n },\n }}\n data-testid={testIds.container}\n >\n <CardContainer>{children}</CardContainer>\n </LinkBox>\n ) : (\n <CardContainer>{children}</CardContainer>\n );\n};\n","import { Box, Divider, Skeleton, Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const CatalogCardSkeleton: FunctionComponent = () => (\n <>\n <Stack p={4} spacing={4}>\n <Skeleton h={5} w=\"50%\" />\n <Stack align=\"center\" direction=\"row\" spacing={2}>\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n </Stack>\n <Skeleton h={3} w=\"75%\" />\n <Skeleton h={3} w=\"50%\" />\n </Stack>\n <Box>\n <Divider />\n <Stack px={4} py={2} spacing={2}>\n <Skeleton h={5} w=\"25%\" />\n <Stack align=\"center\" direction=\"row\" spacing={2}>\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n </Stack>\n </Stack>\n </Box>\n </>\n);\n","import {\n Box,\n Divider,\n Flex,\n LinkBox,\n Link as UILink,\n LinkOverlay,\n Stack,\n Text,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { CatalogPackage } from \"../../api/package/packages\";\nimport { KEYWORD_IGNORE_LIST } from \"../../constants/keywords\";\nimport {\n Language,\n LANGUAGES,\n LANGUAGE_RENDER_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\nimport { getPackagePath, getSearchPath } from \"../../util/url\";\nimport { LanguageSupportTooltip } from \"../LanguageSupportTooltip\";\nimport { PackageTag } from \"../PackageTag\";\nimport { Time } from \"../Time\";\nimport { CatalogCardContainer } from \"./CatalogCardContainer\";\nimport { CatalogCardSkeleton } from \"./CatalogCardSkeleton\";\nimport testIds from \"./testIds\";\n\nexport interface CatalogCardProps {\n /**\n * Specifies the language to link to by default\n */\n language?: Language;\n /**\n * If undefined, will render a skeleton\n */\n pkg?: CatalogPackage;\n}\n\nexport const CatalogCard: FunctionComponent<CatalogCardProps> = ({\n language: currentLanguage,\n pkg,\n}) => {\n if (!pkg) {\n return (\n <CatalogCardContainer>\n <CatalogCardSkeleton />\n </CatalogCardContainer>\n );\n }\n\n const publishDate = pkg.metadata?.date ? (\n <Time\n date={new Date(pkg.metadata.date)}\n fontSize=\"sm\"\n format=\"MMMM dd, yyyy\"\n />\n ) : null;\n\n const author = pkg.author ?? {};\n const languages = pkg.languages ?? {};\n const targets = Object.keys(languages) as Language[];\n\n const getUrl = (params?: Partial<Parameters<typeof getPackagePath>[0]>) =>\n getPackagePath({\n name: pkg.name,\n version: pkg.version,\n language: currentLanguage,\n ...params,\n });\n\n const authorName = typeof author === \"string\" ? author : author.name;\n\n return (\n <CatalogCardContainer isLink>\n <Stack maxH=\"100%\" maxW=\"100%\" overflow=\"hidden\" p={4} spacing={0}>\n {/* Name & Version */}\n <LinkOverlay as={Link} to={getUrl()}>\n <Text\n color=\"blue.800\"\n data-testid={testIds.name}\n fontWeight=\"semibold\"\n isTruncated\n >\n {pkg.name}\n\n <Text\n as=\"span\"\n color=\"blue.500\"\n data-testid={testIds.version}\n fontSize=\"xs\"\n ml={2}\n >\n {pkg.version}\n </Text>\n </Text>\n </LinkOverlay>\n\n {/* Tags */}\n <LinkBox\n as={Flex}\n data-testid={testIds.tags}\n flexWrap=\"wrap\"\n maxH={6}\n overflow=\"hidden\"\n >\n {[\n pkg.name.startsWith(\"@aws-cdk/\") ? (\n <PackageTag\n key=\"official\"\n label=\"official\"\n language={currentLanguage}\n mr={1}\n value=\"@aws-cdk\"\n variant=\"official\"\n >\n Official\n </PackageTag>\n ) : null,\n ...pkg.keywords\n .filter((v) => Boolean(v) && !KEYWORD_IGNORE_LIST.has(v))\n .slice(0, 3)\n .map((tag) => {\n return (\n <PackageTag\n key={tag}\n language={currentLanguage}\n mr={1}\n value={`\"${tag}\"`}\n zIndex=\"0 !important\"\n >\n {tag}\n </PackageTag>\n );\n }),\n ]}\n </LinkBox>\n <Text data-testid={testIds.description} fontSize=\"sm\" noOfLines={2}>\n {pkg.description}\n </Text>\n </Stack>\n\n {/* Bottom Details */}\n <Box>\n <Divider />\n <Stack maxW=\"100%\" overflow=\"hidden\" px={4} py={2} spacing={2}>\n <Text data-testid={testIds.date} fontSize=\"sm\" isTruncated>\n {publishDate}\n </Text>\n\n <UILink\n as={Link}\n color=\"blue.500\"\n data-testid={testIds.author}\n fontSize=\"sm\"\n to={getSearchPath({ query: authorName })}\n >\n {authorName}\n </UILink>\n\n {/* Language Support Icons */}\n <LinkBox\n align=\"center\"\n as={Stack}\n data-testid={testIds.languages}\n direction=\"row\"\n >\n {Object.entries(LANGUAGE_RENDER_MAP)\n // Ensure entries are always sorted in a stable way\n .sort(\n ([left], [right]) =>\n LANGUAGES.indexOf(left as Language) -\n LANGUAGES.indexOf(right as Language)\n )\n .map(([lang, info]) => {\n const language = lang as Language;\n\n const isSupportedByLibrary =\n language === Language.TypeScript ||\n targets.includes(language);\n\n const isSupportedByConstructHub =\n language === Language.TypeScript || // TypeScript is always supported\n // Otherwise, the language must be supported by ConstructHub\n TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (!isSupportedByLibrary) return null;\n\n const { name, icon: Icon } = info;\n\n const icon = (\n <Icon\n aria-label={`Supports ${name}`}\n h={6}\n opacity={isSupportedByConstructHub ? 1 : 0.2}\n w={6}\n />\n );\n\n return (\n <LanguageSupportTooltip key={language} language={language}>\n {isSupportedByConstructHub ? (\n <Link\n aria-label={`View package docs for ${language}`}\n to={getUrl({ language })}\n >\n {icon}\n </Link>\n ) : (\n icon\n )}\n </LanguageSupportTooltip>\n );\n })}\n </LinkBox>\n </Stack>\n </Box>\n </CatalogCardContainer>\n );\n};\n","import { SimpleGrid } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const ResultsGrid: FunctionComponent = ({ children }) => (\n <SimpleGrid\n columns={{\n base: 1,\n sm: 2,\n md: 3,\n lg: 4,\n xl: 5,\n \"2xl\": 6,\n }}\n spacing={6}\n >\n {children}\n </SimpleGrid>\n);\n","import { FunctionComponent, memo } from \"react\";\nimport { Packages } from \"../../api/package/packages\";\nimport { Language } from \"../../constants/languages\";\nimport { CatalogCard } from \"../CatalogCard\";\nimport { ResultsGrid } from \"./ResultsGrid\";\n\nexport interface ResultsProps {\n language?: Language;\n results: Packages[\"packages\"];\n skeleton?: {\n loading: boolean;\n noOfItems: number;\n };\n}\n\nconst ResultsComponent: FunctionComponent<ResultsProps> = ({\n language,\n results,\n}) => {\n return (\n <ResultsGrid>\n {results.map((pkg, idx) => (\n <CatalogCard key={`${pkg.name}-${idx}`} language={language} pkg={pkg} />\n ))}\n </ResultsGrid>\n );\n};\n\nexport const Results = memo(ResultsComponent) as typeof ResultsComponent;\n","import { Icon, IconProps } from \"@chakra-ui/icon\"\nimport {\n chakra,\n forwardRef,\n omitThemingProps,\n StylesProvider,\n SystemStyleObject,\n ThemingProps,\n useMultiStyleConfig,\n useStyles,\n HTMLChakraProps,\n} from \"@chakra-ui/system\"\nimport { __DEV__ } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\n\nexport interface TagProps\n extends HTMLChakraProps<\"span\">,\n ThemingProps<\"Tag\"> {}\n\n/**\n * The tag component is used to label or categorize UI elements.\n * To style the tag globally, change the styles in `theme.components.Tag`\n * @see Docs https://chakra-ui.com/tag\n */\nexport const Tag = forwardRef<TagProps, \"span\">((props, ref) => {\n const styles = useMultiStyleConfig(\"Tag\", props)\n const ownProps = omitThemingProps(props)\n\n const containerStyles: SystemStyleObject = {\n display: \"inline-flex\",\n verticalAlign: \"top\",\n alignItems: \"center\",\n maxWidth: \"100%\",\n ...styles.container,\n }\n\n return (\n <StylesProvider value={styles}>\n <chakra.span ref={ref} {...ownProps} __css={containerStyles} />\n </StylesProvider>\n )\n})\n\nif (__DEV__) {\n Tag.displayName = \"Tag\"\n}\n\nexport interface TagLabelProps extends HTMLChakraProps<\"span\"> {}\n\nexport const TagLabel = forwardRef<TagLabelProps, \"span\">((props, ref) => {\n const styles = useStyles()\n return <chakra.span ref={ref} isTruncated {...props} __css={styles.label} />\n})\n\nif (__DEV__) {\n TagLabel.displayName = \"TagLabel\"\n}\n\nexport const TagLeftIcon = forwardRef<IconProps, \"svg\">((props, ref) => (\n <Icon ref={ref} verticalAlign=\"top\" marginEnd=\"0.5rem\" {...props} />\n))\n\nif (__DEV__) {\n TagLeftIcon.displayName = \"TagLeftIcon\"\n}\n\nexport const TagRightIcon = forwardRef<IconProps, \"svg\">((props, ref) => (\n <Icon ref={ref} verticalAlign=\"top\" marginStart=\"0.5rem\" {...props} />\n))\n\nif (__DEV__) {\n TagRightIcon.displayName = \"TagRightIcon\"\n}\n\nconst TagCloseIcon: React.FC<IconProps> = (props) => (\n <Icon verticalAlign=\"inherit\" viewBox=\"0 0 512 512\" {...props}>\n <path\n fill=\"currentColor\"\n d=\"M289.94 256l95-95A24 24 0 00351 127l-95 95-95-95a24 24 0 00-34 34l95 95-95 95a24 24 0 1034 34l95-95 95 95a24 24 0 0034-34z\"\n />\n </Icon>\n)\n\nif (__DEV__) {\n TagCloseIcon.displayName = \"TagCloseIcon\"\n}\n\nexport interface TagCloseButtonProps\n extends Omit<HTMLChakraProps<\"button\">, \"disabled\"> {\n isDisabled?: boolean\n}\n\n/**\n * TagCloseButton is used to close \"remove\" the tag\n * @see Docs https://chakra-ui.com/tag\n */\nexport const TagCloseButton: React.FC<TagCloseButtonProps> = (props) => {\n const { isDisabled, children, ...rest } = props\n\n const styles = useStyles()\n\n const btnStyles: SystemStyleObject = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n outline: \"0\",\n ...styles.closeButton,\n }\n\n return (\n <chakra.button\n {...rest}\n type=\"button\"\n aria-label=\"close\"\n disabled={isDisabled}\n __css={btnStyles}\n >\n {children || <TagCloseIcon />}\n </chakra.button>\n )\n}\n\nif (__DEV__) {\n TagCloseButton.displayName = \"TagCloseButton\"\n}\n","import { createIcon } from \"@chakra-ui/icon\"\n\nexport const ArrowForwardIcon = createIcon({\n d: \"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\",\n displayName: \"ArrowForwardIcon\",\n})\n","import { createIcon } from \"@chakra-ui/icon\"\n\nexport const ChevronLeftIcon = createIcon({\n d: \"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\",\n displayName: \"ChevronLeftIcon\",\n})\n","import { useBreakpointValue } from \"@chakra-ui/media-query\"\nimport {\n chakra,\n forwardRef,\n keyframes,\n omitThemingProps,\n ThemingProps,\n useStyleConfig,\n HTMLChakraProps,\n} from \"@chakra-ui/system\"\nimport { usePrevious } from \"@chakra-ui/hooks\"\nimport { cx, __DEV__ } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\n\nexport interface SkeletonOptions {\n /**\n * The color at the animation start\n */\n startColor?: string\n /**\n * The color at the animation end\n */\n endColor?: string\n /**\n * If `true`, it'll render its children with a nice fade transition\n */\n isLoaded?: boolean\n /**\n * The animation speed in seconds\n * @default\n * 0.8\n */\n speed?: number\n /**\n * The fadeIn duration in seconds\n *\n * @default\n * 0.4\n */\n fadeDuration?: number\n}\n\nconst StyledSkeleton = chakra(\"div\", {\n baseStyle: {\n boxShadow: \"none\",\n backgroundClip: \"padding-box\",\n cursor: \"default\",\n color: \"transparent\",\n pointerEvents: \"none\",\n userSelect: \"none\",\n \"&::before, &::after, *\": {\n visibility: \"hidden\",\n },\n },\n})\n\nexport type ISkeleton = SkeletonOptions\n\nexport interface SkeletonProps\n extends HTMLChakraProps<\"div\">,\n SkeletonOptions,\n ThemingProps<\"Skeleton\"> {}\n\nconst fade = keyframes({\n from: { opacity: 0 },\n to: { opacity: 1 },\n})\n\nconst useIsFirstRender = () => {\n const isFirstRender = React.useRef(true)\n\n React.useEffect(() => {\n isFirstRender.current = false\n }, [])\n\n return isFirstRender.current\n}\n\nexport const Skeleton = forwardRef<SkeletonProps, \"div\">((props, ref) => {\n const styles = useStyleConfig(\"Skeleton\", props)\n const isFirstRender = useIsFirstRender()\n\n const {\n startColor,\n endColor,\n isLoaded,\n fadeDuration,\n speed,\n className,\n ...rest\n } = omitThemingProps(props)\n\n const wasPreviouslyLoaded = usePrevious(isLoaded)\n\n const _className = cx(\"chakra-skeleton\", className)\n\n if (isLoaded) {\n const animation =\n isFirstRender || wasPreviouslyLoaded ? \"none\" : `${fade} ${fadeDuration}s`\n\n return (\n <chakra.div\n ref={ref}\n className={_className}\n __css={{ animation }}\n {...rest}\n />\n )\n }\n\n return (\n <StyledSkeleton ref={ref} className={_className} {...rest} __css={styles} />\n )\n})\n\nSkeleton.defaultProps = {\n fadeDuration: 0.4,\n speed: 0.8,\n}\n\nif (__DEV__) {\n Skeleton.displayName = \"Skeleton\"\n}\n\nfunction range(count: number) {\n return Array(count)\n .fill(1)\n .map((_, index) => index + 1)\n}\n\nexport interface SkeletonTextProps extends SkeletonProps {\n spacing?: SkeletonProps[\"margin\"]\n skeletonHeight?: SkeletonProps[\"height\"]\n startColor?: SkeletonProps[\"startColor\"]\n endColor?: SkeletonProps[\"endColor\"]\n isLoaded?: SkeletonProps[\"isLoaded\"]\n}\n\nconst defaultNoOfLines = 3\n\nexport const SkeletonText: React.FC<SkeletonTextProps> = (props) => {\n const {\n noOfLines = defaultNoOfLines,\n spacing = \"0.5rem\",\n skeletonHeight = \"0.5rem\",\n className,\n startColor,\n endColor,\n isLoaded,\n fadeDuration,\n speed,\n children,\n ...rest\n } = props\n\n const noOfLinesValue =\n useBreakpointValue(\n typeof noOfLines === \"number\" ? [noOfLines] : noOfLines,\n ) || defaultNoOfLines\n const numbers = range(noOfLinesValue)\n\n const getWidth = (index: number) => {\n if (noOfLinesValue > 1) {\n return index === numbers.length ? \"80%\" : \"100%\"\n }\n return \"100%\"\n }\n\n const _className = cx(\"chakra-skeleton__group\", className)\n\n return (\n <chakra.div className={_className} {...rest}>\n {numbers.map((number, index) => {\n if (isLoaded && index > 0) {\n // skip other lines\n return null\n }\n\n const sizeProps = isLoaded\n ? null\n : {\n mb: number === numbers.length ? \"0\" : spacing,\n width: getWidth(number),\n height: skeletonHeight,\n }\n\n return (\n <Skeleton\n key={numbers.length.toString() + number}\n startColor={startColor}\n endColor={endColor}\n isLoaded={isLoaded}\n fadeDuration={fadeDuration}\n speed={speed}\n {...sizeProps}\n >\n {\n // allows animating the children\n index === 0 ? children : undefined\n }\n </Skeleton>\n )\n })}\n </chakra.div>\n )\n}\n\nif (__DEV__) {\n SkeletonText.displayName = \"SkeletonText\"\n}\n\nexport const SkeletonCircle: React.FC<SkeletonProps> = ({\n size = \"2rem\",\n ...rest\n}) => <Skeleton borderRadius=\"full\" boxSize={size} {...rest} />\n\nif (__DEV__) {\n SkeletonCircle.displayName = \"SkeletonCircle\"\n}\n","import { useRef, useEffect } from \"react\"\n\nexport function usePrevious<T>(value: T) {\n const ref = useRef<T | undefined>()\n\n useEffect(() => {\n ref.current = value\n }, [value])\n\n return ref.current as T\n}\n"],"sourceRoot":""}
1
+ {"version":3,"sources":["constants/pageInfo.ts","components/Page/Page.tsx","components/LanguageSupportTooltip/LanguageSupportTooltip.tsx","components/Time/Time.tsx","constants/keywords.ts","components/PackageTag/PackageTag.tsx","../../../src/link-box.tsx","../../../src/ChevronRight.tsx","components/CatalogCard/testIds.ts","components/CatalogCard/CatalogCardContainer.tsx","components/CatalogCard/CatalogCardSkeleton.tsx","components/CatalogCard/CatalogCard.tsx","components/Results/ResultsGrid.tsx","components/Results/Results.tsx","../../../src/tag.tsx","../../../src/ArrowForward.tsx","../../../src/ChevronLeft.tsx","../../../src/skeleton.tsx","../../../src/use-previous.ts"],"names":["pageInfo","home","event","name","faq","packageProfile","search","siteTerms","notFound","page","pageType","Page","children","meta","pageName","trackPageView","usePageView","useEffect","suffix","title","description","formattedTitle","Helmet","process","content","charSet","property","LanguageSupportTooltip","language","TEMP_SUPPORTED_LANGUAGES","has","hasArrow","label","LANGUAGE_NAME_MAP","placement","Time","forwardRef","ref","date","formatString","format","boxProps","as","dateTime","toISOString","displayName","KEYWORD_IGNORE_LIST","Set","PackageTag","value","zIndex","tagProps","NavLink","to","getSearchPath","query","_hover","textDecoration","LinkOverlay","className","cx","rel","isExternal","target","__css","position","cursor","display","top","left","width","height","LinkBox","ChevronRightIcon","createIcon","d","testIds","createTestIds","CardContainer","Card","h","p","w","overflow","templateColumns","templateRows","CatalogCardContainer","isLink","bg","container","CatalogCardSkeleton","spacing","align","direction","px","py","CatalogCard","currentLanguage","pkg","publishDate","metadata","Date","fontSize","author","languages","targets","Object","keys","getUrl","params","getPackagePath","version","authorName","maxH","maxW","Link","color","fontWeight","isTruncated","ml","Flex","tags","flexWrap","startsWith","mr","variant","keywords","filter","v","Boolean","slice","map","tag","noOfLines","Stack","entries","LANGUAGE_RENDER_MAP","sort","right","LANGUAGES","indexOf","lang","info","isSupportedByLibrary","Language","TypeScript","includes","isSupportedByConstructHub","Icon","icon","opacity","ResultsGrid","columns","base","sm","md","lg","xl","ResultsComponent","results","idx","Results","memo","Tag","styles","useMultiStyleConfig","ownProps","omitThemingProps","containerStyles","verticalAlign","alignItems","maxWidth","TagLabel","useStyles","TagLeftIcon","marginEnd","TagRightIcon","marginStart","TagCloseIcon","props","viewBox","fill","ArrowForwardIcon","ChevronLeftIcon","StyledSkeleton","chakra","baseStyle","boxShadow","backgroundClip","pointerEvents","userSelect","visibility","fade","keyframes","from","Skeleton","useStyleConfig","isFirstRender","React","useIsFirstRender","wasPreviouslyLoaded","useRef","usePrevious","_className","animation","fadeDuration","speed"],"mappings":"0LAAaA,EAAW,CACtBC,KAAM,CACJC,MAAO,CACLC,KAAM,cAGVC,IAAK,CACHF,MAAO,CACLC,KAAM,oCAGVE,eAAgB,CACdH,MAAO,CACLC,KAAM,yBAGVG,OAAQ,CACNJ,MAAO,CACLC,KAAM,gBAGVI,UAAW,CACTL,MAAO,CACLC,KAAM,oBAGVK,SAAU,CACRC,KAAM,CACJC,SAAU,aAEZR,MAAO,CACLC,KAAM,mB,gBCjBCQ,EAAqC,SAAC,GAI5C,IAHLC,EAGI,EAHJA,SACAC,EAEI,EAFJA,KACAC,EACI,EADJA,SAEMC,EAAgBC,YAAYhB,EAASc,IAE3CG,qBAAU,WACRF,MACC,CAACA,IAEJ,MAA8CF,EAAtCK,cAAR,SAAuBC,EAAuBN,EAAvBM,MAAOC,EAAgBP,EAAhBO,YACxBC,EAAiBH,EAAM,UAAMC,EAAN,oBAAgCA,EAE7D,OACE,qCACE,eAACG,EAAA,EAAD,YACGC,EAOD,sBAAMC,QAAQ,sCAAsCrB,KAAK,aACzD,sBAAMsB,QAAQ,UAEd,gCAAQJ,IACR,sBAAMG,QAASH,EAAgBK,SAAS,aACxC,sBAAMF,QAASH,EAAgBlB,KAAK,kBACpC,sBAAMqB,QAAQ,UAAUrB,KAAK,iBAE7B,sBAAMqB,QAASJ,EAAajB,KAAK,gBACjC,sBAAMqB,QAASJ,EAAaM,SAAS,mBACrC,sBAAMF,QAASJ,EAAajB,KAAK,2BAElCS,O,+FCtCMe,EACX,SAAC,GAA4B,IAA1Bf,EAAyB,EAAzBA,SAAUgB,EAAe,EAAfA,SAGX,OAFoBC,IAAyBC,IAAIF,GAGxC,mCAAGhB,IAIV,cAAC,IAAD,CACEmB,UAAQ,EACRC,MAAK,oCAA+BC,IAAkBL,GAAjD,oBACLM,UAAU,YAHZ,SAKE,+BAAOtB,Q,2IChBFuB,EAAOC,aAClB,WAA8CC,GAAS,IAApDC,EAAmD,EAAnDA,KAAcC,EAAqC,EAA7CC,OAAyBC,EAAoB,iBACpD,OACE,cAAC,IAAD,yBAAKC,GAAG,OAAOC,SAAUL,EAAKM,cAAeP,IAAKA,GAASI,GAA3D,aACGD,YAAOF,EAAMC,SAMtBJ,EAAKU,YAAc,Q,iCCpBnB,kCAAO,IAAMC,EAAsB,IAAIC,IAAI,CAAC,MAAO,UAAW,SAAU,S,0KCa3DC,EAAiD,SAAC,GAOxD,IANLpC,EAMI,EANJA,SACAgB,EAKI,EALJA,SACAqB,EAII,EAJJA,MAII,IAHJjB,aAGI,MAHIiB,EAGJ,EAFJC,EAEI,EAFJA,OACGC,EACC,iBACJ,OACE,cAACC,EAAA,EAAD,CACE,4BAAoBpB,GACpBqB,GAAIC,YAAc,CAAEC,MAAM,GAAD,OAAKN,GAASrB,aACvCsB,OAAQA,EAHV,SAKE,cAAC,IAAD,yBACEM,OAAQ,CACNC,eAAgB,cAEdN,GAJN,aAME,cAAC,IAAD,UAAWvC,W,8dCtBZ,IAAM8C,EAActB,aAAkC,cAC3D,IAAM,EAAN,EAAM,aAAN,EAAM,SAAN,EAAM,IAA2BuB,EAAjC,EAAiCA,UAAjC,iDACA,OACE,gBAAC,IAAD,UAEEtB,IAFF,EAGEsB,UAAWC,YAAG,0BAHhB,GAIEC,IAAKC,EAAa,sBAJpB,EAKEC,OAAQD,EAAa,SALvB,EAMEE,MAAO,CACLC,SADK,SAEL,YAAa,CACXzC,QADW,KAEX0C,OAFW,UAGXC,QAHW,QAIXF,SAJW,WAKXG,IALW,EAMXC,KANW,EAOXnB,OAPW,EAQXoB,MARW,OASXC,OAAQ,eAeLC,EAAUpC,aAAgC,cAC/C,IAAEuB,EAAR,EAAQA,UAAR,qBAEA,OACE,gBAAC,IAAD,OACEtB,IADF,EAEE4B,SAAS,YAFX,GAIEN,UAAWC,YAAG,iBAJhB,GAKEI,MAAO,CAEL,qDAAsD,CACpDC,SADoD,WAEpDf,OAAQ,W,iCC3DlB,8CAEauB,EAAmBC,YAAW,CACzCC,EADyC,iDAEzC9B,YAAa,sB,0PCSA+B,EAXCC,YAAc,cAAe,CAC3C,YACA,OACA,UACA,OACA,cACA,OACA,SACA,c,OCLIC,EAAmC,SAAC,GAAD,IAAGlE,EAAH,EAAGA,SAAH,OACvC,cAACmE,EAAA,EAAD,CAAMC,EAAG,GAAIC,EAAG,EAAGC,EAAE,OAArB,SACE,cAAC,IAAD,CACExC,GAAG,UACHsC,EAAE,OACFG,SAAS,SACTC,gBAAgB,MAChBC,aAAa,UALf,SAOGzE,OAKM0E,EAAgE,SAAC,GAGvE,IAFL1E,EAEI,EAFJA,SAGA,OADI,EADJ2E,OAGE,cAAC,IAAD,CACE/B,OAAQ,CACN,iBAAkB,CAChBgC,GAAI,YAGR,cAAaZ,EAAQa,UANvB,SAQE,cAAC,EAAD,UAAgB7E,MAGlB,cAAC,EAAD,UAAgBA,K,SChCP8E,EAAyC,kBACpD,qCACE,eAAC,IAAD,CAAOT,EAAG,EAAGU,QAAS,EAAtB,UACE,cAAC,IAAD,CAAUX,EAAG,EAAGE,EAAE,QAClB,eAAC,IAAD,CAAOU,MAAM,SAASC,UAAU,MAAMF,QAAS,EAA/C,UACE,cAAC,IAAD,CAAUX,EAAG,EAAGE,EAAG,KACnB,cAAC,IAAD,CAAUF,EAAG,EAAGE,EAAG,KACnB,cAAC,IAAD,CAAUF,EAAG,EAAGE,EAAG,QAErB,cAAC,IAAD,CAAUF,EAAG,EAAGE,EAAE,QAClB,cAAC,IAAD,CAAUF,EAAG,EAAGE,EAAE,WAEpB,eAAC,IAAD,WACE,cAAC,IAAD,IACA,eAAC,IAAD,CAAOY,GAAI,EAAGC,GAAI,EAAGJ,QAAS,EAA9B,UACE,cAAC,IAAD,CAAUX,EAAG,EAAGE,EAAE,QAClB,eAAC,IAAD,CAAOU,MAAM,SAASC,UAAU,MAAMF,QAAS,EAA/C,UACE,cAAC,IAAD,CAAUX,EAAG,EAAGE,EAAG,KACnB,cAAC,IAAD,CAAUF,EAAG,EAAGE,EAAG,KACnB,cAAC,IAAD,CAAUF,EAAG,EAAGE,EAAG,KACnB,cAAC,IAAD,CAAUF,EAAG,EAAGE,EAAG,kBCgBhBc,EAAmD,SAAC,GAG1D,IAAD,MAFMC,EAEN,EAFJrE,SACAsE,EACI,EADJA,IAEA,IAAKA,EACH,OACE,cAAC,EAAD,UACE,cAAC,EAAD,MAKN,IAAMC,GAAc,UAAAD,EAAIE,gBAAJ,eAAc9D,MAChC,cAACH,EAAA,EAAD,CACEG,KAAM,IAAI+D,KAAKH,EAAIE,SAAS9D,MAC5BgE,SAAS,KACT9D,OAAO,kBAEP,KAEE+D,EAAM,UAAGL,EAAIK,cAAP,QAAiB,GACvBC,EAAS,UAAGN,EAAIM,iBAAP,QAAoB,GAC7BC,EAAUC,OAAOC,KAAKH,GAEtBI,EAAS,SAACC,GAAD,OACbC,YAAe,aACb3G,KAAM+F,EAAI/F,KACV4G,QAASb,EAAIa,QACbnF,SAAUqE,GACPY,KAGDG,EAA+B,kBAAXT,EAAsBA,EAASA,EAAOpG,KAEhE,OACE,eAAC,EAAD,CAAsBoF,QAAM,EAA5B,UACE,eAAC,IAAD,CAAO0B,KAAK,OAAOC,KAAK,OAAO/B,SAAS,SAASF,EAAG,EAAGU,QAAS,EAAhE,UAEE,cAAC,IAAD,CAAajD,GAAIyE,IAAM9D,GAAIuD,IAA3B,SACE,eAAC,IAAD,CACEQ,MAAM,WACN,cAAaxC,EAAQzE,KACrBkH,WAAW,WACXC,aAAW,EAJb,UAMGpB,EAAI/F,KAEL,cAAC,IAAD,CACEuC,GAAG,OACH0E,MAAM,WACN,cAAaxC,EAAQmC,QACrBT,SAAS,KACTiB,GAAI,EALN,SAOGrB,EAAIa,eAMX,cAAC,IAAD,CACErE,GAAI8E,IACJ,cAAa5C,EAAQ6C,KACrBC,SAAS,OACTT,KAAM,EACN9B,SAAS,SALX,UAQIe,EAAI/F,KAAKwH,WAAW,aAClB,cAAC3E,EAAA,EAAD,CAEEhB,MAAM,WACNJ,SAAUqE,EACV2B,GAAI,EACJ3E,MAAM,WACN4E,QAAQ,WANV,qBACM,YASJ,MAnBR,mBAoBO3B,EAAI4B,SACJC,QAAO,SAACC,GAAD,OAAOC,QAAQD,KAAOlF,IAAoBhB,IAAIkG,MACrDE,MAAM,EAAG,GACTC,KAAI,SAACC,GACJ,OACE,cAACpF,EAAA,EAAD,CAEEpB,SAAUqE,EACV2B,GAAI,EACJ3E,MAAK,WAAMmF,EAAN,KACLlF,OAAO,eALT,SAOGkF,GANIA,UAYjB,cAAC,IAAD,CAAM,cAAaxD,EAAQxD,YAAakF,SAAS,KAAK+B,UAAW,EAAjE,SACGnC,EAAI9E,iBAKT,eAAC,IAAD,WACE,cAAC,IAAD,IACA,eAAC,IAAD,CAAO8F,KAAK,OAAO/B,SAAS,SAASW,GAAI,EAAGC,GAAI,EAAGJ,QAAS,EAA5D,UACE,cAAC,IAAD,CAAM,cAAaf,EAAQtC,KAAMgE,SAAS,KAAKgB,aAAW,EAA1D,SACGnB,IAGH,cAAC,IAAD,CACEzD,GAAIyE,IACJC,MAAM,WACN,cAAaxC,EAAQ2B,OACrBD,SAAS,KACTjD,GAAIC,YAAc,CAAEC,MAAOyD,IAL7B,SAOGA,IAIH,cAAC,IAAD,CACEpB,MAAM,SACNlD,GAAI4F,IACJ,cAAa1D,EAAQ4B,UACrBX,UAAU,MAJZ,SAMGa,OAAO6B,QAAQC,KAEbC,MACC,kBAAEpE,EAAF,oBAAUqE,EAAV,2BACEC,IAAUC,QAAQvE,GAClBsE,IAAUC,QAAQF,MAErBP,KAAI,YAAmB,IAAD,mBAAhBU,EAAgB,KAAVC,EAAU,KACflH,EAAWiH,EAEXE,EACJnH,IAAaoH,IAASC,YACtBxC,EAAQyC,SAAStH,GAEbuH,EACJvH,IAAaoH,IAASC,YAEtBpH,IAAyBC,IAAIF,GAE/B,IAAKmH,EAAsB,OAAO,KAElC,IAAQ5I,EAAqB2I,EAArB3I,KAAYiJ,EAASN,EAAfO,KAERA,EACJ,cAACD,EAAD,CACE,gCAAwBjJ,GACxB6E,EAAG,EACHsE,QAASH,EAA4B,EAAI,GACzCjE,EAAG,IAIP,OACE,cAACvD,EAAA,EAAD,CAAuCC,SAAUA,EAAjD,SACGuH,EACC,cAAC,IAAD,CACE,6CAAqCvH,GACrCyB,GAAIuD,EAAO,CAAEhF,aAFf,SAIGyH,IAGHA,GATyBzH,kB,SCrMlC2H,EAAiC,SAAC,GAAD,IAAG3I,EAAH,EAAGA,SAAH,OAC5C,cAAC,IAAD,CACE4I,QAAS,CACPC,KAAM,EACNC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJC,GAAI,EACJ,MAAO,GAETlE,QAAS,EATX,SAWG/E,KCACkJ,EAAoD,SAAC,GAGpD,IAFLlI,EAEI,EAFJA,SACAmI,EACI,EADJA,QAEA,OACE,cAAC,EAAD,UACGA,EAAQ5B,KAAI,SAACjC,EAAK8D,GAAN,OACX,cAAC,EAAD,CAAwCpI,SAAUA,EAAUsE,IAAKA,GAAjE,UAAqBA,EAAI/F,KAAzB,YAAiC6J,UAM5BC,EAAUC,eAAKJ,I,wXCJrB,IAAMK,EAAM/H,aAA6B,cAC9C,IAAMgI,EAASC,YAAoB,MAAnC,GACMC,EAAWC,YAAjB,GAEMC,EAAqC,EAAH,CACtCrG,QADsC,cAEtCsG,cAFsC,MAGtCC,WAHsC,SAItCC,SAAU,QACPP,EALL,WAQA,OACE,qBAAgBnH,MAAOmH,GACrB,gBAAC,IAAD,QAAa/H,IAAKA,GAAlB,GAAqC2B,MAAOwG,SAK9C,EAAJ,IACEL,qBAKK,IAAMS,EAAWxI,aAAkC,cACxD,IAAMgI,EAASS,cACf,OAAO,gBAAC,IAAD,QAAaxI,IAAb,EAAuBiF,aAAW,GAAlC,GAA8CtD,MAAOoG,EAAOpI,YAGjE,EAAJ,IACE4I,0BAGK,IAAME,EAAc1I,aAA6B,qBACtD,uBAAMC,IAAN,EAAgBoI,cAAhB,MAAoCM,UAAU,UADzC,OAIH,EAAJ,IACED,6BAGK,IAAME,EAAe5I,aAA6B,qBACvD,uBAAMC,IAAN,EAAgBoI,cAAhB,MAAoCQ,YAAY,UAD3C,OAIH,EAAJ,IACED,8BAGF,IAAME,EAAqCC,YAAD,OACxC,uBAAMV,cAAN,UAA8BW,QAAQ,eAAtC,GACE,wBACEC,KADF,eAEE1G,EAAE,iIAKJ,EAAJ,IACEuG,8BAsCE,EAAJ,G,iCC1HA,8CAEaI,EAAmB5G,YAAW,CACzCC,EADyC,4DAEzC9B,YAAa,sB,iCCJf,8CAEa0I,EAAkB7G,YAAW,CACxCC,EADwC,gDAExC9B,YAAa,qB,sgBCsCf,IAAM2I,EAAiBC,YAAO,MAAO,CACnCC,UAAW,CACTC,UADS,OAETC,eAFS,cAGT1H,OAHS,UAITkD,MAJS,cAKTyE,cALS,OAMTC,WANS,OAOT,yBAA0B,CACxBC,WAAY,aAYZC,EAAOC,YAAU,CACrBC,KAAM,CAAE5C,QAAS,GACjBjG,GAAI,CAAEiG,QAAS,KAaJ6C,EAAW/J,aAAiC,cACvD,IAAMgI,EAASgC,YAAe,WAA9B,GACMC,EAZiB,WACvB,IAAMA,EAAgBC,UAAtB,GAMA,OAJAA,aAAgB,WACdD,eADFC,IAIOD,EAAP,QAKsBE,GAEtB,EAQIhC,YARJ,GAAM,EAAN,EAAM,WAAN,EAAM,aAMJ5G,EANF,EAMEA,UANF,+EAUM6I,EC1FD,YACL,IAAMnK,EAAMoK,mBAMZ,OAJAxL,qBAAU,WACRoB,cACC,CAFHpB,IAIOoB,EAAP,QDmF4BqK,CAA5B,GAEMC,EAAa/I,YAAG,kBAAtB,GAEA,KAAc,CACZ,IAAMgJ,EACJP,YAAmDL,EAAnDK,MADF,IAGA,OACE,gBAAC,IAAD,OACEhK,IADF,EAEEsB,UAFF,EAGEK,MAAO,CAAE4I,cAJb,IAUF,OACE,qBAAgBvK,IAAhB,EAA0BsB,UAAWgJ,GAArC,GAA2D3I,MAAOoG,QAItE+B,eAAwB,CACtBU,aADsB,GAEtBC,MAAO,IAGL,EAAJ,IACEX,0BAsFE,EAAJ,EASI,EAAJ","file":"static/js/2.4cb37f37.chunk.js","sourcesContent":["export const pageInfo = {\n home: {\n event: {\n name: \"Home Load\",\n },\n },\n faq: {\n event: {\n name: \"Frequently Asked Questions Load\",\n },\n },\n packageProfile: {\n event: {\n name: \"Package Profile Load\",\n },\n },\n search: {\n event: {\n name: \"Search Load\",\n },\n },\n siteTerms: {\n event: {\n name: \"Site Terms Load\",\n },\n },\n notFound: {\n page: {\n pageType: \"errorPage\",\n },\n event: {\n name: \"404 Page Load\",\n },\n },\n} as const;\n","import { FunctionComponent, useEffect } from \"react\";\nimport { Helmet } from \"react-helmet\";\nimport { pageInfo } from \"../../constants/pageInfo\";\nimport { usePageView } from \"../../contexts/Analytics\";\n\nexport interface PageProps {\n pageName: keyof typeof pageInfo;\n meta: {\n suffix?: boolean;\n title: string;\n description: string;\n };\n}\n\nexport const Page: FunctionComponent<PageProps> = ({\n children,\n meta,\n pageName,\n}) => {\n const trackPageView = usePageView(pageInfo[pageName]);\n\n useEffect(() => {\n trackPageView();\n }, [trackPageView]);\n\n const { suffix = true, title, description } = meta;\n const formattedTitle = suffix ? `${title} - Construct Hub` : title;\n\n return (\n <>\n <Helmet>\n {process.env.NODE_ENV === \"development\" && (\n <meta\n content=\"default-src 'self' 'unsafe-inline' https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; connect-src 'self' https://*.shortbread.aws.dev ws://localhost:3000 https://*.awsstatic.com https://amazonwebservices.d2.sc.omtrdc.net; frame-src 'none'; img-src 'self' https://* http://*.omtrdc.net; object-src 'none'; style-src 'self' 'unsafe-inline';\"\n httpEquiv=\"Content-Security-Policy\"\n />\n )}\n\n <meta content=\"width=device-width, initial-scale=1\" name=\"viewport\" />\n <meta charSet=\"utf-8\" />\n\n <title>{formattedTitle}</title>\n <meta content={formattedTitle} property=\"og:title\" />\n <meta content={formattedTitle} name=\"twitter:title\" />\n <meta content=\"summary\" name=\"twitter:card\" />\n\n <meta content={description} name=\"description\" />\n <meta content={description} property=\"og:description\" />\n <meta content={description} name=\"twitter:description\" />\n </Helmet>\n {children}\n </>\n );\n};\n","import { Tooltip } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport {\n Language,\n LANGUAGE_NAME_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\n\nexport interface LanguageSupportTooltipProps {\n language: Language;\n}\n\nexport const LanguageSupportTooltip: FunctionComponent<LanguageSupportTooltipProps> =\n ({ children, language }) => {\n const isSupported = TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (isSupported) {\n return <>{children}</>;\n }\n\n return (\n <Tooltip\n hasArrow\n label={`Documentation support for ${LANGUAGE_NAME_MAP[language]} is coming soon!`}\n placement=\"top-start\"\n >\n <span>{children}</span>\n </Tooltip>\n );\n };\n","import { Box, BoxProps, forwardRef } from \"@chakra-ui/react\";\nimport { format } from \"date-fns\";\n\nexport interface TimeOptions {\n date: Date;\n format: string;\n}\n\nexport interface TimeProps extends BoxProps, TimeOptions {}\n\nexport const Time = forwardRef<TimeProps, \"time\">(\n ({ date, format: formatString, ...boxProps }, ref) => {\n return (\n <Box as=\"time\" dateTime={date.toISOString()} ref={ref} {...boxProps}>\n {format(date, formatString)}\n </Box>\n );\n }\n);\n\nTime.displayName = \"Time\";\n","export const KEYWORD_IGNORE_LIST = new Set([\"aws\", \"aws-cdk\", \"awscdk\", \"cdk\"]);\n","import { Tag, TagLabel, TagProps } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Language } from \"../../constants/languages\";\nimport { getSearchPath } from \"../../util/url\";\nimport { NavLink } from \"../NavLink\";\n\nexport interface PackageTagProps extends TagProps {\n language?: Language;\n value: string;\n label?: string;\n zIndex?: string | number;\n}\n\nexport const PackageTag: FunctionComponent<PackageTagProps> = ({\n children,\n language,\n value,\n label = value,\n zIndex,\n ...tagProps\n}) => {\n return (\n <NavLink\n aria-label={`Tag: ${label}`}\n to={getSearchPath({ query: `${value}`, language })}\n zIndex={zIndex}\n >\n <Tag\n _hover={{\n textDecoration: \"underline\",\n }}\n {...tagProps}\n >\n <TagLabel>{children}</TagLabel>\n </Tag>\n </NavLink>\n );\n};\n","import { chakra, forwardRef, HTMLChakraProps } from \"@chakra-ui/system\"\nimport { cx } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\n\nexport interface LinkOverlayProps extends HTMLChakraProps<\"a\"> {\n /**\n * If `true`, the link will open in new tab\n */\n isExternal?: boolean\n}\n\nexport const LinkOverlay = forwardRef<LinkOverlayProps, \"a\">((props, ref) => {\n const { isExternal, target, rel, className, ...rest } = props\n return (\n <chakra.a\n {...rest}\n ref={ref}\n className={cx(\"chakra-linkbox__overlay\", className)}\n rel={isExternal ? \"noopener noreferrer\" : rel}\n target={isExternal ? \"_blank\" : target}\n __css={{\n position: \"static\",\n \"&::before\": {\n content: \"''\",\n cursor: \"inherit\",\n display: \"block\",\n position: \"absolute\",\n top: 0,\n left: 0,\n zIndex: 0,\n width: \"100%\",\n height: \"100%\",\n },\n }}\n />\n )\n})\n\nexport interface LinkBoxProps extends HTMLChakraProps<\"div\"> {}\n\n/**\n * `LinkBox` is used to wrap content areas within a link while ensuring semantic html\n *\n * @see Docs https://chakra-ui.com/docs/navigation/link-overlay\n * @see Resources https://www.sarasoueidan.com/blog/nested-links\n */\nexport const LinkBox = forwardRef<LinkBoxProps, \"div\">((props, ref) => {\n const { className, ...rest } = props\n\n return (\n <chakra.div\n ref={ref}\n position=\"relative\"\n {...rest}\n className={cx(\"chakra-linkbox\", className)}\n __css={{\n /* Elevate the links and abbreviations up */\n \"a[href]:not(.chakra-linkbox__overlay), abbr[title]\": {\n position: \"relative\",\n zIndex: 1,\n },\n }}\n />\n )\n})\n","import { createIcon } from \"@chakra-ui/icon\"\n\nexport const ChevronRightIcon = createIcon({\n d: \"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z\",\n displayName: \"ChevronRightIcon\",\n})\n","import { createTestIds } from \"../../util/createTestIds\";\n\nconst testIds = createTestIds(\"catalogCard\", [\n \"container\",\n \"name\",\n \"version\",\n \"tags\",\n \"description\",\n \"date\",\n \"author\",\n \"languages\",\n] as const);\n\nexport default testIds;\n","import { Grid, LinkBox } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Card } from \"../Card\";\nimport testIds from \"./testIds\";\n\nconst CardContainer: FunctionComponent = ({ children }) => (\n <Card h={64} p={0} w=\"100%\">\n <Grid\n as=\"article\"\n h=\"100%\"\n overflow=\"hidden\"\n templateColumns=\"1fr\"\n templateRows=\"2fr 1fr\"\n >\n {children}\n </Grid>\n </Card>\n);\n\nexport const CatalogCardContainer: FunctionComponent<{ isLink?: boolean }> = ({\n children,\n isLink,\n}) => {\n return isLink ? (\n <LinkBox\n _hover={{\n \"> :first-child\": {\n bg: \"gray.50\",\n },\n }}\n data-testid={testIds.container}\n >\n <CardContainer>{children}</CardContainer>\n </LinkBox>\n ) : (\n <CardContainer>{children}</CardContainer>\n );\n};\n","import { Box, Divider, Skeleton, Stack } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const CatalogCardSkeleton: FunctionComponent = () => (\n <>\n <Stack p={4} spacing={4}>\n <Skeleton h={5} w=\"50%\" />\n <Stack align=\"center\" direction=\"row\" spacing={2}>\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n </Stack>\n <Skeleton h={3} w=\"75%\" />\n <Skeleton h={3} w=\"50%\" />\n </Stack>\n <Box>\n <Divider />\n <Stack px={4} py={2} spacing={2}>\n <Skeleton h={5} w=\"25%\" />\n <Stack align=\"center\" direction=\"row\" spacing={2}>\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n <Skeleton h={5} w={10} />\n </Stack>\n </Stack>\n </Box>\n </>\n);\n","import {\n Box,\n Divider,\n Flex,\n LinkBox,\n Link as UILink,\n LinkOverlay,\n Stack,\n Text,\n} from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { CatalogPackage } from \"../../api/package/packages\";\nimport { KEYWORD_IGNORE_LIST } from \"../../constants/keywords\";\nimport {\n Language,\n LANGUAGES,\n LANGUAGE_RENDER_MAP,\n TEMP_SUPPORTED_LANGUAGES,\n} from \"../../constants/languages\";\nimport { getPackagePath, getSearchPath } from \"../../util/url\";\nimport { LanguageSupportTooltip } from \"../LanguageSupportTooltip\";\nimport { PackageTag } from \"../PackageTag\";\nimport { Time } from \"../Time\";\nimport { CatalogCardContainer } from \"./CatalogCardContainer\";\nimport { CatalogCardSkeleton } from \"./CatalogCardSkeleton\";\nimport testIds from \"./testIds\";\n\nexport interface CatalogCardProps {\n /**\n * Specifies the language to link to by default\n */\n language?: Language;\n /**\n * If undefined, will render a skeleton\n */\n pkg?: CatalogPackage;\n}\n\nexport const CatalogCard: FunctionComponent<CatalogCardProps> = ({\n language: currentLanguage,\n pkg,\n}) => {\n if (!pkg) {\n return (\n <CatalogCardContainer>\n <CatalogCardSkeleton />\n </CatalogCardContainer>\n );\n }\n\n const publishDate = pkg.metadata?.date ? (\n <Time\n date={new Date(pkg.metadata.date)}\n fontSize=\"sm\"\n format=\"MMMM dd, yyyy\"\n />\n ) : null;\n\n const author = pkg.author ?? {};\n const languages = pkg.languages ?? {};\n const targets = Object.keys(languages) as Language[];\n\n const getUrl = (params?: Partial<Parameters<typeof getPackagePath>[0]>) =>\n getPackagePath({\n name: pkg.name,\n version: pkg.version,\n language: currentLanguage,\n ...params,\n });\n\n const authorName = typeof author === \"string\" ? author : author.name;\n\n return (\n <CatalogCardContainer isLink>\n <Stack maxH=\"100%\" maxW=\"100%\" overflow=\"hidden\" p={4} spacing={0}>\n {/* Name & Version */}\n <LinkOverlay as={Link} to={getUrl()}>\n <Text\n color=\"blue.800\"\n data-testid={testIds.name}\n fontWeight=\"semibold\"\n isTruncated\n >\n {pkg.name}\n\n <Text\n as=\"span\"\n color=\"blue.500\"\n data-testid={testIds.version}\n fontSize=\"xs\"\n ml={2}\n >\n {pkg.version}\n </Text>\n </Text>\n </LinkOverlay>\n\n {/* Tags */}\n <LinkBox\n as={Flex}\n data-testid={testIds.tags}\n flexWrap=\"wrap\"\n maxH={6}\n overflow=\"hidden\"\n >\n {[\n pkg.name.startsWith(\"@aws-cdk/\") ? (\n <PackageTag\n key=\"official\"\n label=\"official\"\n language={currentLanguage}\n mr={1}\n value=\"@aws-cdk\"\n variant=\"official\"\n >\n Official\n </PackageTag>\n ) : null,\n ...pkg.keywords\n .filter((v) => Boolean(v) && !KEYWORD_IGNORE_LIST.has(v))\n .slice(0, 3)\n .map((tag) => {\n return (\n <PackageTag\n key={tag}\n language={currentLanguage}\n mr={1}\n value={`\"${tag}\"`}\n zIndex=\"0 !important\"\n >\n {tag}\n </PackageTag>\n );\n }),\n ]}\n </LinkBox>\n <Text data-testid={testIds.description} fontSize=\"sm\" noOfLines={2}>\n {pkg.description}\n </Text>\n </Stack>\n\n {/* Bottom Details */}\n <Box>\n <Divider />\n <Stack maxW=\"100%\" overflow=\"hidden\" px={4} py={2} spacing={2}>\n <Text data-testid={testIds.date} fontSize=\"sm\" isTruncated>\n {publishDate}\n </Text>\n\n <UILink\n as={Link}\n color=\"blue.500\"\n data-testid={testIds.author}\n fontSize=\"sm\"\n to={getSearchPath({ query: authorName })}\n >\n {authorName}\n </UILink>\n\n {/* Language Support Icons */}\n <LinkBox\n align=\"center\"\n as={Stack}\n data-testid={testIds.languages}\n direction=\"row\"\n >\n {Object.entries(LANGUAGE_RENDER_MAP)\n // Ensure entries are always sorted in a stable way\n .sort(\n ([left], [right]) =>\n LANGUAGES.indexOf(left as Language) -\n LANGUAGES.indexOf(right as Language)\n )\n .map(([lang, info]) => {\n const language = lang as Language;\n\n const isSupportedByLibrary =\n language === Language.TypeScript ||\n targets.includes(language);\n\n const isSupportedByConstructHub =\n language === Language.TypeScript || // TypeScript is always supported\n // Otherwise, the language must be supported by ConstructHub\n TEMP_SUPPORTED_LANGUAGES.has(language);\n\n if (!isSupportedByLibrary) return null;\n\n const { name, icon: Icon } = info;\n\n const icon = (\n <Icon\n aria-label={`Supports ${name}`}\n h={6}\n opacity={isSupportedByConstructHub ? 1 : 0.2}\n w={6}\n />\n );\n\n return (\n <LanguageSupportTooltip key={language} language={language}>\n {isSupportedByConstructHub ? (\n <Link\n aria-label={`View package docs for ${language}`}\n to={getUrl({ language })}\n >\n {icon}\n </Link>\n ) : (\n icon\n )}\n </LanguageSupportTooltip>\n );\n })}\n </LinkBox>\n </Stack>\n </Box>\n </CatalogCardContainer>\n );\n};\n","import { SimpleGrid } from \"@chakra-ui/react\";\nimport type { FunctionComponent } from \"react\";\n\nexport const ResultsGrid: FunctionComponent = ({ children }) => (\n <SimpleGrid\n columns={{\n base: 1,\n sm: 2,\n md: 3,\n lg: 4,\n xl: 5,\n \"2xl\": 6,\n }}\n spacing={6}\n >\n {children}\n </SimpleGrid>\n);\n","import { FunctionComponent, memo } from \"react\";\nimport { Packages } from \"../../api/package/packages\";\nimport { Language } from \"../../constants/languages\";\nimport { CatalogCard } from \"../CatalogCard\";\nimport { ResultsGrid } from \"./ResultsGrid\";\n\nexport interface ResultsProps {\n language?: Language;\n results: Packages[\"packages\"];\n skeleton?: {\n loading: boolean;\n noOfItems: number;\n };\n}\n\nconst ResultsComponent: FunctionComponent<ResultsProps> = ({\n language,\n results,\n}) => {\n return (\n <ResultsGrid>\n {results.map((pkg, idx) => (\n <CatalogCard key={`${pkg.name}-${idx}`} language={language} pkg={pkg} />\n ))}\n </ResultsGrid>\n );\n};\n\nexport const Results = memo(ResultsComponent) as typeof ResultsComponent;\n","import { Icon, IconProps } from \"@chakra-ui/icon\"\nimport {\n chakra,\n forwardRef,\n omitThemingProps,\n StylesProvider,\n SystemStyleObject,\n ThemingProps,\n useMultiStyleConfig,\n useStyles,\n HTMLChakraProps,\n} from \"@chakra-ui/system\"\nimport { __DEV__ } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\n\nexport interface TagProps\n extends HTMLChakraProps<\"span\">,\n ThemingProps<\"Tag\"> {}\n\n/**\n * The tag component is used to label or categorize UI elements.\n * To style the tag globally, change the styles in `theme.components.Tag`\n * @see Docs https://chakra-ui.com/tag\n */\nexport const Tag = forwardRef<TagProps, \"span\">((props, ref) => {\n const styles = useMultiStyleConfig(\"Tag\", props)\n const ownProps = omitThemingProps(props)\n\n const containerStyles: SystemStyleObject = {\n display: \"inline-flex\",\n verticalAlign: \"top\",\n alignItems: \"center\",\n maxWidth: \"100%\",\n ...styles.container,\n }\n\n return (\n <StylesProvider value={styles}>\n <chakra.span ref={ref} {...ownProps} __css={containerStyles} />\n </StylesProvider>\n )\n})\n\nif (__DEV__) {\n Tag.displayName = \"Tag\"\n}\n\nexport interface TagLabelProps extends HTMLChakraProps<\"span\"> {}\n\nexport const TagLabel = forwardRef<TagLabelProps, \"span\">((props, ref) => {\n const styles = useStyles()\n return <chakra.span ref={ref} isTruncated {...props} __css={styles.label} />\n})\n\nif (__DEV__) {\n TagLabel.displayName = \"TagLabel\"\n}\n\nexport const TagLeftIcon = forwardRef<IconProps, \"svg\">((props, ref) => (\n <Icon ref={ref} verticalAlign=\"top\" marginEnd=\"0.5rem\" {...props} />\n))\n\nif (__DEV__) {\n TagLeftIcon.displayName = \"TagLeftIcon\"\n}\n\nexport const TagRightIcon = forwardRef<IconProps, \"svg\">((props, ref) => (\n <Icon ref={ref} verticalAlign=\"top\" marginStart=\"0.5rem\" {...props} />\n))\n\nif (__DEV__) {\n TagRightIcon.displayName = \"TagRightIcon\"\n}\n\nconst TagCloseIcon: React.FC<IconProps> = (props) => (\n <Icon verticalAlign=\"inherit\" viewBox=\"0 0 512 512\" {...props}>\n <path\n fill=\"currentColor\"\n d=\"M289.94 256l95-95A24 24 0 00351 127l-95 95-95-95a24 24 0 00-34 34l95 95-95 95a24 24 0 1034 34l95-95 95 95a24 24 0 0034-34z\"\n />\n </Icon>\n)\n\nif (__DEV__) {\n TagCloseIcon.displayName = \"TagCloseIcon\"\n}\n\nexport interface TagCloseButtonProps\n extends Omit<HTMLChakraProps<\"button\">, \"disabled\"> {\n isDisabled?: boolean\n}\n\n/**\n * TagCloseButton is used to close \"remove\" the tag\n * @see Docs https://chakra-ui.com/tag\n */\nexport const TagCloseButton: React.FC<TagCloseButtonProps> = (props) => {\n const { isDisabled, children, ...rest } = props\n\n const styles = useStyles()\n\n const btnStyles: SystemStyleObject = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n outline: \"0\",\n ...styles.closeButton,\n }\n\n return (\n <chakra.button\n {...rest}\n type=\"button\"\n aria-label=\"close\"\n disabled={isDisabled}\n __css={btnStyles}\n >\n {children || <TagCloseIcon />}\n </chakra.button>\n )\n}\n\nif (__DEV__) {\n TagCloseButton.displayName = \"TagCloseButton\"\n}\n","import { createIcon } from \"@chakra-ui/icon\"\n\nexport const ArrowForwardIcon = createIcon({\n d: \"M12 4l-1.41 1.41L16.17 11H4v2h12.17l-5.58 5.59L12 20l8-8z\",\n displayName: \"ArrowForwardIcon\",\n})\n","import { createIcon } from \"@chakra-ui/icon\"\n\nexport const ChevronLeftIcon = createIcon({\n d: \"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z\",\n displayName: \"ChevronLeftIcon\",\n})\n","import { useBreakpointValue } from \"@chakra-ui/media-query\"\nimport {\n chakra,\n forwardRef,\n keyframes,\n omitThemingProps,\n ThemingProps,\n useStyleConfig,\n HTMLChakraProps,\n} from \"@chakra-ui/system\"\nimport { usePrevious } from \"@chakra-ui/hooks\"\nimport { cx, __DEV__ } from \"@chakra-ui/utils\"\nimport * as React from \"react\"\n\nexport interface SkeletonOptions {\n /**\n * The color at the animation start\n */\n startColor?: string\n /**\n * The color at the animation end\n */\n endColor?: string\n /**\n * If `true`, it'll render its children with a nice fade transition\n */\n isLoaded?: boolean\n /**\n * The animation speed in seconds\n * @default\n * 0.8\n */\n speed?: number\n /**\n * The fadeIn duration in seconds\n *\n * @default\n * 0.4\n */\n fadeDuration?: number\n}\n\nconst StyledSkeleton = chakra(\"div\", {\n baseStyle: {\n boxShadow: \"none\",\n backgroundClip: \"padding-box\",\n cursor: \"default\",\n color: \"transparent\",\n pointerEvents: \"none\",\n userSelect: \"none\",\n \"&::before, &::after, *\": {\n visibility: \"hidden\",\n },\n },\n})\n\nexport type ISkeleton = SkeletonOptions\n\nexport interface SkeletonProps\n extends HTMLChakraProps<\"div\">,\n SkeletonOptions,\n ThemingProps<\"Skeleton\"> {}\n\nconst fade = keyframes({\n from: { opacity: 0 },\n to: { opacity: 1 },\n})\n\nconst useIsFirstRender = () => {\n const isFirstRender = React.useRef(true)\n\n React.useEffect(() => {\n isFirstRender.current = false\n }, [])\n\n return isFirstRender.current\n}\n\nexport const Skeleton = forwardRef<SkeletonProps, \"div\">((props, ref) => {\n const styles = useStyleConfig(\"Skeleton\", props)\n const isFirstRender = useIsFirstRender()\n\n const {\n startColor,\n endColor,\n isLoaded,\n fadeDuration,\n speed,\n className,\n ...rest\n } = omitThemingProps(props)\n\n const wasPreviouslyLoaded = usePrevious(isLoaded)\n\n const _className = cx(\"chakra-skeleton\", className)\n\n if (isLoaded) {\n const animation =\n isFirstRender || wasPreviouslyLoaded ? \"none\" : `${fade} ${fadeDuration}s`\n\n return (\n <chakra.div\n ref={ref}\n className={_className}\n __css={{ animation }}\n {...rest}\n />\n )\n }\n\n return (\n <StyledSkeleton ref={ref} className={_className} {...rest} __css={styles} />\n )\n})\n\nSkeleton.defaultProps = {\n fadeDuration: 0.4,\n speed: 0.8,\n}\n\nif (__DEV__) {\n Skeleton.displayName = \"Skeleton\"\n}\n\nfunction range(count: number) {\n return Array(count)\n .fill(1)\n .map((_, index) => index + 1)\n}\n\nexport interface SkeletonTextProps extends SkeletonProps {\n spacing?: SkeletonProps[\"margin\"]\n skeletonHeight?: SkeletonProps[\"height\"]\n startColor?: SkeletonProps[\"startColor\"]\n endColor?: SkeletonProps[\"endColor\"]\n isLoaded?: SkeletonProps[\"isLoaded\"]\n}\n\nconst defaultNoOfLines = 3\n\nexport const SkeletonText: React.FC<SkeletonTextProps> = (props) => {\n const {\n noOfLines = defaultNoOfLines,\n spacing = \"0.5rem\",\n skeletonHeight = \"0.5rem\",\n className,\n startColor,\n endColor,\n isLoaded,\n fadeDuration,\n speed,\n children,\n ...rest\n } = props\n\n const noOfLinesValue =\n useBreakpointValue(\n typeof noOfLines === \"number\" ? [noOfLines] : noOfLines,\n ) || defaultNoOfLines\n const numbers = range(noOfLinesValue)\n\n const getWidth = (index: number) => {\n if (noOfLinesValue > 1) {\n return index === numbers.length ? \"80%\" : \"100%\"\n }\n return \"100%\"\n }\n\n const _className = cx(\"chakra-skeleton__group\", className)\n\n return (\n <chakra.div className={_className} {...rest}>\n {numbers.map((number, index) => {\n if (isLoaded && index > 0) {\n // skip other lines\n return null\n }\n\n const sizeProps = isLoaded\n ? null\n : {\n mb: number === numbers.length ? \"0\" : spacing,\n width: getWidth(number),\n height: skeletonHeight,\n }\n\n return (\n <Skeleton\n key={numbers.length.toString() + number}\n startColor={startColor}\n endColor={endColor}\n isLoaded={isLoaded}\n fadeDuration={fadeDuration}\n speed={speed}\n {...sizeProps}\n >\n {\n // allows animating the children\n index === 0 ? children : undefined\n }\n </Skeleton>\n )\n })}\n </chakra.div>\n )\n}\n\nif (__DEV__) {\n SkeletonText.displayName = \"SkeletonText\"\n}\n\nexport const SkeletonCircle: React.FC<SkeletonProps> = ({\n size = \"2rem\",\n ...rest\n}) => <Skeleton borderRadius=\"full\" boxSize={size} {...rest} />\n\nif (__DEV__) {\n SkeletonCircle.displayName = \"SkeletonCircle\"\n}\n","import { useRef, useEffect } from \"react\"\n\nexport function usePrevious<T>(value: T) {\n const ref = useRef<T | undefined>()\n\n useEffect(() => {\n ref.current = value\n }, [value])\n\n return ref.current as T\n}\n"],"sourceRoot":""}