@westpac/ui 1.2.1 → 1.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/assets/icons/filled/sort-filled.svg +3 -0
  3. package/assets/icons/outlined/sort-outlined.svg +3 -0
  4. package/dist/component-type.json +1 -1
  5. package/dist/components/autocomplete/components/autocomplete-popover/autocomplete-popover.component.js +1 -1
  6. package/dist/components/bottom-sheet/components/bottom-sheet-modal/bottom-sheet-modal.component.js +1 -1
  7. package/dist/components/bottom-sheet/components/bottom-sheet-modal/bottom-sheet-modal.styles.js +1 -1
  8. package/dist/components/date-picker/components/popover/popover.styles.js +1 -1
  9. package/dist/components/date-picker/date-picker.component.js +1 -1
  10. package/dist/components/dropdown/dropdown.component.js +1 -1
  11. package/dist/components/icon/components/sort-icon.d.ts +2 -0
  12. package/dist/components/icon/components/sort-icon.js +12 -0
  13. package/dist/components/icon/index.d.ts +1 -0
  14. package/dist/components/icon/index.js +1 -0
  15. package/dist/components/modal/components/modal-backdrop/modal-backdrop.component.js +1 -1
  16. package/dist/components/modal/components/modal-backdrop/modal-backdrop.styles.js +1 -1
  17. package/dist/components/multi-select/components/multi-select-popover/multi-select-popover.component.js +1 -1
  18. package/dist/components/pagination/index.d.ts +1 -0
  19. package/dist/components/pagination/index.js +1 -0
  20. package/dist/components/pagination/pagination.hooks.js +1 -0
  21. package/dist/components/popover/components/panel/panel.styles.js +1 -1
  22. package/dist/css/westpac-ui.css +3 -12
  23. package/dist/css/westpac-ui.min.css +3 -12
  24. package/package.json +5 -5
  25. package/src/components/autocomplete/components/autocomplete-popover/autocomplete-popover.component.tsx +1 -1
  26. package/src/components/bottom-sheet/components/bottom-sheet-modal/bottom-sheet-modal.component.tsx +1 -1
  27. package/src/components/bottom-sheet/components/bottom-sheet-modal/bottom-sheet-modal.styles.ts +1 -1
  28. package/src/components/date-picker/components/popover/popover.styles.ts +1 -1
  29. package/src/components/date-picker/date-picker.component.tsx +1 -1
  30. package/src/components/dropdown/dropdown.component.tsx +1 -1
  31. package/src/components/icon/components/sort-icon.tsx +20 -0
  32. package/src/components/icon/index.ts +1 -0
  33. package/src/components/modal/components/modal-backdrop/modal-backdrop.component.tsx +1 -1
  34. package/src/components/modal/components/modal-backdrop/modal-backdrop.styles.ts +1 -1
  35. package/src/components/multi-select/components/multi-select-popover/multi-select-popover.component.tsx +1 -1
  36. package/src/components/pagination/index.ts +1 -0
  37. package/src/components/pagination/pagination.hooks.ts +2 -0
  38. package/src/components/popover/components/panel/panel.styles.ts +1 -1
@@ -12,7 +12,7 @@ export function AutocompletePopover(props) {
12
12
  }, state);
13
13
  const brandContainer = useMemo(()=>{
14
14
  if (typeof window !== 'undefined') {
15
- return document.querySelector('[data-theme]') || document.querySelector('[class^="theme-"], [class*=" theme-"]') || document.body;
15
+ return document.querySelector('[data-brand]') || document.querySelector('[class^="theme-"], [class*=" theme-"]') || document.body;
16
16
  }
17
17
  }, []);
18
18
  const width = (_props_triggerRef_current = props.triggerRef.current) === null || _props_triggerRef_current === void 0 ? void 0 : _props_triggerRef_current.getBoundingClientRect().width;
@@ -20,7 +20,7 @@ export function BottomSheetModal({ zIndex = 10, state, height, width, children,
20
20
  const [isMobile, setIsMobile] = useState(checkIfItIsMobile(MEDIUM_BREAKPOINT_AS_NUMBER));
21
21
  const brandContainer = useMemo(()=>{
22
22
  if (isBrowser) {
23
- return document.querySelector('[data-theme]') || document.querySelector('[class^="theme-"], [class*=" theme-"]') || document.body;
23
+ return document.querySelector('[data-brand]') || document.querySelector('[class^="theme-"], [class*=" theme-"]') || document.body;
24
24
  }
25
25
  }, []);
26
26
  useEffect(()=>{
@@ -1,7 +1,7 @@
1
1
  import { tv } from 'tailwind-variants';
2
2
  export const styles = tv({
3
3
  slots: {
4
- underlay: 'fixed inset-0 flex animate-fadeIn flex-col justify-end bg-black/50 transition-all md:items-center md:justify-center',
4
+ underlay: 'fixed inset-0 flex animate-fadeIn flex-col justify-end bg-black/65 transition-all md:items-center md:justify-center',
5
5
  motionWrapper: 'flex flex-col',
6
6
  modal: 'flex w-full flex-col'
7
7
  }
@@ -10,7 +10,7 @@ export const styles = tv({
10
10
  variants: {
11
11
  showAsBottomSheet: {
12
12
  true: {
13
- underlay: 'animate-fadeIn bg-black/20',
13
+ underlay: 'animate-fadeIn bg-black/65',
14
14
  popover: '!fixed inset-x-0 !top-auto !bottom-0 !left-0 animate-slideUp overflow-auto rounded-t-3xl px-[8%] pb-3',
15
15
  header: 'mx-[-8vw] flex items-center justify-between border-b border-b-border-muted-soft px-3.5 py-2',
16
16
  headerLabel: 'typography-body-10 text-text-body'
@@ -86,7 +86,7 @@ export function DatePicker({ size = 'medium', className, bottomSheetView = {
86
86
  const buttonRef = useRef(null);
87
87
  const { buttonProps: newButtonProps } = useButton(buttonProps, buttonRef);
88
88
  const brandContainer = useMemo(()=>{
89
- return document.querySelector('[data-theme]') || document.querySelector('[class^="theme-"], [class*=" theme-"]') || undefined;
89
+ return document.querySelector('[data-brand]') || document.querySelector('[class^="theme-"], [class*=" theme-"]') || undefined;
90
90
  }, []);
91
91
  return React.createElement(React.Fragment, null, props.label && React.createElement("div", labelProps, props.label), React.createElement("div", {
92
92
  ...props,
@@ -49,7 +49,7 @@ export function Dropdown({ className, portalClassName, dropdownSize = 'medium',
49
49
  ]);
50
50
  const brandContainer = useMemo(()=>{
51
51
  if (typeof window !== 'undefined') {
52
- return document.querySelector('[data-theme]') || document.querySelector('[class^="theme-"], [class*=" theme-"]') || document.body;
52
+ return document.querySelector('[data-brand]') || document.querySelector('[class^="theme-"], [class*=" theme-"]') || document.body;
53
53
  }
54
54
  }, []);
55
55
  return React.createElement(React.Fragment, null, React.createElement(Button, {
@@ -0,0 +1,2 @@
1
+ import { type IconProps } from '../icon.types.js';
2
+ export declare function SortIcon({ look, 'aria-label': ariaLabel, copyrightYear, ...props }: IconProps): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import { Icon } from '../icon.component.js';
3
+ export function SortIcon({ look = 'filled', 'aria-label': ariaLabel = 'Sort', copyrightYear = '2026', ...props }) {
4
+ return React.createElement(Icon, {
5
+ "aria-label": ariaLabel,
6
+ copyrightYear: copyrightYear,
7
+ ...props
8
+ }, React.createElement("path", {
9
+ d: "M18.3643 14.6367L12 21.001L5.63574 14.6367L7.0498 13.2227L12 18.1729L16.9492 13.2227L18.3643 14.6367ZM18.3643 9.36426L16.9502 10.7783L12 5.82812L7.05078 10.7783L5.63672 9.36426L12 3L18.3643 9.36426Z",
10
+ fill: "currentColor"
11
+ }));
12
+ }
@@ -210,6 +210,7 @@ export { ShoppingBasketIcon } from './components/shopping-basket-icon.js';
210
210
  export { SimCardIcon } from './components/sim-card-icon.js';
211
211
  export { SlackIcon } from './components/slack-icon.js';
212
212
  export { SmsIcon } from './components/sms-icon.js';
213
+ export { SortIcon } from './components/sort-icon.js';
213
214
  export { SpaIcon } from './components/spa-icon.js';
214
215
  export { StarHalfIcon } from './components/star-half-icon.js';
215
216
  export { StarRateIcon } from './components/star-rate-icon.js';
@@ -210,6 +210,7 @@ export { ShoppingBasketIcon } from './components/shopping-basket-icon.js';
210
210
  export { SimCardIcon } from './components/sim-card-icon.js';
211
211
  export { SlackIcon } from './components/slack-icon.js';
212
212
  export { SmsIcon } from './components/sms-icon.js';
213
+ export { SortIcon } from './components/sort-icon.js';
213
214
  export { SpaIcon } from './components/spa-icon.js';
214
215
  export { StarHalfIcon } from './components/star-half-icon.js';
215
216
  export { StarRateIcon } from './components/star-rate-icon.js';
@@ -12,7 +12,7 @@ export function ModalBackdrop({ zIndex = 100, portalContainer, size, compact, ..
12
12
  const { modalProps, underlayProps } = useModalOverlay(props, state, ref);
13
13
  const brandContainer = useMemo(()=>{
14
14
  if (typeof window !== 'undefined') {
15
- return document.querySelector('[data-theme]') || document.querySelector('[class^="theme-"], [class*=" theme-"]') || document.body;
15
+ return document.querySelector('[data-brand]') || document.querySelector('[class^="theme-"], [class*=" theme-"]') || document.body;
16
16
  }
17
17
  }, []);
18
18
  if (!state.isOpen) {
@@ -1,7 +1,7 @@
1
1
  import { tv } from 'tailwind-variants';
2
2
  export const styles = tv({
3
3
  slots: {
4
- base: 'fixed inset-0 flex animate-fadeIn justify-center bg-black/50 px-4',
4
+ base: 'fixed inset-0 flex animate-fadeIn justify-center bg-black/65 px-4',
5
5
  modal: 'relative top-[5vh] z-10 size-fit max-w-full animate-fadeInDown'
6
6
  },
7
7
  variants: {
@@ -26,7 +26,7 @@ export function MultiSelectPopover({ children, className, ...props }) {
26
26
  }, overlayState);
27
27
  const brandContainer = useMemo(()=>{
28
28
  if (typeof window !== 'undefined') {
29
- return document.querySelector('[data-theme]') || document.querySelector('[class^="theme-"], [class*=" theme-"]') || document.body;
29
+ return document.querySelector('[data-brand]') || document.querySelector('[class^="theme-"], [class*=" theme-"]') || document.body;
30
30
  }
31
31
  }, []);
32
32
  const styles = popoverStyles();
@@ -1,2 +1,3 @@
1
1
  export { Pagination } from './pagination.component.js';
2
+ export { usePagination } from './pagination.hooks.js';
2
3
  export { type PaginationProps } from './pagination.types.js';
@@ -1 +1,2 @@
1
1
  export { Pagination } from './pagination.component.js';
2
+ export { usePagination } from './pagination.hooks.js';
@@ -1,3 +1,4 @@
1
+ 'use client';
1
2
  import { useCallback, useState } from 'react';
2
3
  export const usePagination = ({ defaultCurrent = 1, totalPages, infinite = false })=>{
3
4
  const [currentPage, setCurrentPage] = useState(defaultCurrent);
@@ -8,7 +8,7 @@ export const styles = tv({
8
8
  after:top-0 after:left-[1.5px] after:size-0 after:border-x-[6.5px] after:border-t-[11px] after:border-x-[transparent] after:border-t-background-white
9
9
  `,
10
10
  closeBtn: 'absolute top-1 right-1 h-3 p-0',
11
- content: 'w-[18.75rem] rounded-xl bg-background-white py-4 pr-5 pl-3',
11
+ content: 'w-[18.75rem] rounded-xl bg-background-white p-4',
12
12
  heading: 'mb-2 typography-body-9 font-medium text-text-body focus-visible:focus-outline',
13
13
  body: 'typography-body-10 text-text-body focus-visible:focus-outline'
14
14
  },
@@ -1989,16 +1989,10 @@
1989
1989
  background-color: color-mix(in oklab, var(--color-black, #000) 5%, transparent);
1990
1990
  }
1991
1991
  }
1992
- .bg-black\/20 {
1993
- background-color: color-mix(in srgb, #000 20%, transparent);
1992
+ .bg-black\/65 {
1993
+ background-color: color-mix(in srgb, #000 65%, transparent);
1994
1994
  @supports (color: color-mix(in lab, red, red)) {
1995
- background-color: color-mix(in oklab, var(--color-black, #000) 20%, transparent);
1996
- }
1997
- }
1998
- .bg-black\/50 {
1999
- background-color: color-mix(in srgb, #000 50%, transparent);
2000
- @supports (color: color-mix(in lab, red, red)) {
2001
- background-color: color-mix(in oklab, var(--color-black, #000) 50%, transparent);
1995
+ background-color: color-mix(in oklab, var(--color-black, #000) 65%, transparent);
2002
1996
  }
2003
1997
  }
2004
1998
  .bg-border-danger {
@@ -2442,9 +2436,6 @@
2442
2436
  .py-3 {
2443
2437
  padding-block: calc(0.375rem * 3);
2444
2438
  }
2445
- .py-4 {
2446
- padding-block: calc(0.375rem * 4);
2447
- }
2448
2439
  .py-\[0\.5rem\] {
2449
2440
  padding-block: 0.5rem;
2450
2441
  }
@@ -1989,16 +1989,10 @@
1989
1989
  background-color: color-mix(in oklab, var(--color-black, #000) 5%, transparent);
1990
1990
  }
1991
1991
  }
1992
- .bg-black\/20 {
1993
- background-color: color-mix(in srgb, #000 20%, transparent);
1992
+ .bg-black\/65 {
1993
+ background-color: color-mix(in srgb, #000 65%, transparent);
1994
1994
  @supports (color: color-mix(in lab, red, red)) {
1995
- background-color: color-mix(in oklab, var(--color-black, #000) 20%, transparent);
1996
- }
1997
- }
1998
- .bg-black\/50 {
1999
- background-color: color-mix(in srgb, #000 50%, transparent);
2000
- @supports (color: color-mix(in lab, red, red)) {
2001
- background-color: color-mix(in oklab, var(--color-black, #000) 50%, transparent);
1995
+ background-color: color-mix(in oklab, var(--color-black, #000) 65%, transparent);
2002
1996
  }
2003
1997
  }
2004
1998
  .bg-border-danger {
@@ -2442,9 +2436,6 @@
2442
2436
  .py-3 {
2443
2437
  padding-block: calc(0.375rem * 3);
2444
2438
  }
2445
- .py-4 {
2446
- padding-block: calc(0.375rem * 4);
2447
- }
2448
2439
  .py-\[0\.5rem\] {
2449
2440
  padding-block: 0.5rem;
2450
2441
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@westpac/ui",
3
- "version": "1.2.1",
3
+ "version": "1.3.2",
4
4
  "license": "MIT",
5
5
  "sideEffects": false,
6
6
  "type": "module",
@@ -238,7 +238,7 @@
238
238
  "glob": "~10.5.0",
239
239
  "jsdom": "^22.1.0",
240
240
  "plop": "~4.0.5",
241
- "postcss": "~8.5.6",
241
+ "postcss": "~8.5.10",
242
242
  "postcss-cli": "~10.1.0",
243
243
  "prettier": "^3.2.5",
244
244
  "prop-types": "^15.8.1",
@@ -253,10 +253,10 @@
253
253
  "typescript": "^5.5.4",
254
254
  "vite": "^7.1.12",
255
255
  "vitest": "^3.2.4",
256
- "@westpac/style-config": "~1.0.2",
256
+ "@westpac/eslint-config": "~1.1.0",
257
257
  "@westpac/test-config": "~0.0.0",
258
- "@westpac/ts-config": "~0.0.0",
259
- "@westpac/eslint-config": "~1.1.0"
258
+ "@westpac/style-config": "~1.0.2",
259
+ "@westpac/ts-config": "~0.0.0"
260
260
  },
261
261
  "dependencies": {
262
262
  "@internationalized/date": "~3.10.0",
@@ -23,7 +23,7 @@ export function AutocompletePopover(props: AutocompletePopoverProps) {
23
23
  const brandContainer = useMemo(() => {
24
24
  if (typeof window !== 'undefined') {
25
25
  return (
26
- document.querySelector('[data-theme]') ||
26
+ document.querySelector('[data-brand]') ||
27
27
  document.querySelector('[class^="theme-"], [class*=" theme-"]') ||
28
28
  document.body
29
29
  );
@@ -39,7 +39,7 @@ export function BottomSheetModal({
39
39
  const brandContainer = useMemo(() => {
40
40
  if (isBrowser) {
41
41
  return (
42
- document.querySelector('[data-theme]') ||
42
+ document.querySelector('[data-brand]') ||
43
43
  document.querySelector('[class^="theme-"], [class*=" theme-"]') ||
44
44
  document.body
45
45
  );
@@ -3,7 +3,7 @@ import { tv } from 'tailwind-variants';
3
3
  export const styles = tv({
4
4
  slots: {
5
5
  underlay:
6
- 'fixed inset-0 flex animate-fadeIn flex-col justify-end bg-black/50 transition-all md:items-center md:justify-center',
6
+ 'fixed inset-0 flex animate-fadeIn flex-col justify-end bg-black/65 transition-all md:items-center md:justify-center',
7
7
  motionWrapper: 'flex flex-col',
8
8
  modal: 'flex w-full flex-col',
9
9
  },
@@ -11,7 +11,7 @@ export const styles = tv({
11
11
  variants: {
12
12
  showAsBottomSheet: {
13
13
  true: {
14
- underlay: 'animate-fadeIn bg-black/20',
14
+ underlay: 'animate-fadeIn bg-black/65',
15
15
  popover:
16
16
  '!fixed inset-x-0 !top-auto !bottom-0 !left-0 animate-slideUp overflow-auto rounded-t-3xl px-[8%] pb-3',
17
17
  header: 'mx-[-8vw] flex items-center justify-between border-b border-b-border-muted-soft px-3.5 py-2',
@@ -86,7 +86,7 @@ export function DatePicker({
86
86
 
87
87
  const brandContainer = useMemo(() => {
88
88
  return (
89
- document.querySelector('[data-theme]') ||
89
+ document.querySelector('[data-brand]') ||
90
90
  document.querySelector('[class^="theme-"], [class*=" theme-"]') ||
91
91
  undefined
92
92
  );
@@ -72,7 +72,7 @@ export function Dropdown({
72
72
  const brandContainer = useMemo(() => {
73
73
  if (typeof window !== 'undefined') {
74
74
  return (
75
- document.querySelector('[data-theme]') ||
75
+ document.querySelector('[data-brand]') ||
76
76
  document.querySelector('[class^="theme-"], [class*=" theme-"]') ||
77
77
  document.body
78
78
  );
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+
3
+ import { Icon } from '../icon.component.js';
4
+ import { type IconProps } from '../icon.types.js';
5
+
6
+ export function SortIcon({
7
+ look = 'filled',
8
+ 'aria-label': ariaLabel = 'Sort',
9
+ copyrightYear = '2026',
10
+ ...props
11
+ }: IconProps) {
12
+ return (
13
+ <Icon aria-label={ariaLabel} copyrightYear={copyrightYear} {...props}>
14
+ <path
15
+ d="M18.3643 14.6367L12 21.001L5.63574 14.6367L7.0498 13.2227L12 18.1729L16.9492 13.2227L18.3643 14.6367ZM18.3643 9.36426L16.9502 10.7783L12 5.82812L7.05078 10.7783L5.63672 9.36426L12 3L18.3643 9.36426Z"
16
+ fill="currentColor"
17
+ />
18
+ </Icon>
19
+ );
20
+ }
@@ -210,6 +210,7 @@ export { ShoppingBasketIcon } from './components/shopping-basket-icon.js';
210
210
  export { SimCardIcon } from './components/sim-card-icon.js';
211
211
  export { SlackIcon } from './components/slack-icon.js';
212
212
  export { SmsIcon } from './components/sms-icon.js';
213
+ export { SortIcon } from './components/sort-icon.js';
213
214
  export { SpaIcon } from './components/spa-icon.js';
214
215
  export { StarHalfIcon } from './components/star-half-icon.js';
215
216
  export { StarRateIcon } from './components/star-rate-icon.js';
@@ -23,7 +23,7 @@ export function ModalBackdrop({ zIndex = 100, portalContainer, size, compact, ..
23
23
  const brandContainer = useMemo(() => {
24
24
  if (typeof window !== 'undefined') {
25
25
  return (
26
- document.querySelector('[data-theme]') ||
26
+ document.querySelector('[data-brand]') ||
27
27
  document.querySelector('[class^="theme-"], [class*=" theme-"]') ||
28
28
  document.body
29
29
  );
@@ -2,7 +2,7 @@ import { tv } from 'tailwind-variants';
2
2
 
3
3
  export const styles = tv({
4
4
  slots: {
5
- base: 'fixed inset-0 flex animate-fadeIn justify-center bg-black/50 px-4',
5
+ base: 'fixed inset-0 flex animate-fadeIn justify-center bg-black/65 px-4',
6
6
  modal: 'relative top-[5vh] z-10 size-fit max-w-full animate-fadeInDown',
7
7
  },
8
8
  variants: {
@@ -42,7 +42,7 @@ export function MultiSelectPopover({ children, className, ...props }: MultiSelec
42
42
  const brandContainer = useMemo(() => {
43
43
  if (typeof window !== 'undefined') {
44
44
  return (
45
- document.querySelector('[data-theme]') ||
45
+ document.querySelector('[data-brand]') ||
46
46
  document.querySelector('[class^="theme-"], [class*=" theme-"]') ||
47
47
  document.body
48
48
  );
@@ -1,2 +1,3 @@
1
1
  export { Pagination } from './pagination.component.js';
2
+ export { usePagination } from './pagination.hooks.js';
2
3
  export { type PaginationProps } from './pagination.types.js';
@@ -1,3 +1,5 @@
1
+ 'use client';
2
+
1
3
  import { useCallback, useState } from 'react';
2
4
 
3
5
  import { type PaginationHookProps } from './pagination.types.js';
@@ -10,7 +10,7 @@ export const styles = tv({
10
10
  after:top-0 after:left-[1.5px] after:size-0 after:border-x-[6.5px] after:border-t-[11px] after:border-x-[transparent] after:border-t-background-white
11
11
  `,
12
12
  closeBtn: 'absolute top-1 right-1 h-3 p-0',
13
- content: 'w-[18.75rem] rounded-xl bg-background-white py-4 pr-5 pl-3',
13
+ content: 'w-[18.75rem] rounded-xl bg-background-white p-4',
14
14
  heading: 'mb-2 typography-body-9 font-medium text-text-body focus-visible:focus-outline',
15
15
  body: 'typography-body-10 text-text-body focus-visible:focus-outline',
16
16
  },