@lifesg/react-design-system 3.5.0-canary.1 → 3.5.0-canary.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/cjs/footer/footer-helper.js +1 -1
- package/cjs/footer/footer-helper.js.map +1 -1
- package/cjs/index.js +1 -1
- package/cjs/navbar/drawer.js +1 -1
- package/cjs/navbar/drawer.js.map +1 -1
- package/cjs/navbar/navbar-logo-data.js +1 -1
- package/cjs/navbar/navbar-logo-data.js.map +1 -1
- package/cjs/navbar/navbar.js +1 -1
- package/cjs/navbar/navbar.js.map +1 -1
- package/cjs/shared/internal-calendar/calendar-manager.style.js +18 -17
- package/cjs/shared/internal-calendar/calendar-manager.style.js.map +1 -1
- package/cjs/theme/colour-primitive/specs/toteboard-colour-set.js +2 -0
- package/cjs/theme/colour-primitive/specs/toteboard-colour-set.js.map +1 -0
- package/cjs/theme/colour-primitive/theme-helper.js +1 -1
- package/cjs/theme/colour-primitive/theme-helper.js.map +1 -1
- package/cjs/theme/colour-semantic/theme-helper.js +1 -1
- package/cjs/theme/colour-semantic/theme-helper.js.map +1 -1
- package/cjs/theme/font/specs/toteboard-font-set.js +2 -0
- package/cjs/theme/font/specs/toteboard-font-set.js.map +1 -0
- package/cjs/theme/font/theme-helper.js +1 -1
- package/cjs/theme/font/theme-helper.js.map +1 -1
- package/cjs/theme/font-spec/specs/toteboard-font-spec-set.js +2 -0
- package/cjs/theme/font-spec/specs/toteboard-font-spec-set.js.map +1 -0
- package/cjs/theme/font-spec/theme-helper.js +1 -1
- package/cjs/theme/font-spec/theme-helper.js.map +1 -1
- package/cjs/theme/index.js +1 -1
- package/cjs/theme/index.js.map +1 -1
- package/cjs/time-range-picker/combobox-picker/combobox-picker.js +1 -1
- package/cjs/time-range-picker/combobox-picker/combobox-picker.js.map +1 -1
- package/cjs/time-range-picker/common.styles.js +7 -3
- package/cjs/time-range-picker/common.styles.js.map +1 -1
- package/cjs/time-range-picker/dial-picker/dial-picker.js +1 -1
- package/cjs/time-range-picker/dial-picker/dial-picker.js.map +1 -1
- package/cjs/timepicker/timepicker.styles.js +7 -3
- package/cjs/timepicker/timepicker.styles.js.map +1 -1
- package/cjs/util/merge-refs.js +1 -1
- package/cjs/util/merge-refs.js.map +1 -1
- package/footer/footer-helper.js +1 -1
- package/footer/footer-helper.js.map +1 -1
- package/index.js +1 -1
- package/navbar/drawer.js +1 -1
- package/navbar/drawer.js.map +1 -1
- package/navbar/navbar-logo-data.js +1 -1
- package/navbar/navbar-logo-data.js.map +1 -1
- package/navbar/navbar.js +1 -1
- package/navbar/navbar.js.map +1 -1
- package/package.json +1 -1
- package/shared/internal-calendar/calendar-manager.style.js +18 -17
- package/shared/internal-calendar/calendar-manager.style.js.map +1 -1
- package/theme/colour-primitive/specs/toteboard-colour-set.d.ts +2 -0
- package/theme/colour-primitive/specs/toteboard-colour-set.js +2 -0
- package/theme/colour-primitive/specs/toteboard-colour-set.js.map +1 -0
- package/theme/colour-primitive/theme-helper.js +1 -1
- package/theme/colour-primitive/theme-helper.js.map +1 -1
- package/theme/colour-semantic/theme-helper.js +1 -1
- package/theme/colour-semantic/theme-helper.js.map +1 -1
- package/theme/font/specs/toteboard-font-set.d.ts +2 -0
- package/theme/font/specs/toteboard-font-set.js +2 -0
- package/theme/font/specs/toteboard-font-set.js.map +1 -0
- package/theme/font/theme-helper.js +1 -1
- package/theme/font/theme-helper.js.map +1 -1
- package/theme/font-spec/specs/toteboard-font-spec-set.d.ts +2 -0
- package/theme/font-spec/specs/toteboard-font-spec-set.js +2 -0
- package/theme/font-spec/specs/toteboard-font-spec-set.js.map +1 -0
- package/theme/font-spec/theme-helper.js +1 -1
- package/theme/font-spec/theme-helper.js.map +1 -1
- package/theme/index.d.ts +19 -0
- package/theme/index.js +1 -1
- package/theme/index.js.map +1 -1
- package/theme/types.d.ts +3 -3
- package/time-range-picker/combobox-picker/combobox-picker.js +1 -1
- package/time-range-picker/combobox-picker/combobox-picker.js.map +1 -1
- package/time-range-picker/common.styles.d.ts +6 -2
- package/time-range-picker/common.styles.js +9 -5
- package/time-range-picker/common.styles.js.map +1 -1
- package/time-range-picker/dial-picker/dial-picker.js +1 -1
- package/time-range-picker/dial-picker/dial-picker.js.map +1 -1
- package/timepicker/timepicker.styles.js +7 -3
- package/timepicker/timepicker.styles.js.map +1 -1
- package/util/merge-refs.d.ts +1 -1
- package/util/merge-refs.js +1 -1
- package/util/merge-refs.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dial-picker.js","sources":["../../../src/time-range-picker/dial-picker/dial-picker.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { concatIds } from \"../../shared/accessibility\";\nimport {\n DropdownRenderProps,\n ElementWithDropdown,\n} from \"../../shared/dropdown-wrapper\";\nimport { RangeInputInnerContainer } from \"../../shared/range-input-inner-container\";\nimport { TimepickerDropdown } from \"../../shared/timepicker-dropdown/timepicker-dropdown\";\nimport { useId } from \"../../util\";\nimport { TimeHelper } from \"../../util/time-helper\";\nimport { SelectorInput, TimeContainer, Wrapper } from \"../common.styles\";\nimport { TimeRangePickerProps, TimeRangePickerValue } from \"../types\";\n\ntype Active = \"start\" | \"end\" | \"none\";\n\nexport const DialPicker = ({\n id,\n disabled = false,\n error,\n value,\n format = \"24hr\",\n readOnly,\n onChange,\n onFocus,\n onBlur,\n alignment = \"left\",\n dropdownZIndex,\n dropdownRootNode,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n ...otherProps\n}: TimeRangePickerProps) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const [isOpen, setIsOpen] = useState(false);\n const [active, setActive] = useState<Active>(\"none\");\n const [startTimeVal, setStartTimeVal] = useState(\"\");\n const [endTimeVal, setEndTimeVal] = useState(\"\");\n const [focused, setFocused] = useState(false);\n\n const enabled = !readOnly && !disabled;\n const nodeRef = useRef<HTMLDivElement>(null);\n const internalId = useId();\n const startLabelId = `${internalId}-start-label`;\n const endLabelId = `${internalId}-end-label`;\n\n // =============================================================================\n // HELPER FUNCTIONS\n // =============================================================================\n const getDropdownAriaLabel = () => {\n if (active === \"start\") {\n return \"Selecting for: Start time\";\n }\n\n if (active === \"end\") {\n return \"Selecting for: End time\";\n }\n\n return undefined;\n };\n\n const getInputLabelledBy = (type: Exclude<Active, \"none\">) => {\n return concatIds(\n ariaLabelledBy,\n type === \"start\" ? startLabelId : endLabelId\n );\n };\n\n const getInputDescribedBy = () => {\n return concatIds(ariaDescribedBy);\n };\n // =============================================================================\n // EFFECTS\n // =============================================================================\n useEffect(() => {\n if (value) {\n setStartTimeVal(value.start);\n setEndTimeVal(value.end);\n }\n }, [value]);\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleOpen = (next: Exclude<Active, \"none\">) => {\n if (!enabled) return;\n if (!focused && !isOpen) onFocus?.();\n setFocused(true);\n setActive(next);\n setIsOpen(true);\n };\n\n const handleClose = (opts?: {\n keepFocus?: boolean;\n triggerBlur?: boolean;\n }) => {\n const keepFocus = !!opts?.keepFocus;\n const triggerBlur = opts?.triggerBlur ?? !keepFocus;\n\n setIsOpen(false);\n setActive(\"none\");\n setFocused(keepFocus);\n\n if (triggerBlur) onBlur?.();\n\n if (keepFocus) nodeRef.current?.focus();\n };\n\n const handleContainerBlur = (\n event: React.FocusEvent<HTMLDivElement, Element>\n ) => {\n if (!focused || isOpen) return;\n\n const target = event.relatedTarget as HTMLElement | null;\n\n const isFloatingElement =\n target?.matches?.(\"[data-floating-ui-focusable]\") ||\n target?.matches?.(\"[data-floating-ui-focus-guard]\");\n const isInsideNode = !!(target && nodeRef.current?.contains(target));\n\n if (!isInsideNode && !isFloatingElement) {\n setFocused(false);\n onBlur?.();\n }\n };\n\n const handleStartTime = (value: string) => {\n setStartTimeVal(value);\n onChange?.({ start: value, end: endTimeVal } as TimeRangePickerValue);\n\n setActive(\"end\");\n setIsOpen(true);\n setFocused(true);\n };\n\n const handleEndTime = (value: string) => {\n setEndTimeVal(value);\n onChange?.({ start: startTimeVal, end: value } as TimeRangePickerValue);\n\n if (startTimeVal === \"\") {\n setActive(\"start\");\n setIsOpen(true);\n setFocused(true);\n } else {\n handleClose({ keepFocus: true });\n }\n };\n\n const renderElement = () => (\n <TimeContainer\n ref={nodeRef}\n tabIndex={-1}\n onBlur={handleContainerBlur}\n data-testid=\"timepicker-container\"\n role=\"group\"\n $disabled={disabled}\n $error={error}\n $readOnly={readOnly}\n $focused={focused}\n >\n <RangeInputInnerContainer error={error} currentActive={active}>\n <SelectorInput\n onFocus={() => handleOpen(\"start\")}\n onClick={() => handleOpen(\"start\")}\n readOnly\n placeholder=\"From\"\n value={TimeHelper.formatDisplayValue(startTimeVal, format)}\n data-testid={\n otherProps[\"data-testid\"]\n ? `${otherProps[\"data-testid\"]}-timepicker-selector-from`\n : \"timepicker-selector-from\"\n }\n role=\"combobox\"\n aria-expanded={!disabled && !readOnly ? isOpen : false}\n aria-invalid={error || ariaInvalid}\n aria-disabled={disabled}\n aria-readonly={readOnly}\n aria-labelledby={getInputLabelledBy(\"start\")}\n aria-describedby={getInputDescribedBy()}\n />\n <SelectorInput\n onClick={() => handleOpen(\"end\")}\n readOnly\n placeholder=\"To\"\n value={TimeHelper.formatDisplayValue(endTimeVal, format)}\n data-testid={\n otherProps[\"data-testid\"]\n ? `${otherProps[\"data-testid\"]}-timepicker-selector-to`\n : \"timepicker-selector-to\"\n }\n role=\"combobox\"\n aria-expanded={!disabled && !readOnly ? isOpen : false}\n aria-invalid={error || ariaInvalid || undefined}\n aria-disabled={disabled || undefined}\n aria-readonly={readOnly || undefined}\n aria-labelledby={getInputLabelledBy(\"end\")}\n aria-describedby={getInputDescribedBy()}\n />\n </RangeInputInnerContainer>\n </TimeContainer>\n );\n\n const renderDropdown = ({\n styles,\n setFloatingRef,\n getFloatingProps,\n }: DropdownRenderProps) => {\n if (!isOpen) return null;\n\n return (\n <div\n ref={setFloatingRef}\n style={styles}\n role=\"dialog\"\n key={active}\n aria-label={getDropdownAriaLabel()}\n {...getFloatingProps()}\n >\n {active === \"start\" && (\n <TimepickerDropdown\n id={id ? `${id}-start` : undefined}\n show\n value={startTimeVal}\n format={format}\n onCancel={() => handleClose({ keepFocus: true })}\n onChange={handleStartTime}\n />\n )}\n {active === \"end\" && (\n <TimepickerDropdown\n id={id ? `${id}-end` : undefined}\n show\n value={endTimeVal}\n format={format}\n onCancel={() => handleClose({ keepFocus: false })}\n onChange={handleEndTime}\n />\n )}\n </div>\n );\n };\n\n return (\n <Wrapper id={id} {...otherProps}>\n <ElementWithDropdown\n enabled={enabled}\n isOpen={isOpen}\n renderElement={renderElement}\n renderDropdown={renderDropdown}\n onClose={() => handleClose({ keepFocus: false })}\n onDismiss={() => handleClose({ keepFocus: true })}\n clickToToggle={false}\n offset={8}\n alignment={alignment}\n customZIndex={dropdownZIndex}\n rootNode={dropdownRootNode}\n />\n </Wrapper>\n );\n};\n"],"names":["DialPicker","_a","id","disabled","error","value","format","readOnly","onChange","onFocus","onBlur","alignment","dropdownZIndex","dropdownRootNode","ariaLabelledBy","ariaDescribedBy","ariaInvalid","otherProps","__rest","isOpen","setIsOpen","useState","active","setActive","startTimeVal","setStartTimeVal","endTimeVal","setEndTimeVal","focused","setFocused","enabled","nodeRef","useRef","internalId","useId","startLabelId","endLabelId","getInputLabelledBy","type","concatIds","getInputDescribedBy","useEffect","start","end","handleOpen","next","handleClose","opts","keepFocus","triggerBlur","_b","current","focus","handleContainerBlur","event","target","relatedTarget","isFloatingElement","matches","call","_c","contains","handleStartTime","handleEndTime","_jsx","Wrapper","Object","assign","children","ElementWithDropdown","renderElement","TimeContainer","ref","tabIndex","role","$error","$readOnly","_jsxs","RangeInputInnerContainer","currentActive","SelectorInput","onClick","placeholder","TimeHelper","formatDisplayValue","undefined","renderDropdown","styles","setFloatingRef","getFloatingProps","style","TimepickerDropdown","show","onCancel","onClose","onDismiss","clickToToggle","offset","customZIndex","rootNode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dial-picker.js","sources":["../../../src/time-range-picker/dial-picker/dial-picker.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport { concatIds } from \"../../shared/accessibility\";\nimport {\n DropdownRenderProps,\n ElementWithDropdown,\n} from \"../../shared/dropdown-wrapper\";\nimport { RangeInputInnerContainer } from \"../../shared/range-input-inner-container\";\nimport { TimepickerDropdown } from \"../../shared/timepicker-dropdown/timepicker-dropdown\";\nimport { useId } from \"../../util\";\nimport { TimeHelper } from \"../../util/time-helper\";\nimport { SelectorInput, TimeContainer, Wrapper } from \"../common.styles\";\nimport { TimeRangePickerProps, TimeRangePickerValue } from \"../types\";\n\ntype Active = \"start\" | \"end\" | \"none\";\n\nexport const DialPicker = ({\n id,\n disabled = false,\n error,\n value,\n format = \"24hr\",\n readOnly,\n onChange,\n onFocus,\n onBlur,\n alignment = \"left\",\n dropdownZIndex,\n dropdownRootNode,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-invalid\": ariaInvalid,\n ...otherProps\n}: TimeRangePickerProps) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const [isOpen, setIsOpen] = useState(false);\n const [active, setActive] = useState<Active>(\"none\");\n const [startTimeVal, setStartTimeVal] = useState(\"\");\n const [endTimeVal, setEndTimeVal] = useState(\"\");\n const [focused, setFocused] = useState(false);\n\n const enabled = !readOnly && !disabled;\n const nodeRef = useRef<HTMLDivElement>(null);\n const internalId = useId();\n const startLabelId = `${internalId}-start-label`;\n const endLabelId = `${internalId}-end-label`;\n\n // =============================================================================\n // HELPER FUNCTIONS\n // =============================================================================\n const getDropdownAriaLabel = () => {\n if (active === \"start\") {\n return \"Selecting for: Start time\";\n }\n\n if (active === \"end\") {\n return \"Selecting for: End time\";\n }\n\n return undefined;\n };\n\n const getInputLabelledBy = (type: Exclude<Active, \"none\">) => {\n return concatIds(\n ariaLabelledBy,\n type === \"start\" ? startLabelId : endLabelId\n );\n };\n\n const getInputDescribedBy = () => {\n return concatIds(ariaDescribedBy);\n };\n // =============================================================================\n // EFFECTS\n // =============================================================================\n useEffect(() => {\n if (value) {\n setStartTimeVal(value.start);\n setEndTimeVal(value.end);\n }\n }, [value]);\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleOpen = (next: Exclude<Active, \"none\">) => {\n if (!enabled) return;\n if (!focused && !isOpen) onFocus?.();\n setFocused(true);\n setActive(next);\n setIsOpen(true);\n };\n\n const handleClose = (opts?: {\n keepFocus?: boolean;\n triggerBlur?: boolean;\n }) => {\n const keepFocus = !!opts?.keepFocus;\n const triggerBlur = opts?.triggerBlur ?? !keepFocus;\n\n setIsOpen(false);\n setActive(\"none\");\n setFocused(keepFocus);\n\n if (triggerBlur) onBlur?.();\n\n if (keepFocus) nodeRef.current?.focus();\n };\n\n const handleContainerBlur = (\n event: React.FocusEvent<HTMLDivElement, Element>\n ) => {\n if (!focused || isOpen) return;\n\n const target = event.relatedTarget as HTMLElement | null;\n\n const isFloatingElement =\n target?.matches?.(\"[data-floating-ui-focusable]\") ||\n target?.matches?.(\"[data-floating-ui-focus-guard]\");\n const isInsideNode = !!(target && nodeRef.current?.contains(target));\n\n if (!isInsideNode && !isFloatingElement) {\n setFocused(false);\n onBlur?.();\n }\n };\n\n const handleStartTime = (value: string) => {\n setStartTimeVal(value);\n onChange?.({ start: value, end: endTimeVal } as TimeRangePickerValue);\n\n setActive(\"end\");\n setIsOpen(true);\n setFocused(true);\n };\n\n const handleEndTime = (value: string) => {\n setEndTimeVal(value);\n onChange?.({ start: startTimeVal, end: value } as TimeRangePickerValue);\n\n if (startTimeVal === \"\") {\n setActive(\"start\");\n setIsOpen(true);\n setFocused(true);\n } else {\n handleClose({ keepFocus: true });\n }\n };\n\n const renderElement = () => (\n <TimeContainer\n ref={nodeRef}\n tabIndex={-1}\n onBlur={handleContainerBlur}\n data-testid=\"timepicker-container\"\n role=\"group\"\n $disabled={disabled}\n $error={error}\n $readOnly={readOnly}\n $focused={focused}\n >\n <RangeInputInnerContainer error={error} currentActive={active}>\n <SelectorInput\n onFocus={() => handleOpen(\"start\")}\n onClick={() => handleOpen(\"start\")}\n readOnly\n placeholder=\"From\"\n value={TimeHelper.formatDisplayValue(startTimeVal, format)}\n data-testid={\n otherProps[\"data-testid\"]\n ? `${otherProps[\"data-testid\"]}-timepicker-selector-from`\n : \"timepicker-selector-from\"\n }\n role=\"combobox\"\n aria-expanded={!disabled && !readOnly ? isOpen : false}\n aria-invalid={error || ariaInvalid}\n aria-disabled={disabled}\n aria-readonly={readOnly}\n aria-labelledby={getInputLabelledBy(\"start\")}\n aria-describedby={getInputDescribedBy()}\n $disabled={disabled}\n />\n <SelectorInput\n onClick={() => handleOpen(\"end\")}\n readOnly\n placeholder=\"To\"\n value={TimeHelper.formatDisplayValue(endTimeVal, format)}\n data-testid={\n otherProps[\"data-testid\"]\n ? `${otherProps[\"data-testid\"]}-timepicker-selector-to`\n : \"timepicker-selector-to\"\n }\n role=\"combobox\"\n aria-expanded={!disabled && !readOnly ? isOpen : false}\n aria-invalid={error || ariaInvalid || undefined}\n aria-disabled={disabled || undefined}\n aria-readonly={readOnly || undefined}\n aria-labelledby={getInputLabelledBy(\"end\")}\n aria-describedby={getInputDescribedBy()}\n $disabled={disabled}\n />\n </RangeInputInnerContainer>\n </TimeContainer>\n );\n\n const renderDropdown = ({\n styles,\n setFloatingRef,\n getFloatingProps,\n }: DropdownRenderProps) => {\n if (!isOpen) return null;\n\n return (\n <div\n ref={setFloatingRef}\n style={styles}\n role=\"dialog\"\n key={active}\n aria-label={getDropdownAriaLabel()}\n {...getFloatingProps()}\n >\n {active === \"start\" && (\n <TimepickerDropdown\n id={id ? `${id}-start` : undefined}\n show\n value={startTimeVal}\n format={format}\n onCancel={() => handleClose({ keepFocus: true })}\n onChange={handleStartTime}\n />\n )}\n {active === \"end\" && (\n <TimepickerDropdown\n id={id ? `${id}-end` : undefined}\n show\n value={endTimeVal}\n format={format}\n onCancel={() => handleClose({ keepFocus: false })}\n onChange={handleEndTime}\n />\n )}\n </div>\n );\n };\n\n return (\n <Wrapper id={id} {...otherProps}>\n <ElementWithDropdown\n enabled={enabled}\n isOpen={isOpen}\n renderElement={renderElement}\n renderDropdown={renderDropdown}\n onClose={() => handleClose({ keepFocus: false })}\n onDismiss={() => handleClose({ keepFocus: true })}\n clickToToggle={false}\n offset={8}\n alignment={alignment}\n customZIndex={dropdownZIndex}\n rootNode={dropdownRootNode}\n />\n </Wrapper>\n );\n};\n"],"names":["DialPicker","_a","id","disabled","error","value","format","readOnly","onChange","onFocus","onBlur","alignment","dropdownZIndex","dropdownRootNode","ariaLabelledBy","ariaDescribedBy","ariaInvalid","otherProps","__rest","isOpen","setIsOpen","useState","active","setActive","startTimeVal","setStartTimeVal","endTimeVal","setEndTimeVal","focused","setFocused","enabled","nodeRef","useRef","internalId","useId","startLabelId","endLabelId","getInputLabelledBy","type","concatIds","getInputDescribedBy","useEffect","start","end","handleOpen","next","handleClose","opts","keepFocus","triggerBlur","_b","current","focus","handleContainerBlur","event","target","relatedTarget","isFloatingElement","matches","call","_c","contains","handleStartTime","handleEndTime","_jsx","Wrapper","Object","assign","children","ElementWithDropdown","renderElement","TimeContainer","ref","tabIndex","role","$error","$readOnly","_jsxs","RangeInputInnerContainer","currentActive","SelectorInput","onClick","placeholder","TimeHelper","formatDisplayValue","$disabled","undefined","renderDropdown","styles","setFloatingRef","getFloatingProps","style","TimepickerDropdown","show","onCancel","onClose","onDismiss","clickToToggle","offset","customZIndex","rootNode"],"mappings":"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"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import r from"styled-components";import{BasicInput as
|
|
1
|
+
import r,{css as o}from"styled-components";import{BasicInput as e}from"../shared/input-wrapper/input-wrapper.js";import{Colour as t}from"../theme/index.js";r.div`
|
|
2
2
|
position: relative;
|
|
3
|
-
`;const
|
|
3
|
+
`;const i=r(e)`
|
|
4
4
|
height: calc(3rem - 2px); // exclude top and bottom borders
|
|
5
5
|
cursor: inherit;
|
|
6
|
-
|
|
6
|
+
${r=>r.$disabled&&o`
|
|
7
|
+
color: ${t["text-subtler"]};
|
|
8
|
+
cursor: not-allowed;
|
|
9
|
+
`}
|
|
10
|
+
`;export{i as InputSelectorElement};
|
|
7
11
|
//# sourceMappingURL=timepicker.styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timepicker.styles.js","sources":["../../src/timepicker/timepicker.styles.tsx"],"sourcesContent":["import styled from \"styled-components\";\nimport { BasicInput } from \"../shared/input-wrapper/input-wrapper\";\n\n// =============================================================================\n// STYLING\n// =============================================================================\nexport const Wrapper = styled.div`\n position: relative;\n`;\n\nexport const InputSelectorElement = styled(BasicInput)<{\n $disabled?: boolean | undefined;\n}>`\n height: calc(3rem - 2px); // exclude top and bottom borders\n cursor: inherit;\n`;\n"],"names":["styled","div","InputSelectorElement","BasicInput"],"mappings":"
|
|
1
|
+
{"version":3,"file":"timepicker.styles.js","sources":["../../src/timepicker/timepicker.styles.tsx"],"sourcesContent":["import styled, { css } from \"styled-components\";\nimport { BasicInput } from \"../shared/input-wrapper/input-wrapper\";\nimport { Colour } from \"../theme\";\n\n// =============================================================================\n// STYLING\n// =============================================================================\nexport const Wrapper = styled.div`\n position: relative;\n`;\n\nexport const InputSelectorElement = styled(BasicInput)<{\n $disabled?: boolean | undefined;\n}>`\n height: calc(3rem - 2px); // exclude top and bottom borders\n cursor: inherit;\n ${(props) =>\n props.$disabled &&\n css`\n color: ${Colour[\"text-subtler\"]};\n cursor: not-allowed;\n `}\n`;\n"],"names":["styled","div","InputSelectorElement","BasicInput","props","$disabled","css","Colour"],"mappings":"4JAOuBA,EAAOC,GAAG;;QAIpBC,EAAuBF,EAAOG,EAEzC;;;MAGKC,GACCA,EAAMC,WACNC,CAAG;qBACUC,EAAO;;;"}
|
package/util/merge-refs.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { Ref } from "react";
|
|
1
|
+
import type { Ref } from "react";
|
|
2
2
|
export declare const mergeRefs: <T>(...refs: Ref<T>[]) => (value: T | null) => (() => void) | undefined;
|
package/util/merge-refs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{isReact19 as o}from"./version.js";const n=(...n)=>t=>{const r=[];for(const o of n)if("function"==typeof o){const n=o(t),f="function"==typeof n;r.push(f?n:()=>o(null))}else o.current=t,r.push((()=>{o.current=null}));if(o())return()=>{for(const o of r)o()}};export{n as mergeRefs};
|
|
1
|
+
import{isReact19 as o}from"./version.js";const n=(...n)=>t=>{const r=[];for(const o of n)if("function"==typeof o){const n=o(t),f="function"==typeof n;r.push(f?n:()=>o(null))}else o&&(o.current=t,r.push((()=>{o.current=null})));if(o())return()=>{for(const o of r)o()}};export{n as mergeRefs};
|
|
2
2
|
//# sourceMappingURL=merge-refs.js.map
|
package/util/merge-refs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-refs.js","sources":["../../src/util/merge-refs.ts"],"sourcesContent":["import { MutableRefObject, Ref } from \"react\";\nimport { isReact19 } from \"./version\";\n\nexport const mergeRefs = <T>(...refs: Ref<T>[]) => {\n return (value: T | null) => {\n const cleanups: (() => void)[] = [];\n\n for (const ref of refs) {\n if (typeof ref === \"function\") {\n const cleanup = ref(value);\n const isCleanup = typeof cleanup === \"function\";\n cleanups.push(isCleanup ? cleanup : () => ref(null));\n } else {\n (ref as MutableRefObject<T | null>).current = value;\n cleanups.push(() => {\n (ref as MutableRefObject<T | null>).current = null;\n });\n }\n }\n\n if (isReact19()) {\n return () => {\n for (const cleanup of cleanups) cleanup();\n };\n }\n };\n};\n"],"names":["mergeRefs","refs","value","cleanups","ref","cleanup","isCleanup","push","current","isReact19"],"mappings":"+
|
|
1
|
+
{"version":3,"file":"merge-refs.js","sources":["../../src/util/merge-refs.ts"],"sourcesContent":["import type { MutableRefObject, Ref } from \"react\";\n\nimport { isReact19 } from \"./version\";\n\nexport const mergeRefs = <T>(...refs: Ref<T>[]) => {\n return (value: T | null) => {\n const cleanups: (() => void)[] = [];\n\n for (const ref of refs) {\n if (typeof ref === \"function\") {\n const cleanup = ref(value);\n const isCleanup = typeof cleanup === \"function\";\n cleanups.push(isCleanup ? cleanup : () => ref(null));\n } else if (ref) {\n (ref as MutableRefObject<T | null>).current = value;\n cleanups.push(() => {\n (ref as MutableRefObject<T | null>).current = null;\n });\n }\n }\n\n if (isReact19()) {\n return () => {\n for (const cleanup of cleanups) cleanup();\n };\n }\n };\n};\n"],"names":["mergeRefs","refs","value","cleanups","ref","cleanup","isCleanup","push","current","isReact19"],"mappings":"+CAIaA,EAAY,IAAOC,IACpBC,IACJ,MAAMC,EAA2B,GAEjC,IAAK,MAAMC,KAAOH,EACd,GAAmB,mBAARG,EAAoB,CAC3B,MAAMC,EAAUD,EAAIF,GACdI,EAA+B,mBAAZD,EACzBF,EAASI,KAAKD,EAAYD,EAAU,IAAMD,EAAI,MAClD,MAAWA,IACNA,EAAmCI,QAAUN,EAC9CC,EAASI,MAAK,KACTH,EAAmCI,QAAU,IAAI,KAK9D,GAAIC,IACA,MAAO,KACH,IAAK,MAAMJ,KAAWF,EAAUE,GAAS,CAEjD"}
|