@lifesg/react-design-system 3.4.0-canary.5 → 3.4.0-canary.7
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/badge/badge.style.d.ts +3 -3
- package/badge/badge.style.js +8 -8
- package/badge/badge.style.js.map +1 -1
- package/badge/types.d.ts +1 -1
- package/calendar/calendar.js +1 -1
- package/calendar/calendar.js.map +1 -1
- package/cjs/badge/badge.style.js +11 -11
- package/cjs/badge/badge.style.js.map +1 -1
- package/cjs/calendar/calendar.js +7 -7
- package/cjs/calendar/calendar.js.map +1 -1
- package/cjs/data-table/data-table.js +1 -1
- package/cjs/data-table/data-table.js.map +1 -1
- package/cjs/date-input/date-input.js +1 -1
- package/cjs/date-input/date-input.js.map +1 -1
- package/cjs/filter/filter-badge.js +2 -0
- package/cjs/filter/filter-badge.js.map +1 -0
- package/cjs/filter/filter-modal.js +1 -1
- package/cjs/filter/filter-modal.js.map +1 -1
- package/cjs/filter/filter-modal.styles.js +24 -15
- package/cjs/filter/filter-modal.styles.js.map +1 -1
- package/cjs/filter/filter-sidebar.js +1 -1
- package/cjs/filter/filter-sidebar.js.map +1 -1
- package/cjs/filter/filter-sidebar.styles.js +20 -14
- package/cjs/filter/filter-sidebar.styles.js.map +1 -1
- package/cjs/filter/filter.styles.js +6 -5
- package/cjs/filter/filter.styles.js.map +1 -1
- package/cjs/form/form-wrapper.js +1 -1
- package/cjs/form/form-wrapper.js.map +1 -1
- package/cjs/index.js +1 -1
- package/cjs/shared/dropdown-wrapper/dropdown-wrapper.styles.js +6 -5
- package/cjs/shared/dropdown-wrapper/dropdown-wrapper.styles.js.map +1 -1
- package/cjs/shared/internal-calendar/single/single-cell.js +1 -1
- package/cjs/shared/internal-calendar/single/single-cell.js.map +1 -1
- package/cjs/shared/standalone-date-input/standalone-date-input.js +1 -1
- package/cjs/shared/standalone-date-input/standalone-date-input.js.map +1 -1
- package/cjs/shared/standalone-date-input/standalone-date-input.style.js +19 -16
- package/cjs/shared/standalone-date-input/standalone-date-input.style.js.map +1 -1
- package/cjs/theme/colour-primitive/specs/careercompass-colour-set.js +2 -0
- package/cjs/theme/colour-primitive/specs/careercompass-colour-set.js.map +1 -0
- package/cjs/theme/colour-primitive/specs/spf-colour-set.js +1 -1
- package/cjs/theme/colour-primitive/specs/spf-colour-set.js.map +1 -1
- package/cjs/theme/colour-primitive/theme-helper.js +1 -1
- package/cjs/theme/colour-primitive/theme-helper.js.map +1 -1
- package/cjs/theme/colour-semantic/specs/a11yplayground-semantic-tokens.js +1 -1
- package/cjs/theme/colour-semantic/specs/a11yplayground-semantic-tokens.js.map +1 -1
- package/cjs/theme/colour-semantic/specs/lifesg-semantic-tokens.js +1 -1
- package/cjs/theme/colour-semantic/specs/lifesg-semantic-tokens.js.map +1 -1
- package/cjs/theme/colour-semantic/specs/pa-semantic-tokens.js +1 -1
- package/cjs/theme/colour-semantic/specs/pa-semantic-tokens.js.map +1 -1
- package/cjs/theme/colour-semantic/specs/sgwdigitallobby-tokens.js +1 -1
- package/cjs/theme/colour-semantic/specs/sgwdigitallobby-tokens.js.map +1 -1
- package/cjs/theme/colour-semantic/specs/spf-semantic-tokens.js +2 -0
- package/cjs/theme/colour-semantic/specs/spf-semantic-tokens.js.map +1 -0
- package/cjs/theme/colour-semantic/theme-helper.js +1 -1
- package/cjs/theme/colour-semantic/theme-helper.js.map +1 -1
- package/cjs/theme/font-spec/specs/sgw-digital-lobby-font-spec-set.js +1 -1
- package/cjs/theme/font-spec/specs/sgw-digital-lobby-font-spec-set.js.map +1 -1
- package/cjs/theme/index.js +1 -1
- package/cjs/theme/index.js.map +1 -1
- package/cjs/timepicker/timepicker.js +1 -1
- package/cjs/timepicker/timepicker.js.map +1 -1
- package/cjs/timepicker/timepicker.styles.js +4 -3
- package/cjs/timepicker/timepicker.styles.js.map +1 -1
- package/data-table/data-table.js +1 -1
- package/data-table/data-table.js.map +1 -1
- package/date-input/date-input.js +1 -1
- package/date-input/date-input.js.map +1 -1
- package/filter/filter-badge.d.ts +5 -0
- package/filter/filter-badge.js +2 -0
- package/filter/filter-badge.js.map +1 -0
- package/filter/filter-modal.d.ts +1 -1
- package/filter/filter-modal.js +1 -1
- package/filter/filter-modal.js.map +1 -1
- package/filter/filter-modal.styles.d.ts +2 -0
- package/filter/filter-modal.styles.js +25 -16
- package/filter/filter-modal.styles.js.map +1 -1
- package/filter/filter-sidebar.d.ts +1 -1
- package/filter/filter-sidebar.js +1 -1
- package/filter/filter-sidebar.js.map +1 -1
- package/filter/filter-sidebar.styles.d.ts +1 -0
- package/filter/filter-sidebar.styles.js +20 -14
- package/filter/filter-sidebar.styles.js.map +1 -1
- package/filter/filter.d.ts +2 -2
- package/filter/filter.styles.js +10 -9
- package/filter/filter.styles.js.map +1 -1
- package/filter/types.d.ts +1 -0
- package/form/form-wrapper.js +1 -1
- package/form/form-wrapper.js.map +1 -1
- package/index.js +1 -1
- package/package.json +17 -1
- package/shared/dropdown-wrapper/dropdown-wrapper.styles.js +8 -7
- package/shared/dropdown-wrapper/dropdown-wrapper.styles.js.map +1 -1
- package/shared/internal-calendar/single/single-cell.js +1 -1
- package/shared/internal-calendar/single/single-cell.js.map +1 -1
- package/shared/standalone-date-input/standalone-date-input.js +1 -1
- package/shared/standalone-date-input/standalone-date-input.js.map +1 -1
- package/shared/standalone-date-input/standalone-date-input.style.d.ts +2 -1
- package/shared/standalone-date-input/standalone-date-input.style.js +20 -17
- package/shared/standalone-date-input/standalone-date-input.style.js.map +1 -1
- package/theme/colour-primitive/specs/careercompass-colour-set.d.ts +3 -0
- package/theme/colour-primitive/specs/careercompass-colour-set.js +2 -0
- package/theme/colour-primitive/specs/careercompass-colour-set.js.map +1 -0
- package/theme/colour-primitive/specs/spf-colour-set.js +1 -1
- package/theme/colour-primitive/specs/spf-colour-set.js.map +1 -1
- package/theme/colour-primitive/theme-helper.js +1 -1
- package/theme/colour-primitive/theme-helper.js.map +1 -1
- package/theme/colour-semantic/specs/a11yplayground-semantic-tokens.js +1 -1
- package/theme/colour-semantic/specs/a11yplayground-semantic-tokens.js.map +1 -1
- package/theme/colour-semantic/specs/lifesg-semantic-tokens.js +1 -1
- package/theme/colour-semantic/specs/lifesg-semantic-tokens.js.map +1 -1
- package/theme/colour-semantic/specs/pa-semantic-tokens.js +1 -1
- package/theme/colour-semantic/specs/pa-semantic-tokens.js.map +1 -1
- package/theme/colour-semantic/specs/sgwdigitallobby-tokens.js +1 -1
- package/theme/colour-semantic/specs/sgwdigitallobby-tokens.js.map +1 -1
- package/theme/colour-semantic/specs/spf-semantic-tokens.d.ts +2 -0
- package/theme/colour-semantic/specs/spf-semantic-tokens.js +2 -0
- package/theme/colour-semantic/specs/spf-semantic-tokens.js.map +1 -0
- package/theme/colour-semantic/theme-helper.js +1 -1
- package/theme/colour-semantic/theme-helper.js.map +1 -1
- package/theme/colour-semantic/types.d.ts +14 -0
- package/theme/font-spec/specs/sgw-digital-lobby-font-spec-set.js +1 -1
- package/theme/font-spec/specs/sgw-digital-lobby-font-spec-set.js.map +1 -1
- package/theme/index.d.ts +33 -0
- package/theme/index.js +1 -1
- package/theme/index.js.map +1 -1
- package/theme/types.d.ts +2 -2
- package/timepicker/timepicker.js +1 -1
- package/timepicker/timepicker.js.map +1 -1
- package/timepicker/timepicker.styles.d.ts +6 -2
- package/timepicker/timepicker.styles.js +3 -2
- package/timepicker/timepicker.styles.js.map +1 -1
package/badge/badge.style.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ interface BadgeContainerProps {
|
|
|
9
9
|
interface BadgeWrapperProps extends BadgeContainerProps {
|
|
10
10
|
$offset?: [string, string];
|
|
11
11
|
}
|
|
12
|
-
export declare const BadgeOverlay: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<
|
|
13
|
-
export declare const BadgeWrapper: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<
|
|
14
|
-
export declare const StyledBadge: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<
|
|
12
|
+
export declare const BadgeOverlay: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "$isOverlay"> & BadgeContainerProps, never> & Partial<Pick<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "$isOverlay"> & BadgeContainerProps, never>>> & string;
|
|
13
|
+
export declare const BadgeWrapper: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, keyof BadgeWrapperProps> & BadgeWrapperProps, never> & Partial<Pick<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, keyof BadgeWrapperProps> & BadgeWrapperProps, never>>> & string;
|
|
14
|
+
export declare const StyledBadge: import("styled-components/dist/types").IStyledComponentBase<"web", import("styled-components").FastOmit<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, keyof StyledBadgeProps> & StyledBadgeProps, never> & Partial<Pick<import("styled-components").FastOmit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, keyof StyledBadgeProps> & StyledBadgeProps, never>>> & string;
|
|
15
15
|
export {};
|
package/badge/badge.style.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import e,{css as r}from"styled-components";import{Font as t,Colour as o,Radius as i,Border as n}from"../theme/index.js";const
|
|
1
|
+
import e,{css as r}from"styled-components";import{Font as t,Colour as o,Radius as i,Border as n}from"../theme/index.js";const s=e.span`
|
|
2
2
|
${e=>e.$isOverlay&&r`
|
|
3
3
|
position: relative;
|
|
4
4
|
width: fit-content;
|
|
5
5
|
height: fit-content;
|
|
6
6
|
`}
|
|
7
|
-
`,
|
|
7
|
+
`,a=e.span`
|
|
8
8
|
${e=>e.$isOverlay&&r`
|
|
9
9
|
position: absolute;
|
|
10
10
|
top: 0;
|
|
@@ -12,7 +12,7 @@ import e,{css as r}from"styled-components";import{Font as t,Colour as o,Radius a
|
|
|
12
12
|
transform: translate(50%, -25%)
|
|
13
13
|
${e.$offset?`translate(${e.$offset[0]},${e.$offset[1]})`:""};
|
|
14
14
|
`}
|
|
15
|
-
`,
|
|
15
|
+
`,d=r`
|
|
16
16
|
min-width: 1.25rem;
|
|
17
17
|
padding: 0.25rem 0.375rem;
|
|
18
18
|
font-size: ${t.Spec["body-size-xs"]};
|
|
@@ -22,7 +22,7 @@ import e,{css as r}from"styled-components";import{Font as t,Colour as o,Radius a
|
|
|
22
22
|
border-radius: 50%;
|
|
23
23
|
width: 0.5rem;
|
|
24
24
|
height: 0.5rem;
|
|
25
|
-
`,c=e.
|
|
25
|
+
`,c=e.span`
|
|
26
26
|
background-color: ${({$color:e})=>"important"===e?o["icon-error"]:o["bg-primary"]};
|
|
27
27
|
color: ${o["text-inverse"]};
|
|
28
28
|
font-weight: ${t.Spec["weight-bold"]};
|
|
@@ -32,10 +32,10 @@ import e,{css as r}from"styled-components";import{Font as t,Colour as o,Radius a
|
|
|
32
32
|
|
|
33
33
|
width: fit-content;
|
|
34
34
|
${({$variant:e,$color:t})=>{switch(e){case"number":return r`
|
|
35
|
-
${
|
|
35
|
+
${d}
|
|
36
36
|
border-radius: ${i.full};
|
|
37
37
|
`;case"number-with-border":return r`
|
|
38
|
-
${
|
|
38
|
+
${d}
|
|
39
39
|
border-radius: ${i.full};
|
|
40
40
|
box-shadow: 0 0 0 ${n["width-020"]} ${o.bg};
|
|
41
41
|
`;case"dot":return r`
|
|
@@ -44,7 +44,7 @@ import e,{css as r}from"styled-components";import{Font as t,Colour as o,Radius a
|
|
|
44
44
|
${$}
|
|
45
45
|
box-shadow: 0 0 0 ${n["width-020"]} ${o.bg};
|
|
46
46
|
`;case"square-number":return r`
|
|
47
|
-
${
|
|
47
|
+
${d}
|
|
48
48
|
border-radius: ${i.sm};
|
|
49
49
|
padding: 0.25rem 0.4375rem;
|
|
50
50
|
${"default"===t&&r`
|
|
@@ -52,5 +52,5 @@ import e,{css as r}from"styled-components";import{Font as t,Colour as o,Radius a
|
|
|
52
52
|
color: ${o["text-primary"]};
|
|
53
53
|
`}
|
|
54
54
|
`;default:return""}}};
|
|
55
|
-
`;export{
|
|
55
|
+
`;export{s as BadgeOverlay,a as BadgeWrapper,c as StyledBadge};
|
|
56
56
|
//# sourceMappingURL=badge.style.js.map
|
package/badge/badge.style.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"badge.style.js","sources":["../../src/badge/badge.style.tsx"],"sourcesContent":["import styled, { css } from \"styled-components\";\nimport { Border, Colour, Font, Radius } from \"../theme\";\nimport { BadgeProps } from \"./types\";\n\n// =============================================================================\n// STYLE INTERFACE, transient props are denoted with $\n// See more https://styled-components.com/docs/api#transient-props\n// =============================================================================\ninterface StyledBadgeProps {\n $variant: BadgeProps[\"variant\"];\n $color: BadgeProps[\"color\"];\n}\ninterface BadgeContainerProps {\n $isOverlay?: boolean;\n}\ninterface BadgeWrapperProps extends BadgeContainerProps {\n $offset?: [string, string];\n}\n\n// =============================================================================\n// STYLING\n// =============================================================================\nexport const BadgeOverlay = styled.
|
|
1
|
+
{"version":3,"file":"badge.style.js","sources":["../../src/badge/badge.style.tsx"],"sourcesContent":["import styled, { css } from \"styled-components\";\nimport { Border, Colour, Font, Radius } from \"../theme\";\nimport { BadgeProps } from \"./types\";\n\n// =============================================================================\n// STYLE INTERFACE, transient props are denoted with $\n// See more https://styled-components.com/docs/api#transient-props\n// =============================================================================\ninterface StyledBadgeProps {\n $variant: BadgeProps[\"variant\"];\n $color: BadgeProps[\"color\"];\n}\ninterface BadgeContainerProps {\n $isOverlay?: boolean;\n}\ninterface BadgeWrapperProps extends BadgeContainerProps {\n $offset?: [string, string];\n}\n\n// =============================================================================\n// STYLING\n// =============================================================================\nexport const BadgeOverlay = styled.span<BadgeContainerProps>`\n ${(props) =>\n props.$isOverlay &&\n css`\n position: relative;\n width: fit-content;\n height: fit-content;\n `}\n`;\n\nexport const BadgeWrapper = styled.span<BadgeWrapperProps>`\n ${(props) =>\n props.$isOverlay &&\n css`\n position: absolute;\n top: 0;\n right: 0;\n transform: translate(50%, -25%)\n ${props.$offset\n ? `translate(${props.$offset[0]},${props.$offset[1]})`\n : \"\"};\n `}\n`;\n\nconst numberBadgeStyles = css`\n min-width: 1.25rem;\n padding: 0.25rem 0.375rem;\n font-size: ${Font.Spec[\"body-size-xs\"]};\n font-weight: ${Font.Spec[\"weight-bold\"]};\n line-height: 1;\n`;\n\nconst dotBadgeStyles = css`\n border-radius: 50%;\n width: 0.5rem;\n height: 0.5rem;\n`;\n\nexport const StyledBadge = styled.span<StyledBadgeProps>`\n background-color: ${({ $color }) =>\n $color === \"important\" ? Colour[\"icon-error\"] : Colour[\"bg-primary\"]};\n color: ${Colour[\"text-inverse\"]};\n font-weight: ${Font.Spec[\"weight-bold\"]};\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: fit-content;\n ${({ $variant, $color }) => {\n switch ($variant) {\n case \"number\":\n return css`\n ${numberBadgeStyles}\n border-radius: ${Radius.full};\n `;\n\n case \"number-with-border\":\n return css`\n ${numberBadgeStyles}\n border-radius: ${Radius.full};\n box-shadow: 0 0 0 ${Border[\"width-020\"]} ${Colour[\"bg\"]};\n `;\n\n case \"dot\":\n return css`\n ${dotBadgeStyles}\n `;\n\n case \"dot-with-border\":\n return css`\n ${dotBadgeStyles}\n box-shadow: 0 0 0 ${Border[\"width-020\"]} ${Colour[\"bg\"]};\n `;\n\n case \"square-number\":\n return css`\n ${numberBadgeStyles}\n border-radius: ${Radius.sm};\n padding: 0.25rem 0.4375rem;\n ${$color === \"default\" &&\n css`\n background-color: ${Colour[\"bg-primary-subtler\"]};\n color: ${Colour[\"text-primary\"]};\n `}\n `;\n\n default:\n return \"\";\n }\n }};\n`;\n"],"names":["BadgeOverlay","styled","span","props","$isOverlay","css","BadgeWrapper","$offset","numberBadgeStyles","Font","Spec","dotBadgeStyles","StyledBadge","$color","Colour","$variant","Radius","full","Border","sm"],"mappings":"wHAsBO,MAAMA,EAAeC,EAAOC,IAAyB;MACrDC,GACCA,EAAMC,YACNC,CAAG;;;;;EAOEC,EAAeL,EAAOC,IAAuB;MACnDC,GACCA,EAAMC,YACNC,CAAG;;;;;kBAKOF,EAAMI,QACF,aAAaJ,EAAMI,QAAQ,MAAMJ,EAAMI,QAAQ,MAC/C;;EAIhBC,EAAoBH,CAAG;;;iBAGZI,EAAKC,KAAK;mBACRD,EAAKC,KAAK;;EAIvBC,EAAiBN,CAAG;;;;EAMbO,EAAcX,EAAOC,IAAsB;wBAChC,EAAGW,YACR,cAAXA,EAAyBC,EAAO,cAAgBA,EAAO;aAClDA,EAAO;mBACDL,EAAKC,KAAK;;;;;;MAMvB,EAAGK,WAAUF,aACX,OAAQE,GACJ,IAAK,SACD,OAAOV,CAAG;sBACJG;qCACeQ,EAAOC;kBAGhC,IAAK,qBACD,OAAOZ,CAAG;sBACJG;qCACeQ,EAAOC;wCACJC,EAAO,gBAAgBJ,EAAW;kBAG9D,IAAK,MACD,OAAOT,CAAG;sBACJM;kBAGV,IAAK,kBACD,OAAON,CAAG;sBACJM;yCACmBO,EAAO,gBAAgBJ,EAAW;kBAG/D,IAAK,gBACD,OAAOT,CAAG;sBACJG;qCACeQ,EAAOG;;sBAEX,YAAXN,GACFR,CAAG;4CACqBS,EAAO;iCAClBA,EAAO;;kBAI5B,QACI,MAAO;"}
|
package/badge/types.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export type BadgeVariant = "number" | "number-with-border" | "dot" | "dot-with-border" | "square-number";
|
|
2
2
|
export type BadgeColor = "default" | "important";
|
|
3
|
-
export interface BadgeProps extends React.HTMLAttributes<
|
|
3
|
+
export interface BadgeProps extends React.HTMLAttributes<HTMLSpanElement> {
|
|
4
4
|
badgeOffset?: [string, string] | undefined;
|
|
5
5
|
children?: JSX.Element | undefined;
|
|
6
6
|
count?: number | undefined;
|
package/calendar/calendar.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{jsx as a}from"react/jsx-runtime";import{useState as e,useEffect as i}from"react";import t,{css as n}from"styled-components";import"../shared/internal-calendar/calendar-dropdown.js";import{InternalCalendar as l}from"../shared/internal-calendar/internal-calendar.js";import{Spacing as o,Border as r,Colour as d,Radius as s}from"../theme/index.js";const m=t=>{const{className:n,styleType:o="bordered",variant:r,id:d,minDate:s,maxDate:m,disabledDates:c,allowDisabledSelection:h,showActiveMonthDaysOnly:u,onHover:p,onYearMonthDisplayChange:b,"data-testid":D}=t,g="multi"!==t.variant?t.value:void 0,$="multi"===t.variant?t.values:void 0,y="multi"===t.variant?t.minSelectable:void 0,w="multi"===t.variant?t.maxSelectable:void 0,[S,f]=e((()=>void 0!==$?$:void 0!==g?[g]:[]));i((()=>{f(void 0!==$?$:void 0!==g?[g]:[])}),[g,$]);return a(v,{className:n,id:d,"data-testid":D,$hasBorder:"bordered"===o,children:a(l,{value:S[0],values:S,initialCalendarDate:S[0],isFocusable:!0,variant:r,minDate:s,maxDate:m,disabledDates:c,allowDisabledSelection:h,showActiveMonthDaysOnly:u,onHover:p,onYearMonthDisplayChange:b,onSelect:a=>{var e,i;f([a]),"multi"!==t.variant&&(null===(e=t.onChange)||void 0===e||e.call(t,a),null===(i=t.onSelect)||void 0===i||i.call(t,a))},onChange:a=>{var e;f(a),"multi"===t.variant&&(null===(e=t.onChange)||void 0===e||e.call(t,a))},minSelectable:y,maxSelectable:w})})},v=t.div`
|
|
1
|
+
import{jsx as a}from"react/jsx-runtime";import{useState as e,useEffect as i}from"react";import t,{css as n}from"styled-components";import"../shared/internal-calendar/calendar-dropdown.js";import{InternalCalendar as l}from"../shared/internal-calendar/internal-calendar.js";import{Spacing as o,Border as r,Colour as d,Radius as s}from"../theme/index.js";const m=t=>{const{className:n,styleType:o="bordered",variant:r="single",id:d,minDate:s,maxDate:m,disabledDates:c,allowDisabledSelection:h,showActiveMonthDaysOnly:u,onHover:p,onYearMonthDisplayChange:b,"data-testid":D}=t,g="multi"!==t.variant?t.value:void 0,$="multi"===t.variant?t.values:void 0,y="multi"===t.variant?t.minSelectable:void 0,w="multi"===t.variant?t.maxSelectable:void 0,[S,f]=e((()=>void 0!==$?$:void 0!==g?[g]:[]));i((()=>{f(void 0!==$?$:void 0!==g?[g]:[])}),[g,$]);return a(v,{className:n,id:d,"data-testid":D,$hasBorder:"bordered"===o,children:a(l,{value:S[0],values:S,initialCalendarDate:S[0],isFocusable:!0,variant:r,minDate:s,maxDate:m,disabledDates:c,allowDisabledSelection:h,showActiveMonthDaysOnly:u,onHover:p,onYearMonthDisplayChange:b,onSelect:a=>{var e,i;f([a]),"multi"!==t.variant&&(null===(e=t.onChange)||void 0===e||e.call(t,a),null===(i=t.onSelect)||void 0===i||i.call(t,a))},onChange:a=>{var e;f(a),"multi"===t.variant&&(null===(e=t.onChange)||void 0===e||e.call(t,a))},minSelectable:y,maxSelectable:w})})},v=t.div`
|
|
2
2
|
--vertical-inset: ${o["spacing-24"]};
|
|
3
3
|
--horizontal-inset: ${o["spacing-32"]};
|
|
4
4
|
--header-bottom-spacing: ${o["spacing-8"]};
|
package/calendar/calendar.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar.js","sources":["../../src/calendar/calendar.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport styled, { css } from \"styled-components\";\nimport { InternalCalendar } from \"../shared/internal-calendar\";\nimport { Border, Colour, Radius, Spacing } from \"../theme\";\nimport { CalendarProps } from \"./types\";\n\nexport const Calendar = (props: CalendarProps) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const {\n className,\n styleType = \"bordered\",\n variant,\n id,\n minDate,\n maxDate,\n disabledDates,\n allowDisabledSelection,\n showActiveMonthDaysOnly,\n onHover,\n onYearMonthDisplayChange,\n \"data-testid\": dataTestId,\n } = props;\n\n const controlledValue =\n props.variant !== \"multi\" ? props.value : undefined;\n const controlledValues =\n props.variant === \"multi\" ? props.values : undefined;\n const minSelectable =\n props.variant === \"multi\" ? props.minSelectable : undefined;\n const maxSelectable =\n props.variant === \"multi\" ? props.maxSelectable : undefined;\n\n const resolveValues = (): string[] => {\n if (controlledValues !== undefined) return controlledValues;\n if (controlledValue !== undefined) return [controlledValue];\n return [];\n };\n\n const [selectedValues, setSelectedValues] =\n useState<string[]>(resolveValues);\n\n // =============================================================================\n // EFFECTS\n // =============================================================================\n useEffect(() => {\n if (controlledValues !== undefined) {\n setSelectedValues(controlledValues);\n } else if (controlledValue !== undefined) {\n setSelectedValues([controlledValue]);\n } else {\n setSelectedValues([]);\n }\n }, [controlledValue, controlledValues]);\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleSelect = (date: string) => {\n setSelectedValues([date]);\n if (props.variant !== \"multi\") {\n props.onChange?.(date);\n props.onSelect?.(date);\n }\n };\n\n const handleMultiSelect = (nextValues: string[]) => {\n setSelectedValues(nextValues);\n if (props.variant === \"multi\") {\n props.onChange?.(nextValues);\n }\n };\n\n // =============================================================================\n // RENDER FUNCTION\n // =============================================================================\n return (\n <Wrapper\n className={className}\n id={id}\n data-testid={dataTestId}\n $hasBorder={styleType === \"bordered\"}\n >\n <InternalCalendar\n value={selectedValues[0]}\n values={selectedValues}\n initialCalendarDate={selectedValues[0]}\n isFocusable={true}\n variant={variant}\n minDate={minDate}\n maxDate={maxDate}\n disabledDates={disabledDates}\n allowDisabledSelection={allowDisabledSelection}\n showActiveMonthDaysOnly={showActiveMonthDaysOnly}\n onHover={onHover}\n onYearMonthDisplayChange={onYearMonthDisplayChange}\n onSelect={handleSelect}\n onChange={handleMultiSelect}\n minSelectable={minSelectable}\n maxSelectable={maxSelectable}\n />\n </Wrapper>\n );\n};\n\n// =============================================================================\n// STYLE INTERFACE\n// =============================================================================\ninterface StyleProps {\n $hasBorder?: boolean;\n}\n\n// =============================================================================\n// STYLING\n// =============================================================================\nconst Wrapper = styled.div<StyleProps>`\n --vertical-inset: ${Spacing[\"spacing-24\"]};\n --horizontal-inset: ${Spacing[\"spacing-32\"]};\n --header-bottom-spacing: ${Spacing[\"spacing-8\"]};\n\n width: 41rem;\n\n ${(props) => {\n if (props.$hasBorder) {\n return css`\n border: ${Border[\"width-010\"]} ${Border.solid} ${Colour.border};\n border-radius: ${Radius[\"lg\"]};\n overflow: hidden;\n `;\n }\n }}\n`;\n"],"names":["Calendar","props","className","styleType","variant","id","minDate","maxDate","disabledDates","allowDisabledSelection","showActiveMonthDaysOnly","onHover","onYearMonthDisplayChange","dataTestId","controlledValue","value","undefined","controlledValues","values","minSelectable","maxSelectable","selectedValues","setSelectedValues","useState","useEffect","_jsx","Wrapper","children","InternalCalendar","initialCalendarDate","isFocusable","onSelect","date","_a","onChange","call","_b","nextValues","styled","div","Spacing","$hasBorder","css","Border","solid","Colour","border","Radius"],"mappings":"gWAMO,MAAMA,EAAYC,IAIrB,MAAMC,UACFA,EAASC,UACTA,EAAY,WAAUC,QACtBA,
|
|
1
|
+
{"version":3,"file":"calendar.js","sources":["../../src/calendar/calendar.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport styled, { css } from \"styled-components\";\nimport { InternalCalendar } from \"../shared/internal-calendar\";\nimport { Border, Colour, Radius, Spacing } from \"../theme\";\nimport { CalendarProps } from \"./types\";\n\nexport const Calendar = (props: CalendarProps) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const {\n className,\n styleType = \"bordered\",\n variant = \"single\",\n id,\n minDate,\n maxDate,\n disabledDates,\n allowDisabledSelection,\n showActiveMonthDaysOnly,\n onHover,\n onYearMonthDisplayChange,\n \"data-testid\": dataTestId,\n } = props;\n\n const controlledValue =\n props.variant !== \"multi\" ? props.value : undefined;\n const controlledValues =\n props.variant === \"multi\" ? props.values : undefined;\n const minSelectable =\n props.variant === \"multi\" ? props.minSelectable : undefined;\n const maxSelectable =\n props.variant === \"multi\" ? props.maxSelectable : undefined;\n\n const resolveValues = (): string[] => {\n if (controlledValues !== undefined) return controlledValues;\n if (controlledValue !== undefined) return [controlledValue];\n return [];\n };\n\n const [selectedValues, setSelectedValues] =\n useState<string[]>(resolveValues);\n\n // =============================================================================\n // EFFECTS\n // =============================================================================\n useEffect(() => {\n if (controlledValues !== undefined) {\n setSelectedValues(controlledValues);\n } else if (controlledValue !== undefined) {\n setSelectedValues([controlledValue]);\n } else {\n setSelectedValues([]);\n }\n }, [controlledValue, controlledValues]);\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleSelect = (date: string) => {\n setSelectedValues([date]);\n if (props.variant !== \"multi\") {\n props.onChange?.(date);\n props.onSelect?.(date);\n }\n };\n\n const handleMultiSelect = (nextValues: string[]) => {\n setSelectedValues(nextValues);\n if (props.variant === \"multi\") {\n props.onChange?.(nextValues);\n }\n };\n\n // =============================================================================\n // RENDER FUNCTION\n // =============================================================================\n return (\n <Wrapper\n className={className}\n id={id}\n data-testid={dataTestId}\n $hasBorder={styleType === \"bordered\"}\n >\n <InternalCalendar\n value={selectedValues[0]}\n values={selectedValues}\n initialCalendarDate={selectedValues[0]}\n isFocusable={true}\n variant={variant}\n minDate={minDate}\n maxDate={maxDate}\n disabledDates={disabledDates}\n allowDisabledSelection={allowDisabledSelection}\n showActiveMonthDaysOnly={showActiveMonthDaysOnly}\n onHover={onHover}\n onYearMonthDisplayChange={onYearMonthDisplayChange}\n onSelect={handleSelect}\n onChange={handleMultiSelect}\n minSelectable={minSelectable}\n maxSelectable={maxSelectable}\n />\n </Wrapper>\n );\n};\n\n// =============================================================================\n// STYLE INTERFACE\n// =============================================================================\ninterface StyleProps {\n $hasBorder?: boolean;\n}\n\n// =============================================================================\n// STYLING\n// =============================================================================\nconst Wrapper = styled.div<StyleProps>`\n --vertical-inset: ${Spacing[\"spacing-24\"]};\n --horizontal-inset: ${Spacing[\"spacing-32\"]};\n --header-bottom-spacing: ${Spacing[\"spacing-8\"]};\n\n width: 41rem;\n\n ${(props) => {\n if (props.$hasBorder) {\n return css`\n border: ${Border[\"width-010\"]} ${Border.solid} ${Colour.border};\n border-radius: ${Radius[\"lg\"]};\n overflow: hidden;\n `;\n }\n }}\n`;\n"],"names":["Calendar","props","className","styleType","variant","id","minDate","maxDate","disabledDates","allowDisabledSelection","showActiveMonthDaysOnly","onHover","onYearMonthDisplayChange","dataTestId","controlledValue","value","undefined","controlledValues","values","minSelectable","maxSelectable","selectedValues","setSelectedValues","useState","useEffect","_jsx","Wrapper","children","InternalCalendar","initialCalendarDate","isFocusable","onSelect","date","_a","onChange","call","_b","nextValues","styled","div","Spacing","$hasBorder","css","Border","solid","Colour","border","Radius"],"mappings":"gWAMO,MAAMA,EAAYC,IAIrB,MAAMC,UACFA,EAASC,UACTA,EAAY,WAAUC,QACtBA,EAAU,SAAQC,GAClBA,EAAEC,QACFA,EAAOC,QACPA,EAAOC,cACPA,EAAaC,uBACbA,EAAsBC,wBACtBA,EAAuBC,QACvBA,EAAOC,yBACPA,EACA,cAAeC,GACfZ,EAEEa,EACgB,UAAlBb,EAAMG,QAAsBH,EAAMc,WAAQC,EACxCC,EACgB,UAAlBhB,EAAMG,QAAsBH,EAAMiB,YAASF,EACzCG,EACgB,UAAlBlB,EAAMG,QAAsBH,EAAMkB,mBAAgBH,EAChDI,EACgB,UAAlBnB,EAAMG,QAAsBH,EAAMmB,mBAAgBJ,GAQ/CK,EAAgBC,GACnBC,GAPkB,SACOP,IAArBC,EAAuCA,OACnBD,IAApBF,EAAsC,CAACA,GACpC,KASXU,GAAU,KAEFF,OADqBN,IAArBC,EACkBA,OACSD,IAApBF,EACW,CAACA,GAED,GACtB,GACD,CAACA,EAAiBG,IAuBrB,OACIQ,EAACC,EAAO,CACJxB,UAAWA,EACXG,GAAIA,EAAE,cACOQ,aACa,aAAdV,EAAwBwB,SAEpCF,EAACG,EAAgB,CACbb,MAAOM,EAAe,GACtBH,OAAQG,EACRQ,oBAAqBR,EAAe,GACpCS,aAAa,EACb1B,QAASA,EACTE,QAASA,EACTC,QAASA,EACTC,cAAeA,EACfC,uBAAwBA,EACxBC,wBAAyBA,EACzBC,QAASA,EACTC,yBAA0BA,EAC1BmB,SAtCUC,YAClBV,EAAkB,CAACU,IACG,UAAlB/B,EAAMG,UACQ,QAAd6B,EAAAhC,EAAMiC,gBAAQ,IAAAD,GAAAA,EAAAE,KAAAlC,EAAG+B,GACH,QAAdI,EAAAnC,EAAM8B,gBAAQ,IAAAK,GAAAA,EAAAD,KAAAlC,EAAG+B,GACrB,EAkCQE,SA/BeG,UACvBf,EAAkBe,GACI,UAAlBpC,EAAMG,UACQ,QAAd6B,EAAAhC,EAAMiC,gBAAQ,IAAAD,GAAAA,EAAAE,KAAAlC,EAAGoC,GACrB,EA4BQlB,cAAeA,EACfC,cAAeA,KAEb,EAcZM,EAAUY,EAAOC,GAAe;wBACdC,EAAQ;0BACNA,EAAQ;+BACHA,EAAQ;;;;MAIhCvC,IACC,GAAIA,EAAMwC,WACN,OAAOC,CAAG;0BACIC,EAAO,gBAAgBA,EAAOC,SAASC,EAAOC;iCACvCC,EAAW;;aAGpC;"}
|
package/cjs/badge/badge.style.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
"use strict";var e=require("styled-components"),r=require("../theme/index.js");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=t(e);const s=o.default.
|
|
1
|
+
"use strict";var e=require("styled-components"),r=require("../theme/index.js");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var o=t(e);const s=o.default.span`
|
|
2
2
|
${r=>r.$isOverlay&&e.css`
|
|
3
3
|
position: relative;
|
|
4
4
|
width: fit-content;
|
|
5
5
|
height: fit-content;
|
|
6
6
|
`}
|
|
7
|
-
`,i=o.default.
|
|
7
|
+
`,i=o.default.span`
|
|
8
8
|
${r=>r.$isOverlay&&e.css`
|
|
9
9
|
position: absolute;
|
|
10
10
|
top: 0;
|
|
@@ -12,17 +12,17 @@
|
|
|
12
12
|
transform: translate(50%, -25%)
|
|
13
13
|
${r.$offset?`translate(${r.$offset[0]},${r.$offset[1]})`:""};
|
|
14
14
|
`}
|
|
15
|
-
`,
|
|
15
|
+
`,a=e.css`
|
|
16
16
|
min-width: 1.25rem;
|
|
17
17
|
padding: 0.25rem 0.375rem;
|
|
18
18
|
font-size: ${r.Font.Spec["body-size-xs"]};
|
|
19
19
|
font-weight: ${r.Font.Spec["weight-bold"]};
|
|
20
20
|
line-height: 1;
|
|
21
|
-
`,
|
|
21
|
+
`,n=e.css`
|
|
22
22
|
border-radius: 50%;
|
|
23
23
|
width: 0.5rem;
|
|
24
24
|
height: 0.5rem;
|
|
25
|
-
`,
|
|
25
|
+
`,d=o.default.span`
|
|
26
26
|
background-color: ${({$color:e})=>"important"===e?r.Colour["icon-error"]:r.Colour["bg-primary"]};
|
|
27
27
|
color: ${r.Colour["text-inverse"]};
|
|
28
28
|
font-weight: ${r.Font.Spec["weight-bold"]};
|
|
@@ -32,19 +32,19 @@
|
|
|
32
32
|
|
|
33
33
|
width: fit-content;
|
|
34
34
|
${({$variant:t,$color:o})=>{switch(t){case"number":return e.css`
|
|
35
|
-
${
|
|
35
|
+
${a}
|
|
36
36
|
border-radius: ${r.Radius.full};
|
|
37
37
|
`;case"number-with-border":return e.css`
|
|
38
|
-
${
|
|
38
|
+
${a}
|
|
39
39
|
border-radius: ${r.Radius.full};
|
|
40
40
|
box-shadow: 0 0 0 ${r.Border["width-020"]} ${r.Colour.bg};
|
|
41
41
|
`;case"dot":return e.css`
|
|
42
|
-
${
|
|
42
|
+
${n}
|
|
43
43
|
`;case"dot-with-border":return e.css`
|
|
44
|
-
${
|
|
44
|
+
${n}
|
|
45
45
|
box-shadow: 0 0 0 ${r.Border["width-020"]} ${r.Colour.bg};
|
|
46
46
|
`;case"square-number":return e.css`
|
|
47
|
-
${
|
|
47
|
+
${a}
|
|
48
48
|
border-radius: ${r.Radius.sm};
|
|
49
49
|
padding: 0.25rem 0.4375rem;
|
|
50
50
|
${"default"===o&&e.css`
|
|
@@ -52,5 +52,5 @@
|
|
|
52
52
|
color: ${r.Colour["text-primary"]};
|
|
53
53
|
`}
|
|
54
54
|
`;default:return""}}};
|
|
55
|
-
`;exports.BadgeOverlay=s,exports.BadgeWrapper=i,exports.StyledBadge=
|
|
55
|
+
`;exports.BadgeOverlay=s,exports.BadgeWrapper=i,exports.StyledBadge=d;
|
|
56
56
|
//# sourceMappingURL=badge.style.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"badge.style.js","sources":["../../../src/badge/badge.style.tsx"],"sourcesContent":["import styled, { css } from \"styled-components\";\nimport { Border, Colour, Font, Radius } from \"../theme\";\nimport { BadgeProps } from \"./types\";\n\n// =============================================================================\n// STYLE INTERFACE, transient props are denoted with $\n// See more https://styled-components.com/docs/api#transient-props\n// =============================================================================\ninterface StyledBadgeProps {\n $variant: BadgeProps[\"variant\"];\n $color: BadgeProps[\"color\"];\n}\ninterface BadgeContainerProps {\n $isOverlay?: boolean;\n}\ninterface BadgeWrapperProps extends BadgeContainerProps {\n $offset?: [string, string];\n}\n\n// =============================================================================\n// STYLING\n// =============================================================================\nexport const BadgeOverlay = styled.
|
|
1
|
+
{"version":3,"file":"badge.style.js","sources":["../../../src/badge/badge.style.tsx"],"sourcesContent":["import styled, { css } from \"styled-components\";\nimport { Border, Colour, Font, Radius } from \"../theme\";\nimport { BadgeProps } from \"./types\";\n\n// =============================================================================\n// STYLE INTERFACE, transient props are denoted with $\n// See more https://styled-components.com/docs/api#transient-props\n// =============================================================================\ninterface StyledBadgeProps {\n $variant: BadgeProps[\"variant\"];\n $color: BadgeProps[\"color\"];\n}\ninterface BadgeContainerProps {\n $isOverlay?: boolean;\n}\ninterface BadgeWrapperProps extends BadgeContainerProps {\n $offset?: [string, string];\n}\n\n// =============================================================================\n// STYLING\n// =============================================================================\nexport const BadgeOverlay = styled.span<BadgeContainerProps>`\n ${(props) =>\n props.$isOverlay &&\n css`\n position: relative;\n width: fit-content;\n height: fit-content;\n `}\n`;\n\nexport const BadgeWrapper = styled.span<BadgeWrapperProps>`\n ${(props) =>\n props.$isOverlay &&\n css`\n position: absolute;\n top: 0;\n right: 0;\n transform: translate(50%, -25%)\n ${props.$offset\n ? `translate(${props.$offset[0]},${props.$offset[1]})`\n : \"\"};\n `}\n`;\n\nconst numberBadgeStyles = css`\n min-width: 1.25rem;\n padding: 0.25rem 0.375rem;\n font-size: ${Font.Spec[\"body-size-xs\"]};\n font-weight: ${Font.Spec[\"weight-bold\"]};\n line-height: 1;\n`;\n\nconst dotBadgeStyles = css`\n border-radius: 50%;\n width: 0.5rem;\n height: 0.5rem;\n`;\n\nexport const StyledBadge = styled.span<StyledBadgeProps>`\n background-color: ${({ $color }) =>\n $color === \"important\" ? Colour[\"icon-error\"] : Colour[\"bg-primary\"]};\n color: ${Colour[\"text-inverse\"]};\n font-weight: ${Font.Spec[\"weight-bold\"]};\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: fit-content;\n ${({ $variant, $color }) => {\n switch ($variant) {\n case \"number\":\n return css`\n ${numberBadgeStyles}\n border-radius: ${Radius.full};\n `;\n\n case \"number-with-border\":\n return css`\n ${numberBadgeStyles}\n border-radius: ${Radius.full};\n box-shadow: 0 0 0 ${Border[\"width-020\"]} ${Colour[\"bg\"]};\n `;\n\n case \"dot\":\n return css`\n ${dotBadgeStyles}\n `;\n\n case \"dot-with-border\":\n return css`\n ${dotBadgeStyles}\n box-shadow: 0 0 0 ${Border[\"width-020\"]} ${Colour[\"bg\"]};\n `;\n\n case \"square-number\":\n return css`\n ${numberBadgeStyles}\n border-radius: ${Radius.sm};\n padding: 0.25rem 0.4375rem;\n ${$color === \"default\" &&\n css`\n background-color: ${Colour[\"bg-primary-subtler\"]};\n color: ${Colour[\"text-primary\"]};\n `}\n `;\n\n default:\n return \"\";\n }\n }};\n`;\n"],"names":["BadgeOverlay","styled","span","props","$isOverlay","css","BadgeWrapper","$offset","numberBadgeStyles","Font","Spec","dotBadgeStyles","StyledBadge","$color","Colour","$variant","Radius","full","Border","sm"],"mappings":"kKAsBO,MAAMA,EAAeC,EAAAA,QAAOC,IAAyB;MACrDC,GACCA,EAAMC,YACNC,KAAG;;;;;EAOEC,EAAeL,EAAAA,QAAOC,IAAuB;MACnDC,GACCA,EAAMC,YACNC,KAAG;;;;;kBAKOF,EAAMI,QACF,aAAaJ,EAAMI,QAAQ,MAAMJ,EAAMI,QAAQ,MAC/C;;EAIhBC,EAAoBH,EAAAA,GAAG;;;iBAGZI,EAAAA,KAAKC,KAAK;mBACRD,EAAAA,KAAKC,KAAK;;EAIvBC,EAAiBN,EAAAA,GAAG;;;;EAMbO,EAAcX,EAAAA,QAAOC,IAAsB;wBAChC,EAAGW,YACR,cAAXA,EAAyBC,EAAAA,OAAO,cAAgBA,SAAO;aAClDA,EAAAA,OAAO;mBACDL,EAAAA,KAAKC,KAAK;;;;;;MAMvB,EAAGK,WAAUF,aACX,OAAQE,GACJ,IAAK,SACD,OAAOV,KAAG;sBACJG;qCACeQ,EAAAA,OAAOC;kBAGhC,IAAK,qBACD,OAAOZ,KAAG;sBACJG;qCACeQ,EAAAA,OAAOC;wCACJC,EAAAA,OAAO,gBAAgBJ,EAAAA,OAAW;kBAG9D,IAAK,MACD,OAAOT,KAAG;sBACJM;kBAGV,IAAK,kBACD,OAAON,KAAG;sBACJM;yCACmBO,EAAAA,OAAO,gBAAgBJ,EAAAA,OAAW;kBAG/D,IAAK,gBACD,OAAOT,KAAG;sBACJG;qCACeQ,EAAAA,OAAOG;;sBAEX,YAAXN,GACFR,KAAG;4CACqBS,EAAAA,OAAO;iCAClBA,EAAAA,OAAO;;kBAI5B,QACI,MAAO;"}
|
package/cjs/calendar/calendar.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
"use strict";var e=require("react/jsx-runtime"),a=require("react"),i=require("styled-components");require("../shared/internal-calendar/calendar-dropdown.js");var
|
|
2
|
-
--vertical-inset: ${
|
|
3
|
-
--horizontal-inset: ${
|
|
4
|
-
--header-bottom-spacing: ${
|
|
1
|
+
"use strict";var e=require("react/jsx-runtime"),a=require("react"),i=require("styled-components");require("../shared/internal-calendar/calendar-dropdown.js");var n=require("../shared/internal-calendar/internal-calendar.js"),r=require("../theme/index.js");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}const l=t(i).default.div`
|
|
2
|
+
--vertical-inset: ${r.Spacing["spacing-24"]};
|
|
3
|
+
--horizontal-inset: ${r.Spacing["spacing-32"]};
|
|
4
|
+
--header-bottom-spacing: ${r.Spacing["spacing-8"]};
|
|
5
5
|
|
|
6
6
|
width: 41rem;
|
|
7
7
|
|
|
8
8
|
${e=>{if(e.$hasBorder)return i.css`
|
|
9
|
-
border: ${
|
|
10
|
-
border-radius: ${
|
|
9
|
+
border: ${r.Border["width-010"]} ${r.Border.solid} ${r.Colour.border};
|
|
10
|
+
border-radius: ${r.Radius.lg};
|
|
11
11
|
overflow: hidden;
|
|
12
12
|
`}}
|
|
13
|
-
`;exports.Calendar=i=>{const{className:
|
|
13
|
+
`;exports.Calendar=i=>{const{className:r,styleType:t="bordered",variant:o="single",id:d,minDate:s,maxDate:c,disabledDates:u,allowDisabledSelection:v,showActiveMonthDaysOnly:h,onHover:m,onYearMonthDisplayChange:b,"data-testid":g}=i,p="multi"!==i.variant?i.value:void 0,D="multi"===i.variant?i.values:void 0,S="multi"===i.variant?i.minSelectable:void 0,y="multi"===i.variant?i.maxSelectable:void 0,[$,f]=a.useState((()=>void 0!==D?D:void 0!==p?[p]:[]));a.useEffect((()=>{f(void 0!==D?D:void 0!==p?[p]:[])}),[p,D]);return e.jsx(l,{className:r,id:d,"data-testid":g,$hasBorder:"bordered"===t,children:e.jsx(n.InternalCalendar,{value:$[0],values:$,initialCalendarDate:$[0],isFocusable:!0,variant:o,minDate:s,maxDate:c,disabledDates:u,allowDisabledSelection:v,showActiveMonthDaysOnly:h,onHover:m,onYearMonthDisplayChange:b,onSelect:e=>{var a,n;f([e]),"multi"!==i.variant&&(null===(a=i.onChange)||void 0===a||a.call(i,e),null===(n=i.onSelect)||void 0===n||n.call(i,e))},onChange:e=>{var a;f(e),"multi"===i.variant&&(null===(a=i.onChange)||void 0===a||a.call(i,e))},minSelectable:S,maxSelectable:y})})};
|
|
14
14
|
//# sourceMappingURL=calendar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar.js","sources":["../../../src/calendar/calendar.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport styled, { css } from \"styled-components\";\nimport { InternalCalendar } from \"../shared/internal-calendar\";\nimport { Border, Colour, Radius, Spacing } from \"../theme\";\nimport { CalendarProps } from \"./types\";\n\nexport const Calendar = (props: CalendarProps) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const {\n className,\n styleType = \"bordered\",\n variant,\n id,\n minDate,\n maxDate,\n disabledDates,\n allowDisabledSelection,\n showActiveMonthDaysOnly,\n onHover,\n onYearMonthDisplayChange,\n \"data-testid\": dataTestId,\n } = props;\n\n const controlledValue =\n props.variant !== \"multi\" ? props.value : undefined;\n const controlledValues =\n props.variant === \"multi\" ? props.values : undefined;\n const minSelectable =\n props.variant === \"multi\" ? props.minSelectable : undefined;\n const maxSelectable =\n props.variant === \"multi\" ? props.maxSelectable : undefined;\n\n const resolveValues = (): string[] => {\n if (controlledValues !== undefined) return controlledValues;\n if (controlledValue !== undefined) return [controlledValue];\n return [];\n };\n\n const [selectedValues, setSelectedValues] =\n useState<string[]>(resolveValues);\n\n // =============================================================================\n // EFFECTS\n // =============================================================================\n useEffect(() => {\n if (controlledValues !== undefined) {\n setSelectedValues(controlledValues);\n } else if (controlledValue !== undefined) {\n setSelectedValues([controlledValue]);\n } else {\n setSelectedValues([]);\n }\n }, [controlledValue, controlledValues]);\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleSelect = (date: string) => {\n setSelectedValues([date]);\n if (props.variant !== \"multi\") {\n props.onChange?.(date);\n props.onSelect?.(date);\n }\n };\n\n const handleMultiSelect = (nextValues: string[]) => {\n setSelectedValues(nextValues);\n if (props.variant === \"multi\") {\n props.onChange?.(nextValues);\n }\n };\n\n // =============================================================================\n // RENDER FUNCTION\n // =============================================================================\n return (\n <Wrapper\n className={className}\n id={id}\n data-testid={dataTestId}\n $hasBorder={styleType === \"bordered\"}\n >\n <InternalCalendar\n value={selectedValues[0]}\n values={selectedValues}\n initialCalendarDate={selectedValues[0]}\n isFocusable={true}\n variant={variant}\n minDate={minDate}\n maxDate={maxDate}\n disabledDates={disabledDates}\n allowDisabledSelection={allowDisabledSelection}\n showActiveMonthDaysOnly={showActiveMonthDaysOnly}\n onHover={onHover}\n onYearMonthDisplayChange={onYearMonthDisplayChange}\n onSelect={handleSelect}\n onChange={handleMultiSelect}\n minSelectable={minSelectable}\n maxSelectable={maxSelectable}\n />\n </Wrapper>\n );\n};\n\n// =============================================================================\n// STYLE INTERFACE\n// =============================================================================\ninterface StyleProps {\n $hasBorder?: boolean;\n}\n\n// =============================================================================\n// STYLING\n// =============================================================================\nconst Wrapper = styled.div<StyleProps>`\n --vertical-inset: ${Spacing[\"spacing-24\"]};\n --horizontal-inset: ${Spacing[\"spacing-32\"]};\n --header-bottom-spacing: ${Spacing[\"spacing-8\"]};\n\n width: 41rem;\n\n ${(props) => {\n if (props.$hasBorder) {\n return css`\n border: ${Border[\"width-010\"]} ${Border.solid} ${Colour.border};\n border-radius: ${Radius[\"lg\"]};\n overflow: hidden;\n `;\n }\n }}\n`;\n"],"names":["Wrapper","styled","div","Spacing","props","$hasBorder","css","Border","solid","Colour","border","Radius","className","styleType","variant","id","minDate","maxDate","disabledDates","allowDisabledSelection","showActiveMonthDaysOnly","onHover","onYearMonthDisplayChange","dataTestId","controlledValue","value","undefined","controlledValues","values","minSelectable","maxSelectable","selectedValues","setSelectedValues","useState","useEffect","_jsx","children","InternalCalendar","initialCalendarDate","isFocusable","onSelect","date","_a","onChange","call","_b","nextValues"],"mappings":"uUAMO,MA8GDA,OAAUC,QAAOC,GAAe;wBACdC,EAAAA,QAAQ;0BACNA,EAAAA,QAAQ;+BACHA,EAAAA,QAAQ;;;;MAIhCC,IACC,GAAIA,EAAMC,WACN,OAAOC,KAAG;0BACIC,EAAAA,OAAO,gBAAgBA,EAAAA,OAAOC,SAASC,EAAAA,OAAOC;iCACvCC,EAAAA,OAAW;;aAGpC;mBA5HiBP,IAIrB,MAAMQ,UACFA,EAASC,UACTA,EAAY,WAAUC,QACtBA,
|
|
1
|
+
{"version":3,"file":"calendar.js","sources":["../../../src/calendar/calendar.tsx"],"sourcesContent":["import { useEffect, useState } from \"react\";\nimport styled, { css } from \"styled-components\";\nimport { InternalCalendar } from \"../shared/internal-calendar\";\nimport { Border, Colour, Radius, Spacing } from \"../theme\";\nimport { CalendarProps } from \"./types\";\n\nexport const Calendar = (props: CalendarProps) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const {\n className,\n styleType = \"bordered\",\n variant = \"single\",\n id,\n minDate,\n maxDate,\n disabledDates,\n allowDisabledSelection,\n showActiveMonthDaysOnly,\n onHover,\n onYearMonthDisplayChange,\n \"data-testid\": dataTestId,\n } = props;\n\n const controlledValue =\n props.variant !== \"multi\" ? props.value : undefined;\n const controlledValues =\n props.variant === \"multi\" ? props.values : undefined;\n const minSelectable =\n props.variant === \"multi\" ? props.minSelectable : undefined;\n const maxSelectable =\n props.variant === \"multi\" ? props.maxSelectable : undefined;\n\n const resolveValues = (): string[] => {\n if (controlledValues !== undefined) return controlledValues;\n if (controlledValue !== undefined) return [controlledValue];\n return [];\n };\n\n const [selectedValues, setSelectedValues] =\n useState<string[]>(resolveValues);\n\n // =============================================================================\n // EFFECTS\n // =============================================================================\n useEffect(() => {\n if (controlledValues !== undefined) {\n setSelectedValues(controlledValues);\n } else if (controlledValue !== undefined) {\n setSelectedValues([controlledValue]);\n } else {\n setSelectedValues([]);\n }\n }, [controlledValue, controlledValues]);\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleSelect = (date: string) => {\n setSelectedValues([date]);\n if (props.variant !== \"multi\") {\n props.onChange?.(date);\n props.onSelect?.(date);\n }\n };\n\n const handleMultiSelect = (nextValues: string[]) => {\n setSelectedValues(nextValues);\n if (props.variant === \"multi\") {\n props.onChange?.(nextValues);\n }\n };\n\n // =============================================================================\n // RENDER FUNCTION\n // =============================================================================\n return (\n <Wrapper\n className={className}\n id={id}\n data-testid={dataTestId}\n $hasBorder={styleType === \"bordered\"}\n >\n <InternalCalendar\n value={selectedValues[0]}\n values={selectedValues}\n initialCalendarDate={selectedValues[0]}\n isFocusable={true}\n variant={variant}\n minDate={minDate}\n maxDate={maxDate}\n disabledDates={disabledDates}\n allowDisabledSelection={allowDisabledSelection}\n showActiveMonthDaysOnly={showActiveMonthDaysOnly}\n onHover={onHover}\n onYearMonthDisplayChange={onYearMonthDisplayChange}\n onSelect={handleSelect}\n onChange={handleMultiSelect}\n minSelectable={minSelectable}\n maxSelectable={maxSelectable}\n />\n </Wrapper>\n );\n};\n\n// =============================================================================\n// STYLE INTERFACE\n// =============================================================================\ninterface StyleProps {\n $hasBorder?: boolean;\n}\n\n// =============================================================================\n// STYLING\n// =============================================================================\nconst Wrapper = styled.div<StyleProps>`\n --vertical-inset: ${Spacing[\"spacing-24\"]};\n --horizontal-inset: ${Spacing[\"spacing-32\"]};\n --header-bottom-spacing: ${Spacing[\"spacing-8\"]};\n\n width: 41rem;\n\n ${(props) => {\n if (props.$hasBorder) {\n return css`\n border: ${Border[\"width-010\"]} ${Border.solid} ${Colour.border};\n border-radius: ${Radius[\"lg\"]};\n overflow: hidden;\n `;\n }\n }}\n`;\n"],"names":["Wrapper","styled","div","Spacing","props","$hasBorder","css","Border","solid","Colour","border","Radius","className","styleType","variant","id","minDate","maxDate","disabledDates","allowDisabledSelection","showActiveMonthDaysOnly","onHover","onYearMonthDisplayChange","dataTestId","controlledValue","value","undefined","controlledValues","values","minSelectable","maxSelectable","selectedValues","setSelectedValues","useState","useEffect","_jsx","children","InternalCalendar","initialCalendarDate","isFocusable","onSelect","date","_a","onChange","call","_b","nextValues"],"mappings":"uUAMO,MA8GDA,OAAUC,QAAOC,GAAe;wBACdC,EAAAA,QAAQ;0BACNA,EAAAA,QAAQ;+BACHA,EAAAA,QAAQ;;;;MAIhCC,IACC,GAAIA,EAAMC,WACN,OAAOC,KAAG;0BACIC,EAAAA,OAAO,gBAAgBA,EAAAA,OAAOC,SAASC,EAAAA,OAAOC;iCACvCC,EAAAA,OAAW;;aAGpC;mBA5HiBP,IAIrB,MAAMQ,UACFA,EAASC,UACTA,EAAY,WAAUC,QACtBA,EAAU,SAAQC,GAClBA,EAAEC,QACFA,EAAOC,QACPA,EAAOC,cACPA,EAAaC,uBACbA,EAAsBC,wBACtBA,EAAuBC,QACvBA,EAAOC,yBACPA,EACA,cAAeC,GACfnB,EAEEoB,EACgB,UAAlBpB,EAAMU,QAAsBV,EAAMqB,WAAQC,EACxCC,EACgB,UAAlBvB,EAAMU,QAAsBV,EAAMwB,YAASF,EACzCG,EACgB,UAAlBzB,EAAMU,QAAsBV,EAAMyB,mBAAgBH,EAChDI,EACgB,UAAlB1B,EAAMU,QAAsBV,EAAM0B,mBAAgBJ,GAQ/CK,EAAgBC,GACnBC,EAAAA,UAPkB,SACOP,IAArBC,EAAuCA,OACnBD,IAApBF,EAAsC,CAACA,GACpC,KASXU,EAAAA,WAAU,KAEFF,OADqBN,IAArBC,EACkBA,OACSD,IAApBF,EACW,CAACA,GAED,GACtB,GACD,CAACA,EAAiBG,IAuBrB,OACIQ,MAACnC,EAAO,CACJY,UAAWA,EACXG,GAAIA,EAAE,cACOQ,aACa,aAAdV,EAAwBuB,SAEpCD,EAAAA,IAACE,EAAAA,iBAAgB,CACbZ,MAAOM,EAAe,GACtBH,OAAQG,EACRO,oBAAqBP,EAAe,GACpCQ,aAAa,EACbzB,QAASA,EACTE,QAASA,EACTC,QAASA,EACTC,cAAeA,EACfC,uBAAwBA,EACxBC,wBAAyBA,EACzBC,QAASA,EACTC,yBAA0BA,EAC1BkB,SAtCUC,YAClBT,EAAkB,CAACS,IACG,UAAlBrC,EAAMU,UACQ,QAAd4B,EAAAtC,EAAMuC,gBAAQ,IAAAD,GAAAA,EAAAE,KAAAxC,EAAGqC,GACH,QAAdI,EAAAzC,EAAMoC,gBAAQ,IAAAK,GAAAA,EAAAD,KAAAxC,EAAGqC,GACrB,EAkCQE,SA/BeG,UACvBd,EAAkBc,GACI,UAAlB1C,EAAMU,UACQ,QAAd4B,EAAAtC,EAAMuC,gBAAQ,IAAAD,GAAAA,EAAAE,KAAAxC,EAAG0C,GACrB,EA4BQjB,cAAeA,EACfC,cAAeA,KAEb"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("../_virtual/_tslib.js"),t=require("react/jsx-runtime"),r=require("@lifesg/react-icons"),i=require("react"),n=require("../external/react-intersection-observer/index.js"),l=require("../external/react-resize-detector/build/index.esm.js");require("../animations/loading-spinner/loading-spinner.js"),require("../animations/loading-dots/loading-dots.js");var s=require("../animations/loading-dots-spinner/loading-dots-spinner.js");require("styled-components");var
|
|
1
|
+
"use strict";var e=require("../_virtual/_tslib.js"),t=require("react/jsx-runtime"),r=require("@lifesg/react-icons"),i=require("react"),n=require("../external/react-intersection-observer/index.js"),l=require("../external/react-resize-detector/build/index.esm.js");require("../animations/loading-spinner/loading-spinner.js"),require("../animations/loading-dots/loading-dots.js");var s=require("../animations/loading-dots-spinner/loading-dots-spinner.js");require("styled-components");var a=require("../checkbox/checkbox.js"),o=require("../error-display/error-display.js");require("../error-display/helper.js");var d=require("../shared/accessibility/index.js"),c=require("../typography/typography.js");require("../util/calendar-helper.js"),require("../util/date-helper.js"),require("../util/date-input-helper.js");var u=require("../util/simple-id-generator.js");require("../util/string-helper.js"),require("@react-aria/live-announcer");var h=require("../util/use-event-listener.js"),p=require("./data-table.styles.js");exports.DataTable=g=>{var{id:b,headers:y,rows:x,className:j,sortIndicators:f,alternatingRows:w,loadState:m="success",enableMultiSelect:C,selectedIds:$,disabledIds:v,enableActionBar:S,enableSelectAll:k,enableStickyHeader:B,emptyView:q,actionBarContent:H,renderCustomEmptyView:R,onHeaderClick:I,onSelect:A,onSelectAll:T,onClearSelectionClick:D}=g,E=e.__rest(g,["id","headers","rows","className","sortIndicators","alternatingRows","loadState","enableMultiSelect","selectedIds","disabledIds","enableActionBar","enableSelectAll","enableStickyHeader","emptyView","actionBarContent","renderCustomEmptyView","onHeaderClick","onSelect","onSelectAll","onClearSelectionClick"]);const V=i.useRef(null),W=i.useRef(null),L=i.useRef(null),N=i.useRef(null),K=i.useRef(null),M=u.useId(),_=y.filter((e=>"string"!=typeof e&&!!e.keyColumn)),[z,F]=i.useState(!1),[Y,O]=i.useState(!1),[P,U]=i.useState(!1),[G,J]=i.useState(!1),[Q,X]=i.useState(!1),{ref:Z,inView:ee}=n.useInView(),te=i.useCallback((()=>{if(!K.current||!N.current)return;const e=K.current.scrollHeight>K.current.clientHeight;F(e),e?N.current.style.transform="translateY(0)":ge()}),[]);i.useEffect((()=>{te()}),[]),l.useResizeDetector({onResize:te});h.useEventListener("scroll",(()=>{requestAnimationFrame((()=>{z?pe():ge()})),K.current&&U(K.current.getBoundingClientRect().bottom<=window.innerHeight)}),"window"),i.useEffect((()=>{be()}),[x]);const re=()=>!!(x&&x.length&&$)&&$.length===x.length,ie=e=>!!(null==$?void 0:$.includes(e)),ne=e=>!!w&&e%2==1,le=e=>!!(null==v?void 0:v.includes(e)),se=e=>{if(E["data-testid"])return`${E["data-testid"]}-${e}`},ae=()=>y.length+(C?1:0),oe=e=>null==f?void 0:f[e],de=e=>{const t=oe(e);if(t)return"asc"===t?"ascending":"descending"},ce=e=>` by ${"asc"===oe(e)?"descending":"ascending"} order`,ue=(e,t)=>`${M}-row-${e}-${t}-key-column`,he=e=>{const t=_.map((t=>ue(e,t.fieldKey)));return d.concatIds(...t)},pe=()=>{if(!K.current)return;const e=K.current.getBoundingClientRect();J(e.bottom>window.innerHeight+30&&e.top<window.innerHeight-200)},ge=()=>{if(!(V.current&&W.current&&K.current&&N.current&&L.current))return;const e=W.current.getBoundingClientRect();if(e.top>window.innerHeight){const t=e.bottom-window.innerHeight,r=V.current.getBoundingClientRect().height-L.current.clientHeight-32,i=Math.min(t,r);N.current.style.transform=`translateY(-${i}px)`}else N.current.style.transform="translateY(0)"},be=()=>{V.current&&K.current&&X(V.current.clientHeight+(S?56:0)<K.current.clientHeight)},ye=e=>{const{fieldKey:r,label:i,clickable:n=!1,style:l}="string"==typeof e?{fieldKey:e,label:e,style:void 0}:e,s=!!oe(r),a=(e=>`${M}-header-${e}`)(r);return t.jsxs(p.HeaderCell,{"data-testid":se(`header-${r}`),$clickable:n,scope:"col","aria-sort":de(r),style:l,$isCheckbox:!1,onClick:()=>(e=>{null==I||I(e)})(r),children:[t.jsxs(p.HeaderCellWrapper,{id:a,children:["string"==typeof i?t.jsx(c.Typography.BodyBL,{weight:"bold",children:i}):i,xe(r)]}),(n||s)&&t.jsx(d.VisuallyHidden,{children:t.jsxs("button",{onClick:e=>((e,t)=>{e.stopPropagation(),null==I||I(t)})(e,r),children:[s&&"Sort ",t.jsx("span",{"aria-labelledby":a}),s&&ce(r)]})})]},r)},xe=e=>{const i=null==f?void 0:f[e];return i?"asc"===i?t.jsx(r.ArrowUpIcon,{"aria-hidden":!0,"data-testid":se(`header-${e}-arrowup`)}):t.jsx(r.ArrowDownIcon,{"aria-hidden":!0,"data-testid":se(`header-${e}-arrowdown`)}):t.jsx(t.Fragment,{})},je=()=>t.jsx(p.HeaderCell,{"data-testid":se("header-selection"),$clickable:!1,$isCheckbox:!0,scope:"col",children:t.jsxs(p.CheckBoxWrapper,{children:[t.jsx(d.VisuallyHidden,{children:"Row selection"}),k&&t.jsx(a.Checkbox,{checked:re(),indeterminate:!!$&&0!==$.length&&!re(),disabled:!x||!x.length||!$,"aria-label":"Select all rows",onClick:()=>{T&&T(re())}})]})}),fe=(e,r)=>{const i="string"!=typeof e?e.style:void 0,n="string"==typeof e?e:e.fieldKey,l=r.id.toString(),s=r[n],a=`${l}-${n}`;return t.jsx(p.BodyCell,{"data-testid":se(`row-${a}`),id:ue(l,n),style:i,$isCheckbox:!1,children:"string"==typeof s||"number"==typeof s?t.jsx(p.BodyCellContent,{children:s}):"function"==typeof s?s(r,{isSelected:ie(l)}):s},a)},we=e=>{const r=e.id.toString();return t.jsx(p.BodyCell,{"data-testid":se(`row-${r}-selection`),$isCheckbox:!0,children:t.jsx(p.CheckBoxWrapper,{children:t.jsx(a.Checkbox,{checked:ie(r),"aria-labelledby":he(r),onClick:()=>{A&&A(r,!ie(r))},disabled:le(r),focusableWhenDisabled:le(r)})})})},me=()=>t.jsx(o.ErrorDisplay,Object.assign({type:"no-item-found"},q,{title:(null==q?void 0:q.title)?"string"==typeof q.title?t.jsx(p.ErrorDisplayTitle,{weight:"bold",children:q.title}):q.title:t.jsx(p.ErrorDisplayTitle,{weight:"bold",children:"No <items> found"}),description:(null==q?void 0:q.description)?q.description:"No matching rows"}));return t.jsxs(p.TableWrapper,{id:b||"table-wrapper","data-testid":E["data-testid"]||"table",className:j,ref:K,onScroll:()=>{z&&K.current&&O(K.current.scrollTop+K.current.clientHeight>=K.current.scrollHeight)},tabIndex:0,children:[t.jsx(p.TableContainer,{children:t.jsxs(p.Table,{$end:P,$scrollable:z,ref:V,$stickyHeader:B,children:[t.jsx("thead",{ref:L,children:t.jsxs(p.HeaderRow,{children:[C&&je(),y.map(ye)]})}),t.jsx(p.TableBody,{$showLastRowBottomBorder:Q,children:"success"===m?!x||x.length<1?t.jsx(p.BodyRow,{$alternating:!1,children:t.jsx(p.EmptyViewCell,{colSpan:ae(),children:R?R():me()})}):t.jsx(t.Fragment,{children:null==x?void 0:x.map(((e,r)=>t.jsxs(p.BodyRow,{"data-testid":se(`row-${e.id.toString()}`),$alternating:ne(r),$isSelectable:C,$isSelected:ie(e.id.toString()),children:[C&&we(e),y.map((t=>fe(t,e)))]},e.id.toString())))}):t.jsx(p.BodyRow,{$alternating:!1,children:t.jsx("td",{colSpan:ae(),children:t.jsx(p.LoaderWrapper,{role:"status","aria-live":"polite","aria-label":"Loading table",children:"loading"===m&&t.jsx(s.LoadingDotsSpinner,{})})})})})]})}),S&&$&&$.length>0&&(()=>{var e,r,i,n;const l=null!==(e=null==$?void 0:$.length)&&void 0!==e?e:0;return t.jsx(p.ActionBarWrapper,{ref:N,$fixed:G,$left:null===(i=null===(r=null==V?void 0:V.current)||void 0===r?void 0:r.getBoundingClientRect())||void 0===i?void 0:i.left,$width:null===(n=null==V?void 0:V.current)||void 0===n?void 0:n.clientWidth,children:t.jsxs(p.ActionBar,{$float:(z?!Y:!ee)||G,$scrollable:z,children:[t.jsx(c.Typography.BodyMD,{weight:"semibold",children:`${l} item${l>1?"s":""} selected`}),t.jsx(p.TextButton,{type:"button","aria-label":`Clear selection of ${l} item${1===l?"":"s"}`,onClick:D,children:"Clear selection"}),H]})})})(),t.jsx("div",{ref:e=>{W.current=e,Z(e)}})]})};
|
|
2
2
|
//# sourceMappingURL=data-table.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-table.js","sources":["../../../src/data-table/data-table.tsx"],"sourcesContent":["import { ArrowDownIcon, ArrowUpIcon } from \"@lifesg/react-icons\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useInView } from \"react-intersection-observer\";\nimport { useResizeDetector } from \"react-resize-detector\";\nimport { LoadingDotsSpinner } from \"../animations\";\nimport { Checkbox } from \"../checkbox\";\nimport { ErrorDisplay } from \"../error-display\";\nimport { VisuallyHidden, concatIds } from \"../shared/accessibility\";\nimport { Typography } from \"../typography\";\nimport { useId } from \"../util\";\nimport { useEventListener } from \"../util/use-event-listener\";\nimport {\n ActionBar,\n ActionBarWrapper,\n BodyCell,\n BodyCellContent,\n BodyRow,\n CheckBoxWrapper,\n EmptyViewCell,\n ErrorDisplayTitle,\n HeaderCell,\n HeaderCellWrapper,\n HeaderRow,\n LoaderWrapper,\n Table,\n TableBody,\n TableContainer,\n TableWrapper,\n TextButton,\n} from \"./data-table.styles\";\nimport { DataTableProps, HeaderProps, RowProps } from \"./types\";\n\nexport const DataTable = ({\n id,\n headers,\n rows,\n className,\n sortIndicators,\n alternatingRows,\n loadState = \"success\",\n enableMultiSelect,\n selectedIds,\n disabledIds,\n enableActionBar,\n enableSelectAll,\n enableStickyHeader,\n emptyView,\n actionBarContent,\n renderCustomEmptyView,\n onHeaderClick,\n onSelect,\n onSelectAll,\n onClearSelectionClick,\n ...otherProps\n}: DataTableProps) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const tableRef = useRef<HTMLTableElement>(null);\n const tableEndRef = useRef<HTMLDivElement | null>(null);\n const headerRef = useRef<HTMLTableSectionElement>(null);\n const actionBarRef = useRef<HTMLDivElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const internalId = useId();\n const keyColumns = headers.filter(\n (header): header is Exclude<HeaderProps, string> => {\n return typeof header !== \"string\" && !!header.keyColumn;\n }\n );\n\n const [scrollable, setScrollable] = useState(false);\n const [scrollEnd, setScrollEnd] = useState(false);\n const [tableEnd, setTableEnd] = useState(false);\n const [isFloatingActionBar, setIsFloatingActionBar] = useState(false);\n const [showLastBorder, setShowLastBorder] = useState(false);\n\n const { ref: endRef, inView: end } = useInView();\n\n // =============================================================================\n // EFFECTS, EVENT LISTENERS\n // ============================================================================\n const onResize = useCallback(() => {\n if (!wrapperRef.current || !actionBarRef.current) {\n return;\n }\n const scrollable =\n wrapperRef.current.scrollHeight > wrapperRef.current.clientHeight;\n setScrollable(scrollable);\n\n if (scrollable) {\n actionBarRef.current.style.transform = `translateY(0)`;\n } else {\n calculateStickyInViewport();\n }\n }, []);\n\n useEffect(() => {\n onResize();\n }, []);\n\n useResizeDetector({ onResize });\n\n const scrollHandler = () => {\n requestAnimationFrame(() => {\n if (scrollable) {\n calculateFixedInViewport();\n } else {\n calculateStickyInViewport();\n }\n });\n\n if (wrapperRef.current) {\n setTableEnd(\n wrapperRef.current.getBoundingClientRect().bottom <=\n window.innerHeight\n );\n }\n };\n\n useEventListener(\"scroll\", scrollHandler, \"window\");\n\n useEffect(() => {\n checkLastBorder();\n }, [rows]);\n\n // ===========================================================================\n // HELPER FUNCTIONS\n // ===========================================================================\n const isAllCheckboxSelected = (): boolean => {\n return selectedIds?.length === rows?.length;\n };\n\n const isIndeterminateCheckbox = (): boolean => {\n return (\n !!selectedIds &&\n selectedIds.length !== 0 &&\n !isAllCheckboxSelected()\n );\n };\n\n const isRowSelected = (rowId: string): boolean => {\n return !!selectedIds?.includes(rowId);\n };\n\n const isAlternatingRow = (index: number): boolean => {\n return !!alternatingRows && index % 2 === 1;\n };\n\n const isDisabledRow = (rowId: string): boolean => {\n return !!disabledIds?.includes(rowId);\n };\n\n const getDataTestId = (subStr: string) => {\n if (!otherProps[\"data-testid\"]) return undefined;\n return `${otherProps[\"data-testid\"]}-${subStr}`;\n };\n\n const getTotalColumns = (): number => {\n return headers.length + (enableMultiSelect ? 1 : 0);\n };\n\n const getSortDirection = (fieldKey: string) => {\n return sortIndicators?.[fieldKey];\n };\n\n const getHeaderAriaSort = (fieldKey: string) => {\n const sortDirection = getSortDirection(fieldKey);\n\n if (!sortDirection) {\n return undefined;\n }\n\n return sortDirection === \"asc\" ? \"ascending\" : \"descending\";\n };\n\n const getSortButtonAriaLabel = (fieldKey: string) => {\n const nextSortDirection =\n getSortDirection(fieldKey) === \"asc\" ? \"descending\" : \"ascending\";\n\n return ` by ${nextSortDirection} order`;\n };\n\n const getHeaderWrapperId = (fieldKey: string) => {\n return `${internalId}-header-${fieldKey}`;\n };\n const getCellId = (rowId: string, fieldKey: string) => {\n return `${internalId}-row-${rowId}-${fieldKey}-key-column`;\n };\n\n const getRowCheckboxAriaLabelledBy = (rowId: string) => {\n const keyColumnIds = keyColumns.map((header) =>\n getCellId(rowId, header.fieldKey)\n );\n\n return concatIds(...keyColumnIds);\n };\n\n const calculateFixedInViewport = () => {\n if (!wrapperRef.current) {\n return;\n }\n const wrapperBounds = wrapperRef.current.getBoundingClientRect();\n setIsFloatingActionBar(\n wrapperBounds.bottom > window.innerHeight + 30 &&\n wrapperBounds.top < window.innerHeight - 200\n );\n };\n\n const calculateStickyInViewport = () => {\n if (\n !tableRef.current ||\n !tableEndRef.current ||\n !wrapperRef.current ||\n !actionBarRef.current ||\n !headerRef.current\n ) {\n return;\n }\n\n const endBounds = tableEndRef.current.getBoundingClientRect();\n\n if (endBounds.top > window.innerHeight) {\n const bottomOffset = endBounds.bottom - window.innerHeight;\n const bottomToHeaderOffset =\n tableRef.current.getBoundingClientRect().height -\n headerRef.current.clientHeight -\n 32;\n const maxBottomOffset = Math.min(\n bottomOffset,\n bottomToHeaderOffset\n );\n\n actionBarRef.current.style.transform = `translateY(-${maxBottomOffset}px)`;\n } else {\n actionBarRef.current.style.transform = `translateY(0)`;\n }\n };\n\n const checkLastBorder = () => {\n if (!tableRef.current || !wrapperRef.current) {\n return;\n }\n // 56 pixels added due to the behavior of action bar\n setShowLastBorder(\n tableRef.current.clientHeight + (enableActionBar ? 56 : 0) <\n wrapperRef.current.clientHeight\n );\n };\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleHeaderClick = (fieldKey: string) => {\n onHeaderClick?.(fieldKey);\n };\n\n const handleHeaderButtonClick = (\n event: React.MouseEvent<HTMLButtonElement>,\n fieldKey: string\n ) => {\n event.stopPropagation();\n onHeaderClick?.(fieldKey);\n };\n\n // =============================================================================\n // RENDER FUNCTIONS\n // =============================================================================\n const renderHeaders = () => (\n <thead ref={headerRef}>\n <HeaderRow>\n {enableMultiSelect && renderHeaderCheckBox()}\n {headers.map(renderHeaderCell)}\n </HeaderRow>\n </thead>\n );\n\n const renderHeaderCell = (header: HeaderProps) => {\n const {\n fieldKey,\n label,\n clickable = false,\n style,\n } = typeof header === \"string\"\n ? {\n fieldKey: header,\n label: header,\n style: undefined,\n }\n : header;\n\n const isSortable = !!getSortDirection(fieldKey);\n const headerCellWrapperId = getHeaderWrapperId(fieldKey);\n\n return (\n <HeaderCell\n data-testid={getDataTestId(`header-${fieldKey}`)}\n key={fieldKey}\n $clickable={clickable}\n scope=\"col\"\n aria-sort={getHeaderAriaSort(fieldKey)}\n style={style}\n $isCheckbox={false}\n onClick={() => handleHeaderClick(fieldKey)}\n >\n <HeaderCellWrapper id={headerCellWrapperId}>\n {typeof label === \"string\" ? (\n <Typography.BodyBL weight=\"bold\">\n {label}\n </Typography.BodyBL>\n ) : (\n label\n )}\n {renderSortedArrow(fieldKey)}\n </HeaderCellWrapper>\n {(clickable || isSortable) && (\n <VisuallyHidden>\n <button\n onClick={(event) =>\n handleHeaderButtonClick(event, fieldKey)\n }\n >\n {isSortable && \"Sort \"}\n <span aria-labelledby={headerCellWrapperId} />\n {isSortable && getSortButtonAriaLabel(fieldKey)}\n </button>\n </VisuallyHidden>\n )}\n </HeaderCell>\n );\n };\n\n const renderSortedArrow = (fieldKey: string) => {\n const isSorted = sortIndicators?.[fieldKey];\n\n if (!isSorted) {\n return <></>;\n }\n if (isSorted === \"asc\") {\n return (\n <ArrowUpIcon\n aria-hidden\n data-testid={getDataTestId(`header-${fieldKey}-arrowup`)}\n />\n );\n }\n return (\n <ArrowDownIcon\n aria-hidden\n data-testid={getDataTestId(`header-${fieldKey}-arrowdown`)}\n />\n );\n };\n\n const renderHeaderCheckBox = () => {\n return (\n <HeaderCell\n data-testid={getDataTestId(\"header-selection\")}\n $clickable={false}\n $isCheckbox={true}\n scope=\"col\"\n >\n <CheckBoxWrapper>\n <VisuallyHidden>Row selection</VisuallyHidden>\n {enableSelectAll && (\n <Checkbox\n checked={isAllCheckboxSelected()}\n indeterminate={isIndeterminateCheckbox()}\n aria-label=\"Select all rows\"\n onClick={() => {\n if (onSelectAll) {\n onSelectAll(isAllCheckboxSelected());\n }\n }}\n />\n )}\n </CheckBoxWrapper>\n </HeaderCell>\n );\n };\n\n const renderRows = () => {\n return !rows || rows.length < 1 ? (\n <tr>\n <EmptyViewCell colSpan={getTotalColumns()}>\n {renderCustomEmptyView\n ? renderCustomEmptyView()\n : renderBasicEmptyView()}\n </EmptyViewCell>\n </tr>\n ) : (\n <>\n {rows?.map((row: RowProps, index: number) => (\n <BodyRow\n data-testid={getDataTestId(`row-${row.id.toString()}`)}\n key={row.id.toString()}\n $alternating={isAlternatingRow(index)}\n $isSelectable={enableMultiSelect}\n $isSelected={isRowSelected(row.id.toString())}\n >\n {enableMultiSelect && renderRowCheckBox(row)}\n\n {headers.map((header) => renderRowCell(header, row))}\n </BodyRow>\n ))}\n </>\n );\n };\n\n const renderRowCell = (header: HeaderProps, row: RowProps) => {\n const style = typeof header !== \"string\" ? header.style : undefined;\n const fieldKey = typeof header === \"string\" ? header : header.fieldKey;\n const rowId = row.id.toString();\n const cellData = row[fieldKey];\n const cellId = `${rowId}-${fieldKey}`;\n\n return (\n <BodyCell\n data-testid={getDataTestId(`row-${cellId}`)}\n key={cellId}\n id={getCellId(rowId, fieldKey)}\n style={style}\n $isCheckbox={false}\n >\n {typeof cellData === \"string\" ||\n typeof cellData === \"number\" ? (\n <BodyCellContent>{cellData}</BodyCellContent>\n ) : typeof cellData === \"function\" ? (\n cellData(row, { isSelected: isRowSelected(rowId) })\n ) : (\n cellData\n )}\n </BodyCell>\n );\n };\n\n const renderRowCheckBox = (row: RowProps) => {\n const rowId = row.id.toString();\n\n return (\n <BodyCell\n data-testid={getDataTestId(`row-${rowId}-selection`)}\n $isCheckbox={true}\n >\n <CheckBoxWrapper>\n <Checkbox\n checked={isRowSelected(rowId)}\n aria-labelledby={getRowCheckboxAriaLabelledBy(rowId)}\n onClick={() => {\n if (onSelect) {\n onSelect(rowId, !isRowSelected(rowId));\n }\n }}\n disabled={isDisabledRow(rowId)}\n focusableWhenDisabled={isDisabledRow(rowId)}\n />\n </CheckBoxWrapper>\n </BodyCell>\n );\n };\n\n const renderBasicEmptyView = () => {\n return (\n <ErrorDisplay\n type={\"no-item-found\"}\n {...emptyView}\n title={\n emptyView?.title ? (\n typeof emptyView.title === \"string\" ? (\n <ErrorDisplayTitle weight=\"bold\">\n {emptyView.title}\n </ErrorDisplayTitle>\n ) : (\n emptyView.title\n )\n ) : (\n <ErrorDisplayTitle weight=\"bold\">\n {\"No <items> found\"}\n </ErrorDisplayTitle>\n )\n }\n description={\n emptyView?.description\n ? emptyView.description\n : \"No matching rows\"\n }\n />\n );\n };\n\n const renderLoader = () => {\n return (\n <tr>\n <td colSpan={getTotalColumns()}>\n <LoaderWrapper\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"Loading table\"\n >\n {loadState === \"loading\" && <LoadingDotsSpinner />}\n </LoaderWrapper>\n </td>\n </tr>\n );\n };\n\n const renderSelectionBar = () => {\n const count = selectedIds?.length ?? 0;\n\n return (\n <ActionBarWrapper\n ref={actionBarRef}\n $fixed={isFloatingActionBar}\n $left={tableRef?.current?.getBoundingClientRect()?.left}\n $width={tableRef?.current?.clientWidth}\n >\n <ActionBar\n $float={\n (scrollable ? !scrollEnd : !end) || isFloatingActionBar\n }\n $scrollable={scrollable}\n >\n <Typography.BodyMD weight=\"semibold\">{`${count} item${\n count > 1 ? \"s\" : \"\"\n } selected`}</Typography.BodyMD>\n <TextButton\n type=\"button\"\n aria-label={`Clear selection of ${count} item${\n count === 1 ? \"\" : \"s\"\n }`}\n onClick={onClearSelectionClick}\n >\n Clear selection\n </TextButton>\n {actionBarContent}\n </ActionBar>\n </ActionBarWrapper>\n );\n };\n\n return (\n <TableWrapper\n id={id || \"table-wrapper\"}\n data-testid={otherProps[\"data-testid\"] || \"table\"}\n className={className}\n ref={wrapperRef}\n onScroll={() => {\n if (scrollable && wrapperRef.current) {\n setScrollEnd(\n wrapperRef.current.scrollTop +\n wrapperRef.current.clientHeight >=\n wrapperRef.current.scrollHeight\n );\n }\n }}\n tabIndex={0} // scrollable container must be focusable to support keyboard users\n >\n <TableContainer>\n <Table\n $end={tableEnd}\n $scrollable={scrollable}\n ref={tableRef}\n $stickyHeader={enableStickyHeader}\n >\n {renderHeaders()}\n <TableBody $showLastRowBottomBorder={showLastBorder}>\n {loadState === \"success\"\n ? renderRows()\n : renderLoader()}\n </TableBody>\n </Table>\n </TableContainer>\n {enableActionBar &&\n selectedIds &&\n selectedIds.length > 0 &&\n renderSelectionBar()}\n <div\n ref={(r) => {\n tableEndRef.current = r;\n endRef(r);\n }}\n />\n </TableWrapper>\n );\n};\n"],"names":["_a","id","headers","rows","className","sortIndicators","alternatingRows","loadState","enableMultiSelect","selectedIds","disabledIds","enableActionBar","enableSelectAll","enableStickyHeader","emptyView","actionBarContent","renderCustomEmptyView","onHeaderClick","onSelect","onSelectAll","onClearSelectionClick","otherProps","__rest","tableRef","useRef","tableEndRef","headerRef","actionBarRef","wrapperRef","internalId","useId","keyColumns","filter","header","keyColumn","scrollable","setScrollable","useState","scrollEnd","setScrollEnd","tableEnd","setTableEnd","isFloatingActionBar","setIsFloatingActionBar","showLastBorder","setShowLastBorder","ref","endRef","inView","end","useInView","onResize","useCallback","current","scrollHeight","clientHeight","style","transform","calculateStickyInViewport","useEffect","useResizeDetector","useEventListener","requestAnimationFrame","calculateFixedInViewport","getBoundingClientRect","bottom","window","innerHeight","checkLastBorder","isAllCheckboxSelected","length","isRowSelected","rowId","includes","isAlternatingRow","index","isDisabledRow","getDataTestId","subStr","getTotalColumns","getSortDirection","fieldKey","getHeaderAriaSort","sortDirection","getSortButtonAriaLabel","getCellId","getRowCheckboxAriaLabelledBy","keyColumnIds","map","concatIds","wrapperBounds","top","endBounds","bottomOffset","bottomToHeaderOffset","height","maxBottomOffset","Math","min","renderHeaderCell","label","clickable","undefined","isSortable","headerCellWrapperId","getHeaderWrapperId","_jsxs","HeaderCell","$clickable","scope","$isCheckbox","onClick","handleHeaderClick","children","HeaderCellWrapper","_jsx","Typography","BodyBL","weight","renderSortedArrow","VisuallyHidden","event","stopPropagation","handleHeaderButtonClick","isSorted","ArrowUpIcon","ArrowDownIcon","renderHeaderCheckBox","CheckBoxWrapper","Checkbox","checked","indeterminate","renderRowCell","row","toString","cellData","cellId","BodyCell","BodyCellContent","isSelected","renderRowCheckBox","disabled","focusableWhenDisabled","renderBasicEmptyView","ErrorDisplay","Object","assign","type","title","ErrorDisplayTitle","description","TableWrapper","onScroll","scrollTop","tabIndex","TableContainer","Table","$end","$stickyHeader","HeaderRow","TableBody","$showLastRowBottomBorder","EmptyViewCell","colSpan","BodyRow","$alternating","$isSelectable","$isSelected","LoaderWrapper","role","LoadingDotsSpinner","count","ActionBarWrapper","$fixed","$left","_c","_b","left","$width","_d","clientWidth","ActionBar","$float","$scrollable","BodyMD","TextButton","renderSelectionBar","r"],"mappings":"0gCAgC0BA,QAAAC,GACtBA,EAAEC,QACFA,EAAOC,KACPA,EAAIC,UACJA,EAASC,eACTA,EAAcC,gBACdA,EAAeC,UACfA,EAAY,UAASC,kBACrBA,EAAiBC,YACjBA,EAAWC,YACXA,EAAWC,gBACXA,EAAeC,gBACfA,EAAeC,mBACfA,EAAkBC,UAClBA,EAASC,iBACTA,EAAgBC,sBAChBA,EAAqBC,cACrBA,EAAaC,SACbA,EAAQC,YACRA,EAAWC,sBACXA,KACGC,EAAUC,EAAAA,OAAAtB,EArBS,CAAA,KAAA,UAAA,OAAA,YAAA,iBAAA,kBAAA,YAAA,oBAAA,cAAA,cAAA,kBAAA,kBAAA,qBAAA,YAAA,mBAAA,wBAAA,gBAAA,WAAA,cAAA,0BA0BtB,MAAMuB,EAAWC,EAAAA,OAAyB,MACpCC,EAAcD,EAAAA,OAA8B,MAC5CE,EAAYF,EAAAA,OAAgC,MAC5CG,EAAeH,EAAAA,OAAuB,MACtCI,EAAaJ,EAAAA,OAAuB,MACpCK,EAAaC,EAAAA,QACbC,EAAa7B,EAAQ8B,QACtBC,GAC4B,iBAAXA,KAAyBA,EAAOC,aAI/CC,EAAYC,GAAiBC,EAAAA,UAAS,IACtCC,EAAWC,GAAgBF,EAAAA,UAAS,IACpCG,EAAUC,GAAeJ,EAAAA,UAAS,IAClCK,EAAqBC,GAA0BN,EAAAA,UAAS,IACxDO,EAAgBC,GAAqBR,EAAAA,UAAS,IAE7CS,IAAKC,EAAQC,OAAQC,IAAQC,EAAAA,YAK/BC,GAAWC,EAAAA,aAAY,KACzB,IAAKxB,EAAWyB,UAAY1B,EAAa0B,QACrC,OAEJ,MAAMlB,EACFP,EAAWyB,QAAQC,aAAe1B,EAAWyB,QAAQE,aACzDnB,EAAcD,GAEVA,EACAR,EAAa0B,QAAQG,MAAMC,UAAY,gBAEvCC,IACJ,GACD,IAEHC,EAAAA,WAAU,KACNR,IAAU,GACX,IAEHS,EAAAA,kBAAkB,CAAET,cAmBpBU,mBAAiB,UAjBK,KAClBC,uBAAsB,KACd3B,EACA4B,KAEAL,IACJ,IAGA9B,EAAWyB,SACXZ,EACIb,EAAWyB,QAAQW,wBAAwBC,QACvCC,OAAOC,YAEnB,GAGsC,UAE1CR,EAAAA,WAAU,KACNS,IAAiB,GAClB,CAACjE,IAKJ,MAAMkE,GAAwB,KACnB5D,aAAW,EAAXA,EAAa6D,WAAWnE,aAAI,EAAJA,EAAMmE,QAWnCC,GAAiBC,MACV/D,aAAW,EAAXA,EAAagE,SAASD,IAG7BE,GAAoBC,KACbrE,GAAmBqE,EAAQ,GAAM,EAGxCC,GAAiBJ,MACV9D,aAAW,EAAXA,EAAa+D,SAASD,IAG7BK,GAAiBC,IACnB,GAAKzD,EAAW,eAChB,MAAO,GAAGA,EAAW,kBAAkByD,GAAQ,EAG7CC,GAAkB,IACb7E,EAAQoE,QAAU9D,EAAoB,EAAI,GAG/CwE,GAAoBC,GACf5E,aAAc,EAAdA,EAAiB4E,GAGtBC,GAAqBD,IACvB,MAAME,EAAgBH,GAAiBC,GAEvC,GAAKE,EAIL,MAAyB,QAAlBA,EAA0B,YAAc,YAAY,EAGzDC,GAA0BH,GAIrB,OAF4B,QAA/BD,GAAiBC,GAAsB,aAAe,oBAQxDI,GAAY,CAACb,EAAeS,IACvB,GAAGpD,SAAkB2C,KAASS,eAGnCK,GAAgCd,IAClC,MAAMe,EAAexD,EAAWyD,KAAKvD,GACjCoD,GAAUb,EAAOvC,EAAOgD,YAG5B,OAAOQ,EAAAA,aAAaF,EAAa,EAG/BxB,GAA2B,KAC7B,IAAKnC,EAAWyB,QACZ,OAEJ,MAAMqC,EAAgB9D,EAAWyB,QAAQW,wBACzCrB,EACI+C,EAAczB,OAASC,OAAOC,YAAc,IACxCuB,EAAcC,IAAMzB,OAAOC,YAAc,IAChD,EAGCT,GAA4B,KAC9B,KACKnC,EAAS8B,SACT5B,EAAY4B,SACZzB,EAAWyB,SACX1B,EAAa0B,SACb3B,EAAU2B,SAEX,OAGJ,MAAMuC,EAAYnE,EAAY4B,QAAQW,wBAEtC,GAAI4B,EAAUD,IAAMzB,OAAOC,YAAa,CACpC,MAAM0B,EAAeD,EAAU3B,OAASC,OAAOC,YACzC2B,EACFvE,EAAS8B,QAAQW,wBAAwB+B,OACzCrE,EAAU2B,QAAQE,aAClB,GACEyC,EAAkBC,KAAKC,IACzBL,EACAC,GAGJnE,EAAa0B,QAAQG,MAAMC,UAAY,eAAeuC,MAC1D,MACIrE,EAAa0B,QAAQG,MAAMC,UAAY,eAC3C,EAGEW,GAAkB,KACf7C,EAAS8B,SAAYzB,EAAWyB,SAIrCR,EACItB,EAAS8B,QAAQE,cAAgB5C,EAAkB,GAAK,GACpDiB,EAAWyB,QAAQE,aAC1B,EA8BC4C,GAAoBlE,IACtB,MAAMgD,SACFA,EAAQmB,MACRA,EAAKC,UACLA,GAAY,EAAK7C,MACjBA,GACkB,iBAAXvB,EACL,CACIgD,SAAUhD,EACVmE,MAAOnE,EACPuB,WAAO8C,GAEXrE,EAEAsE,IAAevB,GAAiBC,GAChCuB,EA7GiB,CAACvB,GACjB,GAAGpD,YAAqBoD,IA4GHwB,CAAmBxB,GAE/C,OACIyB,EAAAA,KAACC,EAAAA,WAAU,CAAA,cACM9B,GAAc,UAAUI,KAAW2B,WAEpCP,EACZQ,MAAM,MAAK,YACA3B,GAAkBD,GAC7BzB,MAAOA,EAAKsD,aACC,EACbC,QAAS,IAlDK,CAAC9B,IACvBhE,SAAAA,EAAgBgE,EAAS,EAiDF+B,CAAkB/B,GAASgC,SAAA,CAE1CP,EAAAA,KAACQ,EAAAA,kBAAiB,CAACjH,GAAIuG,EAAmBS,SAAA,CACpB,iBAAVb,EACJe,EAAAA,IAACC,aAAWC,OAAM,CAACC,OAAO,OAAML,SAC3Bb,IACe,EAIvBmB,GAAkBtC,OAErBoB,GAAaE,IACXY,MAACK,EAAAA,eAAc,CAAAP,SACXP,EAAAA,KAAA,SAAA,CACIK,QAAUU,GA7DF,EAC5BA,EACAxC,KAEAwC,EAAMC,kBACNzG,SAAAA,EAAgBgE,EAAS,EAyDD0C,CAAwBF,EAAOxC,GAASgC,SAAA,CAG3CV,GAAc,QACfY,MAAA,OAAA,CAAA,kBAAuBX,IACtBD,GAAcnB,GAAuBH,UA3B7CA,EA+BI,EAIfsC,GAAqBtC,IACvB,MAAM2C,EAAWvH,eAAAA,EAAiB4E,GAElC,OAAK2C,EAGY,QAAbA,EAEIT,MAACU,EAAAA,YAAW,CAAA,eAAA,EAAA,cAEKhD,GAAc,UAAUI,eAK7CkC,MAACW,EAAAA,cAAa,CAAA,eAAA,EAAA,cAEGjD,GAAc,UAAUI,iBAblCkC,EAAAA,kBAcL,EAIJY,GAAuB,IAErBZ,EAAAA,IAACR,EAAAA,WAAU,CAAA,cACM9B,GAAc,oBAAmB+B,YAClC,eACC,EACbC,MAAM,eAENH,EAAAA,KAACsB,EAAAA,2BACGb,EAAAA,IAACK,EAAAA,2CACA5G,GACGuG,EAAAA,IAACc,EAAAA,SAAQ,CACLC,QAAS7D,KACT8D,gBAxOd1H,GACqB,IAAvBA,EAAY6D,SACXD,KAsOuD,aAC7B,kBACX0C,QAAS,KACD5F,GACAA,EAAYkD,KAChB,SAqCtB+D,GAAgB,CAACnG,EAAqBoG,KACxC,MAAM7E,EAA0B,iBAAXvB,EAAsBA,EAAOuB,WAAQ8C,EACpDrB,EAA6B,iBAAXhD,EAAsBA,EAASA,EAAOgD,SACxDT,EAAQ6D,EAAIpI,GAAGqI,WACfC,EAAWF,EAAIpD,GACfuD,EAAS,GAAGhE,KAASS,IAE3B,OACIkC,EAAAA,IAACsB,WAAQ,CAAA,cACQ5D,GAAc,OAAO2D,KAElCvI,GAAIoF,GAAUb,EAAOS,GACrBzB,MAAOA,EAAKsD,aACC,EAAKG,SAEG,iBAAbsB,GACY,iBAAbA,EACHpB,EAAAA,IAACuB,EAAAA,gBAAe,CAAAzB,SAAEsB,IACE,mBAAbA,EACPA,EAASF,EAAK,CAAEM,WAAYpE,GAAcC,KAAS,GATlDgE,EAaE,EAIbI,GAAqBP,IACvB,MAAM7D,EAAQ6D,EAAIpI,GAAGqI,WAErB,OACInB,EAAAA,IAACsB,EAAAA,SAAQ,CAAA,cACQ5D,GAAc,OAAOL,eAAkBsC,aACvC,EAAIG,SAEjBE,EAAAA,IAACa,EAAAA,gBAAe,CAAAf,SACZE,EAAAA,IAACc,EAAAA,SAAQ,CACLC,QAAS3D,GAAcC,GAAM,kBACZc,GAA6Bd,GAC9CuC,QAAS,KACD7F,GACAA,EAASsD,GAAQD,GAAcC,GACnC,EAEJqE,SAAUjE,GAAcJ,GACxBsE,sBAAuBlE,GAAcJ,QAGtC,EAIbuE,GAAuB,IAErB5B,MAAC6B,EAAAA,aAAYC,OAAAC,OAAA,CACTC,KAAM,iBACFrI,EAAS,CACbsI,OACItI,aAAS,EAATA,EAAWsI,OACoB,iBAApBtI,EAAUsI,MACbjC,EAAAA,IAACkC,EAAAA,mBAAkB/B,OAAO,OAAML,SAC3BnG,EAAUsI,QAGftI,EAAe,MAGnBqG,EAAAA,IAACkC,EAAAA,kBAAiB,CAAC/B,OAAO,OAAML,SAC3B,qBAIbqC,aACIxI,aAAS,EAATA,EAAWwI,aACLxI,EAAUwI,YACV,sBAwDtB,OACI5C,EAAAA,KAAC6C,EAAAA,aAAY,CACTtJ,GAAIA,GAAM,gBAAe,cACZoB,EAAW,gBAAkB,QAC1CjB,UAAWA,EACX0C,IAAKlB,EACL4H,SAAU,KACFrH,GAAcP,EAAWyB,SACzBd,EACIX,EAAWyB,QAAQoG,UACf7H,EAAWyB,QAAQE,cACnB3B,EAAWyB,QAAQC,aAE/B,EAEJoG,SAAU,EAACzC,SAAA,CAEXE,EAAAA,IAACwC,EAAAA,eAAc,CAAA1C,SACXP,EAAAA,KAACkD,EAAAA,MAAK,CAAAC,KACIrH,cACOL,EACbW,IAAKvB,EAAQuI,cACEjJ,EAAkBoG,SAAA,CArS7CE,EAAAA,IAAA,QAAA,CAAOrE,IAAKpB,EAASuF,SACjBP,EAAAA,KAACqD,EAAAA,UAAS,CAAA9C,SAAA,CACLzG,GAAqBuH,KACrB7H,EAAQsF,IAAIW,SAqSTgB,EAAAA,IAAC6C,EAAAA,UAAS,CAAAC,yBAA2BrH,EAAcqE,SAChC,YAAd1G,GAxLTJ,GAAQA,EAAKmE,OAAS,EAC1B6C,EAAAA,IAAA,KAAA,CAAAF,SACIE,EAAAA,IAAC+C,EAAAA,cAAa,CAACC,QAASpF,KAAiBkC,SACpCjG,EACKA,IACA+H,SAId5B,EAAAA,yBACKhH,aAAI,EAAJA,EAAMqF,KAAI,CAAC6C,EAAe1D,IACvB+B,EAAAA,KAAC0D,EAAAA,QAAO,CAAA,cACSvF,GAAc,OAAOwD,EAAIpI,GAAGqI,cAAa+B,aAExC3F,GAAiBC,GAAM2F,cACtB9J,EAAiB+J,YACnBhG,GAAc8D,EAAIpI,GAAGqI,YAAWrB,SAAA,CAE5CzG,GAAqBoI,GAAkBP,GAEvCnI,EAAQsF,KAAKvD,GAAWmG,GAAcnG,EAAQoG,OAP1CA,EAAIpI,GAAGqI,gBAiGxBnB,EAAAA,IAAA,KAAA,CAAAF,SACIE,EAAAA,IAAA,KAAA,CAAIgD,QAASpF,KAAiBkC,SAC1BE,EAAAA,IAACqD,EAAAA,cAAa,CACVC,KAAK,SAAQ,YACH,SAAQ,aACP,gBAAexD,SAEX,YAAd1G,GAA2B4G,EAAAA,IAACuD,EAAAA,mBAAkB,CAAA,gBAyE1D/J,GACGF,GACAA,EAAY6D,OAAS,GApEN,kBACvB,MAAMqG,EAA2B,QAAnB3K,EAAAS,aAAW,EAAXA,EAAa6D,cAAM,IAAAtE,EAAAA,EAAI,EAErC,OACImH,MAACyD,EAAAA,iBAAgB,CACb9H,IAAKnB,EAAYkJ,OACTnI,EAAmBoI,MACsB,QAA1CC,EAAiB,QAAjBC,EAAAzJ,aAAQ,EAARA,EAAU8B,eAAO,IAAA2H,OAAA,EAAAA,EAAEhH,+BAAuB,IAAA+G,OAAA,EAAAA,EAAEE,KAAIC,OAC9B,QAAjBC,EAAA5J,aAAQ,EAARA,EAAU8B,eAAO,IAAA8H,OAAA,EAAAA,EAAEC,YAAWnE,SAEtCP,EAAAA,KAAC2E,EAAAA,UAAS,CAAAC,QAEDnJ,GAAcG,GAAaW,KAAQP,EAAmB6I,YAE9CpJ,EAAU8E,SAAA,CAEvBE,EAAAA,IAACC,aAAWoE,OAAM,CAAClE,OAAO,WAAUL,SAAE,GAAG0D,SACrCA,EAAQ,EAAI,IAAM,gBAEtBxD,EAAAA,IAACsE,EAAAA,WAAU,CACPtC,KAAK,SAAQ,aACD,sBAAsBwB,SACpB,IAAVA,EAAc,GAAK,MAEvB5D,QAAS3F,EAAqB6F,SAAA,oBAIjClG,MAEU,EAuCf2K,GACJvE,EAAAA,IAAA,MAAA,CACIrE,IAAM6I,IACFlK,EAAY4B,QAAUsI,EACtB5I,EAAO4I,EAAE,MAGN"}
|
|
1
|
+
{"version":3,"file":"data-table.js","sources":["../../../src/data-table/data-table.tsx"],"sourcesContent":["import { ArrowDownIcon, ArrowUpIcon } from \"@lifesg/react-icons\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useInView } from \"react-intersection-observer\";\nimport { useResizeDetector } from \"react-resize-detector\";\nimport { LoadingDotsSpinner } from \"../animations\";\nimport { Checkbox } from \"../checkbox\";\nimport { ErrorDisplay } from \"../error-display\";\nimport { VisuallyHidden, concatIds } from \"../shared/accessibility\";\nimport { Typography } from \"../typography\";\nimport { useId } from \"../util\";\nimport { useEventListener } from \"../util/use-event-listener\";\nimport {\n ActionBar,\n ActionBarWrapper,\n BodyCell,\n BodyCellContent,\n BodyRow,\n CheckBoxWrapper,\n EmptyViewCell,\n ErrorDisplayTitle,\n HeaderCell,\n HeaderCellWrapper,\n HeaderRow,\n LoaderWrapper,\n Table,\n TableBody,\n TableContainer,\n TableWrapper,\n TextButton,\n} from \"./data-table.styles\";\nimport { DataTableProps, HeaderProps, RowProps } from \"./types\";\n\nexport const DataTable = ({\n id,\n headers,\n rows,\n className,\n sortIndicators,\n alternatingRows,\n loadState = \"success\",\n enableMultiSelect,\n selectedIds,\n disabledIds,\n enableActionBar,\n enableSelectAll,\n enableStickyHeader,\n emptyView,\n actionBarContent,\n renderCustomEmptyView,\n onHeaderClick,\n onSelect,\n onSelectAll,\n onClearSelectionClick,\n ...otherProps\n}: DataTableProps) => {\n // =============================================================================\n // CONST, STATE, REF\n // =============================================================================\n const tableRef = useRef<HTMLTableElement>(null);\n const tableEndRef = useRef<HTMLDivElement | null>(null);\n const headerRef = useRef<HTMLTableSectionElement>(null);\n const actionBarRef = useRef<HTMLDivElement>(null);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const internalId = useId();\n const keyColumns = headers.filter(\n (header): header is Exclude<HeaderProps, string> => {\n return typeof header !== \"string\" && !!header.keyColumn;\n }\n );\n\n const [scrollable, setScrollable] = useState(false);\n const [scrollEnd, setScrollEnd] = useState(false);\n const [tableEnd, setTableEnd] = useState(false);\n const [isFloatingActionBar, setIsFloatingActionBar] = useState(false);\n const [showLastBorder, setShowLastBorder] = useState(false);\n\n const { ref: endRef, inView: end } = useInView();\n\n // =============================================================================\n // EFFECTS, EVENT LISTENERS\n // ============================================================================\n const onResize = useCallback(() => {\n if (!wrapperRef.current || !actionBarRef.current) {\n return;\n }\n const scrollable =\n wrapperRef.current.scrollHeight > wrapperRef.current.clientHeight;\n setScrollable(scrollable);\n\n if (scrollable) {\n actionBarRef.current.style.transform = `translateY(0)`;\n } else {\n calculateStickyInViewport();\n }\n }, []);\n\n useEffect(() => {\n onResize();\n }, []);\n\n useResizeDetector({ onResize });\n\n const scrollHandler = () => {\n requestAnimationFrame(() => {\n if (scrollable) {\n calculateFixedInViewport();\n } else {\n calculateStickyInViewport();\n }\n });\n\n if (wrapperRef.current) {\n setTableEnd(\n wrapperRef.current.getBoundingClientRect().bottom <=\n window.innerHeight\n );\n }\n };\n\n useEventListener(\"scroll\", scrollHandler, \"window\");\n\n useEffect(() => {\n checkLastBorder();\n }, [rows]);\n\n // ===========================================================================\n // HELPER FUNCTIONS\n // ===========================================================================\n const isAllCheckboxSelected = (): boolean => {\n if (!rows || !rows.length || !selectedIds) {\n return false;\n }\n\n return selectedIds.length === rows.length;\n };\n\n const isIndeterminateCheckbox = (): boolean => {\n return (\n !!selectedIds &&\n selectedIds.length !== 0 &&\n !isAllCheckboxSelected()\n );\n };\n\n const isHeaderCheckboxDisabled = (): boolean => {\n return !rows || !rows.length || !selectedIds;\n };\n\n const isRowSelected = (rowId: string): boolean => {\n return !!selectedIds?.includes(rowId);\n };\n\n const isAlternatingRow = (index: number): boolean => {\n return !!alternatingRows && index % 2 === 1;\n };\n\n const isDisabledRow = (rowId: string): boolean => {\n return !!disabledIds?.includes(rowId);\n };\n\n const getDataTestId = (subStr: string) => {\n if (!otherProps[\"data-testid\"]) return undefined;\n return `${otherProps[\"data-testid\"]}-${subStr}`;\n };\n\n const getTotalColumns = (): number => {\n return headers.length + (enableMultiSelect ? 1 : 0);\n };\n\n const getSortDirection = (fieldKey: string) => {\n return sortIndicators?.[fieldKey];\n };\n\n const getHeaderAriaSort = (fieldKey: string) => {\n const sortDirection = getSortDirection(fieldKey);\n\n if (!sortDirection) {\n return undefined;\n }\n\n return sortDirection === \"asc\" ? \"ascending\" : \"descending\";\n };\n\n const getSortButtonAriaLabel = (fieldKey: string) => {\n const nextSortDirection =\n getSortDirection(fieldKey) === \"asc\" ? \"descending\" : \"ascending\";\n\n return ` by ${nextSortDirection} order`;\n };\n\n const getHeaderWrapperId = (fieldKey: string) => {\n return `${internalId}-header-${fieldKey}`;\n };\n const getCellId = (rowId: string, fieldKey: string) => {\n return `${internalId}-row-${rowId}-${fieldKey}-key-column`;\n };\n\n const getRowCheckboxAriaLabelledBy = (rowId: string) => {\n const keyColumnIds = keyColumns.map((header) =>\n getCellId(rowId, header.fieldKey)\n );\n\n return concatIds(...keyColumnIds);\n };\n\n const calculateFixedInViewport = () => {\n if (!wrapperRef.current) {\n return;\n }\n const wrapperBounds = wrapperRef.current.getBoundingClientRect();\n setIsFloatingActionBar(\n wrapperBounds.bottom > window.innerHeight + 30 &&\n wrapperBounds.top < window.innerHeight - 200\n );\n };\n\n const calculateStickyInViewport = () => {\n if (\n !tableRef.current ||\n !tableEndRef.current ||\n !wrapperRef.current ||\n !actionBarRef.current ||\n !headerRef.current\n ) {\n return;\n }\n\n const endBounds = tableEndRef.current.getBoundingClientRect();\n\n if (endBounds.top > window.innerHeight) {\n const bottomOffset = endBounds.bottom - window.innerHeight;\n const bottomToHeaderOffset =\n tableRef.current.getBoundingClientRect().height -\n headerRef.current.clientHeight -\n 32;\n const maxBottomOffset = Math.min(\n bottomOffset,\n bottomToHeaderOffset\n );\n\n actionBarRef.current.style.transform = `translateY(-${maxBottomOffset}px)`;\n } else {\n actionBarRef.current.style.transform = `translateY(0)`;\n }\n };\n\n const checkLastBorder = () => {\n if (!tableRef.current || !wrapperRef.current) {\n return;\n }\n // 56 pixels added due to the behavior of action bar\n setShowLastBorder(\n tableRef.current.clientHeight + (enableActionBar ? 56 : 0) <\n wrapperRef.current.clientHeight\n );\n };\n\n // =============================================================================\n // EVENT HANDLERS\n // =============================================================================\n const handleHeaderClick = (fieldKey: string) => {\n onHeaderClick?.(fieldKey);\n };\n\n const handleHeaderButtonClick = (\n event: React.MouseEvent<HTMLButtonElement>,\n fieldKey: string\n ) => {\n event.stopPropagation();\n onHeaderClick?.(fieldKey);\n };\n\n // =============================================================================\n // RENDER FUNCTIONS\n // =============================================================================\n const renderHeaders = () => (\n <thead ref={headerRef}>\n <HeaderRow>\n {enableMultiSelect && renderHeaderCheckBox()}\n {headers.map(renderHeaderCell)}\n </HeaderRow>\n </thead>\n );\n\n const renderHeaderCell = (header: HeaderProps) => {\n const {\n fieldKey,\n label,\n clickable = false,\n style,\n } = typeof header === \"string\"\n ? {\n fieldKey: header,\n label: header,\n style: undefined,\n }\n : header;\n\n const isSortable = !!getSortDirection(fieldKey);\n const headerCellWrapperId = getHeaderWrapperId(fieldKey);\n\n return (\n <HeaderCell\n data-testid={getDataTestId(`header-${fieldKey}`)}\n key={fieldKey}\n $clickable={clickable}\n scope=\"col\"\n aria-sort={getHeaderAriaSort(fieldKey)}\n style={style}\n $isCheckbox={false}\n onClick={() => handleHeaderClick(fieldKey)}\n >\n <HeaderCellWrapper id={headerCellWrapperId}>\n {typeof label === \"string\" ? (\n <Typography.BodyBL weight=\"bold\">\n {label}\n </Typography.BodyBL>\n ) : (\n label\n )}\n {renderSortedArrow(fieldKey)}\n </HeaderCellWrapper>\n {(clickable || isSortable) && (\n <VisuallyHidden>\n <button\n onClick={(event) =>\n handleHeaderButtonClick(event, fieldKey)\n }\n >\n {isSortable && \"Sort \"}\n <span aria-labelledby={headerCellWrapperId} />\n {isSortable && getSortButtonAriaLabel(fieldKey)}\n </button>\n </VisuallyHidden>\n )}\n </HeaderCell>\n );\n };\n\n const renderSortedArrow = (fieldKey: string) => {\n const isSorted = sortIndicators?.[fieldKey];\n\n if (!isSorted) {\n return <></>;\n }\n if (isSorted === \"asc\") {\n return (\n <ArrowUpIcon\n aria-hidden\n data-testid={getDataTestId(`header-${fieldKey}-arrowup`)}\n />\n );\n }\n return (\n <ArrowDownIcon\n aria-hidden\n data-testid={getDataTestId(`header-${fieldKey}-arrowdown`)}\n />\n );\n };\n\n const renderHeaderCheckBox = () => {\n return (\n <HeaderCell\n data-testid={getDataTestId(\"header-selection\")}\n $clickable={false}\n $isCheckbox={true}\n scope=\"col\"\n >\n <CheckBoxWrapper>\n <VisuallyHidden>Row selection</VisuallyHidden>\n {enableSelectAll && (\n <Checkbox\n checked={isAllCheckboxSelected()}\n indeterminate={isIndeterminateCheckbox()}\n disabled={isHeaderCheckboxDisabled()}\n aria-label=\"Select all rows\"\n onClick={() => {\n if (onSelectAll) {\n onSelectAll(isAllCheckboxSelected());\n }\n }}\n />\n )}\n </CheckBoxWrapper>\n </HeaderCell>\n );\n };\n\n const renderRows = () => {\n return !rows || rows.length < 1 ? (\n <BodyRow $alternating={false}>\n <EmptyViewCell colSpan={getTotalColumns()}>\n {renderCustomEmptyView\n ? renderCustomEmptyView()\n : renderBasicEmptyView()}\n </EmptyViewCell>\n </BodyRow>\n ) : (\n <>\n {rows?.map((row: RowProps, index: number) => (\n <BodyRow\n data-testid={getDataTestId(`row-${row.id.toString()}`)}\n key={row.id.toString()}\n $alternating={isAlternatingRow(index)}\n $isSelectable={enableMultiSelect}\n $isSelected={isRowSelected(row.id.toString())}\n >\n {enableMultiSelect && renderRowCheckBox(row)}\n\n {headers.map((header) => renderRowCell(header, row))}\n </BodyRow>\n ))}\n </>\n );\n };\n\n const renderRowCell = (header: HeaderProps, row: RowProps) => {\n const style = typeof header !== \"string\" ? header.style : undefined;\n const fieldKey = typeof header === \"string\" ? header : header.fieldKey;\n const rowId = row.id.toString();\n const cellData = row[fieldKey];\n const cellId = `${rowId}-${fieldKey}`;\n\n return (\n <BodyCell\n data-testid={getDataTestId(`row-${cellId}`)}\n key={cellId}\n id={getCellId(rowId, fieldKey)}\n style={style}\n $isCheckbox={false}\n >\n {typeof cellData === \"string\" ||\n typeof cellData === \"number\" ? (\n <BodyCellContent>{cellData}</BodyCellContent>\n ) : typeof cellData === \"function\" ? (\n cellData(row, { isSelected: isRowSelected(rowId) })\n ) : (\n cellData\n )}\n </BodyCell>\n );\n };\n\n const renderRowCheckBox = (row: RowProps) => {\n const rowId = row.id.toString();\n\n return (\n <BodyCell\n data-testid={getDataTestId(`row-${rowId}-selection`)}\n $isCheckbox={true}\n >\n <CheckBoxWrapper>\n <Checkbox\n checked={isRowSelected(rowId)}\n aria-labelledby={getRowCheckboxAriaLabelledBy(rowId)}\n onClick={() => {\n if (onSelect) {\n onSelect(rowId, !isRowSelected(rowId));\n }\n }}\n disabled={isDisabledRow(rowId)}\n focusableWhenDisabled={isDisabledRow(rowId)}\n />\n </CheckBoxWrapper>\n </BodyCell>\n );\n };\n\n const renderBasicEmptyView = () => {\n return (\n <ErrorDisplay\n type={\"no-item-found\"}\n {...emptyView}\n title={\n emptyView?.title ? (\n typeof emptyView.title === \"string\" ? (\n <ErrorDisplayTitle weight=\"bold\">\n {emptyView.title}\n </ErrorDisplayTitle>\n ) : (\n emptyView.title\n )\n ) : (\n <ErrorDisplayTitle weight=\"bold\">\n {\"No <items> found\"}\n </ErrorDisplayTitle>\n )\n }\n description={\n emptyView?.description\n ? emptyView.description\n : \"No matching rows\"\n }\n />\n );\n };\n\n const renderLoader = () => {\n return (\n <BodyRow $alternating={false}>\n <td colSpan={getTotalColumns()}>\n <LoaderWrapper\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"Loading table\"\n >\n {loadState === \"loading\" && <LoadingDotsSpinner />}\n </LoaderWrapper>\n </td>\n </BodyRow>\n );\n };\n\n const renderSelectionBar = () => {\n const count = selectedIds?.length ?? 0;\n\n return (\n <ActionBarWrapper\n ref={actionBarRef}\n $fixed={isFloatingActionBar}\n $left={tableRef?.current?.getBoundingClientRect()?.left}\n $width={tableRef?.current?.clientWidth}\n >\n <ActionBar\n $float={\n (scrollable ? !scrollEnd : !end) || isFloatingActionBar\n }\n $scrollable={scrollable}\n >\n <Typography.BodyMD weight=\"semibold\">{`${count} item${\n count > 1 ? \"s\" : \"\"\n } selected`}</Typography.BodyMD>\n <TextButton\n type=\"button\"\n aria-label={`Clear selection of ${count} item${\n count === 1 ? \"\" : \"s\"\n }`}\n onClick={onClearSelectionClick}\n >\n Clear selection\n </TextButton>\n {actionBarContent}\n </ActionBar>\n </ActionBarWrapper>\n );\n };\n\n return (\n <TableWrapper\n id={id || \"table-wrapper\"}\n data-testid={otherProps[\"data-testid\"] || \"table\"}\n className={className}\n ref={wrapperRef}\n onScroll={() => {\n if (scrollable && wrapperRef.current) {\n setScrollEnd(\n wrapperRef.current.scrollTop +\n wrapperRef.current.clientHeight >=\n wrapperRef.current.scrollHeight\n );\n }\n }}\n tabIndex={0} // scrollable container must be focusable to support keyboard users\n >\n <TableContainer>\n <Table\n $end={tableEnd}\n $scrollable={scrollable}\n ref={tableRef}\n $stickyHeader={enableStickyHeader}\n >\n {renderHeaders()}\n <TableBody $showLastRowBottomBorder={showLastBorder}>\n {loadState === \"success\"\n ? renderRows()\n : renderLoader()}\n </TableBody>\n </Table>\n </TableContainer>\n {enableActionBar &&\n selectedIds &&\n selectedIds.length > 0 &&\n renderSelectionBar()}\n <div\n ref={(r) => {\n tableEndRef.current = r;\n endRef(r);\n }}\n />\n </TableWrapper>\n );\n};\n"],"names":["_a","id","headers","rows","className","sortIndicators","alternatingRows","loadState","enableMultiSelect","selectedIds","disabledIds","enableActionBar","enableSelectAll","enableStickyHeader","emptyView","actionBarContent","renderCustomEmptyView","onHeaderClick","onSelect","onSelectAll","onClearSelectionClick","otherProps","__rest","tableRef","useRef","tableEndRef","headerRef","actionBarRef","wrapperRef","internalId","useId","keyColumns","filter","header","keyColumn","scrollable","setScrollable","useState","scrollEnd","setScrollEnd","tableEnd","setTableEnd","isFloatingActionBar","setIsFloatingActionBar","showLastBorder","setShowLastBorder","ref","endRef","inView","end","useInView","onResize","useCallback","current","scrollHeight","clientHeight","style","transform","calculateStickyInViewport","useEffect","useResizeDetector","useEventListener","requestAnimationFrame","calculateFixedInViewport","getBoundingClientRect","bottom","window","innerHeight","checkLastBorder","isAllCheckboxSelected","length","isRowSelected","rowId","includes","isAlternatingRow","index","isDisabledRow","getDataTestId","subStr","getTotalColumns","getSortDirection","fieldKey","getHeaderAriaSort","sortDirection","getSortButtonAriaLabel","getCellId","getRowCheckboxAriaLabelledBy","keyColumnIds","map","concatIds","wrapperBounds","top","endBounds","bottomOffset","bottomToHeaderOffset","height","maxBottomOffset","Math","min","renderHeaderCell","label","clickable","undefined","isSortable","headerCellWrapperId","getHeaderWrapperId","_jsxs","HeaderCell","$clickable","scope","$isCheckbox","onClick","handleHeaderClick","children","HeaderCellWrapper","_jsx","Typography","BodyBL","weight","renderSortedArrow","VisuallyHidden","event","stopPropagation","handleHeaderButtonClick","isSorted","ArrowUpIcon","ArrowDownIcon","renderHeaderCheckBox","CheckBoxWrapper","Checkbox","checked","indeterminate","disabled","renderRowCell","row","toString","cellData","cellId","BodyCell","BodyCellContent","isSelected","renderRowCheckBox","focusableWhenDisabled","renderBasicEmptyView","ErrorDisplay","Object","assign","type","title","ErrorDisplayTitle","description","TableWrapper","onScroll","scrollTop","tabIndex","TableContainer","Table","$end","$stickyHeader","HeaderRow","TableBody","$showLastRowBottomBorder","BodyRow","$alternating","EmptyViewCell","colSpan","$isSelectable","$isSelected","LoaderWrapper","role","LoadingDotsSpinner","count","ActionBarWrapper","$fixed","$left","_c","_b","left","$width","_d","clientWidth","ActionBar","$float","$scrollable","BodyMD","TextButton","renderSelectionBar","r"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("../_virtual/_tslib.js"),a=require("react/jsx-runtime"),r=require("../external/dayjs/dayjs.min.js"),t=require("react"),n=require("../shared/dropdown-wrapper/element-with-dropdown.js"),i=require("../shared/internal-calendar/calendar-dropdown.js");require("../shared/internal-calendar/internal-calendar.js");var l=require("../shared/standalone-date-input/standalone-date-input.js");require("../util/calendar-helper.js"),require("../util/date-helper.js");var s=require("../util/date-input-helper.js");require("../util/simple-id-generator.js"),require("../util/string-helper.js"),require("@react-aria/live-announcer");var d=require("./date-input.style.js");exports.DateInput=o=>{var{minDate:u,maxDate:c,disabled:p,disabledDates:v,error:D,hideInputKeyboard:h,value:f,onChange:b,onFocus:m,onBlur:j,onYearMonthDisplayChange:I,withButton:w=!0,readOnly:g,id:q,allowDisabledSelection:x,zIndex:y,dropdownRootNode:C}=o,S=e.__rest(o,["minDate","maxDate","disabled","disabledDates","error","hideInputKeyboard","value","onChange","onFocus","onBlur","onYearMonthDisplayChange","withButton","readOnly","id","allowDisabledSelection","zIndex","dropdownRootNode"]);const[Y,R]=t.useState(s.DateInputHelper.sanitizeInput(f)),[B,O]=t.useState(s.DateInputHelper.sanitizeInput(f)),[z,H]=t.useState(void 0),[M,F]=t.useState(!1),[$,_]=t.useState(!1),E=t.useRef(null),K=t.useRef(null),N=t.useRef(null);t.useEffect((()=>{const e=s.DateInputHelper.sanitizeInput(f);R(e),O(e)}),[f]);const V=e=>{!x&&s.DateInputHelper.isDateDisabled(e,{disabledDates:v,minDate:u,maxDate:c})||(O(e),w||(G(e),R(e),e&&F(!1)))},W=e=>{var a;O(e),w||(G(e),R(e),e&&(null===(a=K.current)||void 0===a||a.focusYearRef(),F(!1)),H(void 0))},k=()=>{g||p||(F(!0),$||(_(!0),m&&m()))},T=e=>{var a,r,t;const n=e.relatedTarget,i=N.current&&N.current.contains(n),l=E.current&&E.current.contains(n),s=(null===(a=null==n?void 0:n.matches)||void 0===a?void 0:a.call(n,"[data-floating-ui-focusable]"))||(null===(r=null==n?void 0:n.matches)||void 0===r?void 0:r.call(n,"[data-floating-ui-focus-guard]"));($&&!M&&!l&&!s||M&&!l&&!i&&!s)&&(null===(t=K.current)||void 0===t||t.resetInput(),O(Y),_(!1),F(!1),J())},Z=e=>{H(e)},A=e=>{var a,t;switch(e){case"reset":O(Y);break;case"confirmed":R(B),G(B)}r.default(B,"YYYY-MM-DD",!0).isValid()?null===(a=K.current)||void 0===a||a.focusYearRef():null===(t=E.current)||void 0===t||t.focus(),F(!1)},G=e=>{b&&b(e)},J=()=>{j&&j()};return a.jsx(n.ElementWithDropdown,{enabled:!g&&!p,isOpen:M,renderElement:()=>a.jsx(d.Container,Object.assign({role:"group",tabIndex:0,ref:E,onBlur:T,onFocus:k,$disabled:p,$readOnly:g,$focused:$,$error:D,id:q,"data-testid":S["data-testid"],"aria-disabled":p},S,{children:a.jsx(l.StandaloneDateInput,{ref:K,disabled:p,onChange:V,readOnly:g,focused:M,names:["start-day","start-month","start-year"],value:B,hoverValue:z,hideInputKeyboard:h})})),renderDropdown:({elementWidth:e})=>a.jsx(i.CalendarDropdown,{variant:"single",ref:N,initialCalendarDate:B,withButton:w,value:B,disabledDates:v,minDate:u,maxDate:c,allowDisabledSelection:x,onHover:Z,onSelect:W,onDismiss:A,onYearMonthDisplayChange:I,width:e,isFocusable:!g&&!p}),onClose:()=>{var e;null===(e=K.current)||void 0===e||e.resetInput(),O(Y),F(!1),_(!1),J(),H(void 0)},onDismiss:()=>{var e,a;null===(e=K.current)||void 0===e||e.resetInput(),null===(a=E.current)||void 0===a||a.focus(),O(Y),F(!1)},customZIndex:y,offset:16,rootNode:C})};
|
|
1
|
+
"use strict";var e=require("../_virtual/_tslib.js"),a=require("react/jsx-runtime"),r=require("../external/dayjs/dayjs.min.js"),t=require("react"),n=require("../shared/dropdown-wrapper/element-with-dropdown.js"),i=require("../shared/internal-calendar/calendar-dropdown.js");require("../shared/internal-calendar/internal-calendar.js");var l=require("../shared/standalone-date-input/standalone-date-input.js");require("../util/calendar-helper.js"),require("../util/date-helper.js");var s=require("../util/date-input-helper.js");require("../util/simple-id-generator.js"),require("../util/string-helper.js"),require("@react-aria/live-announcer");var d=require("./date-input.style.js");exports.DateInput=o=>{var{minDate:u,maxDate:c,disabled:p,disabledDates:v,error:D,hideInputKeyboard:h,value:f,onChange:b,onFocus:m,onBlur:j,onYearMonthDisplayChange:I,withButton:w=!0,readOnly:g,id:q,allowDisabledSelection:x,zIndex:y,dropdownRootNode:C}=o,S=e.__rest(o,["minDate","maxDate","disabled","disabledDates","error","hideInputKeyboard","value","onChange","onFocus","onBlur","onYearMonthDisplayChange","withButton","readOnly","id","allowDisabledSelection","zIndex","dropdownRootNode"]);const[Y,R]=t.useState(s.DateInputHelper.sanitizeInput(f)),[B,O]=t.useState(s.DateInputHelper.sanitizeInput(f)),[z,H]=t.useState(void 0),[M,F]=t.useState(!1),[$,_]=t.useState(!1),E=t.useRef(null),K=t.useRef(null),N=t.useRef(null);t.useEffect((()=>{const e=s.DateInputHelper.sanitizeInput(f);R(e),O(e)}),[f]);const V=e=>{!x&&s.DateInputHelper.isDateDisabled(e,{disabledDates:v,minDate:u,maxDate:c})||(O(e),w||(G(e),R(e),e&&F(!1)))},W=e=>{var a;O(e),w||(G(e),R(e),e&&(null===(a=K.current)||void 0===a||a.focusYearRef(),F(!1)),H(void 0))},k=()=>{g||p||(F(!0),$||(_(!0),m&&m()))},T=e=>{var a,r,t;const n=e.relatedTarget,i=N.current&&N.current.contains(n),l=E.current&&E.current.contains(n),s=(null===(a=null==n?void 0:n.matches)||void 0===a?void 0:a.call(n,"[data-floating-ui-focusable]"))||(null===(r=null==n?void 0:n.matches)||void 0===r?void 0:r.call(n,"[data-floating-ui-focus-guard]"));($&&!M&&!l&&!s||M&&!l&&!i&&!s)&&(null===(t=K.current)||void 0===t||t.resetInput(),O(Y),_(!1),F(!1),J())},Z=e=>{M&&H(e)},A=e=>{var a,t;switch(e){case"reset":O(Y);break;case"confirmed":R(B),G(B)}r.default(B,"YYYY-MM-DD",!0).isValid()?null===(a=K.current)||void 0===a||a.focusYearRef():null===(t=E.current)||void 0===t||t.focus(),F(!1)},G=e=>{b&&b(e)},J=()=>{j&&j()};return a.jsx(n.ElementWithDropdown,{enabled:!g&&!p,isOpen:M,renderElement:()=>a.jsx(d.Container,Object.assign({role:"group",tabIndex:0,ref:E,onBlur:T,onFocus:k,$disabled:p,$readOnly:g,$focused:$,$error:D,id:q,"data-testid":S["data-testid"],"aria-disabled":p},S,{children:a.jsx(l.StandaloneDateInput,{ref:K,disabled:p,onChange:V,readOnly:g,focused:M,names:["start-day","start-month","start-year"],value:B,hoverValue:z,hideInputKeyboard:h})})),renderDropdown:({elementWidth:e})=>a.jsx(i.CalendarDropdown,{variant:"single",ref:N,initialCalendarDate:B,withButton:w,value:B,disabledDates:v,minDate:u,maxDate:c,allowDisabledSelection:x,onHover:Z,onSelect:W,onDismiss:A,onYearMonthDisplayChange:I,width:e,isFocusable:!g&&!p}),onClose:()=>{var e;null===(e=K.current)||void 0===e||e.resetInput(),O(Y),F(!1),_(!1),J(),H(void 0)},onDismiss:()=>{var e,a;null===(e=K.current)||void 0===e||e.resetInput(),null===(a=E.current)||void 0===a||a.focus(),O(Y),F(!1)},customZIndex:y,offset:16,rootNode:C})};
|
|
2
2
|
//# sourceMappingURL=date-input.js.map
|