Initial commit

This commit is contained in:
2025-03-07 19:22:02 +01:00
commit 4a98255d83
55743 changed files with 5280367 additions and 0 deletions
+28
View File
@@ -0,0 +1,28 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
List: function() {
return _index.List;
},
listClassNames: function() {
return _index.listClassNames;
},
renderList_unstable: function() {
return _index.renderList_unstable;
},
useListStyles_unstable: function() {
return _index.useListStyles_unstable;
},
useList_unstable: function() {
return _index.useList_unstable;
}
});
const _index = require("./components/List/index");
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../src/List.ts"],"sourcesContent":["export type {\n ListContextValue,\n ListContextValues,\n ListNavigationMode,\n ListProps,\n ListSlots,\n ListState,\n OnListSelectionChangeData,\n} from './components/List/index';\nexport {\n List,\n listClassNames,\n renderList_unstable,\n useListStyles_unstable,\n useList_unstable,\n} from './components/List/index';\n"],"names":["List","listClassNames","renderList_unstable","useListStyles_unstable","useList_unstable"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;;;;;;;;IAUEA,IAAI;eAAJA,WAAI;;IACJC,cAAc;eAAdA,qBAAc;;IACdC,mBAAmB;eAAnBA,0BAAmB;;IACnBC,sBAAsB;eAAtBA,6BAAsB;;IACtBC,gBAAgB;eAAhBA,uBAAgB;;;uBACX"}
+28
View File
@@ -0,0 +1,28 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
ListItem: function() {
return _index.ListItem;
},
listItemClassNames: function() {
return _index.listItemClassNames;
},
renderListItem_unstable: function() {
return _index.renderListItem_unstable;
},
useListItemStyles_unstable: function() {
return _index.useListItemStyles_unstable;
},
useListItem_unstable: function() {
return _index.useListItem_unstable;
}
});
const _index = require("./components/ListItem/index");
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../src/ListItem.ts"],"sourcesContent":["export type {\n ListItemActionEventData,\n ListItemProps,\n ListItemSlots,\n ListItemState,\n ListItemValue,\n} from './components/ListItem/index';\nexport {\n ListItem,\n listItemClassNames,\n renderListItem_unstable,\n useListItemStyles_unstable,\n useListItem_unstable,\n} from './components/ListItem/index';\n"],"names":["ListItem","listItemClassNames","renderListItem_unstable","useListItemStyles_unstable","useListItem_unstable"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;;;;;;;;IAQEA,QAAQ;eAARA,eAAQ;;IACRC,kBAAkB;eAAlBA,yBAAkB;;IAClBC,uBAAuB;eAAvBA,8BAAuB;;IACvBC,0BAA0B;eAA1BA,iCAA0B;;IAC1BC,oBAAoB;eAApBA,2BAAoB;;;uBACf"}
+25
View File
@@ -0,0 +1,25 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "List", {
enumerable: true,
get: function() {
return List;
}
});
const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
const _reactsharedcontexts = require("@fluentui/react-shared-contexts");
const _useList = require("./useList");
const _renderList = require("./renderList");
const _useListStylesstyles = require("./useListStyles.styles");
const _useListContextValues = require("./useListContextValues");
const List = /*#__PURE__*/ _react.forwardRef((props, ref)=>{
const state = (0, _useList.useList_unstable)(props, ref);
const contextValues = (0, _useListContextValues.useListContextValues_unstable)(state);
(0, _useListStylesstyles.useListStyles_unstable)(state);
(0, _reactsharedcontexts.useCustomStyleHook_unstable)('useListStyles_unstable')(state);
return (0, _renderList.renderList_unstable)(state, contextValues);
});
List.displayName = 'List';
@@ -0,0 +1 @@
{"version":3,"sources":["../src/components/List/List.tsx"],"sourcesContent":["import * as React from 'react';\nimport type { ForwardRefComponent } from '@fluentui/react-utilities';\nimport { useCustomStyleHook_unstable } from '@fluentui/react-shared-contexts';\nimport { useList_unstable } from './useList';\nimport { renderList_unstable } from './renderList';\nimport { useListStyles_unstable } from './useListStyles.styles';\nimport type { ListProps } from './List.types';\nimport { useListContextValues_unstable } from './useListContextValues';\n\nexport const List: ForwardRefComponent<ListProps> = React.forwardRef((props, ref) => {\n const state = useList_unstable(props, ref);\n const contextValues = useListContextValues_unstable(state);\n\n useListStyles_unstable(state);\n useCustomStyleHook_unstable('useListStyles_unstable')(state);\n\n return renderList_unstable(state, contextValues);\n});\n\nList.displayName = 'List';\n"],"names":["List","React","forwardRef","props","ref","state","useList_unstable","contextValues","useListContextValues_unstable","useListStyles_unstable","useCustomStyleHook_unstable","renderList_unstable","displayName"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;+BASaA;;;eAAAA;;;;iEATU;qCAEqB;yBACX;4BACG;qCACG;sCAEO;AAEvC,MAAMA,OAAAA,WAAAA,GAAuCC,OAAMC,UAAU,CAAC,CAACC,OAAOC;IAC3E,MAAMC,QAAQC,IAAAA,yBAAAA,EAAiBH,OAAOC;IACtC,MAAMG,gBAAgBC,IAAAA,mDAAAA,EAA8BH;IAEpDI,IAAAA,2CAAAA,EAAuBJ;IACvBK,IAAAA,gDAAAA,EAA4B,0BAA0BL;IAEtD,OAAOM,IAAAA,+BAAAA,EAAoBN,OAAOE;AACpC;AAEAP,KAAKY,WAAW,GAAG"}
@@ -0,0 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
@@ -0,0 +1 @@
{"version":3,"sources":["../src/components/List/List.types.ts"],"sourcesContent":["import * as React from 'react';\n\nimport type {\n ComponentProps,\n ComponentState,\n Slot,\n SelectionMode,\n SelectionItemId,\n EventHandler,\n EventData,\n} from '@fluentui/react-utilities';\nimport type { ListSelectionState } from '../../hooks/types';\n\nexport type ListSlots = {\n root: NonNullable<Slot<'ul', 'div' | 'ol'>>;\n};\n\nexport type OnListSelectionChangeData = EventData<'change', React.SyntheticEvent> & {\n selectedItems: SelectionItemId[];\n};\n\nexport type ListNavigationMode = 'items' | 'composite';\n\n/**\n * List Props\n */\nexport type ListProps = ComponentProps<ListSlots> & {\n navigationMode?: ListNavigationMode;\n selectionMode?: SelectionMode;\n selectedItems?: SelectionItemId[];\n defaultSelectedItems?: SelectionItemId[];\n onSelectionChange?: EventHandler<OnListSelectionChangeData>;\n};\n\nexport type ListContextValue = {\n navigationMode: ListNavigationMode | undefined;\n selection?: ListSelectionState;\n listItemRole: string;\n validateListItem: (listItemElement: HTMLElement) => void;\n};\n\nexport type ListContextValues = {\n listContext: ListContextValue;\n};\n\n/**\n * State used in rendering List\n */\nexport type ListState = ComponentState<ListSlots> & ListContextValue;\n"],"names":[],"rangeMappings":";;;;;","mappings":";;;;;iEAAuB"}
@@ -0,0 +1,31 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
List: function() {
return _List.List;
},
listClassNames: function() {
return _useListStylesstyles.listClassNames;
},
renderList_unstable: function() {
return _renderList.renderList_unstable;
},
useListStyles_unstable: function() {
return _useListStylesstyles.useListStyles_unstable;
},
useList_unstable: function() {
return _useList.useList_unstable;
}
});
const _List = require("./List");
const _renderList = require("./renderList");
const _useList = require("./useList");
const _useListStylesstyles = require("./useListStyles.styles");
@@ -0,0 +1 @@
{"version":3,"sources":["../src/components/List/index.ts"],"sourcesContent":["export { List } from './List';\nexport type {\n ListContextValue,\n ListContextValues,\n ListNavigationMode,\n ListProps,\n ListSlots,\n ListState,\n OnListSelectionChangeData,\n} from './List.types';\nexport { renderList_unstable } from './renderList';\nexport { useList_unstable } from './useList';\nexport { listClassNames, useListStyles_unstable } from './useListStyles.styles';\n"],"names":["List","listClassNames","renderList_unstable","useListStyles_unstable","useList_unstable"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;;;;;;;;IAASA,IAAI;eAAJA,UAAI;;IAYJC,cAAc;eAAdA,mCAAc;;IAFdC,mBAAmB;eAAnBA,+BAAmB;;IAEHC,sBAAsB;eAAtBA,2CAAsB;;IADtCC,gBAAgB;eAAhBA,yBAAgB;;;sBAXJ;4BAUe;yBACH;qCACsB"}
@@ -0,0 +1,32 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
ListContextProvider: function() {
return ListContextProvider;
},
listContextDefaultValue: function() {
return listContextDefaultValue;
},
useListContext_unstable: function() {
return useListContext_unstable;
}
});
const _reactcontextselector = require("@fluentui/react-context-selector");
const listContextDefaultValue = {
navigationMode: undefined,
selection: undefined,
listItemRole: 'listitem',
validateListItem: ()=>{
/* noop */ }
};
const listContext = (0, _reactcontextselector.createContext)(undefined);
const ListContextProvider = listContext.Provider;
const useListContext_unstable = (selector)=>(0, _reactcontextselector.useContextSelector)(listContext, (ctx = listContextDefaultValue)=>selector(ctx));
@@ -0,0 +1 @@
{"version":3,"sources":["../src/components/List/listContext.ts"],"sourcesContent":["import { createContext, useContextSelector } from '@fluentui/react-context-selector';\nimport type { ContextSelector } from '@fluentui/react-context-selector';\nimport { ListContextValue } from './List.types';\n\nexport const listContextDefaultValue: ListContextValue = {\n navigationMode: undefined,\n selection: undefined,\n listItemRole: 'listitem',\n validateListItem: () => {\n /* noop */\n },\n};\n\nconst listContext = createContext<ListContextValue | undefined>(undefined);\n\nexport const ListContextProvider = listContext.Provider;\n\nexport const useListContext_unstable = <T>(selector: ContextSelector<ListContextValue, T>): T =>\n useContextSelector(listContext, (ctx = listContextDefaultValue) => selector(ctx));\n"],"names":["ListContextProvider","listContextDefaultValue","useListContext_unstable","navigationMode","undefined","selection","listItemRole","validateListItem","listContext","createContext","Provider","selector","useContextSelector","ctx"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;;;;;;;;IAeaA,mBAAAA;eAAAA;;IAXAC,uBAAAA;eAAAA;;IAaAC,uBAAAA;eAAAA;;;sCAjBqC;AAI3C,MAAMD,0BAA4C;IACvDE,gBAAgBC;IAChBC,WAAWD;IACXE,cAAc;IACdC,kBAAkB;IAChB,QAAQ,GACV;AACF;AAEA,MAAMC,cAAcC,IAAAA,mCAAAA,EAA4CL;AAEzD,MAAMJ,sBAAsBQ,YAAYE,QAAQ;AAEhD,MAAMR,0BAA0B,CAAIS,WACzCC,IAAAA,wCAAAA,EAAmBJ,aAAa,CAACK,MAAMZ,uBAAuB,GAAKU,SAASE"}
@@ -0,0 +1,20 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "renderList_unstable", {
enumerable: true,
get: function() {
return renderList_unstable;
}
});
const _jsxruntime = require("@fluentui/react-jsx-runtime/jsx-runtime");
const _reactutilities = require("@fluentui/react-utilities");
const _listContext = require("./listContext");
const renderList_unstable = (state, contextValues)=>{
(0, _reactutilities.assertSlots)(state);
return /*#__PURE__*/ (0, _jsxruntime.jsx)(_listContext.ListContextProvider, {
value: contextValues.listContext,
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(state.root, {})
});
};
@@ -0,0 +1 @@
{"version":3,"sources":["../src/components/List/renderList.tsx"],"sourcesContent":["/** @jsxRuntime automatic */\n/** @jsxImportSource @fluentui/react-jsx-runtime */\n\nimport { assertSlots } from '@fluentui/react-utilities';\nimport type { ListState, ListSlots, ListContextValues } from './List.types';\nimport { ListContextProvider } from './listContext';\n\n/**\n * Render the final JSX of List\n */\nexport const renderList_unstable = (state: ListState, contextValues: ListContextValues) => {\n assertSlots<ListSlots>(state);\n\n return (\n <ListContextProvider value={contextValues.listContext}>\n <state.root />\n </ListContextProvider>\n );\n};\n"],"names":["renderList_unstable","state","contextValues","assertSlots","_jsx","ListContextProvider","value","listContext","root"],"rangeMappings":";;;;;;;;;;;;;;;;;;;","mappings":";;;;+BAUaA;;;eAAAA;;;4BATb;gCAE4B;6BAEQ;AAK7B,MAAMA,sBAAsB,CAACC,OAAkBC;IACpDC,IAAAA,2BAAAA,EAAuBF;IAEvB,OAAA,WAAA,GACEG,IAAAA,eAAA,EAACC,gCAAAA,EAAAA;QAAoBC,OAAOJ,cAAcK,WAAW;kBACnD,WAAA,GAAAH,IAAAA,eAAA,EAACH,MAAMO,IAAI,EAAA,CAAA;;AAGjB"}
@@ -0,0 +1,78 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "useList_unstable", {
enumerable: true,
get: function() {
return useList_unstable;
}
});
const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
const _reactutilities = require("@fluentui/react-utilities");
const _reacttabster = require("@fluentui/react-tabster");
const _useListSelection = require("../../hooks/useListSelection");
const _utils = require("../../utils");
const DEFAULT_ROOT_EL_TYPE = 'ul';
const useList_unstable = (props, ref)=>{
const { navigationMode, selectionMode, selectedItems, defaultSelectedItems, onSelectionChange } = props;
const as = props.as || navigationMode === 'composite' ? 'div' : DEFAULT_ROOT_EL_TYPE;
const arrowNavigationAttributes = (0, _reacttabster.useArrowNavigationGroup)({
axis: 'vertical',
memorizeCurrent: true
});
const [selectionState, setSelectionState] = (0, _reactutilities.useControllableState)({
state: selectedItems,
defaultState: defaultSelectedItems,
initialState: []
});
const onChange = (0, _reactutilities.useEventCallback)((e, data)=>{
const selectedItemsAsArray = Array.from(data.selectedItems);
setSelectionState(selectedItemsAsArray);
onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange(e, {
event: e,
type: 'change',
selectedItems: selectedItemsAsArray
});
});
const selection = (0, _useListSelection.useListSelection)({
onSelectionChange: onChange,
selectionMode: selectionMode || 'multiselect',
selectedItems: selectionState
});
const listRole = props.role || (0, _utils.calculateListRole)(navigationMode, !!selectionMode);
const listItemRole = (0, _utils.calculateListItemRoleForListRole)(listRole);
const { findAllFocusable } = (0, _reacttabster.useFocusFinders)();
const validateListItem = (0, _reactutilities.useEventCallback)((listItemEl)=>{
if (process.env.NODE_ENV === 'production') {
return;
}
const itemRole = listItemEl.getAttribute('role') || '';
const focusable = findAllFocusable(listItemEl);
(0, _utils.validateProperElementTypes)(as, listItemEl.tagName.toLocaleLowerCase());
(0, _utils.validateProperRolesAreUsed)(listRole, itemRole, !!selectionMode, focusable.length > 0);
(0, _utils.validateGridCellsArePresent)(listRole, listItemEl);
});
return {
components: {
root: as
},
root: _reactutilities.slot.always((0, _reactutilities.getIntrinsicElementProps)(as, {
ref,
role: listRole,
...selectionMode && {
'aria-multiselectable': selectionMode === 'multiselect' ? true : undefined
},
...arrowNavigationAttributes,
...props
}), {
elementType: as
}),
listItemRole,
validateListItem,
navigationMode,
// only pass down selection state if its handled internally, otherwise just report the events
selection: selectionMode ? selection : undefined
};
};
File diff suppressed because one or more lines are too long
@@ -0,0 +1,22 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "useListContextValues_unstable", {
enumerable: true,
get: function() {
return useListContextValues_unstable;
}
});
function useListContextValues_unstable(state) {
const { selection, navigationMode, listItemRole, validateListItem } = state;
const listContext = {
selection,
listItemRole,
navigationMode,
validateListItem
};
return {
listContext
};
}
@@ -0,0 +1 @@
{"version":3,"sources":["../src/components/List/useListContextValues.ts"],"sourcesContent":["import { ListContextValues, ListState } from './List.types';\n\nexport function useListContextValues_unstable(state: ListState): ListContextValues {\n const { selection, navigationMode, listItemRole, validateListItem } = state;\n\n const listContext = {\n selection,\n listItemRole,\n navigationMode,\n validateListItem,\n };\n\n return {\n listContext,\n };\n}\n"],"names":["useListContextValues_unstable","state","selection","navigationMode","listItemRole","validateListItem","listContext"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;","mappings":";;;;+BAEgBA;;;eAAAA;;;AAAT,SAASA,8BAA8BC,KAAgB;IAC5D,MAAM,EAAEC,SAAS,EAAEC,cAAc,EAAEC,YAAY,EAAEC,gBAAgB,EAAE,GAAGJ;IAEtE,MAAMK,cAAc;QAClBJ;QACAE;QACAD;QACAE;IACF;IAEA,OAAO;QACLC;IACF;AACF"}
@@ -0,0 +1,31 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
listClassNames: function() {
return listClassNames;
},
useListStyles_unstable: function() {
return useListStyles_unstable;
}
});
const _react = require("@griffel/react");
const listClassNames = {
root: 'fui-List'
};
const useRootBaseStyles = /*#__PURE__*/ (0, _react.__resetStyles)("r1m6yby2", null, [
".r1m6yby2{padding:0;margin:0;text-indent:0;list-style-type:none;}"
]);
const useListStyles_unstable = (state)=>{
'use no memo';
const rootStyles = useRootBaseStyles();
state.root.className = (0, _react.mergeClasses)(listClassNames.root, rootStyles, state.root.className);
return state;
};
@@ -0,0 +1 @@
{"version":3,"sources":["useListStyles.styles.js"],"sourcesContent":["import { makeResetStyles, mergeClasses } from '@griffel/react';\nexport const listClassNames = {\n root: 'fui-List'\n};\nconst useRootBaseStyles = makeResetStyles({\n padding: 0,\n margin: 0,\n textIndent: 0,\n listStyleType: 'none'\n});\n/**\n * Apply styling to the List slots based on the state\n */ export const useListStyles_unstable = (state)=>{\n 'use no memo';\n const rootStyles = useRootBaseStyles();\n state.root.className = mergeClasses(listClassNames.root, rootStyles, state.root.className);\n return state;\n};\n"],"names":["listClassNames","useListStyles_unstable","root","useRootBaseStyles","__resetStyles","state","rootStyles","className","mergeClasses"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;;;;;;;;IACaA,cAAc;eAAdA;;IAWIC,sBAAsB;eAAtBA;;;uBAZ6B;AACvC,MAAMD,iBAAiB;IAC1BE,MAAM;AACV;AACA,MAAMC,oBAAiB,WAAA,GAAGC,IAAAA,oBAAA,EAAA,YAAA,MAAA;IAAA;CAKzB;AAGU,MAAMH,yBAA0BI,CAAAA;IACvC;IACA,MAAMC,aAAaH;IACnBE,MAAMH,IAAI,CAACK,SAAS,GAAGC,IAAAA,mBAAY,EAACR,eAAeE,IAAI,EAAEI,YAAYD,MAAMH,IAAI,CAACK,SAAS;IACzF,OAAOF;AACX"}
@@ -0,0 +1,23 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "ListItem", {
enumerable: true,
get: function() {
return ListItem;
}
});
const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
const _reactsharedcontexts = require("@fluentui/react-shared-contexts");
const _useListItem = require("./useListItem");
const _renderListItem = require("./renderListItem");
const _useListItemStylesstyles = require("./useListItemStyles.styles");
const ListItem = /*#__PURE__*/ _react.forwardRef((props, ref)=>{
const state = (0, _useListItem.useListItem_unstable)(props, ref);
(0, _useListItemStylesstyles.useListItemStyles_unstable)(state);
(0, _reactsharedcontexts.useCustomStyleHook_unstable)('useListItemStyles_unstable')(state);
return (0, _renderListItem.renderListItem_unstable)(state);
});
ListItem.displayName = 'ListItem';
@@ -0,0 +1 @@
{"version":3,"sources":["../src/components/ListItem/ListItem.tsx"],"sourcesContent":["import * as React from 'react';\nimport type { ForwardRefComponent } from '@fluentui/react-utilities';\nimport { useCustomStyleHook_unstable } from '@fluentui/react-shared-contexts';\nimport { useListItem_unstable } from './useListItem';\nimport { renderListItem_unstable } from './renderListItem';\nimport { useListItemStyles_unstable } from './useListItemStyles.styles';\nimport type { ListItemProps } from './ListItem.types';\n\nexport const ListItem: ForwardRefComponent<ListItemProps> = React.forwardRef<HTMLLIElement | HTMLDivElement>(\n (props, ref) => {\n const state = useListItem_unstable(props, ref);\n\n useListItemStyles_unstable(state);\n useCustomStyleHook_unstable('useListItemStyles_unstable')(state);\n return renderListItem_unstable(state);\n },\n);\n\nListItem.displayName = 'ListItem';\n"],"names":["ListItem","React","forwardRef","props","ref","state","useListItem_unstable","useListItemStyles_unstable","useCustomStyleHook_unstable","renderListItem_unstable","displayName"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;+BAQaA;;;eAAAA;;;;iEARU;qCAEqB;6BACP;gCACG;yCACG;AAGpC,MAAMA,WAAAA,WAAAA,GAA+CC,OAAMC,UAAU,CAC1E,CAACC,OAAOC;IACN,MAAMC,QAAQC,IAAAA,iCAAAA,EAAqBH,OAAOC;IAE1CG,IAAAA,mDAAAA,EAA2BF;IAC3BG,IAAAA,gDAAAA,EAA4B,8BAA8BH;IAC1D,OAAOI,IAAAA,uCAAAA,EAAwBJ;AACjC;AAGFL,SAASU,WAAW,GAAG"}
@@ -0,0 +1,6 @@
/**
* State used in rendering ListItem
*/ "use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
@@ -0,0 +1 @@
{"version":3,"sources":["../src/components/ListItem/ListItem.types.ts"],"sourcesContent":["import { Checkbox } from '@fluentui/react-checkbox';\nimport type { ComponentProps, ComponentState, EventData, EventHandler, Slot } from '@fluentui/react-utilities';\nimport { ListItemActionEvent, ListItemActionEventName } from '../../events/ListItemActionEvent';\n\nexport type ListItemSlots = {\n root: NonNullable<Slot<'li', 'div'>>;\n checkmark?: Slot<typeof Checkbox>;\n};\n\nexport type ListItemValue = string | number;\n\nexport type ListItemActionEventData = EventData<typeof ListItemActionEventName, ListItemActionEvent> & {\n value: ListItemValue;\n};\n/**\n * ListItem Props\n */\nexport type ListItemProps = ComponentProps<ListItemSlots> & {\n value?: ListItemValue;\n onAction?: EventHandler<ListItemActionEventData>;\n};\n\n/**\n * State used in rendering ListItem\n */\nexport type ListItemState = ComponentState<ListItemSlots> & { selectable: boolean; navigable: boolean };\n"],"names":[],"rangeMappings":";;","mappings":"AAsBA;;CAEC"}
@@ -0,0 +1,31 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
ListItem: function() {
return _ListItem.ListItem;
},
listItemClassNames: function() {
return _useListItemStylesstyles.listItemClassNames;
},
renderListItem_unstable: function() {
return _renderListItem.renderListItem_unstable;
},
useListItemStyles_unstable: function() {
return _useListItemStylesstyles.useListItemStyles_unstable;
},
useListItem_unstable: function() {
return _useListItem.useListItem_unstable;
}
});
const _ListItem = require("./ListItem");
const _renderListItem = require("./renderListItem");
const _useListItem = require("./useListItem");
const _useListItemStylesstyles = require("./useListItemStyles.styles");
@@ -0,0 +1 @@
{"version":3,"sources":["../src/components/ListItem/index.ts"],"sourcesContent":["export { ListItem } from './ListItem';\nexport type {\n ListItemActionEventData,\n ListItemProps,\n ListItemSlots,\n ListItemState,\n ListItemValue,\n} from './ListItem.types';\nexport { renderListItem_unstable } from './renderListItem';\nexport { useListItem_unstable } from './useListItem';\nexport { listItemClassNames, useListItemStyles_unstable } from './useListItemStyles.styles';\n"],"names":["ListItem","listItemClassNames","renderListItem_unstable","useListItemStyles_unstable","useListItem_unstable"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;;;;;;;;IAASA,QAAQ;eAARA,kBAAQ;;IAURC,kBAAkB;eAAlBA,2CAAkB;;IAFlBC,uBAAuB;eAAvBA,uCAAuB;;IAEHC,0BAA0B;eAA1BA,mDAA0B;;IAD9CC,oBAAoB;eAApBA,iCAAoB;;;0BATJ;gCAQe;6BACH;yCAC0B"}
@@ -0,0 +1,21 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "renderListItem_unstable", {
enumerable: true,
get: function() {
return renderListItem_unstable;
}
});
const _jsxruntime = require("@fluentui/react-jsx-runtime/jsx-runtime");
const _reactutilities = require("@fluentui/react-utilities");
const renderListItem_unstable = (state)=>{
(0, _reactutilities.assertSlots)(state);
return /*#__PURE__*/ (0, _jsxruntime.jsxs)(state.root, {
children: [
state.checkmark && /*#__PURE__*/ (0, _jsxruntime.jsx)(state.checkmark, {}),
state.root.children
]
});
};
@@ -0,0 +1 @@
{"version":3,"sources":["../src/components/ListItem/renderListItem.tsx"],"sourcesContent":["/** @jsxRuntime automatic */\n/** @jsxImportSource @fluentui/react-jsx-runtime */\n\nimport { assertSlots } from '@fluentui/react-utilities';\nimport type { ListItemState, ListItemSlots } from './ListItem.types';\n\n/**\n * Render the final JSX of ListItem\n */\nexport const renderListItem_unstable = (state: ListItemState) => {\n assertSlots<ListItemSlots>(state);\n\n return (\n <state.root>\n {state.checkmark && <state.checkmark />}\n {state.root.children}\n </state.root>\n );\n};\n"],"names":["renderListItem_unstable","state","assertSlots","_jsxs","root","checkmark","_jsx","children"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;","mappings":";;;;+BASaA;;;eAAAA;;;4BARb;gCAE4B;AAMrB,MAAMA,0BAA0B,CAACC;IACtCC,IAAAA,2BAAAA,EAA2BD;IAE3B,OAAA,WAAA,GACEE,IAAAA,gBAAA,EAACF,MAAMG,IAAI,EAAA;;YACRH,MAAMI,SAAS,IAAA,WAAA,GAAIC,IAAAA,eAAA,EAACL,MAAMI,SAAS,EAAA,CAAA;YACnCJ,MAAMG,IAAI,CAACG,QAAQ;;;AAG1B"}
@@ -0,0 +1,188 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "useListItem_unstable", {
enumerable: true,
get: function() {
return useListItem_unstable;
}
});
const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
const _reacttabster = require("@fluentui/react-tabster");
const _reactutilities = require("@fluentui/react-utilities");
const _listContext = require("../List/listContext");
const _keyboardkeys = require("@fluentui/keyboard-keys");
const _reactcheckbox = require("@fluentui/react-checkbox");
const _ListItemActionEvent = require("../../events/ListItemActionEvent");
const DEFAULT_ROOT_EL_TYPE = 'li';
const useListItem_unstable = (props, ref)=>{
const id = (0, _reactutilities.useId)('listItem');
const { value = id, onKeyDown, onClick, tabIndex, role, onAction } = props;
const toggleItem = (0, _listContext.useListContext_unstable)((ctx)=>{
var _ctx_selection;
return (_ctx_selection = ctx.selection) === null || _ctx_selection === void 0 ? void 0 : _ctx_selection.toggleItem;
});
const navigationMode = (0, _listContext.useListContext_unstable)((ctx)=>ctx.navigationMode);
const isSelectionEnabled = (0, _listContext.useListContext_unstable)((ctx)=>!!ctx.selection);
const isSelected = (0, _listContext.useListContext_unstable)((ctx)=>{
var _ctx_selection;
return (_ctx_selection = ctx.selection) === null || _ctx_selection === void 0 ? void 0 : _ctx_selection.isSelected(value);
});
const listItemRole = (0, _listContext.useListContext_unstable)((ctx)=>ctx.listItemRole);
const validateListItem = (0, _listContext.useListContext_unstable)((ctx)=>ctx.validateListItem);
const as = props.as || navigationMode === 'composite' ? 'div' : DEFAULT_ROOT_EL_TYPE;
const finalListItemRole = role || listItemRole;
const focusableItems = Boolean(isSelectionEnabled || navigationMode || tabIndex === 0);
const rootRef = _react.useRef(null);
const checkmarkRef = _react.useRef(null);
const handleAction = (0, _reactutilities.useEventCallback)((event)=>{
onAction === null || onAction === void 0 ? void 0 : onAction(event, {
event,
value,
type: _ListItemActionEvent.ListItemActionEventName
});
if (event.defaultPrevented) {
return;
}
if (isSelectionEnabled) {
toggleItem === null || toggleItem === void 0 ? void 0 : toggleItem(event.detail.originalEvent, value);
}
});
_react.useEffect(()=>{
if (rootRef.current) {
validateListItem(rootRef.current);
}
}, [
validateListItem
]);
const triggerAction = (e)=>{
const actionEvent = (0, _ListItemActionEvent.createListItemActionEvent)(e);
handleAction(actionEvent);
e.target.dispatchEvent(actionEvent);
};
const focusableGroupAttrs = (0, _reacttabster.useFocusableGroup)({
ignoreDefaultKeydown: {
Enter: true
},
tabBehavior: 'limited-trap-focus'
});
const handleClick = (0, _reactutilities.useEventCallback)((e)=>{
onClick === null || onClick === void 0 ? void 0 : onClick(e);
if (e.defaultPrevented) {
return;
}
const isFromCheckbox = (0, _reactutilities.elementContains)(checkmarkRef.current, e.target);
if (isFromCheckbox) {
return;
}
triggerAction(e);
});
const handleKeyDown = (0, _reactutilities.useEventCallback)((e)=>{
onKeyDown === null || onKeyDown === void 0 ? void 0 : onKeyDown(e);
if (e.defaultPrevented) {
return;
}
// If the event is fired from an element inside the list item
if (e.target !== e.currentTarget) {
if (focusableItems) {
// If the items are focusable, we need to handle the arrow keys to move focus to them
switch(e.key){
// If it's one of the Arrows defined, jump out of the list item to focus on the ListItem itself
// The ArrowLeft will only trigger if the target element is the leftmost, otherwise the
// arrowNavigationAttributes handles it and prevents it from bubbling here.
case _keyboardkeys.ArrowLeft:
e.target.dispatchEvent(new _reacttabster.GroupperMoveFocusEvent({
action: _reacttabster.GroupperMoveFocusActions.Escape
}));
break;
case _keyboardkeys.ArrowDown:
case _keyboardkeys.ArrowUp:
e.preventDefault();
// Press ESC on the original target to get focus to the parent group (List)
e.target.dispatchEvent(new _reacttabster.GroupperMoveFocusEvent({
action: _reacttabster.GroupperMoveFocusActions.Escape
}));
// Now dispatch the original key to move up or down in the list
e.currentTarget.dispatchEvent(new _reacttabster.MoverMoveFocusEvent({
key: _reacttabster.MoverKeys[e.key]
}));
}
return;
}
return;
}
switch(e.key){
case _keyboardkeys.Space:
// we have to prevent default here otherwise the space key will scroll the page
e.preventDefault();
// Space always toggles selection (if enabled)
if (isSelectionEnabled) {
toggleItem === null || toggleItem === void 0 ? void 0 : toggleItem(e, value);
} else {
triggerAction(e);
}
break;
case _keyboardkeys.Enter:
triggerAction(e);
break;
case _keyboardkeys.ArrowRight:
if (navigationMode === 'composite') {
e.target.dispatchEvent(new _reacttabster.GroupperMoveFocusEvent({
action: _reacttabster.GroupperMoveFocusActions.Enter
}));
}
break;
}
});
const onCheckboxChange = (0, _reactutilities.useEventCallback)((e, data)=>{
if (!isSelectionEnabled || e.defaultPrevented) {
return;
}
toggleItem === null || toggleItem === void 0 ? void 0 : toggleItem(e, value);
});
const arrowNavigationAttributes = (0, _reacttabster.useArrowNavigationGroup)({
axis: 'horizontal'
});
const tabsterAttributes = (0, _reacttabster.useMergedTabsterAttributes_unstable)(focusableItems ? arrowNavigationAttributes : {}, focusableGroupAttrs);
const root = _reactutilities.slot.always((0, _reactutilities.getIntrinsicElementProps)(as, {
ref: (0, _reactutilities.useMergedRefs)(rootRef, ref),
tabIndex: focusableItems ? 0 : undefined,
role: finalListItemRole,
id: String(value),
...isSelectionEnabled && {
'aria-selected': isSelected
},
...tabsterAttributes,
...props,
onKeyDown: handleKeyDown,
onClick: isSelectionEnabled || onClick || onAction ? handleClick : undefined
}), {
elementType: as
});
const checkmark = _reactutilities.slot.optional(props.checkmark, {
defaultProps: {
checked: isSelected,
tabIndex: -1
},
renderByDefault: isSelectionEnabled,
elementType: _reactcheckbox.Checkbox
});
const mergedCheckmarkRef = (0, _reactutilities.useMergedRefs)(checkmark === null || checkmark === void 0 ? void 0 : checkmark.ref, checkmarkRef);
if (checkmark) {
checkmark.onChange = (0, _reactutilities.mergeCallbacks)(checkmark.onChange, onCheckboxChange);
checkmark.ref = mergedCheckmarkRef;
}
const state = {
components: {
root: as,
checkmark: _reactcheckbox.Checkbox
},
root,
checkmark,
selectable: isSelectionEnabled,
navigable: focusableItems
};
return state;
};
File diff suppressed because one or more lines are too long
@@ -0,0 +1,71 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
listItemClassNames: function() {
return listItemClassNames;
},
useListItemStyles_unstable: function() {
return useListItemStyles_unstable;
}
});
const _react = require("@griffel/react");
const listItemClassNames = {
root: 'fui-ListItem',
checkmark: 'fui-ListItem__checkmark'
};
const useRootBaseStyles = /*#__PURE__*/ (0, _react.__resetStyles)("rikgcmv", null, [
".rikgcmv{padding:0;margin:0;text-indent:0;list-style-type:none;}",
".rikgcmv[data-fui-focus-visible]{outline:var(--strokeWidthThick) solid var(--colorStrokeFocus2);border-radius:var(--borderRadiusMedium);}"
]);
const useCheckmarkBaseStyles = /*#__PURE__*/ (0, _react.__styles)({
root: {
qb2dma: "f7nlbp4",
Bpb5tq4: 0,
Biccaaf: 0,
Gaeyjg: 0,
ldoezw: 0,
B6gmeee: "f1bgo3o3"
}
}, {
d: [
".f7nlbp4{align-self:center;}",
[
".f1bgo3o3 .fui-Checkbox__indicator{margin:4px;}",
{
p: -1
}
]
]
});
/**
* Styles for the root slot
*/ const useStyles = /*#__PURE__*/ (0, _react.__styles)({
rootClickableOrSelectable: {
mc9l5x: "f22iagw",
Bceei9c: "f1k6fduh"
}
}, {
d: [
".f22iagw{display:flex;}",
".f1k6fduh{cursor:pointer;}"
]
});
const useListItemStyles_unstable = (state)=>{
'use no memo';
const rootBaseStyles = useRootBaseStyles();
const checkmarkBaseStyles = useCheckmarkBaseStyles();
const styles = useStyles();
state.root.className = (0, _react.mergeClasses)(listItemClassNames.root, rootBaseStyles, (state.selectable || state.navigable) && styles.rootClickableOrSelectable, state.root.className);
if (state.checkmark) {
state.checkmark.className = (0, _react.mergeClasses)(listItemClassNames.checkmark, checkmarkBaseStyles.root, state.checkmark.className);
}
return state;
};
@@ -0,0 +1 @@
{"version":3,"sources":["useListItemStyles.styles.js"],"sourcesContent":["import { makeStyles, makeResetStyles, mergeClasses } from '@griffel/react';\nimport { createCustomFocusIndicatorStyle } from '@fluentui/react-tabster';\nimport { tokens } from '@fluentui/react-theme';\nexport const listItemClassNames = {\n root: 'fui-ListItem',\n checkmark: 'fui-ListItem__checkmark'\n};\nconst useRootBaseStyles = makeResetStyles({\n padding: 0,\n margin: 0,\n textIndent: 0,\n listStyleType: 'none',\n ...createCustomFocusIndicatorStyle({\n outline: `${tokens.strokeWidthThick} solid ${tokens.colorStrokeFocus2}`,\n borderRadius: tokens.borderRadiusMedium\n }, {\n selector: 'focus'\n })\n});\nconst useCheckmarkBaseStyles = makeStyles({\n root: {\n alignSelf: 'center',\n '& .fui-Checkbox__indicator': {\n margin: '4px'\n }\n }\n});\n/**\n * Styles for the root slot\n */ const useStyles = makeStyles({\n rootClickableOrSelectable: {\n display: 'flex',\n cursor: 'pointer'\n }\n});\n/**\n * Apply styling to the ListItem slots based on the state\n */ export const useListItemStyles_unstable = (state)=>{\n 'use no memo';\n const rootBaseStyles = useRootBaseStyles();\n const checkmarkBaseStyles = useCheckmarkBaseStyles();\n const styles = useStyles();\n state.root.className = mergeClasses(listItemClassNames.root, rootBaseStyles, (state.selectable || state.navigable) && styles.rootClickableOrSelectable, state.root.className);\n if (state.checkmark) {\n state.checkmark.className = mergeClasses(listItemClassNames.checkmark, checkmarkBaseStyles.root, state.checkmark.className);\n }\n return state;\n};\n"],"names":["listItemClassNames","useListItemStyles_unstable","root","checkmark","useRootBaseStyles","__resetStyles","useCheckmarkBaseStyles","__styles","qb2dma","Bpb5tq4","Biccaaf","Gaeyjg","ldoezw","B6gmeee","d","p","useStyles","rootClickableOrSelectable","mc9l5x","Bceei9c","state","rootBaseStyles","checkmarkBaseStyles","styles","className","mergeClasses","selectable","navigable"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;;;;;;;;IAGaA,kBAAkB;eAAlBA;;IAkCIC,0BAA0B;eAA1BA;;;uBArCyC;AAGnD,MAAMD,qBAAqB;IAC9BE,MAAM;IACNC,WAAW;AACf;AACA,MAAMC,oBAAiB,WAAA,GAAGC,IAAAA,oBAAA,EAAA,WAAA,MAAA;IAAA;IAAA;CAWzB;AACD,MAAMC,yBAAsB,WAAA,GAAGC,IAAAA,eAAA,EAAA;IAAAL,MAAA;QAAAM,QAAA;QAAAC,SAAA;QAAAC,SAAA;QAAAC,QAAA;QAAAC,QAAA;QAAAC,SAAA;IAAA;AAAA,GAAA;IAAAC,GAAA;QAAA;QAAA;YAAA;YAAA;gBAAAC,GAAA,CAAA;YAAA;SAAA;KAAA;AAAA;AAQ/B;;CAEA,GAAI,MAAMC,YAAS,WAAA,GAAGT,IAAAA,eAAA,EAAA;IAAAU,2BAAA;QAAAC,QAAA;QAAAC,SAAA;IAAA;AAAA,GAAA;IAAAL,GAAA;QAAA;QAAA;KAAA;AAAA;AAQX,MAAMb,6BAA8BmB,CAAAA;IAC3C;IACA,MAAMC,iBAAiBjB;IACvB,MAAMkB,sBAAsBhB;IAC5B,MAAMiB,SAASP;IACfI,MAAMlB,IAAI,CAACsB,SAAS,GAAGC,IAAAA,mBAAY,EAACzB,mBAAmBE,IAAI,EAAEmB,gBAAgB,AAACD,CAAAA,MAAMM,UAAU,IAAIN,MAAMO,SAAS,AAATA,KAAcJ,OAAON,yBAAyB,EAAEG,MAAMlB,IAAI,CAACsB,SAAS;IAC5K,IAAIJ,MAAMjB,SAAS,EAAE;QACjBiB,MAAMjB,SAAS,CAACqB,SAAS,GAAGC,IAAAA,mBAAY,EAACzB,mBAAmBG,SAAS,EAAEmB,oBAAoBpB,IAAI,EAAEkB,MAAMjB,SAAS,CAACqB,SAAS;IAC9H;IACA,OAAOJ;AACX"}
@@ -0,0 +1,28 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
ListItemActionEventName: function() {
return ListItemActionEventName;
},
createListItemActionEvent: function() {
return createListItemActionEvent;
}
});
const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
const ListItemActionEventName = 'ListItemAction';
const createListItemActionEvent = (originalEvent)=>new CustomEvent(ListItemActionEventName, {
cancelable: true,
bubbles: true,
detail: {
originalEvent
}
});
@@ -0,0 +1 @@
{"version":3,"sources":["../src/events/ListItemActionEvent.ts"],"sourcesContent":["import * as React from 'react';\n\nexport const ListItemActionEventName = 'ListItemAction';\n\nexport interface ListItemActionEventDetail {\n originalEvent: React.MouseEvent | React.KeyboardEvent;\n}\n\nexport type ListItemActionEvent = CustomEvent<ListItemActionEventDetail>;\n\nexport const createListItemActionEvent = (\n originalEvent: React.MouseEvent | React.KeyboardEvent,\n): CustomEvent<ListItemActionEventDetail> =>\n new CustomEvent<ListItemActionEventDetail>(ListItemActionEventName, {\n cancelable: true,\n bubbles: true,\n detail: { originalEvent },\n });\n"],"names":["ListItemActionEventName","createListItemActionEvent","originalEvent","CustomEvent","cancelable","bubbles","detail"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;;;;;;;;IAEaA,uBAAAA;eAAAA;;IAQAC,yBAAAA;eAAAA;;;;iEAVU;AAEhB,MAAMD,0BAA0B;AAQhC,MAAMC,4BAA4B,CACvCC,gBAEA,IAAIC,YAAuCH,yBAAyB;QAClEI,YAAY;QACZC,SAAS;QACTC,QAAQ;YAAEJ;QAAc;IAC1B"}
+11
View File
@@ -0,0 +1,11 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "useListSelection", {
enumerable: true,
get: function() {
return _useListSelection.useListSelection;
}
});
const _useListSelection = require("./useListSelection");
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../src/hooks/index.ts"],"sourcesContent":["export { useListSelection } from './useListSelection';\n"],"names":["useListSelection"],"rangeMappings":";;;;;;;;;;","mappings":";;;;+BAASA;;;eAAAA,kCAAgB;;;kCAAQ"}
+6
View File
@@ -0,0 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../src/hooks/types.ts"],"sourcesContent":["import { SelectionItemId } from '@fluentui/react-utilities';\nimport * as React from 'react';\n\nexport type ListSelectionState = {\n isSelected: (item: string | number) => boolean;\n toggleItem: (e: React.SyntheticEvent, id: string | number) => void;\n deselectItem: (e: React.SyntheticEvent, id: string | number) => void;\n selectItem: (e: React.SyntheticEvent, id: string | number) => void;\n clearSelection: (e: React.SyntheticEvent) => void;\n toggleAllItems: (e: React.SyntheticEvent, itemIds: string[] | number[]) => void;\n setSelectedItems: React.Dispatch<React.SetStateAction<Iterable<SelectionItemId>>>;\n selectedItems: SelectionItemId[];\n};\n"],"names":[],"rangeMappings":";;;;;","mappings":";;;;;iEACuB"}
@@ -0,0 +1,52 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "useListSelection", {
enumerable: true,
get: function() {
return useListSelection;
}
});
const _interop_require_wildcard = require("@swc/helpers/_/_interop_require_wildcard");
const _reactutilities = require("@fluentui/react-utilities");
const _react = /*#__PURE__*/ _interop_require_wildcard._(require("react"));
function useListSelection(options = {
selectionMode: 'multiselect'
}) {
const { selectionMode, defaultSelectedItems, onSelectionChange } = options;
const [selectedItems, setSelectedItems] = (0, _reactutilities.useControllableState)({
state: options.selectedItems,
defaultState: defaultSelectedItems,
initialState: []
});
const [selected, selectionMethods] = (0, _reactutilities.useSelection)({
selectionMode,
defaultSelectedItems,
selectedItems,
onSelectionChange: (e, data)=>{
setSelectedItems(data.selectedItems);
onSelectionChange === null || onSelectionChange === void 0 ? void 0 : onSelectionChange(e, data);
}
});
const toggleItem = (0, _reactutilities.useEventCallback)((e, itemId)=>selectionMethods.toggleItem(e, itemId));
const toggleAllItems = (0, _reactutilities.useEventCallback)((e, itemIds)=>{
selectionMethods.toggleAllItems(e, itemIds);
});
const deselectItem = (0, _reactutilities.useEventCallback)((e, itemId)=>selectionMethods.deselectItem(e, itemId));
const selectItem = (0, _reactutilities.useEventCallback)((e, itemId)=>selectionMethods.selectItem(e, itemId));
const clearSelection = (0, _reactutilities.useEventCallback)((e)=>selectionMethods.clearItems(e));
const selectedArray = _react.useMemo(()=>Array.from(selected), [
selected
]);
return {
selectedItems: selectedArray,
toggleItem,
toggleAllItems,
deselectItem,
selectItem,
setSelectedItems,
isSelected: (id)=>selectionMethods.isSelected(id),
clearSelection
};
}
@@ -0,0 +1 @@
{"version":3,"sources":["../src/hooks/useListSelection.tsx"],"sourcesContent":["import { SelectionHookParams, useControllableState, useEventCallback, useSelection } from '@fluentui/react-utilities';\nimport * as React from 'react';\nimport type { ListSelectionState } from './types';\n\nexport function useListSelection(options: SelectionHookParams = { selectionMode: 'multiselect' }): ListSelectionState {\n const { selectionMode, defaultSelectedItems, onSelectionChange } = options;\n\n const [selectedItems, setSelectedItems] = useControllableState({\n state: options.selectedItems,\n defaultState: defaultSelectedItems,\n initialState: [],\n });\n\n const [selected, selectionMethods] = useSelection({\n selectionMode,\n defaultSelectedItems,\n selectedItems,\n onSelectionChange: (e, data) => {\n setSelectedItems(data.selectedItems);\n onSelectionChange?.(e, data);\n },\n });\n\n const toggleItem: ListSelectionState['toggleItem'] = useEventCallback((e, itemId) =>\n selectionMethods.toggleItem(e, itemId),\n );\n\n const toggleAllItems: ListSelectionState['toggleAllItems'] = useEventCallback((e, itemIds) => {\n selectionMethods.toggleAllItems(e, itemIds);\n });\n\n const deselectItem: ListSelectionState['deselectItem'] = useEventCallback((e, itemId: string | number) =>\n selectionMethods.deselectItem(e, itemId),\n );\n\n const selectItem: ListSelectionState['selectItem'] = useEventCallback((e, itemId: string | number) =>\n selectionMethods.selectItem(e, itemId),\n );\n\n const clearSelection: ListSelectionState['clearSelection'] = useEventCallback(e => selectionMethods.clearItems(e));\n\n const selectedArray = React.useMemo(() => Array.from(selected), [selected]);\n\n return {\n selectedItems: selectedArray,\n toggleItem,\n toggleAllItems,\n deselectItem,\n selectItem,\n setSelectedItems,\n isSelected: (id: string | number) => selectionMethods.isSelected(id),\n clearSelection,\n };\n}\n"],"names":["useListSelection","options","selectionMode","defaultSelectedItems","onSelectionChange","selectedItems","setSelectedItems","useControllableState","state","defaultState","initialState","selected","selectionMethods","useSelection","e","data","toggleItem","useEventCallback","itemId","toggleAllItems","itemIds","deselectItem","selectItem","clearSelection","clearItems","selectedArray","React","useMemo","Array","from","isSelected","id"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;+BAIgBA;;;eAAAA;;;;gCAJ0E;iEACnE;AAGhB,SAASA,iBAAiBC,UAA+B;IAAEC,eAAe;AAAc,CAAC;IAC9F,MAAM,EAAEA,aAAa,EAAEC,oBAAoB,EAAEC,iBAAiB,EAAE,GAAGH;IAEnE,MAAM,CAACI,eAAeC,iBAAiB,GAAGC,IAAAA,oCAAAA,EAAqB;QAC7DC,OAAOP,QAAQI,aAAa;QAC5BI,cAAcN;QACdO,cAAc,EAAE;IAClB;IAEA,MAAM,CAACC,UAAUC,iBAAiB,GAAGC,IAAAA,4BAAAA,EAAa;QAChDX;QACAC;QACAE;QACAD,mBAAmB,CAACU,GAAGC;YACrBT,iBAAiBS,KAAKV,aAAa;YACnCD,sBAAAA,QAAAA,sBAAAA,KAAAA,IAAAA,KAAAA,IAAAA,kBAAoBU,GAAGC;QACzB;IACF;IAEA,MAAMC,aAA+CC,IAAAA,gCAAAA,EAAiB,CAACH,GAAGI,SACxEN,iBAAiBI,UAAU,CAACF,GAAGI;IAGjC,MAAMC,iBAAuDF,IAAAA,gCAAAA,EAAiB,CAACH,GAAGM;QAChFR,iBAAiBO,cAAc,CAACL,GAAGM;IACrC;IAEA,MAAMC,eAAmDJ,IAAAA,gCAAAA,EAAiB,CAACH,GAAGI,SAC5EN,iBAAiBS,YAAY,CAACP,GAAGI;IAGnC,MAAMI,aAA+CL,IAAAA,gCAAAA,EAAiB,CAACH,GAAGI,SACxEN,iBAAiBU,UAAU,CAACR,GAAGI;IAGjC,MAAMK,iBAAuDN,IAAAA,gCAAAA,EAAiBH,CAAAA,IAAKF,iBAAiBY,UAAU,CAACV;IAE/G,MAAMW,gBAAgBC,OAAMC,OAAO,CAAC,IAAMC,MAAMC,IAAI,CAAClB,WAAW;QAACA;KAAS;IAE1E,OAAO;QACLN,eAAeoB;QACfT;QACAG;QACAE;QACAC;QACAhB;QACAwB,YAAY,CAACC,KAAwBnB,iBAAiBkB,UAAU,CAACC;QACjER;IACF;AACF"}
+44
View File
@@ -0,0 +1,44 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
List: function() {
return _List.List;
},
ListItem: function() {
return _ListItem.ListItem;
},
listClassNames: function() {
return _List.listClassNames;
},
listItemClassNames: function() {
return _ListItem.listItemClassNames;
},
renderListItem_unstable: function() {
return _ListItem.renderListItem_unstable;
},
renderList_unstable: function() {
return _List.renderList_unstable;
},
useListItemStyles_unstable: function() {
return _ListItem.useListItemStyles_unstable;
},
useListItem_unstable: function() {
return _ListItem.useListItem_unstable;
},
useListStyles_unstable: function() {
return _List.useListStyles_unstable;
},
useList_unstable: function() {
return _List.useList_unstable;
}
});
const _List = require("./List");
const _ListItem = require("./ListItem");
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { List, listClassNames, renderList_unstable, useListStyles_unstable, useList_unstable } from './List';\n\nexport type { ListProps, ListSlots, ListState } from './List';\nexport {\n ListItem,\n listItemClassNames,\n renderListItem_unstable,\n useListItemStyles_unstable,\n useListItem_unstable,\n} from './ListItem';\nexport type { ListItemProps, ListItemSlots, ListItemState } from './ListItem';\n"],"names":["List","ListItem","listClassNames","listItemClassNames","renderListItem_unstable","renderList_unstable","useListItemStyles_unstable","useListItem_unstable","useListStyles_unstable","useList_unstable"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;;;;;;;;IAASA,IAAI;eAAJA,UAAI;;IAIXC,QAAQ;eAARA,kBAAQ;;IAJKC,cAAc;eAAdA,oBAAc;;IAK3BC,kBAAkB;eAAlBA,4BAAkB;;IAClBC,uBAAuB;eAAvBA,iCAAuB;;IANMC,mBAAmB;eAAnBA,yBAAmB;;IAOhDC,0BAA0B;eAA1BA,oCAA0B;;IAC1BC,oBAAoB;eAApBA,8BAAoB;;IAR8BC,sBAAsB;eAAtBA,4BAAsB;;IAAEC,gBAAgB;eAAhBA,sBAAgB;;;sBAAQ;0BAS7F"}
@@ -0,0 +1,26 @@
/**
* Calculate the role for the list item based on the list role.
* @param listRole - the role of the list
* @returns proper role for the list item
*/ "use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "calculateListItemRoleForListRole", {
enumerable: true,
get: function() {
return calculateListItemRoleForListRole;
}
});
const calculateListItemRoleForListRole = (listRole)=>{
switch(listRole){
case 'list':
return 'listitem';
case 'listbox':
return 'option';
case 'grid':
return 'row';
default:
return 'listitem';
}
};
@@ -0,0 +1 @@
{"version":3,"sources":["../src/utils/calculateListItemRoleForListRole.ts"],"sourcesContent":["/**\n * Calculate the role for the list item based on the list role.\n * @param listRole - the role of the list\n * @returns proper role for the list item\n */\nexport const calculateListItemRoleForListRole = (listRole: string): string => {\n switch (listRole) {\n case 'list':\n return 'listitem';\n case 'listbox':\n return 'option';\n case 'grid':\n return 'row';\n default:\n return 'listitem';\n }\n};\n"],"names":["calculateListItemRoleForListRole","listRole"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;;;CAIC;;;;+BACYA;;;eAAAA;;;AAAN,MAAMA,mCAAmC,CAACC;IAC/C,OAAQA;QACN,KAAK;YACH,OAAO;QACT,KAAK;YACH,OAAO;QACT,KAAK;YACH,OAAO;QACT;YACE,OAAO;IACX;AACF"}
@@ -0,0 +1,24 @@
/**
* Calculate the role for the list based on the navigation mode and selectable state
* @param navigationMode - the navigation mode of the list
* @param selectable - whether the list is selectable
* @returns 'grid' if navigationMode is 'composite', otherwise 'listbox' if selectable or 'list' if not
*/ "use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "calculateListRole", {
enumerable: true,
get: function() {
return calculateListRole;
}
});
const calculateListRole = (navigationMode, selectable)=>{
if (navigationMode === 'composite') {
return 'grid';
} else if (selectable) {
return 'listbox';
} else {
return 'list';
}
};
@@ -0,0 +1 @@
{"version":3,"sources":["../src/utils/calculateListRole.ts"],"sourcesContent":["import { ListNavigationMode } from '../List';\n\n/**\n * Calculate the role for the list based on the navigation mode and selectable state\n * @param navigationMode - the navigation mode of the list\n * @param selectable - whether the list is selectable\n * @returns 'grid' if navigationMode is 'composite', otherwise 'listbox' if selectable or 'list' if not\n */\n\nexport const calculateListRole = (navigationMode: ListNavigationMode | undefined, selectable: boolean) => {\n if (navigationMode === 'composite') {\n return 'grid';\n } else if (selectable) {\n return 'listbox';\n } else {\n return 'list';\n }\n};\n"],"names":["calculateListRole","navigationMode","selectable"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAEA;;;;;CAKC;;;;+BAEYA;;;eAAAA;;;AAAN,MAAMA,oBAAoB,CAACC,gBAAgDC;IAChF,IAAID,mBAAmB,aAAa;QAClC,OAAO;IACT,OAAO,IAAIC,YAAY;QACrB,OAAO;IACT,OAAO;QACL,OAAO;IACT;AACF"}
+32
View File
@@ -0,0 +1,32 @@
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
function _export(target, all) {
for(var name in all)Object.defineProperty(target, name, {
enumerable: true,
get: all[name]
});
}
_export(exports, {
calculateListItemRoleForListRole: function() {
return _calculateListItemRoleForListRole.calculateListItemRoleForListRole;
},
calculateListRole: function() {
return _calculateListRole.calculateListRole;
},
validateGridCellsArePresent: function() {
return _validateGridCellsArePresent.validateGridCellsArePresent;
},
validateProperElementTypes: function() {
return _validateProperElementTypes.validateProperElementTypes;
},
validateProperRolesAreUsed: function() {
return _validateProperRolesAreUsed.validateProperRolesAreUsed;
}
});
const _calculateListRole = require("./calculateListRole");
const _validateProperElementTypes = require("./validateProperElementTypes");
const _validateProperRolesAreUsed = require("./validateProperRolesAreUsed");
const _calculateListItemRoleForListRole = require("./calculateListItemRoleForListRole");
const _validateGridCellsArePresent = require("./validateGridCellsArePresent");
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../src/utils/index.ts"],"sourcesContent":["export { calculateListRole } from './calculateListRole';\nexport { validateProperElementTypes } from './validateProperElementTypes';\nexport { validateProperRolesAreUsed } from './validateProperRolesAreUsed';\nexport { calculateListItemRoleForListRole } from './calculateListItemRoleForListRole';\nexport { validateGridCellsArePresent } from './validateGridCellsArePresent';\n"],"names":["calculateListItemRoleForListRole","calculateListRole","validateGridCellsArePresent","validateProperElementTypes","validateProperRolesAreUsed"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":";;;;;;;;;;;IAGSA,gCAAgC;eAAhCA,kEAAgC;;IAHhCC,iBAAiB;eAAjBA,oCAAiB;;IAIjBC,2BAA2B;eAA3BA,wDAA2B;;IAH3BC,0BAA0B;eAA1BA,sDAA0B;;IAC1BC,0BAA0B;eAA1BA,sDAA0B;;;mCAFD;4CACS;4CACA;kDACM;6CACL"}
@@ -0,0 +1,26 @@
/**
* Validates that grid cells are present in a grid list item. This is necessary for proper screen reader support.
* If grid cells are not present and we're not running in production mode, a warning will be logged to the console.
* @param listRole - The role of the list
* @param listItemEl - The list item element
* @returns
*/ "use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "validateGridCellsArePresent", {
enumerable: true,
get: function() {
return validateGridCellsArePresent;
}
});
const validateGridCellsArePresent = (listRole, listItemEl)=>{
if (listRole !== 'grid') {
return;
}
const gridCells = listItemEl.querySelectorAll(':scope > [role="gridcell"]');
if (gridCells.length === 0) {
//eslint-disable-next-line no-console
console.warn(`@fluentui/react-list [useList]:\nList items in List with "grid" role (which is automatically assigned when navigationMode is set to "composite") must contain at least one "gridcell" as direct child of <ListItem /> for proper screen reader support.`, `Ideally, each focus target should be in it's own "gridcell", which is a direct child of <ListItem />.\n`);
}
};
@@ -0,0 +1 @@
{"version":3,"sources":["../src/utils/validateGridCellsArePresent.ts"],"sourcesContent":["/**\n * Validates that grid cells are present in a grid list item. This is necessary for proper screen reader support.\n * If grid cells are not present and we're not running in production mode, a warning will be logged to the console.\n * @param listRole - The role of the list\n * @param listItemEl - The list item element\n * @returns\n */\nexport const validateGridCellsArePresent = (listRole: string, listItemEl: HTMLElement) => {\n if (listRole !== 'grid') {\n return;\n }\n\n const gridCells = listItemEl.querySelectorAll(':scope > [role=\"gridcell\"]');\n if (gridCells.length === 0) {\n //eslint-disable-next-line no-console\n console.warn(\n `@fluentui/react-list [useList]:\\nList items in List with \"grid\" role (which is automatically assigned when navigationMode is set to \"composite\") must contain at least one \"gridcell\" as direct child of <ListItem /> for proper screen reader support.`,\n `Ideally, each focus target should be in it's own \"gridcell\", which is a direct child of <ListItem />.\\n`,\n );\n }\n};\n"],"names":["validateGridCellsArePresent","listRole","listItemEl","gridCells","querySelectorAll","length","console","warn"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;;;;;CAMC;;;;+BACYA;;;eAAAA;;;AAAN,MAAMA,8BAA8B,CAACC,UAAkBC;IAC5D,IAAID,aAAa,QAAQ;QACvB;IACF;IAEA,MAAME,YAAYD,WAAWE,gBAAgB,CAAC;IAC9C,IAAID,UAAUE,MAAM,KAAK,GAAG;QAC1B,qCAAqC;QACrCC,QAAQC,IAAI,CACV,CAAC,uPAAuP,CAAC,EACzP,CAAC,uGAAuG,CAAC;IAE7G;AACF"}
@@ -0,0 +1,22 @@
/**
* Validates that the List and ListItem elements are compatible
* @param listRenderedAs - the type of the parent element
* @param listItemRenderedAs - the type of the child element
*/ "use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "validateProperElementTypes", {
enumerable: true,
get: function() {
return validateProperElementTypes;
}
});
function validateProperElementTypes(listRenderedAs, listItemRenderedAs) {
if (listItemRenderedAs === 'div' && listRenderedAs !== 'div') {
throw new Error('ListItem cannot be rendered as a div when its parent is not a div.');
}
if (listItemRenderedAs === 'li' && listRenderedAs === 'div') {
throw new Error('ListItem cannot be rendered as a li when its parent is a div.');
}
}
@@ -0,0 +1 @@
{"version":3,"sources":["../src/utils/validateProperElementTypes.ts"],"sourcesContent":["/**\n * Validates that the List and ListItem elements are compatible\n * @param listRenderedAs - the type of the parent element\n * @param listItemRenderedAs - the type of the child element\n */\nexport function validateProperElementTypes(listRenderedAs?: string, listItemRenderedAs?: string) {\n if (listItemRenderedAs === 'div' && listRenderedAs !== 'div') {\n throw new Error('ListItem cannot be rendered as a div when its parent is not a div.');\n }\n if (listItemRenderedAs === 'li' && listRenderedAs === 'div') {\n throw new Error('ListItem cannot be rendered as a li when its parent is a div.');\n }\n}\n"],"names":["validateProperElementTypes","listRenderedAs","listItemRenderedAs","Error"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;;;CAIC;;;;+BACeA;;;eAAAA;;;AAAT,SAASA,2BAA2BC,cAAuB,EAAEC,kBAA2B;IAC7F,IAAIA,uBAAuB,SAASD,mBAAmB,OAAO;QAC5D,MAAM,IAAIE,MAAM;IAClB;IACA,IAAID,uBAAuB,QAAQD,mBAAmB,OAAO;QAC3D,MAAM,IAAIE,MAAM;IAClB;AACF"}
@@ -0,0 +1,46 @@
/**
* Validate that the proper roles are used for the given combination of roles and states.
* If the roles are invalid and we're not running in production mode, an warning will be logged to the console.
*
* @param role - the role of the list
* @param listItemRole - the role of the list item
* @param hasSelection - whether the list has selection enabled
* @param hasFocusableChildren - whether the list has focusable children
* @returns
*/ "use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "validateProperRolesAreUsed", {
enumerable: true,
get: function() {
return validateProperRolesAreUsed;
}
});
const validateProperRolesAreUsed = (role, listItemRole, hasSelection, hasFocusableChildren)=>{
// Explode when the pair of roles is invalid
if (role === 'list' && listItemRole !== 'listitem') {
throw new Error('When the List role is "list", ListItem role must be "listitem".');
}
if (role === 'listbox' && listItemRole !== 'option') {
throw new Error('When the List role is "listbox", ListItem role must be "option".');
}
if (role === 'grid' && listItemRole !== 'row') {
throw new Error('When the List role is "grid", ListItem role must be "row".');
}
const expectedRole = (()=>{
if (hasFocusableChildren) {
return 'grid';
} else {
if (hasSelection) {
return 'listbox';
} else {
return 'list';
}
}
})();
if (role !== expectedRole) {
/* eslint-disable-next-line no-console */ console.warn(`@fluentui/react-list [useList]:\nThe role "${role}" does not match the expected role "${expectedRole}".\nPlease use the "navigationMode" property for automatic role assignment and keyboard navigation.\nIf you are using this role intentionally, make sure to verify screen reader support.
`);
}
};
@@ -0,0 +1 @@
{"version":3,"sources":["../src/utils/validateProperRolesAreUsed.ts"],"sourcesContent":["/**\n * Validate that the proper roles are used for the given combination of roles and states.\n * If the roles are invalid and we're not running in production mode, an warning will be logged to the console.\n *\n * @param role - the role of the list\n * @param listItemRole - the role of the list item\n * @param hasSelection - whether the list has selection enabled\n * @param hasFocusableChildren - whether the list has focusable children\n * @returns\n */\nexport const validateProperRolesAreUsed = (\n role: string,\n listItemRole: string,\n hasSelection: boolean,\n hasFocusableChildren: boolean,\n) => {\n // Explode when the pair of roles is invalid\n if (role === 'list' && listItemRole !== 'listitem') {\n throw new Error('When the List role is \"list\", ListItem role must be \"listitem\".');\n }\n if (role === 'listbox' && listItemRole !== 'option') {\n throw new Error('When the List role is \"listbox\", ListItem role must be \"option\".');\n }\n if (role === 'grid' && listItemRole !== 'row') {\n throw new Error('When the List role is \"grid\", ListItem role must be \"row\".');\n }\n\n const expectedRole = (() => {\n if (hasFocusableChildren) {\n return 'grid';\n } else {\n if (hasSelection) {\n return 'listbox';\n } else {\n return 'list';\n }\n }\n })();\n\n if (role !== expectedRole) {\n /* eslint-disable-next-line no-console */\n console.warn(`@fluentui/react-list [useList]:\\nThe role \"${role}\" does not match the expected role \"${expectedRole}\".\\nPlease use the \"navigationMode\" property for automatic role assignment and keyboard navigation.\\nIf you are using this role intentionally, make sure to verify screen reader support.\n `);\n }\n};\n"],"names":["validateProperRolesAreUsed","role","listItemRole","hasSelection","hasFocusableChildren","Error","expectedRole","console","warn"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;;;;;;;;;CASC;;;;+BACYA;;;eAAAA;;;AAAN,MAAMA,6BAA6B,CACxCC,MACAC,cACAC,cACAC;IAEA,4CAA4C;IAC5C,IAAIH,SAAS,UAAUC,iBAAiB,YAAY;QAClD,MAAM,IAAIG,MAAM;IAClB;IACA,IAAIJ,SAAS,aAAaC,iBAAiB,UAAU;QACnD,MAAM,IAAIG,MAAM;IAClB;IACA,IAAIJ,SAAS,UAAUC,iBAAiB,OAAO;QAC7C,MAAM,IAAIG,MAAM;IAClB;IAEA,MAAMC,eAAe,AAAC,CAAA;QACpB,IAAIF,sBAAsB;YACxB,OAAO;QACT,OAAO;YACL,IAAID,cAAc;gBAChB,OAAO;YACT,OAAO;gBACL,OAAO;YACT;QACF;IACF,CAAA;IAEA,IAAIF,SAASK,cAAc;QACzB,uCAAuC,GACvCC,QAAQC,IAAI,CAAC,CAAC,2CAA2C,EAAEP,KAAK,oCAAoC,EAAEK,aAAa;IACnH,CAAC;IACH;AACF"}