@fluentui/react-avatar 9.10.4 → 9.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/CHANGELOG.md +16 -2
  2. package/dist/index.d.ts +54 -4
  3. package/lib/AvatarGroup.js +1 -1
  4. package/lib/AvatarGroup.js.map +1 -1
  5. package/lib/AvatarGroupItem.js +1 -1
  6. package/lib/AvatarGroupItem.js.map +1 -1
  7. package/lib/AvatarGroupPopover.js +1 -1
  8. package/lib/AvatarGroupPopover.js.map +1 -1
  9. package/lib/components/Avatar/renderAvatar.js.map +1 -1
  10. package/lib/components/AvatarGroup/AvatarGroup.types.js.map +1 -1
  11. package/lib/components/AvatarGroup/index.js +1 -1
  12. package/lib/components/AvatarGroup/index.js.map +1 -1
  13. package/lib/components/AvatarGroup/renderAvatarGroup.js.map +1 -1
  14. package/lib/components/AvatarGroup/useAvatarGroup.js +17 -9
  15. package/lib/components/AvatarGroup/useAvatarGroup.js.map +1 -1
  16. package/lib/components/AvatarGroupItem/AvatarGroupItem.types.js +1 -3
  17. package/lib/components/AvatarGroupItem/AvatarGroupItem.types.js.map +1 -1
  18. package/lib/components/AvatarGroupItem/index.js +1 -1
  19. package/lib/components/AvatarGroupItem/index.js.map +1 -1
  20. package/lib/components/AvatarGroupItem/renderAvatarGroupItem.js.map +1 -1
  21. package/lib/components/AvatarGroupItem/useAvatarGroupItem.js +33 -7
  22. package/lib/components/AvatarGroupItem/useAvatarGroupItem.js.map +1 -1
  23. package/lib/components/AvatarGroupPopover/AvatarGroupPopover.types.js.map +1 -1
  24. package/lib/components/AvatarGroupPopover/index.js +1 -1
  25. package/lib/components/AvatarGroupPopover/index.js.map +1 -1
  26. package/lib/components/AvatarGroupPopover/renderAvatarGroupPopover.js.map +1 -1
  27. package/lib/components/AvatarGroupPopover/useAvatarGroupPopover.js +46 -8
  28. package/lib/components/AvatarGroupPopover/useAvatarGroupPopover.js.map +1 -1
  29. package/lib/index.js +4 -7
  30. package/lib/index.js.map +1 -1
  31. package/lib/utils/getInitials.js +32 -12
  32. package/lib/utils/getInitials.js.map +1 -1
  33. package/lib-commonjs/AvatarGroup.js +3 -0
  34. package/lib-commonjs/AvatarGroup.js.map +1 -1
  35. package/lib-commonjs/AvatarGroupItem.js +3 -0
  36. package/lib-commonjs/AvatarGroupItem.js.map +1 -1
  37. package/lib-commonjs/AvatarGroupPopover.js +3 -0
  38. package/lib-commonjs/AvatarGroupPopover.js.map +1 -1
  39. package/lib-commonjs/components/Avatar/renderAvatar.js.map +1 -1
  40. package/lib-commonjs/components/AvatarGroup/AvatarGroup.types.js.map +1 -1
  41. package/lib-commonjs/components/AvatarGroup/index.js +3 -0
  42. package/lib-commonjs/components/AvatarGroup/index.js.map +1 -1
  43. package/lib-commonjs/components/AvatarGroup/renderAvatarGroup.js.map +1 -1
  44. package/lib-commonjs/components/AvatarGroup/useAvatarGroup.js +15 -9
  45. package/lib-commonjs/components/AvatarGroup/useAvatarGroup.js.map +1 -1
  46. package/lib-commonjs/components/AvatarGroupItem/AvatarGroupItem.types.js +1 -3
  47. package/lib-commonjs/components/AvatarGroupItem/AvatarGroupItem.types.js.map +1 -1
  48. package/lib-commonjs/components/AvatarGroupItem/index.js +3 -0
  49. package/lib-commonjs/components/AvatarGroupItem/index.js.map +1 -1
  50. package/lib-commonjs/components/AvatarGroupItem/renderAvatarGroupItem.js.map +1 -1
  51. package/lib-commonjs/components/AvatarGroupItem/useAvatarGroupItem.js +35 -10
  52. package/lib-commonjs/components/AvatarGroupItem/useAvatarGroupItem.js.map +1 -1
  53. package/lib-commonjs/components/AvatarGroupPopover/AvatarGroupPopover.types.js.map +1 -1
  54. package/lib-commonjs/components/AvatarGroupPopover/index.js +3 -0
  55. package/lib-commonjs/components/AvatarGroupPopover/index.js.map +1 -1
  56. package/lib-commonjs/components/AvatarGroupPopover/renderAvatarGroupPopover.js.map +1 -1
  57. package/lib-commonjs/components/AvatarGroupPopover/useAvatarGroupPopover.js +51 -11
  58. package/lib-commonjs/components/AvatarGroupPopover/useAvatarGroupPopover.js.map +1 -1
  59. package/lib-commonjs/index.js +12 -3
  60. package/lib-commonjs/index.js.map +1 -1
  61. package/lib-commonjs/utils/getInitials.js +32 -12
  62. package/lib-commonjs/utils/getInitials.js.map +1 -1
  63. package/package.json +2 -2
@@ -3,9 +3,17 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "useAvatarGroupPopover_unstable", {
7
- enumerable: true,
8
- get: function() {
6
+ function _export(target, all) {
7
+ for(var name in all)Object.defineProperty(target, name, {
8
+ enumerable: true,
9
+ get: all[name]
10
+ });
11
+ }
12
+ _export(exports, {
13
+ useAvatarGroupPopoverBase_unstable: function() {
14
+ return useAvatarGroupPopoverBase_unstable;
15
+ },
16
+ useAvatarGroupPopover_unstable: function() {
9
17
  return useAvatarGroupPopover_unstable;
10
18
  }
11
19
  });
@@ -21,7 +29,42 @@ const useAvatarGroupPopover_unstable = (props)=>{
21
29
  var _useAvatarGroupContext_unstable;
22
30
  const size = (_useAvatarGroupContext_unstable = (0, _AvatarGroupContext.useAvatarGroupContext_unstable)((ctx)=>ctx.size)) !== null && _useAvatarGroupContext_unstable !== void 0 ? _useAvatarGroupContext_unstable : _useAvatarGroup.defaultAvatarGroupSize;
23
31
  const layout = (0, _AvatarGroupContext.useAvatarGroupContext_unstable)((ctx)=>ctx.layout);
24
- const { indicator = size < 24 ? 'icon' : 'count', count = _react.Children.count(props.children), children, ...restOfProps } = props;
32
+ const { indicator = size < 24 ? 'icon' : 'count', ...baseProps } = props;
33
+ const state = useAvatarGroupPopoverBase_unstable({
34
+ indicator,
35
+ ...baseProps
36
+ });
37
+ if (layout === 'pie') {
38
+ state.triggerButton.children = null;
39
+ } else if (indicator === 'icon') {
40
+ state.triggerButton.children = /*#__PURE__*/ _react.createElement(_reacticons.MoreHorizontalRegular, null);
41
+ }
42
+ return {
43
+ size,
44
+ ...state,
45
+ components: {
46
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
47
+ ...state.components,
48
+ root: _reactpopover.Popover,
49
+ popoverSurface: _reactpopover.PopoverSurface,
50
+ tooltip: _reacttooltip.Tooltip
51
+ },
52
+ root: _reactutilities.slot.always(state.root, {
53
+ elementType: _reactpopover.Popover
54
+ }),
55
+ popoverSurface: _reactutilities.slot.always(props.popoverSurface, {
56
+ defaultProps: state.popoverSurface,
57
+ elementType: _reactpopover.PopoverSurface
58
+ }),
59
+ tooltip: _reactutilities.slot.always(props.tooltip, {
60
+ defaultProps: state.tooltip,
61
+ elementType: _reacttooltip.Tooltip
62
+ })
63
+ };
64
+ };
65
+ const useAvatarGroupPopoverBase_unstable = (props)=>{
66
+ const layout = (0, _AvatarGroupContext.useAvatarGroupContext_unstable)((ctx)=>ctx.layout);
67
+ const { indicator = 'count', count = _react.Children.count(props.children), children, ...restOfProps } = props;
25
68
  const [popoverOpen, setPopoverOpen] = (0, _reactutilities.useControllableState)({
26
69
  state: props.open,
27
70
  defaultState: props.defaultOpen,
@@ -35,9 +78,7 @@ const useAvatarGroupPopover_unstable = (props)=>{
35
78
  let triggerButtonChildren;
36
79
  if (layout === 'pie') {
37
80
  triggerButtonChildren = null;
38
- } else if (indicator === 'icon') {
39
- triggerButtonChildren = /*#__PURE__*/ _react.createElement(_reacticons.MoreHorizontalRegular, null);
40
- } else {
81
+ } else if (indicator === 'count') {
41
82
  triggerButtonChildren = count > 99 ? '99+' : `+${count}`;
42
83
  }
43
84
  return {
@@ -45,7 +86,6 @@ const useAvatarGroupPopover_unstable = (props)=>{
45
86
  indicator,
46
87
  layout,
47
88
  popoverOpen,
48
- size,
49
89
  components: {
50
90
  root: _reactpopover.Popover,
51
91
  triggerButton: 'button',
@@ -62,7 +102,7 @@ const useAvatarGroupPopover_unstable = (props)=>{
62
102
  open: popoverOpen,
63
103
  onOpenChange: handleOnPopoverChange
64
104
  }, {
65
- elementType: _reactpopover.Popover
105
+ elementType: 'div'
66
106
  }),
67
107
  triggerButton: _reactutilities.slot.always(props.triggerButton, {
68
108
  defaultProps: {
@@ -83,14 +123,14 @@ const useAvatarGroupPopover_unstable = (props)=>{
83
123
  'aria-label': 'Overflow',
84
124
  tabIndex: 0
85
125
  },
86
- elementType: _reactpopover.PopoverSurface
126
+ elementType: 'div'
87
127
  }),
88
128
  tooltip: _reactutilities.slot.always(props.tooltip, {
89
129
  defaultProps: {
90
130
  content: 'View more people.',
91
131
  relationship: 'label'
92
132
  },
93
- elementType: _reacttooltip.Tooltip
133
+ elementType: 'div'
94
134
  })
95
135
  };
96
136
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/AvatarGroupPopover/useAvatarGroupPopover.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useAvatarGroupContext_unstable } from '../../contexts/AvatarGroupContext';\nimport { defaultAvatarGroupSize } from '../AvatarGroup/useAvatarGroup';\nimport { useControllableState, slot } from '@fluentui/react-utilities';\nimport { MoreHorizontalRegular } from '@fluentui/react-icons';\nimport { OnOpenChangeData, OpenPopoverEvents, Popover, PopoverSurface } from '@fluentui/react-popover';\nimport type { AvatarGroupPopoverProps, AvatarGroupPopoverState } from './AvatarGroupPopover.types';\nimport { Tooltip } from '@fluentui/react-tooltip';\n\n/**\n * Create the state required to render AvatarGroupPopover.\n *\n * The returned state can be modified with hooks such as useAvatarGroupPopoverStyles_unstable,\n * before being passed to renderAvatarGroupPopover_unstable.\n *\n * @param props - props from this instance of AvatarGroupPopover\n */\nexport const useAvatarGroupPopover_unstable = (props: AvatarGroupPopoverProps): AvatarGroupPopoverState => {\n const size = useAvatarGroupContext_unstable(ctx => ctx.size) ?? defaultAvatarGroupSize;\n const layout = useAvatarGroupContext_unstable(ctx => ctx.layout);\n const {\n indicator = size < 24 ? 'icon' : 'count',\n count = React.Children.count(props.children),\n children,\n ...restOfProps\n } = props;\n\n const [popoverOpen, setPopoverOpen] = useControllableState({\n state: props.open,\n defaultState: props.defaultOpen,\n initialState: false,\n });\n\n const handleOnPopoverChange = (e: OpenPopoverEvents, data: OnOpenChangeData) => {\n restOfProps.onOpenChange?.(e, data);\n setPopoverOpen(data.open);\n };\n\n let triggerButtonChildren;\n if (layout === 'pie') {\n triggerButtonChildren = null;\n } else if (indicator === 'icon') {\n triggerButtonChildren = <MoreHorizontalRegular />;\n } else {\n triggerButtonChildren = count > 99 ? '99+' : `+${count}`;\n }\n\n return {\n count,\n indicator,\n layout,\n popoverOpen,\n size,\n\n components: {\n root: Popover,\n triggerButton: 'button',\n content: 'ul',\n popoverSurface: PopoverSurface,\n tooltip: Tooltip,\n },\n root: slot.always(\n {\n // Popover expects a child for its children. The children are added in the renderAvatarGroupPopover.\n children: <></>,\n size: 'small',\n trapFocus: true,\n ...restOfProps,\n open: popoverOpen,\n onOpenChange: handleOnPopoverChange,\n },\n { elementType: Popover },\n ),\n triggerButton: slot.always(props.triggerButton, {\n defaultProps: {\n children: triggerButtonChildren,\n type: 'button',\n },\n elementType: 'button',\n }),\n content: slot.always(props.content, {\n defaultProps: {\n children,\n role: 'list',\n },\n elementType: 'ul',\n }),\n popoverSurface: slot.always(props.popoverSurface, {\n defaultProps: {\n 'aria-label': 'Overflow',\n tabIndex: 0,\n },\n elementType: PopoverSurface,\n }),\n tooltip: slot.always(props.tooltip, {\n defaultProps: {\n content: 'View more people.',\n relationship: 'label',\n },\n elementType: Tooltip,\n }),\n };\n};\n"],"names":["React","useAvatarGroupContext_unstable","defaultAvatarGroupSize","useControllableState","slot","MoreHorizontalRegular","Popover","PopoverSurface","Tooltip","useAvatarGroupPopover_unstable","props","size","ctx","layout","indicator","count","Children","children","restOfProps","popoverOpen","setPopoverOpen","state","open","defaultState","defaultOpen","initialState","handleOnPopoverChange","e","data","onOpenChange","triggerButtonChildren","components","root","triggerButton","content","popoverSurface","tooltip","always","trapFocus","elementType","defaultProps","type","role","tabIndex","relationship"],"mappings":"AAAA;;;;;+BAmBaS;;;;;;;iEAjBU,QAAQ;oCACgB,oCAAoC;gCAC5C,gCAAgC;gCAC5B,4BAA4B;4BACjC,wBAAwB;8BACe,0BAA0B;8BAE/E,0BAA0B;AAU3C,uCAAuC,CAACC;QAChCT;IAAb,MAAMU,OAAOV,CAAAA,sCAAAA,kDAAAA,EAA+BW,CAAAA,MAAOA,IAAID,KAAI,MAAA,QAA9CV,oCAAAA,KAAAA,IAAAA,kCAAmDC,sCAAAA;IAChE,MAAMW,aAASZ,kDAAAA,EAA+BW,CAAAA,MAAOA,IAAIC,MAAM;IAC/D,MAAM,EACJC,YAAYH,OAAO,KAAK,SAAS,OAAO,EACxCI,QAAQf,OAAMgB,QAAQ,CAACD,KAAK,CAACL,MAAMO,QAAQ,CAAC,EAC5CA,QAAQ,EACR,GAAGC,aACJ,GAAGR;IAEJ,MAAM,CAACS,aAAaC,eAAe,OAAGjB,oCAAAA,EAAqB;QACzDkB,OAAOX,MAAMY,IAAI;QACjBC,cAAcb,MAAMc,WAAW;QAC/BC,cAAc;IAChB;IAEA,MAAMC,wBAAwB,CAACC,GAAsBC;YACnDV;SAAAA,4BAAAA,YAAYW,YAAAA,AAAY,MAAA,QAAxBX,8BAAAA,KAAAA,IAAAA,KAAAA,IAAAA,0BAAAA,IAAAA,CAAAA,aAA2BS,GAAGC;QAC9BR,eAAeQ,KAAKN,IAAI;IAC1B;IAEA,IAAIQ;IACJ,IAAIjB,WAAW,OAAO;QACpBiB,wBAAwB;IAC1B,OAAO,IAAIhB,cAAc,QAAQ;QAC/BgB,wBAAAA,WAAAA,GAAwB,OAAA,aAAA,CAACzB,iCAAAA,EAAAA;IAC3B,OAAO;QACLyB,wBAAwBf,QAAQ,KAAK,QAAQ,CAAC,CAAC,EAAEA,OAAO;IAC1D;IAEA,OAAO;QACLA;QACAD;QACAD;QACAM;QACAR;QAEAoB,YAAY;YACVC,MAAM1B,qBAAAA;YACN2B,eAAe;YACfC,SAAS;YACTC,gBAAgB5B,4BAAAA;YAChB6B,SAAS5B,qBAAAA;QACX;QACAwB,MAAM5B,oBAAAA,CAAKiC,MAAM,CACf;YACE,oGAAoG;YACpGpB,UAAAA,WAAAA,GAAU,OAAA,aAAA,CAAA,OAAA,QAAA,EAAA;YACVN,MAAM;YACN2B,WAAW;YACX,GAAGpB,WAAW;YACdI,MAAMH;YACNU,cAAcH;QAChB,GACA;YAAEa,aAAajC,qBAAAA;QAAQ;QAEzB2B,eAAe7B,oBAAAA,CAAKiC,MAAM,CAAC3B,MAAMuB,aAAa,EAAE;YAC9CO,cAAc;gBACZvB,UAAUa;gBACVW,MAAM;YACR;YACAF,aAAa;QACf;QACAL,SAAS9B,oBAAAA,CAAKiC,MAAM,CAAC3B,MAAMwB,OAAO,EAAE;YAClCM,cAAc;gBACZvB;gBACAyB,MAAM;YACR;YACAH,aAAa;QACf;QACAJ,gBAAgB/B,oBAAAA,CAAKiC,MAAM,CAAC3B,MAAMyB,cAAc,EAAE;YAChDK,cAAc;gBACZ,cAAc;gBACdG,UAAU;YACZ;YACAJ,aAAahC,4BAAAA;QACf;QACA6B,SAAShC,oBAAAA,CAAKiC,MAAM,CAAC3B,MAAM0B,OAAO,EAAE;YAClCI,cAAc;gBACZN,SAAS;gBACTU,cAAc;YAChB;YACAL,aAAa/B,qBAAAA;QACf;IACF;AACF,EAAE"}
1
+ {"version":3,"sources":["../src/components/AvatarGroupPopover/useAvatarGroupPopover.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { useAvatarGroupContext_unstable } from '../../contexts/AvatarGroupContext';\nimport { defaultAvatarGroupSize } from '../AvatarGroup/useAvatarGroup';\nimport { useControllableState, slot } from '@fluentui/react-utilities';\nimport { MoreHorizontalRegular } from '@fluentui/react-icons';\nimport {\n OnOpenChangeData,\n OpenPopoverEvents,\n Popover,\n type PopoverProps,\n PopoverSurface,\n} from '@fluentui/react-popover';\nimport type {\n AvatarGroupPopoverBaseProps,\n AvatarGroupPopoverBaseState,\n AvatarGroupPopoverProps,\n AvatarGroupPopoverState,\n} from './AvatarGroupPopover.types';\nimport { Tooltip } from '@fluentui/react-tooltip';\n\n/**\n * Create the state required to render AvatarGroupPopover.\n *\n * The returned state can be modified with hooks such as useAvatarGroupPopoverStyles_unstable,\n * before being passed to renderAvatarGroupPopover_unstable.\n *\n * @param props - props from this instance of AvatarGroupPopover\n */\nexport const useAvatarGroupPopover_unstable = (props: AvatarGroupPopoverProps): AvatarGroupPopoverState => {\n const size = useAvatarGroupContext_unstable(ctx => ctx.size) ?? defaultAvatarGroupSize;\n const layout = useAvatarGroupContext_unstable(ctx => ctx.layout);\n const { indicator = size < 24 ? 'icon' : 'count', ...baseProps } = props;\n\n const state = useAvatarGroupPopoverBase_unstable({\n indicator,\n ...baseProps,\n });\n\n if (layout === 'pie') {\n state.triggerButton.children = null;\n } else if (indicator === 'icon') {\n state.triggerButton.children = <MoreHorizontalRegular />;\n }\n\n return {\n size,\n ...state,\n\n components: {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n ...state.components,\n root: Popover,\n popoverSurface: PopoverSurface,\n tooltip: Tooltip,\n },\n root: slot.always(state.root as PopoverProps, { elementType: Popover }),\n popoverSurface: slot.always(props.popoverSurface, {\n defaultProps: state.popoverSurface,\n elementType: PopoverSurface,\n }),\n tooltip: slot.always(props.tooltip, {\n defaultProps: state.tooltip,\n elementType: Tooltip,\n }),\n };\n};\n\n/**\n * Handles popover open/closed state, indicator display, and slot configuration.\n * Use directly for custom implementations or use useAvatarGroupPopover_unstable for defaults.\n *\n * @param props - AvatarGroupPopover props\n * @returns AvatarGroupPopover state\n */\nexport const useAvatarGroupPopoverBase_unstable = (props: AvatarGroupPopoverBaseProps): AvatarGroupPopoverBaseState => {\n const layout = useAvatarGroupContext_unstable(ctx => ctx.layout);\n const { indicator = 'count', count = React.Children.count(props.children), children, ...restOfProps } = props;\n\n const [popoverOpen, setPopoverOpen] = useControllableState({\n state: props.open,\n defaultState: props.defaultOpen,\n initialState: false,\n });\n\n const handleOnPopoverChange = (e: OpenPopoverEvents, data: OnOpenChangeData) => {\n restOfProps.onOpenChange?.(e, data);\n setPopoverOpen(data.open);\n };\n\n let triggerButtonChildren;\n if (layout === 'pie') {\n triggerButtonChildren = null;\n } else if (indicator === 'count') {\n triggerButtonChildren = count > 99 ? '99+' : `+${count}`;\n }\n\n return {\n count,\n indicator,\n layout,\n popoverOpen,\n\n components: {\n root: Popover,\n triggerButton: 'button',\n content: 'ul',\n popoverSurface: PopoverSurface,\n tooltip: Tooltip,\n },\n root: slot.always(\n {\n // Popover expects a child for its children. The children are added in the renderAvatarGroupPopover.\n children: <></>,\n size: 'small',\n trapFocus: true,\n ...restOfProps,\n open: popoverOpen,\n onOpenChange: handleOnPopoverChange,\n },\n { elementType: 'div' },\n ),\n triggerButton: slot.always(props.triggerButton, {\n defaultProps: {\n children: triggerButtonChildren,\n type: 'button',\n },\n elementType: 'button',\n }),\n content: slot.always(props.content, {\n defaultProps: {\n children,\n role: 'list',\n },\n elementType: 'ul',\n }),\n popoverSurface: slot.always(props.popoverSurface, {\n defaultProps: {\n 'aria-label': 'Overflow',\n tabIndex: 0,\n },\n elementType: 'div',\n }),\n tooltip: slot.always(props.tooltip, {\n defaultProps: {\n content: 'View more people.',\n relationship: 'label',\n },\n elementType: 'div',\n }),\n };\n};\n"],"names":["React","useAvatarGroupContext_unstable","defaultAvatarGroupSize","useControllableState","slot","MoreHorizontalRegular","Popover","PopoverSurface","Tooltip","useAvatarGroupPopover_unstable","props","size","ctx","layout","indicator","baseProps","state","useAvatarGroupPopoverBase_unstable","triggerButton","children","components","root","popoverSurface","tooltip","always","elementType","defaultProps","count","Children","restOfProps","popoverOpen","setPopoverOpen","open","defaultState","defaultOpen","initialState","handleOnPopoverChange","e","data","onOpenChange","triggerButtonChildren","content","trapFocus","type","role","tabIndex","relationship"],"mappings":"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"}
@@ -57,21 +57,33 @@ _export(exports, {
57
57
  renderAvatar_unstable: function() {
58
58
  return _Avatar.renderAvatar_unstable;
59
59
  },
60
+ useAvatarBase_unstable: function() {
61
+ return _Avatar.useAvatarBase_unstable;
62
+ },
60
63
  useAvatarContext: function() {
61
64
  return _index1.useAvatarContext;
62
65
  },
66
+ useAvatarGroupBase_unstable: function() {
67
+ return _AvatarGroup.useAvatarGroupBase_unstable;
68
+ },
63
69
  useAvatarGroupContextValues: function() {
64
70
  return _AvatarGroup.useAvatarGroupContextValues;
65
71
  },
66
72
  useAvatarGroupContext_unstable: function() {
67
73
  return _index1.useAvatarGroupContext_unstable;
68
74
  },
75
+ useAvatarGroupItemBase_unstable: function() {
76
+ return _AvatarGroupItem.useAvatarGroupItemBase_unstable;
77
+ },
69
78
  useAvatarGroupItemStyles_unstable: function() {
70
79
  return _AvatarGroupItem.useAvatarGroupItemStyles_unstable;
71
80
  },
72
81
  useAvatarGroupItem_unstable: function() {
73
82
  return _AvatarGroupItem.useAvatarGroupItem_unstable;
74
83
  },
84
+ useAvatarGroupPopoverBase_unstable: function() {
85
+ return _AvatarGroupPopover.useAvatarGroupPopoverBase_unstable;
86
+ },
75
87
  useAvatarGroupPopoverContextValues_unstable: function() {
76
88
  return _AvatarGroupPopover.useAvatarGroupPopoverContextValues_unstable;
77
89
  },
@@ -100,6 +112,3 @@ const _AvatarGroup = require("./AvatarGroup");
100
112
  const _AvatarGroupItem = require("./AvatarGroupItem");
101
113
  const _AvatarGroupPopover = require("./AvatarGroupPopover");
102
114
  const _index1 = require("./contexts/index");
103
- // Experimental APIs, will be undocumented in experimental branch
104
- // export { useAvatarBase_unstable } from './Avatar';
105
- // export type { AvatarBaseProps, AvatarBaseState } from './Avatar';
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export {\n Avatar,\n avatarClassNames,\n renderAvatar_unstable,\n useAvatarStyles_unstable,\n useAvatar_unstable,\n} from './Avatar';\nexport type {\n AvatarNamedColor,\n AvatarProps,\n AvatarSlots,\n AvatarState,\n AvatarShape,\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n AvatarSizes,\n AvatarSize,\n} from './Avatar';\nexport { getInitials, partitionAvatarGroupItems } from './utils/index';\nexport type { PartitionAvatarGroupItems, PartitionAvatarGroupItemsOptions } from './utils/index';\nexport {\n AvatarGroup,\n avatarGroupClassNames,\n renderAvatarGroup_unstable,\n useAvatarGroupContextValues,\n useAvatarGroupStyles_unstable,\n useAvatarGroup_unstable,\n} from './AvatarGroup';\nexport type {\n AvatarGroupProps,\n AvatarGroupSlots,\n AvatarGroupState,\n AvatarGroupContextValue,\n AvatarGroupContextValues,\n} from './AvatarGroup';\nexport {\n AvatarGroupItem,\n avatarGroupItemClassNames,\n renderAvatarGroupItem_unstable,\n useAvatarGroupItemStyles_unstable,\n useAvatarGroupItem_unstable,\n} from './AvatarGroupItem';\nexport type { AvatarGroupItemProps, AvatarGroupItemSlots, AvatarGroupItemState } from './AvatarGroupItem';\nexport {\n AvatarGroupPopover,\n avatarGroupPopoverClassNames,\n renderAvatarGroupPopover_unstable,\n useAvatarGroupPopover_unstable,\n useAvatarGroupPopoverContextValues_unstable,\n useAvatarGroupPopoverStyles_unstable,\n} from './AvatarGroupPopover';\nexport type { AvatarGroupPopoverProps, AvatarGroupPopoverSlots, AvatarGroupPopoverState } from './AvatarGroupPopover';\nexport {\n AvatarContextProvider,\n AvatarGroupProvider,\n useAvatarContext,\n useAvatarGroupContext_unstable,\n} from './contexts/index';\nexport type { AvatarContextValue } from './contexts/index';\n\n// Experimental APIs, will be undocumented in experimental branch\n// export { useAvatarBase_unstable } from './Avatar';\n// export type { AvatarBaseProps, AvatarBaseState } from './Avatar';\n"],"names":["Avatar","avatarClassNames","renderAvatar_unstable","useAvatarStyles_unstable","useAvatar_unstable","getInitials","partitionAvatarGroupItems","AvatarGroup","avatarGroupClassNames","renderAvatarGroup_unstable","useAvatarGroupContextValues","useAvatarGroupStyles_unstable","useAvatarGroup_unstable","AvatarGroupItem","avatarGroupItemClassNames","renderAvatarGroupItem_unstable","useAvatarGroupItemStyles_unstable","useAvatarGroupItem_unstable","AvatarGroupPopover","avatarGroupPopoverClassNames","renderAvatarGroupPopover_unstable","useAvatarGroupPopover_unstable","useAvatarGroupPopoverContextValues_unstable","useAvatarGroupPopoverStyles_unstable","AvatarContextProvider","AvatarGroupProvider","useAvatarContext","useAvatarGroupContext_unstable"],"mappings":";;;;;;;;;;;IACEA,MAAM;;;yBAmDe;eAArBwB;;;eAhCAjB,wBAAW;;;eAeXM,gCAAe;;;eAQfK,sCAAkB;;;eAUlBO,2BAAmB;;;eAnDnBxB,wBAAgB;;IAmBhBO,qBAAqB;;;6BAeI;eAAzBM;;;eAQAK,gDAA4B;;;eA3BrBd,kBAAW;;;eAAEC,gCAAyB;;IAoB7CS,8BAA8B;;;;eAQ9BK,qDAAiC;;;eAvBjCX,uCAA0B;;;eAnB1BP,6BAAqB;;;eAmDrBwB,wBAAgB;;;eA/BhBhB,wCAA2B;;;eAgC3BiB,sCAA8B;;IAjB9BX,iCAAiC;;;;eACjCC,4CAA2B;;;eAQ3BK,+DAA2C;;;eAC3CC,wDAAoC;;kCAFN;eAA9BF;;;eAtBAV,0CAA6B;;;eAC7BC,oCAAuB;;4BArBC;eAAxBT;;;eACAC,0BAAkB;;;wBACb,WAAW;uBAWqC,gBAAgB;6BAShE,gBAAgB;iCAchB,oBAAoB;oCASpB,uBAAuB;wBAOvB,mBAAmB;CAG1B,iEAAiE;CACjE,qDAAqD;CACrD,oEAAoE"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export {\n Avatar,\n avatarClassNames,\n renderAvatar_unstable,\n useAvatarStyles_unstable,\n useAvatar_unstable,\n useAvatarBase_unstable,\n} from './Avatar';\nexport type {\n AvatarNamedColor,\n AvatarProps,\n AvatarSlots,\n AvatarState,\n AvatarShape,\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n AvatarSizes,\n AvatarSize,\n AvatarBaseProps,\n AvatarBaseState,\n} from './Avatar';\nexport { getInitials, partitionAvatarGroupItems } from './utils/index';\nexport type { PartitionAvatarGroupItems, PartitionAvatarGroupItemsOptions } from './utils/index';\nexport {\n AvatarGroup,\n avatarGroupClassNames,\n renderAvatarGroup_unstable,\n useAvatarGroupContextValues,\n useAvatarGroupStyles_unstable,\n useAvatarGroup_unstable,\n useAvatarGroupBase_unstable,\n} from './AvatarGroup';\nexport type {\n AvatarGroupProps,\n AvatarGroupSlots,\n AvatarGroupState,\n AvatarGroupContextValue,\n AvatarGroupContextValues,\n AvatarGroupBaseProps,\n AvatarGroupBaseState,\n} from './AvatarGroup';\nexport {\n AvatarGroupItem,\n avatarGroupItemClassNames,\n renderAvatarGroupItem_unstable,\n useAvatarGroupItemStyles_unstable,\n useAvatarGroupItem_unstable,\n useAvatarGroupItemBase_unstable,\n} from './AvatarGroupItem';\nexport type {\n AvatarGroupItemProps,\n AvatarGroupItemSlots,\n AvatarGroupItemState,\n AvatarGroupItemBaseProps,\n AvatarGroupItemBaseState,\n} from './AvatarGroupItem';\nexport {\n AvatarGroupPopover,\n avatarGroupPopoverClassNames,\n renderAvatarGroupPopover_unstable,\n useAvatarGroupPopover_unstable,\n useAvatarGroupPopoverContextValues_unstable,\n useAvatarGroupPopoverStyles_unstable,\n useAvatarGroupPopoverBase_unstable,\n} from './AvatarGroupPopover';\nexport type {\n AvatarGroupPopoverProps,\n AvatarGroupPopoverSlots,\n AvatarGroupPopoverState,\n AvatarGroupPopoverBaseProps,\n AvatarGroupPopoverBaseState,\n} from './AvatarGroupPopover';\nexport {\n AvatarContextProvider,\n AvatarGroupProvider,\n useAvatarContext,\n useAvatarGroupContext_unstable,\n} from './contexts/index';\nexport type { AvatarContextValue } from './contexts/index';\n"],"names":["Avatar","avatarClassNames","renderAvatar_unstable","useAvatarStyles_unstable","useAvatar_unstable","useAvatarBase_unstable","getInitials","partitionAvatarGroupItems","AvatarGroup","avatarGroupClassNames","renderAvatarGroup_unstable","useAvatarGroupContextValues","useAvatarGroupStyles_unstable","useAvatarGroup_unstable","useAvatarGroupBase_unstable","AvatarGroupItem","avatarGroupItemClassNames","renderAvatarGroupItem_unstable","useAvatarGroupItemStyles_unstable","useAvatarGroupItem_unstable","useAvatarGroupItemBase_unstable","AvatarGroupPopover","avatarGroupPopoverClassNames","renderAvatarGroupPopover_unstable","useAvatarGroupPopover_unstable","useAvatarGroupPopoverContextValues_unstable","useAvatarGroupPopoverStyles_unstable","useAvatarGroupPopoverBase_unstable","AvatarContextProvider","AvatarGroupProvider","useAvatarContext","useAvatarGroupContext_unstable"],"mappings":";;;;;;;;;;;IACEA,MAAM;;;IAuEN4B,qBAAqB;;;;eAjDrBpB,wBAAW;;;eAkBXO,gCAAe;;;eAefM,sCAAkB;;;eAiBlBQ,2BAAmB;;;eAvEnB5B,wBAAgB;;;eAsBhBQ,kCAAqB;;6BAkBI;eAAzBO;;gCAe4B;eAA5BM;;IArCOhB;iCAAW;;;eAAEC,gCAAyB;;;eAuB7CU,+CAA8B;;IAe9BM;oEAAiC;;;eAjCjCb,uCAA0B;;;eAtB1BR,6BAAqB;;;eAGrBG,8BAAsB;;oBAoEN;eAAhByB;;;eA7CAhB,wCAA2B;;;eAH3BH,wCAA2B;;IAiD3BoB;qDAA8B;;;eA7B9BX,gDAA+B;;;eAF/BF,kDAAiC;;;eACjCC,4CAA2B;;;eAiB3BQ,sDAAkC;;IAFlCF;8EAA2C;;IAC3CC,oCAAoC;;;;eAFpCF,kDAA8B;;;eAhC9BZ,0CAA6B;;;eAC7BC,oCAAuB;;;eAxBvBV,gCAAwB;;;eACxBC,0BAAkB;;;wBAEb,WAAW;uBAaqC,gBAAgB;6BAUhE,gBAAgB;iCAiBhB,oBAAoB;oCAgBpB,uBAAuB;wBAavB,mBAAmB"}
@@ -16,8 +16,10 @@ Object.defineProperty(exports, "getInitials", {
16
16
  const UNWANTED_ENCLOSURES_REGEX = /[\(\[\{][^\)\]\}]*[\)\]\}]/g;
17
17
  /**
18
18
  * Regular expression matching special ASCII characters except space, plus some unicode special characters.
19
- * Applies after unwanted enclosures have been removed
20
- */ const UNWANTED_CHARS_REGEX = /[\0-\u001F\!-/:-@\[-`\{-\u00BF\u0250-\u036F\uD800-\uFFFF]/g;
19
+ * Applies after unwanted enclosures have been removed.
20
+ * Note: the range starts at \uE000 (not \uD800) to avoid matching surrogate code units, which would break
21
+ * supplementary Unicode characters (encoded as surrogate pairs in UTF-16) such as GB18030-2022 extension characters.
22
+ */ const UNWANTED_CHARS_REGEX = /[\0-\u001F\!-/:-@\[-`\{-\u00BF\u0250-\u036F\uE000-\uFFFF]/g;
21
23
  /**
22
24
  * Regular expression matching phone numbers. Applied after chars matching UNWANTED_CHARS_REGEX have been removed
23
25
  * and number has been trimmed for whitespaces
@@ -28,24 +30,39 @@ const UNWANTED_ENCLOSURES_REGEX = /[\(\[\{][^\)\]\}]*[\)\]\}]/g;
28
30
  * Arabic: Arabic, Arabic Supplement, Arabic Extended-A.
29
31
  * Korean: Hangul Jamo, Hangul Compatibility Jamo, Hangul Jamo Extended-A, Hangul Syllables, Hangul Jamo Extended-B.
30
32
  * Japanese: Hiragana, Katakana.
31
- * CJK: CJK Unified Ideographs Extension A, CJK Unified Ideographs, CJK Compatibility Ideographs,
32
- * CJK Unified Ideographs Extension B
33
- */ const UNSUPPORTED_TEXT_REGEX = /[\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\u1100-\u11FF\u3130-\u318F\uA960-\uA97F\uAC00-\uD7AF\uD7B0-\uD7FF\u3040-\u309F\u30A0-\u30FF\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]|[\uD840-\uD869][\uDC00-\uDED6]/;
33
+ * CJK: CJK Unified Ideographs Extension A, CJK Unified Ideographs, CJK Compatibility Ideographs.
34
+ * Note: Supplementary CJK characters (GB18030-2022 extension characters in Ext B-I) are intentionally not listed
35
+ * here so they can be rendered as initials.
36
+ */ const UNSUPPORTED_TEXT_REGEX = /[\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\u1100-\u11FF\u3130-\u318F\uA960-\uA97F\uAC00-\uD7AF\uD7B0-\uD7FF\u3040-\u309F\u30A0-\u30FF\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]/;
37
+ function getFirstCodePoint(value) {
38
+ if (!value) {
39
+ return '';
40
+ }
41
+ const codePoint = value.codePointAt(0);
42
+ return codePoint === undefined ? '' : String.fromCodePoint(codePoint);
43
+ }
34
44
  function getInitialsLatin(displayName, isRtl, firstInitialOnly) {
35
45
  let initials = '';
36
46
  const splits = displayName.split(' ');
37
47
  if (splits.length !== 0) {
38
- initials += splits[0].charAt(0).toUpperCase();
48
+ // Use code point-aware helper to correctly handle supplementary characters (e.g. GB18030-2022 extension chars)
49
+ // that are encoded as surrogate pairs; charAt(0) would only return half of such a character.
50
+ initials += getFirstCodePoint(splits[0]).toUpperCase();
39
51
  }
40
52
  if (!firstInitialOnly) {
41
53
  if (splits.length === 2) {
42
- initials += splits[1].charAt(0).toUpperCase();
54
+ initials += getFirstCodePoint(splits[1]).toUpperCase();
43
55
  } else if (splits.length === 3) {
44
- initials += splits[2].charAt(0).toUpperCase();
56
+ initials += getFirstCodePoint(splits[2]).toUpperCase();
45
57
  }
46
58
  }
47
- if (isRtl && initials.length > 1) {
48
- return initials.charAt(1) + initials.charAt(0);
59
+ if (isRtl && [
60
+ ...initials
61
+ ].length > 1) {
62
+ const chars = [
63
+ ...initials
64
+ ];
65
+ return chars[1] + chars[0];
49
66
  }
50
67
  return initials;
51
68
  }
@@ -61,8 +78,11 @@ function getInitials(displayName, isRtl, options) {
61
78
  return '';
62
79
  }
63
80
  displayName = cleanupDisplayName(displayName);
64
- // For names containing CJK characters, and phone numbers, we don't display initials
65
- if (UNSUPPORTED_TEXT_REGEX.test(displayName) || !(options === null || options === void 0 ? void 0 : options.allowPhoneInitials) && PHONENUMBER_REGEX.test(displayName)) {
81
+ // Check only the first code point against UNSUPPORTED_TEXT_REGEX so that names starting with a supported
82
+ // character (e.g. GB18030-2022 extension characters) produce an initial even when the rest of the string
83
+ // contains BMP CJK characters that would otherwise trigger the regex.
84
+ const firstCodePoint = getFirstCodePoint(displayName);
85
+ if (UNSUPPORTED_TEXT_REGEX.test(firstCodePoint) || !(options === null || options === void 0 ? void 0 : options.allowPhoneInitials) && PHONENUMBER_REGEX.test(displayName)) {
66
86
  return '';
67
87
  }
68
88
  return getInitialsLatin(displayName, isRtl, options === null || options === void 0 ? void 0 : options.firstInitialOnly);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/getInitials.ts"],"sourcesContent":["/**\n * Regular expressions matching characters to ignore when calculating the initials.\n */\n\n/**\n * Regular expression matching characters within various types of enclosures, including the enclosures themselves\n * so for example, (xyz) [xyz] {xyz} all would be ignored\n */\nconst UNWANTED_ENCLOSURES_REGEX: RegExp = /[\\(\\[\\{][^\\)\\]\\}]*[\\)\\]\\}]/g;\n\n/**\n * Regular expression matching special ASCII characters except space, plus some unicode special characters.\n * Applies after unwanted enclosures have been removed\n */\nconst UNWANTED_CHARS_REGEX: RegExp = /[\\0-\\u001F\\!-/:-@\\[-`\\{-\\u00BF\\u0250-\\u036F\\uD800-\\uFFFF]/g;\n\n/**\n * Regular expression matching phone numbers. Applied after chars matching UNWANTED_CHARS_REGEX have been removed\n * and number has been trimmed for whitespaces\n */\nconst PHONENUMBER_REGEX: RegExp = /^\\d+[\\d\\s]*(:?ext|x|)\\s*\\d+$/i;\n\n/** Regular expression matching one or more spaces. */\nconst MULTIPLE_WHITESPACES_REGEX: RegExp = /\\s+/g;\n\n/**\n * Regular expression matching languages for which we currently don't support initials.\n * Arabic: Arabic, Arabic Supplement, Arabic Extended-A.\n * Korean: Hangul Jamo, Hangul Compatibility Jamo, Hangul Jamo Extended-A, Hangul Syllables, Hangul Jamo Extended-B.\n * Japanese: Hiragana, Katakana.\n * CJK: CJK Unified Ideographs Extension A, CJK Unified Ideographs, CJK Compatibility Ideographs,\n * CJK Unified Ideographs Extension B\n */\nconst UNSUPPORTED_TEXT_REGEX: RegExp =\n /[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\u1100-\\u11FF\\u3130-\\u318F\\uA960-\\uA97F\\uAC00-\\uD7AF\\uD7B0-\\uD7FF\\u3040-\\u309F\\u30A0-\\u30FF\\u3400-\\u4DBF\\u4E00-\\u9FFF\\uF900-\\uFAFF]|[\\uD840-\\uD869][\\uDC00-\\uDED6]/;\n\nfunction getInitialsLatin(displayName: string, isRtl: boolean, firstInitialOnly?: boolean): string {\n let initials = '';\n\n const splits: string[] = displayName.split(' ');\n if (splits.length !== 0) {\n initials += splits[0].charAt(0).toUpperCase();\n }\n\n if (!firstInitialOnly) {\n if (splits.length === 2) {\n initials += splits[1].charAt(0).toUpperCase();\n } else if (splits.length === 3) {\n initials += splits[2].charAt(0).toUpperCase();\n }\n }\n\n if (isRtl && initials.length > 1) {\n return initials.charAt(1) + initials.charAt(0);\n }\n\n return initials;\n}\n\nfunction cleanupDisplayName(displayName: string): string {\n displayName = displayName.replace(UNWANTED_ENCLOSURES_REGEX, '');\n displayName = displayName.replace(UNWANTED_CHARS_REGEX, '');\n displayName = displayName.replace(MULTIPLE_WHITESPACES_REGEX, ' ');\n displayName = displayName.trim();\n\n return displayName;\n}\n\n/**\n * Get (up to 2 characters) initials based on display name of the persona.\n *\n * @param displayName - The full name of the person or entity\n * @param isRtl - Whether the display is in RTL\n * @param options - Extra options to control the behavior of getInitials\n *\n * @returns The 1 or 2 character initials based on the name. Or an empty string if no initials\n * could be derived from the name.\n *\n * @internal\n */\nexport function getInitials(\n displayName: string | undefined | null,\n isRtl: boolean,\n options?: {\n /** Should initials be generated from phone numbers (default false) */\n allowPhoneInitials?: boolean;\n\n /** Returns only the first initial */\n firstInitialOnly?: boolean;\n },\n): string {\n if (!displayName) {\n return '';\n }\n\n displayName = cleanupDisplayName(displayName);\n\n // For names containing CJK characters, and phone numbers, we don't display initials\n if (\n UNSUPPORTED_TEXT_REGEX.test(displayName) ||\n (!options?.allowPhoneInitials && PHONENUMBER_REGEX.test(displayName))\n ) {\n return '';\n }\n\n return getInitialsLatin(displayName, isRtl, options?.firstInitialOnly);\n}\n"],"names":["UNWANTED_ENCLOSURES_REGEX","UNWANTED_CHARS_REGEX","PHONENUMBER_REGEX","MULTIPLE_WHITESPACES_REGEX","UNSUPPORTED_TEXT_REGEX","getInitialsLatin","displayName","isRtl","firstInitialOnly","initials","splits","split","length","charAt","toUpperCase","cleanupDisplayName","replace","trim","getInitials","options","test","allowPhoneInitials"],"mappings":"AAAA;;CAEC,GAED;;;CAGC;;;;;;;eAyEekB;;;AAxEhB,MAAMlB,4BAAoC;AAE1C;;;CAGC,GACD,MAAMC,uBAA+B;AAErC;;;CAGC,GACD,MAAMC,oBAA4B;AAElC,oDAAoD,GACpD,MAAMC,6BAAqC;AAE3C;;;;;;;CAOC,GACD,MAAMC,yBACJ;AAEF,SAASC,iBAAiBC,WAAmB,EAAEC,KAAc,EAAEC,gBAA0B;IACvF,IAAIC,WAAW;IAEf,MAAMC,SAAmBJ,YAAYK,KAAK,CAAC;IAC3C,IAAID,OAAOE,MAAM,KAAK,GAAG;QACvBH,YAAYC,MAAM,CAAC,EAAE,CAACG,MAAM,CAAC,GAAGC,WAAW;IAC7C;IAEA,IAAI,CAACN,kBAAkB;QACrB,IAAIE,OAAOE,MAAM,KAAK,GAAG;YACvBH,YAAYC,MAAM,CAAC,EAAE,CAACG,MAAM,CAAC,GAAGC,WAAW;QAC7C,OAAO,IAAIJ,OAAOE,MAAM,KAAK,GAAG;YAC9BH,YAAYC,MAAM,CAAC,EAAE,CAACG,MAAM,CAAC,GAAGC,WAAW;QAC7C;IACF;IAEA,IAAIP,SAASE,SAASG,MAAM,GAAG,GAAG;QAChC,OAAOH,SAASI,MAAM,CAAC,KAAKJ,SAASI,MAAM,CAAC;IAC9C;IAEA,OAAOJ;AACT;AAEA,SAASM,mBAAmBT,WAAmB;IAC7CA,cAAcA,YAAYU,OAAO,CAAChB,2BAA2B;IAC7DM,cAAcA,YAAYU,OAAO,CAACf,sBAAsB;IACxDK,cAAcA,YAAYU,OAAO,CAACb,4BAA4B;IAC9DG,cAAcA,YAAYW,IAAI;IAE9B,OAAOX;AACT;AAcO,qBACLA,WAAsC,EACtCC,KAAc,EACdY,OAMC;IAED,IAAI,CAACb,aAAa;QAChB,OAAO;IACT;IAEAA,cAAcS,mBAAmBT;IAEjC,oFAAoF;IACpF,IACEF,uBAAuBgB,IAAI,CAACd,gBAC3B,EAACa,YAAAA,QAAAA,YAAAA,KAAAA,IAAAA,KAAAA,IAAAA,QAASE,kBAAAA,AAAkB,KAAInB,kBAAkBkB,IAAI,CAACd,cACxD;QACA,OAAO;IACT;IAEA,OAAOD,iBAAiBC,aAAaC,OAAOY,YAAAA,QAAAA,YAAAA,KAAAA,IAAAA,KAAAA,IAAAA,QAASX,gBAAgB;AACvE"}
1
+ {"version":3,"sources":["../src/utils/getInitials.ts"],"sourcesContent":["/**\n * Regular expressions matching characters to ignore when calculating the initials.\n */\n\n/**\n * Regular expression matching characters within various types of enclosures, including the enclosures themselves\n * so for example, (xyz) [xyz] {xyz} all would be ignored\n */\nconst UNWANTED_ENCLOSURES_REGEX: RegExp = /[\\(\\[\\{][^\\)\\]\\}]*[\\)\\]\\}]/g;\n\n/**\n * Regular expression matching special ASCII characters except space, plus some unicode special characters.\n * Applies after unwanted enclosures have been removed.\n * Note: the range starts at \\uE000 (not \\uD800) to avoid matching surrogate code units, which would break\n * supplementary Unicode characters (encoded as surrogate pairs in UTF-16) such as GB18030-2022 extension characters.\n */\nconst UNWANTED_CHARS_REGEX: RegExp = /[\\0-\\u001F\\!-/:-@\\[-`\\{-\\u00BF\\u0250-\\u036F\\uE000-\\uFFFF]/g;\n\n/**\n * Regular expression matching phone numbers. Applied after chars matching UNWANTED_CHARS_REGEX have been removed\n * and number has been trimmed for whitespaces\n */\nconst PHONENUMBER_REGEX: RegExp = /^\\d+[\\d\\s]*(:?ext|x|)\\s*\\d+$/i;\n\n/** Regular expression matching one or more spaces. */\nconst MULTIPLE_WHITESPACES_REGEX: RegExp = /\\s+/g;\n\n/**\n * Regular expression matching languages for which we currently don't support initials.\n * Arabic: Arabic, Arabic Supplement, Arabic Extended-A.\n * Korean: Hangul Jamo, Hangul Compatibility Jamo, Hangul Jamo Extended-A, Hangul Syllables, Hangul Jamo Extended-B.\n * Japanese: Hiragana, Katakana.\n * CJK: CJK Unified Ideographs Extension A, CJK Unified Ideographs, CJK Compatibility Ideographs.\n * Note: Supplementary CJK characters (GB18030-2022 extension characters in Ext B-I) are intentionally not listed\n * here so they can be rendered as initials.\n */\nconst UNSUPPORTED_TEXT_REGEX: RegExp =\n /[\\u0600-\\u06FF\\u0750-\\u077F\\u08A0-\\u08FF\\u1100-\\u11FF\\u3130-\\u318F\\uA960-\\uA97F\\uAC00-\\uD7AF\\uD7B0-\\uD7FF\\u3040-\\u309F\\u30A0-\\u30FF\\u3400-\\u4DBF\\u4E00-\\u9FFF\\uF900-\\uFAFF]/;\n\nfunction getFirstCodePoint(value: string): string {\n if (!value) {\n return '';\n }\n\n const codePoint = value.codePointAt(0);\n return codePoint === undefined ? '' : String.fromCodePoint(codePoint);\n}\n\nfunction getInitialsLatin(displayName: string, isRtl: boolean, firstInitialOnly?: boolean): string {\n let initials = '';\n\n const splits: string[] = displayName.split(' ');\n if (splits.length !== 0) {\n // Use code point-aware helper to correctly handle supplementary characters (e.g. GB18030-2022 extension chars)\n // that are encoded as surrogate pairs; charAt(0) would only return half of such a character.\n initials += getFirstCodePoint(splits[0]).toUpperCase();\n }\n\n if (!firstInitialOnly) {\n if (splits.length === 2) {\n initials += getFirstCodePoint(splits[1]).toUpperCase();\n } else if (splits.length === 3) {\n initials += getFirstCodePoint(splits[2]).toUpperCase();\n }\n }\n\n if (isRtl && [...initials].length > 1) {\n const chars = [...initials];\n return chars[1] + chars[0];\n }\n\n return initials;\n}\n\nfunction cleanupDisplayName(displayName: string): string {\n displayName = displayName.replace(UNWANTED_ENCLOSURES_REGEX, '');\n displayName = displayName.replace(UNWANTED_CHARS_REGEX, '');\n displayName = displayName.replace(MULTIPLE_WHITESPACES_REGEX, ' ');\n displayName = displayName.trim();\n\n return displayName;\n}\n\n/**\n * Get (up to 2 characters) initials based on display name of the persona.\n *\n * @param displayName - The full name of the person or entity\n * @param isRtl - Whether the display is in RTL\n * @param options - Extra options to control the behavior of getInitials\n *\n * @returns The 1 or 2 character initials based on the name. Or an empty string if no initials\n * could be derived from the name.\n *\n * @internal\n */\nexport function getInitials(\n displayName: string | undefined | null,\n isRtl: boolean,\n options?: {\n /** Should initials be generated from phone numbers (default false) */\n allowPhoneInitials?: boolean;\n\n /** Returns only the first initial */\n firstInitialOnly?: boolean;\n },\n): string {\n if (!displayName) {\n return '';\n }\n\n displayName = cleanupDisplayName(displayName);\n\n // Check only the first code point against UNSUPPORTED_TEXT_REGEX so that names starting with a supported\n // character (e.g. GB18030-2022 extension characters) produce an initial even when the rest of the string\n // contains BMP CJK characters that would otherwise trigger the regex.\n const firstCodePoint = getFirstCodePoint(displayName);\n if (\n UNSUPPORTED_TEXT_REGEX.test(firstCodePoint) ||\n (!options?.allowPhoneInitials && PHONENUMBER_REGEX.test(displayName))\n ) {\n return '';\n }\n\n return getInitialsLatin(displayName, isRtl, options?.firstInitialOnly);\n}\n"],"names":["UNWANTED_ENCLOSURES_REGEX","UNWANTED_CHARS_REGEX","PHONENUMBER_REGEX","MULTIPLE_WHITESPACES_REGEX","UNSUPPORTED_TEXT_REGEX","getFirstCodePoint","value","codePoint","codePointAt","undefined","String","fromCodePoint","getInitialsLatin","displayName","isRtl","firstInitialOnly","initials","splits","split","length","toUpperCase","chars","cleanupDisplayName","replace","trim","getInitials","options","firstCodePoint","test","allowPhoneInitials"],"mappings":"AAAA;;CAEC,GAED;;;CAGC;;;;;;;eAwFeyB;;;AAvFhB,MAAMzB,4BAAoC;AAE1C;;;;;CAKC,GACD,MAAMC,uBAA+B;AAErC;;;CAGC,GACD,MAAMC,oBAA4B;AAElC,oDAAoD,GACpD,MAAMC,6BAAqC;AAE3C;;;;;;;;CAQC,GACD,MAAMC,yBACJ;AAEF,SAASC,kBAAkBC,KAAa;IACtC,IAAI,CAACA,OAAO;QACV,OAAO;IACT;IAEA,MAAMC,YAAYD,MAAME,WAAW,CAAC;IACpC,OAAOD,cAAcE,YAAY,KAAKC,OAAOC,aAAa,CAACJ;AAC7D;AAEA,SAASK,iBAAiBC,WAAmB,EAAEC,KAAc,EAAEC,gBAA0B;IACvF,IAAIC,WAAW;IAEf,MAAMC,SAAmBJ,YAAYK,KAAK,CAAC;IAC3C,IAAID,OAAOE,MAAM,KAAK,GAAG;QACvB,+GAA+G;QAC/G,6FAA6F;QAC7FH,YAAYX,kBAAkBY,MAAM,CAAC,EAAE,EAAEG,WAAW;IACtD;IAEA,IAAI,CAACL,kBAAkB;QACrB,IAAIE,OAAOE,MAAM,KAAK,GAAG;YACvBH,YAAYX,kBAAkBY,MAAM,CAAC,EAAE,EAAEG,WAAW;QACtD,OAAO,IAAIH,OAAOE,MAAM,KAAK,GAAG;YAC9BH,YAAYX,kBAAkBY,MAAM,CAAC,EAAE,EAAEG,WAAW;QACtD;IACF;IAEA,IAAIN,SAAS;WAAIE;KAAS,CAACG,MAAM,GAAG,GAAG;QACrC,MAAME,QAAQ;eAAIL;SAAS;QAC3B,OAAOK,KAAK,CAAC,EAAE,GAAGA,KAAK,CAAC,EAAE;IAC5B;IAEA,OAAOL;AACT;AAEA,SAASM,mBAAmBT,WAAmB;IAC7CA,cAAcA,YAAYU,OAAO,CAACvB,2BAA2B;IAC7Da,cAAcA,YAAYU,OAAO,CAACtB,sBAAsB;IACxDY,cAAcA,YAAYU,OAAO,CAACpB,4BAA4B;IAC9DU,cAAcA,YAAYW,IAAI;IAE9B,OAAOX;AACT;AAcO,qBACLA,WAAsC,EACtCC,KAAc,EACdY,OAMC;IAED,IAAI,CAACb,aAAa;QAChB,OAAO;IACT;IAEAA,cAAcS,mBAAmBT;IAEjC,yGAAyG;IACzG,yGAAyG;IACzG,sEAAsE;IACtE,MAAMc,iBAAiBtB,kBAAkBQ;IACzC,IACET,uBAAuBwB,IAAI,CAACD,mBAC3B,EAACD,YAAAA,QAAAA,YAAAA,KAAAA,IAAAA,KAAAA,IAAAA,QAASG,kBAAAA,AAAkB,KAAI3B,kBAAkB0B,IAAI,CAACf,cACxD;QACA,OAAO;IACT;IAEA,OAAOD,iBAAiBC,aAAaC,OAAOY,YAAAA,QAAAA,YAAAA,KAAAA,IAAAA,KAAAA,IAAAA,QAASX,gBAAgB;AACvE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluentui/react-avatar",
3
- "version": "9.10.4",
3
+ "version": "9.11.0",
4
4
  "description": "React components for building Microsoft web experiences.",
5
5
  "main": "lib-commonjs/index.js",
6
6
  "module": "lib/index.js",
@@ -22,7 +22,7 @@
22
22
  "@fluentui/react-shared-contexts": "^9.26.2",
23
23
  "@fluentui/react-tabster": "^9.26.13",
24
24
  "@fluentui/react-theme": "^9.2.1",
25
- "@fluentui/react-tooltip": "^9.9.3",
25
+ "@fluentui/react-tooltip": "^9.10.0",
26
26
  "@fluentui/react-utilities": "^9.26.2",
27
27
  "@fluentui/react-jsx-runtime": "^9.4.1",
28
28
  "@griffel/react": "^1.5.32",