@okta/odyssey-react-mui 1.41.1 → 1.42.0
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/cjs/Select.cjs +1 -1
- package/dist/cjs/Select.cjs.map +1 -1
- package/dist/cjs/createContrastColors.cjs +6 -2
- package/dist/cjs/createContrastColors.cjs.map +1 -1
- package/dist/cjs/getLogicalBoundaries.cjs +33 -0
- package/dist/cjs/getLogicalBoundaries.cjs.map +1 -0
- package/dist/cjs/labs/PageTemplate/PageTemplate.cjs +15 -4
- package/dist/cjs/labs/PageTemplate/PageTemplate.cjs.map +1 -1
- package/dist/cjs/properties/ts/odyssey-react-mui_eu.cjs +137 -0
- package/dist/cjs/properties/ts/odyssey-react-mui_eu.cjs.map +1 -0
- package/dist/cjs/ui-shell/NarrowUiShellContent.cjs +0 -1
- package/dist/cjs/ui-shell/NarrowUiShellContent.cjs.map +1 -1
- package/dist/cjs/ui-shell/SideNav/SideNav.cjs +23 -18
- package/dist/cjs/ui-shell/SideNav/SideNav.cjs.map +1 -1
- package/dist/cjs/ui-shell/SideNav/SideNavItemLinkContent.cjs +4 -3
- package/dist/cjs/ui-shell/SideNav/SideNavItemLinkContent.cjs.map +1 -1
- package/dist/cjs/ui-shell/UiShell.cjs +2 -0
- package/dist/cjs/ui-shell/UiShell.cjs.map +1 -1
- package/dist/cjs/ui-shell/UiShellProvider.cjs +6 -1
- package/dist/cjs/ui-shell/UiShellProvider.cjs.map +1 -1
- package/dist/cjs/ui-shell/renderUiShell.cjs +2 -0
- package/dist/cjs/ui-shell/renderUiShell.cjs.map +1 -1
- package/dist/cjs/ui-shell/useElementAtContainerEdge.cjs +74 -0
- package/dist/cjs/ui-shell/useElementAtContainerEdge.cjs.map +1 -0
- package/dist/cjs/useMountLifecycleEffect.cjs +3 -3
- package/dist/cjs/useMountLifecycleEffect.cjs.map +1 -1
- package/dist/cjs/web-component/odysseyWebComponentVersion.generated.cjs +1 -1
- package/dist/cjs/web-component/odysseyWebComponentVersion.generated.cjs.map +1 -1
- package/dist/esm/Select.js +1 -1
- package/dist/esm/Select.js.map +1 -1
- package/dist/esm/createContrastColors.js +6 -2
- package/dist/esm/createContrastColors.js.map +1 -1
- package/dist/esm/getLogicalBoundaries.js +26 -0
- package/dist/esm/getLogicalBoundaries.js.map +1 -0
- package/dist/esm/labs/PageTemplate/PageTemplate.js +16 -5
- package/dist/esm/labs/PageTemplate/PageTemplate.js.map +1 -1
- package/dist/esm/properties/ts/odyssey-react-mui_eu.js +131 -0
- package/dist/esm/properties/ts/odyssey-react-mui_eu.js.map +1 -0
- package/dist/esm/ui-shell/NarrowUiShellContent.js +0 -1
- package/dist/esm/ui-shell/NarrowUiShellContent.js.map +1 -1
- package/dist/esm/ui-shell/SideNav/SideNav.js +23 -18
- package/dist/esm/ui-shell/SideNav/SideNav.js.map +1 -1
- package/dist/esm/ui-shell/SideNav/SideNavItemLinkContent.js +4 -3
- package/dist/esm/ui-shell/SideNav/SideNavItemLinkContent.js.map +1 -1
- package/dist/esm/ui-shell/UiShell.js +2 -0
- package/dist/esm/ui-shell/UiShell.js.map +1 -1
- package/dist/esm/ui-shell/UiShellProvider.js +6 -1
- package/dist/esm/ui-shell/UiShellProvider.js.map +1 -1
- package/dist/esm/ui-shell/renderUiShell.js +2 -0
- package/dist/esm/ui-shell/renderUiShell.js.map +1 -1
- package/dist/esm/ui-shell/useElementAtContainerEdge.js +68 -0
- package/dist/esm/ui-shell/useElementAtContainerEdge.js.map +1 -0
- package/dist/esm/useMountLifecycleEffect.js +3 -3
- package/dist/esm/useMountLifecycleEffect.js.map +1 -1
- package/dist/esm/web-component/odysseyWebComponentVersion.generated.js +1 -1
- package/dist/esm/web-component/odysseyWebComponentVersion.generated.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.mjs +1 -1
- package/dist/index.scss +1 -1
- package/dist/tsconfig.production.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/types/Select.d.ts.map +1 -1
- package/dist/types/createContrastColors.d.ts +5 -1
- package/dist/types/createContrastColors.d.ts.map +1 -1
- package/dist/types/getLogicalBoundaries.d.ts +24 -0
- package/dist/types/getLogicalBoundaries.d.ts.map +1 -0
- package/dist/types/labs/PageTemplate/PageTemplate.d.ts.map +1 -1
- package/dist/types/properties/ts/odyssey-react-mui_eu.d.ts +131 -0
- package/dist/types/properties/ts/odyssey-react-mui_eu.d.ts.map +1 -0
- package/dist/types/ui-shell/NarrowUiShellContent.d.ts.map +1 -1
- package/dist/types/ui-shell/SideNav/SideNav.d.ts.map +1 -1
- package/dist/types/ui-shell/SideNav/SideNavItemLinkContent.d.ts.map +1 -1
- package/dist/types/ui-shell/UiShell.d.ts +1 -1
- package/dist/types/ui-shell/UiShell.d.ts.map +1 -1
- package/dist/types/ui-shell/UiShellProvider.d.ts +10 -4
- package/dist/types/ui-shell/UiShellProvider.d.ts.map +1 -1
- package/dist/types/ui-shell/renderUiShell.d.ts +2 -2
- package/dist/types/ui-shell/renderUiShell.d.ts.map +1 -1
- package/dist/types/ui-shell/useElementAtContainerEdge.d.ts +43 -0
- package/dist/types/ui-shell/useElementAtContainerEdge.d.ts.map +1 -0
- package/dist/types/web-component/odysseyWebComponentVersion.generated.d.ts +1 -1
- package/package.json +6 -6
package/dist/cjs/Select.cjs
CHANGED
|
@@ -231,7 +231,7 @@ const Select = ({
|
|
|
231
231
|
isReadOnly
|
|
232
232
|
}) => {
|
|
233
233
|
const stopPropagation = event => event.stopPropagation();
|
|
234
|
-
const hasNonInteractiveIcon = !isInteractive && controlledStateRef.current === CONTROLLED && hasMultipleChoices;
|
|
234
|
+
const hasNonInteractiveIcon = !isInteractive && !isReadOnly && controlledStateRef.current === CONTROLLED && hasMultipleChoices;
|
|
235
235
|
return Array.isArray(internalSelectedValues) && (0, _jsxRuntime.jsx)(ChipsInnerContainer, {
|
|
236
236
|
isInteractive: isInteractive,
|
|
237
237
|
isReadOnly: isReadOnly,
|
package/dist/cjs/Select.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.cjs","names":["_react","require","_styled","_interopRequireDefault","_Field","_index","_inputUtils","_OdysseyDesignTokensContext","_useNormalizedKey","_jsxRuntime","e","__esModule","default","SelectTestSelector","exports","accessibleText","errorMessage","hint","label","children","list","listItem","elementSelector","method","options","role","isControlledElement","SelectContainer","styled","div","ChipsPositioningContainer","shouldForwardProp","prop","odysseyDesignTokens","Spacing0","Spacing5","Spacing1","BorderWidthMain","NonInteractiveIcon","CloseCircleFilledIcon","Spacing2","ChipsInnerContainer","_Box2","isInteractive","isReadOnly","Spacing6","CONTROLLED","ComponentControlledState","Select","ariaDescribedBy","defaultValue","errorMessageList","hasMultipleChoices","hasMultipleChoicesProp","HintLinkComponent","id","idOverride","inputRef","isDisabled","isFullWidth","isMultiSelect","isOptional","name","nameOverride","onBlur","onChange","onChangeProp","onFocus","testId","translate","value","selectRef","useRef","useMemo","undefined","controlledStateRef","getControlState","controlledValue","uncontrolledValue","internalSelectedValues","setInternalSelectedValues","useState","current","localInputRef","useOdysseyDesignTokens","useImperativeHandle","focus","useEffect","inputValues","useInputValues","controlState","useCallback","event","child","preventDefault","target","split","normalizedOptions","normalizedOptionsMap","map","option","text","type","lang","language","Map","removeSelectedValue","selectedValue","Array","isArray","newValue","filter","internalSelectedValue","syntheticEvent","Chips","stopPropagation","hasNonInteractiveIcon","jsx","item","length","_Chip2","jsxs","Fragment","get","tabIndex","onDelete","deleteIcon","sx","pointerEvents","onMouseDown","renderedOptions","index","_ListSubheader2","isSelected","includes","_MenuItem2","selected","_Checkbox2","checked","_ListItemSecondaryAction2","CheckIcon","normalizedKey","toString","renderValue","renderFieldComponent","errorMessageElementId","labelElementId","_Select2","displayEmpty","inputProps","readOnly","el","labelId","MenuProps","maxHeight","multiple","Field","fieldType","hasVisibleLabel","MemoizedSelect","memo","displayName"],"sources":["../../src/Select.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport {\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useImperativeHandle,\n} from \"react\";\nimport styled from \"@emotion/styled\";\nimport {\n Box as MuiBox,\n Checkbox as MuiCheckbox,\n Chip as MuiChip,\n ListItemSecondaryAction,\n ListSubheader,\n MenuItem as MuiMenuItem,\n Select as MuiSelect,\n SelectProps as MuiSelectProps,\n SelectChangeEvent,\n} from \"@mui/material\";\n\nimport { Field } from \"./Field.js\";\nimport {\n FieldComponentProps,\n FieldComponentRenderProps,\n} from \"./FieldComponentProps.js\";\nimport { CheckIcon, CloseCircleFilledIcon } from \"./icons.generated/index.js\";\nimport type { HtmlProps } from \"./HtmlProps.js\";\nimport {\n ComponentControlledState,\n FocusHandle,\n useInputValues,\n getControlState,\n} from \"./inputUtils.js\";\nimport {\n useOdysseyDesignTokens,\n DesignTokens,\n} from \"./OdysseyDesignTokensContext.js\";\nimport { TestSelector } from \"./test-selectors/index.js\";\nimport { normalizedKey } from \"./useNormalizedKey.js\";\n\nexport const SelectTestSelector = {\n accessibleText: {\n errorMessage: \"errorMessage\",\n hint: \"description\",\n label: \"label\",\n },\n children: {\n list: {\n accessibleText: {\n label: \"label\",\n },\n children: {\n listItem: {\n accessibleText: {\n label: \"label\",\n },\n elementSelector: {\n method: \"ByRole\",\n options: {\n label: \"name\",\n },\n role: \"option\",\n },\n },\n },\n isControlledElement: true,\n },\n },\n elementSelector: {\n method: \"ByRole\",\n options: {\n label: \"name\",\n },\n role: \"combobox\",\n },\n} as const satisfies TestSelector;\n\nexport type SelectOption = {\n text: string;\n type?: \"heading\" | \"option\";\n value?: string;\n language?: string;\n};\n\nconst SelectContainer = styled.div`\n position: relative;\n width: 100%;\n display: flex;\n`;\n\nconst ChipsPositioningContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n}>`\n display: flex;\n align-items: center;\n position: absolute;\n top: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing0};\n right: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing5};\n bottom: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing0};\n left: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing1};\n margin-inline-start: ${({ odysseyDesignTokens }) =>\n odysseyDesignTokens.BorderWidthMain};\n opacity: 1;\n pointer-events: none;\n`;\n\nconst NonInteractiveIcon = styled(CloseCircleFilledIcon, {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n}>`\n font-size: 1em;\n margin-inline-start: ${({ odysseyDesignTokens }) =>\n odysseyDesignTokens.Spacing2};\n margin-inline-end: -${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing1};\n margin-block-end: -1px;\n`;\n\nconst ChipsInnerContainer = styled(MuiBox, {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" &&\n prop !== \"isInteractive\" &&\n prop !== \"isReadOnly\",\n})<{\n isInteractive?: boolean;\n isReadOnly?: boolean;\n odysseyDesignTokens: DesignTokens;\n}>`\n display: flex;\n flex-wrap: wrap;\n gap: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing1};\n pointer-events: none;\n opacity: ${({ isInteractive, isReadOnly }) =>\n isInteractive || isReadOnly ? 1 : 0};\n min-height: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing6};\n`;\n\nexport type SelectValueType<HasMultipleChoices> =\n HasMultipleChoices extends true ? string[] : string;\n\nexport type SelectProps<\n Value extends SelectValueType<HasMultipleChoices>,\n HasMultipleChoices extends boolean,\n> = {\n /**\n * The default value. Use when the component is not controlled.\n */\n defaultValue?: MuiSelectProps<Value>[\"defaultValue\"];\n /**\n * If `true`, the Select allows multiple selections\n */\n hasMultipleChoices?: HasMultipleChoices;\n /**\n * The ref forwarded to the Select\n */\n inputRef?: React.RefObject<FocusHandle>;\n /**\n * @deprecated Use `hasMultipleChoices` instead.\n */\n /** **Deprecated:** use `hasMultipleChoices` */\n isMultiSelect?: HasMultipleChoices;\n /**\n * The label text for the Select\n */\n label: string;\n /**\n * Callback fired when the Select loses focus\n */\n onBlur?: MuiSelectProps<Value>[\"onBlur\"];\n /**\n * Callback fired when the value of the Select changes\n */\n onChange?: MuiSelectProps<Value>[\"onChange\"];\n /**\n * Callback fired when the Select gains focus\n */\n onFocus?: MuiSelectProps<Value>[\"onFocus\"];\n /**\n * The options for the Select\n */\n options: (string | SelectOption)[];\n /**\n * The value or values selected in the Select\n */\n value?: Value;\n} & Pick<\n FieldComponentProps,\n | \"errorMessage\"\n | \"errorMessageList\"\n | \"hint\"\n | \"HintLinkComponent\"\n | \"id\"\n | \"isDisabled\"\n | \"isFullWidth\"\n | \"isOptional\"\n | \"isReadOnly\"\n | \"name\"\n> &\n Pick<HtmlProps, \"ariaDescribedBy\" | \"testId\" | \"translate\">;\n\ntype SelectRenderProps = Partial<\n Pick<FieldComponentRenderProps, \"ariaDescribedBy\" | \"errorMessageElementId\">\n> &\n Pick<FieldComponentRenderProps, \"id\" | \"labelElementId\">;\n\n/**\n * Options in Odyssey <Select> are passed as an array, which can contain any combination\n * of the following:\n * - string — A simple string. The string will be both the text and the value of the resulting option.\n * <option value=\"string\">string</option>\n *\n * - { text: string } — Same as above, but the string is contained within an object.\n * <option value=\"text\">text</option>\n *\n * - { text: string, value: string } — The option text will be text, and the option value will be value.\n * <option value=\"value\">text</option>\n *\n * - { text: string, type: \"heading\" } — Used to display a group heading with the text\n */\n\nconst { CONTROLLED } = ComponentControlledState;\nconst Select = <\n Value extends SelectValueType<HasMultipleChoices>,\n HasMultipleChoices extends boolean,\n>({\n ariaDescribedBy,\n defaultValue,\n errorMessage,\n errorMessageList,\n hasMultipleChoices: hasMultipleChoicesProp,\n hint,\n HintLinkComponent,\n id: idOverride,\n inputRef,\n isDisabled = false,\n isFullWidth = false,\n isMultiSelect,\n isOptional = false,\n isReadOnly = false,\n label,\n name: nameOverride,\n onBlur,\n onChange: onChangeProp,\n onFocus,\n options,\n testId,\n translate,\n value,\n}: SelectProps<Value, HasMultipleChoices>) => {\n const selectRef = useRef<HTMLInputElement | HTMLTextAreaElement | null>(null);\n\n const hasMultipleChoices = useMemo(\n () =>\n hasMultipleChoicesProp === undefined\n ? isMultiSelect\n : hasMultipleChoicesProp,\n [hasMultipleChoicesProp, isMultiSelect],\n );\n\n const controlledStateRef = useRef(\n getControlState({\n controlledValue: value,\n uncontrolledValue: defaultValue,\n }),\n );\n const [internalSelectedValues, setInternalSelectedValues] = useState(\n controlledStateRef.current === CONTROLLED ? value : defaultValue,\n );\n\n const localInputRef = useRef<HTMLSelectElement>(null);\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n useImperativeHandle(inputRef, () => {\n return {\n focus: () => {\n localInputRef.current?.focus();\n },\n };\n }, []);\n\n useEffect(() => {\n if (controlledStateRef.current === CONTROLLED) {\n setInternalSelectedValues(value);\n }\n }, [value]);\n\n const inputValues = useInputValues({\n defaultValue,\n value,\n controlState: controlledStateRef.current,\n });\n\n const onChange = useCallback<NonNullable<MuiSelectProps<Value>[\"onChange\"]>>(\n (event, child) => {\n if (isReadOnly) {\n event.preventDefault();\n } else {\n const {\n target: { value },\n } = event;\n if (controlledStateRef.current !== CONTROLLED) {\n setInternalSelectedValues(\n (typeof value === \"string\" && hasMultipleChoices\n ? value.split(\",\")\n : value) as Value,\n );\n }\n onChangeProp?.(event, child);\n }\n },\n [hasMultipleChoices, onChangeProp, isReadOnly],\n );\n // Normalize the options array to accommodate the various\n // data types that might be passed\n const [normalizedOptions, normalizedOptionsMap] = useMemo(() => {\n const normalizedOptions = options.map((option) => {\n if (typeof option === \"object\") {\n /**\n * If the value of `option?.value is an empty string, we need to make sure that we\n * set an empty string to `value` in the normalized option so that the select component\n * can potentially set it as the selected one in the text input\n */\n const value =\n option?.value === \"\" ? option.value : option.value || option.text;\n return {\n text: option.text,\n value,\n type: option.type === \"heading\" ? \"heading\" : \"option\",\n lang: option.language,\n };\n }\n\n return { text: option, value: option, type: \"option\" };\n });\n\n const normalizedOptionsMap = new Map(\n normalizedOptions.map((option) => [option.value, option]),\n );\n return [normalizedOptions, normalizedOptionsMap];\n }, [options]);\n\n const removeSelectedValue = useCallback(\n (selectedValue: string) => {\n if (Array.isArray(internalSelectedValues)) {\n const newValue = internalSelectedValues.filter(\n (internalSelectedValue) => internalSelectedValue !== selectedValue,\n );\n\n const syntheticEvent = {\n target: { value: newValue },\n } as SelectChangeEvent<Value>;\n\n onChange(syntheticEvent, null);\n }\n },\n [internalSelectedValues, onChange],\n );\n\n const Chips = useCallback(\n ({\n isInteractive,\n isReadOnly,\n }: {\n isInteractive: boolean;\n isReadOnly?: boolean;\n }) => {\n const stopPropagation = (event: React.MouseEvent<SVGSVGElement>) =>\n event.stopPropagation();\n\n const hasNonInteractiveIcon =\n !isInteractive &&\n controlledStateRef.current === CONTROLLED &&\n hasMultipleChoices;\n return (\n Array.isArray(internalSelectedValues) && (\n <ChipsInnerContainer\n isInteractive={isInteractive}\n isReadOnly={isReadOnly}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n {internalSelectedValues.map(\n (item) =>\n item?.length > 0 && (\n <MuiChip\n key={item}\n label={\n <>\n {normalizedOptionsMap.get(item)?.text}\n {hasNonInteractiveIcon && (\n <NonInteractiveIcon\n odysseyDesignTokens={odysseyDesignTokens}\n />\n )}\n </>\n }\n tabIndex={-1}\n onDelete={\n isInteractive && controlledStateRef.current === CONTROLLED\n ? () => removeSelectedValue(item)\n : undefined\n }\n deleteIcon={\n <CloseCircleFilledIcon\n sx={{ pointerEvents: \"auto\" }}\n // We need to stop event propagation on mouse down to prevent the deletion\n // from being blocked by the Select list opening, and also ensure that\n // the pointerEvent is registered even when the parent's are not\n onMouseDown={stopPropagation}\n />\n }\n />\n ),\n )}\n </ChipsInnerContainer>\n )\n );\n },\n [\n controlledStateRef,\n hasMultipleChoices,\n internalSelectedValues,\n odysseyDesignTokens,\n removeSelectedValue,\n normalizedOptionsMap,\n ],\n );\n\n // Convert the options into the ReactNode children\n // that will populate the <Select>\n const renderedOptions = useMemo(\n () =>\n normalizedOptions.map((option, index) => {\n if (option.type === \"heading\") {\n return (\n <ListSubheader key={option.text}> {option.text} </ListSubheader>\n );\n }\n\n const isSelected = hasMultipleChoices\n ? internalSelectedValues?.includes(option.value)\n : internalSelectedValues === option.value;\n\n return (\n <MuiMenuItem\n data-empty={!option.text}\n key={normalizedKey(option.text, index.toString())}\n value={option.value}\n selected={isSelected}\n lang={option.lang}\n >\n {hasMultipleChoices && <MuiCheckbox checked={isSelected} />}\n {option.text}\n {!hasMultipleChoices && internalSelectedValues === option.value && (\n <ListItemSecondaryAction>\n <CheckIcon />\n </ListItemSecondaryAction>\n )}\n </MuiMenuItem>\n );\n }),\n [hasMultipleChoices, normalizedOptions, internalSelectedValues],\n );\n\n const renderValue = useCallback(\n (value: Value) => Array.isArray(value) && <Chips isInteractive={false} />,\n [Chips],\n );\n\n const renderFieldComponent = useCallback(\n ({\n ariaDescribedBy,\n errorMessageElementId,\n id,\n labelElementId,\n }: SelectRenderProps) => (\n <SelectContainer>\n <MuiSelect\n {...inputValues}\n aria-describedby={ariaDescribedBy}\n aria-errormessage={errorMessageElementId}\n displayEmpty\n id={id}\n inputProps={{\n \"data-se\": testId,\n \"aria-disabled\": isDisabled || isReadOnly,\n readOnly: isReadOnly,\n }}\n inputRef={(el: HTMLInputElement | HTMLTextAreaElement | null) => {\n if (localInputRef.current !== el) {\n (localInputRef as React.MutableRefObject<typeof el>).current = el;\n }\n selectRef.current = el;\n }}\n labelId={labelElementId}\n MenuProps={{\n sx: {\n \".MuiPaper-root\": {\n maxHeight: \"50vh\",\n },\n },\n }}\n multiple={hasMultipleChoices}\n name={nameOverride ?? id}\n onBlur={onBlur}\n onChange={onChange}\n onFocus={onFocus}\n renderValue={hasMultipleChoices ? renderValue : undefined}\n translate={translate}\n >\n {renderedOptions}\n </MuiSelect>\n {hasMultipleChoices && (\n <>\n <ChipsPositioningContainer\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <Chips isInteractive={!isReadOnly} isReadOnly={isReadOnly} />\n </ChipsPositioningContainer>\n </>\n )}\n </SelectContainer>\n ),\n [\n Chips,\n inputValues,\n hasMultipleChoices,\n isDisabled,\n isReadOnly,\n nameOverride,\n odysseyDesignTokens,\n onBlur,\n onChange,\n onFocus,\n renderedOptions,\n renderValue,\n testId,\n translate,\n ],\n );\n\n return (\n <Field\n ariaDescribedBy={ariaDescribedBy}\n errorMessage={errorMessage}\n errorMessageList={errorMessageList}\n fieldType=\"single\"\n hasVisibleLabel\n hint={hint}\n HintLinkComponent={HintLinkComponent}\n id={idOverride}\n isDisabled={isDisabled}\n isFullWidth={isFullWidth}\n isOptional={isOptional}\n label={label}\n renderFieldComponent={renderFieldComponent}\n />\n );\n};\n\nconst MemoizedSelect = memo(Select);\nMemoizedSelect.displayName = \"Select\";\n\nexport { MemoizedSelect as Select };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"Select.cjs","names":["_react","require","_styled","_interopRequireDefault","_Field","_index","_inputUtils","_OdysseyDesignTokensContext","_useNormalizedKey","_jsxRuntime","e","__esModule","default","SelectTestSelector","exports","accessibleText","errorMessage","hint","label","children","list","listItem","elementSelector","method","options","role","isControlledElement","SelectContainer","styled","div","ChipsPositioningContainer","shouldForwardProp","prop","odysseyDesignTokens","Spacing0","Spacing5","Spacing1","BorderWidthMain","NonInteractiveIcon","CloseCircleFilledIcon","Spacing2","ChipsInnerContainer","_Box2","isInteractive","isReadOnly","Spacing6","CONTROLLED","ComponentControlledState","Select","ariaDescribedBy","defaultValue","errorMessageList","hasMultipleChoices","hasMultipleChoicesProp","HintLinkComponent","id","idOverride","inputRef","isDisabled","isFullWidth","isMultiSelect","isOptional","name","nameOverride","onBlur","onChange","onChangeProp","onFocus","testId","translate","value","selectRef","useRef","useMemo","undefined","controlledStateRef","getControlState","controlledValue","uncontrolledValue","internalSelectedValues","setInternalSelectedValues","useState","current","localInputRef","useOdysseyDesignTokens","useImperativeHandle","focus","useEffect","inputValues","useInputValues","controlState","useCallback","event","child","preventDefault","target","split","normalizedOptions","normalizedOptionsMap","map","option","text","type","lang","language","Map","removeSelectedValue","selectedValue","Array","isArray","newValue","filter","internalSelectedValue","syntheticEvent","Chips","stopPropagation","hasNonInteractiveIcon","jsx","item","length","_Chip2","jsxs","Fragment","get","tabIndex","onDelete","deleteIcon","sx","pointerEvents","onMouseDown","renderedOptions","index","_ListSubheader2","isSelected","includes","_MenuItem2","selected","_Checkbox2","checked","_ListItemSecondaryAction2","CheckIcon","normalizedKey","toString","renderValue","renderFieldComponent","errorMessageElementId","labelElementId","_Select2","displayEmpty","inputProps","readOnly","el","labelId","MenuProps","maxHeight","multiple","Field","fieldType","hasVisibleLabel","MemoizedSelect","memo","displayName"],"sources":["../../src/Select.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport {\n memo,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n useImperativeHandle,\n} from \"react\";\nimport styled from \"@emotion/styled\";\nimport {\n Box as MuiBox,\n Checkbox as MuiCheckbox,\n Chip as MuiChip,\n ListItemSecondaryAction,\n ListSubheader,\n MenuItem as MuiMenuItem,\n Select as MuiSelect,\n SelectProps as MuiSelectProps,\n SelectChangeEvent,\n} from \"@mui/material\";\n\nimport { Field } from \"./Field.js\";\nimport {\n FieldComponentProps,\n FieldComponentRenderProps,\n} from \"./FieldComponentProps.js\";\nimport { CheckIcon, CloseCircleFilledIcon } from \"./icons.generated/index.js\";\nimport type { HtmlProps } from \"./HtmlProps.js\";\nimport {\n ComponentControlledState,\n FocusHandle,\n useInputValues,\n getControlState,\n} from \"./inputUtils.js\";\nimport {\n useOdysseyDesignTokens,\n DesignTokens,\n} from \"./OdysseyDesignTokensContext.js\";\nimport { TestSelector } from \"./test-selectors/index.js\";\nimport { normalizedKey } from \"./useNormalizedKey.js\";\n\nexport const SelectTestSelector = {\n accessibleText: {\n errorMessage: \"errorMessage\",\n hint: \"description\",\n label: \"label\",\n },\n children: {\n list: {\n accessibleText: {\n label: \"label\",\n },\n children: {\n listItem: {\n accessibleText: {\n label: \"label\",\n },\n elementSelector: {\n method: \"ByRole\",\n options: {\n label: \"name\",\n },\n role: \"option\",\n },\n },\n },\n isControlledElement: true,\n },\n },\n elementSelector: {\n method: \"ByRole\",\n options: {\n label: \"name\",\n },\n role: \"combobox\",\n },\n} as const satisfies TestSelector;\n\nexport type SelectOption = {\n text: string;\n type?: \"heading\" | \"option\";\n value?: string;\n language?: string;\n};\n\nconst SelectContainer = styled.div`\n position: relative;\n width: 100%;\n display: flex;\n`;\n\nconst ChipsPositioningContainer = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n}>`\n display: flex;\n align-items: center;\n position: absolute;\n top: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing0};\n right: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing5};\n bottom: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing0};\n left: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing1};\n margin-inline-start: ${({ odysseyDesignTokens }) =>\n odysseyDesignTokens.BorderWidthMain};\n opacity: 1;\n pointer-events: none;\n`;\n\nconst NonInteractiveIcon = styled(CloseCircleFilledIcon, {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n}>`\n font-size: 1em;\n margin-inline-start: ${({ odysseyDesignTokens }) =>\n odysseyDesignTokens.Spacing2};\n margin-inline-end: -${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing1};\n margin-block-end: -1px;\n`;\n\nconst ChipsInnerContainer = styled(MuiBox, {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" &&\n prop !== \"isInteractive\" &&\n prop !== \"isReadOnly\",\n})<{\n isInteractive?: boolean;\n isReadOnly?: boolean;\n odysseyDesignTokens: DesignTokens;\n}>`\n display: flex;\n flex-wrap: wrap;\n gap: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing1};\n pointer-events: none;\n opacity: ${({ isInteractive, isReadOnly }) =>\n isInteractive || isReadOnly ? 1 : 0};\n min-height: ${({ odysseyDesignTokens }) => odysseyDesignTokens.Spacing6};\n`;\n\nexport type SelectValueType<HasMultipleChoices> =\n HasMultipleChoices extends true ? string[] : string;\n\nexport type SelectProps<\n Value extends SelectValueType<HasMultipleChoices>,\n HasMultipleChoices extends boolean,\n> = {\n /**\n * The default value. Use when the component is not controlled.\n */\n defaultValue?: MuiSelectProps<Value>[\"defaultValue\"];\n /**\n * If `true`, the Select allows multiple selections\n */\n hasMultipleChoices?: HasMultipleChoices;\n /**\n * The ref forwarded to the Select\n */\n inputRef?: React.RefObject<FocusHandle>;\n /**\n * @deprecated Use `hasMultipleChoices` instead.\n */\n /** **Deprecated:** use `hasMultipleChoices` */\n isMultiSelect?: HasMultipleChoices;\n /**\n * The label text for the Select\n */\n label: string;\n /**\n * Callback fired when the Select loses focus\n */\n onBlur?: MuiSelectProps<Value>[\"onBlur\"];\n /**\n * Callback fired when the value of the Select changes\n */\n onChange?: MuiSelectProps<Value>[\"onChange\"];\n /**\n * Callback fired when the Select gains focus\n */\n onFocus?: MuiSelectProps<Value>[\"onFocus\"];\n /**\n * The options for the Select\n */\n options: (string | SelectOption)[];\n /**\n * The value or values selected in the Select\n */\n value?: Value;\n} & Pick<\n FieldComponentProps,\n | \"errorMessage\"\n | \"errorMessageList\"\n | \"hint\"\n | \"HintLinkComponent\"\n | \"id\"\n | \"isDisabled\"\n | \"isFullWidth\"\n | \"isOptional\"\n | \"isReadOnly\"\n | \"name\"\n> &\n Pick<HtmlProps, \"ariaDescribedBy\" | \"testId\" | \"translate\">;\n\ntype SelectRenderProps = Partial<\n Pick<FieldComponentRenderProps, \"ariaDescribedBy\" | \"errorMessageElementId\">\n> &\n Pick<FieldComponentRenderProps, \"id\" | \"labelElementId\">;\n\n/**\n * Options in Odyssey <Select> are passed as an array, which can contain any combination\n * of the following:\n * - string — A simple string. The string will be both the text and the value of the resulting option.\n * <option value=\"string\">string</option>\n *\n * - { text: string } — Same as above, but the string is contained within an object.\n * <option value=\"text\">text</option>\n *\n * - { text: string, value: string } — The option text will be text, and the option value will be value.\n * <option value=\"value\">text</option>\n *\n * - { text: string, type: \"heading\" } — Used to display a group heading with the text\n */\n\nconst { CONTROLLED } = ComponentControlledState;\nconst Select = <\n Value extends SelectValueType<HasMultipleChoices>,\n HasMultipleChoices extends boolean,\n>({\n ariaDescribedBy,\n defaultValue,\n errorMessage,\n errorMessageList,\n hasMultipleChoices: hasMultipleChoicesProp,\n hint,\n HintLinkComponent,\n id: idOverride,\n inputRef,\n isDisabled = false,\n isFullWidth = false,\n isMultiSelect,\n isOptional = false,\n isReadOnly = false,\n label,\n name: nameOverride,\n onBlur,\n onChange: onChangeProp,\n onFocus,\n options,\n testId,\n translate,\n value,\n}: SelectProps<Value, HasMultipleChoices>) => {\n const selectRef = useRef<HTMLInputElement | HTMLTextAreaElement | null>(null);\n\n const hasMultipleChoices = useMemo(\n () =>\n hasMultipleChoicesProp === undefined\n ? isMultiSelect\n : hasMultipleChoicesProp,\n [hasMultipleChoicesProp, isMultiSelect],\n );\n\n const controlledStateRef = useRef(\n getControlState({\n controlledValue: value,\n uncontrolledValue: defaultValue,\n }),\n );\n const [internalSelectedValues, setInternalSelectedValues] = useState(\n controlledStateRef.current === CONTROLLED ? value : defaultValue,\n );\n\n const localInputRef = useRef<HTMLSelectElement>(null);\n const odysseyDesignTokens = useOdysseyDesignTokens();\n\n useImperativeHandle(inputRef, () => {\n return {\n focus: () => {\n localInputRef.current?.focus();\n },\n };\n }, []);\n\n useEffect(() => {\n if (controlledStateRef.current === CONTROLLED) {\n setInternalSelectedValues(value);\n }\n }, [value]);\n\n const inputValues = useInputValues({\n defaultValue,\n value,\n controlState: controlledStateRef.current,\n });\n\n const onChange = useCallback<NonNullable<MuiSelectProps<Value>[\"onChange\"]>>(\n (event, child) => {\n if (isReadOnly) {\n event.preventDefault();\n } else {\n const {\n target: { value },\n } = event;\n if (controlledStateRef.current !== CONTROLLED) {\n setInternalSelectedValues(\n (typeof value === \"string\" && hasMultipleChoices\n ? value.split(\",\")\n : value) as Value,\n );\n }\n onChangeProp?.(event, child);\n }\n },\n [hasMultipleChoices, onChangeProp, isReadOnly],\n );\n // Normalize the options array to accommodate the various\n // data types that might be passed\n const [normalizedOptions, normalizedOptionsMap] = useMemo(() => {\n const normalizedOptions = options.map((option) => {\n if (typeof option === \"object\") {\n /**\n * If the value of `option?.value is an empty string, we need to make sure that we\n * set an empty string to `value` in the normalized option so that the select component\n * can potentially set it as the selected one in the text input\n */\n const value =\n option?.value === \"\" ? option.value : option.value || option.text;\n return {\n text: option.text,\n value,\n type: option.type === \"heading\" ? \"heading\" : \"option\",\n lang: option.language,\n };\n }\n\n return { text: option, value: option, type: \"option\" };\n });\n\n const normalizedOptionsMap = new Map(\n normalizedOptions.map((option) => [option.value, option]),\n );\n return [normalizedOptions, normalizedOptionsMap];\n }, [options]);\n\n const removeSelectedValue = useCallback(\n (selectedValue: string) => {\n if (Array.isArray(internalSelectedValues)) {\n const newValue = internalSelectedValues.filter(\n (internalSelectedValue) => internalSelectedValue !== selectedValue,\n );\n\n const syntheticEvent = {\n target: { value: newValue },\n } as SelectChangeEvent<Value>;\n\n onChange(syntheticEvent, null);\n }\n },\n [internalSelectedValues, onChange],\n );\n\n const Chips = useCallback(\n ({\n isInteractive,\n isReadOnly,\n }: {\n isInteractive: boolean;\n isReadOnly?: boolean;\n }) => {\n const stopPropagation = (event: React.MouseEvent<SVGSVGElement>) =>\n event.stopPropagation();\n\n const hasNonInteractiveIcon =\n !isInteractive &&\n !isReadOnly &&\n controlledStateRef.current === CONTROLLED &&\n hasMultipleChoices;\n\n return (\n Array.isArray(internalSelectedValues) && (\n <ChipsInnerContainer\n isInteractive={isInteractive}\n isReadOnly={isReadOnly}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n {internalSelectedValues.map(\n (item) =>\n item?.length > 0 && (\n <MuiChip\n key={item}\n label={\n <>\n {normalizedOptionsMap.get(item)?.text}\n {hasNonInteractiveIcon && (\n <NonInteractiveIcon\n odysseyDesignTokens={odysseyDesignTokens}\n />\n )}\n </>\n }\n tabIndex={-1}\n onDelete={\n isInteractive && controlledStateRef.current === CONTROLLED\n ? () => removeSelectedValue(item)\n : undefined\n }\n deleteIcon={\n <CloseCircleFilledIcon\n sx={{ pointerEvents: \"auto\" }}\n // We need to stop event propagation on mouse down to prevent the deletion\n // from being blocked by the Select list opening, and also ensure that\n // the pointerEvent is registered even when the parent's are not\n onMouseDown={stopPropagation}\n />\n }\n />\n ),\n )}\n </ChipsInnerContainer>\n )\n );\n },\n [\n controlledStateRef,\n hasMultipleChoices,\n internalSelectedValues,\n odysseyDesignTokens,\n removeSelectedValue,\n normalizedOptionsMap,\n ],\n );\n\n // Convert the options into the ReactNode children\n // that will populate the <Select>\n const renderedOptions = useMemo(\n () =>\n normalizedOptions.map((option, index) => {\n if (option.type === \"heading\") {\n return (\n <ListSubheader key={option.text}> {option.text} </ListSubheader>\n );\n }\n\n const isSelected = hasMultipleChoices\n ? internalSelectedValues?.includes(option.value)\n : internalSelectedValues === option.value;\n\n return (\n <MuiMenuItem\n data-empty={!option.text}\n key={normalizedKey(option.text, index.toString())}\n value={option.value}\n selected={isSelected}\n lang={option.lang}\n >\n {hasMultipleChoices && <MuiCheckbox checked={isSelected} />}\n {option.text}\n {!hasMultipleChoices && internalSelectedValues === option.value && (\n <ListItemSecondaryAction>\n <CheckIcon />\n </ListItemSecondaryAction>\n )}\n </MuiMenuItem>\n );\n }),\n [hasMultipleChoices, normalizedOptions, internalSelectedValues],\n );\n\n const renderValue = useCallback(\n (value: Value) => Array.isArray(value) && <Chips isInteractive={false} />,\n [Chips],\n );\n\n const renderFieldComponent = useCallback(\n ({\n ariaDescribedBy,\n errorMessageElementId,\n id,\n labelElementId,\n }: SelectRenderProps) => (\n <SelectContainer>\n <MuiSelect\n {...inputValues}\n aria-describedby={ariaDescribedBy}\n aria-errormessage={errorMessageElementId}\n displayEmpty\n id={id}\n inputProps={{\n \"data-se\": testId,\n \"aria-disabled\": isDisabled || isReadOnly,\n readOnly: isReadOnly,\n }}\n inputRef={(el: HTMLInputElement | HTMLTextAreaElement | null) => {\n if (localInputRef.current !== el) {\n (localInputRef as React.MutableRefObject<typeof el>).current = el;\n }\n selectRef.current = el;\n }}\n labelId={labelElementId}\n MenuProps={{\n sx: {\n \".MuiPaper-root\": {\n maxHeight: \"50vh\",\n },\n },\n }}\n multiple={hasMultipleChoices}\n name={nameOverride ?? id}\n onBlur={onBlur}\n onChange={onChange}\n onFocus={onFocus}\n renderValue={hasMultipleChoices ? renderValue : undefined}\n translate={translate}\n >\n {renderedOptions}\n </MuiSelect>\n {hasMultipleChoices && (\n <>\n <ChipsPositioningContainer\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <Chips isInteractive={!isReadOnly} isReadOnly={isReadOnly} />\n </ChipsPositioningContainer>\n </>\n )}\n </SelectContainer>\n ),\n [\n Chips,\n inputValues,\n hasMultipleChoices,\n isDisabled,\n isReadOnly,\n nameOverride,\n odysseyDesignTokens,\n onBlur,\n onChange,\n onFocus,\n renderedOptions,\n renderValue,\n testId,\n translate,\n ],\n );\n\n return (\n <Field\n ariaDescribedBy={ariaDescribedBy}\n errorMessage={errorMessage}\n errorMessageList={errorMessageList}\n fieldType=\"single\"\n hasVisibleLabel\n hint={hint}\n HintLinkComponent={HintLinkComponent}\n id={idOverride}\n isDisabled={isDisabled}\n isFullWidth={isFullWidth}\n isOptional={isOptional}\n label={label}\n renderFieldComponent={renderFieldComponent}\n />\n );\n};\n\nconst MemoizedSelect = memo(Select);\nMemoizedSelect.displayName = \"Select\";\n\nexport { MemoizedSelect as Select };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -20,7 +20,11 @@ const LUMINANCE_EDGE_MIN = 108;
|
|
|
20
20
|
const LUMINANCE_EDGE_MAX = 142;
|
|
21
21
|
const BLACK_FONT_COLOR = "#000000";
|
|
22
22
|
const WHITE_FONT_COLOR = "#FFFFFF";
|
|
23
|
-
const generateContrastColors = (
|
|
23
|
+
const generateContrastColors = ({
|
|
24
|
+
backgroundColor,
|
|
25
|
+
backgroundContrastColor,
|
|
26
|
+
odysseyDesignTokens
|
|
27
|
+
}) => {
|
|
24
28
|
const rgbFromHex = (0, _hexToRgb.isValidHexString)(backgroundColor) ? (0, _hexToRgb.hexToRgb)(backgroundColor) : (0, _hexToRgb.hexToRgb)(odysseyDesignTokens.HueNeutralWhite);
|
|
25
29
|
const {
|
|
26
30
|
red,
|
|
@@ -30,7 +34,7 @@ const generateContrastColors = (backgroundColor, odysseyDesignTokens) => {
|
|
|
30
34
|
const luminance = 0.2126 * red + 0.7152 * green + 0.0722 * blue;
|
|
31
35
|
const luminanceValueInEdgeRange = luminance > LUMINANCE_EDGE_MIN && luminance < LUMINANCE_EDGE_MAX;
|
|
32
36
|
const isLight = luminance > LUMINANCE_THRESHOLD;
|
|
33
|
-
const fontColor = luminanceValueInEdgeRange ? BLACK_FONT_COLOR : isLight ? odysseyDesignTokens.TypographyColorBody : WHITE_FONT_COLOR;
|
|
37
|
+
const fontColor = backgroundContrastColor || (luminanceValueInEdgeRange ? BLACK_FONT_COLOR : isLight ? odysseyDesignTokens.TypographyColorBody : WHITE_FONT_COLOR);
|
|
34
38
|
const calculatedFontColorInRgb = (0, _hexToRgb.hexToRgb)(fontColor);
|
|
35
39
|
const lightFontColorInRgb = (0, _hexToRgb.hexToRgb)(WHITE_FONT_COLOR);
|
|
36
40
|
const darkFontColorInRgb = (0, _hexToRgb.hexToRgb)(luminanceValueInEdgeRange ? BLACK_FONT_COLOR : odysseyDesignTokens.TypographyColorBody);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createContrastColors.cjs","names":["_hexToRgb","require","LUMINANCE_THRESHOLD","LUMINANCE_EDGE_MIN","LUMINANCE_EDGE_MAX","BLACK_FONT_COLOR","WHITE_FONT_COLOR","generateContrastColors","backgroundColor","odysseyDesignTokens","rgbFromHex","isValidHexString","hexToRgb","HueNeutralWhite","red","green","blue","luminance","luminanceValueInEdgeRange","isLight","fontColor","TypographyColorBody","calculatedFontColorInRgb","lightFontColorInRgb","darkFontColorInRgb","calculatedFontRgbComponentsString","rgbComponentsToString","lightFontRgbComponentsString","darkFontRgbComponentsString","getHighlightColor","focusRingColor","itemDisabledFontColor","itemHoverBackgroundColor","itemSelectedBackgroundColor","exports"],"sources":["../../src/createContrastColors.ts"],"sourcesContent":["/*!\n * Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport {\n hexToRgb,\n isValidHexString,\n rgbComponentsToString,\n} from \"./hexToRgb.js\";\nimport { DesignTokens } from \"./OdysseyDesignTokensContext.js\";\n\nexport type ContrastColors = {\n focusRingColor: string | undefined;\n fontColor: string | undefined;\n itemDisabledFontColor: string | undefined;\n itemHoverBackgroundColor: string | undefined;\n itemSelectedBackgroundColor: string | undefined;\n};\n\n// 128 is a magic number. This feels like roughly where we should switch from dark to light.\nconst LUMINANCE_THRESHOLD = 128;\nconst LUMINANCE_EDGE_MIN = 108;\nconst LUMINANCE_EDGE_MAX = 142;\n\nconst BLACK_FONT_COLOR = \"#000000\";\nconst WHITE_FONT_COLOR = \"#FFFFFF\";\n\nexport const generateContrastColors = (\n backgroundColor: string
|
|
1
|
+
{"version":3,"file":"createContrastColors.cjs","names":["_hexToRgb","require","LUMINANCE_THRESHOLD","LUMINANCE_EDGE_MIN","LUMINANCE_EDGE_MAX","BLACK_FONT_COLOR","WHITE_FONT_COLOR","generateContrastColors","backgroundColor","backgroundContrastColor","odysseyDesignTokens","rgbFromHex","isValidHexString","hexToRgb","HueNeutralWhite","red","green","blue","luminance","luminanceValueInEdgeRange","isLight","fontColor","TypographyColorBody","calculatedFontColorInRgb","lightFontColorInRgb","darkFontColorInRgb","calculatedFontRgbComponentsString","rgbComponentsToString","lightFontRgbComponentsString","darkFontRgbComponentsString","getHighlightColor","focusRingColor","itemDisabledFontColor","itemHoverBackgroundColor","itemSelectedBackgroundColor","exports"],"sources":["../../src/createContrastColors.ts"],"sourcesContent":["/*!\n * Copyright (c) 2022-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport {\n hexToRgb,\n isValidHexString,\n rgbComponentsToString,\n} from \"./hexToRgb.js\";\nimport { DesignTokens } from \"./OdysseyDesignTokensContext.js\";\n\nexport type ContrastColors = {\n focusRingColor: string | undefined;\n fontColor: string | undefined;\n itemDisabledFontColor: string | undefined;\n itemHoverBackgroundColor: string | undefined;\n itemSelectedBackgroundColor: string | undefined;\n};\n\n// 128 is a magic number. This feels like roughly where we should switch from dark to light.\nconst LUMINANCE_THRESHOLD = 128;\nconst LUMINANCE_EDGE_MIN = 108;\nconst LUMINANCE_EDGE_MAX = 142;\n\nconst BLACK_FONT_COLOR = \"#000000\";\nconst WHITE_FONT_COLOR = \"#FFFFFF\";\n\nexport const generateContrastColors = ({\n backgroundColor,\n backgroundContrastColor,\n odysseyDesignTokens,\n}: {\n backgroundColor: string;\n backgroundContrastColor?: string;\n odysseyDesignTokens: DesignTokens;\n}) => {\n // Convert hex to RGB\n const rgbFromHex = isValidHexString(backgroundColor)\n ? hexToRgb(backgroundColor)\n : hexToRgb(odysseyDesignTokens.HueNeutralWhite);\n\n const { red, green, blue } = rgbFromHex;\n\n // Calculate relative luminance\n // @see https://contrastchecker.online/color-relative-luminance-calculator#:~:text=For%20the%20sRGB%20colorspace%2C%20the,%2B0.055)%2F1.055)%20%5E%202.4\n // returns a number between 0(black) and 255(white)\n const luminance = 0.2126 * red + 0.7152 * green + 0.0722 * blue;\n\n // Luminance values between LUMINANCE_EDGE_MIN-LUMINANCE_EDGE_MAX can cause contrast ration issues\n // Using #000000 helps in these cases\n const luminanceValueInEdgeRange =\n luminance > LUMINANCE_EDGE_MIN && luminance < LUMINANCE_EDGE_MAX;\n\n // Determine if the color is light or dark.\n const isLight = luminance > LUMINANCE_THRESHOLD;\n\n const fontColor =\n backgroundContrastColor ||\n (luminanceValueInEdgeRange\n ? BLACK_FONT_COLOR\n : isLight\n ? odysseyDesignTokens.TypographyColorBody\n : WHITE_FONT_COLOR);\n\n const calculatedFontColorInRgb = hexToRgb(fontColor);\n const lightFontColorInRgb = hexToRgb(WHITE_FONT_COLOR);\n const darkFontColorInRgb = hexToRgb(\n luminanceValueInEdgeRange\n ? BLACK_FONT_COLOR\n : odysseyDesignTokens.TypographyColorBody,\n );\n\n const calculatedFontRgbComponentsString = rgbComponentsToString({\n red: calculatedFontColorInRgb?.red,\n green: calculatedFontColorInRgb?.green,\n blue: calculatedFontColorInRgb?.blue,\n });\n\n const lightFontRgbComponentsString = rgbComponentsToString({\n red: lightFontColorInRgb?.red,\n green: lightFontColorInRgb?.green,\n blue: lightFontColorInRgb?.blue,\n });\n\n const darkFontRgbComponentsString = rgbComponentsToString({\n red: darkFontColorInRgb?.red,\n green: darkFontColorInRgb?.green,\n blue: darkFontColorInRgb?.blue,\n });\n\n const getHighlightColor: (\n luminanceValueInEdgeRange: boolean,\n isLight: boolean,\n ) => string = (luminanceValueInEdgeRange, isLight) => {\n if (luminanceValueInEdgeRange) {\n return isLight\n ? darkFontRgbComponentsString\n : lightFontRgbComponentsString;\n }\n\n return calculatedFontRgbComponentsString;\n };\n\n return {\n fontColor,\n focusRingColor: `rgba(${calculatedFontRgbComponentsString}, .8)`,\n itemDisabledFontColor: `rgba(${calculatedFontRgbComponentsString}, .4)`,\n itemHoverBackgroundColor: `rgba(${getHighlightColor(luminanceValueInEdgeRange, isLight)}, .1)`,\n itemSelectedBackgroundColor: `rgba(${getHighlightColor(luminanceValueInEdgeRange, isLight)}, .15)`,\n };\n};\n"],"mappings":";;;;;;AAYA,IAAAA,SAAA,GAAAC,OAAA;AAZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAkBA,MAAMC,mBAAmB,GAAG,GAAG;AAC/B,MAAMC,kBAAkB,GAAG,GAAG;AAC9B,MAAMC,kBAAkB,GAAG,GAAG;AAE9B,MAAMC,gBAAgB,GAAG,SAAS;AAClC,MAAMC,gBAAgB,GAAG,SAAS;AAE3B,MAAMC,sBAAsB,GAAGA,CAAC;EACrCC,eAAe;EACfC,uBAAuB;EACvBC;AAKF,CAAC,KAAK;EAEJ,MAAMC,UAAU,GAAG,IAAAC,0BAAgB,EAACJ,eAAe,CAAC,GAChD,IAAAK,kBAAQ,EAACL,eAAe,CAAC,GACzB,IAAAK,kBAAQ,EAACH,mBAAmB,CAACI,eAAe,CAAC;EAEjD,MAAM;IAAEC,GAAG;IAAEC,KAAK;IAAEC;EAAK,CAAC,GAAGN,UAAU;EAKvC,MAAMO,SAAS,GAAG,MAAM,GAAGH,GAAG,GAAG,MAAM,GAAGC,KAAK,GAAG,MAAM,GAAGC,IAAI;EAI/D,MAAME,yBAAyB,GAC7BD,SAAS,GAAGf,kBAAkB,IAAIe,SAAS,GAAGd,kBAAkB;EAGlE,MAAMgB,OAAO,GAAGF,SAAS,GAAGhB,mBAAmB;EAE/C,MAAMmB,SAAS,GACbZ,uBAAuB,KACtBU,yBAAyB,GACtBd,gBAAgB,GAChBe,OAAO,GACLV,mBAAmB,CAACY,mBAAmB,GACvChB,gBAAgB,CAAC;EAEzB,MAAMiB,wBAAwB,GAAG,IAAAV,kBAAQ,EAACQ,SAAS,CAAC;EACpD,MAAMG,mBAAmB,GAAG,IAAAX,kBAAQ,EAACP,gBAAgB,CAAC;EACtD,MAAMmB,kBAAkB,GAAG,IAAAZ,kBAAQ,EACjCM,yBAAyB,GACrBd,gBAAgB,GAChBK,mBAAmB,CAACY,mBAC1B,CAAC;EAED,MAAMI,iCAAiC,GAAG,IAAAC,+BAAqB,EAAC;IAC9DZ,GAAG,EAAEQ,wBAAwB,EAAER,GAAG;IAClCC,KAAK,EAAEO,wBAAwB,EAAEP,KAAK;IACtCC,IAAI,EAAEM,wBAAwB,EAAEN;EAClC,CAAC,CAAC;EAEF,MAAMW,4BAA4B,GAAG,IAAAD,+BAAqB,EAAC;IACzDZ,GAAG,EAAES,mBAAmB,EAAET,GAAG;IAC7BC,KAAK,EAAEQ,mBAAmB,EAAER,KAAK;IACjCC,IAAI,EAAEO,mBAAmB,EAAEP;EAC7B,CAAC,CAAC;EAEF,MAAMY,2BAA2B,GAAG,IAAAF,+BAAqB,EAAC;IACxDZ,GAAG,EAAEU,kBAAkB,EAAEV,GAAG;IAC5BC,KAAK,EAAES,kBAAkB,EAAET,KAAK;IAChCC,IAAI,EAAEQ,kBAAkB,EAAER;EAC5B,CAAC,CAAC;EAEF,MAAMa,iBAGK,GAAGA,CAACX,yBAAyB,EAAEC,OAAO,KAAK;IACpD,IAAID,yBAAyB,EAAE;MAC7B,OAAOC,OAAO,GACVS,2BAA2B,GAC3BD,4BAA4B;IAClC;IAEA,OAAOF,iCAAiC;EAC1C,CAAC;EAED,OAAO;IACLL,SAAS;IACTU,cAAc,EAAE,QAAQL,iCAAiC,OAAO;IAChEM,qBAAqB,EAAE,QAAQN,iCAAiC,OAAO;IACvEO,wBAAwB,EAAE,QAAQH,iBAAiB,CAACX,yBAAyB,EAAEC,OAAO,CAAC,OAAO;IAC9Fc,2BAA2B,EAAE,QAAQJ,iBAAiB,CAACX,yBAAyB,EAAEC,OAAO,CAAC;EAC5F,CAAC;AACH,CAAC;AAACe,OAAA,CAAA5B,sBAAA,GAAAA,sBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getLogicalBoundaries = void 0;
|
|
7
|
+
/*!
|
|
8
|
+
* Copyright (c) 2025-present, Okta, Inc. and/or its affiliates. All rights reserved.
|
|
9
|
+
* The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the "License.")
|
|
10
|
+
*
|
|
11
|
+
* You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
14
|
+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
*
|
|
16
|
+
* See the License for the specific language governing permissions and limitations under the License.
|
|
17
|
+
*/const getLogicalBoundaries = element => {
|
|
18
|
+
const isRTL = document.documentElement.getAttribute("dir") === "rtl";
|
|
19
|
+
const {
|
|
20
|
+
top,
|
|
21
|
+
bottom,
|
|
22
|
+
left,
|
|
23
|
+
right
|
|
24
|
+
} = element.getBoundingClientRect();
|
|
25
|
+
return {
|
|
26
|
+
top,
|
|
27
|
+
bottom,
|
|
28
|
+
left: isRTL ? right : left,
|
|
29
|
+
right: isRTL ? left : right
|
|
30
|
+
};
|
|
31
|
+
};
|
|
32
|
+
exports.getLogicalBoundaries = getLogicalBoundaries;
|
|
33
|
+
//# sourceMappingURL=getLogicalBoundaries.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getLogicalBoundaries.cjs","names":["getLogicalBoundaries","element","isRTL","document","documentElement","getAttribute","top","bottom","left","right","getBoundingClientRect","exports"],"sources":["../../src/getLogicalBoundaries.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2025-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\n/**\n * Retrieves the logical boundaries (top, bottom, left, right) of a given HTML element.\n *\n * The function considers the document's text direction (`dir` attribute) to determine\n * whether the left and right boundaries should be swapped.\n */\nexport const getLogicalBoundaries = (element: HTMLElement) => {\n const isRTL = document.documentElement.getAttribute(\"dir\") === \"rtl\";\n\n const { top, bottom, left, right } = element.getBoundingClientRect();\n\n return {\n top,\n bottom,\n // left and right are swapped for RTL\n left: isRTL ? right : left,\n right: isRTL ? left : right,\n };\n};\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAQO,MAAMA,oBAAoB,GAAIC,OAAoB,IAAK;EAC5D,MAAMC,KAAK,GAAGC,QAAQ,CAACC,eAAe,CAACC,YAAY,CAAC,KAAK,CAAC,KAAK,KAAK;EAEpE,MAAM;IAAEC,GAAG;IAAEC,MAAM;IAAEC,IAAI;IAAEC;EAAM,CAAC,GAAGR,OAAO,CAACS,qBAAqB,CAAC,CAAC;EAEpE,OAAO;IACLJ,GAAG;IACHC,MAAM;IAENC,IAAI,EAAEN,KAAK,GAAGO,KAAK,GAAGD,IAAI;IAC1BC,KAAK,EAAEP,KAAK,GAAGM,IAAI,GAAGC;EACxB,CAAC;AACH,CAAC;AAACE,OAAA,CAAAX,oBAAA,GAAAA,oBAAA","ignoreList":[]}
|
|
@@ -11,6 +11,7 @@ var _DocumentationLink = require("./DocumentationLink.cjs");
|
|
|
11
11
|
var _OdysseyDesignTokensContext = require("../../OdysseyDesignTokensContext.cjs");
|
|
12
12
|
var _Typography = require("../../Typography.cjs");
|
|
13
13
|
var _useHasUiShell = require("../../ui-shell/useHasUiShell.cjs");
|
|
14
|
+
var _useMountLifecycleEffect = require("../../useMountLifecycleEffect.cjs");
|
|
14
15
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
15
16
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
17
|
/*!
|
|
@@ -78,11 +79,12 @@ const TemplateHeaderButtons = (0, _styled.default)("div", {
|
|
|
78
79
|
gap: odysseyDesignTokens.Spacing2
|
|
79
80
|
}));
|
|
80
81
|
const TemplateContent = (0, _styled.default)("div", {
|
|
81
|
-
shouldForwardProp: prop => !["
|
|
82
|
+
shouldForwardProp: prop => !["drawerVariant", "isDrawerOpen", "isFirstRender", "odysseyDesignTokens"].includes(prop)
|
|
82
83
|
})(({
|
|
83
|
-
|
|
84
|
+
drawerVariant,
|
|
84
85
|
isDrawerOpen,
|
|
85
|
-
|
|
86
|
+
isFirstRender,
|
|
87
|
+
odysseyDesignTokens
|
|
86
88
|
}) => ({
|
|
87
89
|
"@keyframes animate-drawer-open": {
|
|
88
90
|
"0%": {
|
|
@@ -105,7 +107,7 @@ const TemplateContent = (0, _styled.default)("div", {
|
|
|
105
107
|
gap: drawerVariant === "persistent" && !isDrawerOpen ? 0 : odysseyDesignTokens.Spacing4,
|
|
106
108
|
marginBlock: odysseyDesignTokens.Spacing4,
|
|
107
109
|
gridTemplateColumns: drawerVariant === "persistent" ? isDrawerOpen ? "minmax(0, 1fr) 360px" : "minmax(0, 1fr) 0" : "minmax(0, 1fr)",
|
|
108
|
-
animation: drawerVariant === "persistent" && isDrawerOpen ?
|
|
110
|
+
animation: drawerVariant === "persistent" && (!isFirstRender || isDrawerOpen) ? `animate-drawer-${isDrawerOpen ? "open" : "close"} 225ms cubic-bezier(0, 0, 0.2, 1)` : undefined
|
|
109
111
|
}));
|
|
110
112
|
const PageTemplate = ({
|
|
111
113
|
children,
|
|
@@ -125,6 +127,14 @@ const PageTemplate = ({
|
|
|
125
127
|
variant: drawerVariant
|
|
126
128
|
} = drawer?.props ?? {};
|
|
127
129
|
const hasUiShell = (0, _useHasUiShell.useHasUiShell)();
|
|
130
|
+
const firstRenderRef = (0, _react.useRef)(true);
|
|
131
|
+
const isFirstRender = firstRenderRef.current;
|
|
132
|
+
const onMount = (0, _react.useCallback)(() => {
|
|
133
|
+
firstRenderRef.current = false;
|
|
134
|
+
}, []);
|
|
135
|
+
(0, _useMountLifecycleEffect.useMountLifecycleEffect)({
|
|
136
|
+
onMount
|
|
137
|
+
});
|
|
128
138
|
return (0, _jsxRuntime.jsxs)(TemplateContainer, {
|
|
129
139
|
hasUiShell: hasUiShell,
|
|
130
140
|
isFullWidth: isFullWidth,
|
|
@@ -154,6 +164,7 @@ const PageTemplate = ({
|
|
|
154
164
|
odysseyDesignTokens: odysseyDesignTokens,
|
|
155
165
|
isDrawerOpen: isDrawerOpen,
|
|
156
166
|
drawerVariant: drawerVariant,
|
|
167
|
+
isFirstRender: isFirstRender,
|
|
157
168
|
children: [children, drawer]
|
|
158
169
|
})]
|
|
159
170
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PageTemplate.cjs","names":["_styled","_interopRequireDefault","require","_react","_index","_DocumentationLink","_OdysseyDesignTokensContext","_Typography","_useHasUiShell","_jsxRuntime","e","__esModule","default","TemplateContainer","styled","shouldForwardProp","prop","hasUiShell","isFullWidth","odysseyDesignTokens","maxWidth","Spacing6","marginInline","padding","TemplateHeader","display","alignItems","justifyContent","gap","Spacing4","TemplateHeaderPrimaryContent","TypographyLineLengthMax","marginBlockEnd","TemplateHeaderSecondaryContent","flexDirection","minHeight","Spacing7","whiteSpace","TemplateHeaderButtons","Spacing2","TemplateContent","includes","isDrawerOpen","drawerVariant","gridTemplateColumns","gridGap","marginBlock","animation","PageTemplate","children","description","documentationLink","documentationText","drawer","primaryCallToActionComponent","secondaryCallToActionComponent","tertiaryCallToActionComponent","title","useOdysseyDesignTokens","isOpen","variant","props","useHasUiShell","jsxs","jsx","Heading4","Paragraph","DocumentationLink","href","icon","DocumentationIcon","target","MemoizedPageTemplate","exports","memo","displayName"],"sources":["../../../../src/labs/PageTemplate/PageTemplate.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport styled from \"@emotion/styled\";\nimport { memo, ReactElement, ReactNode } from \"react\";\n\nimport { DrawerProps } from \"../../Drawer.js\";\nimport { DocumentationIcon } from \"../../icons.generated/index.js\";\nimport { DocumentationLink } from \"./DocumentationLink.js\";\nimport {\n DesignTokens,\n useOdysseyDesignTokens,\n} from \"../../OdysseyDesignTokensContext.js\";\nimport { Heading4, Paragraph } from \"../../Typography.js\";\nimport { useHasUiShell } from \"../../ui-shell/useHasUiShell.js\";\n\nexport type PageTemplateProps = {\n /**\n * The title of the layout to be situated in the layout header\n */\n title?: string;\n /**\n * A supplementary description to be situated in the layout header\n */\n description?: string;\n /**\n * The destination for a documentation `Link` to be situated in the layout header\n */\n documentationLink?: string;\n /**\n * The text for a documentation `Link` to be situated in the layout header\n */\n documentationText?: string;\n /**\n * An optional `Drawer` object. Can be of variant 'temporary' or 'persistent'.\n */\n drawer?: ReactElement<DrawerProps>;\n /**\n * An optional `Button` object to be situated in the layout header. Should almost always be of variant `primary`.\n */\n primaryCallToActionComponent?: ReactElement;\n /**\n * An optional `Button` object to be situated in the layout header, alongside the `callToActionPrimaryComponent`.\n */\n secondaryCallToActionComponent?: ReactElement;\n /**\n * An optional `Button` object to be situated in the layout header, alongside the other two `callToAction` components.\n */\n tertiaryCallToActionComponent?: ReactElement;\n /**\n * The content of the layout. May be a `string` or any other `ReactNode` or array of `ReactNode`s. Will often be `Grid` objects.\n */\n children?: ReactNode;\n /**\n * When set to `true`, the layout expands past its max width of 1440px and spans the entire available screen width.\n */\n isFullWidth?: boolean;\n};\n\ntype TemplateContentProps = {\n odysseyDesignTokens: DesignTokens;\n isDrawerOpen?: boolean;\n drawerVariant?: string;\n};\n\nconst TemplateContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" &&\n prop !== \"hasUiShell\" &&\n prop !== \"isFullWidth\",\n})<{\n hasUiShell: boolean;\n isFullWidth: boolean;\n odysseyDesignTokens: DesignTokens;\n}>(({ hasUiShell, isFullWidth, odysseyDesignTokens }) => ({\n maxWidth: isFullWidth\n ? \"100%\"\n : `calc(1440px + ${odysseyDesignTokens.Spacing6} + ${odysseyDesignTokens.Spacing6})`,\n marginInline:\n isFullWidth && !hasUiShell ? odysseyDesignTokens.Spacing6 : \"auto\",\n padding: hasUiShell ? 0 : odysseyDesignTokens.Spacing6,\n}));\n\nconst TemplateHeader = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n}>(({ odysseyDesignTokens }) => ({\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: odysseyDesignTokens.Spacing4,\n}));\n\nconst TemplateHeaderPrimaryContent = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n}>(({ odysseyDesignTokens }) => ({\n maxWidth: odysseyDesignTokens.TypographyLineLengthMax,\n [\".MuiTypography-root:last-child\"]: {\n marginBlockEnd: \"0\",\n },\n}));\n\nconst TemplateHeaderSecondaryContent = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n}>(({ odysseyDesignTokens }) => ({\n alignItems: \"flex-end\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: odysseyDesignTokens.Spacing4,\n minHeight: odysseyDesignTokens.Spacing7,\n justifyContent: \"center\",\n whiteSpace: \"nowrap\",\n}));\n\nconst TemplateHeaderButtons = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n}>(({ odysseyDesignTokens }) => ({\n display: \"flex\",\n gap: odysseyDesignTokens.Spacing2,\n}));\n\nconst TemplateContent = styled(\"div\", {\n shouldForwardProp: (prop) =>\n ![\"odysseyDesignTokens\", \"isDrawerOpen\", \"drawerVariant\"].includes(prop),\n})<TemplateContentProps>(\n ({ odysseyDesignTokens, isDrawerOpen, drawerVariant }) => ({\n \"@keyframes animate-drawer-open\": {\n \"0%\": {\n gridTemplateColumns: \"minmax(0, 1fr) 0\",\n },\n \"100%\": {\n gridTemplateColumns: \"minmax(0, 1fr) 360px\",\n },\n },\n \"@keyframes animate-drawer-close\": {\n \"0%\": {\n gridTemplateColumns: \"minmax(0, 1fr) 360px\",\n },\n \"100%\": {\n gridTemplateColumns: \"minmax(0, 1fr) 0\",\n },\n },\n display: \"grid\",\n gridGap:\n drawerVariant === \"persistent\" && !isDrawerOpen\n ? 0\n : odysseyDesignTokens.Spacing4,\n gap:\n drawerVariant === \"persistent\" && !isDrawerOpen\n ? 0\n : odysseyDesignTokens.Spacing4,\n marginBlock: odysseyDesignTokens.Spacing4,\n gridTemplateColumns:\n drawerVariant === \"persistent\"\n ? isDrawerOpen\n ? \"minmax(0, 1fr) 360px\"\n : \"minmax(0, 1fr) 0\"\n : \"minmax(0, 1fr)\",\n animation:\n drawerVariant === \"persistent\" && isDrawerOpen\n ? \"animate-drawer-open 225ms cubic-bezier(0, 0, 0.2, 1)\"\n : \"animate-drawer-close 225ms cubic-bezier(0, 0, 0.2, 1)\",\n }),\n);\n\nconst PageTemplate = ({\n children,\n description,\n documentationLink,\n documentationText,\n drawer,\n isFullWidth = false,\n primaryCallToActionComponent,\n secondaryCallToActionComponent,\n tertiaryCallToActionComponent,\n title,\n}: PageTemplateProps) => {\n const odysseyDesignTokens = useOdysseyDesignTokens();\n const { isOpen: isDrawerOpen, variant: drawerVariant } = drawer?.props ?? {};\n\n const hasUiShell = useHasUiShell();\n\n return (\n <TemplateContainer\n hasUiShell={hasUiShell}\n isFullWidth={isFullWidth}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <TemplateHeader odysseyDesignTokens={odysseyDesignTokens}>\n <TemplateHeaderPrimaryContent odysseyDesignTokens={odysseyDesignTokens}>\n {title && <Heading4>{title}</Heading4>}\n {description && <Paragraph>{description}</Paragraph>}\n </TemplateHeaderPrimaryContent>\n\n <TemplateHeaderSecondaryContent\n odysseyDesignTokens={odysseyDesignTokens}\n >\n {documentationLink && (\n <DocumentationLink\n href={documentationLink}\n icon={<DocumentationIcon />}\n target=\"_blank\"\n >\n {documentationText}\n </DocumentationLink>\n )}\n {(primaryCallToActionComponent ||\n secondaryCallToActionComponent ||\n tertiaryCallToActionComponent) && (\n <TemplateHeaderButtons odysseyDesignTokens={odysseyDesignTokens}>\n {tertiaryCallToActionComponent}\n {secondaryCallToActionComponent}\n {primaryCallToActionComponent}\n </TemplateHeaderButtons>\n )}\n </TemplateHeaderSecondaryContent>\n </TemplateHeader>\n <TemplateContent\n odysseyDesignTokens={odysseyDesignTokens}\n isDrawerOpen={isDrawerOpen}\n drawerVariant={drawerVariant}\n >\n {children}\n {drawer}\n </TemplateContent>\n </TemplateContainer>\n );\n};\n\nconst MemoizedPageTemplate = memo(PageTemplate);\nMemoizedPageTemplate.displayName = \"PageTemplate\";\n\nexport { MemoizedPageTemplate as PageTemplate };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"PageTemplate.cjs","names":["_styled","_interopRequireDefault","require","_react","_index","_DocumentationLink","_OdysseyDesignTokensContext","_Typography","_useHasUiShell","_useMountLifecycleEffect","_jsxRuntime","e","__esModule","default","TemplateContainer","styled","shouldForwardProp","prop","hasUiShell","isFullWidth","odysseyDesignTokens","maxWidth","Spacing6","marginInline","padding","TemplateHeader","display","alignItems","justifyContent","gap","Spacing4","TemplateHeaderPrimaryContent","TypographyLineLengthMax","marginBlockEnd","TemplateHeaderSecondaryContent","flexDirection","minHeight","Spacing7","whiteSpace","TemplateHeaderButtons","Spacing2","TemplateContent","includes","drawerVariant","isDrawerOpen","isFirstRender","gridTemplateColumns","gridGap","marginBlock","animation","undefined","PageTemplate","children","description","documentationLink","documentationText","drawer","primaryCallToActionComponent","secondaryCallToActionComponent","tertiaryCallToActionComponent","title","useOdysseyDesignTokens","isOpen","variant","props","useHasUiShell","firstRenderRef","useRef","current","onMount","useCallback","useMountLifecycleEffect","jsxs","jsx","Heading4","Paragraph","DocumentationLink","href","icon","DocumentationIcon","target","MemoizedPageTemplate","exports","memo","displayName"],"sources":["../../../../src/labs/PageTemplate/PageTemplate.tsx"],"sourcesContent":["/*!\n * Copyright (c) 2024-present, Okta, Inc. and/or its affiliates. All rights reserved.\n * The Okta software accompanied by this notice is provided pursuant to the Apache License, Version 2.0 (the \"License.\")\n *\n * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0.\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *\n * See the License for the specific language governing permissions and limitations under the License.\n */\n\nimport styled from \"@emotion/styled\";\nimport { memo, ReactElement, ReactNode, useCallback, useRef } from \"react\";\n\nimport { DrawerProps } from \"../../Drawer.js\";\nimport { DocumentationIcon } from \"../../icons.generated/index.js\";\nimport { DocumentationLink } from \"./DocumentationLink.js\";\nimport {\n DesignTokens,\n useOdysseyDesignTokens,\n} from \"../../OdysseyDesignTokensContext.js\";\nimport { Heading4, Paragraph } from \"../../Typography.js\";\nimport { useHasUiShell } from \"../../ui-shell/useHasUiShell.js\";\nimport { useMountLifecycleEffect } from \"../../useMountLifecycleEffect.js\";\n\nexport type PageTemplateProps = {\n /**\n * The title of the layout to be situated in the layout header\n */\n title?: string;\n /**\n * A supplementary description to be situated in the layout header\n */\n description?: string;\n /**\n * The destination for a documentation `Link` to be situated in the layout header\n */\n documentationLink?: string;\n /**\n * The text for a documentation `Link` to be situated in the layout header\n */\n documentationText?: string;\n /**\n * An optional `Drawer` object. Can be of variant 'temporary' or 'persistent'.\n */\n drawer?: ReactElement<DrawerProps>;\n /**\n * An optional `Button` object to be situated in the layout header. Should almost always be of variant `primary`.\n */\n primaryCallToActionComponent?: ReactElement;\n /**\n * An optional `Button` object to be situated in the layout header, alongside the `callToActionPrimaryComponent`.\n */\n secondaryCallToActionComponent?: ReactElement;\n /**\n * An optional `Button` object to be situated in the layout header, alongside the other two `callToAction` components.\n */\n tertiaryCallToActionComponent?: ReactElement;\n /**\n * The content of the layout. May be a `string` or any other `ReactNode` or array of `ReactNode`s. Will often be `Grid` objects.\n */\n children?: ReactNode;\n /**\n * When set to `true`, the layout expands past its max width of 1440px and spans the entire available screen width.\n */\n isFullWidth?: boolean;\n};\n\ntype TemplateContentProps = {\n drawerVariant?: string;\n isDrawerOpen?: boolean;\n isFirstRender: boolean;\n odysseyDesignTokens: DesignTokens;\n};\n\nconst TemplateContainer = styled(\"div\", {\n shouldForwardProp: (prop) =>\n prop !== \"odysseyDesignTokens\" &&\n prop !== \"hasUiShell\" &&\n prop !== \"isFullWidth\",\n})<{\n hasUiShell: boolean;\n isFullWidth: boolean;\n odysseyDesignTokens: DesignTokens;\n}>(({ hasUiShell, isFullWidth, odysseyDesignTokens }) => ({\n maxWidth: isFullWidth\n ? \"100%\"\n : `calc(1440px + ${odysseyDesignTokens.Spacing6} + ${odysseyDesignTokens.Spacing6})`,\n marginInline:\n isFullWidth && !hasUiShell ? odysseyDesignTokens.Spacing6 : \"auto\",\n padding: hasUiShell ? 0 : odysseyDesignTokens.Spacing6,\n}));\n\nconst TemplateHeader = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n}>(({ odysseyDesignTokens }) => ({\n display: \"flex\",\n alignItems: \"flex-start\",\n justifyContent: \"space-between\",\n gap: odysseyDesignTokens.Spacing4,\n}));\n\nconst TemplateHeaderPrimaryContent = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n}>(({ odysseyDesignTokens }) => ({\n maxWidth: odysseyDesignTokens.TypographyLineLengthMax,\n [\".MuiTypography-root:last-child\"]: {\n marginBlockEnd: \"0\",\n },\n}));\n\nconst TemplateHeaderSecondaryContent = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n}>(({ odysseyDesignTokens }) => ({\n alignItems: \"flex-end\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: odysseyDesignTokens.Spacing4,\n minHeight: odysseyDesignTokens.Spacing7,\n justifyContent: \"center\",\n whiteSpace: \"nowrap\",\n}));\n\nconst TemplateHeaderButtons = styled(\"div\", {\n shouldForwardProp: (prop) => prop !== \"odysseyDesignTokens\",\n})<{\n odysseyDesignTokens: DesignTokens;\n}>(({ odysseyDesignTokens }) => ({\n display: \"flex\",\n gap: odysseyDesignTokens.Spacing2,\n}));\n\nconst TemplateContent = styled(\"div\", {\n shouldForwardProp: (prop) =>\n ![\n \"drawerVariant\",\n \"isDrawerOpen\",\n \"isFirstRender\",\n \"odysseyDesignTokens\",\n ].includes(prop),\n})<TemplateContentProps>(\n ({ drawerVariant, isDrawerOpen, isFirstRender, odysseyDesignTokens }) => ({\n \"@keyframes animate-drawer-open\": {\n \"0%\": {\n gridTemplateColumns: \"minmax(0, 1fr) 0\",\n },\n \"100%\": {\n gridTemplateColumns: \"minmax(0, 1fr) 360px\",\n },\n },\n \"@keyframes animate-drawer-close\": {\n \"0%\": {\n gridTemplateColumns: \"minmax(0, 1fr) 360px\",\n },\n \"100%\": {\n gridTemplateColumns: \"minmax(0, 1fr) 0\",\n },\n },\n display: \"grid\",\n gridGap:\n drawerVariant === \"persistent\" && !isDrawerOpen\n ? 0\n : odysseyDesignTokens.Spacing4,\n gap:\n drawerVariant === \"persistent\" && !isDrawerOpen\n ? 0\n : odysseyDesignTokens.Spacing4,\n marginBlock: odysseyDesignTokens.Spacing4,\n gridTemplateColumns:\n drawerVariant === \"persistent\"\n ? isDrawerOpen\n ? \"minmax(0, 1fr) 360px\"\n : \"minmax(0, 1fr) 0\"\n : \"minmax(0, 1fr)\",\n animation:\n drawerVariant === \"persistent\" && (!isFirstRender || isDrawerOpen)\n ? `animate-drawer-${isDrawerOpen ? \"open\" : \"close\"} 225ms cubic-bezier(0, 0, 0.2, 1)`\n : undefined,\n }),\n);\n\nconst PageTemplate = ({\n children,\n description,\n documentationLink,\n documentationText,\n drawer,\n isFullWidth = false,\n primaryCallToActionComponent,\n secondaryCallToActionComponent,\n tertiaryCallToActionComponent,\n title,\n}: PageTemplateProps) => {\n const odysseyDesignTokens = useOdysseyDesignTokens();\n const { isOpen: isDrawerOpen, variant: drawerVariant } = drawer?.props ?? {};\n\n const hasUiShell = useHasUiShell();\n\n const firstRenderRef = useRef(true);\n\n const isFirstRender = firstRenderRef.current;\n\n const onMount = useCallback(() => {\n firstRenderRef.current = false;\n }, []);\n\n useMountLifecycleEffect({\n onMount,\n });\n\n return (\n <TemplateContainer\n hasUiShell={hasUiShell}\n isFullWidth={isFullWidth}\n odysseyDesignTokens={odysseyDesignTokens}\n >\n <TemplateHeader odysseyDesignTokens={odysseyDesignTokens}>\n <TemplateHeaderPrimaryContent odysseyDesignTokens={odysseyDesignTokens}>\n {title && <Heading4>{title}</Heading4>}\n {description && <Paragraph>{description}</Paragraph>}\n </TemplateHeaderPrimaryContent>\n\n <TemplateHeaderSecondaryContent\n odysseyDesignTokens={odysseyDesignTokens}\n >\n {documentationLink && (\n <DocumentationLink\n href={documentationLink}\n icon={<DocumentationIcon />}\n target=\"_blank\"\n >\n {documentationText}\n </DocumentationLink>\n )}\n {(primaryCallToActionComponent ||\n secondaryCallToActionComponent ||\n tertiaryCallToActionComponent) && (\n <TemplateHeaderButtons odysseyDesignTokens={odysseyDesignTokens}>\n {tertiaryCallToActionComponent}\n {secondaryCallToActionComponent}\n {primaryCallToActionComponent}\n </TemplateHeaderButtons>\n )}\n </TemplateHeaderSecondaryContent>\n </TemplateHeader>\n <TemplateContent\n odysseyDesignTokens={odysseyDesignTokens}\n isDrawerOpen={isDrawerOpen}\n drawerVariant={drawerVariant}\n isFirstRender={isFirstRender}\n >\n {children}\n {drawer}\n </TemplateContent>\n </TemplateContainer>\n );\n};\n\nconst MemoizedPageTemplate = memo(PageTemplate);\nMemoizedPageTemplate.displayName = \"PageTemplate\";\n\nexport { MemoizedPageTemplate as PageTemplate };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.translation = void 0;
|
|
7
|
+
const translation = exports.translation = {
|
|
8
|
+
"navigation.label": "Nabigazio nagusia",
|
|
9
|
+
"navigation.footer": "Bigarren mailako nabigazio-estekak",
|
|
10
|
+
"navigation.drag.handle": "Arrastatu heldulekua",
|
|
11
|
+
"sortable.list.drag.start": "Arrasta daitekeen {{activeId}} elementua hartu da",
|
|
12
|
+
"sortable.list.drag.moved.over": "Arrasta daitekeen {{activeId}} elementua aska daitekeen {{overId}} eremuaren gainetik mugitu da",
|
|
13
|
+
"sortable.list.drag.nolonger.over": "Arrasta daitekeen {{activeId}} elementua ez dago jada aska daitekeen eremu baten gainean",
|
|
14
|
+
"sortable.list.drag.end.dropped.over": "Arrasta daitekeen {{activeId}} elementua aska daitekeen {{overId}} eremuaren gainean askatu da",
|
|
15
|
+
"sortable.list.drag.end.dropped": "Arrasta daitekeen {{activeId}} elementua askatu da",
|
|
16
|
+
"sortable.list.drag.cancel": "Bertan behera utzi da arrastatzeko prozesua. Arrasta daitekeen moduko {{activeId}} elementua askatu da",
|
|
17
|
+
"breadcrumbs.home.text": "Etxea",
|
|
18
|
+
"breadcrumbs.label.text": "Ogi-apurrak",
|
|
19
|
+
"close.text": "Itxi",
|
|
20
|
+
"clear.text": "Garbitu",
|
|
21
|
+
"open.text": "Ireki",
|
|
22
|
+
"autocomplete.nooptions": "Aukerarik ez",
|
|
23
|
+
"picker.calendar.navigation.nextmonth": "Hurrengo hilabetea",
|
|
24
|
+
"picker.calendar.navigation.previousmonth": "Aurreko hilabetea",
|
|
25
|
+
"picker.date.toolbar.title": "Hautatutako data",
|
|
26
|
+
"picker.daterange.toolbar.title": "Hautatu data-tartea",
|
|
27
|
+
"picker.datetime.toolbar.title": "Hautatu data eta ordua",
|
|
28
|
+
"picker.error.invalid": "Zuzendu dataren formatua edo hautatu data egutegitik.",
|
|
29
|
+
"picker.error.mindate": "Idatzitako data baimendutako datak baino lehenagokoa da. Hautatu data bat egutegian eskuragarri dagoen tartetik.",
|
|
30
|
+
"picker.error.maxdate": "Idatzitako data baimendutako datak baino geroagokoa da. Hautatu data bat egutegian eskuragarri dagoen tartetik.",
|
|
31
|
+
"picker.field.placeholder.day": "EE",
|
|
32
|
+
"picker.field.placeholder.hours": "hh",
|
|
33
|
+
"picker.field.placeholder.meridiem": "aa",
|
|
34
|
+
"picker.field.placeholder.minutes": "mm",
|
|
35
|
+
"picker.field.placeholder.month": "HH",
|
|
36
|
+
"picker.field.placeholder.seconds": "ss",
|
|
37
|
+
"picker.field.placeholder.year": "UUUU",
|
|
38
|
+
"picker.labels.action.apply": "Aplikatu",
|
|
39
|
+
"picker.labels.action.cancel": "Utzi",
|
|
40
|
+
"picker.labels.action.today": "Gaur",
|
|
41
|
+
"picker.labels.clock.empty": "Ez da ordurik hautatu",
|
|
42
|
+
"picker.labels.clock.hours": "ordu",
|
|
43
|
+
"picker.labels.clock.minutes": "minutu",
|
|
44
|
+
"picker.labels.clock.seconds": "segundo",
|
|
45
|
+
"picker.labels.clock.selected": "Hau da hautatutako ordua:",
|
|
46
|
+
"picker.labels.date.choose": "Aukeratu data",
|
|
47
|
+
"picker.labels.date.selected": "Hau da hautatutako data:",
|
|
48
|
+
"picker.labels.empty": "Hutsik",
|
|
49
|
+
"picker.labels.field.clear": "Garbitu balioa",
|
|
50
|
+
"picker.labels.range.end": "Amaiera",
|
|
51
|
+
"picker.labels.range.enddate": "Amaiera-data",
|
|
52
|
+
"picker.labels.range.endtime": "Amaiera-ordua",
|
|
53
|
+
"picker.labels.range.start": "Hasiera",
|
|
54
|
+
"picker.labels.range.startdate": "Hasiera-data",
|
|
55
|
+
"picker.labels.range.starttime": "Hasiera-ordua",
|
|
56
|
+
"picker.labels.select": "Hautatu",
|
|
57
|
+
"picker.labels.table.date": "aukeratu data",
|
|
58
|
+
"picker.labels.table.time": "aukeratu ordua",
|
|
59
|
+
"picker.labels.time.choose": "Aukeratu ordua",
|
|
60
|
+
"picker.labels.time.selected": "hau da hautatutako ordua:",
|
|
61
|
+
"picker.time.toolbar.title": "Hautatu ordua",
|
|
62
|
+
"picker.view.name.day": "Eguna",
|
|
63
|
+
"picker.view.name.hours": "Orduak",
|
|
64
|
+
"picker.view.name.meridiem": "Meridiem",
|
|
65
|
+
"picker.view.name.minutes": "Minutuak",
|
|
66
|
+
"picker.view.name.month": "Hilabetea",
|
|
67
|
+
"picker.view.name.seconds": "Segundoak",
|
|
68
|
+
"picker.view.name.weekday": "Asteko eguna",
|
|
69
|
+
"picker.view.name.year": "Urtea",
|
|
70
|
+
"picker.view.navigation.open.nextview": "Ireki hurrengo ikuspegia",
|
|
71
|
+
"picker.view.navigation.open.previousview": "Ireki aurreko ikuspegia",
|
|
72
|
+
"picker.view.navigation.switch.calendarview": "urteko ikuspegia irekita dago, aldatu egutegiaren ikuspegira",
|
|
73
|
+
"picker.view.navigation.switch.yearview": "egutegiaren ikuspegia irekita dago, aldatu urteko ikuspegira",
|
|
74
|
+
"fielderror.screenreader.text": "Errorea",
|
|
75
|
+
"fieldlabel.optional.text": "Aukerakoa",
|
|
76
|
+
"fieldlabel.required.text": "Beharrezkoa",
|
|
77
|
+
"filters.clear.label": "Garbitu iragazkiak",
|
|
78
|
+
"filters.submit.label": "Bidali",
|
|
79
|
+
"filters.filter.any": "Edozein",
|
|
80
|
+
"filters.filter.clear": "Garbitu iragazkia",
|
|
81
|
+
"filters.filters.arialabel": "Iragazkiak",
|
|
82
|
+
"filters.menuitem.any": "Edozein {{label}}",
|
|
83
|
+
"filters.menuitem.selected": "{{selected}} hautatuta",
|
|
84
|
+
"filters.search.label": "Bilatu",
|
|
85
|
+
"fileupload.button.text": "Gehitu fitxategiak",
|
|
86
|
+
"fileupload.prompt.text": "Arrastatu eta jaregin fitxategiak hemen, edo egin klik fitxategiak gehitzeko",
|
|
87
|
+
"fileupload.removefile.text": "Kendu fitxategia",
|
|
88
|
+
"passwordfield.icon.label.hide": "Ezkutatu pasahitza",
|
|
89
|
+
"passwordfield.icon.label.show": "Erakutsi pasahitza",
|
|
90
|
+
"severity.error": "errorea",
|
|
91
|
+
"severity.info": "informazioa",
|
|
92
|
+
"severity.success": "eginda",
|
|
93
|
+
"severity.warning": "abisua",
|
|
94
|
+
"sidenav.toggle.expand": "Ireki nabigazioa",
|
|
95
|
+
"sidenav.toggle.collapse": "Itxi nabigazioa",
|
|
96
|
+
"switch.active": "Aktibo",
|
|
97
|
+
"switch.inactive": "Inaktibo",
|
|
98
|
+
"table.columnvisibility.arialabel": "Erakutsi/Ezkutatu zutabeak",
|
|
99
|
+
"table.density.arialabel": "Taularen dentsitatea",
|
|
100
|
+
"table.draghandle.arialabel": "Arrastatu errenkada berrantolatzeko. Edo sakatu zuriune-barra edo Sartu tekla berrantolaketa hasteko eta gelditzeko, eta Ihes tekla bertan behera uzteko.",
|
|
101
|
+
"table.draghandle.tooltip": "Arrastatu errenkada edo sakatu zuriune-barra/Sartu tekla berrantolaketa hasteko eta gelditzeko",
|
|
102
|
+
"table.actions": "Ekintzak",
|
|
103
|
+
"table.error": "Errorea datuak kargatzean.",
|
|
104
|
+
"table.fetchedrows.text": "{{totalRows}} errenkada eskuratu da",
|
|
105
|
+
"table.fetchedrows.text_plural": "{{totalRows}} errenkada eskuratu dira guztira",
|
|
106
|
+
"table.moreactions.arialabel": "Ekintza gehiago",
|
|
107
|
+
"table.noresults.heading": "Ez dago emaitzarik.",
|
|
108
|
+
"table.noresults.text": "Saiatu beste kontsulta bat egiten.",
|
|
109
|
+
"table.reorder.backward": "Bidali atzera",
|
|
110
|
+
"table.reorder.forward": "Ekarri aurrera",
|
|
111
|
+
"table.reorder.toback": "Bidali atzera",
|
|
112
|
+
"table.reorder.tofront": "Ekarri aurrera",
|
|
113
|
+
"table.rows.text": "{{totalRows}} errenkada",
|
|
114
|
+
"table.rows.text_plural": "{{totalRows}} errenkada",
|
|
115
|
+
"pagination.label": "Orri-kopurua",
|
|
116
|
+
"pagination.loadmore": "Erakutsi gehiago",
|
|
117
|
+
"pagination.next": "Hurrengo orria",
|
|
118
|
+
"pagination.previous": "Aurreko orria",
|
|
119
|
+
"pagination.page": "Orria",
|
|
120
|
+
"pagination.rowsperpage": "Errenkadak orriko",
|
|
121
|
+
"pagination.rowswithtotal": "{{firstRow}}-{{lastRow}} errenkadak (guztira, {{totalRows}})",
|
|
122
|
+
"pagination.rowswithouttotal": "{{firstRow}}-{{lastRow}} errenkadak",
|
|
123
|
+
"pagination.totalrows": "{{totalRows}} errenkada",
|
|
124
|
+
"table.actions.selectall": "Hautatu guztiak",
|
|
125
|
+
"table.actions.selectnone": "Ez hautatu bat ere ez",
|
|
126
|
+
"table.actions.selectsome": "{{selectedRowCount}} hautatuta",
|
|
127
|
+
"table.rowexpansion.expand": "Zabaldu",
|
|
128
|
+
"table.rowexpansion.expandall": "Zabaldu guztiak",
|
|
129
|
+
"table.rowexpansion.collapse": "Tolestu",
|
|
130
|
+
"table.rowexpansion.collapseall": "Tolestu guztiak",
|
|
131
|
+
"dataview.layout.table": "Taula",
|
|
132
|
+
"dataview.layout.grid": "Sareta",
|
|
133
|
+
"dataview.layout.list": "Zerrenda",
|
|
134
|
+
"topnav.helpicon": "laguntza-orria",
|
|
135
|
+
"topnav.settingsicon": "ezarpenen orria"
|
|
136
|
+
};
|
|
137
|
+
//# sourceMappingURL=odyssey-react-mui_eu.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"odyssey-react-mui_eu.cjs","names":["translation","exports"],"sources":["../../../../src/properties/ts/odyssey-react-mui_eu.ts"],"sourcesContent":["export const translation = {\"navigation.label\":\"Nabigazio nagusia\",\"navigation.footer\":\"Bigarren mailako nabigazio-estekak\",\"navigation.drag.handle\":\"Arrastatu heldulekua\",\"sortable.list.drag.start\":\"Arrasta daitekeen {{activeId}} elementua hartu da\",\"sortable.list.drag.moved.over\":\"Arrasta daitekeen {{activeId}} elementua aska daitekeen {{overId}} eremuaren gainetik mugitu da\",\"sortable.list.drag.nolonger.over\":\"Arrasta daitekeen {{activeId}} elementua ez dago jada aska daitekeen eremu baten gainean\",\"sortable.list.drag.end.dropped.over\":\"Arrasta daitekeen {{activeId}} elementua aska daitekeen {{overId}} eremuaren gainean askatu da\",\"sortable.list.drag.end.dropped\":\"Arrasta daitekeen {{activeId}} elementua askatu da\",\"sortable.list.drag.cancel\":\"Bertan behera utzi da arrastatzeko prozesua. Arrasta daitekeen moduko {{activeId}} elementua askatu da\",\"breadcrumbs.home.text\":\"Etxea\",\"breadcrumbs.label.text\":\"Ogi-apurrak\",\"close.text\":\"Itxi\",\"clear.text\":\"Garbitu\",\"open.text\":\"Ireki\",\"autocomplete.nooptions\":\"Aukerarik ez\",\"picker.calendar.navigation.nextmonth\":\"Hurrengo hilabetea\",\"picker.calendar.navigation.previousmonth\":\"Aurreko hilabetea\",\"picker.date.toolbar.title\":\"Hautatutako data\",\"picker.daterange.toolbar.title\":\"Hautatu data-tartea\",\"picker.datetime.toolbar.title\":\"Hautatu data eta ordua\",\"picker.error.invalid\":\"Zuzendu dataren formatua edo hautatu data egutegitik.\",\"picker.error.mindate\":\"Idatzitako data baimendutako datak baino lehenagokoa da. Hautatu data bat egutegian eskuragarri dagoen tartetik.\",\"picker.error.maxdate\":\"Idatzitako data baimendutako datak baino geroagokoa da. Hautatu data bat egutegian eskuragarri dagoen tartetik.\",\"picker.field.placeholder.day\":\"EE\",\"picker.field.placeholder.hours\":\"hh\",\"picker.field.placeholder.meridiem\":\"aa\",\"picker.field.placeholder.minutes\":\"mm\",\"picker.field.placeholder.month\":\"HH\",\"picker.field.placeholder.seconds\":\"ss\",\"picker.field.placeholder.year\":\"UUUU\",\"picker.labels.action.apply\":\"Aplikatu\",\"picker.labels.action.cancel\":\"Utzi\",\"picker.labels.action.today\":\"Gaur\",\"picker.labels.clock.empty\":\"Ez da ordurik hautatu\",\"picker.labels.clock.hours\":\"ordu\",\"picker.labels.clock.minutes\":\"minutu\",\"picker.labels.clock.seconds\":\"segundo\",\"picker.labels.clock.selected\":\"Hau da hautatutako ordua:\",\"picker.labels.date.choose\":\"Aukeratu data\",\"picker.labels.date.selected\":\"Hau da hautatutako data:\",\"picker.labels.empty\":\"Hutsik\",\"picker.labels.field.clear\":\"Garbitu balioa\",\"picker.labels.range.end\":\"Amaiera\",\"picker.labels.range.enddate\":\"Amaiera-data\",\"picker.labels.range.endtime\":\"Amaiera-ordua\",\"picker.labels.range.start\":\"Hasiera\",\"picker.labels.range.startdate\":\"Hasiera-data\",\"picker.labels.range.starttime\":\"Hasiera-ordua\",\"picker.labels.select\":\"Hautatu\",\"picker.labels.table.date\":\"aukeratu data\",\"picker.labels.table.time\":\"aukeratu ordua\",\"picker.labels.time.choose\":\"Aukeratu ordua\",\"picker.labels.time.selected\":\"hau da hautatutako ordua:\",\"picker.time.toolbar.title\":\"Hautatu ordua\",\"picker.view.name.day\":\"Eguna\",\"picker.view.name.hours\":\"Orduak\",\"picker.view.name.meridiem\":\"Meridiem\",\"picker.view.name.minutes\":\"Minutuak\",\"picker.view.name.month\":\"Hilabetea\",\"picker.view.name.seconds\":\"Segundoak\",\"picker.view.name.weekday\":\"Asteko eguna\",\"picker.view.name.year\":\"Urtea\",\"picker.view.navigation.open.nextview\":\"Ireki hurrengo ikuspegia\",\"picker.view.navigation.open.previousview\":\"Ireki aurreko ikuspegia\",\"picker.view.navigation.switch.calendarview\":\"urteko ikuspegia irekita dago, aldatu egutegiaren ikuspegira\",\"picker.view.navigation.switch.yearview\":\"egutegiaren ikuspegia irekita dago, aldatu urteko ikuspegira\",\"fielderror.screenreader.text\":\"Errorea\",\"fieldlabel.optional.text\":\"Aukerakoa\",\"fieldlabel.required.text\":\"Beharrezkoa\",\"filters.clear.label\":\"Garbitu iragazkiak\",\"filters.submit.label\":\"Bidali\",\"filters.filter.any\":\"Edozein\",\"filters.filter.clear\":\"Garbitu iragazkia\",\"filters.filters.arialabel\":\"Iragazkiak\",\"filters.menuitem.any\":\"Edozein {{label}}\",\"filters.menuitem.selected\":\"{{selected}} hautatuta\",\"filters.search.label\":\"Bilatu\",\"fileupload.button.text\":\"Gehitu fitxategiak\",\"fileupload.prompt.text\":\"Arrastatu eta jaregin fitxategiak hemen, edo egin klik fitxategiak gehitzeko\",\"fileupload.removefile.text\":\"Kendu fitxategia\",\"passwordfield.icon.label.hide\":\"Ezkutatu pasahitza\",\"passwordfield.icon.label.show\":\"Erakutsi pasahitza\",\"severity.error\":\"errorea\",\"severity.info\":\"informazioa\",\"severity.success\":\"eginda\",\"severity.warning\":\"abisua\",\"sidenav.toggle.expand\":\"Ireki nabigazioa\",\"sidenav.toggle.collapse\":\"Itxi nabigazioa\",\"switch.active\":\"Aktibo\",\"switch.inactive\":\"Inaktibo\",\"table.columnvisibility.arialabel\":\"Erakutsi/Ezkutatu zutabeak\",\"table.density.arialabel\":\"Taularen dentsitatea\",\"table.draghandle.arialabel\":\"Arrastatu errenkada berrantolatzeko. Edo sakatu zuriune-barra edo Sartu tekla berrantolaketa hasteko eta gelditzeko, eta Ihes tekla bertan behera uzteko.\",\"table.draghandle.tooltip\":\"Arrastatu errenkada edo sakatu zuriune-barra/Sartu tekla berrantolaketa hasteko eta gelditzeko\",\"table.actions\":\"Ekintzak\",\"table.error\":\"Errorea datuak kargatzean.\",\"table.fetchedrows.text\":\"{{totalRows}} errenkada eskuratu da\",\"table.fetchedrows.text_plural\":\"{{totalRows}} errenkada eskuratu dira guztira\",\"table.moreactions.arialabel\":\"Ekintza gehiago\",\"table.noresults.heading\":\"Ez dago emaitzarik.\",\"table.noresults.text\":\"Saiatu beste kontsulta bat egiten.\",\"table.reorder.backward\":\"Bidali atzera\",\"table.reorder.forward\":\"Ekarri aurrera\",\"table.reorder.toback\":\"Bidali atzera\",\"table.reorder.tofront\":\"Ekarri aurrera\",\"table.rows.text\":\"{{totalRows}} errenkada\",\"table.rows.text_plural\":\"{{totalRows}} errenkada\",\"pagination.label\":\"Orri-kopurua\",\"pagination.loadmore\":\"Erakutsi gehiago\",\"pagination.next\":\"Hurrengo orria\",\"pagination.previous\":\"Aurreko orria\",\"pagination.page\":\"Orria\",\"pagination.rowsperpage\":\"Errenkadak orriko\",\"pagination.rowswithtotal\":\"{{firstRow}}-{{lastRow}} errenkadak (guztira, {{totalRows}})\",\"pagination.rowswithouttotal\":\"{{firstRow}}-{{lastRow}} errenkadak\",\"pagination.totalrows\":\"{{totalRows}} errenkada\",\"table.actions.selectall\":\"Hautatu guztiak\",\"table.actions.selectnone\":\"Ez hautatu bat ere ez\",\"table.actions.selectsome\":\"{{selectedRowCount}} hautatuta\",\"table.rowexpansion.expand\":\"Zabaldu\",\"table.rowexpansion.expandall\":\"Zabaldu guztiak\",\"table.rowexpansion.collapse\":\"Tolestu\",\"table.rowexpansion.collapseall\":\"Tolestu guztiak\",\"dataview.layout.table\":\"Taula\",\"dataview.layout.grid\":\"Sareta\",\"dataview.layout.list\":\"Zerrenda\",\"topnav.helpicon\":\"laguntza-orria\",\"topnav.settingsicon\":\"ezarpenen orria\"};"],"mappings":"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","ignoreList":[]}
|