no-frills-ui 0.0.14-rc.1 → 0.0.14-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +365 -169
- package/dist/index.js.map +1 -1
- package/lib-esm/components/Chip/Chip.js +2 -2
- package/lib-esm/components/ChipInput/ChipInput.js +12 -5
- package/lib-esm/components/ChipInput/ChipInput.js.map +1 -1
- package/lib-esm/components/DragAndDrop/DragAndDrop.js +2 -2
- package/lib-esm/components/DragAndDrop/DragItem.js +2 -2
- package/lib-esm/components/Drawer/Drawer.d.ts +1 -1
- package/lib-esm/components/Drawer/Drawer.js +2 -3
- package/lib-esm/components/Drawer/Drawer.js.map +1 -1
- package/lib-esm/components/Groups/Group.js +3 -3
- package/lib-esm/components/Groups/Group.js.map +1 -1
- package/lib-esm/components/Input/Checkbox.d.ts +2 -0
- package/lib-esm/components/Input/Checkbox.js +54 -23
- package/lib-esm/components/Input/Checkbox.js.map +1 -1
- package/lib-esm/components/Input/Dropdown.d.ts +2 -0
- package/lib-esm/components/Input/Dropdown.js +123 -59
- package/lib-esm/components/Input/Dropdown.js.map +1 -1
- package/lib-esm/components/Input/Input.js +17 -8
- package/lib-esm/components/Input/Input.js.map +1 -1
- package/lib-esm/components/Input/Radio.d.ts +2 -0
- package/lib-esm/components/Input/Radio.js +22 -10
- package/lib-esm/components/Input/Radio.js.map +1 -1
- package/lib-esm/components/Input/RadioButton.d.ts +2 -0
- package/lib-esm/components/Input/RadioButton.js +21 -9
- package/lib-esm/components/Input/RadioButton.js.map +1 -1
- package/lib-esm/components/Input/Select.js +21 -11
- package/lib-esm/components/Input/Select.js.map +1 -1
- package/lib-esm/components/Input/TextArea.js +17 -8
- package/lib-esm/components/Input/TextArea.js.map +1 -1
- package/lib-esm/components/Input/Toggle.d.ts +2 -0
- package/lib-esm/components/Input/Toggle.js +45 -15
- package/lib-esm/components/Input/Toggle.js.map +1 -1
- package/lib-esm/components/Input/index.d.ts +1 -0
- package/lib-esm/components/Menu/MenuItem.d.ts +1 -1
- package/lib-esm/components/Menu/MenuItem.js +1 -1
- package/lib-esm/components/Menu/MenuItem.js.map +1 -1
- package/lib-esm/components/Modal/Modal.d.ts +1 -1
- package/lib-esm/components/Modal/Modal.js +1 -2
- package/lib-esm/components/Modal/Modal.js.map +1 -1
- package/lib-esm/components/Popover/Popover.d.ts +1 -1
- package/lib-esm/components/Popover/Popover.js +3 -3
- package/lib-esm/components/Popover/Popover.js.map +1 -1
- package/lib-esm/components/Stepper/Stepper.js +14 -5
- package/lib-esm/components/Stepper/Stepper.js.map +1 -1
- package/lib-esm/index.js +1 -1
- package/lib-esm/shared/LayerManager.js +2 -2
- package/lib-esm/shared/styles.d.ts +4 -0
- package/lib-esm/shared/styles.js +10 -6
- package/lib-esm/shared/styles.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Popover.js","sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useId, useRef, useState } from 'react';\nimport styled from '@emotion/styled';\nimport { Card } from '../Card';\n\nexport enum POPOVER_POSITION {\n TOP_LEFT = 'TOP_LEFT',\n TOP_RIGHT = 'TOP_RIGHT',\n BOTTOM_LEFT = 'BOTTOM_LEFT',\n BOTTOM_RIGHT = 'BOTTOM_RIGHT',\n}\n\ninterface Translate {\n x: number;\n y: number;\n}\n\nconst positionMap = {\n [POPOVER_POSITION.TOP_LEFT]: `\n bottom: calc(100% - 10px);\n left: 0;\n `,\n [POPOVER_POSITION.TOP_RIGHT]: `\n bottom: calc(100% - 10px);\n right: 0;\n `,\n [POPOVER_POSITION.BOTTOM_RIGHT]: `\n top: calc(100% - 10px);\n right: 0;\n `,\n [POPOVER_POSITION.BOTTOM_LEFT]: `\n top: calc(100% - 10px);\n left: 0;\n `,\n};\n\nconst PopoverDiv = styled.div`\n position: relative;\n display: inline-flex;\n`;\n\nconst Popper = styled(Card)<{ position: POPOVER_POSITION; translateX: number; translateY: number }>`\n position: absolute;\n width: 100%;\n min-width: 200px;\n overflow: auto;\n animation: enter 0.3s linear;\n border-radius: 3px;\n z-index: 1;\n transform: translate(${(props) => props.translateX}px, ${(props) => props.translateY}px);\n ${(props) => positionMap[props.position]}\n\n &.closing {\n /* max-height: 0px;\n opacity: 0;\n overflow: hidden; */\n animation: exit 0.3s linear;\n }\n\n @keyframes enter {\n from {\n max-height: 0px;\n opacity: 1;\n overflow: hidden;\n }\n to {\n max-height: 300px;\n opacity: 1;\n overflow: hidden;\n }\n }\n\n @keyframes exit {\n to {\n max-height: 0px;\n opacity: 1;\n overflow: hidden;\n }\n from {\n max-height: 300px;\n opacity: 1;\n overflow: hidden;\n }\n }\n`;\n\nconst KEY_CODES = {\n ESC: 27,\n};\n\ntype PopoverProps = {\n /** Opens the popover */\n open: boolean;\n /** Anchor element for the popover */\n element: React.ElementType;\n /**\n * Position of the popover around anchor element\n * @default POPOVER_POSITION.BOTTOM_LEFT\n */\n position?: POPOVER_POSITION;\n /**\n * If the popover should close on `esc` key press\n * @default true\n */\n closeOnEsc?: boolean;\n /** Popover close callback */\n onClose?: () => void;\n};\n\n/**\n * Popover Component\n * @param props - Component props\n * @param ref - Ref forwarded to the underlying HTMLDivElement\n */\nfunction PopoverComponent(\n props: React.PropsWithChildren<PopoverProps>,\n ref: React.Ref<HTMLDivElement>,\n) {\n const {\n open: propsOpen,\n element,\n position = POPOVER_POSITION.BOTTOM_LEFT,\n closeOnEsc = true,\n onClose,\n children,\n ...rest\n } = props;\n\n const [open, setOpen] = useState<boolean>(propsOpen);\n const [closing, setClosing] = useState<boolean>(false);\n const [translate, setTranslate] = useState<Translate>({ x: 0, y: 0 });\n const popperRef = useRef<HTMLDivElement | null>(null);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLElement | null>(null);\n const closeTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const focusTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const popperId = useId();\n const triggerId = useId();\n\n const close = useCallback(() => {\n // Clear any existing timeouts first\n if (closeTimeoutRef.current) {\n clearTimeout(closeTimeoutRef.current);\n }\n if (focusTimeoutRef.current) {\n clearTimeout(focusTimeoutRef.current);\n }\n\n setClosing(true);\n closeTimeoutRef.current = setTimeout(() => {\n setOpen(false);\n setTranslate({ x: 0, y: 0 });\n\n if (onClose) {\n onClose();\n }\n setClosing(false);\n\n // Restore focus to the trigger element after animation completes\n focusTimeoutRef.current = setTimeout(() => {\n if (triggerRef.current && document.body.contains(triggerRef.current)) {\n triggerRef.current.focus();\n }\n focusTimeoutRef.current = null;\n }, 50);\n closeTimeoutRef.current = null;\n }, 280);\n }, [onClose]);\n\n const keyupEventHandler = useCallback(\n (e: KeyboardEvent) => {\n if (closeOnEsc && e.keyCode === KEY_CODES.ESC) {\n close();\n }\n },\n [close, closeOnEsc],\n );\n\n const clickOutsideHandler = useCallback(\n (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n close();\n }\n },\n [close],\n );\n\n /**\n * Get called on popover mount.\n */\n useEffect(() => {\n document.addEventListener('keyup', keyupEventHandler);\n\n return () => {\n document.removeEventListener('keyup', keyupEventHandler);\n };\n }, [keyupEventHandler]);\n\n useEffect(() => {\n if (propsOpen) {\n setOpen(true);\n // Use requestAnimationFrame to add listener after current event loop\n const rafId = requestAnimationFrame(() => {\n document.addEventListener('click', clickOutsideHandler);\n });\n\n return () => {\n cancelAnimationFrame(rafId);\n document.removeEventListener('click', clickOutsideHandler);\n };\n } else {\n if (open) {\n close();\n }\n }\n }, [propsOpen, open, clickOutsideHandler, close]);\n\n useEffect(() => {\n if (open) {\n const {\n top = 0,\n left = 0,\n right = 0,\n } = popperRef.current?.getBoundingClientRect() ?? {};\n const height = popperRef.current?.scrollHeight ?? 0;\n const viewportWidth = document.documentElement.clientWidth;\n const viewportHeight = document.documentElement.clientHeight;\n const translation = { x: 0, y: 0 };\n\n if (position === POPOVER_POSITION.BOTTOM_LEFT) {\n // overflow can happen at bottom and right\n if (viewportHeight - top - height < 0) {\n translation.y = -1 * (Math.abs(viewportHeight - top - height) + 5);\n }\n if (viewportWidth - right < 0) {\n translation.x = -1 * (Math.abs(viewportWidth - right) + 5);\n }\n } else if (position == POPOVER_POSITION.BOTTOM_RIGHT) {\n // overflow can happen at bottom and left\n if (viewportHeight - top - height < 0) {\n translation.y = -1 * (Math.abs(viewportHeight - top - height) + 5);\n }\n if (left < 0) {\n translation.x = Math.abs(left) + 5;\n }\n } else if (position === POPOVER_POSITION.TOP_LEFT) {\n // overflow can happen at top and right\n if (top - height < 0) {\n translation.y = Math.abs(top - height) + 5;\n }\n if (viewportWidth - right < 0) {\n translation.x = -1 * (Math.abs(viewportWidth - right) + 5);\n }\n } else {\n // overflow can happen at top and left\n if (top - height < 0) {\n translation.y = Math.abs(top - height) + 5;\n }\n if (left < 0) {\n translation.x = Math.abs(left) + 5;\n }\n }\n // Note it can still overflow, but in that case fitting popper inside the\n // window is not possible.\n setTranslate(translation);\n popperRef.current?.focus();\n }\n }, [open, position]);\n\n /**\n * Cleanup timeouts on unmount\n */\n useEffect(() => {\n return () => {\n if (closeTimeoutRef.current) {\n clearTimeout(closeTimeoutRef.current);\n }\n if (focusTimeoutRef.current) {\n clearTimeout(focusTimeoutRef.current);\n }\n };\n }, []);\n\n const forwardRef = (node: HTMLDivElement | null) => {\n containerRef.current = node;\n\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }\n };\n\n return (\n <PopoverDiv ref={forwardRef} {...rest}>\n {React.createElement(element, {\n ref: triggerRef,\n id: triggerId,\n 'aria-expanded': open,\n 'aria-haspopup': 'dialog',\n 'aria-controls': popperId,\n })}\n {open && (\n <Popper\n elevated\n tabIndex={0}\n role=\"dialog\"\n aria-labelledby={triggerId}\n id={popperId}\n position={position}\n translateX={translate.x}\n translateY={translate.y}\n className={closing ? 'closing' : ''}\n ref={popperRef}\n onClick={(e) => {\n e.stopPropagation();\n e.nativeEvent.stopImmediatePropagation();\n }}\n >\n {children}\n </Popper>\n )}\n </PopoverDiv>\n );\n}\n\nconst Popover = React.forwardRef(PopoverComponent);\nexport default Popover;\n"],"names":["POPOVER_POSITION","positionMap","PopoverDiv","styled","Popper","Card","props","translateX","translateY","position","KEY_CODES","ESC","PopoverComponent","ref","open","propsOpen","element","closeOnEsc","onClose","children","rest","setOpen","useState","closing","setClosing","translate","setTranslate","x","y","popperRef","useRef","containerRef","triggerRef","closeTimeoutRef","focusTimeoutRef","popperId","useId","triggerId","close","useCallback","current","clearTimeout","setTimeout","document","body","contains","focus","keyupEventHandler","e","keyCode","clickOutsideHandler","target","useEffect","addEventListener","removeEventListener","rafId","requestAnimationFrame","cancelAnimationFrame","top","left","right","getBoundingClientRect","height","scrollHeight","viewportWidth","documentElement","clientWidth","viewportHeight","clientHeight","translation","Math","abs","forwardRef","node","_jsxs","React","createElement","id","_jsx","elevated","tabIndex","role","aria-labelledby","className","onClick","stopPropagation","nativeEvent","stopImmediatePropagation","Popover"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Popover.js","sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useId, useRef, useState } from 'react';\nimport styled from '@emotion/styled';\nimport { Card } from '../Card';\n\nexport enum POPOVER_POSITION {\n TOP_LEFT = 'TOP_LEFT',\n TOP_RIGHT = 'TOP_RIGHT',\n BOTTOM_LEFT = 'BOTTOM_LEFT',\n BOTTOM_RIGHT = 'BOTTOM_RIGHT',\n}\n\ninterface Translate {\n x: number;\n y: number;\n}\n\nconst positionMap = {\n [POPOVER_POSITION.TOP_LEFT]: `\n bottom: calc(100% - 10px);\n left: 0;\n `,\n [POPOVER_POSITION.TOP_RIGHT]: `\n bottom: calc(100% - 10px);\n right: 0;\n `,\n [POPOVER_POSITION.BOTTOM_RIGHT]: `\n top: calc(100% - 10px);\n right: 0;\n `,\n [POPOVER_POSITION.BOTTOM_LEFT]: `\n top: calc(100% - 10px);\n left: 0;\n `,\n};\n\nconst PopoverDiv = styled.div`\n position: relative;\n display: inline-flex;\n`;\n\nconst Popper = styled(Card)<{ position: POPOVER_POSITION; translateX: number; translateY: number }>`\n position: absolute;\n width: 100%;\n min-width: 200px;\n overflow: auto;\n animation: enter 0.3s linear;\n border-radius: 3px;\n z-index: 1;\n transform: translate(${(props) => props.translateX}px, ${(props) => props.translateY}px);\n ${(props) => positionMap[props.position]}\n\n &.closing {\n /* max-height: 0px;\n opacity: 0;\n overflow: hidden; */\n animation: exit 0.3s linear;\n }\n\n @keyframes enter {\n from {\n max-height: 0px;\n opacity: 1;\n overflow: hidden;\n }\n to {\n max-height: 300px;\n opacity: 1;\n overflow: hidden;\n }\n }\n\n @keyframes exit {\n to {\n max-height: 0px;\n opacity: 1;\n overflow: hidden;\n }\n from {\n max-height: 300px;\n opacity: 1;\n overflow: hidden;\n }\n }\n`;\n\nconst KEY_CODES = {\n ESC: 27,\n};\n\ntype PopoverProps = {\n /** Opens the popover */\n open: boolean;\n /** Anchor element for the popover */\n element: React.ReactElement;\n /**\n * Position of the popover around anchor element\n * @default POPOVER_POSITION.BOTTOM_LEFT\n */\n position?: POPOVER_POSITION;\n /**\n * If the popover should close on `esc` key press\n * @default true\n */\n closeOnEsc?: boolean;\n /** Popover close callback */\n onClose?: () => void;\n};\n\n/**\n * Popover Component\n * @param props - Component props\n * @param ref - Ref forwarded to the underlying HTMLDivElement\n */\nfunction PopoverComponent(\n props: React.PropsWithChildren<PopoverProps>,\n ref: React.Ref<HTMLDivElement>,\n) {\n const {\n open: propsOpen,\n element,\n position = POPOVER_POSITION.BOTTOM_LEFT,\n closeOnEsc = true,\n onClose,\n children,\n ...rest\n } = props;\n\n const [open, setOpen] = useState<boolean>(propsOpen);\n const [closing, setClosing] = useState<boolean>(false);\n const [translate, setTranslate] = useState<Translate>({ x: 0, y: 0 });\n const popperRef = useRef<HTMLDivElement | null>(null);\n const containerRef = useRef<HTMLDivElement | null>(null);\n const triggerRef = useRef<HTMLElement | null>(null);\n const closeTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const focusTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const popperId = useId();\n const triggerId = useId();\n\n const close = useCallback(() => {\n // Clear any existing timeouts first\n if (closeTimeoutRef.current) {\n clearTimeout(closeTimeoutRef.current);\n }\n if (focusTimeoutRef.current) {\n clearTimeout(focusTimeoutRef.current);\n }\n\n setClosing(true);\n closeTimeoutRef.current = setTimeout(() => {\n setOpen(false);\n setTranslate({ x: 0, y: 0 });\n\n if (onClose) {\n onClose();\n }\n setClosing(false);\n\n // Restore focus to the trigger element after animation completes\n focusTimeoutRef.current = setTimeout(() => {\n if (triggerRef.current && document.body.contains(triggerRef.current)) {\n triggerRef.current.focus();\n }\n focusTimeoutRef.current = null;\n }, 50);\n closeTimeoutRef.current = null;\n }, 280);\n }, [onClose]);\n\n const keyupEventHandler = useCallback(\n (e: KeyboardEvent) => {\n if (closeOnEsc && e.keyCode === KEY_CODES.ESC) {\n close();\n }\n },\n [close, closeOnEsc],\n );\n\n const clickOutsideHandler = useCallback(\n (e: MouseEvent) => {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n close();\n }\n },\n [close],\n );\n\n /**\n * Get called on popover mount.\n */\n useEffect(() => {\n document.addEventListener('keyup', keyupEventHandler);\n\n return () => {\n document.removeEventListener('keyup', keyupEventHandler);\n };\n }, [keyupEventHandler]);\n\n useEffect(() => {\n if (propsOpen) {\n setOpen(true);\n // Use requestAnimationFrame to add listener after current event loop\n const rafId = requestAnimationFrame(() => {\n document.addEventListener('click', clickOutsideHandler);\n });\n\n return () => {\n cancelAnimationFrame(rafId);\n document.removeEventListener('click', clickOutsideHandler);\n };\n } else {\n if (open) {\n close();\n }\n }\n }, [propsOpen, open, clickOutsideHandler, close]);\n\n useEffect(() => {\n if (open) {\n const {\n top = 0,\n left = 0,\n right = 0,\n } = popperRef.current?.getBoundingClientRect() ?? {};\n const height = popperRef.current?.scrollHeight ?? 0;\n const viewportWidth = document.documentElement.clientWidth;\n const viewportHeight = document.documentElement.clientHeight;\n const translation = { x: 0, y: 0 };\n\n if (position === POPOVER_POSITION.BOTTOM_LEFT) {\n // overflow can happen at bottom and right\n if (viewportHeight - top - height < 0) {\n translation.y = -1 * (Math.abs(viewportHeight - top - height) + 5);\n }\n if (viewportWidth - right < 0) {\n translation.x = -1 * (Math.abs(viewportWidth - right) + 5);\n }\n } else if (position == POPOVER_POSITION.BOTTOM_RIGHT) {\n // overflow can happen at bottom and left\n if (viewportHeight - top - height < 0) {\n translation.y = -1 * (Math.abs(viewportHeight - top - height) + 5);\n }\n if (left < 0) {\n translation.x = Math.abs(left) + 5;\n }\n } else if (position === POPOVER_POSITION.TOP_LEFT) {\n // overflow can happen at top and right\n if (top - height < 0) {\n translation.y = Math.abs(top - height) + 5;\n }\n if (viewportWidth - right < 0) {\n translation.x = -1 * (Math.abs(viewportWidth - right) + 5);\n }\n } else {\n // overflow can happen at top and left\n if (top - height < 0) {\n translation.y = Math.abs(top - height) + 5;\n }\n if (left < 0) {\n translation.x = Math.abs(left) + 5;\n }\n }\n // Note it can still overflow, but in that case fitting popper inside the\n // window is not possible.\n setTranslate(translation);\n popperRef.current?.focus();\n }\n }, [open, position]);\n\n /**\n * Cleanup timeouts on unmount\n */\n useEffect(() => {\n return () => {\n if (closeTimeoutRef.current) {\n clearTimeout(closeTimeoutRef.current);\n }\n if (focusTimeoutRef.current) {\n clearTimeout(focusTimeoutRef.current);\n }\n };\n }, []);\n\n const forwardRef = (node: HTMLDivElement | null) => {\n containerRef.current = node;\n\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }\n };\n\n return (\n <PopoverDiv ref={forwardRef} {...rest}>\n {React.cloneElement(element, {\n ref: triggerRef,\n id: triggerId,\n 'aria-expanded': open,\n 'aria-haspopup': 'dialog',\n 'aria-controls': popperId,\n } as React.Attributes)}\n {open && (\n <Popper\n elevated\n tabIndex={0}\n role=\"dialog\"\n aria-labelledby={triggerId}\n id={popperId}\n position={position}\n translateX={translate.x}\n translateY={translate.y}\n className={closing ? 'closing' : ''}\n ref={popperRef}\n onClick={(e) => {\n e.stopPropagation();\n e.nativeEvent.stopImmediatePropagation();\n }}\n >\n {children}\n </Popper>\n )}\n </PopoverDiv>\n );\n}\n\nconst Popover = React.forwardRef(PopoverComponent);\nexport default Popover;\n"],"names":["POPOVER_POSITION","positionMap","PopoverDiv","styled","Popper","Card","props","translateX","translateY","position","KEY_CODES","ESC","PopoverComponent","ref","open","propsOpen","element","closeOnEsc","onClose","children","rest","setOpen","useState","closing","setClosing","translate","setTranslate","x","y","popperRef","useRef","containerRef","triggerRef","closeTimeoutRef","focusTimeoutRef","popperId","useId","triggerId","close","useCallback","current","clearTimeout","setTimeout","document","body","contains","focus","keyupEventHandler","e","keyCode","clickOutsideHandler","target","useEffect","addEventListener","removeEventListener","rafId","requestAnimationFrame","cancelAnimationFrame","top","left","right","getBoundingClientRect","height","scrollHeight","viewportWidth","documentElement","clientWidth","viewportHeight","clientHeight","translation","Math","abs","forwardRef","node","_jsxs","React","cloneElement","id","_jsx","elevated","tabIndex","role","aria-labelledby","className","onClick","stopPropagation","nativeEvent","stopImmediatePropagation","Popover"],"mappings":"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"}
|
|
@@ -1,24 +1,24 @@
|
|
|
1
1
|
import { jsxs, jsx } from '@emotion/react/jsx-runtime';
|
|
2
|
-
import React, { useState, Children, isValidElement } from 'react';
|
|
2
|
+
import React, { useState, Children, useRef, useEffect, isValidElement } from 'react';
|
|
3
3
|
import styled from '@emotion/styled';
|
|
4
4
|
import { getThemeValue, THEME_NAME } from '../../shared/constants.js';
|
|
5
5
|
import { Ellipsis } from '../../shared/styles.js';
|
|
6
6
|
import Badge, { BADGE_TYPE } from '../Badge/Badge.js';
|
|
7
7
|
|
|
8
8
|
const Container$1 = /*#__PURE__*/ styled("div", {
|
|
9
|
-
target: "
|
|
9
|
+
target: "er9cpfq0",
|
|
10
10
|
label: "Container"
|
|
11
11
|
})("flex:1;display:flex;flex-direction:column;min-height:400px;");
|
|
12
12
|
const Header = /*#__PURE__*/ styled("div", {
|
|
13
|
-
target: "
|
|
13
|
+
target: "er9cpfq1",
|
|
14
14
|
label: "Header"
|
|
15
15
|
})("display:flex;flex-direction:row;justify-content:space-between;border-bottom:1px solid ", getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR), ";@media (min-width:601px){&::before{position:absolute;top:25px;left:0;right:0;height:2px;background-color:", getThemeValue(THEME_NAME.LIGHT_GREY), ";content:' ';z-index:0;}}& > *{z-index:1;}");
|
|
16
16
|
const HeaderButton = /*#__PURE__*/ styled("button", {
|
|
17
|
-
target: "
|
|
17
|
+
target: "er9cpfq2",
|
|
18
18
|
label: "HeaderButton"
|
|
19
19
|
})("border:none;padding:16px 24px 16px 16px;font-size:16px;cursor:pointer;background-color:", (props)=>props.active ? getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR) : getThemeValue(THEME_NAME.BACKGROUND), ";font-weight:", (props)=>props.active ? 'bold' : 'normal', ";overflow:hidden;display:flex;align-items:center;color:", getThemeValue(THEME_NAME.TEXT_COLOR_DARK), ";&:disabled{cursor:not-allowed;background-color:", getThemeValue(THEME_NAME.DISABLED_BACKGROUND), ";}&:enabled:hover,&:focus{background-color:", getThemeValue(THEME_NAME.PRIMARY_LIGHTER), ";}@media (max-width:600px){&{display:none;}}");
|
|
20
20
|
const MobileHeader = /*#__PURE__*/ styled("div", {
|
|
21
|
-
target: "
|
|
21
|
+
target: "er9cpfq3",
|
|
22
22
|
label: "MobileHeader"
|
|
23
23
|
})("padding:16px;font-size:16px;line-height:18px;align-items:center;font-weight:bold;flex:1;display:flex;flex-direction:row;justify-content:space-between;@media (min-width:601px){&{display:none;}}");
|
|
24
24
|
/**
|
|
@@ -30,6 +30,15 @@ const MobileHeader = /*#__PURE__*/ styled("div", {
|
|
|
30
30
|
const [active, setActive] = useState(propsActive);
|
|
31
31
|
const childrenArray = Children.toArray(children);
|
|
32
32
|
const stepRefs = [];
|
|
33
|
+
const prevActiveRef = useRef(null);
|
|
34
|
+
useEffect(()=>{
|
|
35
|
+
if (prevActiveRef.current !== propsActive) {
|
|
36
|
+
setActive(propsActive);
|
|
37
|
+
}
|
|
38
|
+
prevActiveRef.current = propsActive;
|
|
39
|
+
}, [
|
|
40
|
+
propsActive
|
|
41
|
+
]);
|
|
33
42
|
const stepClickHandler = (index)=>()=>{
|
|
34
43
|
setActive(index);
|
|
35
44
|
onStepClick?.(index);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stepper.js","sources":["../../../src/components/Stepper/Stepper.tsx"],"sourcesContent":["import React, { Children, PropsWithChildren, useState, isValidElement } from 'react';\nimport styled from '@emotion/styled';\nimport { getThemeValue, THEME_NAME } from '../../shared/constants';\nimport { Ellipsis } from '../../shared/styles';\nimport { Badge, BADGE_TYPE } from '../Badge';\n\nconst Container = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 400px;\n`;\n\nconst Header = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n border-bottom: 1px solid ${getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR)};\n\n @media (min-width: 601px) {\n &::before {\n position: absolute;\n top: 25px;\n left: 0;\n right: 0;\n height: 2px;\n background-color: ${getThemeValue(THEME_NAME.LIGHT_GREY)};\n content: ' ';\n z-index: 0;\n }\n }\n\n & > * {\n z-index: 1;\n }\n`;\n\nconst HeaderButton = styled.button<{ active: boolean }>`\n border: none;\n padding: 16px 24px 16px 16px;\n font-size: 16px;\n cursor: pointer;\n background-color: ${(props) =>\n props.active\n ? getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR)\n : getThemeValue(THEME_NAME.BACKGROUND)};\n font-weight: ${(props) => (props.active ? 'bold' : 'normal')};\n overflow: hidden;\n display: flex;\n align-items: center;\n color: ${getThemeValue(THEME_NAME.TEXT_COLOR_DARK)};\n\n &:disabled {\n cursor: not-allowed;\n background-color: ${getThemeValue(THEME_NAME.DISABLED_BACKGROUND)};\n }\n\n &:enabled:hover,\n &:focus {\n background-color: ${getThemeValue(THEME_NAME.PRIMARY_LIGHTER)};\n }\n\n @media (max-width: 600px) {\n & {\n display: none;\n }\n }\n`;\n\nconst MobileHeader = styled.div`\n padding: 16px;\n font-size: 16px;\n line-height: 18px;\n align-items: center;\n font-weight: bold;\n flex: 1;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n\n @media (min-width: 601px) {\n & {\n display: none;\n }\n }\n`;\n\ntype StepperProps = PropsWithChildren<{\n /**\n * Index of currently active step\n * @default 0\n */\n active?: number;\n /** Callback function for click event on a step */\n onStepClick?: (index: number) => void;\n}> &\n React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Stepper Component\n * @param props - Component props\n * @param ref - Ref forwarded to the underlying HTMLDivElement\n */\nfunction StepperComponent(props: StepperProps, ref: React.Ref<HTMLDivElement>) {\n const { active: propsActive = 0, onStepClick, children, ...rest } = props;\n\n const [active, setActive] = useState(propsActive);\n const childrenArray = Children.toArray(children);\n const stepRefs = [] as Array<HTMLButtonElement | null>;\n\n const stepClickHandler = (index: number) => () => {\n setActive(index);\n onStepClick?.(index);\n // Move focus to the active step\n stepRefs[index]?.focus();\n };\n\n const getBadgeType = (index: number, completed: boolean, disabled: boolean) => {\n if (disabled) {\n return BADGE_TYPE.DISABLED;\n } else if (index === active) {\n return BADGE_TYPE.PRIMARY;\n } else if (completed) {\n return BADGE_TYPE.SUCCESS;\n }\n return BADGE_TYPE.DISABLED;\n };\n\n // Keyboard navigation for step buttons\n const onStepKeyDown = (index: number) => (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === 'ArrowRight' || e.key === 'ArrowDown') {\n e.preventDefault();\n const next = (index + 1) % childrenArray.length;\n stepRefs[next]?.focus();\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') {\n e.preventDefault();\n const prev = (index - 1 + childrenArray.length) % childrenArray.length;\n stepRefs[prev]?.focus();\n }\n };\n\n return (\n <Container ref={ref} {...rest}>\n <Header role=\"tablist\" aria-label=\"Stepper Steps\">\n {Children.map(children, (child, index) => {\n if (!isValidElement(child)) return null;\n const reactElement = child as React.ReactElement<{\n disabled?: boolean;\n completed?: boolean;\n name?: string;\n }>;\n return (\n <HeaderButton\n ref={(el) => {\n stepRefs[index] = el;\n }}\n active={index === active}\n type=\"button\"\n role=\"tab\"\n aria-selected={index === active}\n aria-disabled={!!reactElement.props.disabled}\n tabIndex={index === active ? 0 : -1}\n disabled={reactElement.props.disabled}\n onClick={stepClickHandler(index)}\n onKeyDown={onStepKeyDown(index)}\n >\n <Badge\n inline\n type={getBadgeType(\n index,\n reactElement.props.completed || false,\n reactElement.props.disabled || false,\n )}\n />\n <Ellipsis>{reactElement.props.name}</Ellipsis>\n </HeaderButton>\n );\n })}\n <MobileHeader>\n <span>\n {isValidElement(childrenArray[active])\n ? (childrenArray[active] as React.ReactElement<{ name?: string }>).props\n .name\n : ''}\n </span>\n <Badge inline type={BADGE_TYPE.PRIMARY}>\n {active + 1} of {Children.count(children)}\n </Badge>\n </MobileHeader>\n </Header>\n {childrenArray[active]}\n </Container>\n );\n}\n\nconst Stepper = React.forwardRef(StepperComponent);\nexport default Stepper;\n"],"names":["Container","styled","Header","getThemeValue","THEME_NAME","BORDER_LIGHT_COLOR","LIGHT_GREY","HeaderButton","props","active","BACKGROUND","TEXT_COLOR_DARK","DISABLED_BACKGROUND","PRIMARY_LIGHTER","MobileHeader","StepperComponent","ref","propsActive","onStepClick","children","rest","setActive","useState","childrenArray","Children","toArray","stepRefs","stepClickHandler","index","focus","getBadgeType","completed","disabled","BADGE_TYPE","DISABLED","PRIMARY","SUCCESS","onStepKeyDown","e","key","preventDefault","next","length","prev","_jsxs","role","aria-label","map","child","isValidElement","reactElement","el","type","aria-selected","aria-disabled","tabIndex","onClick","onKeyDown","_jsx","Badge","inline","Ellipsis","name","span","count","Stepper","React","forwardRef"],"mappings":";;;;;;;AAMA,MAAMA,WAAAA,iBAAYC,MAAAA,CAAAA,KAAAA,EAAAA;;;;AAOlB,MAAMC,MAAAA,iBAASD,MAAAA,CAAAA,KAAAA,EAAAA;;;AAIgBE,CAAAA,CAAAA,CAAAA,wFAAAA,EAAAA,aAAAA,CAAcC,UAAAA,CAAWC,kBAAkB,CAAA,EAAA,4GAAA,EAS1CF,aAAAA,CAAcC,WAAWE,UAAU,CAAA,EAAA,4CAAA,CAAA;AAWnE,MAAMC,YAAAA,iBAAeN,MAAAA,CAAAA,QAAAA,EAAAA;;;AAKG,CAAA,CAAA,CAAA,yFAAA,EAAA,CAACO,KAAAA,GACjBA,KAAAA,CAAMC,MAAM,GACNN,aAAAA,CAAcC,UAAAA,CAAWC,kBAAkB,CAAA,GAC3CF,aAAAA,CAAcC,UAAAA,CAAWM,UAAU,CAAA,EAAA,eAAA,EAC9B,CAACF,KAAAA,GAAWA,KAAAA,CAAMC,MAAM,GAAG,MAAA,GAAS,QAAA,EAAA,yDAAA,EAI1CN,aAAAA,CAAcC,UAAAA,CAAWO,eAAe,CAAA,EAAA,kDAAA,EAIzBR,aAAAA,CAAcC,UAAAA,CAAWQ,mBAAmB,CAAA,EAAA,6CAAA,EAK5CT,aAAAA,CAAcC,WAAWS,eAAe,CAAA,EAAA,8CAAA,CAAA;AAUpE,MAAMC,YAAAA,iBAAeb,MAAAA,CAAAA,KAAAA,EAAAA;;;;AA6BrB;;;;AAIC,IACD,SAASc,gBAAAA,CAAiBP,KAAmB,EAAEQ,GAA8B,EAAA;IACzE,MAAM,EAAEP,MAAAA,EAAQQ,WAAAA,GAAc,CAAC,EAAEC,WAAW,EAAEC,QAAQ,EAAE,GAAGC,IAAAA,EAAM,GAAGZ,KAAAA;AAEpE,IAAA,MAAM,CAACC,MAAAA,EAAQY,SAAAA,CAAU,GAAGC,QAAAA,CAASL,WAAAA,CAAAA;IACrC,MAAMM,aAAAA,GAAgBC,QAAAA,CAASC,OAAO,CAACN,QAAAA,CAAAA;AACvC,IAAA,MAAMO,WAAW,EAAE;IAEnB,MAAMC,gBAAAA,GAAmB,CAACC,KAAAA,GAAkB,IAAA;YACxCP,SAAAA,CAAUO,KAAAA,CAAAA;YACVV,WAAAA,GAAcU,KAAAA,CAAAA;;YAEdF,QAAQ,CAACE,MAAM,EAAEC,KAAAA,EAAAA;AACrB,QAAA,CAAA;IAEA,MAAMC,YAAAA,GAAe,CAACF,KAAAA,EAAeG,SAAAA,EAAoBC,QAAAA,GAAAA;AACrD,QAAA,IAAIA,QAAAA,EAAU;AACV,YAAA,OAAOC,WAAWC,QAAQ;QAC9B,CAAA,MAAO,IAAIN,UAAUnB,MAAAA,EAAQ;AACzB,YAAA,OAAOwB,WAAWE,OAAO;AAC7B,QAAA,CAAA,MAAO,IAAIJ,SAAAA,EAAW;AAClB,YAAA,OAAOE,WAAWG,OAAO;AAC7B,QAAA;AACA,QAAA,OAAOH,WAAWC,QAAQ;AAC9B,IAAA,CAAA;;IAGA,MAAMG,aAAAA,GAAgB,CAACT,KAAAA,GAAkB,CAACU,CAAAA,GAAAA;AACtC,YAAA,IAAIA,EAAEC,GAAG,KAAK,gBAAgBD,CAAAA,CAAEC,GAAG,KAAK,WAAA,EAAa;AACjDD,gBAAAA,CAAAA,CAAEE,cAAc,EAAA;AAChB,gBAAA,MAAMC,OAAO,CAACb,QAAQ,CAAA,IAAKL,cAAcmB,MAAM;gBAC/ChB,QAAQ,CAACe,KAAK,EAAEZ,KAAAA,EAAAA;YACpB,CAAA,MAAO,IAAIS,EAAEC,GAAG,KAAK,eAAeD,CAAAA,CAAEC,GAAG,KAAK,SAAA,EAAW;AACrDD,gBAAAA,CAAAA,CAAEE,cAAc,EAAA;gBAChB,MAAMG,IAAAA,GAAO,CAACf,KAAAA,GAAQ,CAAA,GAAIL,cAAcmB,MAAK,IAAKnB,aAAAA,CAAcmB,MAAM;gBACtEhB,QAAQ,CAACiB,KAAK,EAAEd,KAAAA,EAAAA;AACpB,YAAA;AACJ,QAAA,CAAA;AAEA,IAAA,qBACIe,IAAA,CAAC5C,WAAAA,EAAAA;QAAUgB,GAAAA,EAAKA,GAAAA;AAAM,QAAA,GAAGI,IAAI;;0BACzBwB,IAAA,CAAC1C,MAAAA,EAAAA;gBAAO2C,IAAAA,EAAK,SAAA;gBAAUC,YAAAA,EAAW,eAAA;;AAC7BtB,oBAAAA,QAAAA,CAASuB,GAAG,CAAC5B,QAAAA,EAAU,CAAC6B,KAAAA,EAAOpB,KAAAA,GAAAA;wBAC5B,IAAI,eAACqB,cAAAA,CAAeD,KAAAA,CAAAA,EAAQ,OAAO,IAAA;AACnC,wBAAA,MAAME,YAAAA,GAAeF,KAAAA;AAKrB,wBAAA,qBACIJ,IAAA,CAACrC,YAAAA,EAAAA;AACGS,4BAAAA,GAAAA,EAAK,CAACmC,EAAAA,GAAAA;gCACFzB,QAAQ,CAACE,MAAM,GAAGuB,EAAAA;AACtB,4BAAA,CAAA;AACA1C,4BAAAA,MAAAA,EAAQmB,KAAAA,KAAUnB,MAAAA;4BAClB2C,IAAAA,EAAK,QAAA;4BACLP,IAAAA,EAAK,KAAA;AACLQ,4BAAAA,eAAAA,EAAezB,KAAAA,KAAUnB,MAAAA;AACzB6C,4BAAAA,eAAAA,EAAe,CAAC,CAACJ,YAAAA,CAAa1C,KAAK,CAACwB,QAAQ;4BAC5CuB,QAAAA,EAAU3B,KAAAA,KAAUnB,MAAAA,GAAS,CAAA,GAAI,EAAC;4BAClCuB,QAAAA,EAAUkB,YAAAA,CAAa1C,KAAK,CAACwB,QAAQ;AACrCwB,4BAAAA,OAAAA,EAAS7B,gBAAAA,CAAiBC,KAAAA,CAAAA;AAC1B6B,4BAAAA,SAAAA,EAAWpB,aAAAA,CAAcT,KAAAA,CAAAA;;8CAEzB8B,GAAA,CAACC,KAAAA,EAAAA;oCACGC,MAAM,EAAA,IAAA;AACNR,oCAAAA,IAAAA,EAAMtB,YAAAA,CACFF,KAAAA,EACAsB,YAAAA,CAAa1C,KAAK,CAACuB,SAAS,IAAI,KAAA,EAChCmB,YAAAA,CAAa1C,KAAK,CAACwB,QAAQ,IAAI,KAAA;;8CAGvC0B,GAAA,CAACG,QAAAA,EAAAA;8CAAUX,YAAAA,CAAa1C,KAAK,CAACsD;;;;AAG1C,oBAAA,CAAA,CAAA;kCACAlB,IAAA,CAAC9B,YAAAA,EAAAA;;0CACG4C,GAAA,CAACK,MAAAA,EAAAA;AACId,gCAAAA,QAAAA,gBAAAA,cAAAA,CAAe1B,aAAa,CAACd,MAAAA,CAAO,CAAA,GAC9Bc,aAAa,CAACd,MAAAA,CAAO,CAA2CD,KAAK,CACjEsD,IAAI,GACT;;0CAEVlB,IAAA,CAACe,KAAAA,EAAAA;gCAAMC,MAAM,EAAA,IAAA;AAACR,gCAAAA,IAAAA,EAAMnB,WAAWE,OAAO;;oCACjC1B,MAAAA,GAAS,CAAA;AAAE,oCAAA,MAAA;AAAKe,oCAAAA,QAAAA,CAASwC,KAAK,CAAC7C,QAAAA;;;;;;;AAI3CI,YAAAA,aAAa,CAACd,MAAAA;;;AAG3B;AAEA,MAAMwD,OAAAA,iBAAUC,KAAAA,CAAMC,UAAU,CAACpD,gBAAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"Stepper.js","sources":["../../../src/components/Stepper/Stepper.tsx"],"sourcesContent":["import React, {\n Children,\n PropsWithChildren,\n useState,\n isValidElement,\n useEffect,\n useRef,\n} from 'react';\nimport styled from '@emotion/styled';\nimport { getThemeValue, THEME_NAME } from '../../shared/constants';\nimport { Ellipsis } from '../../shared/styles';\nimport { Badge, BADGE_TYPE } from '../Badge';\n\nconst Container = styled.div`\n flex: 1;\n display: flex;\n flex-direction: column;\n min-height: 400px;\n`;\n\nconst Header = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n border-bottom: 1px solid ${getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR)};\n\n @media (min-width: 601px) {\n &::before {\n position: absolute;\n top: 25px;\n left: 0;\n right: 0;\n height: 2px;\n background-color: ${getThemeValue(THEME_NAME.LIGHT_GREY)};\n content: ' ';\n z-index: 0;\n }\n }\n\n & > * {\n z-index: 1;\n }\n`;\n\nconst HeaderButton = styled.button<{ active: boolean }>`\n border: none;\n padding: 16px 24px 16px 16px;\n font-size: 16px;\n cursor: pointer;\n background-color: ${(props) =>\n props.active\n ? getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR)\n : getThemeValue(THEME_NAME.BACKGROUND)};\n font-weight: ${(props) => (props.active ? 'bold' : 'normal')};\n overflow: hidden;\n display: flex;\n align-items: center;\n color: ${getThemeValue(THEME_NAME.TEXT_COLOR_DARK)};\n\n &:disabled {\n cursor: not-allowed;\n background-color: ${getThemeValue(THEME_NAME.DISABLED_BACKGROUND)};\n }\n\n &:enabled:hover,\n &:focus {\n background-color: ${getThemeValue(THEME_NAME.PRIMARY_LIGHTER)};\n }\n\n @media (max-width: 600px) {\n & {\n display: none;\n }\n }\n`;\n\nconst MobileHeader = styled.div`\n padding: 16px;\n font-size: 16px;\n line-height: 18px;\n align-items: center;\n font-weight: bold;\n flex: 1;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n\n @media (min-width: 601px) {\n & {\n display: none;\n }\n }\n`;\n\ntype StepperProps = PropsWithChildren<{\n /**\n * Index of currently active step\n * @default 0\n */\n active?: number;\n /** Callback function for click event on a step */\n onStepClick?: (index: number) => void;\n}> &\n React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Stepper Component\n * @param props - Component props\n * @param ref - Ref forwarded to the underlying HTMLDivElement\n */\nfunction StepperComponent(props: StepperProps, ref: React.Ref<HTMLDivElement>) {\n const { active: propsActive = 0, onStepClick, children, ...rest } = props;\n\n const [active, setActive] = useState(propsActive);\n const childrenArray = Children.toArray(children);\n const stepRefs = [] as Array<HTMLButtonElement | null>;\n\n const prevActiveRef = useRef<number | null>(null);\n\n useEffect(() => {\n if (prevActiveRef.current !== propsActive) {\n setActive(propsActive);\n }\n prevActiveRef.current = propsActive;\n }, [propsActive]);\n\n const stepClickHandler = (index: number) => () => {\n setActive(index);\n onStepClick?.(index);\n // Move focus to the active step\n stepRefs[index]?.focus();\n };\n\n const getBadgeType = (index: number, completed: boolean, disabled: boolean) => {\n if (disabled) {\n return BADGE_TYPE.DISABLED;\n } else if (index === active) {\n return BADGE_TYPE.PRIMARY;\n } else if (completed) {\n return BADGE_TYPE.SUCCESS;\n }\n return BADGE_TYPE.DISABLED;\n };\n\n // Keyboard navigation for step buttons\n const onStepKeyDown = (index: number) => (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === 'ArrowRight' || e.key === 'ArrowDown') {\n e.preventDefault();\n const next = (index + 1) % childrenArray.length;\n stepRefs[next]?.focus();\n } else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') {\n e.preventDefault();\n const prev = (index - 1 + childrenArray.length) % childrenArray.length;\n stepRefs[prev]?.focus();\n }\n };\n\n return (\n <Container ref={ref} {...rest}>\n <Header role=\"tablist\" aria-label=\"Stepper Steps\">\n {Children.map(children, (child, index) => {\n if (!isValidElement(child)) return null;\n const reactElement = child as React.ReactElement<{\n disabled?: boolean;\n completed?: boolean;\n name?: string;\n }>;\n return (\n <HeaderButton\n ref={(el) => {\n stepRefs[index] = el;\n }}\n active={index === active}\n type=\"button\"\n role=\"tab\"\n aria-selected={index === active}\n aria-disabled={!!reactElement.props.disabled}\n tabIndex={index === active ? 0 : -1}\n disabled={reactElement.props.disabled}\n onClick={stepClickHandler(index)}\n onKeyDown={onStepKeyDown(index)}\n >\n <Badge\n inline\n type={getBadgeType(\n index,\n reactElement.props.completed || false,\n reactElement.props.disabled || false,\n )}\n />\n <Ellipsis>{reactElement.props.name}</Ellipsis>\n </HeaderButton>\n );\n })}\n <MobileHeader>\n <span>\n {isValidElement(childrenArray[active])\n ? (childrenArray[active] as React.ReactElement<{ name?: string }>).props\n .name\n : ''}\n </span>\n <Badge inline type={BADGE_TYPE.PRIMARY}>\n {active + 1} of {Children.count(children)}\n </Badge>\n </MobileHeader>\n </Header>\n {childrenArray[active]}\n </Container>\n );\n}\n\nconst Stepper = React.forwardRef(StepperComponent);\nexport default Stepper;\n"],"names":["Container","styled","Header","getThemeValue","THEME_NAME","BORDER_LIGHT_COLOR","LIGHT_GREY","HeaderButton","props","active","BACKGROUND","TEXT_COLOR_DARK","DISABLED_BACKGROUND","PRIMARY_LIGHTER","MobileHeader","StepperComponent","ref","propsActive","onStepClick","children","rest","setActive","useState","childrenArray","Children","toArray","stepRefs","prevActiveRef","useRef","useEffect","current","stepClickHandler","index","focus","getBadgeType","completed","disabled","BADGE_TYPE","DISABLED","PRIMARY","SUCCESS","onStepKeyDown","e","key","preventDefault","next","length","prev","_jsxs","role","aria-label","map","child","isValidElement","reactElement","el","type","aria-selected","aria-disabled","tabIndex","onClick","onKeyDown","_jsx","Badge","inline","Ellipsis","name","span","count","Stepper","React","forwardRef"],"mappings":"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"}
|
package/lib-esm/index.js
CHANGED
|
@@ -29,7 +29,7 @@ export { default as Step } from './components/Stepper/Step.js';
|
|
|
29
29
|
export { default as Tabs } from './components/Tabs/Tabs.js';
|
|
30
30
|
export { default as Tab } from './components/Tabs/Tab.js';
|
|
31
31
|
export { TOOLTIP_POSITION, default as Tooltip } from './components/Tooltip/Tooltip.js';
|
|
32
|
-
export { Body as CardBody, Footer as CardFooter, Header as CardHeader, Body as DialogBody, Footer as DialogFooter, Header as DialogHeader, Body as DrawerBody, Footer as DrawerFooter, Header as DrawerHeader, Body as ModalBody, Footer as ModalFooter, Header as ModalHeader, Body as StepBody, Footer as StepFooter } from './shared/styles.js';
|
|
32
|
+
export { Body as CardBody, Footer as CardFooter, Header as CardHeader, Body as DialogBody, Footer as DialogFooter, Header as DialogHeader, Body as DrawerBody, Footer as DrawerFooter, Header as DrawerHeader, ErrorContainer, Body as ModalBody, Footer as ModalFooter, Header as ModalHeader, Body as StepBody, Footer as StepFooter } from './shared/styles.js';
|
|
33
33
|
export { default as AlertDialog } from './components/Dialog/AlertDialog.js';
|
|
34
34
|
export { default as ConfirmDialog } from './components/Dialog/ConfirmDialog.js';
|
|
35
35
|
export { default as PromptDialog } from './components/Dialog/PromptDialog.js';
|
|
@@ -32,7 +32,7 @@ import { getThemeValue, THEME_NAME } from './constants.js';
|
|
|
32
32
|
[5]: 'bottom: 0; right: 0; justify-content: flex-end;',
|
|
33
33
|
[6]: 'top: 0; left: 0; justify-content: center; align-items: center;'
|
|
34
34
|
};
|
|
35
|
-
/** Layer container component. */ const Container$
|
|
35
|
+
/** Layer container component. */ const Container$7 = /*#__PURE__*/ styled("div", {
|
|
36
36
|
target: "e1at2bda0",
|
|
37
37
|
label: "Container"
|
|
38
38
|
})("position:fixed;display:flex;opacity:0;transition:opacity 0.3s ease;", (props)=>POSITION_STYLE[props.position], " ", (props)=>props.overlay && `
|
|
@@ -252,7 +252,7 @@ import { getThemeValue, THEME_NAME } from './constants.js';
|
|
|
252
252
|
if (!divElement) {
|
|
253
253
|
return null;
|
|
254
254
|
}
|
|
255
|
-
return /*#__PURE__*/ createPortal(/*#__PURE__*/ jsx(Container$
|
|
255
|
+
return /*#__PURE__*/ createPortal(/*#__PURE__*/ jsx(Container$7, {
|
|
256
256
|
...props,
|
|
257
257
|
ref: ref,
|
|
258
258
|
onClick: overlayClickHandler,
|
|
@@ -14,3 +14,7 @@ export declare const Footer: import("@emotion/styled").StyledComponent<{
|
|
|
14
14
|
theme?: import("@emotion/react").Theme;
|
|
15
15
|
as?: React.ElementType;
|
|
16
16
|
}, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
|
|
17
|
+
export declare const ErrorContainer: import("@emotion/styled").StyledComponent<{
|
|
18
|
+
theme?: import("@emotion/react").Theme;
|
|
19
|
+
as?: React.ElementType;
|
|
20
|
+
}, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
|
package/lib-esm/shared/styles.js
CHANGED
|
@@ -2,21 +2,25 @@ import styled from '@emotion/styled';
|
|
|
2
2
|
import { getThemeValue, THEME_NAME } from './constants.js';
|
|
3
3
|
|
|
4
4
|
const Ellipsis = /*#__PURE__*/ styled("span", {
|
|
5
|
-
target: "
|
|
5
|
+
target: "eot8j4m0",
|
|
6
6
|
label: "Ellipsis"
|
|
7
7
|
})("white-space:nowrap;text-overflow:ellipsis;overflow:hidden;flex:1;");
|
|
8
8
|
const Header$1 = /*#__PURE__*/ styled("div", {
|
|
9
|
-
target: "
|
|
9
|
+
target: "eot8j4m1",
|
|
10
10
|
label: "Header"
|
|
11
11
|
})("padding:10px 15px;line-height:26px;border-bottom:1px solid ", getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR), ";font-size:16px;font-weight:bold;");
|
|
12
12
|
const Body$1 = /*#__PURE__*/ styled("div", {
|
|
13
|
-
target: "
|
|
13
|
+
target: "eot8j4m2",
|
|
14
14
|
label: "Body"
|
|
15
|
-
})("padding:0 15px;margin:20px 0;flex:1;overflow:
|
|
15
|
+
})("padding:0 15px;margin:20px 0;flex:1;overflow:visible;");
|
|
16
16
|
const Footer$1 = /*#__PURE__*/ styled("div", {
|
|
17
|
-
target: "
|
|
17
|
+
target: "eot8j4m3",
|
|
18
18
|
label: "Footer"
|
|
19
19
|
})("padding:10px 15px;border-top:1px solid ", getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR), ";display:flex;justify-content:flex-end;");
|
|
20
|
+
const ErrorContainer$7 = /*#__PURE__*/ styled("div", {
|
|
21
|
+
target: "eot8j4m4",
|
|
22
|
+
label: "ErrorContainer"
|
|
23
|
+
})("color:", getThemeValue(THEME_NAME.ERROR), ";padding-top:3px;font-size:12px;line-height:14px;");
|
|
20
24
|
|
|
21
|
-
export { Body$1 as Body, Ellipsis, Footer$1 as Footer, Header$1 as Header };
|
|
25
|
+
export { Body$1 as Body, Ellipsis, ErrorContainer$7 as ErrorContainer, Footer$1 as Footer, Header$1 as Header };
|
|
22
26
|
//# sourceMappingURL=styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sources":["../../src/shared/styles.ts"],"sourcesContent":["import styled from '@emotion/styled';\nimport { getThemeValue, THEME_NAME } from './constants';\n\nexport const Ellipsis = styled.span`\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n flex: 1;\n`;\n\nexport const Header = styled.div`\n padding: 10px 15px;\n line-height: 26px;\n border-bottom: 1px solid ${getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR)};\n font-size: 16px;\n font-weight: bold;\n`;\n\nexport const Body = styled.div`\n padding: 0 15px;\n margin: 20px 0;\n flex: 1;\n overflow:
|
|
1
|
+
{"version":3,"file":"styles.js","sources":["../../src/shared/styles.ts"],"sourcesContent":["import styled from '@emotion/styled';\nimport { getThemeValue, THEME_NAME } from './constants';\n\nexport const Ellipsis = styled.span`\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n flex: 1;\n`;\n\nexport const Header = styled.div`\n padding: 10px 15px;\n line-height: 26px;\n border-bottom: 1px solid ${getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR)};\n font-size: 16px;\n font-weight: bold;\n`;\n\nexport const Body = styled.div`\n padding: 0 15px;\n margin: 20px 0;\n flex: 1;\n overflow: visible;\n`;\n\nexport const Footer = styled.div`\n padding: 10px 15px;\n border-top: 1px solid ${getThemeValue(THEME_NAME.BORDER_LIGHT_COLOR)};\n display: flex;\n justify-content: flex-end;\n`;\n\nexport const ErrorContainer = styled.div`\n color: ${getThemeValue(THEME_NAME.ERROR)};\n padding-top: 3px;\n font-size: 12px;\n line-height: 14px;\n`;\n"],"names":["Ellipsis","styled","Header","getThemeValue","THEME_NAME","BORDER_LIGHT_COLOR","Body","Footer","ErrorContainer","ERROR"],"mappings":";;;MAGaA,QAAAA,iBAAWC,MAAAA,CAAAA,MAAAA,EAAAA;;;AAKtB,CAAA,CAAA,CAAA,mEAAA;MAEWC,QAAAA,iBAASD,MAAAA,CAAAA,KAAAA,EAAAA;;;kEAGSE,aAAAA,CAAcC,UAAAA,CAAWC,kBAAkB,CAAA,EAAA,mCAAA;MAK7DC,MAAAA,iBAAOL,MAAAA,CAAAA,KAAAA,EAAAA;;;AAKlB,CAAA,CAAA,CAAA,uDAAA;MAEWM,QAAAA,iBAASN,MAAAA,CAAAA,KAAAA,EAAAA;;;8CAEME,aAAAA,CAAcC,UAAAA,CAAWC,kBAAkB,CAAA,EAAA,yCAAA;MAK1DG,gBAAAA,iBAAiBP,MAAAA,CAAAA,KAAAA,EAAAA;;;aACjBE,aAAAA,CAAcC,UAAAA,CAAWK,KAAK,CAAA,EAAA,mDAAA;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "no-frills-ui",
|
|
3
|
-
"version": "0.0.14-rc.
|
|
3
|
+
"version": "0.0.14-rc.2",
|
|
4
4
|
"description": "React components that are made of styled native components. Mostly!",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "lib-esm/index.js",
|
|
@@ -123,7 +123,7 @@
|
|
|
123
123
|
"jest": "^30.2.0",
|
|
124
124
|
"jest-axe": "^10.0.0",
|
|
125
125
|
"jest-environment-jsdom": "^30.2.0",
|
|
126
|
-
"lint-staged": "^
|
|
126
|
+
"lint-staged": "^16",
|
|
127
127
|
"prettier": "^3",
|
|
128
128
|
"react": "^19.2.3",
|
|
129
129
|
"react-dom": "^19.2.3",
|