boreal-ui 0.0.54 → 0.0.56

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 (100) hide show
  1. package/dist/core/DataTable-DIpKxAT_.cjs.map +1 -1
  2. package/dist/core/DataTable-Dv6Bv-wh.js.map +1 -1
  3. package/dist/core/{Footer-CYIUIgV1.cjs → Footer-Ch4Cp02K.cjs} +2 -2
  4. package/dist/core/{Footer-CYIUIgV1.cjs.map → Footer-Ch4Cp02K.cjs.map} +1 -1
  5. package/dist/core/{Footer-D9RimHx9.js → Footer-DuwO0Wo3.js} +2 -2
  6. package/dist/core/{Footer-D9RimHx9.js.map → Footer-DuwO0Wo3.js.map} +1 -1
  7. package/dist/core/Footer.cjs.js +1 -1
  8. package/dist/core/Footer.js +1 -1
  9. package/dist/core/{MessagePopup-DQQKRCGF.cjs → MessagePopup-BwKMX9NS.cjs} +68 -35
  10. package/dist/core/MessagePopup-BwKMX9NS.cjs.map +1 -0
  11. package/dist/core/{MessagePopup-BMGIVKoJ.js → MessagePopup-aKDackiq.js} +68 -35
  12. package/dist/core/MessagePopup-aKDackiq.js.map +1 -0
  13. package/dist/core/MessagePopup.cjs.js +1 -1
  14. package/dist/core/MessagePopup.js +1 -1
  15. package/dist/core/{Modal-DFhYDYb9.js → Modal-Bxr3hpdX.js} +28 -13
  16. package/dist/core/Modal-Bxr3hpdX.js.map +1 -0
  17. package/dist/core/{Modal-FB4mTmQW.cjs → Modal-FSXyuUVq.cjs} +27 -12
  18. package/dist/core/Modal-FSXyuUVq.cjs.map +1 -0
  19. package/dist/core/Modal.cjs.js +1 -1
  20. package/dist/core/Modal.js +1 -1
  21. package/dist/core/{Select-B5Zoc07A.cjs → Select-CeGp-Feb.cjs} +73 -51
  22. package/dist/core/Select-CeGp-Feb.cjs.map +1 -0
  23. package/dist/core/{Select-DntK69DL.js → Select-DnCmFsPq.js} +74 -52
  24. package/dist/core/Select-DnCmFsPq.js.map +1 -0
  25. package/dist/core/Select.cjs.js +1 -1
  26. package/dist/core/Select.js +1 -1
  27. package/dist/core/boreal-ui.css +50 -21
  28. package/dist/core/index.cjs.js +80 -41
  29. package/dist/core/index.cjs.js.map +1 -1
  30. package/dist/core/index.js +82 -43
  31. package/dist/core/index.js.map +1 -1
  32. package/dist/next/{DataTable-mMStogSP.js → DataTable-D2QUuLab.js} +40 -40
  33. package/dist/next/DataTable-D2QUuLab.js.map +1 -0
  34. package/dist/next/{DataTable-CUJXAkHe.cjs → DataTable-j8nWsbeg.cjs} +40 -40
  35. package/dist/next/DataTable-j8nWsbeg.cjs.map +1 -0
  36. package/dist/next/DataTable.cjs.js +1 -1
  37. package/dist/next/DataTable.js +1 -1
  38. package/dist/next/{Footer-B3KTDWBR.cjs → Footer-2VxzlCzU.cjs} +2 -2
  39. package/dist/next/{Footer-B3KTDWBR.cjs.map → Footer-2VxzlCzU.cjs.map} +1 -1
  40. package/dist/next/{Footer-dtGtOPyR.js → Footer-DMT3GtKq.js} +2 -2
  41. package/dist/next/{Footer-dtGtOPyR.js.map → Footer-DMT3GtKq.js.map} +1 -1
  42. package/dist/next/Footer.cjs.js +1 -1
  43. package/dist/next/Footer.js +1 -1
  44. package/dist/next/{MessagePopup-CwOeZAAM.cjs → MessagePopup-DJ2V-ad5.cjs} +87 -51
  45. package/dist/next/MessagePopup-DJ2V-ad5.cjs.map +1 -0
  46. package/dist/next/{MessagePopup-C4n0Qw7n.js → MessagePopup-DscxGBLP.js} +87 -51
  47. package/dist/next/MessagePopup-DscxGBLP.js.map +1 -0
  48. package/dist/next/MessagePopup.cjs.js +1 -1
  49. package/dist/next/MessagePopup.js +1 -1
  50. package/dist/next/{Modal-CIzoBs9H.js → Modal-BaW3Kw7r.js} +28 -13
  51. package/dist/next/Modal-BaW3Kw7r.js.map +1 -0
  52. package/dist/next/{Modal-DCNGQN70.cjs → Modal-BykHn4WN.cjs} +27 -12
  53. package/dist/next/Modal-BykHn4WN.cjs.map +1 -0
  54. package/dist/next/Modal.cjs.js +1 -1
  55. package/dist/next/Modal.js +1 -1
  56. package/dist/next/Select-1sLV4ar_.js +242 -0
  57. package/dist/next/Select-1sLV4ar_.js.map +1 -0
  58. package/dist/next/Select-BDse5K69.cjs +241 -0
  59. package/dist/next/Select-BDse5K69.cjs.map +1 -0
  60. package/dist/next/Select.cjs.js +1 -1
  61. package/dist/next/Select.js +1 -1
  62. package/dist/next/boreal-ui.css +240 -200
  63. package/dist/next/index.cjs.js +81 -42
  64. package/dist/next/index.cjs.js.map +1 -1
  65. package/dist/next/index.js +83 -44
  66. package/dist/next/index.js.map +1 -1
  67. package/dist/tsconfig.build.tsbuildinfo +1 -1
  68. package/dist/types/components/Chip/ChipGroup/ChipGroup.types.d.ts +62 -4
  69. package/dist/types/components/Chip/ChipGroup/ChipGroup.types.d.ts.map +1 -1
  70. package/dist/types/components/Chip/ChipGroup/ChipGroupBase.d.ts +2 -2
  71. package/dist/types/components/Chip/ChipGroup/ChipGroupBase.d.ts.map +1 -1
  72. package/dist/types/components/DataTable/DataTableBase.d.ts.map +1 -1
  73. package/dist/types/components/MessagePopup/MessagePopup.types.d.ts +5 -0
  74. package/dist/types/components/MessagePopup/MessagePopup.types.d.ts.map +1 -1
  75. package/dist/types/components/MessagePopup/MessagePopupBase.d.ts.map +1 -1
  76. package/dist/types/components/MessagePopup/core/MessagePopup.d.ts.map +1 -1
  77. package/dist/types/components/Modal/Modal.types.d.ts +6 -0
  78. package/dist/types/components/Modal/Modal.types.d.ts.map +1 -1
  79. package/dist/types/components/Modal/ModalBase.d.ts.map +1 -1
  80. package/dist/types/components/Select/Select.types.d.ts +8 -0
  81. package/dist/types/components/Select/Select.types.d.ts.map +1 -1
  82. package/dist/types/components/Select/SelectBase.d.ts.map +1 -1
  83. package/dist/types/components/Select/core/Select.d.ts.map +1 -1
  84. package/package.json +1 -1
  85. package/dist/core/MessagePopup-BMGIVKoJ.js.map +0 -1
  86. package/dist/core/MessagePopup-DQQKRCGF.cjs.map +0 -1
  87. package/dist/core/Modal-DFhYDYb9.js.map +0 -1
  88. package/dist/core/Modal-FB4mTmQW.cjs.map +0 -1
  89. package/dist/core/Select-B5Zoc07A.cjs.map +0 -1
  90. package/dist/core/Select-DntK69DL.js.map +0 -1
  91. package/dist/next/DataTable-CUJXAkHe.cjs.map +0 -1
  92. package/dist/next/DataTable-mMStogSP.js.map +0 -1
  93. package/dist/next/MessagePopup-C4n0Qw7n.js.map +0 -1
  94. package/dist/next/MessagePopup-CwOeZAAM.cjs.map +0 -1
  95. package/dist/next/Modal-CIzoBs9H.js.map +0 -1
  96. package/dist/next/Modal-DCNGQN70.cjs.map +0 -1
  97. package/dist/next/Select-CPwU0IV9.js +0 -214
  98. package/dist/next/Select-CPwU0IV9.js.map +0 -1
  99. package/dist/next/Select-Dgcy2vVe.cjs +0 -213
  100. package/dist/next/Select-Dgcy2vVe.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable-DIpKxAT_.cjs","sources":["../../src/components/DataTable/DataTableBase.tsx","../../src/components/DataTable/core/DataTable.tsx"],"sourcesContent":["import { useMemo, useState, KeyboardEvent } from \"react\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { DataTableBaseProps } from \"./DataTable.types\";\r\nimport { capitalize } from \"../../utils/capitalize\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"../../config/boreal-style-config\";\r\n\r\nfunction DataTableBase<T extends object>({\r\n columns,\r\n data,\r\n onRowClick,\r\n classMap,\r\n theme = getDefaultTheme(),\r\n rounding = getDefaultRounding(),\r\n shadow = getDefaultShadow(),\r\n state = \"\",\r\n outline = false,\r\n className = \"\",\r\n striped = true,\r\n defaultSortKey,\r\n ariaLabel,\r\n defaultSortOrder = \"asc\",\r\n serverSort = false,\r\n onSortChange,\r\n rowKey,\r\n \"data-testid\": testId = \"data-table\",\r\n}: DataTableBaseProps<T>) {\r\n const [sortKey, setSortKey] = useState<keyof T | undefined>(defaultSortKey);\r\n const [sortOrder, setSortOrder] = useState<\"asc\" | \"desc\">(defaultSortOrder);\r\n\r\n const sortedData = useMemo(() => {\r\n if (serverSort || !sortKey) return data;\r\n\r\n return [...data].sort((a, b) => {\r\n const valA = a[sortKey];\r\n const valB = b[sortKey];\r\n if (valA === valB) return 0;\r\n if (valA == null) return 1;\r\n if (valB == null) return -1;\r\n\r\n const numA = Number(valA);\r\n const numB = Number(valB);\r\n const bothNumeric = !Number.isNaN(numA) && !Number.isNaN(numB);\r\n\r\n if (bothNumeric) {\r\n return sortOrder === \"asc\" ? numA - numB : numB - numA;\r\n }\r\n const cmp = String(valA).localeCompare(String(valB), undefined, {\r\n numeric: true,\r\n });\r\n return sortOrder === \"asc\" ? cmp : -cmp;\r\n });\r\n }, [data, sortKey, sortOrder, serverSort]);\r\n\r\n const handleSort = (key: keyof T) => {\r\n const newOrder = key === sortKey && sortOrder === \"asc\" ? \"desc\" : \"asc\";\r\n setSortKey(key);\r\n setSortOrder(newOrder);\r\n if (serverSort && onSortChange) onSortChange(key, newOrder);\r\n };\r\n\r\n const handleSortKeyDown = (e: KeyboardEvent, key: keyof T) => {\r\n if (e.key === \"Enter\" || e.key === \" \") {\r\n e.preventDefault();\r\n handleSort(key);\r\n }\r\n };\r\n\r\n const handleRowKeyDown =\r\n (row: T) => (e: KeyboardEvent<HTMLTableRowElement>) => {\r\n if (!onRowClick) return;\r\n if (e.key === \"Enter\" || e.key === \" \") {\r\n e.preventDefault();\r\n onRowClick(row);\r\n }\r\n };\r\n\r\n const captionId = `${testId}-caption`;\r\n\r\n return (\r\n <div\r\n className={combineClassNames(\r\n classMap.wrapper,\r\n shadow && classMap[`shadow${capitalize(shadow)}`],\r\n rounding && classMap[`round${capitalize(rounding)}`],\r\n striped && classMap.striped,\r\n className\r\n )}\r\n data-testid={testId}\r\n >\r\n <table\r\n className={combineClassNames(\r\n classMap.table,\r\n classMap[theme],\r\n classMap[state],\r\n outline && classMap.outline\r\n )}\r\n aria-label={ariaLabel}\r\n aria-describedby={captionId}\r\n >\r\n <caption id={captionId} className={classMap.srOnly ?? \"sr_only\"}>\r\n Sortable data table\r\n </caption>\r\n\r\n <thead>\r\n <tr>\r\n {columns.map((col) => {\r\n const isActive = sortKey === col.key;\r\n return (\r\n <th\r\n key={String(col.key)}\r\n scope=\"col\"\r\n tabIndex={col.sortable ? 0 : undefined}\r\n aria-sort={\r\n col.sortable\r\n ? isActive\r\n ? sortOrder === \"asc\"\r\n ? \"ascending\"\r\n : \"descending\"\r\n : \"none\"\r\n : undefined\r\n }\r\n onClick={() => col.sortable && handleSort(col.key)}\r\n onKeyDown={(e) =>\r\n col.sortable && handleSortKeyDown(e, col.key)\r\n }\r\n className={combineClassNames(\r\n col.sortable && classMap.sortable,\r\n classMap.headerCell\r\n )}\r\n >\r\n <span>{col.label}</span>\r\n {col.sortable && (\r\n <span className={classMap.sortIcon} aria-hidden=\"true\">\r\n {isActive ? (sortOrder === \"asc\" ? \"▲\" : \"▼\") : \"⇅\"}\r\n </span>\r\n )}\r\n </th>\r\n );\r\n })}\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n {sortedData.length === 0 ? (\r\n <tr>\r\n <td\r\n className={classMap.emptyCell}\r\n colSpan={columns.length}\r\n // announce emptiness politely\r\n aria-live=\"polite\"\r\n >\r\n No data available\r\n </td>\r\n </tr>\r\n ) : (\r\n sortedData.map((row, idx) => {\r\n const key = rowKey ? rowKey(row) : idx;\r\n return (\r\n <tr\r\n key={key}\r\n className={combineClassNames(\r\n onRowClick && classMap.clickable,\r\n striped && idx % 2 === 1 && classMap.striped\r\n )}\r\n onClick={() => onRowClick?.(row)}\r\n onKeyDown={handleRowKeyDown(row)}\r\n tabIndex={onRowClick ? 0 : undefined}\r\n >\r\n {columns.map((col) => (\r\n <td\r\n key={String(col.key)}\r\n data-label={col.label}\r\n className={classMap.cell}\r\n >\r\n {col.render\r\n ? col.render(row[col.key], row)\r\n : typeof row[col.key] === \"object\"\r\n ? JSON.stringify(row[col.key])\r\n : String(row[col.key] ?? \"\")}\r\n </td>\r\n ))}\r\n </tr>\r\n );\r\n })\r\n )}\r\n </tbody>\r\n </table>\r\n </div>\r\n );\r\n}\r\nDataTableBase.displayName = \"DataTableBase\";\r\nexport default DataTableBase;\r\n","import \"./DataTable.scss\";\r\nimport DataTableBase from \"../DataTableBase\";\r\nimport { DataTableProps } from \"../DataTable.types\";\r\n\r\nconst classes = {\r\n wrapper: \"data_table_wrapper\",\r\n table: \"data_table\",\r\n headerCell: \"data_table_header_cell\",\r\n sortable: \"data_table_header_sortable\",\r\n sortIcon: \"data_table_sort_icon\",\r\n clickable: \"data_table_row_clickable\",\r\n striped: \"data_table_row_striped\",\r\n cell: \"data_table_cell\",\r\n\r\n primary: \"data_table_primary\",\r\n secondary: \"data_table_secondary\",\r\n tertiary: \"data_table_tertiary\",\r\n quaternary: \"data_table_quaternary\",\r\n\r\n success: \"data_table_success\",\r\n error: \"data_table_error\",\r\n warning: \"data_table_warning\",\r\n\r\n clear: \"data_table_clear\",\r\n\r\n outline: \"data_table_outline\",\r\n\r\n shadowNone: \"data_table_shadow-None\",\r\n shadowLight: \"data_table_shadow-Light\",\r\n shadowMedium: \"data_table_shadow-Medium\",\r\n shadowStrong: \"data_table_shadow-Strong\",\r\n shadowIntense: \"data_table_shadow-Intense\",\r\n\r\n roundNone: \"data_table_round-None\",\r\n roundSmall: \"data_table_round-Small\",\r\n roundMedium: \"data_table_round-Medium\",\r\n roundLarge: \"data_table_round-Large\",\r\n};\r\n\r\nfunction DataTable<T extends object>(props: DataTableProps<T>) {\r\n return <DataTableBase {...props} classMap={classes} />;\r\n}\r\nDataTable.displayName = \"DataTable\";\r\nexport default DataTable;\r\n"],"names":["getDefaultTheme","getDefaultRounding","getDefaultShadow","useState","useMemo","jsx","combineClassNames","capitalize","jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"DataTable-DIpKxAT_.cjs","sources":["../../src/components/DataTable/DataTableBase.tsx","../../src/components/DataTable/core/DataTable.tsx"],"sourcesContent":["import { useMemo, useState, KeyboardEvent } from \"react\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { DataTableBaseProps } from \"./DataTable.types\";\r\nimport { capitalize } from \"../../utils/capitalize\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"../../config/boreal-style-config\";\r\n\r\nfunction DataTableBase<T extends object>({\r\n columns,\r\n data,\r\n onRowClick,\r\n classMap,\r\n theme = getDefaultTheme(),\r\n rounding = getDefaultRounding(),\r\n shadow = getDefaultShadow(),\r\n state = \"\",\r\n outline = false,\r\n className = \"\",\r\n striped = true,\r\n defaultSortKey,\r\n ariaLabel,\r\n defaultSortOrder = \"asc\",\r\n serverSort = false,\r\n onSortChange,\r\n rowKey,\r\n \"data-testid\": testId = \"data-table\",\r\n}: DataTableBaseProps<T>) {\r\n const [sortKey, setSortKey] = useState<keyof T | undefined>(defaultSortKey);\r\n const [sortOrder, setSortOrder] = useState<\"asc\" | \"desc\">(defaultSortOrder);\r\n\r\n const sortedData = useMemo(() => {\r\n if (serverSort || !sortKey) return data;\r\n\r\n return [...data].sort((a, b) => {\r\n const valA = a[sortKey];\r\n const valB = b[sortKey];\r\n if (valA === valB) return 0;\r\n if (valA == null) return 1;\r\n if (valB == null) return -1;\r\n\r\n const numA = Number(valA);\r\n const numB = Number(valB);\r\n const bothNumeric = !Number.isNaN(numA) && !Number.isNaN(numB);\r\n\r\n if (bothNumeric) {\r\n return sortOrder === \"asc\" ? numA - numB : numB - numA;\r\n }\r\n const cmp = String(valA).localeCompare(String(valB), undefined, {\r\n numeric: true,\r\n });\r\n return sortOrder === \"asc\" ? cmp : -cmp;\r\n });\r\n }, [data, sortKey, sortOrder, serverSort]);\r\n\r\n const handleSort = (key: keyof T) => {\r\n const newOrder = key === sortKey && sortOrder === \"asc\" ? \"desc\" : \"asc\";\r\n setSortKey(key);\r\n setSortOrder(newOrder);\r\n if (serverSort && onSortChange) onSortChange(key, newOrder);\r\n };\r\n\r\n const handleSortKeyDown = (e: KeyboardEvent, key: keyof T) => {\r\n if (e.key === \"Enter\" || e.key === \" \") {\r\n e.preventDefault();\r\n handleSort(key);\r\n }\r\n };\r\n\r\n const handleRowKeyDown =\r\n (row: T) => (e: KeyboardEvent<HTMLTableRowElement>) => {\r\n if (!onRowClick) return;\r\n if (e.key === \"Enter\" || e.key === \" \") {\r\n e.preventDefault();\r\n onRowClick(row);\r\n }\r\n };\r\n\r\n const captionId = `${testId}-caption`;\r\n\r\n return (\r\n <div\r\n className={combineClassNames(\r\n classMap.wrapper,\r\n shadow && classMap[`shadow${capitalize(shadow)}`],\r\n rounding && classMap[`round${capitalize(rounding)}`],\r\n striped && classMap.striped,\r\n className,\r\n )}\r\n data-testid={testId}\r\n >\r\n <table\r\n className={combineClassNames(\r\n classMap.table,\r\n classMap[theme],\r\n classMap[state],\r\n outline && classMap.outline,\r\n )}\r\n aria-label={ariaLabel}\r\n aria-describedby={captionId}\r\n >\r\n <caption id={captionId} className={classMap.srOnly ?? \"sr_only\"}>\r\n Sortable data table\r\n </caption>\r\n\r\n <thead>\r\n <tr>\r\n {columns.map((col) => {\r\n const isActive = sortKey === col.key;\r\n return (\r\n <th\r\n key={String(col.key)}\r\n scope=\"col\"\r\n tabIndex={col.sortable ? 0 : undefined}\r\n aria-sort={\r\n col.sortable\r\n ? isActive\r\n ? sortOrder === \"asc\"\r\n ? \"ascending\"\r\n : \"descending\"\r\n : \"none\"\r\n : undefined\r\n }\r\n onClick={() => col.sortable && handleSort(col.key)}\r\n onKeyDown={(e) =>\r\n col.sortable && handleSortKeyDown(e, col.key)\r\n }\r\n className={combineClassNames(\r\n col.sortable && classMap.sortable,\r\n classMap.headerCell,\r\n )}\r\n >\r\n <span>{col.label}</span>\r\n {col.sortable && (\r\n <span className={classMap.sortIcon} aria-hidden=\"true\">\r\n {isActive ? (sortOrder === \"asc\" ? \"▲\" : \"▼\") : \"⇅\"}\r\n </span>\r\n )}\r\n </th>\r\n );\r\n })}\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n {sortedData.length === 0 ? (\r\n <tr>\r\n <td\r\n className={classMap.emptyCell}\r\n colSpan={columns.length}\r\n aria-live=\"polite\"\r\n >\r\n No data available\r\n </td>\r\n </tr>\r\n ) : (\r\n sortedData.map((row, idx) => {\r\n const key = rowKey ? rowKey(row) : idx;\r\n return (\r\n <tr\r\n key={key}\r\n className={combineClassNames(\r\n onRowClick && classMap.clickable,\r\n striped && idx % 2 === 1 && classMap.striped,\r\n )}\r\n onClick={() => onRowClick?.(row)}\r\n onKeyDown={handleRowKeyDown(row)}\r\n tabIndex={onRowClick ? 0 : undefined}\r\n >\r\n {columns.map((col) => (\r\n <td\r\n key={String(col.key)}\r\n data-label={col.label}\r\n className={classMap.cell}\r\n >\r\n {col.render\r\n ? col.render(row[col.key], row)\r\n : typeof row[col.key] === \"object\"\r\n ? JSON.stringify(row[col.key])\r\n : String(row[col.key] ?? \"\")}\r\n </td>\r\n ))}\r\n </tr>\r\n );\r\n })\r\n )}\r\n </tbody>\r\n </table>\r\n </div>\r\n );\r\n}\r\nDataTableBase.displayName = \"DataTableBase\";\r\nexport default DataTableBase;\r\n","import \"./DataTable.scss\";\r\nimport DataTableBase from \"../DataTableBase\";\r\nimport { DataTableProps } from \"../DataTable.types\";\r\n\r\nconst classes = {\r\n wrapper: \"data_table_wrapper\",\r\n table: \"data_table\",\r\n headerCell: \"data_table_header_cell\",\r\n sortable: \"data_table_header_sortable\",\r\n sortIcon: \"data_table_sort_icon\",\r\n clickable: \"data_table_row_clickable\",\r\n striped: \"data_table_row_striped\",\r\n cell: \"data_table_cell\",\r\n\r\n primary: \"data_table_primary\",\r\n secondary: \"data_table_secondary\",\r\n tertiary: \"data_table_tertiary\",\r\n quaternary: \"data_table_quaternary\",\r\n\r\n success: \"data_table_success\",\r\n error: \"data_table_error\",\r\n warning: \"data_table_warning\",\r\n\r\n clear: \"data_table_clear\",\r\n\r\n outline: \"data_table_outline\",\r\n\r\n shadowNone: \"data_table_shadow-None\",\r\n shadowLight: \"data_table_shadow-Light\",\r\n shadowMedium: \"data_table_shadow-Medium\",\r\n shadowStrong: \"data_table_shadow-Strong\",\r\n shadowIntense: \"data_table_shadow-Intense\",\r\n\r\n roundNone: \"data_table_round-None\",\r\n roundSmall: \"data_table_round-Small\",\r\n roundMedium: \"data_table_round-Medium\",\r\n roundLarge: \"data_table_round-Large\",\r\n};\r\n\r\nfunction DataTable<T extends object>(props: DataTableProps<T>) {\r\n return <DataTableBase {...props} classMap={classes} />;\r\n}\r\nDataTable.displayName = \"DataTable\";\r\nexport default DataTable;\r\n"],"names":["getDefaultTheme","getDefaultRounding","getDefaultShadow","useState","useMemo","jsx","combineClassNames","capitalize","jsxs"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DataTable-Dv6Bv-wh.js","sources":["../../src/components/DataTable/DataTableBase.tsx","../../src/components/DataTable/core/DataTable.tsx"],"sourcesContent":["import { useMemo, useState, KeyboardEvent } from \"react\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { DataTableBaseProps } from \"./DataTable.types\";\r\nimport { capitalize } from \"../../utils/capitalize\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"../../config/boreal-style-config\";\r\n\r\nfunction DataTableBase<T extends object>({\r\n columns,\r\n data,\r\n onRowClick,\r\n classMap,\r\n theme = getDefaultTheme(),\r\n rounding = getDefaultRounding(),\r\n shadow = getDefaultShadow(),\r\n state = \"\",\r\n outline = false,\r\n className = \"\",\r\n striped = true,\r\n defaultSortKey,\r\n ariaLabel,\r\n defaultSortOrder = \"asc\",\r\n serverSort = false,\r\n onSortChange,\r\n rowKey,\r\n \"data-testid\": testId = \"data-table\",\r\n}: DataTableBaseProps<T>) {\r\n const [sortKey, setSortKey] = useState<keyof T | undefined>(defaultSortKey);\r\n const [sortOrder, setSortOrder] = useState<\"asc\" | \"desc\">(defaultSortOrder);\r\n\r\n const sortedData = useMemo(() => {\r\n if (serverSort || !sortKey) return data;\r\n\r\n return [...data].sort((a, b) => {\r\n const valA = a[sortKey];\r\n const valB = b[sortKey];\r\n if (valA === valB) return 0;\r\n if (valA == null) return 1;\r\n if (valB == null) return -1;\r\n\r\n const numA = Number(valA);\r\n const numB = Number(valB);\r\n const bothNumeric = !Number.isNaN(numA) && !Number.isNaN(numB);\r\n\r\n if (bothNumeric) {\r\n return sortOrder === \"asc\" ? numA - numB : numB - numA;\r\n }\r\n const cmp = String(valA).localeCompare(String(valB), undefined, {\r\n numeric: true,\r\n });\r\n return sortOrder === \"asc\" ? cmp : -cmp;\r\n });\r\n }, [data, sortKey, sortOrder, serverSort]);\r\n\r\n const handleSort = (key: keyof T) => {\r\n const newOrder = key === sortKey && sortOrder === \"asc\" ? \"desc\" : \"asc\";\r\n setSortKey(key);\r\n setSortOrder(newOrder);\r\n if (serverSort && onSortChange) onSortChange(key, newOrder);\r\n };\r\n\r\n const handleSortKeyDown = (e: KeyboardEvent, key: keyof T) => {\r\n if (e.key === \"Enter\" || e.key === \" \") {\r\n e.preventDefault();\r\n handleSort(key);\r\n }\r\n };\r\n\r\n const handleRowKeyDown =\r\n (row: T) => (e: KeyboardEvent<HTMLTableRowElement>) => {\r\n if (!onRowClick) return;\r\n if (e.key === \"Enter\" || e.key === \" \") {\r\n e.preventDefault();\r\n onRowClick(row);\r\n }\r\n };\r\n\r\n const captionId = `${testId}-caption`;\r\n\r\n return (\r\n <div\r\n className={combineClassNames(\r\n classMap.wrapper,\r\n shadow && classMap[`shadow${capitalize(shadow)}`],\r\n rounding && classMap[`round${capitalize(rounding)}`],\r\n striped && classMap.striped,\r\n className\r\n )}\r\n data-testid={testId}\r\n >\r\n <table\r\n className={combineClassNames(\r\n classMap.table,\r\n classMap[theme],\r\n classMap[state],\r\n outline && classMap.outline\r\n )}\r\n aria-label={ariaLabel}\r\n aria-describedby={captionId}\r\n >\r\n <caption id={captionId} className={classMap.srOnly ?? \"sr_only\"}>\r\n Sortable data table\r\n </caption>\r\n\r\n <thead>\r\n <tr>\r\n {columns.map((col) => {\r\n const isActive = sortKey === col.key;\r\n return (\r\n <th\r\n key={String(col.key)}\r\n scope=\"col\"\r\n tabIndex={col.sortable ? 0 : undefined}\r\n aria-sort={\r\n col.sortable\r\n ? isActive\r\n ? sortOrder === \"asc\"\r\n ? \"ascending\"\r\n : \"descending\"\r\n : \"none\"\r\n : undefined\r\n }\r\n onClick={() => col.sortable && handleSort(col.key)}\r\n onKeyDown={(e) =>\r\n col.sortable && handleSortKeyDown(e, col.key)\r\n }\r\n className={combineClassNames(\r\n col.sortable && classMap.sortable,\r\n classMap.headerCell\r\n )}\r\n >\r\n <span>{col.label}</span>\r\n {col.sortable && (\r\n <span className={classMap.sortIcon} aria-hidden=\"true\">\r\n {isActive ? (sortOrder === \"asc\" ? \"▲\" : \"▼\") : \"⇅\"}\r\n </span>\r\n )}\r\n </th>\r\n );\r\n })}\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n {sortedData.length === 0 ? (\r\n <tr>\r\n <td\r\n className={classMap.emptyCell}\r\n colSpan={columns.length}\r\n // announce emptiness politely\r\n aria-live=\"polite\"\r\n >\r\n No data available\r\n </td>\r\n </tr>\r\n ) : (\r\n sortedData.map((row, idx) => {\r\n const key = rowKey ? rowKey(row) : idx;\r\n return (\r\n <tr\r\n key={key}\r\n className={combineClassNames(\r\n onRowClick && classMap.clickable,\r\n striped && idx % 2 === 1 && classMap.striped\r\n )}\r\n onClick={() => onRowClick?.(row)}\r\n onKeyDown={handleRowKeyDown(row)}\r\n tabIndex={onRowClick ? 0 : undefined}\r\n >\r\n {columns.map((col) => (\r\n <td\r\n key={String(col.key)}\r\n data-label={col.label}\r\n className={classMap.cell}\r\n >\r\n {col.render\r\n ? col.render(row[col.key], row)\r\n : typeof row[col.key] === \"object\"\r\n ? JSON.stringify(row[col.key])\r\n : String(row[col.key] ?? \"\")}\r\n </td>\r\n ))}\r\n </tr>\r\n );\r\n })\r\n )}\r\n </tbody>\r\n </table>\r\n </div>\r\n );\r\n}\r\nDataTableBase.displayName = \"DataTableBase\";\r\nexport default DataTableBase;\r\n","import \"./DataTable.scss\";\r\nimport DataTableBase from \"../DataTableBase\";\r\nimport { DataTableProps } from \"../DataTable.types\";\r\n\r\nconst classes = {\r\n wrapper: \"data_table_wrapper\",\r\n table: \"data_table\",\r\n headerCell: \"data_table_header_cell\",\r\n sortable: \"data_table_header_sortable\",\r\n sortIcon: \"data_table_sort_icon\",\r\n clickable: \"data_table_row_clickable\",\r\n striped: \"data_table_row_striped\",\r\n cell: \"data_table_cell\",\r\n\r\n primary: \"data_table_primary\",\r\n secondary: \"data_table_secondary\",\r\n tertiary: \"data_table_tertiary\",\r\n quaternary: \"data_table_quaternary\",\r\n\r\n success: \"data_table_success\",\r\n error: \"data_table_error\",\r\n warning: \"data_table_warning\",\r\n\r\n clear: \"data_table_clear\",\r\n\r\n outline: \"data_table_outline\",\r\n\r\n shadowNone: \"data_table_shadow-None\",\r\n shadowLight: \"data_table_shadow-Light\",\r\n shadowMedium: \"data_table_shadow-Medium\",\r\n shadowStrong: \"data_table_shadow-Strong\",\r\n shadowIntense: \"data_table_shadow-Intense\",\r\n\r\n roundNone: \"data_table_round-None\",\r\n roundSmall: \"data_table_round-Small\",\r\n roundMedium: \"data_table_round-Medium\",\r\n roundLarge: \"data_table_round-Large\",\r\n};\r\n\r\nfunction DataTable<T extends object>(props: DataTableProps<T>) {\r\n return <DataTableBase {...props} classMap={classes} />;\r\n}\r\nDataTable.displayName = \"DataTable\";\r\nexport default DataTable;\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DataTable-Dv6Bv-wh.js","sources":["../../src/components/DataTable/DataTableBase.tsx","../../src/components/DataTable/core/DataTable.tsx"],"sourcesContent":["import { useMemo, useState, KeyboardEvent } from \"react\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { DataTableBaseProps } from \"./DataTable.types\";\r\nimport { capitalize } from \"../../utils/capitalize\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"../../config/boreal-style-config\";\r\n\r\nfunction DataTableBase<T extends object>({\r\n columns,\r\n data,\r\n onRowClick,\r\n classMap,\r\n theme = getDefaultTheme(),\r\n rounding = getDefaultRounding(),\r\n shadow = getDefaultShadow(),\r\n state = \"\",\r\n outline = false,\r\n className = \"\",\r\n striped = true,\r\n defaultSortKey,\r\n ariaLabel,\r\n defaultSortOrder = \"asc\",\r\n serverSort = false,\r\n onSortChange,\r\n rowKey,\r\n \"data-testid\": testId = \"data-table\",\r\n}: DataTableBaseProps<T>) {\r\n const [sortKey, setSortKey] = useState<keyof T | undefined>(defaultSortKey);\r\n const [sortOrder, setSortOrder] = useState<\"asc\" | \"desc\">(defaultSortOrder);\r\n\r\n const sortedData = useMemo(() => {\r\n if (serverSort || !sortKey) return data;\r\n\r\n return [...data].sort((a, b) => {\r\n const valA = a[sortKey];\r\n const valB = b[sortKey];\r\n if (valA === valB) return 0;\r\n if (valA == null) return 1;\r\n if (valB == null) return -1;\r\n\r\n const numA = Number(valA);\r\n const numB = Number(valB);\r\n const bothNumeric = !Number.isNaN(numA) && !Number.isNaN(numB);\r\n\r\n if (bothNumeric) {\r\n return sortOrder === \"asc\" ? numA - numB : numB - numA;\r\n }\r\n const cmp = String(valA).localeCompare(String(valB), undefined, {\r\n numeric: true,\r\n });\r\n return sortOrder === \"asc\" ? cmp : -cmp;\r\n });\r\n }, [data, sortKey, sortOrder, serverSort]);\r\n\r\n const handleSort = (key: keyof T) => {\r\n const newOrder = key === sortKey && sortOrder === \"asc\" ? \"desc\" : \"asc\";\r\n setSortKey(key);\r\n setSortOrder(newOrder);\r\n if (serverSort && onSortChange) onSortChange(key, newOrder);\r\n };\r\n\r\n const handleSortKeyDown = (e: KeyboardEvent, key: keyof T) => {\r\n if (e.key === \"Enter\" || e.key === \" \") {\r\n e.preventDefault();\r\n handleSort(key);\r\n }\r\n };\r\n\r\n const handleRowKeyDown =\r\n (row: T) => (e: KeyboardEvent<HTMLTableRowElement>) => {\r\n if (!onRowClick) return;\r\n if (e.key === \"Enter\" || e.key === \" \") {\r\n e.preventDefault();\r\n onRowClick(row);\r\n }\r\n };\r\n\r\n const captionId = `${testId}-caption`;\r\n\r\n return (\r\n <div\r\n className={combineClassNames(\r\n classMap.wrapper,\r\n shadow && classMap[`shadow${capitalize(shadow)}`],\r\n rounding && classMap[`round${capitalize(rounding)}`],\r\n striped && classMap.striped,\r\n className,\r\n )}\r\n data-testid={testId}\r\n >\r\n <table\r\n className={combineClassNames(\r\n classMap.table,\r\n classMap[theme],\r\n classMap[state],\r\n outline && classMap.outline,\r\n )}\r\n aria-label={ariaLabel}\r\n aria-describedby={captionId}\r\n >\r\n <caption id={captionId} className={classMap.srOnly ?? \"sr_only\"}>\r\n Sortable data table\r\n </caption>\r\n\r\n <thead>\r\n <tr>\r\n {columns.map((col) => {\r\n const isActive = sortKey === col.key;\r\n return (\r\n <th\r\n key={String(col.key)}\r\n scope=\"col\"\r\n tabIndex={col.sortable ? 0 : undefined}\r\n aria-sort={\r\n col.sortable\r\n ? isActive\r\n ? sortOrder === \"asc\"\r\n ? \"ascending\"\r\n : \"descending\"\r\n : \"none\"\r\n : undefined\r\n }\r\n onClick={() => col.sortable && handleSort(col.key)}\r\n onKeyDown={(e) =>\r\n col.sortable && handleSortKeyDown(e, col.key)\r\n }\r\n className={combineClassNames(\r\n col.sortable && classMap.sortable,\r\n classMap.headerCell,\r\n )}\r\n >\r\n <span>{col.label}</span>\r\n {col.sortable && (\r\n <span className={classMap.sortIcon} aria-hidden=\"true\">\r\n {isActive ? (sortOrder === \"asc\" ? \"▲\" : \"▼\") : \"⇅\"}\r\n </span>\r\n )}\r\n </th>\r\n );\r\n })}\r\n </tr>\r\n </thead>\r\n\r\n <tbody>\r\n {sortedData.length === 0 ? (\r\n <tr>\r\n <td\r\n className={classMap.emptyCell}\r\n colSpan={columns.length}\r\n aria-live=\"polite\"\r\n >\r\n No data available\r\n </td>\r\n </tr>\r\n ) : (\r\n sortedData.map((row, idx) => {\r\n const key = rowKey ? rowKey(row) : idx;\r\n return (\r\n <tr\r\n key={key}\r\n className={combineClassNames(\r\n onRowClick && classMap.clickable,\r\n striped && idx % 2 === 1 && classMap.striped,\r\n )}\r\n onClick={() => onRowClick?.(row)}\r\n onKeyDown={handleRowKeyDown(row)}\r\n tabIndex={onRowClick ? 0 : undefined}\r\n >\r\n {columns.map((col) => (\r\n <td\r\n key={String(col.key)}\r\n data-label={col.label}\r\n className={classMap.cell}\r\n >\r\n {col.render\r\n ? col.render(row[col.key], row)\r\n : typeof row[col.key] === \"object\"\r\n ? JSON.stringify(row[col.key])\r\n : String(row[col.key] ?? \"\")}\r\n </td>\r\n ))}\r\n </tr>\r\n );\r\n })\r\n )}\r\n </tbody>\r\n </table>\r\n </div>\r\n );\r\n}\r\nDataTableBase.displayName = \"DataTableBase\";\r\nexport default DataTableBase;\r\n","import \"./DataTable.scss\";\r\nimport DataTableBase from \"../DataTableBase\";\r\nimport { DataTableProps } from \"../DataTable.types\";\r\n\r\nconst classes = {\r\n wrapper: \"data_table_wrapper\",\r\n table: \"data_table\",\r\n headerCell: \"data_table_header_cell\",\r\n sortable: \"data_table_header_sortable\",\r\n sortIcon: \"data_table_sort_icon\",\r\n clickable: \"data_table_row_clickable\",\r\n striped: \"data_table_row_striped\",\r\n cell: \"data_table_cell\",\r\n\r\n primary: \"data_table_primary\",\r\n secondary: \"data_table_secondary\",\r\n tertiary: \"data_table_tertiary\",\r\n quaternary: \"data_table_quaternary\",\r\n\r\n success: \"data_table_success\",\r\n error: \"data_table_error\",\r\n warning: \"data_table_warning\",\r\n\r\n clear: \"data_table_clear\",\r\n\r\n outline: \"data_table_outline\",\r\n\r\n shadowNone: \"data_table_shadow-None\",\r\n shadowLight: \"data_table_shadow-Light\",\r\n shadowMedium: \"data_table_shadow-Medium\",\r\n shadowStrong: \"data_table_shadow-Strong\",\r\n shadowIntense: \"data_table_shadow-Intense\",\r\n\r\n roundNone: \"data_table_round-None\",\r\n roundSmall: \"data_table_round-Small\",\r\n roundMedium: \"data_table_round-Medium\",\r\n roundLarge: \"data_table_round-Large\",\r\n};\r\n\r\nfunction DataTable<T extends object>(props: DataTableProps<T>) {\r\n return <DataTableBase {...props} classMap={classes} />;\r\n}\r\nDataTable.displayName = \"DataTable\";\r\nexport default DataTable;\r\n"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ const classNames = require("./classNames-BcWMx052.cjs");
5
5
  const borealStyleConfig = require("./boreal-style-config-Rr5d5Qts.cjs");
6
6
  const capitalize = require("./capitalize-DoV-nOmN.cjs");
7
7
  const IconButton = require("./IconButton-Bio6Azm-.cjs");
8
- const Select = require("./Select-B5Zoc07A.cjs");
8
+ const Select = require("./Select-CeGp-Feb.cjs");
9
9
  const ThemeContext = require("./ThemeContext-D1AV88GN.cjs");
10
10
  const UserThemeSettings = React.forwardRef(
11
11
  ({
@@ -214,4 +214,4 @@ const Footer = (props) => {
214
214
  Footer.displayName = "Footer";
215
215
  exports.Footer = Footer;
216
216
  exports.UserThemeSettings = UserThemeSettings;
217
- //# sourceMappingURL=Footer-CYIUIgV1.cjs.map
217
+ //# sourceMappingURL=Footer-Ch4Cp02K.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"Footer-CYIUIgV1.cjs","sources":["../../src/components/Select/ThemeSelect/core/ThemeSelect.tsx","../../src/components/Footer/FooterBase.tsx","../../src/components/Footer/core/Footer.tsx"],"sourcesContent":["import { useContext, useMemo, forwardRef } from \"react\";\r\nimport Select from \"../../core/Select\";\r\nimport { ThemeContext } from \"../../../../context/ThemeContext\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"@/config/boreal-style-config\";\r\nimport { ThemeSelectProps } from \"../../Select.types\";\r\n\r\nconst UserThemeSettings = forwardRef<HTMLSelectElement, ThemeSelectProps>(\r\n ({\r\n theme = getDefaultTheme(),\r\n shadow = getDefaultShadow(),\r\n rounding = getDefaultRounding(),\r\n \"data-testid\": testId = \"theme-select\",\r\n state = \"\",\r\n }) => {\r\n const ctx = useContext(ThemeContext);\r\n if (!ctx)\r\n throw new Error(\"ThemeContext is undefined. Wrap with ThemeProvider.\");\r\n\r\n const { selectedScheme, setSelectedScheme, schemes } = ctx;\r\n\r\n const options = useMemo(\r\n () =>\r\n schemes.map((scheme, index) => ({\r\n value: String(index),\r\n label: scheme.name,\r\n })),\r\n [schemes]\r\n );\r\n\r\n return (\r\n <div className=\"control-container\">\r\n <Select\r\n theme={theme}\r\n state={state}\r\n shadow={shadow}\r\n rounding={rounding}\r\n options={options}\r\n data-testid={testId}\r\n value={String(selectedScheme)}\r\n ariaLabel=\"Select Theme\"\r\n onChange={(value: string | number) =>\r\n setSelectedScheme(parseInt(String(value), 10))\r\n }\r\n />\r\n </div>\r\n );\r\n }\r\n);\r\nUserThemeSettings.displayName = \"UserThemeSettings\";\r\nexport default UserThemeSettings;\r\n","import React, { useMemo } from \"react\";\r\nimport { BaseFooterProps, LogoSource } from \"./Footer.types\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { getDefaultTheme } from \"../../config/boreal-style-config\";\r\nimport { capitalize } from \"@/utils/capitalize\";\r\n\r\nconst FooterBase: React.FC<BaseFooterProps> = ({\r\n theme = getDefaultTheme(),\r\n attachment = \"static\",\r\n shadow = \"none\",\r\n rounding = \"none\",\r\n className = \"\",\r\n \"data-testid\": testId = \"footer\",\r\n copyright,\r\n links = [],\r\n logo,\r\n socialLinks = [],\r\n showThemeSelect = false,\r\n IconButton,\r\n ImageComponent = \"img\",\r\n ThemeSelect,\r\n classMap,\r\n LinkWrapper = ({ href, children, ...rest }) => (\r\n <a href={href} {...rest}>\r\n {children}\r\n </a>\r\n ),\r\n}) => {\r\n const footerClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.footer,\r\n classMap[theme],\r\n shadow !== \"none\" && classMap[`shadow${capitalize(shadow)}`],\r\n rounding !== \"none\" && classMap[`round${capitalize(rounding)}`],\r\n classMap[`attachment${capitalize(attachment)}`],\r\n className\r\n ),\r\n [classMap, theme, shadow, rounding, attachment, className]\r\n );\r\n\r\n const isLogoImage = (\r\n v: unknown\r\n ): v is { src: string; width?: number; height?: number } =>\r\n typeof v === \"object\" &&\r\n v !== null &&\r\n \"src\" in (v as Record<string, unknown>);\r\n\r\n const isImgLike = typeof logo === \"string\" || isLogoImage(logo);\r\n\r\n const imgLogo = isImgLike\r\n ? typeof logo === \"string\"\r\n ? { src: logo }\r\n : logo\r\n : undefined;\r\n\r\n const logoSrc = imgLogo?.src;\r\n const logoW = imgLogo?.width ?? 20;\r\n const logoH = imgLogo?.height ?? 20;\r\n\r\n return (\r\n <footer className={footerClass} data-testid={testId} role=\"contentinfo\">\r\n <div className={classMap.content}>\r\n <div className={classMap.left} data-testid={`${testId}-left`}>\r\n {isImgLike && logoSrc ? (\r\n typeof ImageComponent === \"string\" ? (\r\n <img\r\n className={classMap.logo}\r\n data-testid={`${testId}-logo`}\r\n loading=\"lazy\"\r\n src={logoSrc}\r\n alt=\"Logo\"\r\n height={logoH}\r\n width={logoW}\r\n />\r\n ) : (\r\n <ImageComponent\r\n className={classMap.logo}\r\n data-testid={`${testId}-logo`}\r\n src={logoSrc}\r\n alt=\"Logo\"\r\n height={logoH}\r\n width={logoW}\r\n />\r\n )\r\n ) : (\r\n <span\r\n className={classMap.logo}\r\n role=\"img\"\r\n aria-label=\"Logo\"\r\n data-testid={`${testId}-logo`}\r\n >\r\n {\r\n logo as Exclude<\r\n LogoSource,\r\n string | { src: string; width?: number; height?: number }\r\n >\r\n }\r\n </span>\r\n )}\r\n\r\n {copyright && (\r\n <div\r\n className={classMap.copyright ?? classMap.left}\r\n data-testid={`${testId}-copyright`}\r\n >\r\n <p>{copyright}</p>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {links.length > 0 && (\r\n <nav\r\n className={classMap.links}\r\n aria-label=\"Footer site links\"\r\n data-testid={`${testId}-nav`}\r\n >\r\n <ul>\r\n {links.map((link, i) => {\r\n const slug = (link.label || link.href || `link-${i}`)\r\n .toLowerCase()\r\n .replace(/\\s+/g, \"-\");\r\n return (\r\n <li key={`${link.href ?? slug}-${i}`}>\r\n <LinkWrapper\r\n href={link.href}\r\n className={classMap.link}\r\n data-testid={`${testId}-link-${slug}`}\r\n >\r\n {link.label}\r\n </LinkWrapper>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </nav>\r\n )}\r\n\r\n {showThemeSelect && (\r\n <div\r\n className={classMap.themeToggle}\r\n data-testid={`${testId}-theme-select`}\r\n >\r\n <ThemeSelect theme=\"clear\" shadow=\"none\" aria-label=\"Theme\" />\r\n </div>\r\n )}\r\n\r\n {socialLinks.length > 0 && (\r\n <nav\r\n className={classMap.social}\r\n aria-label=\"Social media\"\r\n data-testid={`${testId}-social`}\r\n >\r\n {socialLinks.map((social, index) => (\r\n <IconButton\r\n key={`${social.href ?? social.title}-${index}`}\r\n icon={social.icon}\r\n href={social.href}\r\n isExternal\r\n shadow=\"none\"\r\n ariaLabel={social.title}\r\n title={social.title}\r\n theme=\"clear\"\r\n data-testid={`${testId}-social-${social.title.toLowerCase().replace(/\\s+/g, \"-\")}`}\r\n />\r\n ))}\r\n </nav>\r\n )}\r\n </div>\r\n </footer>\r\n );\r\n};\r\n\r\nFooterBase.displayName = \"FooterBase\";\r\nexport default FooterBase;\r\n","import React from \"react\";\r\nimport FooterBase from \"../FooterBase\";\r\nimport { FooterProps } from \"../Footer.types\";\r\nimport IconButton from \"../../IconButton/core/IconButton\";\r\nimport ThemeSelect from \"../../Select/ThemeSelect/core/ThemeSelect\";\r\nimport \"./Footer.scss\";\r\n\r\nconst classes = {\r\n footer: \"footer\",\r\n\r\n primary: \"footer_primary\",\r\n secondary: \"footer_secondary\",\r\n tertiary: \"footer_tertiary\",\r\n quaternary: \"footer_quaternary\",\r\n clear: \"footer_clear\",\r\n\r\n shadowNone: \"footer_shadow-None\",\r\n shadowLight: \"footer_shadow-Light\",\r\n shadowMedium: \"footer_shadow-Medium\",\r\n shadowStrong: \"footer_shadow-Strong\",\r\n shadowIntense: \"footer_shadow-Intense\",\r\n\r\n roundNone: \"footer_round-None\",\r\n roundSmall: \"footer_round-Small\",\r\n roundMedium: \"footer_round-Medium\",\r\n roundLarge: \"footer_round-Large\",\r\n\r\n attachmentStatic: \"footer_attachment-static\",\r\n attachmentFixed: \"footer_attachment-fixed\",\r\n attachmentSticky: \"footer_attachment-sticky\",\r\n\r\n content: \"footer_content\",\r\n logo: \"footer_logo\",\r\n left: \"footer_left\",\r\n links: \"footer_links\",\r\n link: \"footer_link\",\r\n social: \"footer_social\",\r\n\r\n themeToggle: \"footer_theme_toggle\",\r\n};\r\n\r\nconst Footer: React.FC<FooterProps> = (props) => {\r\n return (\r\n <FooterBase\r\n {...props}\r\n IconButton={IconButton}\r\n ThemeSelect={ThemeSelect}\r\n classMap={classes}\r\n />\r\n );\r\n};\r\nFooter.displayName = \"Footer\";\r\nexport default Footer;\r\n"],"names":["forwardRef","getDefaultTheme","getDefaultShadow","getDefaultRounding","useContext","ThemeContext","useMemo","jsx","Select","IconButton","combineClassNames","capitalize","jsxs","ThemeSelect"],"mappings":"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"}
1
+ {"version":3,"file":"Footer-Ch4Cp02K.cjs","sources":["../../src/components/Select/ThemeSelect/core/ThemeSelect.tsx","../../src/components/Footer/FooterBase.tsx","../../src/components/Footer/core/Footer.tsx"],"sourcesContent":["import { useContext, useMemo, forwardRef } from \"react\";\r\nimport Select from \"../../core/Select\";\r\nimport { ThemeContext } from \"../../../../context/ThemeContext\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"@/config/boreal-style-config\";\r\nimport { ThemeSelectProps } from \"../../Select.types\";\r\n\r\nconst UserThemeSettings = forwardRef<HTMLSelectElement, ThemeSelectProps>(\r\n ({\r\n theme = getDefaultTheme(),\r\n shadow = getDefaultShadow(),\r\n rounding = getDefaultRounding(),\r\n \"data-testid\": testId = \"theme-select\",\r\n state = \"\",\r\n }) => {\r\n const ctx = useContext(ThemeContext);\r\n if (!ctx)\r\n throw new Error(\"ThemeContext is undefined. Wrap with ThemeProvider.\");\r\n\r\n const { selectedScheme, setSelectedScheme, schemes } = ctx;\r\n\r\n const options = useMemo(\r\n () =>\r\n schemes.map((scheme, index) => ({\r\n value: String(index),\r\n label: scheme.name,\r\n })),\r\n [schemes]\r\n );\r\n\r\n return (\r\n <div className=\"control-container\">\r\n <Select\r\n theme={theme}\r\n state={state}\r\n shadow={shadow}\r\n rounding={rounding}\r\n options={options}\r\n data-testid={testId}\r\n value={String(selectedScheme)}\r\n ariaLabel=\"Select Theme\"\r\n onChange={(value: string | number) =>\r\n setSelectedScheme(parseInt(String(value), 10))\r\n }\r\n />\r\n </div>\r\n );\r\n }\r\n);\r\nUserThemeSettings.displayName = \"UserThemeSettings\";\r\nexport default UserThemeSettings;\r\n","import React, { useMemo } from \"react\";\r\nimport { BaseFooterProps, LogoSource } from \"./Footer.types\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { getDefaultTheme } from \"../../config/boreal-style-config\";\r\nimport { capitalize } from \"@/utils/capitalize\";\r\n\r\nconst FooterBase: React.FC<BaseFooterProps> = ({\r\n theme = getDefaultTheme(),\r\n attachment = \"static\",\r\n shadow = \"none\",\r\n rounding = \"none\",\r\n className = \"\",\r\n \"data-testid\": testId = \"footer\",\r\n copyright,\r\n links = [],\r\n logo,\r\n socialLinks = [],\r\n showThemeSelect = false,\r\n IconButton,\r\n ImageComponent = \"img\",\r\n ThemeSelect,\r\n classMap,\r\n LinkWrapper = ({ href, children, ...rest }) => (\r\n <a href={href} {...rest}>\r\n {children}\r\n </a>\r\n ),\r\n}) => {\r\n const footerClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.footer,\r\n classMap[theme],\r\n shadow !== \"none\" && classMap[`shadow${capitalize(shadow)}`],\r\n rounding !== \"none\" && classMap[`round${capitalize(rounding)}`],\r\n classMap[`attachment${capitalize(attachment)}`],\r\n className\r\n ),\r\n [classMap, theme, shadow, rounding, attachment, className]\r\n );\r\n\r\n const isLogoImage = (\r\n v: unknown\r\n ): v is { src: string; width?: number; height?: number } =>\r\n typeof v === \"object\" &&\r\n v !== null &&\r\n \"src\" in (v as Record<string, unknown>);\r\n\r\n const isImgLike = typeof logo === \"string\" || isLogoImage(logo);\r\n\r\n const imgLogo = isImgLike\r\n ? typeof logo === \"string\"\r\n ? { src: logo }\r\n : logo\r\n : undefined;\r\n\r\n const logoSrc = imgLogo?.src;\r\n const logoW = imgLogo?.width ?? 20;\r\n const logoH = imgLogo?.height ?? 20;\r\n\r\n return (\r\n <footer className={footerClass} data-testid={testId} role=\"contentinfo\">\r\n <div className={classMap.content}>\r\n <div className={classMap.left} data-testid={`${testId}-left`}>\r\n {isImgLike && logoSrc ? (\r\n typeof ImageComponent === \"string\" ? (\r\n <img\r\n className={classMap.logo}\r\n data-testid={`${testId}-logo`}\r\n loading=\"lazy\"\r\n src={logoSrc}\r\n alt=\"Logo\"\r\n height={logoH}\r\n width={logoW}\r\n />\r\n ) : (\r\n <ImageComponent\r\n className={classMap.logo}\r\n data-testid={`${testId}-logo`}\r\n src={logoSrc}\r\n alt=\"Logo\"\r\n height={logoH}\r\n width={logoW}\r\n />\r\n )\r\n ) : (\r\n <span\r\n className={classMap.logo}\r\n role=\"img\"\r\n aria-label=\"Logo\"\r\n data-testid={`${testId}-logo`}\r\n >\r\n {\r\n logo as Exclude<\r\n LogoSource,\r\n string | { src: string; width?: number; height?: number }\r\n >\r\n }\r\n </span>\r\n )}\r\n\r\n {copyright && (\r\n <div\r\n className={classMap.copyright ?? classMap.left}\r\n data-testid={`${testId}-copyright`}\r\n >\r\n <p>{copyright}</p>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {links.length > 0 && (\r\n <nav\r\n className={classMap.links}\r\n aria-label=\"Footer site links\"\r\n data-testid={`${testId}-nav`}\r\n >\r\n <ul>\r\n {links.map((link, i) => {\r\n const slug = (link.label || link.href || `link-${i}`)\r\n .toLowerCase()\r\n .replace(/\\s+/g, \"-\");\r\n return (\r\n <li key={`${link.href ?? slug}-${i}`}>\r\n <LinkWrapper\r\n href={link.href}\r\n className={classMap.link}\r\n data-testid={`${testId}-link-${slug}`}\r\n >\r\n {link.label}\r\n </LinkWrapper>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </nav>\r\n )}\r\n\r\n {showThemeSelect && (\r\n <div\r\n className={classMap.themeToggle}\r\n data-testid={`${testId}-theme-select`}\r\n >\r\n <ThemeSelect theme=\"clear\" shadow=\"none\" aria-label=\"Theme\" />\r\n </div>\r\n )}\r\n\r\n {socialLinks.length > 0 && (\r\n <nav\r\n className={classMap.social}\r\n aria-label=\"Social media\"\r\n data-testid={`${testId}-social`}\r\n >\r\n {socialLinks.map((social, index) => (\r\n <IconButton\r\n key={`${social.href ?? social.title}-${index}`}\r\n icon={social.icon}\r\n href={social.href}\r\n isExternal\r\n shadow=\"none\"\r\n ariaLabel={social.title}\r\n title={social.title}\r\n theme=\"clear\"\r\n data-testid={`${testId}-social-${social.title.toLowerCase().replace(/\\s+/g, \"-\")}`}\r\n />\r\n ))}\r\n </nav>\r\n )}\r\n </div>\r\n </footer>\r\n );\r\n};\r\n\r\nFooterBase.displayName = \"FooterBase\";\r\nexport default FooterBase;\r\n","import React from \"react\";\r\nimport FooterBase from \"../FooterBase\";\r\nimport { FooterProps } from \"../Footer.types\";\r\nimport IconButton from \"../../IconButton/core/IconButton\";\r\nimport ThemeSelect from \"../../Select/ThemeSelect/core/ThemeSelect\";\r\nimport \"./Footer.scss\";\r\n\r\nconst classes = {\r\n footer: \"footer\",\r\n\r\n primary: \"footer_primary\",\r\n secondary: \"footer_secondary\",\r\n tertiary: \"footer_tertiary\",\r\n quaternary: \"footer_quaternary\",\r\n clear: \"footer_clear\",\r\n\r\n shadowNone: \"footer_shadow-None\",\r\n shadowLight: \"footer_shadow-Light\",\r\n shadowMedium: \"footer_shadow-Medium\",\r\n shadowStrong: \"footer_shadow-Strong\",\r\n shadowIntense: \"footer_shadow-Intense\",\r\n\r\n roundNone: \"footer_round-None\",\r\n roundSmall: \"footer_round-Small\",\r\n roundMedium: \"footer_round-Medium\",\r\n roundLarge: \"footer_round-Large\",\r\n\r\n attachmentStatic: \"footer_attachment-static\",\r\n attachmentFixed: \"footer_attachment-fixed\",\r\n attachmentSticky: \"footer_attachment-sticky\",\r\n\r\n content: \"footer_content\",\r\n logo: \"footer_logo\",\r\n left: \"footer_left\",\r\n links: \"footer_links\",\r\n link: \"footer_link\",\r\n social: \"footer_social\",\r\n\r\n themeToggle: \"footer_theme_toggle\",\r\n};\r\n\r\nconst Footer: React.FC<FooterProps> = (props) => {\r\n return (\r\n <FooterBase\r\n {...props}\r\n IconButton={IconButton}\r\n ThemeSelect={ThemeSelect}\r\n classMap={classes}\r\n />\r\n );\r\n};\r\nFooter.displayName = \"Footer\";\r\nexport default Footer;\r\n"],"names":["forwardRef","getDefaultTheme","getDefaultShadow","getDefaultRounding","useContext","ThemeContext","useMemo","jsx","Select","IconButton","combineClassNames","capitalize","jsxs","ThemeSelect"],"mappings":"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"}
@@ -4,7 +4,7 @@ import { c as combineClassNames } from "./classNames-AS8QjFq7.js";
4
4
  import { a as getDefaultRounding, b as getDefaultShadow, d as getDefaultTheme } from "./boreal-style-config-BILmxkZG.js";
5
5
  import { c as capitalize } from "./capitalize-C0TSQSPh.js";
6
6
  import { I as IconButton } from "./IconButton-BMZhwYXB.js";
7
- import { S as Select } from "./Select-DntK69DL.js";
7
+ import { S as Select } from "./Select-DnCmFsPq.js";
8
8
  import { a as ThemeContext } from "./ThemeContext-DSYDwr2m.js";
9
9
  const UserThemeSettings = forwardRef(
10
10
  ({
@@ -215,4 +215,4 @@ export {
215
215
  Footer as F,
216
216
  UserThemeSettings as U
217
217
  };
218
- //# sourceMappingURL=Footer-D9RimHx9.js.map
218
+ //# sourceMappingURL=Footer-DuwO0Wo3.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Footer-D9RimHx9.js","sources":["../../src/components/Select/ThemeSelect/core/ThemeSelect.tsx","../../src/components/Footer/FooterBase.tsx","../../src/components/Footer/core/Footer.tsx"],"sourcesContent":["import { useContext, useMemo, forwardRef } from \"react\";\r\nimport Select from \"../../core/Select\";\r\nimport { ThemeContext } from \"../../../../context/ThemeContext\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"@/config/boreal-style-config\";\r\nimport { ThemeSelectProps } from \"../../Select.types\";\r\n\r\nconst UserThemeSettings = forwardRef<HTMLSelectElement, ThemeSelectProps>(\r\n ({\r\n theme = getDefaultTheme(),\r\n shadow = getDefaultShadow(),\r\n rounding = getDefaultRounding(),\r\n \"data-testid\": testId = \"theme-select\",\r\n state = \"\",\r\n }) => {\r\n const ctx = useContext(ThemeContext);\r\n if (!ctx)\r\n throw new Error(\"ThemeContext is undefined. Wrap with ThemeProvider.\");\r\n\r\n const { selectedScheme, setSelectedScheme, schemes } = ctx;\r\n\r\n const options = useMemo(\r\n () =>\r\n schemes.map((scheme, index) => ({\r\n value: String(index),\r\n label: scheme.name,\r\n })),\r\n [schemes]\r\n );\r\n\r\n return (\r\n <div className=\"control-container\">\r\n <Select\r\n theme={theme}\r\n state={state}\r\n shadow={shadow}\r\n rounding={rounding}\r\n options={options}\r\n data-testid={testId}\r\n value={String(selectedScheme)}\r\n ariaLabel=\"Select Theme\"\r\n onChange={(value: string | number) =>\r\n setSelectedScheme(parseInt(String(value), 10))\r\n }\r\n />\r\n </div>\r\n );\r\n }\r\n);\r\nUserThemeSettings.displayName = \"UserThemeSettings\";\r\nexport default UserThemeSettings;\r\n","import React, { useMemo } from \"react\";\r\nimport { BaseFooterProps, LogoSource } from \"./Footer.types\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { getDefaultTheme } from \"../../config/boreal-style-config\";\r\nimport { capitalize } from \"@/utils/capitalize\";\r\n\r\nconst FooterBase: React.FC<BaseFooterProps> = ({\r\n theme = getDefaultTheme(),\r\n attachment = \"static\",\r\n shadow = \"none\",\r\n rounding = \"none\",\r\n className = \"\",\r\n \"data-testid\": testId = \"footer\",\r\n copyright,\r\n links = [],\r\n logo,\r\n socialLinks = [],\r\n showThemeSelect = false,\r\n IconButton,\r\n ImageComponent = \"img\",\r\n ThemeSelect,\r\n classMap,\r\n LinkWrapper = ({ href, children, ...rest }) => (\r\n <a href={href} {...rest}>\r\n {children}\r\n </a>\r\n ),\r\n}) => {\r\n const footerClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.footer,\r\n classMap[theme],\r\n shadow !== \"none\" && classMap[`shadow${capitalize(shadow)}`],\r\n rounding !== \"none\" && classMap[`round${capitalize(rounding)}`],\r\n classMap[`attachment${capitalize(attachment)}`],\r\n className\r\n ),\r\n [classMap, theme, shadow, rounding, attachment, className]\r\n );\r\n\r\n const isLogoImage = (\r\n v: unknown\r\n ): v is { src: string; width?: number; height?: number } =>\r\n typeof v === \"object\" &&\r\n v !== null &&\r\n \"src\" in (v as Record<string, unknown>);\r\n\r\n const isImgLike = typeof logo === \"string\" || isLogoImage(logo);\r\n\r\n const imgLogo = isImgLike\r\n ? typeof logo === \"string\"\r\n ? { src: logo }\r\n : logo\r\n : undefined;\r\n\r\n const logoSrc = imgLogo?.src;\r\n const logoW = imgLogo?.width ?? 20;\r\n const logoH = imgLogo?.height ?? 20;\r\n\r\n return (\r\n <footer className={footerClass} data-testid={testId} role=\"contentinfo\">\r\n <div className={classMap.content}>\r\n <div className={classMap.left} data-testid={`${testId}-left`}>\r\n {isImgLike && logoSrc ? (\r\n typeof ImageComponent === \"string\" ? (\r\n <img\r\n className={classMap.logo}\r\n data-testid={`${testId}-logo`}\r\n loading=\"lazy\"\r\n src={logoSrc}\r\n alt=\"Logo\"\r\n height={logoH}\r\n width={logoW}\r\n />\r\n ) : (\r\n <ImageComponent\r\n className={classMap.logo}\r\n data-testid={`${testId}-logo`}\r\n src={logoSrc}\r\n alt=\"Logo\"\r\n height={logoH}\r\n width={logoW}\r\n />\r\n )\r\n ) : (\r\n <span\r\n className={classMap.logo}\r\n role=\"img\"\r\n aria-label=\"Logo\"\r\n data-testid={`${testId}-logo`}\r\n >\r\n {\r\n logo as Exclude<\r\n LogoSource,\r\n string | { src: string; width?: number; height?: number }\r\n >\r\n }\r\n </span>\r\n )}\r\n\r\n {copyright && (\r\n <div\r\n className={classMap.copyright ?? classMap.left}\r\n data-testid={`${testId}-copyright`}\r\n >\r\n <p>{copyright}</p>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {links.length > 0 && (\r\n <nav\r\n className={classMap.links}\r\n aria-label=\"Footer site links\"\r\n data-testid={`${testId}-nav`}\r\n >\r\n <ul>\r\n {links.map((link, i) => {\r\n const slug = (link.label || link.href || `link-${i}`)\r\n .toLowerCase()\r\n .replace(/\\s+/g, \"-\");\r\n return (\r\n <li key={`${link.href ?? slug}-${i}`}>\r\n <LinkWrapper\r\n href={link.href}\r\n className={classMap.link}\r\n data-testid={`${testId}-link-${slug}`}\r\n >\r\n {link.label}\r\n </LinkWrapper>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </nav>\r\n )}\r\n\r\n {showThemeSelect && (\r\n <div\r\n className={classMap.themeToggle}\r\n data-testid={`${testId}-theme-select`}\r\n >\r\n <ThemeSelect theme=\"clear\" shadow=\"none\" aria-label=\"Theme\" />\r\n </div>\r\n )}\r\n\r\n {socialLinks.length > 0 && (\r\n <nav\r\n className={classMap.social}\r\n aria-label=\"Social media\"\r\n data-testid={`${testId}-social`}\r\n >\r\n {socialLinks.map((social, index) => (\r\n <IconButton\r\n key={`${social.href ?? social.title}-${index}`}\r\n icon={social.icon}\r\n href={social.href}\r\n isExternal\r\n shadow=\"none\"\r\n ariaLabel={social.title}\r\n title={social.title}\r\n theme=\"clear\"\r\n data-testid={`${testId}-social-${social.title.toLowerCase().replace(/\\s+/g, \"-\")}`}\r\n />\r\n ))}\r\n </nav>\r\n )}\r\n </div>\r\n </footer>\r\n );\r\n};\r\n\r\nFooterBase.displayName = \"FooterBase\";\r\nexport default FooterBase;\r\n","import React from \"react\";\r\nimport FooterBase from \"../FooterBase\";\r\nimport { FooterProps } from \"../Footer.types\";\r\nimport IconButton from \"../../IconButton/core/IconButton\";\r\nimport ThemeSelect from \"../../Select/ThemeSelect/core/ThemeSelect\";\r\nimport \"./Footer.scss\";\r\n\r\nconst classes = {\r\n footer: \"footer\",\r\n\r\n primary: \"footer_primary\",\r\n secondary: \"footer_secondary\",\r\n tertiary: \"footer_tertiary\",\r\n quaternary: \"footer_quaternary\",\r\n clear: \"footer_clear\",\r\n\r\n shadowNone: \"footer_shadow-None\",\r\n shadowLight: \"footer_shadow-Light\",\r\n shadowMedium: \"footer_shadow-Medium\",\r\n shadowStrong: \"footer_shadow-Strong\",\r\n shadowIntense: \"footer_shadow-Intense\",\r\n\r\n roundNone: \"footer_round-None\",\r\n roundSmall: \"footer_round-Small\",\r\n roundMedium: \"footer_round-Medium\",\r\n roundLarge: \"footer_round-Large\",\r\n\r\n attachmentStatic: \"footer_attachment-static\",\r\n attachmentFixed: \"footer_attachment-fixed\",\r\n attachmentSticky: \"footer_attachment-sticky\",\r\n\r\n content: \"footer_content\",\r\n logo: \"footer_logo\",\r\n left: \"footer_left\",\r\n links: \"footer_links\",\r\n link: \"footer_link\",\r\n social: \"footer_social\",\r\n\r\n themeToggle: \"footer_theme_toggle\",\r\n};\r\n\r\nconst Footer: React.FC<FooterProps> = (props) => {\r\n return (\r\n <FooterBase\r\n {...props}\r\n IconButton={IconButton}\r\n ThemeSelect={ThemeSelect}\r\n classMap={classes}\r\n />\r\n );\r\n};\r\nFooter.displayName = \"Footer\";\r\nexport default Footer;\r\n"],"names":["IconButton","ThemeSelect"],"mappings":"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"}
1
+ {"version":3,"file":"Footer-DuwO0Wo3.js","sources":["../../src/components/Select/ThemeSelect/core/ThemeSelect.tsx","../../src/components/Footer/FooterBase.tsx","../../src/components/Footer/core/Footer.tsx"],"sourcesContent":["import { useContext, useMemo, forwardRef } from \"react\";\r\nimport Select from \"../../core/Select\";\r\nimport { ThemeContext } from \"../../../../context/ThemeContext\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n getDefaultTheme,\r\n} from \"@/config/boreal-style-config\";\r\nimport { ThemeSelectProps } from \"../../Select.types\";\r\n\r\nconst UserThemeSettings = forwardRef<HTMLSelectElement, ThemeSelectProps>(\r\n ({\r\n theme = getDefaultTheme(),\r\n shadow = getDefaultShadow(),\r\n rounding = getDefaultRounding(),\r\n \"data-testid\": testId = \"theme-select\",\r\n state = \"\",\r\n }) => {\r\n const ctx = useContext(ThemeContext);\r\n if (!ctx)\r\n throw new Error(\"ThemeContext is undefined. Wrap with ThemeProvider.\");\r\n\r\n const { selectedScheme, setSelectedScheme, schemes } = ctx;\r\n\r\n const options = useMemo(\r\n () =>\r\n schemes.map((scheme, index) => ({\r\n value: String(index),\r\n label: scheme.name,\r\n })),\r\n [schemes]\r\n );\r\n\r\n return (\r\n <div className=\"control-container\">\r\n <Select\r\n theme={theme}\r\n state={state}\r\n shadow={shadow}\r\n rounding={rounding}\r\n options={options}\r\n data-testid={testId}\r\n value={String(selectedScheme)}\r\n ariaLabel=\"Select Theme\"\r\n onChange={(value: string | number) =>\r\n setSelectedScheme(parseInt(String(value), 10))\r\n }\r\n />\r\n </div>\r\n );\r\n }\r\n);\r\nUserThemeSettings.displayName = \"UserThemeSettings\";\r\nexport default UserThemeSettings;\r\n","import React, { useMemo } from \"react\";\r\nimport { BaseFooterProps, LogoSource } from \"./Footer.types\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { getDefaultTheme } from \"../../config/boreal-style-config\";\r\nimport { capitalize } from \"@/utils/capitalize\";\r\n\r\nconst FooterBase: React.FC<BaseFooterProps> = ({\r\n theme = getDefaultTheme(),\r\n attachment = \"static\",\r\n shadow = \"none\",\r\n rounding = \"none\",\r\n className = \"\",\r\n \"data-testid\": testId = \"footer\",\r\n copyright,\r\n links = [],\r\n logo,\r\n socialLinks = [],\r\n showThemeSelect = false,\r\n IconButton,\r\n ImageComponent = \"img\",\r\n ThemeSelect,\r\n classMap,\r\n LinkWrapper = ({ href, children, ...rest }) => (\r\n <a href={href} {...rest}>\r\n {children}\r\n </a>\r\n ),\r\n}) => {\r\n const footerClass = useMemo(\r\n () =>\r\n combineClassNames(\r\n classMap.footer,\r\n classMap[theme],\r\n shadow !== \"none\" && classMap[`shadow${capitalize(shadow)}`],\r\n rounding !== \"none\" && classMap[`round${capitalize(rounding)}`],\r\n classMap[`attachment${capitalize(attachment)}`],\r\n className\r\n ),\r\n [classMap, theme, shadow, rounding, attachment, className]\r\n );\r\n\r\n const isLogoImage = (\r\n v: unknown\r\n ): v is { src: string; width?: number; height?: number } =>\r\n typeof v === \"object\" &&\r\n v !== null &&\r\n \"src\" in (v as Record<string, unknown>);\r\n\r\n const isImgLike = typeof logo === \"string\" || isLogoImage(logo);\r\n\r\n const imgLogo = isImgLike\r\n ? typeof logo === \"string\"\r\n ? { src: logo }\r\n : logo\r\n : undefined;\r\n\r\n const logoSrc = imgLogo?.src;\r\n const logoW = imgLogo?.width ?? 20;\r\n const logoH = imgLogo?.height ?? 20;\r\n\r\n return (\r\n <footer className={footerClass} data-testid={testId} role=\"contentinfo\">\r\n <div className={classMap.content}>\r\n <div className={classMap.left} data-testid={`${testId}-left`}>\r\n {isImgLike && logoSrc ? (\r\n typeof ImageComponent === \"string\" ? (\r\n <img\r\n className={classMap.logo}\r\n data-testid={`${testId}-logo`}\r\n loading=\"lazy\"\r\n src={logoSrc}\r\n alt=\"Logo\"\r\n height={logoH}\r\n width={logoW}\r\n />\r\n ) : (\r\n <ImageComponent\r\n className={classMap.logo}\r\n data-testid={`${testId}-logo`}\r\n src={logoSrc}\r\n alt=\"Logo\"\r\n height={logoH}\r\n width={logoW}\r\n />\r\n )\r\n ) : (\r\n <span\r\n className={classMap.logo}\r\n role=\"img\"\r\n aria-label=\"Logo\"\r\n data-testid={`${testId}-logo`}\r\n >\r\n {\r\n logo as Exclude<\r\n LogoSource,\r\n string | { src: string; width?: number; height?: number }\r\n >\r\n }\r\n </span>\r\n )}\r\n\r\n {copyright && (\r\n <div\r\n className={classMap.copyright ?? classMap.left}\r\n data-testid={`${testId}-copyright`}\r\n >\r\n <p>{copyright}</p>\r\n </div>\r\n )}\r\n </div>\r\n\r\n {links.length > 0 && (\r\n <nav\r\n className={classMap.links}\r\n aria-label=\"Footer site links\"\r\n data-testid={`${testId}-nav`}\r\n >\r\n <ul>\r\n {links.map((link, i) => {\r\n const slug = (link.label || link.href || `link-${i}`)\r\n .toLowerCase()\r\n .replace(/\\s+/g, \"-\");\r\n return (\r\n <li key={`${link.href ?? slug}-${i}`}>\r\n <LinkWrapper\r\n href={link.href}\r\n className={classMap.link}\r\n data-testid={`${testId}-link-${slug}`}\r\n >\r\n {link.label}\r\n </LinkWrapper>\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </nav>\r\n )}\r\n\r\n {showThemeSelect && (\r\n <div\r\n className={classMap.themeToggle}\r\n data-testid={`${testId}-theme-select`}\r\n >\r\n <ThemeSelect theme=\"clear\" shadow=\"none\" aria-label=\"Theme\" />\r\n </div>\r\n )}\r\n\r\n {socialLinks.length > 0 && (\r\n <nav\r\n className={classMap.social}\r\n aria-label=\"Social media\"\r\n data-testid={`${testId}-social`}\r\n >\r\n {socialLinks.map((social, index) => (\r\n <IconButton\r\n key={`${social.href ?? social.title}-${index}`}\r\n icon={social.icon}\r\n href={social.href}\r\n isExternal\r\n shadow=\"none\"\r\n ariaLabel={social.title}\r\n title={social.title}\r\n theme=\"clear\"\r\n data-testid={`${testId}-social-${social.title.toLowerCase().replace(/\\s+/g, \"-\")}`}\r\n />\r\n ))}\r\n </nav>\r\n )}\r\n </div>\r\n </footer>\r\n );\r\n};\r\n\r\nFooterBase.displayName = \"FooterBase\";\r\nexport default FooterBase;\r\n","import React from \"react\";\r\nimport FooterBase from \"../FooterBase\";\r\nimport { FooterProps } from \"../Footer.types\";\r\nimport IconButton from \"../../IconButton/core/IconButton\";\r\nimport ThemeSelect from \"../../Select/ThemeSelect/core/ThemeSelect\";\r\nimport \"./Footer.scss\";\r\n\r\nconst classes = {\r\n footer: \"footer\",\r\n\r\n primary: \"footer_primary\",\r\n secondary: \"footer_secondary\",\r\n tertiary: \"footer_tertiary\",\r\n quaternary: \"footer_quaternary\",\r\n clear: \"footer_clear\",\r\n\r\n shadowNone: \"footer_shadow-None\",\r\n shadowLight: \"footer_shadow-Light\",\r\n shadowMedium: \"footer_shadow-Medium\",\r\n shadowStrong: \"footer_shadow-Strong\",\r\n shadowIntense: \"footer_shadow-Intense\",\r\n\r\n roundNone: \"footer_round-None\",\r\n roundSmall: \"footer_round-Small\",\r\n roundMedium: \"footer_round-Medium\",\r\n roundLarge: \"footer_round-Large\",\r\n\r\n attachmentStatic: \"footer_attachment-static\",\r\n attachmentFixed: \"footer_attachment-fixed\",\r\n attachmentSticky: \"footer_attachment-sticky\",\r\n\r\n content: \"footer_content\",\r\n logo: \"footer_logo\",\r\n left: \"footer_left\",\r\n links: \"footer_links\",\r\n link: \"footer_link\",\r\n social: \"footer_social\",\r\n\r\n themeToggle: \"footer_theme_toggle\",\r\n};\r\n\r\nconst Footer: React.FC<FooterProps> = (props) => {\r\n return (\r\n <FooterBase\r\n {...props}\r\n IconButton={IconButton}\r\n ThemeSelect={ThemeSelect}\r\n classMap={classes}\r\n />\r\n );\r\n};\r\nFooter.displayName = \"Footer\";\r\nexport default Footer;\r\n"],"names":["IconButton","ThemeSelect"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
1
  "use strict";
2
- const Footer = require("./Footer-CYIUIgV1.cjs");
2
+ const Footer = require("./Footer-Ch4Cp02K.cjs");
3
3
  module.exports = Footer.Footer;
4
4
  //# sourceMappingURL=Footer.cjs.js.map
@@ -1,4 +1,4 @@
1
- import { F } from "./Footer-D9RimHx9.js";
1
+ import { F } from "./Footer-DuwO0Wo3.js";
2
2
  export {
3
3
  F as default
4
4
  };
@@ -10,6 +10,7 @@ const Button = require("./Button-zvElXSem.cjs");
10
10
  const IconButton = require("./IconButton-Bio6Azm-.cjs");
11
11
  const BaseMessagePopup = ({
12
12
  message,
13
+ title,
13
14
  onClose,
14
15
  onConfirm,
15
16
  onCancel,
@@ -33,6 +34,8 @@ const BaseMessagePopup = ({
33
34
  const openerRef = React.useRef(null);
34
35
  const focusablesRef = React.useRef([]);
35
36
  const messageId = React.useId();
37
+ const titleId = React.useId();
38
+ const labelledById = title ? titleId : messageId;
36
39
  React.useEffect(() => {
37
40
  setIsMounted(true);
38
41
  openerRef.current = document.activeElement ?? null;
@@ -111,13 +114,38 @@ const BaseMessagePopup = ({
111
114
  onClick: (e) => e.stopPropagation(),
112
115
  role: "dialog",
113
116
  "aria-modal": "true",
114
- "aria-labelledby": messageId,
117
+ "aria-labelledby": labelledById,
115
118
  tabIndex: -1,
116
119
  ref: dialogRef,
117
120
  onKeyDown: handleKeyDown,
118
121
  "data-testid": `${testId}-dialog`,
119
122
  children: [
120
- /* @__PURE__ */ jsxRuntime.jsx(
123
+ title && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: classMap.header, "data-testid": `${testId}-header`, children: [
124
+ /* @__PURE__ */ jsxRuntime.jsx(
125
+ "h2",
126
+ {
127
+ id: titleId,
128
+ className: classMap.title,
129
+ "data-testid": `${testId}-title`,
130
+ children: title
131
+ }
132
+ ),
133
+ /* @__PURE__ */ jsxRuntime.jsx(
134
+ IconButton2,
135
+ {
136
+ ref: closeBtnRef,
137
+ className: classMap.close,
138
+ onClick: onClose,
139
+ "aria-label": "Close popup",
140
+ icon: CloseIcon.CloseIcon,
141
+ state: "error",
142
+ size: "small",
143
+ type: "button",
144
+ "data-testid": `${testId}-close`
145
+ }
146
+ )
147
+ ] }),
148
+ !title && /* @__PURE__ */ jsxRuntime.jsx(
121
149
  IconButton2,
122
150
  {
123
151
  ref: closeBtnRef,
@@ -131,41 +159,43 @@ const BaseMessagePopup = ({
131
159
  "data-testid": `${testId}-close`
132
160
  }
133
161
  ),
134
- /* @__PURE__ */ jsxRuntime.jsx(
135
- "h2",
136
- {
137
- id: messageId,
138
- className: classMap.message,
139
- "data-testid": `${testId}-message`,
140
- children: message
141
- }
142
- ),
143
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: classMap.actions, "data-testid": `${testId}-actions`, children: [
144
- onConfirm && /* @__PURE__ */ jsxRuntime.jsx(
145
- Button2,
162
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: classMap.body, "data-testid": `${testId}-body`, children: [
163
+ /* @__PURE__ */ jsxRuntime.jsx(
164
+ "p",
146
165
  {
147
- className: classMap.confirm,
148
- state: "success",
149
- onClick: onConfirm,
150
- ref: firstButtonRef,
151
- rounding: controlsRounding,
152
- type: "button",
153
- "data-testid": `${testId}-confirm`,
154
- children: confirmText
166
+ id: messageId,
167
+ className: classMap.message,
168
+ "data-testid": `${testId}-message`,
169
+ children: message
155
170
  }
156
171
  ),
157
- onCancel && /* @__PURE__ */ jsxRuntime.jsx(
158
- Button2,
159
- {
160
- ref: cancelButtonRef,
161
- className: classMap.cancel,
162
- state: "warning",
163
- onClick: onCancel,
164
- type: "button",
165
- "data-testid": `${testId}-cancel`,
166
- children: cancelText
167
- }
168
- )
172
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: classMap.actions, "data-testid": `${testId}-actions`, children: [
173
+ onConfirm && /* @__PURE__ */ jsxRuntime.jsx(
174
+ Button2,
175
+ {
176
+ className: classMap.confirm,
177
+ state: "success",
178
+ onClick: onConfirm,
179
+ ref: firstButtonRef,
180
+ rounding: controlsRounding,
181
+ type: "button",
182
+ "data-testid": `${testId}-confirm`,
183
+ children: confirmText
184
+ }
185
+ ),
186
+ onCancel && /* @__PURE__ */ jsxRuntime.jsx(
187
+ Button2,
188
+ {
189
+ ref: cancelButtonRef,
190
+ className: classMap.cancel,
191
+ state: "warning",
192
+ onClick: onCancel,
193
+ type: "button",
194
+ "data-testid": `${testId}-cancel`,
195
+ children: cancelText
196
+ }
197
+ )
198
+ ] })
169
199
  ] })
170
200
  ]
171
201
  }
@@ -181,6 +211,9 @@ const classes = {
181
211
  content: "messagePopup_popup_content",
182
212
  close: "messagePopup_close_button",
183
213
  message: "messagePopup_popupMessage",
214
+ header: "messagePopup_header",
215
+ title: "messagePopup_title",
216
+ body: "messagePopup_body",
184
217
  actions: "messagePopup_popupActions",
185
218
  confirm: "messagePopup_confirmBtn",
186
219
  cancel: "messagePopup_cancelBtn",
@@ -207,4 +240,4 @@ const MessagePopup = (props) => {
207
240
  };
208
241
  MessagePopup.displayName = "MessagePopup";
209
242
  exports.MessagePopup = MessagePopup;
210
- //# sourceMappingURL=MessagePopup-DQQKRCGF.cjs.map
243
+ //# sourceMappingURL=MessagePopup-BwKMX9NS.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessagePopup-BwKMX9NS.cjs","sources":["../../src/components/MessagePopup/MessagePopupBase.tsx","../../src/components/MessagePopup/core/MessagePopup.tsx"],"sourcesContent":["import React, {\r\n useEffect,\r\n useRef,\r\n useState,\r\n useId,\r\n KeyboardEvent,\r\n} from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport { CloseIcon } from \"../../Icons\";\r\nimport { BaseMessagePopupProps } from \"./MessagePopup.types\";\r\nimport { combineClassNames } from \"../../utils/classNames\";\r\nimport { capitalize } from \"../../utils/capitalize\";\r\nimport {\r\n getDefaultRounding,\r\n getDefaultShadow,\r\n} from \"../../config/boreal-style-config\";\r\n\r\nconst BaseMessagePopup: React.FC<BaseMessagePopupProps> = ({\r\n message,\r\n title,\r\n onClose,\r\n onConfirm,\r\n onCancel,\r\n controlsRounding = getDefaultRounding(),\r\n rounding = getDefaultRounding(),\r\n shadow = getDefaultShadow(),\r\n confirmText = \"Confirm\",\r\n cancelText = \"Cancel\",\r\n className = \"\",\r\n \"data-testid\": testId = \"message-popup\",\r\n Button,\r\n IconButton,\r\n classMap,\r\n}) => {\r\n const [isMounted, setIsMounted] = useState(false);\r\n const [portalElement, setPortalElement] = useState<HTMLElement | null>(null);\r\n const dialogRef = useRef<HTMLDivElement>(null);\r\n const firstButtonRef = useRef<HTMLButtonElement>(null);\r\n const cancelButtonRef = useRef<HTMLButtonElement>(null);\r\n const closeBtnRef = useRef<HTMLButtonElement>(null);\r\n const openerRef = useRef<HTMLElement | null>(null);\r\n const focusablesRef = useRef<HTMLElement[]>([]);\r\n const messageId = useId();\r\n const titleId = useId();\r\n const labelledById = title ? titleId : messageId;\r\n\r\n useEffect(() => {\r\n setIsMounted(true);\r\n openerRef.current = (document.activeElement as HTMLElement) ?? null;\r\n\r\n let portal = document.getElementById(\"popup-portal\");\r\n if (!portal) {\r\n portal = document.createElement(\"div\");\r\n portal.id = \"popup-portal\";\r\n document.body.appendChild(portal);\r\n }\r\n setPortalElement(portal);\r\n document.body.classList.add(\"no-scroll\");\r\n\r\n const roots = Array.from(document.body.children);\r\n const restored: Array<HTMLElement> = [];\r\n roots.forEach((el) => {\r\n if (el !== portal && !el.hasAttribute(\"aria-hidden\")) {\r\n el.setAttribute(\"aria-hidden\", \"true\");\r\n restored.push(el as HTMLElement);\r\n }\r\n });\r\n\r\n const handleEscape = (e: globalThis.KeyboardEvent) => {\r\n if (e.key === \"Escape\") onClose();\r\n };\r\n document.addEventListener(\"keydown\", handleEscape);\r\n\r\n return () => {\r\n document.body.classList.remove(\"no-scroll\");\r\n document.removeEventListener(\"keydown\", handleEscape);\r\n restored.forEach((el) => el.removeAttribute(\"aria-hidden\"));\r\n openerRef.current?.focus?.();\r\n };\r\n }, [onClose]);\r\n\r\n useEffect(() => {\r\n if (!dialogRef.current) return;\r\n focusablesRef.current = Array.from(\r\n dialogRef.current.querySelectorAll<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\r\n ),\r\n ).filter((el) => !el.hasAttribute(\"disabled\") && el.tabIndex !== -1);\r\n\r\n const target =\r\n firstButtonRef.current ||\r\n cancelButtonRef.current ||\r\n (closeBtnRef.current as HTMLElement | null) ||\r\n focusablesRef.current[0];\r\n target?.focus?.();\r\n }, [isMounted]);\r\n\r\n const handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\r\n if (e.key !== \"Tab\") return;\r\n const list = focusablesRef.current;\r\n if (!list.length) return;\r\n\r\n const first = list[0];\r\n const last = list[list.length - 1];\r\n\r\n if (e.shiftKey && document.activeElement === first) {\r\n e.preventDefault();\r\n last.focus();\r\n } else if (!e.shiftKey && document.activeElement === last) {\r\n e.preventDefault();\r\n first.focus();\r\n }\r\n };\r\n\r\n if (!isMounted || !portalElement) return null;\r\n\r\n const wrapperClass = combineClassNames(\r\n classMap.wrapper,\r\n shadow && classMap[`shadow${capitalize(shadow)}`],\r\n rounding && classMap[`round${capitalize(rounding)}`],\r\n className,\r\n );\r\n\r\n return ReactDOM.createPortal(\r\n <div\r\n className={wrapperClass}\r\n onClick={onClose}\r\n role=\"presentation\"\r\n data-testid={testId}\r\n >\r\n <div\r\n className={classMap.content}\r\n onClick={(e) => e.stopPropagation()}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-labelledby={labelledById}\r\n tabIndex={-1}\r\n ref={dialogRef}\r\n onKeyDown={handleKeyDown}\r\n data-testid={`${testId}-dialog`}\r\n >\r\n {title && (\r\n <div className={classMap.header} data-testid={`${testId}-header`}>\r\n <h2\r\n id={titleId}\r\n className={classMap.title}\r\n data-testid={`${testId}-title`}\r\n >\r\n {title}\r\n </h2>\r\n\r\n <IconButton\r\n ref={closeBtnRef}\r\n className={classMap.close}\r\n onClick={onClose}\r\n aria-label=\"Close popup\"\r\n icon={CloseIcon}\r\n state=\"error\"\r\n size=\"small\"\r\n type=\"button\"\r\n data-testid={`${testId}-close`}\r\n />\r\n </div>\r\n )}\r\n {!title && (\r\n <IconButton\r\n ref={closeBtnRef}\r\n className={classMap.close}\r\n onClick={onClose}\r\n aria-label=\"Close popup\"\r\n icon={CloseIcon}\r\n state=\"error\"\r\n size=\"small\"\r\n type=\"button\"\r\n data-testid={`${testId}-close`}\r\n />\r\n )}\r\n\r\n <div className={classMap.body} data-testid={`${testId}-body`}>\r\n <p\r\n id={messageId}\r\n className={classMap.message}\r\n data-testid={`${testId}-message`}\r\n >\r\n {message}\r\n </p>\r\n\r\n <div className={classMap.actions} data-testid={`${testId}-actions`}>\r\n {onConfirm && (\r\n <Button\r\n className={classMap.confirm}\r\n state=\"success\"\r\n onClick={onConfirm}\r\n ref={firstButtonRef}\r\n rounding={controlsRounding}\r\n type=\"button\"\r\n data-testid={`${testId}-confirm`}\r\n >\r\n {confirmText}\r\n </Button>\r\n )}\r\n {onCancel && (\r\n <Button\r\n ref={cancelButtonRef}\r\n className={classMap.cancel}\r\n state=\"warning\"\r\n onClick={onCancel}\r\n type=\"button\"\r\n data-testid={`${testId}-cancel`}\r\n >\r\n {cancelText}\r\n </Button>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </div>,\r\n portalElement,\r\n );\r\n};\r\n\r\nBaseMessagePopup.displayName = \"BaseMessagePopup\";\r\nexport default BaseMessagePopup;\r\n","import React from \"react\";\r\nimport BaseMessagePopup from \"../MessagePopupBase\";\r\nimport Button from \"../../Button/core/Button\";\r\nimport IconButton from \"../../IconButton/core/IconButton\";\r\nimport \"./MessagePopup.scss\";\r\nimport { MessagePopupProps } from \"../MessagePopup.types\";\r\n\r\nconst classes = {\r\n wrapper: \"messagePopup\",\r\n content: \"messagePopup_popup_content\",\r\n close: \"messagePopup_close_button\",\r\n message: \"messagePopup_popupMessage\",\r\n header: \"messagePopup_header\",\r\n title: \"messagePopup_title\",\r\n body: \"messagePopup_body\",\r\n actions: \"messagePopup_popupActions\",\r\n confirm: \"messagePopup_confirmBtn\",\r\n cancel: \"messagePopup_cancelBtn\",\r\n\r\n shadowNone: \"messagePopup_shadow-None\",\r\n shadowLight: \"messagePopup_shadow-Light\",\r\n shadowMedium: \"messagePopup_shadow-Medium\",\r\n shadowStrong: \"messagePopup_shadow-Strong\",\r\n shadowIntense: \"messagePopup_shadow-Intense\",\r\n\r\n roundNone: \"messagePopup_round-None\",\r\n roundSmall: \"messagePopup_round-Small\",\r\n roundMedium: \"messagePopup_round-Medium\",\r\n roundLarge: \"messagePopup_round-Large\",\r\n};\r\n\r\nconst MessagePopup: React.FC<MessagePopupProps> = (props) => {\r\n return (\r\n <BaseMessagePopup\r\n {...props}\r\n Button={Button}\r\n IconButton={IconButton}\r\n classMap={classes}\r\n />\r\n );\r\n};\r\nMessagePopup.displayName = \"MessagePopup\";\r\nexport default MessagePopup;\r\n"],"names":["getDefaultRounding","getDefaultShadow","Button","IconButton","useState","useRef","useId","useEffect","combineClassNames","capitalize","jsx","jsxs","CloseIcon"],"mappings":"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"}