{"version":3,"file":"GroupingPanel-BMuMoqKV.cjs","names":["GripIcon","GroupingPanelChrome","Box","Button","IconButton","MenuItem","Paper","Stack","TextField","Typography","TOUCH_TARGET","addControlWidth","label","Math","max","length","dropZoneWidth","slots","Surface","children","mobile","rest","p","alignItems","flexWrap","minWidth","display","gap","flex","width","DropZone","empty","active","dragging","dropProps","undefined","justifyContent","minHeight","px","border","borderStyle","borderColor","borderRadius","bgcolor","color","transition","theme","transitions","create","alignSelf","borderInlineStart","Chip","level","dragProps","keyboardProps","onRemove","removeLabel","overflow","opacity","cursor","touchAction","whiteSpace","Select","value","options","onChange","disabled","part","addControl","select","displayEmpty","renderValue","selected","find","option","String","inputProps","maxWidth","event","target","map","RemoveZone","AggregationItem","readOnly","readOnlyLabel","pl","pr","fontWeight","AggregationRemove","AggregationPicker","onToggle","available","filter","checked","AggregationRestore","onRestore","GroupingPanel","props","$","_c","t0"],"sources":["../src/components/GroupingPanel.tsx"],"sourcesContent":["/** The interactive row-grouping strip, rendered with MUI controls. */\nimport {\n  GripIcon,\n  type GroupingPanelChipProps,\n  GroupingPanelChrome,\n  type GroupingPanelChromeProps,\n  type GroupingPanelDropZoneProps,\n  type GroupingPanelRemoveZoneProps,\n  type GroupingPanelSelectProps,\n  type GroupingPanelSlots,\n  type GroupingPanelSurfaceProps,\n} from \"@adapttable/react/adapter\";\nimport {\n  Box,\n  Button,\n  IconButton,\n  MenuItem,\n  Paper,\n  Stack,\n  TextField,\n  Typography,\n} from \"@mui/material\";\n\nconst TOUCH_TARGET = 44;\n\n/** Closed add control: the shown placeholder plus the kit chevron. */\nfunction addControlWidth(label: string): string {\n  return `calc(${Math.max(label.length, 1)}ch + 2.75rem)`;\n}\n\n/**\n * How wide one insertion boundary is — one width, whatever is happening.\n * A caret that grows when a drag starts, or when the pointer reaches it,\n * moves every chip after it sideways mid-drag.\n */\nfunction dropZoneWidth(): number {\n  return 12;\n}\n\nconst slots: GroupingPanelSlots = {\n  Surface: ({\n    children,\n    label,\n    mobile,\n    ...rest\n  }: GroupingPanelSurfaceProps) => (\n    <Paper\n      component=\"section\"\n      variant=\"outlined\"\n      role=\"region\"\n      aria-label={label}\n      sx={{ p: 1 }}\n      {...rest}\n    >\n      <Stack\n        direction=\"row\"\n        spacing={0.75}\n        useFlexGap\n        sx={{\n          alignItems: \"center\",\n          flexWrap: \"wrap\",\n          minWidth: 0,\n          \"& > [data-adapttable-part='grouping-item']\": {\n            display: \"inline-flex\",\n            alignItems: \"center\",\n            gap: 0.75,\n          },\n          \"& > [data-adapttable-part='grouping-aggregations']\": {\n            display: \"flex\",\n            flex: \"1 0 100%\",\n            width: \"100%\",\n            alignItems: \"center\",\n            flexWrap: \"wrap\",\n            gap: 0.75,\n            minWidth: 0,\n          },\n          ...(mobile ? { alignItems: \"center\" } : {}),\n        }}\n      >\n        {children}\n      </Stack>\n    </Paper>\n  ),\n  DropZone: ({\n    label,\n    empty,\n    active,\n    dragging,\n    dropProps,\n    ...rest\n  }: GroupingPanelDropZoneProps) => (\n    <Box\n      role=\"group\"\n      aria-label={label}\n      {...dropProps}\n      {...rest}\n      data-dragging={dragging || undefined}\n      sx={\n        empty\n          ? {\n              display: \"inline-flex\",\n              alignItems: \"center\",\n              justifyContent: \"center\",\n              minHeight: TOUCH_TARGET,\n              minWidth: 156,\n              px: 1.5,\n              border: 1,\n              borderStyle: \"dashed\",\n              borderColor: active ? \"primary.main\" : \"divider\",\n              borderRadius: 1,\n              bgcolor: active ? \"action.selected\" : \"transparent\",\n              color: active ? \"primary.main\" : \"text.secondary\",\n              transition: (theme) =>\n                theme.transitions.create([\"border-color\", \"background-color\"]),\n            }\n          : {\n              alignSelf: \"stretch\",\n              minWidth: dropZoneWidth(),\n              minHeight: TOUCH_TARGET,\n              borderInlineStart: 2,\n              borderColor: active ? \"primary.main\" : \"divider\",\n              bgcolor: active ? \"action.selected\" : \"transparent\",\n              borderRadius: 0.5,\n              transition: (theme) =>\n                theme.transitions.create([\n                  \"min-width\",\n                  \"border-color\",\n                  \"background-color\",\n                ]),\n            }\n      }\n    >\n      {empty ? <Typography variant=\"caption\">{label}</Typography> : null}\n    </Box>\n  ),\n  Chip: ({\n    label,\n    level,\n    dragProps,\n    keyboardProps,\n    onRemove,\n    removeLabel,\n    ...rest\n  }: GroupingPanelChipProps) => (\n    <Paper\n      component=\"span\"\n      variant=\"outlined\"\n      {...rest}\n      sx={{\n        display: \"inline-flex\",\n        alignItems: \"center\",\n        minHeight: TOUCH_TARGET,\n        overflow: \"hidden\",\n        \"&:has([data-grouping-dragging])\": {\n          opacity: 0.55,\n          borderColor: \"primary.main\",\n        },\n      }}\n    >\n      <IconButton\n        size=\"small\"\n        data-adapttable-part=\"grouping-chip-handle\"\n        {...dragProps}\n        {...keyboardProps}\n        sx={{\n          minWidth: TOUCH_TARGET,\n          minHeight: TOUCH_TARGET,\n          borderRadius: 0,\n          cursor: \"grab\",\n          color: \"text.secondary\",\n          touchAction: \"none\",\n        }}\n      >\n        <GripIcon />\n      </IconButton>\n      <Typography\n        component=\"span\"\n        variant=\"body2\"\n        sx={{ px: 0.5, whiteSpace: \"nowrap\" }}\n      >\n        {level}. {label}\n      </Typography>\n      <IconButton\n        size=\"small\"\n        data-adapttable-part=\"grouping-chip-remove\"\n        aria-label={removeLabel}\n        onClick={onRemove}\n        sx={{\n          minWidth: TOUCH_TARGET,\n          minHeight: TOUCH_TARGET,\n          borderRadius: 0,\n        }}\n      >\n        {\"×\"}\n      </IconButton>\n    </Paper>\n  ),\n  Select: ({\n    label,\n    value,\n    options,\n    onChange,\n    disabled,\n    \"data-adapttable-part\": part,\n  }: GroupingPanelSelectProps) => {\n    const addControl = part === \"grouping-add\";\n    return (\n      <TextField\n        select\n        size=\"small\"\n        value={value}\n        disabled={disabled}\n        data-adapttable-part={part}\n        slotProps={{\n          select: {\n            displayEmpty: addControl,\n            renderValue: (selected) => {\n              if (addControl && selected === \"\") return label;\n              return (\n                options.find((option) => option.value === selected)?.label ??\n                String(selected)\n              );\n            },\n            inputProps: { \"aria-label\": label },\n          },\n        }}\n        sx={{\n          width: addControl ? addControlWidth(label) : undefined,\n          maxWidth: addControl ? \"100%\" : undefined,\n          flex: addControl ? \"0 0 auto\" : \"0 1 auto\",\n          \"& .MuiInputBase-root\": {\n            minHeight: addControl ? TOUCH_TARGET : 32,\n          },\n          \"& .MuiOutlinedInput-notchedOutline\":\n            part === \"grouping-aggregation-operation\"\n              ? { border: \"none\" }\n              : undefined,\n        }}\n        onChange={(event) => onChange(event.target.value)}\n      >\n        {options.map((option) => (\n          <MenuItem key={option.value} value={option.value}>\n            {option.label}\n          </MenuItem>\n        ))}\n      </TextField>\n    );\n  },\n  RemoveZone: ({\n    label,\n    active,\n    dropProps,\n    ...rest\n  }: GroupingPanelRemoveZoneProps) => (\n    <Paper\n      variant=\"outlined\"\n      role=\"region\"\n      aria-label={label}\n      {...dropProps}\n      {...rest}\n      sx={{\n        // The way out of a grouping owns its row: a reader with a chip in the\n        // air has one obvious place to let go of it.\n        flex: \"1 1 auto\",\n        display: \"inline-flex\",\n        alignItems: \"center\",\n        justifyContent: \"center\",\n        minHeight: TOUCH_TARGET,\n        px: 1.5,\n        borderStyle: \"dashed\",\n        borderColor: active ? \"error.main\" : \"divider\",\n        bgcolor: active ? \"error.main\" : \"transparent\",\n        color: active ? \"error.contrastText\" : \"text.secondary\",\n        transition: (theme) =>\n          theme.transitions.create([\n            \"border-color\",\n            \"background-color\",\n            \"color\",\n          ]),\n      }}\n    >\n      <Typography variant=\"caption\" color=\"inherit\">\n        {label}\n      </Typography>\n    </Paper>\n  ),\n  AggregationItem: ({ label, readOnly, readOnlyLabel, children, ...rest }) => (\n    <Box\n      component=\"span\"\n      sx={{\n        pl: 1.5,\n        pr: 0.5,\n        minHeight: 36,\n        display: \"inline-flex\",\n        alignItems: \"center\",\n        gap: 0.5,\n        borderRadius: 999,\n        bgcolor: \"action.hover\",\n        maxWidth: \"100%\",\n      }}\n      data-read-only={readOnly || undefined}\n      {...rest}\n    >\n      <Typography\n        variant=\"body2\"\n        sx={{ fontWeight: 600, whiteSpace: \"nowrap\" }}\n      >\n        {label}\n      </Typography>\n      {readOnly ? (\n        <Typography variant=\"caption\" color=\"text.secondary\">\n          {readOnlyLabel}\n        </Typography>\n      ) : (\n        children\n      )}\n    </Box>\n  ),\n  AggregationRemove: ({ label, onRemove, ...rest }) => (\n    <IconButton size=\"small\" aria-label={label} onClick={onRemove} {...rest}>\n      {\"\\u00d7\"}\n    </IconButton>\n  ),\n  AggregationPicker: ({ label, options, onToggle, disabled, ...rest }) => {\n    const available = options.filter((option) => !option.checked);\n    return (\n      <TextField\n        select\n        size=\"small\"\n        value=\"\"\n        disabled={disabled === true || available.length === 0}\n        slotProps={{\n          select: {\n            displayEmpty: true,\n            renderValue: () => label,\n            inputProps: { \"aria-label\": label },\n          },\n        }}\n        sx={{\n          width: addControlWidth(label),\n          maxWidth: \"100%\",\n          flex: \"0 0 auto\",\n          \"& .MuiInputBase-root\": { minHeight: TOUCH_TARGET },\n        }}\n        onChange={(event) => {\n          if (event.target.value) onToggle(event.target.value, true);\n        }}\n        {...rest}\n      >\n        {available.map((option) => (\n          <MenuItem key={option.value} value={option.value}>\n            {option.label}\n          </MenuItem>\n        ))}\n      </TextField>\n    );\n  },\n  AggregationRestore: ({ label, disabled, onRestore, ...rest }) => (\n    <Button\n      size=\"small\"\n      variant=\"outlined\"\n      disabled={disabled}\n      onClick={onRestore}\n      {...rest}\n    >\n      {label}\n    </Button>\n  ),\n};\n\n/** Configure row grouping by drag, keyboard, or kit-native selects. @public */\nexport function GroupingPanel<TRow>(\n  props: Readonly<Omit<GroupingPanelChromeProps<TRow>, \"slots\">>\n) {\n  return <GroupingPanelChrome {...props} slots={slots} />;\n}\n"],"mappings":"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"}