@mrshmllw/smores-react 9.26.0 → 10.1.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/README.md CHANGED
@@ -166,6 +166,7 @@ yalc remove --all
166
166
  * [Tag](https://github.com/marshmallow-insurance/smores-react/tree/master/src/Tag)
167
167
  * [Text](https://github.com/marshmallow-insurance/smores-react/tree/master/src/Text)
168
168
  * [Textarea](https://github.com/marshmallow-insurance/smores-react/tree/master/src/Textarea)
169
+ * [TextDateOfBirthInput](https://github.com/marshmallow-insurance/smores-react/tree/master/src/TextDateOfBirthInput)
169
170
  * [TextInput](https://github.com/marshmallow-insurance/smores-react/tree/master/src/TextInput)
170
171
  * [Toggle](https://github.com/marshmallow-insurance/smores-react/tree/master/src/Toggle)
171
172
  * [Tooltip](https://github.com/marshmallow-insurance/smores-react/tree/master/src/Tooltip)
@@ -18,7 +18,8 @@ export const RowActions = ({ rowData, rowActions, expandable, isExpanded, toggle
18
18
  rowActions.actions?.map((action, actionIndex) => {
19
19
  if (!action.showCondition || action.showCondition(rowData)) {
20
20
  return (React.createElement(Wrapper, { flex: true, key: actionIndex },
21
- "element" in action && isReactElement(action.element) &&
21
+ 'element' in action &&
22
+ isReactElement(action.element) &&
22
23
  React.cloneElement(action.element, {
23
24
  onClick: async (e) => {
24
25
  await handleAction(e, action.onClick);
@@ -26,11 +27,12 @@ export const RowActions = ({ rowData, rowActions, expandable, isExpanded, toggle
26
27
  tabIndex: 0,
27
28
  className: 'reactElementRowAction',
28
29
  }),
29
- !("element" in action) && action.genericButton && (React.createElement(Button, { ...action.genericButton, handleClick: async (e) => {
30
+ !('element' in action) && action.genericButton && (React.createElement(Button, { ...action.genericButton, handleClick: async (e) => {
30
31
  await handleAction(e, action.onClick);
31
32
  } }, action.genericButton.children)),
32
- !("element" in action) && action.iconButton &&
33
- (action.iconButton?.tooltipText ? (React.createElement(Tooltip, { content: action.iconButton.tooltipText, position: 'bottom', tooltipColor: 'bubblegum' },
33
+ !('element' in action) &&
34
+ action.iconButton &&
35
+ (action.iconButton?.tooltipText ? (React.createElement(Tooltip, { content: action.iconButton.tooltipText, position: 'bottom', variant: "bubblegum" },
34
36
  React.createElement(IconStrict, { ...action.iconButton, handleClick: async (e) => {
35
37
  await handleAction(e, action.onClick);
36
38
  } }))) : (React.createElement(IconStrict, { ...action.iconButton, handleClick: async (e) => {
@@ -1 +1 @@
1
- {"version":3,"file":"RowActions.js","sourceRoot":"","sources":["../../../src/Table/components/RowActions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAA;AACxC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAmB,EAC3C,OAAO,EACP,UAAU,EACV,UAAU,EACV,UAAU,EACV,eAAe,GACI,EAAE,EAAE;IACvB,MAAM,YAAY,GAAG,KAAK,EACxB,CAA4C,EAC5C,MAA4C,EAC5C,EAAE;QACF,CAAC,CAAC,eAAe,EAAE,CAAA;QACnB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAA;IACvB,CAAC,CAAA;IAED,OAAO,CACL,oBAAC,UAAU,mBACI,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,wBACnC,UAAU,EAAE,OAAO;QAEvC,oBAAC,GAAG,IAAC,IAAI,QAAC,UAAU,EAAC,QAAQ,EAAC,cAAc,EAAC,UAAU;YACpD,UAAU;gBACT,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;oBAC9C,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC3D,OAAO,CACL,oBAAC,OAAO,IAAC,IAAI,QAAC,GAAG,EAAE,WAAW;4BAC3B,SAAS,IAAI,MAAM,IAAI,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC;gCACpD,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE;oCACjC,OAAO,EAAE,KAAK,EAAE,CAAa,EAAE,EAAE;wCAC/B,MAAM,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;oCACvC,CAAC;oCACD,QAAQ,EAAE,CAAC;oCACX,SAAS,EAAE,uBAAuB;iCACnC,CAAC;4BACH,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC,aAAa,IAAI,CACjD,oBAAC,MAAM,OACD,MAAM,CAAC,aAAa,EACxB,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;oCACvB,MAAM,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;gCACvC,CAAC,IAEA,MAAM,CAAC,aAAa,CAAC,QAAQ,CACvB,CACV;4BACA,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC,UAAU;gCAC1C,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,CAChC,oBAAC,OAAO,IACN,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,EACtC,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,WAAW;oCAEzB,oBAAC,UAAU,OACL,MAAM,CAAC,UAAU,EACrB,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;4CACvB,MAAM,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;wCACvC,CAAC,GACD,CACM,CACX,CAAC,CAAC,CAAC,CACF,oBAAC,UAAU,OACL,MAAM,CAAC,UAAU,EACrB,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;wCACvB,MAAM,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;oCACvC,CAAC,GACD,CACH,CAAC,CACI,CACX,CAAA;oBACH,CAAC;oBACD,OAAO,IAAI,CAAA;gBACb,CAAC,CAAC;YACH,UAAU,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CACpC,oBAAC,SAAS,IACR,MAAM,EAAC,OAAO,EACd,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;oBACjB,CAAC,CAAC,eAAe,EAAE,CAAA;oBACnB,eAAe,EAAE,CAAA;gBACnB,CAAC,EACD,IAAI,EAAE,EAAE,aACC,UAAU,EACnB,eAAe,EAAC,OAAO,GACvB,CACH,CACG,CACK,CACd,CAAA;AACH,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;;;;;;;;;;MAUrB,iBAAiB;;CAEtB,CAAA;AAED,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,CAClC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;iBACF,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc;;GAExD,CACF,CAAA"}
1
+ {"version":3,"file":"RowActions.js","sourceRoot":"","sources":["../../../src/Table/components/RowActions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoB,MAAM,OAAO,CAAA;AACxC,OAAO,MAAM,MAAM,mBAAmB,CAAA;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAC/B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AAEvC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAmB,EAC3C,OAAO,EACP,UAAU,EACV,UAAU,EACV,UAAU,EACV,eAAe,GACI,EAAE,EAAE;IACvB,MAAM,YAAY,GAAG,KAAK,EACxB,CAA4C,EAC5C,MAA4C,EAC5C,EAAE;QACF,CAAC,CAAC,eAAe,EAAE,CAAA;QACnB,MAAM,MAAM,CAAC,OAAO,CAAC,CAAA;IACvB,CAAC,CAAA;IAED,OAAO,CACL,oBAAC,UAAU,mBACI,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,wBACnC,UAAU,EAAE,OAAO;QAEvC,oBAAC,GAAG,IAAC,IAAI,QAAC,UAAU,EAAC,QAAQ,EAAC,cAAc,EAAC,UAAU;YACpD,UAAU;gBACT,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;oBAC9C,IAAI,CAAC,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC3D,OAAO,CACL,oBAAC,OAAO,IAAC,IAAI,QAAC,GAAG,EAAE,WAAW;4BAC3B,SAAS,IAAI,MAAM;gCAClB,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC;gCAC9B,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE;oCACjC,OAAO,EAAE,KAAK,EAAE,CAAa,EAAE,EAAE;wCAC/B,MAAM,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;oCACvC,CAAC;oCACD,QAAQ,EAAE,CAAC;oCACX,SAAS,EAAE,uBAAuB;iCACnC,CAAC;4BACH,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC,aAAa,IAAI,CACjD,oBAAC,MAAM,OACD,MAAM,CAAC,aAAa,EACxB,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;oCACvB,MAAM,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;gCACvC,CAAC,IAEA,MAAM,CAAC,aAAa,CAAC,QAAQ,CACvB,CACV;4BACA,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC;gCACrB,MAAM,CAAC,UAAU;gCACjB,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,CAChC,oBAAC,OAAO,IACN,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,WAAW,EACtC,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAC,WAAW;oCAEnB,oBAAC,UAAU,OACL,MAAM,CAAC,UAAU,EACrB,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;4CACvB,MAAM,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;wCACvC,CAAC,GACD,CACM,CACX,CAAC,CAAC,CAAC,CACF,oBAAC,UAAU,OACL,MAAM,CAAC,UAAU,EACrB,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;wCACvB,MAAM,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;oCACvC,CAAC,GACD,CACH,CAAC,CACI,CACX,CAAA;oBACH,CAAC;oBACD,OAAO,IAAI,CAAA;gBACb,CAAC,CAAC;YACH,UAAU,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CACpC,oBAAC,SAAS,IACR,MAAM,EAAC,OAAO,EACd,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;oBACjB,CAAC,CAAC,eAAe,EAAE,CAAA;oBACnB,eAAe,EAAE,CAAA;gBACnB,CAAC,EACD,IAAI,EAAE,EAAE,aACC,UAAU,EACnB,eAAe,EAAC,OAAO,GACvB,CACH,CACG,CACK,CACd,CAAA;AACH,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;;;;;;;;;;MAUrB,iBAAiB;;CAEtB,CAAA;AAED,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,CAClC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;iBACF,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,cAAc;;GAExD,CACF,CAAA"}
@@ -0,0 +1,36 @@
1
+ import React from 'react';
2
+ import { FieldsetProps } from '../fields/Fieldset';
3
+ export type DateObject = {
4
+ day?: string | null;
5
+ month?: string | null;
6
+ year?: string | null;
7
+ };
8
+ export type TextDateOfBirthInputProps = {
9
+ value: DateObject;
10
+ onChange: (value: DateObject) => void;
11
+ showCompleted?: boolean;
12
+ hookformError?: {
13
+ type: string;
14
+ message?: string;
15
+ };
16
+ dataTestId?: string;
17
+ } & Pick<FieldsetProps, 'label' | 'assistiveText'>;
18
+ /**
19
+ * Renders a set of input fields to collect a date of birth as separate day, month,
20
+ * and year fields.
21
+ *
22
+ * ### Date of birth input validations
23
+ * - All fields are present and correctly formatted.
24
+ * - The age is at least 17 years old.
25
+ * - The year is not before 1900.
26
+ */
27
+ export declare const TextDateOfBirthInput: React.ForwardRefExoticComponent<{
28
+ value: DateObject;
29
+ onChange: (value: DateObject) => void;
30
+ showCompleted?: boolean;
31
+ hookformError?: {
32
+ type: string;
33
+ message?: string;
34
+ };
35
+ dataTestId?: string;
36
+ } & Pick<FieldsetProps, "label" | "assistiveText"> & React.RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,48 @@
1
+ import React, { forwardRef } from 'react';
2
+ import styled from 'styled-components';
3
+ import { Box } from '../Box';
4
+ import { Fieldset } from '../fields/Fieldset';
5
+ import { TextInput } from '../TextInput';
6
+ import { InputValidationError } from '../utils/dateOfBirth/schema';
7
+ /**
8
+ * Renders a set of input fields to collect a date of birth as separate day, month,
9
+ * and year fields.
10
+ *
11
+ * ### Date of birth input validations
12
+ * - All fields are present and correctly formatted.
13
+ * - The age is at least 17 years old.
14
+ * - The year is not before 1900.
15
+ */
16
+ export const TextDateOfBirthInput = forwardRef(function TextDateOfBirthInput({ onChange, value, label, assistiveText, hookformError, showCompleted = false, dataTestId, }, ref) {
17
+ const inputValidationErrorValues = Object.values(InputValidationError);
18
+ return (React.createElement(Fieldset, { label: label, assistiveText: assistiveText, completed: showCompleted && Boolean(value.day && value.month && value.year), error: Boolean(hookformError), errorMsg: hookformError?.message, "data-testid": dataTestId },
19
+ React.createElement(Box, { flex: true, gap: "16px" },
20
+ React.createElement(SetWidthTextInput, { ref: ref, label: "day", autoCompleteAttr: "bday-day", inputModeAttr: "numeric", "$width": 60, value: value.day || '', placeholder: "", onChange: (day) => {
21
+ onChange({
22
+ ...value,
23
+ day,
24
+ });
25
+ }, error: Boolean(hookformError?.type?.includes('day') ||
26
+ (hookformError?.type &&
27
+ inputValidationErrorValues.includes(hookformError.type))) }),
28
+ React.createElement(SetWidthTextInput, { label: "month", autoCompleteAttr: "bday-month", inputModeAttr: "numeric", "$width": 60, value: value.month || '', placeholder: "", onChange: (month) => {
29
+ onChange({
30
+ ...value,
31
+ month,
32
+ });
33
+ }, error: Boolean(hookformError?.type?.includes('month') ||
34
+ (hookformError?.type &&
35
+ inputValidationErrorValues.includes(hookformError.type))) }),
36
+ React.createElement(SetWidthTextInput, { label: "year", autoCompleteAttr: "bday-year", inputModeAttr: "numeric", "$width": 80, value: value.year || '', placeholder: "", onChange: (year) => {
37
+ onChange({
38
+ ...value,
39
+ year,
40
+ });
41
+ }, error: Boolean(hookformError?.type?.includes('year') ||
42
+ (hookformError?.type &&
43
+ inputValidationErrorValues.includes(hookformError.type))) }))));
44
+ });
45
+ const SetWidthTextInput = styled(TextInput) `
46
+ width: ${({ $width }) => `${$width}px`};
47
+ `;
48
+ //# sourceMappingURL=TextDateOfBirthInput.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextDateOfBirthInput.js","sourceRoot":"","sources":["../../src/TextDateOfBirthInput/TextDateOfBirthInput.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from './TextDateOfBirthInput';
@@ -0,0 +1,2 @@
1
+ export * from './TextDateOfBirthInput';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/TextDateOfBirthInput/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAA"}
@@ -1,28 +1,33 @@
1
1
  import React, { FC, ReactNode } from 'react';
2
- import { Color } from '../theme';
3
- type Position = 'top' | 'bottom' | 'left' | 'right';
4
- type ArrowPosition = Position | 'center';
2
+ import { type Side } from '@floating-ui/react';
5
3
  export interface TooltipProps {
6
4
  children: ReactNode;
7
5
  content: string | ReactNode;
8
- position: Position;
6
+ position?: Side;
9
7
  maxWidth?: number;
10
8
  title?: string;
11
9
  underline?: boolean;
12
- fallbackStyle?: boolean;
13
- zIndex?: number;
14
- portalContainer?: Element | DocumentFragment;
15
- tooltipColor?: Color;
10
+ variant?: TooltipVariant;
11
+ portalContainer?: HTMLElement | null | React.MutableRefObject<HTMLElement | null>;
12
+ /**
13
+ * If true, the tooltip will position itself inline its children
14
+ *
15
+ * Used for inline content like blocks of text that span multiple lines
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * <Text>
20
+ * Marshmallow car insurance, the best insurance in town.
21
+ * <Tooltip inline content="Tooltip content">Hover here</Tooltip>
22
+ * to learn more as the Policy Holder
23
+ * </Text>
24
+ * ```
25
+ */
26
+ inline?: boolean;
16
27
  }
28
+ export type TooltipVariant = 'primary' | 'fallback' | 'bubblegum';
17
29
  export declare const Tooltip: FC<TooltipProps>;
18
- export declare const Container: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, never>> & string;
19
30
  export declare const Tip: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components/dist/types").Substitute<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {
20
- $showTip: boolean;
21
- $position: Position;
22
- $arrowPosition: ArrowPosition;
23
31
  $maxWidth?: number;
24
- $fallbackStyle?: boolean;
25
- $zIndex: number;
26
- $background?: Color;
32
+ $background: string;
27
33
  }>> & string;
28
- export {};
@@ -1,262 +1,86 @@
1
- import React, { useCallback, useEffect, useRef, useState, } from 'react';
2
- import { createPortal } from 'react-dom';
1
+ import React, { useRef, useState } from 'react';
3
2
  import styled, { css } from 'styled-components';
4
3
  import { Box } from '../Box';
5
4
  import { Text } from '../Text';
6
- import { useEventListener } from '../hooks';
7
5
  import { theme } from '../theme';
8
- import { debounce } from '../utils/debounce';
9
- export const Tooltip = ({ children, title, content, position = 'top', maxWidth = 500, underline = false, fallbackStyle = false, zIndex = 10, portalContainer = document.body, tooltipColor, }) => {
10
- const documentRef = useRef(document);
11
- const tipContainer = useRef(null);
6
+ import { autoUpdate, flip, FloatingPortal, offset, shift, useDismiss, useFloating, useFocus, useHover, useInteractions, useRole, arrow, FloatingArrow, inline, } from '@floating-ui/react';
7
+ const tooltipVariants = {
8
+ primary: {
9
+ textColor: 'liquorice',
10
+ bgColor: 'custard',
11
+ },
12
+ fallback: {
13
+ textColor: 'cream',
14
+ bgColor: 'feijoa',
15
+ },
16
+ bubblegum: {
17
+ textColor: 'liquorice',
18
+ bgColor: 'bubblegum',
19
+ },
20
+ };
21
+ const ARROW_HEIGHT = 8;
22
+ const GAP = 4;
23
+ export const Tooltip = ({ children, title, content, position, maxWidth = 500, underline = false, portalContainer, inline: inlineProp, variant = 'primary', }) => {
12
24
  const [showTip, setShowTip] = useState(false);
13
- const [tooltipPosition, setTooltipPosition] = useState(position);
14
- const [childEl, setChildEl] = useState(null);
15
- const [tooltipCoords, setTooltipCoords] = useState({ top: 0, left: 0 });
25
+ const arrowRef = useRef(null);
26
+ const variantValue = tooltipVariants[variant];
16
27
  const randomId = crypto.randomUUID();
17
- const checkInbounds = (element) => element.top >= 0 &&
18
- element.left >= 0 &&
19
- element.bottom <= window.innerHeight &&
20
- element.right <= window.innerWidth;
21
- const handleTipViewport = useCallback(() => {
22
- const dimensions = tipContainer.current?.getBoundingClientRect();
23
- if (!dimensions)
24
- return;
25
- if (checkInbounds(dimensions))
26
- return;
27
- // If in bounds but not defaulted to top; default
28
- if (dimensions.top >= 0 && tooltipPosition !== 'top') {
29
- setTooltipPosition('top');
30
- return;
31
- }
32
- // if top out of bounds
33
- if (dimensions.top < 0) {
34
- setTooltipPosition('bottom');
35
- return;
36
- }
37
- // if right out of bounds
38
- if (dimensions.right > window.innerWidth) {
39
- setTooltipPosition('left');
40
- return;
41
- }
42
- // if left out of bounds
43
- if (dimensions.left < 0) {
44
- setTooltipPosition('right');
45
- return;
46
- }
47
- // If bottom out of bounds
48
- if (dimensions.bottom > window.innerHeight) {
49
- setTooltipPosition('top');
50
- return;
51
- }
52
- }, [tipContainer, tooltipPosition]);
53
- useEffect(() => {
54
- handleTipViewport();
55
- setChildEl(document.getElementById(randomId));
56
- }, []);
57
- useEffect(() => {
58
- setTooltipPosition(position);
59
- }, [position]);
60
- const arrowSize = 18;
61
- const calculateTooltipPosition = () => {
62
- if (!childEl)
63
- return { top: 0, left: 0 };
64
- if (!tipContainer.current)
65
- return { top: 0, left: 0 };
66
- const childPosition = childEl.getBoundingClientRect();
67
- const tipDimensions = tipContainer.current.getBoundingClientRect();
68
- let top = 0;
69
- let left = 0;
70
- switch (tooltipPosition) {
71
- case 'top':
72
- top =
73
- childPosition.top + window.scrollY - tipDimensions.height - arrowSize;
74
- left =
75
- childPosition.left +
76
- window.scrollX +
77
- childPosition.width / 2 -
78
- tipDimensions.width / 2;
79
- break;
80
- case 'bottom':
81
- top = childPosition.bottom + window.scrollY + arrowSize;
82
- left =
83
- childPosition.left +
84
- window.scrollX +
85
- childPosition.width / 2 -
86
- tipDimensions.width / 2;
87
- break;
88
- case 'left':
89
- left =
90
- childPosition.left + window.scrollX - tipDimensions.width - arrowSize;
91
- top =
92
- childPosition.top +
93
- window.scrollY +
94
- childPosition.height / 2 -
95
- tipDimensions.height / 2;
96
- break;
97
- case 'right':
98
- left = childPosition.right + window.scrollX + arrowSize;
99
- top =
100
- childPosition.top +
101
- window.scrollY +
102
- childPosition.height / 2 -
103
- tipDimensions.height / 2;
104
- break;
105
- default:
106
- break;
107
- }
108
- return { top, left };
109
- };
110
- useEffect(() => {
111
- if (childEl) {
112
- setTooltipCoords(calculateTooltipPosition());
113
- }
114
- }, [
115
- position,
116
- window.scrollY,
117
- tipContainer.current,
118
- childEl,
119
- childEl?.getBoundingClientRect().top,
120
- childEl?.getBoundingClientRect().left,
121
- ]);
122
- useEventListener({
123
- eventName: 'resize',
124
- callback: debounce(handleTipViewport, 100),
125
- ref: documentRef,
126
- });
127
- useEventListener({
128
- eventName: 'scroll',
129
- callback: debounce(handleTipViewport, 100),
130
- ref: documentRef,
28
+ const { refs, floatingStyles, context } = useFloating({
29
+ open: showTip,
30
+ placement: position,
31
+ onOpenChange: setShowTip,
32
+ middleware: [
33
+ offset(ARROW_HEIGHT + GAP),
34
+ flip(),
35
+ shift(),
36
+ inlineProp ? inline() : undefined,
37
+ arrow({ element: arrowRef, padding: 14 }),
38
+ ],
39
+ whileElementsMounted: autoUpdate,
131
40
  });
132
- return (React.createElement(Container, null,
133
- React.createElement(UnderlinedChild, { id: randomId, "$underline": underline, onMouseEnter: () => setShowTip(true), onMouseLeave: () => setShowTip(false) }, children),
134
- childEl &&
135
- createPortal(React.createElement(Tip, { className: "tooltip", "$showTip": showTip, "$position": position, "$arrowPosition": tooltipPosition, ref: tipContainer, "$maxWidth": maxWidth, "$fallbackStyle": fallbackStyle, "$zIndex": zIndex, "$background": tooltipColor, style: {
136
- position: 'absolute',
137
- top: `${tooltipCoords.top}px`,
138
- left: `${tooltipCoords.left}px`,
139
- } },
140
- title && (React.createElement(Text, { tag: "h5", typo: "desc-medium", color: fallbackStyle ? 'cream' : 'liquorice' }, title)),
141
- (typeof content === 'string' && (React.createElement(Text, { typo: "desc-light", color: fallbackStyle ? 'cream' : 'liquorice' }, content))) ||
142
- content), portalContainer)));
41
+ const hover = useHover(context, { move: false });
42
+ const focus = useFocus(context);
43
+ const dismiss = useDismiss(context);
44
+ const role = useRole(context, { role: 'tooltip' });
45
+ // Merge all the interactions into prop getters
46
+ const { getReferenceProps, getFloatingProps } = useInteractions([
47
+ hover,
48
+ focus,
49
+ dismiss,
50
+ role,
51
+ ]);
52
+ return (React.createElement(React.Fragment, null,
53
+ React.createElement(UnderlinedChild, { id: randomId, "$underline": underline, ref: refs.setReference, ...getReferenceProps() }, children),
54
+ showTip && (React.createElement(FloatingPortal, { root: portalContainer },
55
+ React.createElement(Tip, { ref: refs.setFloating, className: "tooltip", "$maxWidth": maxWidth, "$background": theme.colors[variantValue.bgColor], style: floatingStyles, ...getFloatingProps() },
56
+ React.createElement(FloatingArrow, { ref: arrowRef, context: context, fill: theme.colors[variantValue.bgColor] }),
57
+ title && (React.createElement(Text, { tag: "h5", typo: "desc-medium", color: variantValue.textColor }, title)),
58
+ (typeof content === 'string' && (React.createElement(Text, { typo: "desc-light", color: variantValue.textColor }, content))) ||
59
+ content)))));
143
60
  };
144
- export const Container = styled.div `
145
- display: flex;
146
- align-items: center;
147
- justify-content: center;
148
-
149
- > span:hover + .tooltip {
150
- opacity: 1;
151
- }
152
- `;
153
61
  const UnderlinedChild = styled(Box) `
154
62
  cursor: pointer;
63
+ width: fit-content;
64
+ display: inline;
65
+
155
66
  ${({ $underline }) => $underline &&
156
67
  css `
157
68
  border-bottom: 1px dashed ${theme.colors.marshmallowPink};
158
69
  `}
159
70
  `;
160
- const arrowInset = 26;
161
- const arrowCenterPosition = 'calc(50% - 6px)';
162
- const arrowVerticalCenter = 'calc(50% - 12px)';
163
- const handleHorizontalArrowPosition = (arrowPosition) => {
164
- switch (arrowPosition) {
165
- case 'left':
166
- return css `
167
- left: ${arrowInset}px;
168
- `;
169
- case 'right':
170
- return css `
171
- right: ${arrowInset}px;
172
- `;
173
- default:
174
- return css `
175
- left: ${arrowCenterPosition};
176
- `;
177
- }
178
- };
179
- const handleVerticalArrowPosition = (arrowPosition) => {
180
- switch (arrowPosition) {
181
- case 'top':
182
- return css `
183
- top: ${arrowInset}px;
184
- `;
185
- case 'bottom':
186
- return css `
187
- bottom: ${arrowInset}px;
188
- `;
189
- default:
190
- return css `
191
- top: ${arrowVerticalCenter};
192
- `;
193
- }
194
- };
195
- const top = css `
196
- &:before {
197
- bottom: -15px;
198
- transform: rotate(-90deg);
199
- ${({ $arrowPosition }) => handleHorizontalArrowPosition($arrowPosition)}
200
- }
201
- `;
202
- const bottom = css `
203
- &:before {
204
- top: -15px;
205
- transform: rotate(90deg);
206
- ${({ $arrowPosition }) => handleHorizontalArrowPosition($arrowPosition)}
207
- }
208
- `;
209
- const left = css `
210
- &:before {
211
- right: -11px;
212
- transform: rotate(180deg);
213
- ${({ $arrowPosition }) => handleVerticalArrowPosition($arrowPosition)}
214
- }
215
- `;
216
- const right = css `
217
- &:before {
218
- left: -11px;
219
- ${({ $arrowPosition }) => handleVerticalArrowPosition($arrowPosition)}
220
- }
221
- `;
222
71
  export const Tip = styled.div `
223
72
  position: absolute;
224
73
  margin: auto;
225
- background: ${({ $background }) => $background ? theme.colors[$background] : theme.colors.custard};
74
+ z-index: 1000;
75
+ background: ${({ $background }) => $background};
226
76
  padding: 16px 12px 20px;
227
77
  border-radius: 16px;
228
78
  max-width: 450px;
229
- opacity: ${({ $showTip }) => ($showTip ? '1' : '0')};
230
- transition: opacity 0.2s ease-in-out;
231
79
  pointer-events: none;
232
80
  cursor: default;
233
- z-index: ${({ $zIndex }) => ($zIndex ? $zIndex : '10')};
234
81
 
235
82
  // this is the trick that will make sure the content can go up to maxWidth
236
83
  margin-right: ${({ $maxWidth }) => $maxWidth && -$maxWidth / 2 + 'px'};
237
84
  max-width: ${({ $maxWidth }) => $maxWidth && $maxWidth + 'px'};
238
-
239
- ${({ $arrowPosition }) => $arrowPosition === 'top' && top}
240
- ${({ $arrowPosition }) => $arrowPosition === 'bottom' && bottom}
241
- ${({ $arrowPosition }) => $arrowPosition === 'left' && left}
242
- ${({ $arrowPosition }) => $arrowPosition === 'right' && right}
243
-
244
- &:before {
245
- content: '';
246
- border-style: solid;
247
- border-width: 12px 12px 12px 0;
248
- border-color: transparent
249
- ${({ $background }) => $background ? theme.colors[$background] : theme.colors.custard}
250
- transparent transparent;
251
- position: absolute;
252
- }
253
-
254
- ${({ $fallbackStyle }) => $fallbackStyle &&
255
- css `
256
- background: ${theme.colors.feijoa};
257
- &:before {
258
- border-color: transparent ${theme.colors.feijoa} transparent transparent;
259
- }
260
- `};
261
85
  `;
262
86
  //# sourceMappingURL=Tooltip.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../src/Tooltip/Tooltip.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../src/Tooltip/Tooltip.tsx"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -42,8 +42,11 @@ export * from './Table';
42
42
  export * from './Tag';
43
43
  export * from './Text';
44
44
  export * from './Textarea';
45
+ export * from './TextDateOfBirthInput';
45
46
  export * from './TextInput';
46
47
  export * from './theme';
47
48
  export * from './Toggle';
48
49
  export * from './Tooltip';
49
50
  export * from './utils/space';
51
+ export * from './utils/dateOfBirth/dateOfBirthValidator';
52
+ export * from './utils/dateOfBirth/schema';
package/dist/index.js CHANGED
@@ -42,9 +42,12 @@ export * from './Table';
42
42
  export * from './Tag';
43
43
  export * from './Text';
44
44
  export * from './Textarea';
45
+ export * from './TextDateOfBirthInput';
45
46
  export * from './TextInput';
46
47
  export * from './theme';
47
48
  export * from './Toggle';
48
49
  export * from './Tooltip';
49
50
  export * from './utils/space';
51
+ export * from './utils/dateOfBirth/dateOfBirthValidator';
52
+ export * from './utils/dateOfBirth/schema';
50
53
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,OAAO,CAAA;AACrB,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,QAAQ,CAAA;AACtB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,OAAO,CAAA;AACrB,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA;AACrB,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,kBAAkB,CAAA;AAChC,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,OAAO,CAAA;AACrB,cAAc,aAAa,CAAA;AAC3B,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,QAAQ,CAAA;AACtB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,cAAc,CAAA;AAC5B,cAAc,WAAW,CAAA;AACzB,cAAc,YAAY,CAAA;AAC1B,cAAc,SAAS,CAAA;AACvB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,cAAc,CAAA;AAC5B,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,QAAQ,CAAA;AACtB,cAAc,UAAU,CAAA;AACxB,cAAc,QAAQ,CAAA;AACtB,cAAc,SAAS,CAAA;AACvB,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,OAAO,CAAA;AACrB,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,kBAAkB,CAAA;AAChC,cAAc,SAAS,CAAA;AACvB,cAAc,OAAO,CAAA;AACrB,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,wBAAwB,CAAA;AACtC,cAAc,aAAa,CAAA;AAC3B,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA;AACzB,cAAc,eAAe,CAAA;AAC7B,cAAc,0CAA0C,CAAA;AACxD,cAAc,4BAA4B,CAAA"}
@@ -0,0 +1,11 @@
1
+ import { FieldValidationError, InputValidationError } from './schema';
2
+ import { DateObject } from 'TextDateOfBirthInput';
3
+ export declare const dateOfBirthValidator: (dateObject: DateObject) => {
4
+ error: FieldValidationError;
5
+ fields?: string[];
6
+ } | {
7
+ error: InputValidationError;
8
+ fields?: string[];
9
+ } | {
10
+ isSuccess: boolean;
11
+ };
@@ -0,0 +1,29 @@
1
+ import { isValid, parse } from 'date-fns';
2
+ import { error, getImpossibleFields, getInvalidInputFields, getMissingFields, is17YearsOld, } from './dateOfBirthValidator.utils';
3
+ import { FieldValidationError, InputValidationError } from './schema';
4
+ export const dateOfBirthValidator = (dateObject) => {
5
+ const invalidFields = getInvalidInputFields(dateObject);
6
+ if (invalidFields.length !== 0) {
7
+ return error(FieldValidationError.InvalidInputValueError, invalidFields);
8
+ }
9
+ const missingFields = getMissingFields(dateObject);
10
+ if (missingFields.length !== 0) {
11
+ return error(FieldValidationError.MissingFieldError, missingFields);
12
+ }
13
+ const impossibleValues = getImpossibleFields(dateObject);
14
+ if (impossibleValues.length !== 0) {
15
+ return error(FieldValidationError.ImpossibleFieldValueError, impossibleValues);
16
+ }
17
+ const date = parse(`${dateObject.year}-${dateObject.month}-${dateObject.day}`, 'yyyy-MM-dd', new Date());
18
+ if (isValid(date)) {
19
+ if (!is17YearsOld(date)) {
20
+ return error(InputValidationError.YoungerThan17);
21
+ }
22
+ if (date.getFullYear() < 1900) {
23
+ return error(InputValidationError.DateBefore1900Error);
24
+ }
25
+ return { isSuccess: true };
26
+ }
27
+ return error(InputValidationError.RealDateError);
28
+ };
29
+ //# sourceMappingURL=dateOfBirthValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateOfBirthValidator.js","sourceRoot":"","sources":["../../../src/utils/dateOfBirth/dateOfBirthValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAEzC,OAAO,EACL,KAAK,EACL,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,EAChB,YAAY,GACb,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAIrE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,UAAsB,EAAE,EAAE;IAC7D,MAAM,aAAa,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAA;IAEvD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,oBAAoB,CAAC,sBAAsB,EAAE,aAAa,CAAC,CAAA;IAC1E,CAAC;IAED,MAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAA;IAElD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,aAAa,CAAC,CAAA;IACrE,CAAC;IAED,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAA;IAExD,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,OAAO,KAAK,CACV,oBAAoB,CAAC,yBAAyB,EAC9C,gBAAgB,CACjB,CAAA;IACH,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAChB,GAAG,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,GAAG,EAAE,EAC1D,YAAY,EACZ,IAAI,IAAI,EAAE,CACX,CAAA;IAED,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO,KAAK,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAA;QAClD,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,EAAE,CAAC;YAC9B,OAAO,KAAK,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,CAAA;QACxD,CAAC;QACD,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAA;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAA;AAClD,CAAC,CAAA"}
@@ -0,0 +1,18 @@
1
+ import { DateObject } from 'TextDateOfBirthInput';
2
+ declare const dateFields: readonly ["day", "month", "year"];
3
+ export declare const monthsArray: string[];
4
+ export declare const validators: Record<(typeof dateFields)[number], (dateField: string | undefined | null) => boolean>;
5
+ export declare const isAllowedValue: (value: string | null | undefined) => boolean;
6
+ export declare const getInvalidInputFields: (dateObject: DateObject) => ("month" | "day" | "year")[];
7
+ export declare const getMissingFields: (dateObject: DateObject) => ("month" | "day" | "year")[];
8
+ export declare const getImpossibleFields: (dateObject: DateObject) => ("month" | "day" | "year")[];
9
+ export declare const humanReadableJoin: (arr: string[]) => string;
10
+ export declare const createMissingFieldErrorMessage: (missingFields: string[]) => string;
11
+ export declare const createImpossibleFieldErrorMessage: (impossibleFields: string[]) => string;
12
+ export declare const createYoungerThan17ErrorMessage: () => string;
13
+ export declare const error: <T>(type: T, fields?: string[]) => {
14
+ error: T;
15
+ fields?: string[];
16
+ };
17
+ export declare const is17YearsOld: (date: Date) => boolean;
18
+ export {};
@@ -0,0 +1,89 @@
1
+ import { isAfter, subYears } from 'date-fns';
2
+ const dateFields = ['day', 'month', 'year'];
3
+ export const monthsArray = [
4
+ 'January',
5
+ 'February',
6
+ 'March',
7
+ 'April',
8
+ 'May',
9
+ 'June',
10
+ 'July',
11
+ 'August',
12
+ 'September',
13
+ 'October',
14
+ 'November',
15
+ 'December',
16
+ ];
17
+ export const validators = {
18
+ day: (day) => {
19
+ const dayNumber = Number(day);
20
+ return Boolean(day && dayNumber >= 1 && dayNumber <= 31);
21
+ },
22
+ month: (month) => {
23
+ const monthNumber = Number(month);
24
+ return Boolean(month && monthNumber >= 1 && monthNumber <= 12);
25
+ },
26
+ year: (year) => {
27
+ const yearNumber = Number(year);
28
+ return Boolean(year && yearNumber && year.length === 4 && yearNumber > 0);
29
+ },
30
+ };
31
+ export const isAllowedValue = (value) => {
32
+ return value === null || (value && /^\d+$/.test(value)) || value === '';
33
+ };
34
+ export const getInvalidInputFields = (dateObject) => {
35
+ const invalidValues = dateFields.filter((field) => {
36
+ const value = dateObject[field];
37
+ return !isAllowedValue(value);
38
+ });
39
+ return invalidValues;
40
+ };
41
+ export const getMissingFields = (dateObject) => {
42
+ const missingFields = dateFields.filter((field) => {
43
+ return !dateObject[field];
44
+ });
45
+ return missingFields;
46
+ };
47
+ export const getImpossibleFields = (dateObject) => {
48
+ const impossibleValues = dateFields.filter((field) => {
49
+ return !validators[field](dateObject[field]);
50
+ });
51
+ return impossibleValues;
52
+ };
53
+ export const humanReadableJoin = (arr) => {
54
+ if (arr.length === 0) {
55
+ return '';
56
+ }
57
+ else if (arr.length === 1) {
58
+ return arr[0];
59
+ }
60
+ else if (arr.length === 2) {
61
+ return `${arr[0]} and ${arr[1]}`;
62
+ }
63
+ else {
64
+ const last = arr.pop();
65
+ return `${arr.join(', ')} and ${last}`;
66
+ }
67
+ };
68
+ export const createMissingFieldErrorMessage = (missingFields) => {
69
+ const beginning = 'Date of birth must include ';
70
+ const orderedMissingFields = ['day', 'month', 'year'].filter((field) => missingFields.includes(field));
71
+ return beginning + humanReadableJoin(orderedMissingFields);
72
+ };
73
+ export const createImpossibleFieldErrorMessage = (impossibleFields) => {
74
+ const beginning = 'Please enter a valid ';
75
+ const orderedImpossibleFields = ['day', 'month', 'year'].filter((field) => impossibleFields.includes(field));
76
+ return beginning + humanReadableJoin(orderedImpossibleFields);
77
+ };
78
+ export const createYoungerThan17ErrorMessage = () => {
79
+ const comparisonDate = subYears(new Date(), 17);
80
+ return `Please enter a date of birth on or before ${comparisonDate.getDate()} ${monthsArray[comparisonDate.getMonth()]} ${comparisonDate.getFullYear()}`;
81
+ };
82
+ export const error = (type, fields) => {
83
+ return { error: type, fields };
84
+ };
85
+ export const is17YearsOld = (date) => {
86
+ const comparisonDate = subYears(new Date(), 17);
87
+ return !isAfter(date, comparisonDate);
88
+ };
89
+ //# sourceMappingURL=dateOfBirthValidator.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateOfBirthValidator.utils.js","sourceRoot":"","sources":["../../../src/utils/dateOfBirth/dateOfBirthValidator.utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare enum InputValidationError {
2
+ RealDateError = "realDateError",
3
+ DateBefore1900Error = "dateBefore1900Error",
4
+ YoungerThan17 = "youngerThan17"
5
+ }
6
+ export declare enum FieldValidationError {
7
+ MissingFieldError = "missingFieldError",
8
+ InvalidInputValueError = "invalidInputValueError",
9
+ ImpossibleFieldValueError = "impossibleFieldValueError"
10
+ }
11
+ export declare const dateOfBirthErrorMessages: Record<InputValidationError | FieldValidationError, (value: string[]) => string>;
12
+ export declare const createErrorMessage: (errorKey: keyof typeof dateOfBirthErrorMessages, fields?: string[]) => string;
@@ -0,0 +1,28 @@
1
+ import { createImpossibleFieldErrorMessage, createMissingFieldErrorMessage, createYoungerThan17ErrorMessage, } from './dateOfBirthValidator.utils';
2
+ export var InputValidationError;
3
+ (function (InputValidationError) {
4
+ InputValidationError["RealDateError"] = "realDateError";
5
+ InputValidationError["DateBefore1900Error"] = "dateBefore1900Error";
6
+ InputValidationError["YoungerThan17"] = "youngerThan17";
7
+ })(InputValidationError || (InputValidationError = {}));
8
+ export var FieldValidationError;
9
+ (function (FieldValidationError) {
10
+ FieldValidationError["MissingFieldError"] = "missingFieldError";
11
+ FieldValidationError["InvalidInputValueError"] = "invalidInputValueError";
12
+ FieldValidationError["ImpossibleFieldValueError"] = "impossibleFieldValueError";
13
+ })(FieldValidationError || (FieldValidationError = {}));
14
+ export const dateOfBirthErrorMessages = {
15
+ [InputValidationError.RealDateError]: () => 'Please enter a valid date of birth',
16
+ [InputValidationError.DateBefore1900Error]: () => 'Please enter a date of birth after 1900',
17
+ [FieldValidationError.MissingFieldError]: createMissingFieldErrorMessage,
18
+ [FieldValidationError.InvalidInputValueError]: () => 'Please enter a numeric value',
19
+ [FieldValidationError.ImpossibleFieldValueError]: createImpossibleFieldErrorMessage,
20
+ [InputValidationError.YoungerThan17]: createYoungerThan17ErrorMessage,
21
+ };
22
+ export const createErrorMessage = (errorKey, fields) => {
23
+ const messageFunc = dateOfBirthErrorMessages[errorKey];
24
+ const message = messageFunc(fields ?? []);
25
+ const fieldsSuffix = fields ? ` (${fields.join('-')})` : '';
26
+ return message + fieldsSuffix;
27
+ };
28
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/utils/dateOfBirth/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iCAAiC,EACjC,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,8BAA8B,CAAA;AAErC,MAAM,CAAN,IAAY,oBAIX;AAJD,WAAY,oBAAoB;IAC9B,uDAA+B,CAAA;IAC/B,mEAA2C,CAAA;IAC3C,uDAA+B,CAAA;AACjC,CAAC,EAJW,oBAAoB,KAApB,oBAAoB,QAI/B;AAED,MAAM,CAAN,IAAY,oBAIX;AAJD,WAAY,oBAAoB;IAC9B,+DAAuC,CAAA;IACvC,yEAAiD,CAAA;IACjD,+EAAuD,CAAA;AACzD,CAAC,EAJW,oBAAoB,KAApB,oBAAoB,QAI/B;AAED,MAAM,CAAC,MAAM,wBAAwB,GAGjC;IACF,CAAC,oBAAoB,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,CACzC,oCAAoC;IACtC,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,CAC/C,yCAAyC;IAC3C,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,8BAA8B;IACxE,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,EAAE,GAAG,EAAE,CAClD,8BAA8B;IAChC,CAAC,oBAAoB,CAAC,yBAAyB,CAAC,EAC9C,iCAAiC;IACnC,CAAC,oBAAoB,CAAC,aAAa,CAAC,EAAE,+BAA+B;CACtE,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,QAA+C,EAC/C,MAAiB,EACjB,EAAE;IACF,MAAM,WAAW,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,WAAW,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;IACzC,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IAC3D,OAAO,OAAO,GAAG,YAAY,CAAA;AAC/B,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mrshmllw/smores-react",
3
- "version": "9.26.0",
3
+ "version": "10.1.0",
4
4
  "main": "./dist/index.js",
5
5
  "description": "Collection of React components used by Marshmallow Technology",
6
6
  "keywords": [
@@ -43,22 +43,22 @@
43
43
  "@commitlint/types": "^19.5.0",
44
44
  "@semantic-release/changelog": "^6.0.3",
45
45
  "@semantic-release/git": "^10.0.1",
46
- "@semantic-release/github": "^11.0.0",
46
+ "@semantic-release/github": "^11.0.1",
47
47
  "@semantic-release/npm": "^12.0.0",
48
48
  "@snyk/protect": "^1.1294.0",
49
- "@storybook/addon-a11y": "^8.4.1",
49
+ "@storybook/addon-a11y": "^8.4.2",
50
50
  "@storybook/addon-coverage": "^1.0.3",
51
- "@storybook/addon-essentials": "^8.4.1",
52
- "@storybook/addon-interactions": "^8.4.1",
53
- "@storybook/addon-links": "^8.4.1",
54
- "@storybook/react": "^8.4.1",
55
- "@storybook/react-vite": "^8.4.1",
51
+ "@storybook/addon-essentials": "^8.4.2",
52
+ "@storybook/addon-interactions": "^8.4.2",
53
+ "@storybook/addon-links": "^8.4.2",
54
+ "@storybook/react": "^8.4.2",
55
+ "@storybook/react-vite": "^8.4.2",
56
56
  "@storybook/test": "^8.2.1",
57
57
  "@storybook/test-runner": "^0.19.1",
58
58
  "@testing-library/react": "^16.0.1",
59
59
  "@types/body-scroll-lock": "^3.1.0",
60
60
  "@types/dompurify": "^3.0.5",
61
- "@types/node": "^22.8.7",
61
+ "@types/node": "^22.9.0",
62
62
  "@types/react": "^18.0.24",
63
63
  "@types/react-dom": "^18.0.8",
64
64
  "@typescript-eslint/eslint-plugin": "^7.18.0",
@@ -84,6 +84,7 @@
84
84
  "vitest": "^2.1.4"
85
85
  },
86
86
  "dependencies": {
87
+ "@floating-ui/react": "0.26.27",
87
88
  "@lexical/react": "^0.19.0",
88
89
  "body-scroll-lock": "^4.0.0-beta.0",
89
90
  "date-fns": "^4.1.0",