{"version":3,"names":["groupBufferPx","getAverage","arr","reduce","p","c","length","geActionDimensions","actions","actionsNotSlotted","filter","action","slot","ACTION_GROUP_SLOTS","menuActions","actionLen","actionWidth","map","clientWidth","actionHeight","clientHeight","getMaxActionCount","width","layout","height","groupCount","maxContainerPx","avgItemPx","Math","floor","getOverflowCount","actionCount","max","queryActions","el","Array","from","querySelectorAll","closest","ACTION_MENU_SLOTS","trigger","overflowActions","actionGroups","expanded","overflowCount","needToSlotCount","reverse","forEach","group","slottedWithinGroupCount","groupActions","groupAction","removeAttribute","textEnabled","some","unslottedActions","setAttribute","forceUpdate","ICONS","chevronsLeft","chevronsRight","getCalcitePosition","position","toggleChildActionText","setTooltipReference","tooltip","referenceElement","ref","ExpandToggle","expandText","collapseText","expandLabel","collapseLabel","toggle","scale","rtl","getElementDir","text","label","icons","end","expandIcon","collapseIcon","actionNode","h","icon","id","onClick","title"],"sources":["src/components/action-bar/utils.ts","src/components/functional/ExpandToggle.tsx"],"sourcesContent":["import { forceUpdate } from \"@stencil/core\";\nimport { SLOTS as ACTION_GROUP_SLOTS } from \"../action-group/resources\";\nimport { SLOTS as ACTION_MENU_SLOTS } from \"../action-menu/resources\";\nimport { Layout } from \"../interfaces\";\n\nconst groupBufferPx = 2;\n\nconst getAverage = (arr: number[]) => arr.reduce((p, c) => p + c, 0) / arr.length;\n\nexport const geActionDimensions = (\n actions: HTMLCalciteActionElement[],\n): { actionWidth: number; actionHeight: number } => {\n const actionsNotSlotted = actions.filter((action) => action.slot !== ACTION_GROUP_SLOTS.menuActions);\n const actionLen = actionsNotSlotted?.length;\n return {\n actionWidth: actionLen ? getAverage(actionsNotSlotted.map((action) => action.clientWidth || 0)) : 0,\n actionHeight: actionLen ? getAverage(actionsNotSlotted.map((action) => action.clientHeight || 0)) : 0,\n };\n};\n\nconst getMaxActionCount = ({\n width,\n actionWidth,\n layout,\n height,\n actionHeight,\n groupCount,\n}: {\n layout: Extract<\"horizontal\" | \"vertical\", Layout>;\n height: number;\n actionWidth: number;\n width: number;\n actionHeight: number;\n groupCount: number;\n}): number => {\n const maxContainerPx = layout === \"horizontal\" ? width : height;\n const avgItemPx = layout === \"horizontal\" ? actionWidth : actionHeight;\n return Math.floor((maxContainerPx - groupCount * groupBufferPx) / avgItemPx);\n};\n\nexport const getOverflowCount = ({\n layout,\n actionCount,\n actionWidth,\n width,\n actionHeight,\n height,\n groupCount,\n}: {\n layout: Extract<\"horizontal\" | \"vertical\", Layout>;\n actionCount: number;\n actionWidth: number;\n width: number;\n actionHeight: number;\n height: number;\n groupCount: number;\n}): number => {\n return Math.max(actionCount - getMaxActionCount({ width, actionWidth, layout, height, actionHeight, groupCount }), 0);\n};\n\nexport const queryActions = (el: HTMLElement): HTMLCalciteActionElement[] => {\n return Array.from(el.querySelectorAll(\"calcite-action\")).filter((action) =>\n action.closest(\"calcite-action-menu\") ? action.slot === ACTION_MENU_SLOTS.trigger : true,\n );\n};\n\nexport const overflowActions = ({\n actionGroups,\n expanded,\n overflowCount,\n}: {\n actionGroups: HTMLCalciteActionGroupElement[];\n expanded: boolean;\n overflowCount: number;\n}): void => {\n let needToSlotCount = overflowCount;\n actionGroups.reverse().forEach((group) => {\n let slottedWithinGroupCount = 0;\n\n const groupActions = queryActions(group).reverse();\n\n groupActions.forEach((groupAction) => {\n if (groupAction.slot === ACTION_GROUP_SLOTS.menuActions) {\n groupAction.removeAttribute(\"slot\");\n groupAction.textEnabled = expanded;\n }\n });\n\n if (needToSlotCount > 0) {\n groupActions.some((groupAction) => {\n const unslottedActions = groupActions.filter((action) => !action.slot);\n\n if (unslottedActions.length > 1 && groupActions.length > 2 && !groupAction.closest(\"calcite-action-menu\")) {\n groupAction.textEnabled = true;\n groupAction.setAttribute(\"slot\", ACTION_GROUP_SLOTS.menuActions);\n slottedWithinGroupCount++;\n\n if (slottedWithinGroupCount > 1) {\n needToSlotCount--;\n }\n }\n\n return needToSlotCount < 1;\n });\n }\n\n forceUpdate(group);\n });\n};\n","import { FunctionalComponent, h, VNode } from \"@stencil/core\";\nimport { getElementDir } from \"../../utils/dom\";\nimport { queryActions } from \"../action-bar/utils\";\nimport { SLOTS as ACTION_GROUP_SLOTS } from \"../action-group/resources\";\nimport { Position, Scale } from \"../interfaces\";\n\ninterface ExpandToggleProps {\n expanded: boolean;\n expandText: string;\n collapseText: string;\n expandLabel: string;\n collapseLabel: string;\n el: HTMLElement;\n position: Position;\n tooltip?: HTMLCalciteTooltipElement;\n toggle: () => void;\n ref?: (el: HTMLElement) => void;\n scale?: Scale;\n}\n\nconst ICONS = {\n chevronsLeft: \"chevrons-left\",\n chevronsRight: \"chevrons-right\",\n} as const;\n\nfunction getCalcitePosition(position: Position, el: HTMLElement): Position {\n return position || el.closest(\"calcite-shell-panel\")?.position || \"start\";\n}\n\nexport function toggleChildActionText({\n el,\n expanded,\n}: {\n el: HTMLElement;\n expanded: boolean;\n}): void {\n queryActions(el)\n .filter((el) => el.slot !== ACTION_GROUP_SLOTS.menuActions)\n .forEach((action) => (action.textEnabled = expanded));\n el.querySelectorAll(\"calcite-action-group, calcite-action-menu\").forEach(\n (el: HTMLCalciteActionMenuElement | HTMLCalciteActionGroupElement) => (el.expanded = expanded),\n );\n}\n\nconst setTooltipReference = ({\n tooltip,\n referenceElement,\n expanded,\n ref,\n}: {\n tooltip: HTMLCalciteTooltipElement;\n referenceElement: HTMLCalciteActionElement;\n expanded: boolean;\n ref?: (el: HTMLElement) => void;\n}): HTMLCalciteActionElement => {\n if (tooltip) {\n tooltip.referenceElement = !expanded && referenceElement ? referenceElement : null;\n }\n\n if (ref) {\n ref(referenceElement);\n }\n\n return referenceElement;\n};\n\nexport const ExpandToggle: FunctionalComponent = ({\n expanded,\n expandText,\n collapseText,\n expandLabel,\n collapseLabel,\n toggle,\n el,\n position,\n tooltip,\n ref,\n scale,\n}): VNode => {\n const rtl = getElementDir(el) === \"rtl\";\n\n const text = expanded ? collapseText : expandText;\n const label = expanded ? collapseLabel : expandLabel;\n const icons = [ICONS.chevronsLeft, ICONS.chevronsRight];\n\n if (rtl) {\n icons.reverse();\n }\n\n const end = getCalcitePosition(position, el) === \"end\";\n const expandIcon = end ? icons[1] : icons[0];\n const collapseIcon = end ? icons[0] : icons[1];\n\n const actionNode = (\n \n setTooltipReference({ tooltip, referenceElement, expanded, ref })\n }\n scale={scale}\n text={text}\n textEnabled={expanded}\n title={!expanded && !tooltip ? text : null}\n />\n );\n\n return actionNode;\n};\n"],"mappings":"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","ignoreList":[]}