{"version":3,"file":"DefinitionList.mjs","sources":["../../src/definitionList/DefinitionList.tsx"],"sourcesContent":["import { clsx } from 'clsx';\n\nimport { Layout } from '../common';\nimport Button from '../button';\n\nexport interface DefinitionListDefinition {\n  action?: {\n    label: string;\n    onClick?: React.MouseEventHandler<HTMLButtonElement>;\n  };\n  title: React.ReactNode;\n  value: React.ReactNode;\n  key: string;\n}\n\nexport type DefinitionListLayout =\n  `${Layout.VERTICAL_TWO_COLUMN | Layout.VERTICAL_ONE_COLUMN | Layout.HORIZONTAL_JUSTIFIED | Layout.HORIZONTAL_LEFT_ALIGNED | Layout.HORIZONTAL_RIGHT_ALIGNED}`;\n\nexport interface DefinitionListProps {\n  definitions?: DefinitionListDefinition[];\n  layout?: DefinitionListLayout;\n  muted?: boolean;\n}\n\nconst isLayoutHorizontal = (layout: DefinitionListLayout) =>\n  layout === Layout.HORIZONTAL_LEFT_ALIGNED ||\n  layout === Layout.HORIZONTAL_RIGHT_ALIGNED ||\n  layout === Layout.HORIZONTAL_JUSTIFIED;\n\nconst getAlignmentClasses = (\n  layout: DefinitionListLayout,\n  action: DefinitionListDefinition['action'],\n) => {\n  const classes = ['d-flex'];\n\n  if (action) {\n    if (isLayoutHorizontal(layout)) {\n      classes.push('align-items-center');\n    } else {\n      classes.push('align-items-start');\n    }\n  }\n\n  if (layout === Layout.HORIZONTAL_RIGHT_ALIGNED) {\n    classes.push('text-sm-right tw-definition-list--right-aligned-desktop');\n  } else {\n    classes.push('justify-content-between');\n  }\n\n  if (layout === Layout.HORIZONTAL_JUSTIFIED) {\n    classes.push('text-sm-justify');\n  }\n\n  return classes;\n};\n\nconst defaultDefinitions = [] satisfies DefinitionListProps['definitions'];\n\nexport default function DefinitionList({\n  definitions = defaultDefinitions,\n  layout = 'VERTICAL_TWO_COLUMN',\n  muted,\n}: DefinitionListProps) {\n  return (\n    <dl\n      className={clsx('tw-definition-list d-flex ', {\n        'text-muted': muted,\n        'flex-column': layout === Layout.VERTICAL_ONE_COLUMN,\n        'tw-definition-list--columns flex-column flex-row--sm':\n          layout === Layout.VERTICAL_TWO_COLUMN,\n        'tw-definition-list--horizontal flex-column': isLayoutHorizontal(layout),\n      })}\n    >\n      {definitions\n        .filter((definition) => definition)\n        .map(({ action, title, value, key }) => (\n          <div key={key} className=\"tw-definition-list__item\">\n            <dt>{title}</dt>\n            <dd className={clsx(...getAlignmentClasses(layout, action))}>\n              <div>{value}</div>\n              {action ? (\n                <div\n                  className={clsx(\n                    isLayoutHorizontal(layout) ? 'p-l-2' : 'p-x-2',\n                    'tw-definition-list__action',\n                  )}\n                >\n                  <Button as=\"button\" size=\"sm\" v2 onClick={action.onClick}>\n                    {action.label}\n                  </Button>\n                </div>\n              ) : null}\n            </dd>\n          </div>\n        ))}\n    </dl>\n  );\n}\n"],"names":["isLayoutHorizontal","layout","Layout","HORIZONTAL_LEFT_ALIGNED","HORIZONTAL_RIGHT_ALIGNED","HORIZONTAL_JUSTIFIED","getAlignmentClasses","action","classes","push","defaultDefinitions","DefinitionList","definitions","muted","_jsx","className","clsx","VERTICAL_ONE_COLUMN","VERTICAL_TWO_COLUMN","children","filter","definition","map","title","value","key","_jsxs","Button","as","size","v2","onClick","label"],"mappings":"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"}