@brycks/core-front 0.3.4 → 0.3.6

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 (121) hide show
  1. package/dist/components/data/List/List.cjs +1 -1
  2. package/dist/components/data/List/List.cjs.map +1 -1
  3. package/dist/components/data/List/List.js +1 -1
  4. package/dist/components/data/List/List.js.map +1 -1
  5. package/dist/components/data/Table/Table.cjs +1 -1
  6. package/dist/components/data/Table/Table.cjs.map +1 -1
  7. package/dist/components/data/Table/Table.js +141 -124
  8. package/dist/components/data/Table/Table.js.map +1 -1
  9. package/dist/components/data/TreeView/TreeView.cjs +1 -1
  10. package/dist/components/data/TreeView/TreeView.cjs.map +1 -1
  11. package/dist/components/data/TreeView/TreeView.js +1 -1
  12. package/dist/components/data/TreeView/TreeView.js.map +1 -1
  13. package/dist/components/feedback/Alert/Alert.cjs +1 -1
  14. package/dist/components/feedback/Alert/Alert.cjs.map +1 -1
  15. package/dist/components/feedback/Alert/Alert.js +20 -19
  16. package/dist/components/feedback/Alert/Alert.js.map +1 -1
  17. package/dist/components/feedback/Drawer/Drawer.cjs +2 -2
  18. package/dist/components/feedback/Drawer/Drawer.cjs.map +1 -1
  19. package/dist/components/feedback/Drawer/Drawer.js +58 -57
  20. package/dist/components/feedback/Drawer/Drawer.js.map +1 -1
  21. package/dist/components/feedback/Modal/Modal.cjs +1 -1
  22. package/dist/components/feedback/Modal/Modal.cjs.map +1 -1
  23. package/dist/components/feedback/Modal/Modal.js +63 -61
  24. package/dist/components/feedback/Modal/Modal.js.map +1 -1
  25. package/dist/components/feedback/Popover/Popover.cjs +2 -2
  26. package/dist/components/feedback/Popover/Popover.cjs.map +1 -1
  27. package/dist/components/feedback/Popover/Popover.js +88 -79
  28. package/dist/components/feedback/Popover/Popover.js.map +1 -1
  29. package/dist/components/feedback/Toast/Toast.cjs +2 -2
  30. package/dist/components/feedback/Toast/Toast.cjs.map +1 -1
  31. package/dist/components/feedback/Toast/Toast.js +102 -93
  32. package/dist/components/feedback/Toast/Toast.js.map +1 -1
  33. package/dist/components/form/Combobox/Combobox.cjs +2 -2
  34. package/dist/components/form/Combobox/Combobox.cjs.map +1 -1
  35. package/dist/components/form/Combobox/Combobox.js +139 -139
  36. package/dist/components/form/Combobox/Combobox.js.map +1 -1
  37. package/dist/components/form/DateInput/DateInput.cjs +1 -1
  38. package/dist/components/form/DateInput/DateInput.cjs.map +1 -1
  39. package/dist/components/form/DateInput/DateInput.js +2 -2
  40. package/dist/components/form/DateInput/DateInput.js.map +1 -1
  41. package/dist/components/form/DateRangePicker/DateRangePicker.cjs +1 -1
  42. package/dist/components/form/DateRangePicker/DateRangePicker.cjs.map +1 -1
  43. package/dist/components/form/DateRangePicker/DateRangePicker.js +34 -34
  44. package/dist/components/form/DateRangePicker/DateRangePicker.js.map +1 -1
  45. package/dist/components/form/DropZone/DropZone.cjs +1 -1
  46. package/dist/components/form/DropZone/DropZone.cjs.map +1 -1
  47. package/dist/components/form/DropZone/DropZone.js +10 -10
  48. package/dist/components/form/DropZone/DropZone.js.map +1 -1
  49. package/dist/components/form/FileInput/FileInput.cjs +1 -1
  50. package/dist/components/form/FileInput/FileInput.cjs.map +1 -1
  51. package/dist/components/form/FileInput/FileInput.js +1 -1
  52. package/dist/components/form/FileInput/FileInput.js.map +1 -1
  53. package/dist/components/form/FormCard/FormCard.cjs +1 -1
  54. package/dist/components/form/FormCard/FormCard.cjs.map +1 -1
  55. package/dist/components/form/FormCard/FormCard.js +9 -9
  56. package/dist/components/form/FormCard/FormCard.js.map +1 -1
  57. package/dist/components/form/FormField/FormField.cjs +1 -1
  58. package/dist/components/form/FormField/FormField.cjs.map +1 -1
  59. package/dist/components/form/FormField/FormField.js +67 -55
  60. package/dist/components/form/FormField/FormField.js.map +1 -1
  61. package/dist/components/form/MultiSelect/MultiSelect.cjs +1 -1
  62. package/dist/components/form/MultiSelect/MultiSelect.cjs.map +1 -1
  63. package/dist/components/form/MultiSelect/MultiSelect.js +2 -3
  64. package/dist/components/form/MultiSelect/MultiSelect.js.map +1 -1
  65. package/dist/components/form/Radio/Radio.cjs +1 -1
  66. package/dist/components/form/Radio/Radio.cjs.map +1 -1
  67. package/dist/components/form/Radio/Radio.js +20 -20
  68. package/dist/components/form/Radio/Radio.js.map +1 -1
  69. package/dist/components/form/TagInput/TagInput.cjs +1 -1
  70. package/dist/components/form/TagInput/TagInput.cjs.map +1 -1
  71. package/dist/components/form/TagInput/TagInput.js +104 -102
  72. package/dist/components/form/TagInput/TagInput.js.map +1 -1
  73. package/dist/components/form/TimePicker/TimePicker.cjs +1 -1
  74. package/dist/components/form/TimePicker/TimePicker.cjs.map +1 -1
  75. package/dist/components/form/TimePicker/TimePicker.js +29 -30
  76. package/dist/components/form/TimePicker/TimePicker.js.map +1 -1
  77. package/dist/components/layout/Collapse/Collapse.cjs.map +1 -1
  78. package/dist/components/layout/Collapse/Collapse.js.map +1 -1
  79. package/dist/components/media/Image/Image.cjs +1 -1
  80. package/dist/components/media/Image/Image.cjs.map +1 -1
  81. package/dist/components/media/Image/Image.js +9 -9
  82. package/dist/components/media/Image/Image.js.map +1 -1
  83. package/dist/components/media/ImageThumbnail/ImageThumbnail.cjs +1 -1
  84. package/dist/components/media/ImageThumbnail/ImageThumbnail.cjs.map +1 -1
  85. package/dist/components/media/ImageThumbnail/ImageThumbnail.js +6 -6
  86. package/dist/components/media/ImageThumbnail/ImageThumbnail.js.map +1 -1
  87. package/dist/components/navigation/Accordion/Accordion.cjs +1 -1
  88. package/dist/components/navigation/Accordion/Accordion.cjs.map +1 -1
  89. package/dist/components/navigation/Accordion/Accordion.js +0 -1
  90. package/dist/components/navigation/Accordion/Accordion.js.map +1 -1
  91. package/dist/components/navigation/Menu/Menu.cjs +1 -1
  92. package/dist/components/navigation/Menu/Menu.cjs.map +1 -1
  93. package/dist/components/navigation/Menu/Menu.js +87 -86
  94. package/dist/components/navigation/Menu/Menu.js.map +1 -1
  95. package/dist/components/navigation/Pagination/Pagination.cjs +1 -1
  96. package/dist/components/navigation/Pagination/Pagination.cjs.map +1 -1
  97. package/dist/components/navigation/Pagination/Pagination.js +107 -99
  98. package/dist/components/navigation/Pagination/Pagination.js.map +1 -1
  99. package/dist/components/utility/Avatar/Avatar.cjs +1 -1
  100. package/dist/components/utility/Avatar/Avatar.cjs.map +1 -1
  101. package/dist/components/utility/Avatar/Avatar.js +10 -10
  102. package/dist/components/utility/Avatar/Avatar.js.map +1 -1
  103. package/dist/components/utility/Logo/Logo.cjs +1 -1
  104. package/dist/components/utility/Logo/Logo.cjs.map +1 -1
  105. package/dist/components/utility/Logo/Logo.js +10 -10
  106. package/dist/components/utility/Logo/Logo.js.map +1 -1
  107. package/dist/design-system/themes/ThemeProvider.cjs +1 -1
  108. package/dist/design-system/themes/ThemeProvider.cjs.map +1 -1
  109. package/dist/design-system/themes/ThemeProvider.js +46 -46
  110. package/dist/design-system/themes/ThemeProvider.js.map +1 -1
  111. package/dist/design-system/tokens/zIndex.cjs +1 -1
  112. package/dist/design-system/tokens/zIndex.cjs.map +1 -1
  113. package/dist/design-system/tokens/zIndex.js +2 -0
  114. package/dist/design-system/tokens/zIndex.js.map +1 -1
  115. package/dist/feedback.d.ts +8 -0
  116. package/dist/form.d.ts +10 -0
  117. package/dist/index.d.ts +29 -0
  118. package/dist/navigation.d.ts +19 -0
  119. package/dist/styles.css +1 -1
  120. package/dist/tokens.d.ts +2 -0
  121. package/package.json +2 -1
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),p=require("react"),m=require("../../../utils/styles.cjs"),o=require("../../../design-system/tokens/spacing.cjs"),v=require("../../../design-system/tokens/motion.cjs"),c=require("../../../design-system/tokens/typography.cjs"),n=require("../../../design-system/primitives/sizing.cjs"),h=p.createContext({size:"md",variant:"default"});function R(){return p.useContext(h)}const z=p.forwardRef(function({size:r="md",variant:e="default",interactive:a=!1,className:t,style:i,children:d,testId:u,...f},b){const x={listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:e==="separated"?o.spacing[2]:0,border:e==="bordered"?"1px solid var(--brycks-border-default)":void 0,borderRadius:e==="bordered"?"var(--brycks-radius-lg)":void 0,overflow:e==="bordered"?"hidden":void 0,...i};return s.jsx(h.Provider,{value:{size:r,variant:e},children:s.jsx("ul",{ref:b,className:m.cx("brycks-list",`brycks-list--${r}`,`brycks-list--${e}`,a&&"brycks-list--interactive",t),style:x,"data-testid":u,...f,children:d})})});z.displayName="List";const w={sm:{paddingY:n.componentPaddingY.md,paddingX:n.componentPaddingX.sm,fontSize:c.fontSizes.base-1,secondarySize:c.fontSizes.sm,gap:n.componentGap.lg,minHeight:n.componentHeights.md},md:{paddingY:n.componentPaddingX.sm,paddingX:n.componentPaddingX.md,fontSize:c.fontSizes.base,secondarySize:c.fontSizes.base-1,gap:n.componentGap.xl,minHeight:52},lg:{paddingY:n.componentPaddingX.md,paddingX:n.componentPaddingX.lg,fontSize:c.fontSizes.md,secondarySize:c.fontSizes.base,gap:o.spacing[3.5],minHeight:o.spacing[16]}},L=p.forwardRef(function({leftElement:r,rightElement:e,secondary:a,selected:t=!1,disabled:i=!1,clickable:d=!1,className:u,style:f,children:b,...x},$){const{size:C,variant:g}=R(),l=w[C],X={display:"flex",alignItems:"center",gap:l.gap,padding:`${l.paddingY}px ${l.paddingX}px`,minHeight:l.minHeight,backgroundColor:t?"var(--brycks-primary-50)":"transparent",borderBottom:g==="default"||g==="bordered"?"1px solid var(--brycks-border-muted)":void 0,border:g==="separated"?"1px solid var(--brycks-border-default)":void 0,borderRadius:g==="separated"?"var(--brycks-radius-lg)":void 0,cursor:i?"not-allowed":d?"pointer":void 0,opacity:i?.5:1,transition:`background-color ${v.durations.quick}ms ${v.easings.easeOut}`,...f},q={flex:1,display:"flex",flexDirection:"column",gap:o.spacing[.5],minWidth:0},N={fontSize:l.fontSize,fontWeight:500,color:"var(--brycks-foreground-default)",lineHeight:1.4},P={fontSize:l.secondarySize,color:"var(--brycks-foreground-muted)",lineHeight:1.4},k={display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0};return s.jsxs("li",{ref:$,className:m.cx("brycks-list-item",t&&"brycks-list-item--selected",d&&"brycks-list-item--clickable",i&&"brycks-list-item--disabled",u),style:X,onMouseEnter:S=>{d&&!i&&!t&&(S.currentTarget.style.backgroundColor="var(--brycks-background-muted)")},onMouseLeave:S=>{t||(S.currentTarget.style.backgroundColor="transparent")},...x,children:[r&&s.jsx("span",{style:k,children:r}),s.jsxs("div",{style:q,children:[s.jsx("span",{style:N,children:b}),a&&s.jsx("span",{style:P,children:a})]}),e&&s.jsx("span",{style:k,children:e})]})});L.displayName="ListItem";const j=p.forwardRef(function({className:r,style:e,...a},t){const i={height:1,backgroundColor:"var(--brycks-border-muted)",margin:`${o.spacing[2]}px 0`,...e};return s.jsx("li",{ref:t,role:"separator",className:m.cx("brycks-list-divider",r),style:i,...a})});j.displayName="ListDivider";const H=p.forwardRef(function({className:r,style:e,children:a,...t},i){const d={padding:`${o.spacing[3]}px ${o.spacing[4]}px ${o.spacing[2]}px ${o.spacing[4]}px`,fontSize:c.fontSizes.xs,fontWeight:600,color:"var(--brycks-foreground-muted)",textTransform:"uppercase",letterSpacing:"0.05em",...e};return s.jsx("li",{ref:i,className:m.cx("brycks-list-header",r),style:d,...t,children:a})});H.displayName="ListHeader";exports.List=z;exports.ListDivider=j;exports.ListHeader=H;exports.ListItem=L;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),p=require("react"),m=require("../../../utils/styles.cjs"),o=require("../../../design-system/tokens/spacing.cjs"),v=require("../../../design-system/tokens/motion.cjs"),c=require("../../../design-system/tokens/typography.cjs"),n=require("../../../design-system/primitives/sizing.cjs"),h=p.createContext({size:"md",variant:"default"});function R(){return p.useContext(h)}const z=p.forwardRef(function({size:r="md",variant:e="default",interactive:a=!1,className:t,style:i,children:d,testId:y,...f},b){const x={listStyle:"none",margin:0,padding:0,display:"flex",flexDirection:"column",gap:e==="separated"?o.spacing[2]:0,border:e==="bordered"?"1px solid var(--brycks-border-default)":void 0,borderRadius:e==="bordered"?"var(--brycks-radius-lg)":void 0,overflow:e==="bordered"?"hidden":void 0,...i};return s.jsx(h.Provider,{value:{size:r,variant:e},children:s.jsx("ul",{ref:b,className:m.cx("brycks-list",`brycks-list--${r}`,`brycks-list--${e}`,a&&"brycks-list--interactive",t),style:x,"data-testid":y,...f,children:d})})});z.displayName="List";const w={sm:{paddingY:n.componentPaddingY.md,paddingX:n.componentPaddingX.sm,fontSize:c.fontSizes.base-1,secondarySize:c.fontSizes.sm,gap:n.componentGap.lg,minHeight:n.componentHeights.md},md:{paddingY:n.componentPaddingX.sm,paddingX:n.componentPaddingX.md,fontSize:c.fontSizes.base,secondarySize:c.fontSizes.base-1,gap:n.componentGap.xl,minHeight:52},lg:{paddingY:n.componentPaddingX.md,paddingX:n.componentPaddingX.lg,fontSize:c.fontSizes.md,secondarySize:c.fontSizes.base,gap:o.spacing[3.5],minHeight:o.spacing[16]}},L=p.forwardRef(function({leftElement:r,rightElement:e,secondary:a,selected:t=!1,disabled:i=!1,clickable:d=!1,className:y,style:f,children:b,...x},$){const{size:C,variant:g}=R(),l=w[C],X={display:"flex",alignItems:"center",gap:l.gap,padding:`${l.paddingY}px ${l.paddingX}px`,minHeight:l.minHeight,backgroundColor:t?"var(--brycks-primary-muted)":"transparent",borderBottom:g==="default"||g==="bordered"?"1px solid var(--brycks-border-muted)":void 0,border:g==="separated"?"1px solid var(--brycks-border-default)":void 0,borderRadius:g==="separated"?"var(--brycks-radius-lg)":void 0,cursor:i?"not-allowed":d?"pointer":void 0,opacity:i?.5:1,transition:`background-color ${v.durations.quick}ms ${v.easings.easeOut}`,...f},q={flex:1,display:"flex",flexDirection:"column",gap:o.spacing[.5],minWidth:0},N={fontSize:l.fontSize,fontWeight:500,color:"var(--brycks-foreground-default)",lineHeight:1.4},P={fontSize:l.secondarySize,color:"var(--brycks-foreground-muted)",lineHeight:1.4},k={display:"flex",alignItems:"center",justifyContent:"center",flexShrink:0};return s.jsxs("li",{ref:$,className:m.cx("brycks-list-item",t&&"brycks-list-item--selected",d&&"brycks-list-item--clickable",i&&"brycks-list-item--disabled",y),style:X,onMouseEnter:S=>{d&&!i&&!t&&(S.currentTarget.style.backgroundColor="var(--brycks-background-muted)")},onMouseLeave:S=>{t||(S.currentTarget.style.backgroundColor="transparent")},...x,children:[r&&s.jsx("span",{style:k,children:r}),s.jsxs("div",{style:q,children:[s.jsx("span",{style:N,children:b}),a&&s.jsx("span",{style:P,children:a})]}),e&&s.jsx("span",{style:k,children:e})]})});L.displayName="ListItem";const j=p.forwardRef(function({className:r,style:e,...a},t){const i={height:1,backgroundColor:"var(--brycks-border-muted)",margin:`${o.spacing[2]}px 0`,...e};return s.jsx("li",{ref:t,role:"separator",className:m.cx("brycks-list-divider",r),style:i,...a})});j.displayName="ListDivider";const H=p.forwardRef(function({className:r,style:e,children:a,...t},i){const d={padding:`${o.spacing[3]}px ${o.spacing[4]}px ${o.spacing[2]}px ${o.spacing[4]}px`,fontSize:c.fontSizes.xs,fontWeight:600,color:"var(--brycks-foreground-muted)",textTransform:"uppercase",letterSpacing:"0.05em",...e};return s.jsx("li",{ref:i,className:m.cx("brycks-list-header",r),style:d,...t,children:a})});H.displayName="ListHeader";exports.List=z;exports.ListDivider=j;exports.ListHeader=H;exports.ListItem=L;
2
2
  //# sourceMappingURL=List.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"List.cjs","sources":["../../../../src/components/data/List/List.tsx"],"sourcesContent":["/**\n * List Component\n *\n * A flexible list component for displaying items in a vertical layout.\n * Supports different sizes, icons, and interactive items.\n */\n\nimport {\n forwardRef,\n createContext,\n useContext,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n} from 'react'\nimport { cx } from '../../../utils/styles'\nimport { spacing, fontSizes, durations, easings } from '../../../design-system'\nimport { componentHeights, componentGap, componentPaddingX, componentPaddingY } from '../../../design-system/primitives'\n\nexport type ListSize = 'sm' | 'md' | 'lg'\nexport type ListVariant = 'default' | 'bordered' | 'separated'\n\ninterface ListContextValue {\n size: ListSize\n variant: ListVariant\n}\n\nconst ListContext = createContext<ListContextValue>({ size: 'md', variant: 'default' })\n\nfunction useListContext() {\n return useContext(ListContext)\n}\n\nexport interface ListProps extends HTMLAttributes<HTMLUListElement> {\n /** List size */\n size?: ListSize\n /** List variant */\n variant?: ListVariant\n /** Whether list items are interactive */\n interactive?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const List = forwardRef<HTMLUListElement, ListProps>(function List(\n {\n size = 'md',\n variant = 'default',\n interactive = false,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const listStyle: CSSProperties = {\n listStyle: 'none',\n margin: 0,\n padding: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: variant === 'separated' ? spacing[2] : 0,\n border: variant === 'bordered' ? '1px solid var(--brycks-border-default)' : undefined,\n borderRadius: variant === 'bordered' ? 'var(--brycks-radius-lg)' : undefined,\n overflow: variant === 'bordered' ? 'hidden' : undefined,\n ...style,\n }\n\n return (\n <ListContext.Provider value={{ size, variant }}>\n <ul\n ref={ref}\n className={cx(\n 'brycks-list',\n `brycks-list--${size}`,\n `brycks-list--${variant}`,\n interactive && 'brycks-list--interactive',\n className\n )}\n style={listStyle}\n data-testid={testId}\n {...props}\n >\n {children}\n </ul>\n </ListContext.Provider>\n )\n})\n\nList.displayName = 'List'\n\n// ListItem\nexport interface ListItemProps extends HTMLAttributes<HTMLLIElement> {\n /** Icon or avatar on the left */\n leftElement?: ReactNode\n /** Element on the right (badge, button, etc.) */\n rightElement?: ReactNode\n /** Secondary text below the main content */\n secondary?: ReactNode\n /** Whether the item is selected */\n selected?: boolean\n /** Whether the item is disabled */\n disabled?: boolean\n /** Whether the item is clickable */\n clickable?: boolean\n /** Custom class name */\n className?: string\n}\n\nconst sizeConfig: Record<ListSize, { paddingX: number; paddingY: number; fontSize: number; secondarySize: number; gap: number; minHeight: number }> = {\n sm: { paddingY: componentPaddingY.md, paddingX: componentPaddingX.sm, fontSize: fontSizes.base - 1, secondarySize: fontSizes.sm, gap: componentGap.lg, minHeight: componentHeights.md },\n md: { paddingY: componentPaddingX.sm, paddingX: componentPaddingX.md, fontSize: fontSizes.base, secondarySize: fontSizes.base - 1, gap: componentGap.xl, minHeight: 52 },\n lg: { paddingY: componentPaddingX.md, paddingX: componentPaddingX.lg, fontSize: fontSizes.md, secondarySize: fontSizes.base, gap: spacing[3.5], minHeight: spacing[16] },\n}\n\nexport const ListItem = forwardRef<HTMLLIElement, ListItemProps>(function ListItem(\n {\n leftElement,\n rightElement,\n secondary,\n selected = false,\n disabled = false,\n clickable = false,\n className,\n style,\n children,\n ...props\n },\n ref\n) {\n const { size, variant } = useListContext()\n const config = sizeConfig[size]\n\n const itemStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: config.gap,\n padding: `${config.paddingY}px ${config.paddingX}px`,\n minHeight: config.minHeight,\n backgroundColor: selected\n ? 'var(--brycks-primary-50)'\n : 'transparent',\n borderBottom: variant === 'default' || variant === 'bordered'\n ? '1px solid var(--brycks-border-muted)'\n : undefined,\n border: variant === 'separated' ? '1px solid var(--brycks-border-default)' : undefined,\n borderRadius: variant === 'separated' ? 'var(--brycks-radius-lg)' : undefined,\n cursor: disabled ? 'not-allowed' : clickable ? 'pointer' : undefined,\n opacity: disabled ? 0.5 : 1,\n transition: `background-color ${durations.quick}ms ${easings.easeOut}`,\n ...style,\n }\n\n const contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n gap: spacing[0.5],\n minWidth: 0,\n }\n\n const primaryStyle: CSSProperties = {\n fontSize: config.fontSize,\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n lineHeight: 1.4,\n }\n\n const secondaryStyle: CSSProperties = {\n fontSize: config.secondarySize,\n color: 'var(--brycks-foreground-muted)',\n lineHeight: 1.4,\n }\n\n const elementStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }\n\n return (\n <li\n ref={ref}\n className={cx(\n 'brycks-list-item',\n selected && 'brycks-list-item--selected',\n clickable && 'brycks-list-item--clickable',\n disabled && 'brycks-list-item--disabled',\n className\n )}\n style={itemStyle}\n onMouseEnter={(e) => {\n if (clickable && !disabled && !selected) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n if (!selected) {\n e.currentTarget.style.backgroundColor = 'transparent'\n }\n }}\n {...props}\n >\n {leftElement && <span style={elementStyle}>{leftElement}</span>}\n <div style={contentStyle}>\n <span style={primaryStyle}>{children}</span>\n {secondary && <span style={secondaryStyle}>{secondary}</span>}\n </div>\n {rightElement && <span style={elementStyle}>{rightElement}</span>}\n </li>\n )\n})\n\nListItem.displayName = 'ListItem'\n\n// ListDivider\nexport interface ListDividerProps extends HTMLAttributes<HTMLLIElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const ListDivider = forwardRef<HTMLLIElement, ListDividerProps>(function ListDivider(\n { className, style, ...props },\n ref\n) {\n const dividerStyle: CSSProperties = {\n height: 1,\n backgroundColor: 'var(--brycks-border-muted)',\n margin: `${spacing[2]}px 0`,\n ...style,\n }\n\n return (\n <li\n ref={ref}\n role=\"separator\"\n className={cx('brycks-list-divider', className)}\n style={dividerStyle}\n {...props}\n />\n )\n})\n\nListDivider.displayName = 'ListDivider'\n\n// ListHeader\nexport interface ListHeaderProps extends HTMLAttributes<HTMLLIElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const ListHeader = forwardRef<HTMLLIElement, ListHeaderProps>(function ListHeader(\n { className, style, children, ...props },\n ref\n) {\n const headerStyle: CSSProperties = {\n padding: `${spacing[3]}px ${spacing[4]}px ${spacing[2]}px ${spacing[4]}px`,\n fontSize: fontSizes.xs,\n fontWeight: 600,\n color: 'var(--brycks-foreground-muted)',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n ...style,\n }\n\n return (\n <li\n ref={ref}\n className={cx('brycks-list-header', className)}\n style={headerStyle}\n {...props}\n >\n {children}\n </li>\n )\n})\n\nListHeader.displayName = 'ListHeader'\n"],"names":["ListContext","createContext","useListContext","useContext","List","forwardRef","size","variant","interactive","className","style","children","testId","props","ref","listStyle","spacing","jsx","cx","sizeConfig","componentPaddingY","componentPaddingX","fontSizes","componentGap","componentHeights","ListItem","leftElement","rightElement","secondary","selected","disabled","clickable","config","itemStyle","durations","easings","contentStyle","primaryStyle","secondaryStyle","elementStyle","jsxs","e","ListDivider","dividerStyle","ListHeader","headerStyle"],"mappings":"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"}
1
+ {"version":3,"file":"List.cjs","sources":["../../../../src/components/data/List/List.tsx"],"sourcesContent":["/**\n * List Component\n *\n * A flexible list component for displaying items in a vertical layout.\n * Supports different sizes, icons, and interactive items.\n */\n\nimport {\n forwardRef,\n createContext,\n useContext,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n} from 'react'\nimport { cx } from '../../../utils/styles'\nimport { spacing, fontSizes, durations, easings } from '../../../design-system'\nimport { componentHeights, componentGap, componentPaddingX, componentPaddingY } from '../../../design-system/primitives'\n\nexport type ListSize = 'sm' | 'md' | 'lg'\nexport type ListVariant = 'default' | 'bordered' | 'separated'\n\ninterface ListContextValue {\n size: ListSize\n variant: ListVariant\n}\n\nconst ListContext = createContext<ListContextValue>({ size: 'md', variant: 'default' })\n\nfunction useListContext() {\n return useContext(ListContext)\n}\n\nexport interface ListProps extends HTMLAttributes<HTMLUListElement> {\n /** List size */\n size?: ListSize\n /** List variant */\n variant?: ListVariant\n /** Whether list items are interactive */\n interactive?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const List = forwardRef<HTMLUListElement, ListProps>(function List(\n {\n size = 'md',\n variant = 'default',\n interactive = false,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const listStyle: CSSProperties = {\n listStyle: 'none',\n margin: 0,\n padding: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: variant === 'separated' ? spacing[2] : 0,\n border: variant === 'bordered' ? '1px solid var(--brycks-border-default)' : undefined,\n borderRadius: variant === 'bordered' ? 'var(--brycks-radius-lg)' : undefined,\n overflow: variant === 'bordered' ? 'hidden' : undefined,\n ...style,\n }\n\n return (\n <ListContext.Provider value={{ size, variant }}>\n <ul\n ref={ref}\n className={cx(\n 'brycks-list',\n `brycks-list--${size}`,\n `brycks-list--${variant}`,\n interactive && 'brycks-list--interactive',\n className\n )}\n style={listStyle}\n data-testid={testId}\n {...props}\n >\n {children}\n </ul>\n </ListContext.Provider>\n )\n})\n\nList.displayName = 'List'\n\n// ListItem\nexport interface ListItemProps extends HTMLAttributes<HTMLLIElement> {\n /** Icon or avatar on the left */\n leftElement?: ReactNode\n /** Element on the right (badge, button, etc.) */\n rightElement?: ReactNode\n /** Secondary text below the main content */\n secondary?: ReactNode\n /** Whether the item is selected */\n selected?: boolean\n /** Whether the item is disabled */\n disabled?: boolean\n /** Whether the item is clickable */\n clickable?: boolean\n /** Custom class name */\n className?: string\n}\n\nconst sizeConfig: Record<ListSize, { paddingX: number; paddingY: number; fontSize: number; secondarySize: number; gap: number; minHeight: number }> = {\n sm: { paddingY: componentPaddingY.md, paddingX: componentPaddingX.sm, fontSize: fontSizes.base - 1, secondarySize: fontSizes.sm, gap: componentGap.lg, minHeight: componentHeights.md },\n md: { paddingY: componentPaddingX.sm, paddingX: componentPaddingX.md, fontSize: fontSizes.base, secondarySize: fontSizes.base - 1, gap: componentGap.xl, minHeight: 52 },\n lg: { paddingY: componentPaddingX.md, paddingX: componentPaddingX.lg, fontSize: fontSizes.md, secondarySize: fontSizes.base, gap: spacing[3.5], minHeight: spacing[16] },\n}\n\nexport const ListItem = forwardRef<HTMLLIElement, ListItemProps>(function ListItem(\n {\n leftElement,\n rightElement,\n secondary,\n selected = false,\n disabled = false,\n clickable = false,\n className,\n style,\n children,\n ...props\n },\n ref\n) {\n const { size, variant } = useListContext()\n const config = sizeConfig[size]\n\n const itemStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: config.gap,\n padding: `${config.paddingY}px ${config.paddingX}px`,\n minHeight: config.minHeight,\n backgroundColor: selected\n ? 'var(--brycks-primary-muted)'\n : 'transparent',\n borderBottom: variant === 'default' || variant === 'bordered'\n ? '1px solid var(--brycks-border-muted)'\n : undefined,\n border: variant === 'separated' ? '1px solid var(--brycks-border-default)' : undefined,\n borderRadius: variant === 'separated' ? 'var(--brycks-radius-lg)' : undefined,\n cursor: disabled ? 'not-allowed' : clickable ? 'pointer' : undefined,\n opacity: disabled ? 0.5 : 1,\n transition: `background-color ${durations.quick}ms ${easings.easeOut}`,\n ...style,\n }\n\n const contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n gap: spacing[0.5],\n minWidth: 0,\n }\n\n const primaryStyle: CSSProperties = {\n fontSize: config.fontSize,\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n lineHeight: 1.4,\n }\n\n const secondaryStyle: CSSProperties = {\n fontSize: config.secondarySize,\n color: 'var(--brycks-foreground-muted)',\n lineHeight: 1.4,\n }\n\n const elementStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }\n\n return (\n <li\n ref={ref}\n className={cx(\n 'brycks-list-item',\n selected && 'brycks-list-item--selected',\n clickable && 'brycks-list-item--clickable',\n disabled && 'brycks-list-item--disabled',\n className\n )}\n style={itemStyle}\n onMouseEnter={(e) => {\n if (clickable && !disabled && !selected) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n if (!selected) {\n e.currentTarget.style.backgroundColor = 'transparent'\n }\n }}\n {...props}\n >\n {leftElement && <span style={elementStyle}>{leftElement}</span>}\n <div style={contentStyle}>\n <span style={primaryStyle}>{children}</span>\n {secondary && <span style={secondaryStyle}>{secondary}</span>}\n </div>\n {rightElement && <span style={elementStyle}>{rightElement}</span>}\n </li>\n )\n})\n\nListItem.displayName = 'ListItem'\n\n// ListDivider\nexport interface ListDividerProps extends HTMLAttributes<HTMLLIElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const ListDivider = forwardRef<HTMLLIElement, ListDividerProps>(function ListDivider(\n { className, style, ...props },\n ref\n) {\n const dividerStyle: CSSProperties = {\n height: 1,\n backgroundColor: 'var(--brycks-border-muted)',\n margin: `${spacing[2]}px 0`,\n ...style,\n }\n\n return (\n <li\n ref={ref}\n role=\"separator\"\n className={cx('brycks-list-divider', className)}\n style={dividerStyle}\n {...props}\n />\n )\n})\n\nListDivider.displayName = 'ListDivider'\n\n// ListHeader\nexport interface ListHeaderProps extends HTMLAttributes<HTMLLIElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const ListHeader = forwardRef<HTMLLIElement, ListHeaderProps>(function ListHeader(\n { className, style, children, ...props },\n ref\n) {\n const headerStyle: CSSProperties = {\n padding: `${spacing[3]}px ${spacing[4]}px ${spacing[2]}px ${spacing[4]}px`,\n fontSize: fontSizes.xs,\n fontWeight: 600,\n color: 'var(--brycks-foreground-muted)',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n ...style,\n }\n\n return (\n <li\n ref={ref}\n className={cx('brycks-list-header', className)}\n style={headerStyle}\n {...props}\n >\n {children}\n </li>\n )\n})\n\nListHeader.displayName = 'ListHeader'\n"],"names":["ListContext","createContext","useListContext","useContext","List","forwardRef","size","variant","interactive","className","style","children","testId","props","ref","listStyle","spacing","jsx","cx","sizeConfig","componentPaddingY","componentPaddingX","fontSizes","componentGap","componentHeights","ListItem","leftElement","rightElement","secondary","selected","disabled","clickable","config","itemStyle","durations","easings","contentStyle","primaryStyle","secondaryStyle","elementStyle","jsxs","e","ListDivider","dividerStyle","ListHeader","headerStyle"],"mappings":"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"}
@@ -72,7 +72,7 @@ const W = {
72
72
  gap: l.gap,
73
73
  padding: `${l.paddingY}px ${l.paddingX}px`,
74
74
  minHeight: l.minHeight,
75
- backgroundColor: t ? "var(--brycks-primary-50)" : "transparent",
75
+ backgroundColor: t ? "var(--brycks-primary-muted)" : "transparent",
76
76
  borderBottom: m === "default" || m === "bordered" ? "1px solid var(--brycks-border-muted)" : void 0,
77
77
  border: m === "separated" ? "1px solid var(--brycks-border-default)" : void 0,
78
78
  borderRadius: m === "separated" ? "var(--brycks-radius-lg)" : void 0,
@@ -1 +1 @@
1
- {"version":3,"file":"List.js","sources":["../../../../src/components/data/List/List.tsx"],"sourcesContent":["/**\n * List Component\n *\n * A flexible list component for displaying items in a vertical layout.\n * Supports different sizes, icons, and interactive items.\n */\n\nimport {\n forwardRef,\n createContext,\n useContext,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n} from 'react'\nimport { cx } from '../../../utils/styles'\nimport { spacing, fontSizes, durations, easings } from '../../../design-system'\nimport { componentHeights, componentGap, componentPaddingX, componentPaddingY } from '../../../design-system/primitives'\n\nexport type ListSize = 'sm' | 'md' | 'lg'\nexport type ListVariant = 'default' | 'bordered' | 'separated'\n\ninterface ListContextValue {\n size: ListSize\n variant: ListVariant\n}\n\nconst ListContext = createContext<ListContextValue>({ size: 'md', variant: 'default' })\n\nfunction useListContext() {\n return useContext(ListContext)\n}\n\nexport interface ListProps extends HTMLAttributes<HTMLUListElement> {\n /** List size */\n size?: ListSize\n /** List variant */\n variant?: ListVariant\n /** Whether list items are interactive */\n interactive?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const List = forwardRef<HTMLUListElement, ListProps>(function List(\n {\n size = 'md',\n variant = 'default',\n interactive = false,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const listStyle: CSSProperties = {\n listStyle: 'none',\n margin: 0,\n padding: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: variant === 'separated' ? spacing[2] : 0,\n border: variant === 'bordered' ? '1px solid var(--brycks-border-default)' : undefined,\n borderRadius: variant === 'bordered' ? 'var(--brycks-radius-lg)' : undefined,\n overflow: variant === 'bordered' ? 'hidden' : undefined,\n ...style,\n }\n\n return (\n <ListContext.Provider value={{ size, variant }}>\n <ul\n ref={ref}\n className={cx(\n 'brycks-list',\n `brycks-list--${size}`,\n `brycks-list--${variant}`,\n interactive && 'brycks-list--interactive',\n className\n )}\n style={listStyle}\n data-testid={testId}\n {...props}\n >\n {children}\n </ul>\n </ListContext.Provider>\n )\n})\n\nList.displayName = 'List'\n\n// ListItem\nexport interface ListItemProps extends HTMLAttributes<HTMLLIElement> {\n /** Icon or avatar on the left */\n leftElement?: ReactNode\n /** Element on the right (badge, button, etc.) */\n rightElement?: ReactNode\n /** Secondary text below the main content */\n secondary?: ReactNode\n /** Whether the item is selected */\n selected?: boolean\n /** Whether the item is disabled */\n disabled?: boolean\n /** Whether the item is clickable */\n clickable?: boolean\n /** Custom class name */\n className?: string\n}\n\nconst sizeConfig: Record<ListSize, { paddingX: number; paddingY: number; fontSize: number; secondarySize: number; gap: number; minHeight: number }> = {\n sm: { paddingY: componentPaddingY.md, paddingX: componentPaddingX.sm, fontSize: fontSizes.base - 1, secondarySize: fontSizes.sm, gap: componentGap.lg, minHeight: componentHeights.md },\n md: { paddingY: componentPaddingX.sm, paddingX: componentPaddingX.md, fontSize: fontSizes.base, secondarySize: fontSizes.base - 1, gap: componentGap.xl, minHeight: 52 },\n lg: { paddingY: componentPaddingX.md, paddingX: componentPaddingX.lg, fontSize: fontSizes.md, secondarySize: fontSizes.base, gap: spacing[3.5], minHeight: spacing[16] },\n}\n\nexport const ListItem = forwardRef<HTMLLIElement, ListItemProps>(function ListItem(\n {\n leftElement,\n rightElement,\n secondary,\n selected = false,\n disabled = false,\n clickable = false,\n className,\n style,\n children,\n ...props\n },\n ref\n) {\n const { size, variant } = useListContext()\n const config = sizeConfig[size]\n\n const itemStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: config.gap,\n padding: `${config.paddingY}px ${config.paddingX}px`,\n minHeight: config.minHeight,\n backgroundColor: selected\n ? 'var(--brycks-primary-50)'\n : 'transparent',\n borderBottom: variant === 'default' || variant === 'bordered'\n ? '1px solid var(--brycks-border-muted)'\n : undefined,\n border: variant === 'separated' ? '1px solid var(--brycks-border-default)' : undefined,\n borderRadius: variant === 'separated' ? 'var(--brycks-radius-lg)' : undefined,\n cursor: disabled ? 'not-allowed' : clickable ? 'pointer' : undefined,\n opacity: disabled ? 0.5 : 1,\n transition: `background-color ${durations.quick}ms ${easings.easeOut}`,\n ...style,\n }\n\n const contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n gap: spacing[0.5],\n minWidth: 0,\n }\n\n const primaryStyle: CSSProperties = {\n fontSize: config.fontSize,\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n lineHeight: 1.4,\n }\n\n const secondaryStyle: CSSProperties = {\n fontSize: config.secondarySize,\n color: 'var(--brycks-foreground-muted)',\n lineHeight: 1.4,\n }\n\n const elementStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }\n\n return (\n <li\n ref={ref}\n className={cx(\n 'brycks-list-item',\n selected && 'brycks-list-item--selected',\n clickable && 'brycks-list-item--clickable',\n disabled && 'brycks-list-item--disabled',\n className\n )}\n style={itemStyle}\n onMouseEnter={(e) => {\n if (clickable && !disabled && !selected) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n if (!selected) {\n e.currentTarget.style.backgroundColor = 'transparent'\n }\n }}\n {...props}\n >\n {leftElement && <span style={elementStyle}>{leftElement}</span>}\n <div style={contentStyle}>\n <span style={primaryStyle}>{children}</span>\n {secondary && <span style={secondaryStyle}>{secondary}</span>}\n </div>\n {rightElement && <span style={elementStyle}>{rightElement}</span>}\n </li>\n )\n})\n\nListItem.displayName = 'ListItem'\n\n// ListDivider\nexport interface ListDividerProps extends HTMLAttributes<HTMLLIElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const ListDivider = forwardRef<HTMLLIElement, ListDividerProps>(function ListDivider(\n { className, style, ...props },\n ref\n) {\n const dividerStyle: CSSProperties = {\n height: 1,\n backgroundColor: 'var(--brycks-border-muted)',\n margin: `${spacing[2]}px 0`,\n ...style,\n }\n\n return (\n <li\n ref={ref}\n role=\"separator\"\n className={cx('brycks-list-divider', className)}\n style={dividerStyle}\n {...props}\n />\n )\n})\n\nListDivider.displayName = 'ListDivider'\n\n// ListHeader\nexport interface ListHeaderProps extends HTMLAttributes<HTMLLIElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const ListHeader = forwardRef<HTMLLIElement, ListHeaderProps>(function ListHeader(\n { className, style, children, ...props },\n ref\n) {\n const headerStyle: CSSProperties = {\n padding: `${spacing[3]}px ${spacing[4]}px ${spacing[2]}px ${spacing[4]}px`,\n fontSize: fontSizes.xs,\n fontWeight: 600,\n color: 'var(--brycks-foreground-muted)',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n ...style,\n }\n\n return (\n <li\n ref={ref}\n className={cx('brycks-list-header', className)}\n style={headerStyle}\n {...props}\n >\n {children}\n </li>\n )\n})\n\nListHeader.displayName = 'ListHeader'\n"],"names":["ListContext","createContext","useListContext","useContext","List","forwardRef","size","variant","interactive","className","style","children","testId","props","ref","listStyle","spacing","jsx","cx","sizeConfig","componentPaddingY","componentPaddingX","fontSizes","componentGap","componentHeights","ListItem","leftElement","rightElement","secondary","selected","disabled","clickable","config","itemStyle","durations","easings","contentStyle","primaryStyle","secondaryStyle","elementStyle","jsxs","e","ListDivider","dividerStyle","ListHeader","headerStyle"],"mappings":"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"}
1
+ {"version":3,"file":"List.js","sources":["../../../../src/components/data/List/List.tsx"],"sourcesContent":["/**\n * List Component\n *\n * A flexible list component for displaying items in a vertical layout.\n * Supports different sizes, icons, and interactive items.\n */\n\nimport {\n forwardRef,\n createContext,\n useContext,\n type CSSProperties,\n type ReactNode,\n type HTMLAttributes,\n} from 'react'\nimport { cx } from '../../../utils/styles'\nimport { spacing, fontSizes, durations, easings } from '../../../design-system'\nimport { componentHeights, componentGap, componentPaddingX, componentPaddingY } from '../../../design-system/primitives'\n\nexport type ListSize = 'sm' | 'md' | 'lg'\nexport type ListVariant = 'default' | 'bordered' | 'separated'\n\ninterface ListContextValue {\n size: ListSize\n variant: ListVariant\n}\n\nconst ListContext = createContext<ListContextValue>({ size: 'md', variant: 'default' })\n\nfunction useListContext() {\n return useContext(ListContext)\n}\n\nexport interface ListProps extends HTMLAttributes<HTMLUListElement> {\n /** List size */\n size?: ListSize\n /** List variant */\n variant?: ListVariant\n /** Whether list items are interactive */\n interactive?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nexport const List = forwardRef<HTMLUListElement, ListProps>(function List(\n {\n size = 'md',\n variant = 'default',\n interactive = false,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const listStyle: CSSProperties = {\n listStyle: 'none',\n margin: 0,\n padding: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: variant === 'separated' ? spacing[2] : 0,\n border: variant === 'bordered' ? '1px solid var(--brycks-border-default)' : undefined,\n borderRadius: variant === 'bordered' ? 'var(--brycks-radius-lg)' : undefined,\n overflow: variant === 'bordered' ? 'hidden' : undefined,\n ...style,\n }\n\n return (\n <ListContext.Provider value={{ size, variant }}>\n <ul\n ref={ref}\n className={cx(\n 'brycks-list',\n `brycks-list--${size}`,\n `brycks-list--${variant}`,\n interactive && 'brycks-list--interactive',\n className\n )}\n style={listStyle}\n data-testid={testId}\n {...props}\n >\n {children}\n </ul>\n </ListContext.Provider>\n )\n})\n\nList.displayName = 'List'\n\n// ListItem\nexport interface ListItemProps extends HTMLAttributes<HTMLLIElement> {\n /** Icon or avatar on the left */\n leftElement?: ReactNode\n /** Element on the right (badge, button, etc.) */\n rightElement?: ReactNode\n /** Secondary text below the main content */\n secondary?: ReactNode\n /** Whether the item is selected */\n selected?: boolean\n /** Whether the item is disabled */\n disabled?: boolean\n /** Whether the item is clickable */\n clickable?: boolean\n /** Custom class name */\n className?: string\n}\n\nconst sizeConfig: Record<ListSize, { paddingX: number; paddingY: number; fontSize: number; secondarySize: number; gap: number; minHeight: number }> = {\n sm: { paddingY: componentPaddingY.md, paddingX: componentPaddingX.sm, fontSize: fontSizes.base - 1, secondarySize: fontSizes.sm, gap: componentGap.lg, minHeight: componentHeights.md },\n md: { paddingY: componentPaddingX.sm, paddingX: componentPaddingX.md, fontSize: fontSizes.base, secondarySize: fontSizes.base - 1, gap: componentGap.xl, minHeight: 52 },\n lg: { paddingY: componentPaddingX.md, paddingX: componentPaddingX.lg, fontSize: fontSizes.md, secondarySize: fontSizes.base, gap: spacing[3.5], minHeight: spacing[16] },\n}\n\nexport const ListItem = forwardRef<HTMLLIElement, ListItemProps>(function ListItem(\n {\n leftElement,\n rightElement,\n secondary,\n selected = false,\n disabled = false,\n clickable = false,\n className,\n style,\n children,\n ...props\n },\n ref\n) {\n const { size, variant } = useListContext()\n const config = sizeConfig[size]\n\n const itemStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: config.gap,\n padding: `${config.paddingY}px ${config.paddingX}px`,\n minHeight: config.minHeight,\n backgroundColor: selected\n ? 'var(--brycks-primary-muted)'\n : 'transparent',\n borderBottom: variant === 'default' || variant === 'bordered'\n ? '1px solid var(--brycks-border-muted)'\n : undefined,\n border: variant === 'separated' ? '1px solid var(--brycks-border-default)' : undefined,\n borderRadius: variant === 'separated' ? 'var(--brycks-radius-lg)' : undefined,\n cursor: disabled ? 'not-allowed' : clickable ? 'pointer' : undefined,\n opacity: disabled ? 0.5 : 1,\n transition: `background-color ${durations.quick}ms ${easings.easeOut}`,\n ...style,\n }\n\n const contentStyle: CSSProperties = {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n gap: spacing[0.5],\n minWidth: 0,\n }\n\n const primaryStyle: CSSProperties = {\n fontSize: config.fontSize,\n fontWeight: 500,\n color: 'var(--brycks-foreground-default)',\n lineHeight: 1.4,\n }\n\n const secondaryStyle: CSSProperties = {\n fontSize: config.secondarySize,\n color: 'var(--brycks-foreground-muted)',\n lineHeight: 1.4,\n }\n\n const elementStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }\n\n return (\n <li\n ref={ref}\n className={cx(\n 'brycks-list-item',\n selected && 'brycks-list-item--selected',\n clickable && 'brycks-list-item--clickable',\n disabled && 'brycks-list-item--disabled',\n className\n )}\n style={itemStyle}\n onMouseEnter={(e) => {\n if (clickable && !disabled && !selected) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n if (!selected) {\n e.currentTarget.style.backgroundColor = 'transparent'\n }\n }}\n {...props}\n >\n {leftElement && <span style={elementStyle}>{leftElement}</span>}\n <div style={contentStyle}>\n <span style={primaryStyle}>{children}</span>\n {secondary && <span style={secondaryStyle}>{secondary}</span>}\n </div>\n {rightElement && <span style={elementStyle}>{rightElement}</span>}\n </li>\n )\n})\n\nListItem.displayName = 'ListItem'\n\n// ListDivider\nexport interface ListDividerProps extends HTMLAttributes<HTMLLIElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const ListDivider = forwardRef<HTMLLIElement, ListDividerProps>(function ListDivider(\n { className, style, ...props },\n ref\n) {\n const dividerStyle: CSSProperties = {\n height: 1,\n backgroundColor: 'var(--brycks-border-muted)',\n margin: `${spacing[2]}px 0`,\n ...style,\n }\n\n return (\n <li\n ref={ref}\n role=\"separator\"\n className={cx('brycks-list-divider', className)}\n style={dividerStyle}\n {...props}\n />\n )\n})\n\nListDivider.displayName = 'ListDivider'\n\n// ListHeader\nexport interface ListHeaderProps extends HTMLAttributes<HTMLLIElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const ListHeader = forwardRef<HTMLLIElement, ListHeaderProps>(function ListHeader(\n { className, style, children, ...props },\n ref\n) {\n const headerStyle: CSSProperties = {\n padding: `${spacing[3]}px ${spacing[4]}px ${spacing[2]}px ${spacing[4]}px`,\n fontSize: fontSizes.xs,\n fontWeight: 600,\n color: 'var(--brycks-foreground-muted)',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n ...style,\n }\n\n return (\n <li\n ref={ref}\n className={cx('brycks-list-header', className)}\n style={headerStyle}\n {...props}\n >\n {children}\n </li>\n )\n})\n\nListHeader.displayName = 'ListHeader'\n"],"names":["ListContext","createContext","useListContext","useContext","List","forwardRef","size","variant","interactive","className","style","children","testId","props","ref","listStyle","spacing","jsx","cx","sizeConfig","componentPaddingY","componentPaddingX","fontSizes","componentGap","componentHeights","ListItem","leftElement","rightElement","secondary","selected","disabled","clickable","config","itemStyle","durations","easings","contentStyle","primaryStyle","secondaryStyle","elementStyle","jsxs","e","ListDivider","dividerStyle","ListHeader","headerStyle"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),b=require("react"),u=require("../../../utils/styles.cjs"),g=require("../../../design-system/tokens/motion.cjs"),s=require("../../../design-system/primitives/sizing.cjs"),k=require("../../../design-system/tokens/spacing.cjs"),m=require("../../../design-system/tokens/typography.cjs"),w=b.createContext({size:"md",variant:"default"});function v(){return b.useContext(w)}const T={sm:{fontSize:m.fontSizes.base-1,paddingY:s.componentPaddingY.md,paddingX:s.componentPaddingX.sm,headerPaddingY:s.componentPaddingY.md,headerPaddingX:s.componentPaddingX.sm},md:{fontSize:m.fontSizes.base,paddingY:s.componentPaddingX.sm,paddingX:s.componentPaddingX.md,headerPaddingY:s.componentPaddingX.sm,headerPaddingX:s.componentPaddingX.md},lg:{fontSize:m.fontSizes.base+1,paddingY:s.componentPaddingX.md,paddingX:s.componentPaddingX.lg,headerPaddingY:k.spacing[3.5],headerPaddingX:s.componentPaddingX.lg}},S=b.forwardRef(function({size:e="md",variant:o="default",stickyHeader:r=!1,loading:a=!1,className:n,style:d,children:l,testId:f,...p},c){const y={position:"relative",width:"100%",overflow:"auto",...d},x={width:"100%",borderCollapse:o==="bordered"?"separate":"collapse",borderSpacing:0,fontSize:T[e].fontSize,opacity:a?.6:1,transition:`opacity ${g.durations.quick}ms ${g.easings.easeOut}`};return t.jsx(w.Provider,{value:{size:e,variant:o},children:t.jsx("div",{className:"brycks-table-container",style:y,children:t.jsx("table",{ref:c,className:u.cx("brycks-table",`brycks-table--${e}`,`brycks-table--${o}`,n),style:x,"data-testid":f,...p,children:l})})})});S.displayName="Table";const C=b.forwardRef(function({sticky:e=!1,className:o,style:r,children:a,...n},d){const l={backgroundColor:"var(--brycks-background-muted)",position:e?"sticky":void 0,top:e?0:void 0,zIndex:e?1:void 0,...r};return t.jsx("thead",{ref:d,className:u.cx("brycks-table-head",e&&"brycks-table-head--sticky",o),style:l,...n,children:a})});C.displayName="TableHead";const j=b.forwardRef(function({className:e,style:o,children:r,...a},n){const d={...o};return t.jsx("tbody",{ref:n,className:u.cx("brycks-table-body",e),style:d,...a,children:r})});j.displayName="TableBody";const P=b.forwardRef(function({selected:e=!1,clickable:o=!1,className:r,style:a,children:n,...d},l){const{variant:f}=v(),p={backgroundColor:e?"var(--brycks-primary-50)":"transparent",borderBottom:f!=="bordered"?"1px solid var(--brycks-border-muted)":void 0,cursor:o?"pointer":void 0,transition:`background-color ${g.durations.quick}ms ${g.easings.easeOut}`,...a};return t.jsx("tr",{ref:l,className:u.cx("brycks-table-row",e&&"brycks-table-row--selected",o&&"brycks-table-row--clickable",r),style:p,onMouseEnter:c=>{o&&!e&&(c.currentTarget.style.backgroundColor="var(--brycks-background-muted)")},onMouseLeave:c=>{e||(c.currentTarget.style.backgroundColor="transparent")},...d,children:n})});P.displayName="TableRow";function q({direction:i}){return i?t.jsx("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",children:i==="asc"?t.jsx("path",{d:"M7 3L10 6H4L7 3Z",fill:"currentColor"}):t.jsx("path",{d:"M7 11L4 8H10L7 11Z",fill:"currentColor"})}):t.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",style:{opacity:.4},children:[t.jsx("path",{d:"M7 3L10 6H4L7 3Z",fill:"currentColor"}),t.jsx("path",{d:"M7 11L4 8H10L7 11Z",fill:"currentColor"})]})}const N=b.forwardRef(function({sortable:e=!1,sortDirection:o=null,onSort:r,align:a="left",className:n,style:d,children:l,...f},p){const{size:c}=v(),y=T[c],x={padding:`${y.headerPaddingY}px ${y.headerPaddingX}px`,fontWeight:600,color:"var(--brycks-foreground-muted)",textAlign:a,whiteSpace:"nowrap",cursor:e?"pointer":void 0,userSelect:e?"none":void 0,transition:`color ${g.durations.quick}ms ${g.easings.easeOut}`,...d},R={display:"flex",alignItems:"center",gap:s.componentGap.sm,justifyContent:a==="right"?"flex-end":a==="center"?"center":"flex-start"},$=()=>{e&&r&&r()};return t.jsx("th",{ref:p,className:u.cx("brycks-table-header",e&&"brycks-table-header--sortable",n),style:x,onClick:$,onMouseEnter:h=>{e&&(h.currentTarget.style.color="var(--brycks-foreground-default)")},onMouseLeave:h=>{h.currentTarget.style.color="var(--brycks-foreground-muted)"},...f,children:t.jsxs("span",{style:R,children:[l,e&&t.jsx(q,{direction:o})]})})});N.displayName="TableHeader";const X=b.forwardRef(function({align:e="left",truncate:o=!1,className:r,style:a,children:n,...d},l){const{size:f,variant:p}=v(),c=T[f],y={padding:`${c.paddingY}px ${c.paddingX}px`,color:"var(--brycks-foreground-default)",textAlign:e,verticalAlign:"middle",border:p==="bordered"?"1px solid var(--brycks-border-muted)":void 0,maxWidth:o?200:void 0,overflow:o?"hidden":void 0,textOverflow:o?"ellipsis":void 0,whiteSpace:o?"nowrap":void 0,...a};return t.jsx("td",{ref:l,className:u.cx("brycks-table-cell",o&&"brycks-table-cell--truncate",r),style:y,title:o&&typeof n=="string"?n:void 0,...d,children:n})});X.displayName="TableCell";const z=b.forwardRef(function({className:e,style:o,children:r,...a},n){const d={backgroundColor:"var(--brycks-background-muted)",fontWeight:500,...o};return t.jsx("tfoot",{ref:n,className:u.cx("brycks-table-foot",e),style:d,...a,children:r})});z.displayName="TableFoot";const H=b.forwardRef(function({placement:e="bottom",className:o,style:r,children:a,...n},d){const l={captionSide:e,padding:`${k.spacing[3]}px ${k.spacing[4]}px`,fontSize:m.fontSizes.base-1,color:"var(--brycks-foreground-muted)",textAlign:"left",...r};return t.jsx("caption",{ref:d,className:u.cx("brycks-table-caption",o),style:l,...n,children:a})});H.displayName="TableCaption";exports.Table=S;exports.TableBody=j;exports.TableCaption=H;exports.TableCell=X;exports.TableFoot=z;exports.TableHead=C;exports.TableHeader=N;exports.TableRow=P;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react/jsx-runtime"),u=require("react"),p=require("../../../utils/styles.cjs"),g=require("../../../design-system/tokens/motion.cjs"),l=require("../../../design-system/primitives/sizing.cjs"),v=require("../../../design-system/tokens/spacing.cjs"),m=require("../../../design-system/tokens/typography.cjs"),S=u.createContext({size:"md",variant:"default",stickyHeader:!1});function x(){return u.useContext(S)}const T={sm:{fontSize:m.fontSizes.base-1,paddingY:l.componentPaddingY.md,paddingX:l.componentPaddingX.sm,headerPaddingY:l.componentPaddingY.md,headerPaddingX:l.componentPaddingX.sm},md:{fontSize:m.fontSizes.base,paddingY:l.componentPaddingX.sm,paddingX:l.componentPaddingX.md,headerPaddingY:l.componentPaddingX.sm,headerPaddingX:l.componentPaddingX.md},lg:{fontSize:m.fontSizes.base+1,paddingY:l.componentPaddingX.md,paddingX:l.componentPaddingX.lg,headerPaddingY:v.spacing[3.5],headerPaddingX:l.componentPaddingX.lg}},C=u.forwardRef(function({size:t="md",variant:e="default",stickyHeader:r=!1,loading:a=!1,className:n,style:s,children:d,testId:i,...y},b){const f={position:"relative",width:"100%",overflow:"auto",...s},h={width:"100%",borderCollapse:e==="bordered"?"separate":"collapse",borderSpacing:0,fontSize:T[t].fontSize,fontVariantNumeric:"tabular-nums",opacity:a?.6:1,transition:`opacity ${g.durations.quick}ms ${g.easings.easeOut}`};return o.jsx(S.Provider,{value:{size:t,variant:e,stickyHeader:r},children:o.jsx("div",{className:"brycks-table-container",style:f,children:o.jsx("table",{ref:b,className:p.cx("brycks-table",`brycks-table--${t}`,`brycks-table--${e}`,n),style:h,"aria-busy":a||void 0,"data-testid":i,...y,children:d})})})});C.displayName="Table";const j=u.forwardRef(function({sticky:t=!1,className:e,style:r,children:a,...n},s){const{stickyHeader:d}=x(),i=t||d,y={backgroundColor:"var(--brycks-background-muted)",position:i?"sticky":void 0,top:i?0:void 0,zIndex:i?1:void 0,...r};return o.jsx("thead",{ref:s,className:p.cx("brycks-table-head",i&&"brycks-table-head--sticky",e),style:y,...n,children:a})});j.displayName="TableHead";const P=u.forwardRef(function({className:t,style:e,children:r,...a},n){const s={...e};return o.jsx("tbody",{ref:n,className:p.cx("brycks-table-body",t),style:s,...a,children:r})});P.displayName="TableBody";const N=u.forwardRef(function({selected:t=!1,clickable:e=!1,className:r,style:a,children:n,...s},d){const{variant:i}=x(),y={backgroundColor:t?"var(--brycks-primary-muted)":"transparent",borderBottom:i!=="bordered"?"1px solid var(--brycks-border-muted)":void 0,cursor:e?"pointer":void 0,transition:`background-color ${g.durations.quick}ms ${g.easings.easeOut}`,...a};return o.jsx("tr",{ref:d,className:p.cx("brycks-table-row",t&&"brycks-table-row--selected",e&&"brycks-table-row--clickable",r),style:y,onMouseEnter:b=>{e&&!t&&(b.currentTarget.style.backgroundColor="var(--brycks-background-muted)")},onMouseLeave:b=>{t||(b.currentTarget.style.backgroundColor="transparent")},...s,children:n})});N.displayName="TableRow";function q({direction:c}){return c?o.jsx("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none","aria-hidden":"true",children:c==="asc"?o.jsx("path",{d:"M7 3L10 6H4L7 3Z",fill:"currentColor"}):o.jsx("path",{d:"M7 11L4 8H10L7 11Z",fill:"currentColor"})}):o.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",style:{opacity:.4},"aria-hidden":"true",children:[o.jsx("path",{d:"M7 3L10 6H4L7 3Z",fill:"currentColor"}),o.jsx("path",{d:"M7 11L4 8H10L7 11Z",fill:"currentColor"})]})}const X=u.forwardRef(function({sortable:t=!1,sortDirection:e=null,onSort:r,align:a="left",className:n,style:s,children:d,...i},y){const{size:b}=x(),f=T[b],h={padding:`${f.headerPaddingY}px ${f.headerPaddingX}px`,fontWeight:600,color:"var(--brycks-foreground-muted)",textAlign:a,whiteSpace:"nowrap",transition:`color ${g.durations.quick}ms ${g.easings.easeOut}`,...s},w={display:"flex",alignItems:"center",gap:l.componentGap.sm,justifyContent:a==="right"?"flex-end":a==="center"?"center":"flex-start"},$={...w,width:"100%",padding:0,background:"transparent",border:"none",font:"inherit",fontWeight:"inherit",color:"inherit",cursor:"pointer",userSelect:"none"};return o.jsx("th",{ref:y,"aria-sort":t?e==="asc"?"ascending":e==="desc"?"descending":"none":void 0,className:p.cx("brycks-table-header",t&&"brycks-table-header--sortable",n),style:h,...i,children:t?o.jsxs("button",{type:"button",style:$,onClick:()=>r?.(),onMouseEnter:k=>{k.currentTarget.style.color="var(--brycks-foreground-default)"},onMouseLeave:k=>{k.currentTarget.style.color="inherit"},children:[d,o.jsx(q,{direction:e})]}):o.jsx("span",{style:w,children:d})})});X.displayName="TableHeader";const z=u.forwardRef(function({align:t="left",truncate:e=!1,className:r,style:a,children:n,...s},d){const{size:i,variant:y}=x(),b=T[i],f={padding:`${b.paddingY}px ${b.paddingX}px`,color:"var(--brycks-foreground-default)",textAlign:t,verticalAlign:"middle",border:y==="bordered"?"1px solid var(--brycks-border-muted)":void 0,maxWidth:e?200:void 0,overflow:e?"hidden":void 0,textOverflow:e?"ellipsis":void 0,whiteSpace:e?"nowrap":void 0,...a};return o.jsx("td",{ref:d,className:p.cx("brycks-table-cell",e&&"brycks-table-cell--truncate",r),style:f,title:e&&typeof n=="string"?n:void 0,...s,children:n})});z.displayName="TableCell";const H=u.forwardRef(function({className:t,style:e,children:r,...a},n){const s={backgroundColor:"var(--brycks-background-muted)",fontWeight:500,...e};return o.jsx("tfoot",{ref:n,className:p.cx("brycks-table-foot",t),style:s,...a,children:r})});H.displayName="TableFoot";const R=u.forwardRef(function({placement:t="bottom",className:e,style:r,children:a,...n},s){const d={captionSide:t,padding:`${v.spacing[3]}px ${v.spacing[4]}px`,fontSize:m.fontSizes.base-1,color:"var(--brycks-foreground-muted)",textAlign:"left",...r};return o.jsx("caption",{ref:s,className:p.cx("brycks-table-caption",e),style:d,...n,children:a})});R.displayName="TableCaption";exports.Table=C;exports.TableBody=P;exports.TableCaption=R;exports.TableCell=z;exports.TableFoot=H;exports.TableHead=j;exports.TableHeader=X;exports.TableRow=N;
2
2
  //# sourceMappingURL=Table.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Table.cjs","sources":["../../../../src/components/data/Table/Table.tsx"],"sourcesContent":["/**\n * Table Component\n *\n * A flexible table component with sorting, selection, and responsive support.\n * Follows design system patterns for consistent styling.\n */\n\nimport {\n forwardRef,\n createContext,\n useContext,\n type CSSProperties,\n type HTMLAttributes,\n type ThHTMLAttributes,\n type TdHTMLAttributes,\n} from 'react'\nimport { cx } from '../../../utils/styles'\nimport { spacing, fontSizes, durations, easings } from '../../../design-system'\nimport { componentGap, componentPaddingX, componentPaddingY } from '../../../design-system/primitives'\n\nexport type TableSize = 'sm' | 'md' | 'lg'\nexport type TableVariant = 'default' | 'striped' | 'bordered'\n\ninterface TableContextValue {\n size: TableSize\n variant: TableVariant\n}\n\nconst TableContext = createContext<TableContextValue>({ size: 'md', variant: 'default' })\n\nfunction useTableContext() {\n return useContext(TableContext)\n}\n\nexport interface TableProps extends HTMLAttributes<HTMLTableElement> {\n /** Table size */\n size?: TableSize\n /** Table variant */\n variant?: TableVariant\n /** Whether the table has a sticky header */\n stickyHeader?: boolean\n /** Whether the table is in a loading state */\n loading?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<TableSize, { fontSize: number; paddingY: number; paddingX: number; headerPaddingY: number; headerPaddingX: number }> = {\n sm: { fontSize: fontSizes.base - 1, paddingY: componentPaddingY.md, paddingX: componentPaddingX.sm, headerPaddingY: componentPaddingY.md, headerPaddingX: componentPaddingX.sm },\n md: { fontSize: fontSizes.base, paddingY: componentPaddingX.sm, paddingX: componentPaddingX.md, headerPaddingY: componentPaddingX.sm, headerPaddingX: componentPaddingX.md },\n lg: { fontSize: fontSizes.base + 1, paddingY: componentPaddingX.md, paddingX: componentPaddingX.lg, headerPaddingY: spacing[3.5], headerPaddingX: componentPaddingX.lg },\n}\n\nexport const Table = forwardRef<HTMLTableElement, TableProps>(function Table(\n {\n size = 'md',\n variant = 'default',\n stickyHeader: _stickyHeader = false,\n loading = false,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const containerStyle: CSSProperties = {\n position: 'relative',\n width: '100%',\n overflow: 'auto',\n ...style,\n }\n\n const tableStyle: CSSProperties = {\n width: '100%',\n borderCollapse: variant === 'bordered' ? 'separate' : 'collapse',\n borderSpacing: 0,\n fontSize: sizeConfig[size].fontSize,\n opacity: loading ? 0.6 : 1,\n transition: `opacity ${durations.quick}ms ${easings.easeOut}`,\n }\n\n return (\n <TableContext.Provider value={{ size, variant }}>\n <div className=\"brycks-table-container\" style={containerStyle}>\n <table\n ref={ref}\n className={cx('brycks-table', `brycks-table--${size}`, `brycks-table--${variant}`, className)}\n style={tableStyle}\n data-testid={testId}\n {...props}\n >\n {children}\n </table>\n </div>\n </TableContext.Provider>\n )\n})\n\nTable.displayName = 'Table'\n\n// TableHead\nexport interface TableHeadProps extends HTMLAttributes<HTMLTableSectionElement> {\n /** Whether the header is sticky */\n sticky?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport const TableHead = forwardRef<HTMLTableSectionElement, TableHeadProps>(function TableHead(\n { sticky = false, className, style, children, ...props },\n ref\n) {\n const headStyle: CSSProperties = {\n backgroundColor: 'var(--brycks-background-muted)',\n position: sticky ? 'sticky' : undefined,\n top: sticky ? 0 : undefined,\n zIndex: sticky ? 1 : undefined,\n ...style,\n }\n\n return (\n <thead\n ref={ref}\n className={cx('brycks-table-head', sticky && 'brycks-table-head--sticky', className)}\n style={headStyle}\n {...props}\n >\n {children}\n </thead>\n )\n})\n\nTableHead.displayName = 'TableHead'\n\n// TableBody\nexport interface TableBodyProps extends HTMLAttributes<HTMLTableSectionElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const TableBody = forwardRef<HTMLTableSectionElement, TableBodyProps>(function TableBody(\n { className, style, children, ...props },\n ref\n) {\n const bodyStyle: CSSProperties = {\n ...style,\n }\n\n return (\n <tbody\n ref={ref}\n className={cx('brycks-table-body', className)}\n style={bodyStyle}\n {...props}\n >\n {children}\n </tbody>\n )\n})\n\nTableBody.displayName = 'TableBody'\n\n// TableRow\nexport interface TableRowProps extends HTMLAttributes<HTMLTableRowElement> {\n /** Whether the row is selected */\n selected?: boolean\n /** Whether the row is clickable */\n clickable?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(function TableRow(\n { selected = false, clickable = false, className, style, children, ...props },\n ref\n) {\n const { variant } = useTableContext()\n\n const rowStyle: CSSProperties = {\n backgroundColor: selected\n ? 'var(--brycks-primary-50)'\n : 'transparent',\n borderBottom: variant !== 'bordered' ? '1px solid var(--brycks-border-muted)' : undefined,\n cursor: clickable ? 'pointer' : undefined,\n transition: `background-color ${durations.quick}ms ${easings.easeOut}`,\n ...style,\n }\n\n return (\n <tr\n ref={ref}\n className={cx(\n 'brycks-table-row',\n selected && 'brycks-table-row--selected',\n clickable && 'brycks-table-row--clickable',\n className\n )}\n style={rowStyle}\n onMouseEnter={(e) => {\n if (clickable && !selected) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n if (!selected) {\n e.currentTarget.style.backgroundColor = 'transparent'\n }\n }}\n {...props}\n >\n {children}\n </tr>\n )\n})\n\nTableRow.displayName = 'TableRow'\n\n// TableHeader (th)\nexport interface TableHeaderProps extends ThHTMLAttributes<HTMLTableCellElement> {\n /** Whether the column is sortable */\n sortable?: boolean\n /** Sort direction */\n sortDirection?: 'asc' | 'desc' | null\n /** Callback when sort is requested */\n onSort?: () => void\n /** Text alignment */\n align?: 'left' | 'center' | 'right'\n /** Custom class name */\n className?: string\n}\n\nfunction SortIcon({ direction }: { direction: 'asc' | 'desc' | null }) {\n if (!direction) {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" style={{ opacity: 0.4 }}>\n <path d=\"M7 3L10 6H4L7 3Z\" fill=\"currentColor\" />\n <path d=\"M7 11L4 8H10L7 11Z\" fill=\"currentColor\" />\n </svg>\n )\n }\n\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n {direction === 'asc' ? (\n <path d=\"M7 3L10 6H4L7 3Z\" fill=\"currentColor\" />\n ) : (\n <path d=\"M7 11L4 8H10L7 11Z\" fill=\"currentColor\" />\n )}\n </svg>\n )\n}\n\nexport const TableHeader = forwardRef<HTMLTableCellElement, TableHeaderProps>(function TableHeader(\n {\n sortable = false,\n sortDirection = null,\n onSort,\n align = 'left',\n className,\n style,\n children,\n ...props\n },\n ref\n) {\n const { size } = useTableContext()\n const config = sizeConfig[size]\n\n const headerStyle: CSSProperties = {\n padding: `${config.headerPaddingY}px ${config.headerPaddingX}px`,\n fontWeight: 600,\n color: 'var(--brycks-foreground-muted)',\n textAlign: align,\n whiteSpace: 'nowrap',\n cursor: sortable ? 'pointer' : undefined,\n userSelect: sortable ? 'none' : undefined,\n transition: `color ${durations.quick}ms ${easings.easeOut}`,\n ...style,\n }\n\n const contentStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: componentGap.sm,\n justifyContent: align === 'right' ? 'flex-end' : align === 'center' ? 'center' : 'flex-start',\n }\n\n const handleClick = () => {\n if (sortable && onSort) {\n onSort()\n }\n }\n\n return (\n <th\n ref={ref}\n className={cx('brycks-table-header', sortable && 'brycks-table-header--sortable', className)}\n style={headerStyle}\n onClick={handleClick}\n onMouseEnter={(e) => {\n if (sortable) {\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\n }}\n {...props}\n >\n <span style={contentStyle}>\n {children}\n {sortable && <SortIcon direction={sortDirection} />}\n </span>\n </th>\n )\n})\n\nTableHeader.displayName = 'TableHeader'\n\n// TableCell (td)\nexport interface TableCellProps extends TdHTMLAttributes<HTMLTableCellElement> {\n /** Text alignment */\n align?: 'left' | 'center' | 'right'\n /** Whether to truncate text */\n truncate?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport const TableCell = forwardRef<HTMLTableCellElement, TableCellProps>(function TableCell(\n { align = 'left', truncate = false, className, style, children, ...props },\n ref\n) {\n const { size, variant } = useTableContext()\n const config = sizeConfig[size]\n\n const cellStyle: CSSProperties = {\n padding: `${config.paddingY}px ${config.paddingX}px`,\n color: 'var(--brycks-foreground-default)',\n textAlign: align,\n verticalAlign: 'middle',\n border: variant === 'bordered' ? '1px solid var(--brycks-border-muted)' : undefined,\n maxWidth: truncate ? 200 : undefined,\n overflow: truncate ? 'hidden' : undefined,\n textOverflow: truncate ? 'ellipsis' : undefined,\n whiteSpace: truncate ? 'nowrap' : undefined,\n ...style,\n }\n\n return (\n <td\n ref={ref}\n className={cx('brycks-table-cell', truncate && 'brycks-table-cell--truncate', className)}\n style={cellStyle}\n title={truncate && typeof children === 'string' ? children : undefined}\n {...props}\n >\n {children}\n </td>\n )\n})\n\nTableCell.displayName = 'TableCell'\n\n// TableFoot\nexport interface TableFootProps extends HTMLAttributes<HTMLTableSectionElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const TableFoot = forwardRef<HTMLTableSectionElement, TableFootProps>(function TableFoot(\n { className, style, children, ...props },\n ref\n) {\n const footStyle: CSSProperties = {\n backgroundColor: 'var(--brycks-background-muted)',\n fontWeight: 500,\n ...style,\n }\n\n return (\n <tfoot\n ref={ref}\n className={cx('brycks-table-foot', className)}\n style={footStyle}\n {...props}\n >\n {children}\n </tfoot>\n )\n})\n\nTableFoot.displayName = 'TableFoot'\n\n// TableCaption\nexport interface TableCaptionProps extends HTMLAttributes<HTMLTableCaptionElement> {\n /** Caption placement */\n placement?: 'top' | 'bottom'\n /** Custom class name */\n className?: string\n}\n\nexport const TableCaption = forwardRef<HTMLTableCaptionElement, TableCaptionProps>(function TableCaption(\n { placement = 'bottom', className, style, children, ...props },\n ref\n) {\n const captionStyle: CSSProperties = {\n captionSide: placement,\n padding: `${spacing[3]}px ${spacing[4]}px`,\n fontSize: fontSizes.base - 1,\n color: 'var(--brycks-foreground-muted)',\n textAlign: 'left',\n ...style,\n }\n\n return (\n <caption\n ref={ref}\n className={cx('brycks-table-caption', className)}\n style={captionStyle}\n {...props}\n >\n {children}\n </caption>\n )\n})\n\nTableCaption.displayName = 'TableCaption'\n"],"names":["TableContext","createContext","useTableContext","useContext","sizeConfig","fontSizes","componentPaddingY","componentPaddingX","spacing","Table","forwardRef","size","variant","_stickyHeader","loading","className","style","children","testId","props","ref","containerStyle","tableStyle","durations","easings","jsx","cx","TableHead","sticky","headStyle","TableBody","bodyStyle","TableRow","selected","clickable","rowStyle","e","SortIcon","direction","jsxs","TableHeader","sortable","sortDirection","onSort","align","config","headerStyle","contentStyle","componentGap","handleClick","TableCell","truncate","cellStyle","TableFoot","footStyle","TableCaption","placement","captionStyle"],"mappings":"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"}
1
+ {"version":3,"file":"Table.cjs","sources":["../../../../src/components/data/Table/Table.tsx"],"sourcesContent":["/**\n * Table Component\n *\n * A flexible table component with sorting, selection, and responsive support.\n * Follows design system patterns for consistent styling.\n */\n\nimport {\n forwardRef,\n createContext,\n useContext,\n type CSSProperties,\n type HTMLAttributes,\n type ThHTMLAttributes,\n type TdHTMLAttributes,\n} from 'react'\nimport { cx } from '../../../utils/styles'\nimport { spacing, fontSizes, durations, easings } from '../../../design-system'\nimport { componentGap, componentPaddingX, componentPaddingY } from '../../../design-system/primitives'\n\nexport type TableSize = 'sm' | 'md' | 'lg'\nexport type TableVariant = 'default' | 'striped' | 'bordered'\n\ninterface TableContextValue {\n size: TableSize\n variant: TableVariant\n stickyHeader: boolean\n}\n\nconst TableContext = createContext<TableContextValue>({ size: 'md', variant: 'default', stickyHeader: false })\n\nfunction useTableContext() {\n return useContext(TableContext)\n}\n\nexport interface TableProps extends HTMLAttributes<HTMLTableElement> {\n /** Table size */\n size?: TableSize\n /** Table variant */\n variant?: TableVariant\n /** Whether the table has a sticky header */\n stickyHeader?: boolean\n /** Whether the table is in a loading state */\n loading?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<TableSize, { fontSize: number; paddingY: number; paddingX: number; headerPaddingY: number; headerPaddingX: number }> = {\n sm: { fontSize: fontSizes.base - 1, paddingY: componentPaddingY.md, paddingX: componentPaddingX.sm, headerPaddingY: componentPaddingY.md, headerPaddingX: componentPaddingX.sm },\n md: { fontSize: fontSizes.base, paddingY: componentPaddingX.sm, paddingX: componentPaddingX.md, headerPaddingY: componentPaddingX.sm, headerPaddingX: componentPaddingX.md },\n lg: { fontSize: fontSizes.base + 1, paddingY: componentPaddingX.md, paddingX: componentPaddingX.lg, headerPaddingY: spacing[3.5], headerPaddingX: componentPaddingX.lg },\n}\n\nexport const Table = forwardRef<HTMLTableElement, TableProps>(function Table(\n {\n size = 'md',\n variant = 'default',\n stickyHeader = false,\n loading = false,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const containerStyle: CSSProperties = {\n position: 'relative',\n width: '100%',\n overflow: 'auto',\n ...style,\n }\n\n const tableStyle: CSSProperties = {\n width: '100%',\n borderCollapse: variant === 'bordered' ? 'separate' : 'collapse',\n borderSpacing: 0,\n fontSize: sizeConfig[size].fontSize,\n fontVariantNumeric: 'tabular-nums',\n opacity: loading ? 0.6 : 1,\n transition: `opacity ${durations.quick}ms ${easings.easeOut}`,\n }\n\n return (\n <TableContext.Provider value={{ size, variant, stickyHeader }}>\n <div className=\"brycks-table-container\" style={containerStyle}>\n <table\n ref={ref}\n className={cx('brycks-table', `brycks-table--${size}`, `brycks-table--${variant}`, className)}\n style={tableStyle}\n aria-busy={loading || undefined}\n data-testid={testId}\n {...props}\n >\n {children}\n </table>\n </div>\n </TableContext.Provider>\n )\n})\n\nTable.displayName = 'Table'\n\n// TableHead\nexport interface TableHeadProps extends HTMLAttributes<HTMLTableSectionElement> {\n /** Whether the header is sticky */\n sticky?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport const TableHead = forwardRef<HTMLTableSectionElement, TableHeadProps>(function TableHead(\n { sticky = false, className, style, children, ...props },\n ref\n) {\n const { stickyHeader } = useTableContext()\n const isSticky = sticky || stickyHeader\n\n const headStyle: CSSProperties = {\n backgroundColor: 'var(--brycks-background-muted)',\n position: isSticky ? 'sticky' : undefined,\n top: isSticky ? 0 : undefined,\n zIndex: isSticky ? 1 : undefined,\n ...style,\n }\n\n return (\n <thead\n ref={ref}\n className={cx('brycks-table-head', isSticky && 'brycks-table-head--sticky', className)}\n style={headStyle}\n {...props}\n >\n {children}\n </thead>\n )\n})\n\nTableHead.displayName = 'TableHead'\n\n// TableBody\nexport interface TableBodyProps extends HTMLAttributes<HTMLTableSectionElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const TableBody = forwardRef<HTMLTableSectionElement, TableBodyProps>(function TableBody(\n { className, style, children, ...props },\n ref\n) {\n const bodyStyle: CSSProperties = {\n ...style,\n }\n\n return (\n <tbody\n ref={ref}\n className={cx('brycks-table-body', className)}\n style={bodyStyle}\n {...props}\n >\n {children}\n </tbody>\n )\n})\n\nTableBody.displayName = 'TableBody'\n\n// TableRow\nexport interface TableRowProps extends HTMLAttributes<HTMLTableRowElement> {\n /** Whether the row is selected */\n selected?: boolean\n /** Whether the row is clickable */\n clickable?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(function TableRow(\n { selected = false, clickable = false, className, style, children, ...props },\n ref\n) {\n const { variant } = useTableContext()\n\n const rowStyle: CSSProperties = {\n backgroundColor: selected\n ? 'var(--brycks-primary-muted)'\n : 'transparent',\n borderBottom: variant !== 'bordered' ? '1px solid var(--brycks-border-muted)' : undefined,\n cursor: clickable ? 'pointer' : undefined,\n transition: `background-color ${durations.quick}ms ${easings.easeOut}`,\n ...style,\n }\n\n return (\n <tr\n ref={ref}\n className={cx(\n 'brycks-table-row',\n selected && 'brycks-table-row--selected',\n clickable && 'brycks-table-row--clickable',\n className\n )}\n style={rowStyle}\n onMouseEnter={(e) => {\n if (clickable && !selected) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n if (!selected) {\n e.currentTarget.style.backgroundColor = 'transparent'\n }\n }}\n {...props}\n >\n {children}\n </tr>\n )\n})\n\nTableRow.displayName = 'TableRow'\n\n// TableHeader (th)\nexport interface TableHeaderProps extends ThHTMLAttributes<HTMLTableCellElement> {\n /** Whether the column is sortable */\n sortable?: boolean\n /** Sort direction */\n sortDirection?: 'asc' | 'desc' | null\n /** Callback when sort is requested */\n onSort?: () => void\n /** Text alignment */\n align?: 'left' | 'center' | 'right'\n /** Custom class name */\n className?: string\n}\n\nfunction SortIcon({ direction }: { direction: 'asc' | 'desc' | null }) {\n if (!direction) {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" style={{ opacity: 0.4 }} aria-hidden=\"true\">\n <path d=\"M7 3L10 6H4L7 3Z\" fill=\"currentColor\" />\n <path d=\"M7 11L4 8H10L7 11Z\" fill=\"currentColor\" />\n </svg>\n )\n }\n\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n {direction === 'asc' ? (\n <path d=\"M7 3L10 6H4L7 3Z\" fill=\"currentColor\" />\n ) : (\n <path d=\"M7 11L4 8H10L7 11Z\" fill=\"currentColor\" />\n )}\n </svg>\n )\n}\n\nexport const TableHeader = forwardRef<HTMLTableCellElement, TableHeaderProps>(function TableHeader(\n {\n sortable = false,\n sortDirection = null,\n onSort,\n align = 'left',\n className,\n style,\n children,\n ...props\n },\n ref\n) {\n const { size } = useTableContext()\n const config = sizeConfig[size]\n\n const headerStyle: CSSProperties = {\n padding: `${config.headerPaddingY}px ${config.headerPaddingX}px`,\n fontWeight: 600,\n color: 'var(--brycks-foreground-muted)',\n textAlign: align,\n whiteSpace: 'nowrap',\n transition: `color ${durations.quick}ms ${easings.easeOut}`,\n ...style,\n }\n\n const contentStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: componentGap.sm,\n justifyContent: align === 'right' ? 'flex-end' : align === 'center' ? 'center' : 'flex-start',\n }\n\n // Sorting happens through a real button so it is reachable by keyboard\n const sortButtonStyle: CSSProperties = {\n ...contentStyle,\n width: '100%',\n padding: 0,\n background: 'transparent',\n border: 'none',\n font: 'inherit',\n fontWeight: 'inherit',\n color: 'inherit',\n cursor: 'pointer',\n userSelect: 'none',\n }\n\n return (\n <th\n ref={ref}\n aria-sort={\n sortable\n ? sortDirection === 'asc'\n ? 'ascending'\n : sortDirection === 'desc'\n ? 'descending'\n : 'none'\n : undefined\n }\n className={cx('brycks-table-header', sortable && 'brycks-table-header--sortable', className)}\n style={headerStyle}\n {...props}\n >\n {sortable ? (\n <button\n type=\"button\"\n style={sortButtonStyle}\n onClick={() => onSort?.()}\n onMouseEnter={(e) => {\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.color = 'inherit'\n }}\n >\n {children}\n <SortIcon direction={sortDirection} />\n </button>\n ) : (\n <span style={contentStyle}>{children}</span>\n )}\n </th>\n )\n})\n\nTableHeader.displayName = 'TableHeader'\n\n// TableCell (td)\nexport interface TableCellProps extends TdHTMLAttributes<HTMLTableCellElement> {\n /** Text alignment */\n align?: 'left' | 'center' | 'right'\n /** Whether to truncate text */\n truncate?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport const TableCell = forwardRef<HTMLTableCellElement, TableCellProps>(function TableCell(\n { align = 'left', truncate = false, className, style, children, ...props },\n ref\n) {\n const { size, variant } = useTableContext()\n const config = sizeConfig[size]\n\n const cellStyle: CSSProperties = {\n padding: `${config.paddingY}px ${config.paddingX}px`,\n color: 'var(--brycks-foreground-default)',\n textAlign: align,\n verticalAlign: 'middle',\n border: variant === 'bordered' ? '1px solid var(--brycks-border-muted)' : undefined,\n maxWidth: truncate ? 200 : undefined,\n overflow: truncate ? 'hidden' : undefined,\n textOverflow: truncate ? 'ellipsis' : undefined,\n whiteSpace: truncate ? 'nowrap' : undefined,\n ...style,\n }\n\n return (\n <td\n ref={ref}\n className={cx('brycks-table-cell', truncate && 'brycks-table-cell--truncate', className)}\n style={cellStyle}\n title={truncate && typeof children === 'string' ? children : undefined}\n {...props}\n >\n {children}\n </td>\n )\n})\n\nTableCell.displayName = 'TableCell'\n\n// TableFoot\nexport interface TableFootProps extends HTMLAttributes<HTMLTableSectionElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const TableFoot = forwardRef<HTMLTableSectionElement, TableFootProps>(function TableFoot(\n { className, style, children, ...props },\n ref\n) {\n const footStyle: CSSProperties = {\n backgroundColor: 'var(--brycks-background-muted)',\n fontWeight: 500,\n ...style,\n }\n\n return (\n <tfoot\n ref={ref}\n className={cx('brycks-table-foot', className)}\n style={footStyle}\n {...props}\n >\n {children}\n </tfoot>\n )\n})\n\nTableFoot.displayName = 'TableFoot'\n\n// TableCaption\nexport interface TableCaptionProps extends HTMLAttributes<HTMLTableCaptionElement> {\n /** Caption placement */\n placement?: 'top' | 'bottom'\n /** Custom class name */\n className?: string\n}\n\nexport const TableCaption = forwardRef<HTMLTableCaptionElement, TableCaptionProps>(function TableCaption(\n { placement = 'bottom', className, style, children, ...props },\n ref\n) {\n const captionStyle: CSSProperties = {\n captionSide: placement,\n padding: `${spacing[3]}px ${spacing[4]}px`,\n fontSize: fontSizes.base - 1,\n color: 'var(--brycks-foreground-muted)',\n textAlign: 'left',\n ...style,\n }\n\n return (\n <caption\n ref={ref}\n className={cx('brycks-table-caption', className)}\n style={captionStyle}\n {...props}\n >\n {children}\n </caption>\n )\n})\n\nTableCaption.displayName = 'TableCaption'\n"],"names":["TableContext","createContext","useTableContext","useContext","sizeConfig","fontSizes","componentPaddingY","componentPaddingX","spacing","Table","forwardRef","size","variant","stickyHeader","loading","className","style","children","testId","props","ref","containerStyle","tableStyle","durations","easings","jsx","cx","TableHead","sticky","isSticky","headStyle","TableBody","bodyStyle","TableRow","selected","clickable","rowStyle","e","SortIcon","direction","TableHeader","sortable","sortDirection","onSort","align","config","headerStyle","contentStyle","componentGap","sortButtonStyle","jsxs","TableCell","truncate","cellStyle","TableFoot","footStyle","TableCaption","placement","captionStyle"],"mappings":"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"}