@atom-learning/components 6.14.4 → 6.16.0-beta.0
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.
- package/dist/components/accordion/Accordion.js +2 -2
- package/dist/components/accordion/Accordion.js.map +1 -1
- package/dist/components/action-icon/ActionIcon.d.ts +1 -0
- package/dist/components/action-icon/ActionIcon.js +4 -2
- package/dist/components/action-icon/ActionIcon.js.map +1 -1
- package/dist/components/avatar/Avatar.js +2 -3
- package/dist/components/avatar/Avatar.js.map +1 -1
- package/dist/components/banner/banner-regular/BannerRegular.d.ts +1 -0
- package/dist/components/banner/banner-regular/BannerRegularActions.js +2 -2
- package/dist/components/banner/banner-regular/BannerRegularActions.js.map +1 -1
- package/dist/components/banner/banner-regular/BannerRegularDismiss.d.ts +2 -1
- package/dist/components/banner/banner-slim/BannerSlim.d.ts +1 -0
- package/dist/components/banner/banner-slim/BannerSlimButton.js +2 -2
- package/dist/components/banner/banner-slim/BannerSlimButton.js.map +1 -1
- package/dist/components/banner/banner-slim/BannerSlimContainer.js +2 -3
- package/dist/components/banner/banner-slim/BannerSlimContainer.js.map +1 -1
- package/dist/components/banner/banner-slim/BannerSlimDismiss.d.ts +2 -1
- package/dist/components/button/Button.d.ts +1 -0
- package/dist/components/button/Button.js +17 -13
- package/dist/components/button/Button.js.map +1 -1
- package/dist/components/calendar/Calendar.js +2 -3
- package/dist/components/calendar/Calendar.js.map +1 -1
- package/dist/components/carousel/CarouselSlider.js +2 -2
- package/dist/components/carousel/CarouselSlider.js.map +1 -1
- package/dist/components/data-table/DataTableGlobalFilter.js +2 -2
- package/dist/components/data-table/DataTableGlobalFilter.js.map +1 -1
- package/dist/components/data-table/DataTableHead.js +3 -3
- package/dist/components/data-table/DataTableHead.js.map +1 -1
- package/dist/components/data-table/DataTableHeaderCell.js +2 -3
- package/dist/components/data-table/DataTableHeaderCell.js.map +1 -1
- package/dist/components/data-table/DataTableRow.js +2 -3
- package/dist/components/data-table/DataTableRow.js.map +1 -1
- package/dist/components/data-table/DataTableTable.js +3 -4
- package/dist/components/data-table/DataTableTable.js.map +1 -1
- package/dist/components/data-table/drag-and-drop/DragAndDropTable.js +2 -2
- package/dist/components/data-table/drag-and-drop/DragAndDropTable.js.map +1 -1
- package/dist/components/dialog/DialogHeading.js +2 -2
- package/dist/components/dialog/DialogHeading.js.map +1 -1
- package/dist/components/dropdown-menu/DropdownMenu.d.ts +2 -1
- package/dist/components/dropdown-menu/DropdownMenuLinkItem.d.ts +2 -1
- package/dist/components/dropdown-menu/DropdownMenuLinkItem.js +13 -8
- package/dist/components/dropdown-menu/DropdownMenuLinkItem.js.map +1 -1
- package/dist/components/field-wrapper/FieldDescription.js +2 -2
- package/dist/components/field-wrapper/FieldDescription.js.map +1 -1
- package/dist/components/field-wrapper/FieldWrapper.js +2 -2
- package/dist/components/field-wrapper/FieldWrapper.js.map +1 -1
- package/dist/components/field-wrapper/InlineFieldWrapper.js +2 -2
- package/dist/components/field-wrapper/InlineFieldWrapper.js.map +1 -1
- package/dist/components/grid/Grid.js +2 -3
- package/dist/components/grid/Grid.js.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/link/Link.d.ts +1 -0
- package/dist/components/link/Link.js +13 -9
- package/dist/components/link/Link.js.map +1 -1
- package/dist/components/loader/Loader.js +2 -3
- package/dist/components/loader/Loader.js.map +1 -1
- package/dist/components/markdown-content/components/MarkdownList.js +2 -2
- package/dist/components/markdown-content/components/MarkdownList.js.map +1 -1
- package/dist/components/markdown-content/components/MarkdownThematicBreak.js +2 -2
- package/dist/components/markdown-content/components/MarkdownThematicBreak.js.map +1 -1
- package/dist/components/navigation/NavigationMenu.js +3 -4
- package/dist/components/navigation/NavigationMenu.js.map +1 -1
- package/dist/components/navigation/NavigationMenuDropdownTrigger.js +2 -3
- package/dist/components/navigation/NavigationMenuDropdownTrigger.js.map +1 -1
- package/dist/components/navigation-menu-vertical/NavigationMenuVertical.d.ts +3 -1
- package/dist/components/navigation-menu-vertical/NavigationMenuVerticalItem.js +2 -2
- package/dist/components/navigation-menu-vertical/NavigationMenuVerticalItem.js.map +1 -1
- package/dist/components/navigation-menu-vertical/NavigationMenuVerticalItemContent.js +2 -2
- package/dist/components/navigation-menu-vertical/NavigationMenuVerticalItemContent.js.map +1 -1
- package/dist/components/navigation-menu-vertical/NavigationMenuVerticalLink.d.ts +4 -2
- package/dist/components/navigation-menu-vertical/NavigationMenuVerticalLink.js +5 -3
- package/dist/components/navigation-menu-vertical/NavigationMenuVerticalLink.js.map +1 -1
- package/dist/components/number-input/NumberInput.js +4 -5
- package/dist/components/number-input/NumberInput.js.map +1 -1
- package/dist/components/number-input/NumberInputStepper.d.ts +2 -1
- package/dist/components/pagination/Pagination.js +2 -2
- package/dist/components/pagination/Pagination.js.map +1 -1
- package/dist/components/pagination/PaginationNextButton.d.ts +2 -1
- package/dist/components/pagination/PaginationPreviousButton.d.ts +2 -1
- package/dist/components/password-field/PasswordField.js +2 -2
- package/dist/components/password-field/PasswordField.js.map +1 -1
- package/dist/components/password-input/PasswordInput.js +3 -3
- package/dist/components/password-input/PasswordInput.js.map +1 -1
- package/dist/components/radio-card/RadioCardGroup.js +2 -2
- package/dist/components/radio-card/RadioCardGroup.js.map +1 -1
- package/dist/components/router-provider/RouterProvider.d.ts +17 -0
- package/dist/components/router-provider/RouterProvider.js +15 -0
- package/dist/components/router-provider/RouterProvider.js.map +1 -0
- package/dist/components/search-input/SearchInput.js +4 -5
- package/dist/components/search-input/SearchInput.js.map +1 -1
- package/dist/components/section-message/SectionMessageDescription.js +2 -2
- package/dist/components/section-message/SectionMessageDescription.js.map +1 -1
- package/dist/components/section-message/SectionMessageDismiss.js +2 -2
- package/dist/components/section-message/SectionMessageDismiss.js.map +1 -1
- package/dist/components/section-message/SectionMessageIcon.js +2 -2
- package/dist/components/section-message/SectionMessageIcon.js.map +1 -1
- package/dist/components/section-message/SectionMessageLayout.js +2 -3
- package/dist/components/section-message/SectionMessageLayout.js.map +1 -1
- package/dist/components/segmented-control/SegmentedControlBadge.js +2 -2
- package/dist/components/segmented-control/SegmentedControlBadge.js.map +1 -1
- package/dist/components/side-bar/SideBar.js +2 -3
- package/dist/components/side-bar/SideBar.js.map +1 -1
- package/dist/components/skeleton-loader/SkeletonBarChart.js +2 -2
- package/dist/components/skeleton-loader/SkeletonBarChart.js.map +1 -1
- package/dist/components/skeleton-loader/SkeletonButton.js +2 -2
- package/dist/components/skeleton-loader/SkeletonButton.js.map +1 -1
- package/dist/components/skeleton-loader/SkeletonCard.js +2 -2
- package/dist/components/skeleton-loader/SkeletonCard.js.map +1 -1
- package/dist/components/skeleton-loader/SkeletonColumnChart.js +2 -2
- package/dist/components/skeleton-loader/SkeletonColumnChart.js.map +1 -1
- package/dist/components/skeleton-loader/SkeletonDoughnutChart.js +2 -2
- package/dist/components/skeleton-loader/SkeletonDoughnutChart.js.map +1 -1
- package/dist/components/skeleton-loader/SkeletonHeading.js +2 -2
- package/dist/components/skeleton-loader/SkeletonHeading.js.map +1 -1
- package/dist/components/skeleton-loader/SkeletonPanelList.js +2 -2
- package/dist/components/skeleton-loader/SkeletonPanelList.js.map +1 -1
- package/dist/components/skeleton-loader/SkeletonSubjectList.js +2 -2
- package/dist/components/skeleton-loader/SkeletonSubjectList.js.map +1 -1
- package/dist/components/skeleton-loader/SkeletonTable.js +2 -2
- package/dist/components/skeleton-loader/SkeletonTable.js.map +1 -1
- package/dist/components/skeleton-loader/SkeletonTabs.js +3 -3
- package/dist/components/skeleton-loader/SkeletonTabs.js.map +1 -1
- package/dist/components/sortable/Handle.d.ts +2 -1
- package/dist/components/sortable/SortableItem.js +2 -2
- package/dist/components/sortable/SortableItem.js.map +1 -1
- package/dist/components/stepper/Stepper.js +2 -2
- package/dist/components/stepper/Stepper.js.map +1 -1
- package/dist/components/table/Table.js +2 -3
- package/dist/components/table/Table.js.map +1 -1
- package/dist/components/table/TableStickyColumnsContainer.js +2 -2
- package/dist/components/table/TableStickyColumnsContainer.js.map +1 -1
- package/dist/components/tile-toggle-group/TileToggleGroupRoot.js +2 -2
- package/dist/components/tile-toggle-group/TileToggleGroupRoot.js.map +1 -1
- package/dist/components/toast/ToastCloseButton.js +2 -2
- package/dist/components/toast/ToastCloseButton.js.map +1 -1
- package/dist/components/toggle-group/ToggleGroupRoot.js +2 -3
- package/dist/components/toggle-group/ToggleGroupRoot.js.map +1 -1
- package/dist/components/top-bar/TopBar.d.ts +2 -1
- package/dist/components/top-bar/TopBarBrand.js +2 -3
- package/dist/components/top-bar/TopBarBrand.js.map +1 -1
- package/dist/components/tree/TreeCollapsibleContent.js +2 -2
- package/dist/components/tree/TreeCollapsibleContent.js.map +1 -1
- package/dist/components/tree/TreeCollapsibleTrigger.js +2 -3
- package/dist/components/tree/TreeCollapsibleTrigger.js.map +1 -1
- package/dist/components/tree/TreeIcon.js +2 -2
- package/dist/components/tree/TreeIcon.js.map +1 -1
- package/dist/components/tree/TreeListItem.js +2 -2
- package/dist/components/tree/TreeListItem.js.map +1 -1
- package/dist/components/tree/TreeText.js +2 -2
- package/dist/components/tree/TreeText.js.map +1 -1
- package/dist/docgen.json +1 -1
- package/dist/index.cjs.js +134 -108
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.js +3 -2
- package/dist/styled.d.ts +2 -0
- package/dist/styled.js +5 -4
- package/dist/styled.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTableHead.js","names":[],"sources":["../../../src/components/data-table/DataTableHead.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"DataTableHead.js","names":[],"sources":["../../../src/components/data-table/DataTableHead.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { cn } from '~/styled'\n\nimport { Table } from '../table/Table'\nimport { useDataTable } from './DataTableContext'\nimport { DataTableHeaderCell } from './DataTableHeaderCell'\nimport { DataTableSelectAllRowsCheckbox } from './DataTableSelectAllRowsCheckbox'\n\ntype DataTableHeadProps = Omit<\n React.ComponentProps<typeof Table.Header>,\n 'children'\n> & {\n sortable?: boolean\n isSticky?: boolean\n stickyOffset?: number\n showTotalInFirstColumn?: boolean\n totalSuffix?: string\n}\n\nexport const DataTableHead = ({\n sortable = true,\n theme = 'light',\n isSticky = false,\n stickyOffset = 0,\n showTotalInFirstColumn,\n totalSuffix,\n style,\n className,\n ...props\n}: DataTableHeadProps): React.ReactElement => {\n const {\n getHeaderGroups,\n setIsSortable,\n enableRowSelection,\n getCanSomeRowsExpand,\n tablePosition,\n setTablePosition\n } = useDataTable()\n\n React.useEffect(() => {\n setIsSortable(sortable)\n }, [sortable, setIsSortable])\n\n const tableHeaderRowRef = React.useRef<HTMLTableRowElement>(null)\n const tableRef = React.useRef<HTMLTableElement | null>(null)\n const headerOffsetRef = React.useRef(0)\n\n const [headerOffset, setHeaderOffset] = React.useState<number>(0)\n const [headerHide, setHeaderHide] = React.useState<boolean>(false)\n\n const tableHeadElement = tableHeaderRowRef?.current?.closest('thead')\n\n if (tableHeadElement && tablePosition?.offsetTop === null) {\n const tableHeadHeight = tableHeadElement.getBoundingClientRect().height\n const intersectionOffset = stickyOffset + tableHeadHeight\n if (tablePosition) {\n setTablePosition({ ...tablePosition, offsetTop: intersectionOffset || 0 })\n }\n }\n\n React.useEffect(() => {\n if (!isSticky) return\n\n if (!tableRef.current && tableHeaderRowRef.current) {\n tableRef.current = tableHeaderRowRef.current.closest(\n 'table'\n ) as HTMLTableElement | null\n }\n\n if (tableRef.current) {\n if (tablePosition?.top !== null && tablePosition?.bottom !== null) {\n const newOffset =\n tablePosition?.top != null &&\n tablePosition?.bottom != null &&\n tablePosition.top < stickyOffset &&\n tablePosition.bottom > 100\n ? -tablePosition.top + stickyOffset\n : 0\n\n if (newOffset !== 0) setHeaderHide(true)\n\n headerOffsetRef.current = newOffset\n setHeaderOffset(newOffset)\n\n requestAnimationFrame(() => {\n setHeaderHide(false)\n })\n }\n }\n }, [isSticky, stickyOffset, tablePosition])\n\n return (\n <Table.Header\n theme={theme}\n style={{\n ...style,\n '--header-offset': `${headerOffset}px`\n }}\n {...props}\n className={cn(\n 'relative',\n 'z-3',\n '[&_tr:not(:last-child)>th]:border-b-none',\n '[&_tr:not(:first-child)>th]:rounded-none!',\n className\n )}\n >\n {getHeaderGroups().map((headerGroup) => {\n return (\n <Table.Row\n key={headerGroup.id}\n ref={tableHeaderRowRef}\n className={\n isSticky && headerOffset !== 0\n ? cn(\n 'translate-y-(--header-offset)',\n headerHide\n ? 'delay-0ms opacity-0 transition-none'\n : 'delay-150ms opacity-100 transition-opacity duration-100',\n '[&_th]:last:before:absolute',\n '[&_th]:last:before:bottom-0',\n '[&_th]:last:before:pointer-events-none',\n '[&_th]:last:before:right-0',\n '[&_th]:last:before:shadow-sm',\n '[&_th]:last:before:top-0',\n '[&_th]:last:before:w-full'\n )\n : undefined\n }\n >\n {getCanSomeRowsExpand() && <Table.HeaderCell className=\"w-10\" />}\n {enableRowSelection && (\n <Table.HeaderCell className=\"w-10\">\n <DataTableSelectAllRowsCheckbox />\n </Table.HeaderCell>\n )}\n {headerGroup.headers.map((header, index) => (\n <DataTableHeaderCell\n header={header}\n key={header.id}\n includeTotal={index === 0 && showTotalInFirstColumn}\n totalSuffix={totalSuffix}\n />\n ))}\n </Table.Row>\n )\n })}\n </Table.Header>\n )\n}\n"],"mappings":";;;;;;;AAoBA,IAAa,iBAAiB,EAC5B,WAAW,MACX,QAAQ,SACR,WAAW,OACX,eAAe,GACf,wBACA,aACA,OACA,WACA,GAAG,YACyC;CAC5C,MAAM,EACJ,iBACA,eACA,oBACA,sBACA,eACA,qBACE,cAAc;AAElB,SAAM,gBAAgB;AACpB,gBAAc,SAAS;IACtB,CAAC,UAAU,cAAc,CAAC;CAE7B,MAAM,oBAAoB,QAAM,OAA4B,KAAK;CACjE,MAAM,WAAW,QAAM,OAAgC,KAAK;CAC5D,MAAM,kBAAkB,QAAM,OAAO,EAAE;CAEvC,MAAM,CAAC,cAAc,mBAAmB,QAAM,SAAiB,EAAE;CACjE,MAAM,CAAC,YAAY,iBAAiB,QAAM,SAAkB,MAAM;CAElE,MAAM,mBAAmB,mBAAmB,SAAS,QAAQ,QAAQ;AAErE,KAAI,oBAAoB,eAAe,cAAc,MAAM;EAEzD,MAAM,qBAAqB,eADH,iBAAiB,uBAAuB,CAAC;AAEjE,MAAI,cACF,kBAAiB;GAAE,GAAG;GAAe,WAAW,sBAAsB;GAAG,CAAC;;AAI9E,SAAM,gBAAgB;AACpB,MAAI,CAAC,SAAU;AAEf,MAAI,CAAC,SAAS,WAAW,kBAAkB,QACzC,UAAS,UAAU,kBAAkB,QAAQ,QAC3C,QACD;AAGH,MAAI,SAAS;OACP,eAAe,QAAQ,QAAQ,eAAe,WAAW,MAAM;IACjE,MAAM,YACJ,eAAe,OAAO,QACtB,eAAe,UAAU,QACzB,cAAc,MAAM,gBACpB,cAAc,SAAS,MACnB,CAAC,cAAc,MAAM,eACrB;AAEN,QAAI,cAAc,EAAG,eAAc,KAAK;AAExC,oBAAgB,UAAU;AAC1B,oBAAgB,UAAU;AAE1B,gCAA4B;AAC1B,mBAAc,MAAM;MACpB;;;IAGL;EAAC;EAAU;EAAc;EAAc,CAAC;AAE3C,QACE,wBAAA,cAAC,MAAM,QAAP;EACS;EACP,OAAO;GACL,GAAG;GACH,mBAAmB,GAAG,aAAa;GACpC;EACD,GAAI;EACJ,WAAW,GACT,YACA,OACA,4CACA,6CACA,UACD;EA0CY,EAxCZ,iBAAiB,CAAC,KAAK,gBAAgB;AACtC,SACE,wBAAA,cAAC,MAAM,KAAP;GACE,KAAK,YAAY;GACjB,KAAK;GACL,WACE,YAAY,iBAAiB,IACzB,GACE,iCACA,aACI,wCACA,2DACJ,+BACA,+BACA,0CACA,8BACA,gCACA,4BACA,4BACD,GACD,KAAA;GAiBI,EAdT,sBAAsB,IAAI,wBAAA,cAAC,MAAM,YAAP,EAAkB,WAAU,QAAS,CAAA,EAC/D,sBACC,wBAAA,cAAC,MAAM,YAAP,EAAkB,WAAU,QAET,EADjB,wBAAA,cAAC,gCAAA,KAAiC,CACjB,EAEpB,YAAY,QAAQ,KAAK,QAAQ,UAChC,wBAAA,cAAC,qBAAD;GACU;GACR,KAAK,OAAO;GACZ,cAAc,UAAU,KAAK;GAChB;GACb,CAAA,CACF,CACQ;GAEd,CACW"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { styled } from "../../styled.js";
|
|
1
|
+
import { cn, styled } from "../../styled.js";
|
|
2
2
|
import { Icon } from "../icon/Icon.js";
|
|
3
3
|
import { Text } from "../text/Text.js";
|
|
4
4
|
import { Table } from "../table/Table.js";
|
|
5
5
|
import { useDataTable } from "./DataTableContext.js";
|
|
6
|
-
import clsx from "clsx";
|
|
7
6
|
import * as React$1 from "react";
|
|
8
7
|
import { ArrowDown, ArrowUp } from "@atom-learning/icons";
|
|
9
8
|
import { flexRender } from "@tanstack/react-table";
|
|
@@ -62,7 +61,7 @@ var DataTableHeaderCell = ({ header, includeTotal = false, totalSuffix = "items"
|
|
|
62
61
|
...hoverProps,
|
|
63
62
|
className,
|
|
64
63
|
...props
|
|
65
|
-
}, /* @__PURE__ */ React$1.createElement("div", { className:
|
|
64
|
+
}, /* @__PURE__ */ React$1.createElement("div", { className: cn("flex", "gap-1", "items-center", header.colSpan > 1 ? "justify-center" : "justify-start") }, flexRender(header.column.columnDef.header, header.getContext()), sortDirection && isSortableTable && /* @__PURE__ */ React$1.createElement("div", { className: cn("flex", "items-center", "relative", "size-6", "ml-2", isHovered ? "bg-primary-200" : "bg-primary-100", "rounded-sm") }, /* @__PURE__ */ React$1.createElement(SortIcon, { direction: sortDirection })), includeTotal && /* @__PURE__ */ React$1.createElement(StyledCount, {
|
|
66
65
|
size: "sm",
|
|
67
66
|
weight: "normal"
|
|
68
67
|
}, "(", totalRows, " ", totalSuffix, ")")));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTableHeaderCell.js","names":[],"sources":["../../../src/components/data-table/DataTableHeaderCell.tsx"],"sourcesContent":["import { ArrowDown, ArrowUp } from '@atom-learning/icons'\nimport type { Header } from '@tanstack/react-table'\nimport { flexRender } from '@tanstack/react-table'\nimport
|
|
1
|
+
{"version":3,"file":"DataTableHeaderCell.js","names":[],"sources":["../../../src/components/data-table/DataTableHeaderCell.tsx"],"sourcesContent":["import { ArrowDown, ArrowUp } from '@atom-learning/icons'\nimport type { Header } from '@tanstack/react-table'\nimport { flexRender } from '@tanstack/react-table'\nimport * as React from 'react'\nimport { useHover } from 'react-aria'\n\nimport { styled } from '~/styled'\nimport { cn } from '~/styled'\n\nimport { Icon } from '../icon/Icon'\nimport { Table } from '../table/Table'\nimport { Text } from '../text/Text'\nimport { useDataTable } from './DataTableContext'\n\ntype DataTableHeaderProps = React.ComponentProps<typeof Table.HeaderCell> & {\n header: Header<Record<string, unknown>, unknown>\n includeTotal?: boolean\n totalSuffix?: string\n}\n\nconst StyledCount = styled(Text, {\n base: ['text-grey-600', 'whitespace-nowrap', 'hidden', 'min-[800px]:block']\n})\n\nconst StyledTableHeaderCell = styled(Table.HeaderCell, {\n base: [],\n variants: {\n isSortable: {\n true: [\n '*:relative',\n 'before:absolute',\n 'before:bg-primary-100',\n 'before:duration-200',\n 'before:ease-in',\n 'before:inset-0',\n 'before:opacity-0',\n 'before:transition-opacity',\n 'cursor-pointer',\n 'hover:before:opacity-50',\n 'relative'\n ]\n }\n }\n})\n\nconst sortIcons = {\n asc: ArrowUp,\n desc: ArrowDown\n}\n\nconst SortIcon = ({ direction }: { direction: 'asc' | 'desc' }) => (\n <Icon\n is={sortIcons[direction]}\n size=\"sm\"\n className=\"stroke-primary-900 absolute left-1\"\n />\n)\n\nexport const DataTableHeaderCell = ({\n header,\n includeTotal = false,\n totalSuffix = 'items',\n children,\n className,\n ...props\n}: DataTableHeaderProps) => {\n const sortDirection = header.column.getIsSorted()\n const { isSortable: isSortableTable, getRowModel } = useDataTable()\n // false for display columns, e.g. \"Actions\"\n const isDataColumn = header.column.getCanSort()\n\n const totalRows = getRowModel()?.rows?.length\n\n const { hoverProps, isHovered } = useHover({})\n\n const handleKeyDown = (\n event: React.KeyboardEvent<HTMLTableCellElement>,\n callback: (event: unknown) => void | undefined\n ) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault()\n callback(event as unknown)\n }\n }\n\n const headerSortingHandler = header.column.getToggleSortingHandler()\n\n return (\n <StyledTableHeaderCell\n isSortable={isSortableTable && isDataColumn}\n colSpan={header.colSpan}\n onClick={\n isSortableTable && isDataColumn && headerSortingHandler\n ? headerSortingHandler\n : undefined\n }\n onKeyDown={(event) =>\n isSortableTable &&\n isDataColumn &&\n headerSortingHandler &&\n handleKeyDown(event, headerSortingHandler)\n }\n tabIndex={isSortableTable && isDataColumn ? 0 : -1}\n {...hoverProps}\n className={className}\n {...props}\n >\n <div\n className={cn(\n 'flex',\n 'gap-1',\n 'items-center',\n header.colSpan > 1 ? 'justify-center' : 'justify-start'\n )}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n {sortDirection && isSortableTable && (\n <div\n className={cn(\n 'flex',\n 'items-center',\n 'relative',\n 'size-6',\n 'ml-2',\n isHovered ? 'bg-primary-200' : 'bg-primary-100',\n 'rounded-sm'\n )}\n >\n <SortIcon direction={sortDirection} />\n </div>\n )}\n {includeTotal && (\n <StyledCount size=\"sm\" weight=\"normal\">\n ({totalRows} {totalSuffix})\n </StyledCount>\n )}\n </div>\n </StyledTableHeaderCell>\n )\n}\n"],"mappings":";;;;;;;;;;AAoBA,IAAM,cAAc,OAAO,MAAM,EAC/B,MAAM;CAAC;CAAiB;CAAqB;CAAU;CAAoB,EAC5E,CAAC;AAEF,IAAM,wBAAwB,OAAO,MAAM,YAAY;CACrD,MAAM,EAAE;CACR,UAAU,EACR,YAAY,EACV,MAAM;EACJ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,EACF,EACF;CACF,CAAC;AAEF,IAAM,YAAY;CAChB,KAAK;CACL,MAAM;CACP;AAED,IAAM,YAAY,EAAE,gBAClB,wBAAA,cAAC,MAAD;CACE,IAAI,UAAU;CACd,MAAK;CACL,WAAU;CACV,CAAA;AAGJ,IAAa,uBAAuB,EAClC,QACA,eAAe,OACf,cAAc,SACd,UACA,WACA,GAAG,YACuB;CAC1B,MAAM,gBAAgB,OAAO,OAAO,aAAa;CACjD,MAAM,EAAE,YAAY,iBAAiB,gBAAgB,cAAc;CAEnE,MAAM,eAAe,OAAO,OAAO,YAAY;CAE/C,MAAM,YAAY,aAAa,EAAE,MAAM;CAEvC,MAAM,EAAE,YAAY,cAAc,SAAS,EAAE,CAAC;CAE9C,MAAM,iBACJ,OACA,aACG;AACH,MAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;AAC9C,SAAM,gBAAgB;AACtB,YAAS,MAAiB;;;CAI9B,MAAM,uBAAuB,OAAO,OAAO,yBAAyB;AAEpE,QACE,wBAAA,cAAC,uBAAD;EACE,YAAY,mBAAmB;EAC/B,SAAS,OAAO;EAChB,SACE,mBAAmB,gBAAgB,uBAC/B,uBACA,KAAA;EAEN,YAAY,UACV,mBACA,gBACA,wBACA,cAAc,OAAO,qBAAqB;EAE5C,UAAU,mBAAmB,eAAe,IAAI;EAChD,GAAI;EACO;EACX,GAAI;EAgCkB,EA9BtB,wBAAA,cAAC,OAAD,EACE,WAAW,GACT,QACA,SACA,gBACA,OAAO,UAAU,IAAI,mBAAmB,gBACzC,EAuBG,EArBH,WAAW,OAAO,OAAO,UAAU,QAAQ,OAAO,YAAY,CAAC,EAC/D,iBAAiB,mBAChB,wBAAA,cAAC,OAAD,EACE,WAAW,GACT,QACA,gBACA,YACA,UACA,QACA,YAAY,mBAAmB,kBAC/B,aACD,EAGG,EADJ,wBAAA,cAAC,UAAD,EAAU,WAAW,eAAiB,CAAA,CAClC,EAEP,gBACC,wBAAA,cAAC,aAAD;EAAa,MAAK;EAAK,QAAO;EAEhB,EAFyB,KACnC,WAAU,KAAE,aAAY,IACd,CAEZ,CACgB"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { styled } from "../../styled.js";
|
|
1
|
+
import { cn, styled } from "../../styled.js";
|
|
2
2
|
import { Icon } from "../icon/Icon.js";
|
|
3
3
|
import { Table } from "../table/Table.js";
|
|
4
4
|
import { useDataTable } from "./DataTableContext.js";
|
|
5
5
|
import { DataTableDataCell } from "./DataTableDataCell.js";
|
|
6
6
|
import { DataTableRowSelectionCheckbox } from "./DataTableRowSelectionCheckbox.js";
|
|
7
|
-
import clsx from "clsx";
|
|
8
7
|
import * as React$1 from "react";
|
|
9
8
|
import { ChevronDown, ChevronRight } from "@atom-learning/icons";
|
|
10
9
|
//#region src/components/data-table/DataTableRow.tsx
|
|
@@ -80,7 +79,7 @@ var DataTableRow = ({ row, rowAction }) => {
|
|
|
80
79
|
}, getCanSomeRowsExpand() && /* @__PURE__ */ React$1.createElement(Table.Cell, {
|
|
81
80
|
"data-testid": `expand-icon-${row.id}`,
|
|
82
81
|
onClick: toggleExpandHandler,
|
|
83
|
-
className:
|
|
82
|
+
className: cn("w-10", row.getCanExpand() ? "cursor-pointer" : "cursor-auto")
|
|
84
83
|
}, row.getCanExpand() && /* @__PURE__ */ React$1.createElement(Icon, { is: row.getIsExpanded() ? ChevronDown : ChevronRight })), enableRowSelection && /* @__PURE__ */ React$1.createElement(Table.Cell, { className: "w-10" }, /* @__PURE__ */ React$1.createElement(DataTableRowSelectionCheckbox, {
|
|
85
84
|
row,
|
|
86
85
|
checked: getCheckedState(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTableRow.js","names":[],"sources":["../../../src/components/data-table/DataTableRow.tsx"],"sourcesContent":["import { ChevronDown, ChevronRight } from '@atom-learning/icons'\nimport type { Row } from '@tanstack/react-table'\nimport
|
|
1
|
+
{"version":3,"file":"DataTableRow.js","names":[],"sources":["../../../src/components/data-table/DataTableRow.tsx"],"sourcesContent":["import { ChevronDown, ChevronRight } from '@atom-learning/icons'\nimport type { Row } from '@tanstack/react-table'\nimport * as React from 'react'\n\nimport { styled } from '~/styled'\nimport { cn } from '~/styled'\n\nimport { Icon } from '../icon/Icon'\nimport { Table } from '../table/Table'\nimport { useDataTable } from './DataTableContext'\nimport { DataTableDataCell } from './DataTableDataCell'\nimport { DataTableRowSelectionCheckbox } from './DataTableRowSelectionCheckbox'\n\nexport type DataTableRowProps = React.ComponentProps<typeof Table.Row> & {\n row: Row<Record<string, unknown>>\n rowAction?: (row: Record<string, unknown>, event: React.MouseEvent) => void\n}\n\nconst StyledRow = styled(Table.Row, {\n base: ['bg-[initial]', 'relative'],\n variants: {\n isSelected: {\n true: ['bg-primary-100!']\n },\n isDisabled: {\n true: ['opacity-30']\n },\n isFocusable: {\n true: [\n 'translate-y-0',\n 'duration-200',\n 'ease-out',\n 'transition-shadow',\n 'transition-transform',\n 'hover:shadow-[0px_4px_11px_0px_hsla(0,0%,12%,0.12)]',\n 'hover:-translate-y-px',\n 'hover:z-3',\n 'focus:outline-2',\n 'focus:outline-primary-500',\n 'focus:outline-solid',\n 'focus:-outline-offset-4',\n 'focus:[&_td]:bg-transparent'\n ]\n }\n }\n})\n\nconst isElementInteractive = (element: Element | null): boolean => {\n if (!element) return false\n if (element.closest('button, a, input, select, textarea')) return true\n if (element.getAttribute('role') === 'button') return true\n return false\n}\n\nexport const DataTableRow = ({ row, rowAction }: DataTableRowProps) => {\n const { enableRowSelection, disabledRows, getCanSomeRowsExpand } =\n useDataTable()\n\n const isDisabled = !!disabledRows?.[row.id]\n\n const toggleExpandHandler = row.getToggleExpandedHandler()\n const toggleSelectHandler = row.getToggleSelectedHandler()\n\n const getCheckedState = (): boolean | 'indeterminate' => {\n if (row.getIsSomeSelected()) return 'indeterminate'\n return row.getIsSelected()\n }\n\n const handleRowClick = (\n rowData: Row<Record<string, unknown>>,\n event: React.MouseEvent<HTMLTableRowElement>\n ) => {\n if (!rowAction) return\n\n // Skip if clicking on an interactive element\n const rowElement = (event.target as Element).closest('tr')\n if (!rowElement || isElementInteractive(event.target as Element)) {\n return\n }\n\n rowAction(rowData.original, event)\n }\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLTableRowElement>) => {\n if (event.key === 'Enter' || event.key === ' ') {\n if (isElementInteractive(event.target as Element)) {\n return\n }\n event.preventDefault()\n handleRowClick(\n row,\n event as unknown as React.MouseEvent<HTMLTableRowElement>\n )\n }\n if (event.key === 'ArrowDown') {\n event.preventDefault()\n const currentRow = (event.target as HTMLElement).closest('tr')\n const nextRow = currentRow?.nextElementSibling as HTMLElement\n if (nextRow && nextRow.tagName === 'TR') {\n nextRow.focus()\n }\n }\n if (event.key === 'ArrowUp') {\n event.preventDefault()\n const currentRow = (event.target as HTMLElement).closest('tr')\n const previousRow = currentRow?.previousElementSibling as HTMLElement\n if (previousRow && previousRow.tagName === 'TR') {\n previousRow.focus()\n }\n }\n }\n\n return (\n <StyledRow\n isSelected={row.getIsSelected()}\n isDisabled={isDisabled}\n isFocusable={!!rowAction && !isDisabled}\n {...(rowAction && {\n onClick: (event) => handleRowClick(row, event),\n tabIndex: 0,\n className: 'cursor-pointer',\n onKeyDown: handleKeyDown\n })}\n >\n {getCanSomeRowsExpand() && (\n <Table.Cell\n data-testid={`expand-icon-${row.id}`}\n onClick={toggleExpandHandler}\n className={cn(\n 'w-10',\n row.getCanExpand() ? 'cursor-pointer' : 'cursor-auto'\n )}\n >\n {row.getCanExpand() && (\n <Icon is={row.getIsExpanded() ? ChevronDown : ChevronRight} />\n )}\n </Table.Cell>\n )}\n\n {enableRowSelection && (\n <Table.Cell className=\"w-10\">\n <DataTableRowSelectionCheckbox\n row={row}\n checked={getCheckedState()}\n onCheckedChange={toggleSelectHandler}\n />\n </Table.Cell>\n )}\n {row.getVisibleCells().map((cell) => {\n return <DataTableDataCell key={cell.id} cell={cell} />\n })}\n </StyledRow>\n )\n}\n"],"mappings":";;;;;;;;;AAkBA,IAAM,YAAY,OAAO,MAAM,KAAK;CAClC,MAAM,CAAC,gBAAgB,WAAW;CAClC,UAAU;EACR,YAAY,EACV,MAAM,CAAC,kBAAkB,EAC1B;EACD,YAAY,EACV,MAAM,CAAC,aAAa,EACrB;EACD,aAAa,EACX,MAAM;GACJ;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACD,EACF;EACF;CACF,CAAC;AAEF,IAAM,wBAAwB,YAAqC;AACjE,KAAI,CAAC,QAAS,QAAO;AACrB,KAAI,QAAQ,QAAQ,qCAAqC,CAAE,QAAO;AAClE,KAAI,QAAQ,aAAa,OAAO,KAAK,SAAU,QAAO;AACtD,QAAO;;AAGT,IAAa,gBAAgB,EAAE,KAAK,gBAAmC;CACrE,MAAM,EAAE,oBAAoB,cAAc,yBACxC,cAAc;CAEhB,MAAM,aAAa,CAAC,CAAC,eAAe,IAAI;CAExC,MAAM,sBAAsB,IAAI,0BAA0B;CAC1D,MAAM,sBAAsB,IAAI,0BAA0B;CAE1D,MAAM,wBAAmD;AACvD,MAAI,IAAI,mBAAmB,CAAE,QAAO;AACpC,SAAO,IAAI,eAAe;;CAG5B,MAAM,kBACJ,SACA,UACG;AACH,MAAI,CAAC,UAAW;AAIhB,MAAI,CADgB,MAAM,OAAmB,QAAQ,KAAK,IACvC,qBAAqB,MAAM,OAAkB,CAC9D;AAGF,YAAU,QAAQ,UAAU,MAAM;;CAGpC,MAAM,iBAAiB,UAAoD;AACzE,MAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;AAC9C,OAAI,qBAAqB,MAAM,OAAkB,CAC/C;AAEF,SAAM,gBAAgB;AACtB,kBACE,KACA,MACD;;AAEH,MAAI,MAAM,QAAQ,aAAa;AAC7B,SAAM,gBAAgB;GAEtB,MAAM,UADc,MAAM,OAAuB,QAAQ,KAAK,EAClC;AAC5B,OAAI,WAAW,QAAQ,YAAY,KACjC,SAAQ,OAAO;;AAGnB,MAAI,MAAM,QAAQ,WAAW;AAC3B,SAAM,gBAAgB;GAEtB,MAAM,cADc,MAAM,OAAuB,QAAQ,KAAK,EAC9B;AAChC,OAAI,eAAe,YAAY,YAAY,KACzC,aAAY,OAAO;;;AAKzB,QACE,wBAAA,cAAC,WAAD;EACE,YAAY,IAAI,eAAe;EACnB;EACZ,aAAa,CAAC,CAAC,aAAa,CAAC;EAC7B,GAAK,aAAa;GAChB,UAAU,UAAU,eAAe,KAAK,MAAM;GAC9C,UAAU;GACV,WAAW;GACX,WAAW;GACZ;EA6BS,EA3BT,sBAAsB,IACrB,wBAAA,cAAC,MAAM,MAAP;EACE,eAAa,eAAe,IAAI;EAChC,SAAS;EACT,WAAW,GACT,QACA,IAAI,cAAc,GAAG,mBAAmB,cACzC;EAKU,EAHV,IAAI,cAAc,IACjB,wBAAA,cAAC,MAAD,EAAM,IAAI,IAAI,eAAe,GAAG,cAAc,cAAgB,CAAA,CAErD,EAGd,sBACC,wBAAA,cAAC,MAAM,MAAP,EAAY,WAAU,QAMT,EALX,wBAAA,cAAC,+BAAD;EACO;EACL,SAAS,iBAAiB;EAC1B,iBAAiB;EACjB,CAAA,CACS,EAEd,IAAI,iBAAiB,CAAC,KAAK,SAAS;AACnC,SAAO,wBAAA,cAAC,mBAAD;GAAmB,KAAK,KAAK;GAAU;GAAQ,CAAA;GACtD,CACQ"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { styled } from "../../styled.js";
|
|
1
|
+
import { cn, styled } from "../../styled.js";
|
|
2
2
|
import { Table } from "../table/Table.js";
|
|
3
3
|
import { AsyncDataState } from "./DataTable.types.js";
|
|
4
4
|
import { useDataTable } from "./DataTableContext.js";
|
|
5
5
|
import { DataTableBody } from "./DataTableBody.js";
|
|
6
6
|
import { DataTableHead } from "./DataTableHead.js";
|
|
7
7
|
import { DataTableLoading } from "./DataTableLoading.js";
|
|
8
|
-
import clsx from "clsx";
|
|
9
8
|
import * as React$1 from "react";
|
|
10
9
|
//#region src/components/data-table/DataTableTable.tsx
|
|
11
10
|
var TableContainer = styled("div", { base: [
|
|
@@ -95,7 +94,7 @@ var DataTableTable = ({ sortable, striped, theme = "white", className, scrollOpt
|
|
|
95
94
|
numberOfStickyColumns: scrollOptions.numberOfStickyColumns,
|
|
96
95
|
scrollContainerCls: scrollOptions.scrollContainerCls,
|
|
97
96
|
scrollContainerkey: buildScrollContainerKey(),
|
|
98
|
-
className:
|
|
97
|
+
className: cn(className, isPending && [
|
|
99
98
|
"opacity-50",
|
|
100
99
|
"pointer-events-none",
|
|
101
100
|
"transition-opacity",
|
|
@@ -115,7 +114,7 @@ var DataTableTable = ({ sortable, striped, theme = "white", className, scrollOpt
|
|
|
115
114
|
striped,
|
|
116
115
|
rowAction
|
|
117
116
|
}));
|
|
118
|
-
return /* @__PURE__ */ React$1.createElement(React$1.Fragment, null, /* @__PURE__ */ React$1.createElement(DataTableLoading, null), withContainer ? /* @__PURE__ */ React$1.createElement(TableContainer, { className:
|
|
117
|
+
return /* @__PURE__ */ React$1.createElement(React$1.Fragment, null, /* @__PURE__ */ React$1.createElement(DataTableLoading, null), withContainer ? /* @__PURE__ */ React$1.createElement(TableContainer, { className: cn(scrollOptions.numberOfStickyColumns === 0 && "overflow-x-auto") }, tableComponent) : tableComponent);
|
|
119
118
|
};
|
|
120
119
|
//#endregion
|
|
121
120
|
export { DataTableTable };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataTableTable.js","names":[],"sources":["../../../src/components/data-table/DataTableTable.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"DataTableTable.js","names":[],"sources":["../../../src/components/data-table/DataTableTable.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { styled } from '~/styled'\nimport { cn } from '~/styled'\n\nimport { Table } from '../table/Table'\nimport { TableBody } from '../table/TableBody'\nimport { AsyncDataState } from './DataTable.types'\nimport { DataTableBody } from './DataTableBody'\nimport { useDataTable } from './DataTableContext'\nimport { DataTableHead } from './DataTableHead'\nimport { DataTableLoading } from './DataTableLoading'\n\nconst TableContainer = styled('div', {\n base: ['p-2', 'bg-white', 'rounded-lg']\n})\n\nexport type DataTableTableProps = Omit<\n React.ComponentProps<typeof Table>,\n 'children' | 'numberOfStickyColumns'\n> &\n Partial<\n Pick<React.ComponentProps<typeof DataTableHead>, 'theme' | 'sortable'>\n > &\n Partial<Pick<React.ComponentProps<typeof TableBody>, 'striped'>> & {\n scrollOptions?: {\n hasStickyHeader?: boolean\n stickyHeaderOffset?: number\n headerCss?: string\n numberOfStickyColumns?: number\n scrollContainerCls?: string | string[]\n showTotalInFirstColumn?: boolean\n totalSuffix?: string\n }\n rowAction?: (row: Record<string, unknown>, event: React.MouseEvent) => void\n withContainer?: boolean\n }\n\nexport const DataTableTable = ({\n sortable,\n striped,\n theme = 'white',\n className,\n scrollOptions = {\n numberOfStickyColumns: 0,\n stickyHeaderOffset: 0,\n hasStickyHeader: false,\n showTotalInFirstColumn: true,\n totalSuffix: 'items'\n },\n rowAction,\n withContainer = false,\n ...props\n}: DataTableTableProps): JSX.Element | null => {\n const {\n asyncDataState,\n getTotalRows,\n getCanSomeRowsExpand,\n rowSelection,\n enableRowSelection,\n tableId,\n setTablePosition\n } = useDataTable()\n\n const tableRef = React.useRef<HTMLTableElement | null>(null)\n const isTableVisible = React.useRef(false)\n const isScrolling = React.useRef<boolean>(false)\n\n const scrollTarget = React.useMemo(() => {\n if (typeof window === 'undefined') return null\n return window\n }, [])\n\n React.useEffect(() => {\n if (!scrollTarget || typeof IntersectionObserver === 'undefined') {\n return\n }\n\n const updatePosition = () => {\n if (tableRef.current) {\n const tableTop = tableRef.current.getBoundingClientRect().top\n const tableBottom = tableRef.current.getBoundingClientRect().bottom\n\n setTablePosition((prevPosition) => ({\n ...prevPosition,\n top: tableTop,\n bottom: tableBottom\n }))\n }\n isScrolling.current = false\n }\n\n const handleScroll = () => {\n if (!isScrolling.current) {\n requestAnimationFrame(updatePosition)\n isScrolling.current = true\n }\n }\n\n if (!tableRef.current) return\n\n const observerOffset = scrollOptions?.stickyHeaderOffset || 0\n\n const observerOptions = {\n rootMargin: `-${observerOffset}px 0px -${observerOffset}px 0px`,\n threshold: 0\n }\n\n const handleTableIntersection = (entries: IntersectionObserverEntry[]) => {\n if (!entries || entries.length === 0) return\n const entry = entries[0]\n\n isTableVisible.current = entry.isIntersecting\n\n if (scrollTarget) {\n if (entry.isIntersecting) {\n // add scroll listener\n scrollTarget?.addEventListener('scroll', handleScroll)\n } else {\n // remove scroll listener\n scrollTarget?.removeEventListener('scroll', handleScroll)\n }\n }\n\n setTablePosition((prevPosition) => ({\n ...prevPosition,\n isVisible: entry.isIntersecting\n }))\n }\n\n const tableObserver = new IntersectionObserver(\n handleTableIntersection,\n observerOptions\n )\n\n //only track table position if we have a sticky header or bulk actions active\n if (\n tableRef.current &&\n (scrollOptions.hasStickyHeader ||\n Object.keys(rowSelection || {}).length > 0)\n ) {\n tableObserver.observe(tableRef.current)\n }\n\n return () => {\n tableObserver.disconnect()\n if (scrollTarget) {\n scrollTarget?.removeEventListener('scroll', handleScroll)\n }\n }\n }, [\n rowSelection,\n scrollOptions.hasStickyHeader,\n scrollOptions?.stickyHeaderOffset,\n scrollTarget,\n setTablePosition\n ])\n\n const isPending = asyncDataState === AsyncDataState.PENDING\n const isEmpty = !isPending && getTotalRows() === 0\n\n const buildScrollContainerKey = (): string => {\n let controlColumnCount = 0\n\n if (getCanSomeRowsExpand() && !!enableRowSelection) {\n controlColumnCount = 2\n } else if (getCanSomeRowsExpand() || !!enableRowSelection) {\n controlColumnCount = 1\n }\n\n return `${tableId}_${controlColumnCount}_control_columns`\n }\n\n if (isEmpty) return null\n\n const tableComponent = (\n <Table\n corners=\"round\"\n size=\"lg\"\n {...props}\n ref={tableRef}\n numberOfStickyColumns={scrollOptions.numberOfStickyColumns}\n scrollContainerCls={scrollOptions.scrollContainerCls}\n scrollContainerkey={buildScrollContainerKey()}\n className={cn(\n className,\n isPending && [\n 'opacity-50',\n 'pointer-events-none',\n 'transition-opacity',\n 'duration-250',\n 'linear',\n 'delay-150'\n ]\n )}\n >\n <DataTableHead\n theme={theme}\n sortable={sortable}\n isSticky={scrollOptions.hasStickyHeader}\n stickyOffset={scrollOptions.stickyHeaderOffset}\n className={scrollOptions.headerCss}\n showTotalInFirstColumn={scrollOptions.showTotalInFirstColumn}\n totalSuffix={scrollOptions.totalSuffix}\n />\n <DataTableBody striped={striped} rowAction={rowAction} />\n </Table>\n )\n\n return (\n <>\n <DataTableLoading />\n {withContainer ? (\n <TableContainer\n className={cn(\n scrollOptions.numberOfStickyColumns === 0 && 'overflow-x-auto'\n )}\n >\n {tableComponent}\n </TableContainer>\n ) : (\n tableComponent\n )}\n </>\n )\n}\n"],"mappings":";;;;;;;;;AAaA,IAAM,iBAAiB,OAAO,OAAO,EACnC,MAAM;CAAC;CAAO;CAAY;CAAa,EACxC,CAAC;AAuBF,IAAa,kBAAkB,EAC7B,UACA,SACA,QAAQ,SACR,WACA,gBAAgB;CACd,uBAAuB;CACvB,oBAAoB;CACpB,iBAAiB;CACjB,wBAAwB;CACxB,aAAa;CACd,EACD,WACA,gBAAgB,OAChB,GAAG,YAC0C;CAC7C,MAAM,EACJ,gBACA,cACA,sBACA,cACA,oBACA,SACA,qBACE,cAAc;CAElB,MAAM,WAAW,QAAM,OAAgC,KAAK;CAC5D,MAAM,iBAAiB,QAAM,OAAO,MAAM;CAC1C,MAAM,cAAc,QAAM,OAAgB,MAAM;CAEhD,MAAM,eAAe,QAAM,cAAc;AACvC,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,SAAO;IACN,EAAE,CAAC;AAEN,SAAM,gBAAgB;AACpB,MAAI,CAAC,gBAAgB,OAAO,yBAAyB,YACnD;EAGF,MAAM,uBAAuB;AAC3B,OAAI,SAAS,SAAS;IACpB,MAAM,WAAW,SAAS,QAAQ,uBAAuB,CAAC;IAC1D,MAAM,cAAc,SAAS,QAAQ,uBAAuB,CAAC;AAE7D,sBAAkB,kBAAkB;KAClC,GAAG;KACH,KAAK;KACL,QAAQ;KACT,EAAE;;AAEL,eAAY,UAAU;;EAGxB,MAAM,qBAAqB;AACzB,OAAI,CAAC,YAAY,SAAS;AACxB,0BAAsB,eAAe;AACrC,gBAAY,UAAU;;;AAI1B,MAAI,CAAC,SAAS,QAAS;EAEvB,MAAM,iBAAiB,eAAe,sBAAsB;EAE5D,MAAM,kBAAkB;GACtB,YAAY,IAAI,eAAe,UAAU,eAAe;GACxD,WAAW;GACZ;EAED,MAAM,2BAA2B,YAAyC;AACxE,OAAI,CAAC,WAAW,QAAQ,WAAW,EAAG;GACtC,MAAM,QAAQ,QAAQ;AAEtB,kBAAe,UAAU,MAAM;AAE/B,OAAI,aACF,KAAI,MAAM,eAER,eAAc,iBAAiB,UAAU,aAAa;OAGtD,eAAc,oBAAoB,UAAU,aAAa;AAI7D,qBAAkB,kBAAkB;IAClC,GAAG;IACH,WAAW,MAAM;IAClB,EAAE;;EAGL,MAAM,gBAAgB,IAAI,qBACxB,yBACA,gBACD;AAGD,MACE,SAAS,YACR,cAAc,mBACb,OAAO,KAAK,gBAAgB,EAAE,CAAC,CAAC,SAAS,GAE3C,eAAc,QAAQ,SAAS,QAAQ;AAGzC,eAAa;AACX,iBAAc,YAAY;AAC1B,OAAI,aACF,eAAc,oBAAoB,UAAU,aAAa;;IAG5D;EACD;EACA,cAAc;EACd,eAAe;EACf;EACA;EACD,CAAC;CAEF,MAAM,YAAY,mBAAmB,eAAe;CACpD,MAAM,UAAU,CAAC,aAAa,cAAc,KAAK;CAEjD,MAAM,gCAAwC;EAC5C,IAAI,qBAAqB;AAEzB,MAAI,sBAAsB,IAAI,CAAC,CAAC,mBAC9B,sBAAqB;WACZ,sBAAsB,IAAI,CAAC,CAAC,mBACrC,sBAAqB;AAGvB,SAAO,GAAG,QAAQ,GAAG,mBAAmB;;AAG1C,KAAI,QAAS,QAAO;CAEpB,MAAM,iBACJ,wBAAA,cAAC,OAAD;EACE,SAAQ;EACR,MAAK;EACL,GAAI;EACJ,KAAK;EACL,uBAAuB,cAAc;EACrC,oBAAoB,cAAc;EAClC,oBAAoB,yBAAyB;EAC7C,WAAW,GACT,WACA,aAAa;GACX;GACA;GACA;GACA;GACA;GACA;GACD,CACF;EAYK,EAVN,wBAAA,cAAC,eAAD;EACS;EACG;EACV,UAAU,cAAc;EACxB,cAAc,cAAc;EAC5B,WAAW,cAAc;EACzB,wBAAwB,cAAc;EACtC,aAAa,cAAc;EAC3B,CAAA,EACF,wBAAA,cAAC,eAAD;EAAwB;EAAoB;EAAa,CAAA,CACnD;AAGV,QACE,wBAAA,cAAA,QAAA,UAAA,MACE,wBAAA,cAAC,kBAAA,KAAmB,EACnB,gBACC,wBAAA,cAAC,gBAAD,EACE,WAAW,GACT,cAAc,0BAA0B,KAAK,kBAC9C,EAGc,EADd,eACc,GAEjB,eAED"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { cn } from "../../../styled.js";
|
|
1
2
|
import { Table } from "../../table/Table.js";
|
|
2
3
|
import { AsyncDataState } from "../DataTable.types.js";
|
|
3
4
|
import { useDataTable } from "../DataTableContext.js";
|
|
@@ -5,7 +6,6 @@ import { DataTableHead } from "../DataTableHead.js";
|
|
|
5
6
|
import { DataTableLoading } from "../DataTableLoading.js";
|
|
6
7
|
import { SortableRoot } from "../../sortable/SortableRoot.js";
|
|
7
8
|
import { DragAndDropTableBody } from "./DragAndDropTableBody.js";
|
|
8
|
-
import clsx from "clsx";
|
|
9
9
|
import * as React$1 from "react";
|
|
10
10
|
import { arrayMove } from "@dnd-kit/sortable";
|
|
11
11
|
//#region src/components/data-table/drag-and-drop/DragAndDropTable.tsx
|
|
@@ -36,7 +36,7 @@ var DragAndDropTable = ({ idColumn = "id", onDragAndDrop, sortable, striped, the
|
|
|
36
36
|
sortableIds: rowIds
|
|
37
37
|
}, /* @__PURE__ */ React$1.createElement(DataTableLoading, null), /* @__PURE__ */ React$1.createElement(Table, {
|
|
38
38
|
...props,
|
|
39
|
-
className:
|
|
39
|
+
className: cn(className, isPending && [
|
|
40
40
|
"opacity-50",
|
|
41
41
|
"pointer-events-none",
|
|
42
42
|
"transition-opacity,duration-250,linear,delay-150"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DragAndDropTable.js","names":[],"sources":["../../../../src/components/data-table/drag-and-drop/DragAndDropTable.tsx"],"sourcesContent":["import { arrayMove } from '@dnd-kit/sortable'\nimport
|
|
1
|
+
{"version":3,"file":"DragAndDropTable.js","names":[],"sources":["../../../../src/components/data-table/drag-and-drop/DragAndDropTable.tsx"],"sourcesContent":["import { arrayMove } from '@dnd-kit/sortable'\nimport * as React from 'react'\n\nimport { cn } from '~/styled'\n\nimport * as Sortable from '../../sortable'\nimport { Table } from '../../table/Table'\nimport { AsyncDataState, TAsyncDataResult } from '../DataTable.types'\nimport { useDataTable } from '../DataTableContext'\nimport { DataTableHead } from '../DataTableHead'\nimport { DataTableLoading } from '../DataTableLoading'\nimport type { DataTableTableProps } from '../DataTableTable'\nimport { DragAndDropTableBody } from './DragAndDropTableBody'\n\ntype DragAndDropTableProps = DataTableTableProps & {\n className?: string\n idColumn?: string\n onDragAndDrop?: (onDragAndDropData: {\n oldIndex: number\n newIndex: number\n newData: TAsyncDataResult\n }) => void\n}\n\nexport const DragAndDropTable = ({\n idColumn = 'id',\n onDragAndDrop,\n sortable,\n striped,\n theme,\n className,\n ...props\n}: DragAndDropTableProps) => {\n const { asyncDataState, data, setData } = useDataTable()\n const isPending = asyncDataState === AsyncDataState.PENDING\n\n const rowIds = React.useMemo(\n () =>\n data.results.map((row) => {\n return row[idColumn] as React.ReactText\n }),\n [data]\n )\n const handleSortChange = React.useCallback(\n ({ oldIndex, newIndex }) => {\n const sortedResults = arrayMove(data.results, oldIndex, newIndex)\n const newData = { results: sortedResults, total: data.total }\n setData({ results: sortedResults, total: data.total })\n onDragAndDrop?.({ oldIndex, newIndex, newData })\n },\n [data, onDragAndDrop]\n )\n\n return (\n <Sortable.Root onSortChange={handleSortChange} sortableIds={rowIds}>\n <DataTableLoading />\n <Table\n {...props}\n className={cn(\n className,\n isPending && [\n 'opacity-50',\n 'pointer-events-none',\n 'transition-opacity,duration-250,linear,delay-150'\n ]\n )}\n >\n <DataTableHead theme={theme} sortable={sortable} />\n <DragAndDropTableBody striped={striped} idColumn={idColumn} />\n </Table>\n </Sortable.Root>\n )\n}\n"],"mappings":";;;;;;;;;;;AAwBA,IAAa,oBAAoB,EAC/B,WAAW,MACX,eACA,UACA,SACA,OACA,WACA,GAAG,YACwB;CAC3B,MAAM,EAAE,gBAAgB,MAAM,YAAY,cAAc;CACxD,MAAM,YAAY,mBAAmB,eAAe;CAEpD,MAAM,SAAS,QAAM,cAEjB,KAAK,QAAQ,KAAK,QAAQ;AACxB,SAAO,IAAI;GACX,EACJ,CAAC,KAAK,CACP;CACD,MAAM,mBAAmB,QAAM,aAC5B,EAAE,UAAU,eAAe;EAC1B,MAAM,gBAAgB,UAAU,KAAK,SAAS,UAAU,SAAS;EACjE,MAAM,UAAU;GAAE,SAAS;GAAe,OAAO,KAAK;GAAO;AAC7D,UAAQ;GAAE,SAAS;GAAe,OAAO,KAAK;GAAO,CAAC;AACtD,kBAAgB;GAAE;GAAU;GAAU;GAAS,CAAC;IAElD,CAAC,MAAM,cAAc,CACtB;AAED,QACE,wBAAA,cAAC,cAAD;EAAe,cAAc;EAAkB,aAAa;EAgB5C,EAfd,wBAAA,cAAC,kBAAA,KAAmB,EACpB,wBAAA,cAAC,OAAD;EACE,GAAI;EACJ,WAAW,GACT,WACA,aAAa;GACX;GACA;GACA;GACD,CACF;EAIK,EAFN,wBAAA,cAAC,eAAD;EAAsB;EAAiB;EAAY,CAAA,EACnD,wBAAA,cAAC,sBAAD;EAA+B;EAAmB;EAAY,CAAA,CACxD,CACM"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import { cn } from "../../styled.js";
|
|
1
2
|
import { Heading } from "../heading/Heading.js";
|
|
2
|
-
import clsx from "clsx";
|
|
3
3
|
import * as React$1 from "react";
|
|
4
4
|
//#region src/components/dialog/DialogHeading.tsx
|
|
5
5
|
var DialogHeading = ({ className, ...rest }) => /* @__PURE__ */ React$1.createElement(Heading, {
|
|
6
6
|
size: "sm",
|
|
7
7
|
...rest,
|
|
8
|
-
className:
|
|
8
|
+
className: cn("border-b", "border-b-grey-200", "pb-8", "pt-0", "px-8", "mb-8", "-mx-8", "box-content", className)
|
|
9
9
|
});
|
|
10
10
|
//#endregion
|
|
11
11
|
export { DialogHeading };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DialogHeading.js","names":[],"sources":["../../../src/components/dialog/DialogHeading.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"DialogHeading.js","names":[],"sources":["../../../src/components/dialog/DialogHeading.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { cn } from '~/styled'\n\nimport { Heading } from '../heading/Heading'\n\nexport const DialogHeading = ({\n className,\n ...rest\n}: React.ComponentProps<typeof Heading>) => (\n <Heading\n size=\"sm\"\n {...rest}\n className={cn(\n 'border-b',\n 'border-b-grey-200',\n 'pb-8',\n 'pt-0',\n 'px-8',\n 'mb-8',\n '-mx-8',\n 'box-content',\n className\n )}\n />\n)\n"],"mappings":";;;;AAMA,IAAa,iBAAiB,EAC5B,WACA,GAAG,WAEH,wBAAA,cAAC,SAAD;CACE,MAAK;CACL,GAAI;CACJ,WAAW,GACT,YACA,qBACA,QACA,QACA,QACA,QACA,SACA,eACA,UACD;CACD,CAAA"}
|
|
@@ -7,8 +7,9 @@ export declare const DropdownMenu: React.FC<import("@radix-ui/react-dropdown-men
|
|
|
7
7
|
Item: React.ForwardRefExoticComponent<Omit<import("@radix-ui/react-dropdown-menu").DropdownMenuItemProps & React.RefAttributes<HTMLDivElement>, never> & {
|
|
8
8
|
as?: React.ElementType;
|
|
9
9
|
}>;
|
|
10
|
-
LinkItem: ({ children, href, ...props }: React.ComponentProps<typeof DropdownMenuItem> & {
|
|
10
|
+
LinkItem: ({ children, href, reloadDocument, ...props }: React.ComponentProps<typeof DropdownMenuItem> & {
|
|
11
11
|
href: string;
|
|
12
|
+
reloadDocument?: boolean;
|
|
12
13
|
}) => React.JSX.Element;
|
|
13
14
|
Portal: React.FC<import("@radix-ui/react-dropdown-menu").DropdownMenuPortalProps>;
|
|
14
15
|
Separator: React.ForwardRefExoticComponent<Omit<import("@radix-ui/react-dropdown-menu").DropdownMenuSeparatorProps & React.RefAttributes<HTMLDivElement>, never> & {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { DropdownMenuItem } from './DropdownMenuItem';
|
|
3
|
-
export declare const DropdownMenuLinkItem: ({ children, href, ...props }: React.ComponentProps<typeof DropdownMenuItem> & {
|
|
3
|
+
export declare const DropdownMenuLinkItem: ({ children, href, reloadDocument, ...props }: React.ComponentProps<typeof DropdownMenuItem> & {
|
|
4
4
|
href: string;
|
|
5
|
+
reloadDocument?: boolean;
|
|
5
6
|
}) => React.JSX.Element;
|
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
import { styled } from "../../styled.js";
|
|
2
2
|
import { getExternalAnchorProps } from "../../utilities/uri/index.js";
|
|
3
|
+
import { useRouterLinkProps } from "../router-provider/RouterProvider.js";
|
|
3
4
|
import { DropdownMenuItem } from "./DropdownMenuItem.js";
|
|
4
5
|
import React from "react";
|
|
5
6
|
//#region src/components/dropdown-menu/DropdownMenuLinkItem.tsx
|
|
6
7
|
var StyledLink = styled("a", { base: ["no-underline"] });
|
|
7
|
-
var DropdownMenuLinkItem = ({ children, href, ...props }) =>
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
var DropdownMenuLinkItem = ({ children, href, reloadDocument, ...props }) => {
|
|
9
|
+
const routerLinkProps = useRouterLinkProps(href, { reloadDocument });
|
|
10
|
+
return /* @__PURE__ */ React.createElement(DropdownMenuItem, {
|
|
11
|
+
...props,
|
|
12
|
+
asChild: true
|
|
13
|
+
}, /* @__PURE__ */ React.createElement(StyledLink, {
|
|
14
|
+
as: routerLinkProps.as,
|
|
15
|
+
href,
|
|
16
|
+
role: "menuitem",
|
|
17
|
+
...getExternalAnchorProps(href)
|
|
18
|
+
}, children));
|
|
19
|
+
};
|
|
15
20
|
//#endregion
|
|
16
21
|
export { DropdownMenuLinkItem };
|
|
17
22
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownMenuLinkItem.js","names":[],"sources":["../../../src/components/dropdown-menu/DropdownMenuLinkItem.tsx"],"sourcesContent":["import React from 'react'\n\nimport { styled } from '~/styled'\nimport { getExternalAnchorProps } from '~/utilities/uri'\n\nimport { DropdownMenuItem } from './DropdownMenuItem'\n\nconst StyledLink = styled('a', {\n base: ['no-underline']\n})\n\nexport const DropdownMenuLinkItem = ({\n children,\n href,\n ...props\n}: React.ComponentProps<typeof DropdownMenuItem> & {
|
|
1
|
+
{"version":3,"file":"DropdownMenuLinkItem.js","names":[],"sources":["../../../src/components/dropdown-menu/DropdownMenuLinkItem.tsx"],"sourcesContent":["import React from 'react'\n\nimport { styled } from '~/styled'\nimport { getExternalAnchorProps } from '~/utilities/uri'\n\nimport { useRouterLinkProps } from '../router-provider/RouterProvider'\nimport { DropdownMenuItem } from './DropdownMenuItem'\n\nconst StyledLink = styled('a', {\n base: ['no-underline']\n})\n\nexport const DropdownMenuLinkItem = ({\n children,\n href,\n reloadDocument,\n ...props\n}: React.ComponentProps<typeof DropdownMenuItem> & {\n href: string\n reloadDocument?: boolean\n}) => {\n const routerLinkProps = useRouterLinkProps(href, { reloadDocument })\n\n return (\n <DropdownMenuItem {...props} asChild>\n <StyledLink\n as={routerLinkProps.as}\n href={href}\n role=\"menuitem\"\n {...getExternalAnchorProps(href)}\n >\n {children}\n </StyledLink>\n </DropdownMenuItem>\n )\n}\n"],"mappings":";;;;;;AAQA,IAAM,aAAa,OAAO,KAAK,EAC7B,MAAM,CAAC,eAAe,EACvB,CAAC;AAEF,IAAa,wBAAwB,EACnC,UACA,MACA,gBACA,GAAG,YAIC;CACJ,MAAM,kBAAkB,mBAAmB,MAAM,EAAE,gBAAgB,CAAC;AAEpE,QACE,sBAAA,cAAC,kBAAD;EAAkB,GAAI;EAAO,SAAA;EASV,EARjB,sBAAA,cAAC,YAAD;EACE,IAAI,gBAAgB;EACd;EACN,MAAK;EACL,GAAI,uBAAuB,KAAK;EAGrB,EADV,SACU,CACI"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import { cn } from "../../styled.js";
|
|
1
2
|
import { Text } from "../text/Text.js";
|
|
2
|
-
import clsx from "clsx";
|
|
3
3
|
import * as React$1 from "react";
|
|
4
4
|
//#region src/components/field-wrapper/FieldDescription.tsx
|
|
5
5
|
var Description = ({ children, className }) => /* @__PURE__ */ React$1.createElement(Text, {
|
|
6
6
|
size: "sm",
|
|
7
|
-
className:
|
|
7
|
+
className: cn("text-grey-700", "max-w-[80ch]", className)
|
|
8
8
|
}, children);
|
|
9
9
|
//#endregion
|
|
10
10
|
export { Description };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldDescription.js","names":[],"sources":["../../../src/components/field-wrapper/FieldDescription.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"FieldDescription.js","names":[],"sources":["../../../src/components/field-wrapper/FieldDescription.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { Text } from '~/components/text/Text'\nimport { cn } from '~/styled'\n\nexport const Description = ({\n children,\n className\n}: React.PropsWithChildren<{ className?: string }>) => (\n <Text size=\"sm\" className={cn('text-grey-700', 'max-w-[80ch]', className)}>\n {children}\n </Text>\n)\n"],"mappings":";;;;AAKA,IAAa,eAAe,EAC1B,UACA,gBAEA,wBAAA,cAAC,MAAD;CAAM,MAAK;CAAK,WAAW,GAAG,iBAAiB,gBAAgB,UAAU;CAElE,EADJ,SACI"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import { cn } from "../../styled.js";
|
|
1
2
|
import { InlineMessage } from "../inline-message/InlineMessage.js";
|
|
2
3
|
import { Label } from "../label/Label.js";
|
|
3
4
|
import { Description } from "./FieldDescription.js";
|
|
4
5
|
import { Link } from "../link/Link.js";
|
|
5
|
-
import clsx from "clsx";
|
|
6
6
|
import * as React$1 from "react";
|
|
7
7
|
//#region src/components/field-wrapper/FieldWrapper.tsx
|
|
8
|
-
var FieldWrapper = ({ children, error, fieldId, label, prompt, description, required, hideLabel, appearance, ...rest }) => /* @__PURE__ */ React$1.createElement("div", rest, /* @__PURE__ */ React$1.createElement("div", { className:
|
|
8
|
+
var FieldWrapper = ({ children, error, fieldId, label, prompt, description, required, hideLabel, appearance, ...rest }) => /* @__PURE__ */ React$1.createElement("div", rest, /* @__PURE__ */ React$1.createElement("div", { className: cn("mb-3", "flex", "items-center", "justify-between", hideLabel && "sr-only") }, /* @__PURE__ */ React$1.createElement(Label, {
|
|
9
9
|
htmlFor: fieldId,
|
|
10
10
|
required,
|
|
11
11
|
appearance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FieldWrapper.js","names":[],"sources":["../../../src/components/field-wrapper/FieldWrapper.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"FieldWrapper.js","names":[],"sources":["../../../src/components/field-wrapper/FieldWrapper.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { ValidationOptions } from '~/components/form/validation'\nimport { InlineMessage } from '~/components/inline-message/InlineMessage'\nimport { Label } from '~/components/label/Label'\nimport { Link } from '~/components/link/Link'\nimport { cn } from '~/styled'\n\nimport { type LabelProps } from '../label/Label'\nimport { Description } from './FieldDescription'\n\nexport type FieldWrapperProps = {\n className?: string\n error?: string\n fieldId: string\n label: string\n prompt?: { link?: string; label: string; onClick?: () => void }\n description?: string\n required?: boolean\n hideLabel?: boolean\n appearance?: LabelProps['appearance']\n}\n\nexport type FieldElementWrapperProps = Omit<FieldWrapperProps, 'fieldId'> & {\n name: string\n validation?: ValidationOptions\n}\n\nexport const FieldWrapper = ({\n children,\n error,\n fieldId,\n label,\n prompt,\n description,\n required,\n hideLabel,\n appearance,\n ...rest\n}: React.PropsWithChildren<FieldWrapperProps>) => (\n <div {...rest}>\n <div\n className={cn(\n 'mb-3',\n 'flex',\n 'items-center',\n 'justify-between',\n hideLabel && 'sr-only'\n )}\n >\n <Label htmlFor={fieldId} required={required} appearance={appearance}>\n {label}\n </Label>\n {prompt && (\n <Link href={prompt?.link} onClick={prompt?.onClick} size=\"sm\">\n {prompt.label}\n </Link>\n )}\n </div>\n {description && <Description className=\"mb-3\">{description}</Description>}\n {children}\n {error && <InlineMessage className=\"mt-2\">{error}</InlineMessage>}\n </div>\n)\n\nFieldWrapper.displayName = 'FieldWrapper'\n"],"mappings":";;;;;;;AA4BA,IAAa,gBAAgB,EAC3B,UACA,OACA,SACA,OACA,QACA,aACA,UACA,WACA,YACA,GAAG,WAEH,wBAAA,cAAC,OAAQ,MACP,wBAAA,cAAC,OAAD,EACE,WAAW,GACT,QACA,QACA,gBACA,mBACA,aAAa,UACd,EAUG,EARJ,wBAAA,cAAC,OAAD;CAAO,SAAS;CAAmB;CAAsB;CAEjD,EADL,MACK,EACP,UACC,wBAAA,cAAC,MAAD;CAAM,MAAM,QAAQ;CAAM,SAAS,QAAQ;CAAS,MAAK;CAElD,EADJ,OAAO,MACH,CAEL,EACL,eAAe,wBAAA,cAAC,aAAD,EAAa,WAAU,QAAkC,EAA1B,YAA0B,EACxE,UACA,SAAS,wBAAA,cAAC,eAAD,EAAe,WAAU,QAA8B,EAAtB,MAAsB,CAC7D;AAGR,aAAa,cAAc"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { cn } from "../../styled.js";
|
|
1
2
|
import { Checkbox } from "../checkbox/Checkbox.js";
|
|
2
3
|
import { InlineMessage } from "../inline-message/InlineMessage.js";
|
|
3
4
|
import { Label } from "../label/Label.js";
|
|
4
5
|
import { RadioButton } from "../radio-button/RadioButton.js";
|
|
5
6
|
import { Description } from "./FieldDescription.js";
|
|
6
|
-
import clsx from "clsx";
|
|
7
7
|
import * as React$1 from "react";
|
|
8
8
|
//#region src/components/field-wrapper/InlineFieldWrapper.tsx
|
|
9
9
|
var InlineFieldWrapper = ({ align = "start", children, className, description, direction = "row", error, label, required }) => /* @__PURE__ */ React$1.createElement("div", { className }, /* @__PURE__ */ React$1.createElement(Label, {
|
|
@@ -11,7 +11,7 @@ var InlineFieldWrapper = ({ align = "start", children, className, description, d
|
|
|
11
11
|
direction,
|
|
12
12
|
required,
|
|
13
13
|
type: "inline"
|
|
14
|
-
}, React$1.Children.map(children, (child) => /* @__PURE__ */ React$1.createElement("div", { className:
|
|
14
|
+
}, React$1.Children.map(children, (child) => /* @__PURE__ */ React$1.createElement("div", { className: cn(direction === "reverse" && "ml-3", direction === "row" && "mr-3", (child?.type === Checkbox || child?.type === RadioButton) && child?.props?.size !== "lg" && "translate-y-1") }, child)), label), error && /* @__PURE__ */ React$1.createElement(InlineMessage, { className: "mt-2" }, error), description && /* @__PURE__ */ React$1.createElement(Description, { className: cn("mt-2", direction === "reverse" && "mr-7", direction === "row" && "ml-7") }, description));
|
|
15
15
|
InlineFieldWrapper.displayName = "InlineFieldWrapper";
|
|
16
16
|
//#endregion
|
|
17
17
|
export { InlineFieldWrapper };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InlineFieldWrapper.js","names":[],"sources":["../../../src/components/field-wrapper/InlineFieldWrapper.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"InlineFieldWrapper.js","names":[],"sources":["../../../src/components/field-wrapper/InlineFieldWrapper.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { Checkbox } from '~/components/checkbox/Checkbox'\nimport { InlineMessage } from '~/components/inline-message/InlineMessage'\nimport { Label } from '~/components/label/Label'\nimport { RadioButton } from '~/components/radio-button/RadioButton'\nimport { cn } from '~/styled'\n\nimport { Description } from './FieldDescription'\n\ntype InlineFieldWrapperProps = {\n className?: string\n error?: string\n label: string\n required?: boolean\n align?: 'start' | 'center'\n direction?: 'row' | 'reverse'\n description?: string\n}\n\nexport const InlineFieldWrapper = ({\n align = 'start',\n children,\n className,\n description,\n direction = 'row',\n error,\n label,\n required\n}: React.PropsWithChildren<InlineFieldWrapperProps>) => (\n <div className={className}>\n <Label\n align={align}\n direction={direction}\n required={required}\n type=\"inline\"\n >\n {React.Children.map(children, (child: any) => (\n <div\n className={cn(\n direction === 'reverse' && 'ml-3',\n direction === 'row' && 'mr-3',\n (child?.type === Checkbox || child?.type === RadioButton) &&\n child?.props?.size !== 'lg' &&\n 'translate-y-1'\n )}\n >\n {child}\n </div>\n ))}\n {label}\n </Label>\n {error && <InlineMessage className=\"mt-2\">{error}</InlineMessage>}\n {description && (\n <Description\n className={cn(\n 'mt-2',\n direction === 'reverse' && 'mr-7',\n direction === 'row' && 'ml-7'\n )}\n >\n {description}\n </Description>\n )}\n </div>\n)\n\nInlineFieldWrapper.displayName = 'InlineFieldWrapper'\n"],"mappings":";;;;;;;;AAoBA,IAAa,sBAAsB,EACjC,QAAQ,SACR,UACA,WACA,aACA,YAAY,OACZ,OACA,OACA,eAEA,wBAAA,cAAC,OAAD,EAAgB,WAkCV,EAjCJ,wBAAA,cAAC,OAAD;CACS;CACI;CACD;CACV,MAAK;CAgBC,EAdL,QAAM,SAAS,IAAI,WAAW,UAC7B,wBAAA,cAAC,OAAD,EACE,WAAW,GACT,cAAc,aAAa,QAC3B,cAAc,SAAS,SACtB,OAAO,SAAS,YAAY,OAAO,SAAS,gBAC3C,OAAO,OAAO,SAAS,QACvB,gBACH,EAGG,EADH,MACG,CACN,EACD,MACK,EACP,SAAS,wBAAA,cAAC,eAAD,EAAe,WAAU,QAA8B,EAAtB,MAAsB,EAChE,eACC,wBAAA,cAAC,aAAD,EACE,WAAW,GACT,QACA,cAAc,aAAa,QAC3B,cAAc,SAAS,OACxB,EAGW,EADX,YACW,CAEZ;AAGR,mBAAmB,cAAc"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { styled } from "../../styled.js";
|
|
2
|
-
import clsx from "clsx";
|
|
1
|
+
import { cn, styled } from "../../styled.js";
|
|
3
2
|
import * as React$1 from "react";
|
|
4
3
|
//#region src/components/grid/Grid.tsx
|
|
5
4
|
var GridContainer = styled("div", {
|
|
@@ -26,7 +25,7 @@ var Grid = ({ className, style, gap = "2", minItemSize, maxItemSize = "1fr", ...
|
|
|
26
25
|
...maxItemSize && { "--max-item-size": maxItemSize }
|
|
27
26
|
},
|
|
28
27
|
gap,
|
|
29
|
-
className:
|
|
28
|
+
className: cn(minItemSize && ["grid-cols-[repeat(auto-fit,minmax(var(--min-item-size,0),var(--max-item-size,0)))]"], className)
|
|
30
29
|
});
|
|
31
30
|
Grid.displayName = "Grid";
|
|
32
31
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Grid.js","names":[],"sources":["../../../src/components/grid/Grid.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"Grid.js","names":[],"sources":["../../../src/components/grid/Grid.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { styled } from '~/styled'\nimport { cn } from '~/styled'\n\nconst GridContainer = styled(\n 'div',\n {\n base: ['grid'],\n variants: {\n gap: {\n 0: ['gap-0.5'],\n 1: ['gap-1'],\n 2: ['gap-2'],\n 3: ['gap-3'],\n 4: ['gap-4'],\n 24: ['gap-6'],\n 5: ['gap-8'],\n 6: ['gap-10'],\n 7: ['gap-12'],\n 8: ['gap-16'],\n 9: ['gap-20']\n }\n }\n },\n { enabledResponsiveVariants: true }\n)\n\ntype GridProps = React.ComponentProps<typeof GridContainer> & {\n minItemSize?: string\n maxItemSize?: string\n}\n\nexport const Grid = ({\n className,\n style,\n gap = '2',\n minItemSize,\n maxItemSize = '1fr',\n ...remainingProps\n}: GridProps) => (\n <GridContainer\n {...remainingProps}\n style={{\n ...style,\n ...(minItemSize && { '--min-item-size': minItemSize }),\n ...(maxItemSize && { '--max-item-size': maxItemSize })\n }}\n gap={gap}\n className={cn(\n minItemSize && [\n 'grid-cols-[repeat(auto-fit,minmax(var(--min-item-size,0),var(--max-item-size,0)))]'\n ],\n className\n )}\n />\n)\n\nGrid.displayName = 'Grid'\n"],"mappings":";;;AAKA,IAAM,gBAAgB,OACpB,OACA;CACE,MAAM,CAAC,OAAO;CACd,UAAU,EACR,KAAK;EACH,GAAG,CAAC,UAAU;EACd,GAAG,CAAC,QAAQ;EACZ,GAAG,CAAC,QAAQ;EACZ,GAAG,CAAC,QAAQ;EACZ,GAAG,CAAC,QAAQ;EACZ,IAAI,CAAC,QAAQ;EACb,GAAG,CAAC,QAAQ;EACZ,GAAG,CAAC,SAAS;EACb,GAAG,CAAC,SAAS;EACb,GAAG,CAAC,SAAS;EACb,GAAG,CAAC,SAAS;EACd,EACF;CACF,EACD,EAAE,2BAA2B,MAAM,CACpC;AAOD,IAAa,QAAQ,EACnB,WACA,OACA,MAAM,KACN,aACA,cAAc,OACd,GAAG,qBAEH,wBAAA,cAAC,eAAD;CACE,GAAI;CACJ,OAAO;EACL,GAAG;EACH,GAAI,eAAe,EAAE,mBAAmB,aAAa;EACrD,GAAI,eAAe,EAAE,mBAAmB,aAAa;EACtD;CACI;CACL,WAAW,GACT,eAAe,CACb,qFACD,EACD,UACD;CACD,CAAA;AAGJ,KAAK,cAAc"}
|
|
@@ -62,6 +62,7 @@ export { RadioButton } from './radio-button/RadioButton';
|
|
|
62
62
|
export { RadioButtonGroup } from './radio-button/RadioButtonGroup';
|
|
63
63
|
export { RadioButtonField } from './radio-button-field/RadioButtonField';
|
|
64
64
|
export { RadioCard } from './radio-card/RadioCard';
|
|
65
|
+
export { RouterProvider } from './router-provider/RouterProvider';
|
|
65
66
|
export { RadioCardGroup } from './radio-card/RadioCardGroup';
|
|
66
67
|
export { SearchField } from './search-field/SearchField';
|
|
67
68
|
export { SearchInput } from './search-input/SearchInput';
|
|
@@ -11,6 +11,7 @@ export declare const StyledLink: React.ForwardRefExoticComponent<Omit<Omit<React
|
|
|
11
11
|
}>;
|
|
12
12
|
type LinkProps = Override<React.ComponentProps<typeof StyledLink>, NavigatorActions & {
|
|
13
13
|
disabled?: boolean;
|
|
14
|
+
reloadDocument?: boolean;
|
|
14
15
|
}>;
|
|
15
16
|
export declare const Link: React.ForwardRefExoticComponent<Omit<LinkProps, "ref"> & React.RefAttributes<HTMLAnchorElement>>;
|
|
16
17
|
export {};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { styled } from "../../styled.js";
|
|
2
2
|
import { getExternalAnchorProps } from "../../utilities/uri/index.js";
|
|
3
|
+
import { useRouterLinkProps } from "../router-provider/RouterProvider.js";
|
|
3
4
|
import * as React$1 from "react";
|
|
4
5
|
//#region src/components/link/Link.tsx
|
|
5
6
|
var StyledLink = styled("a", {
|
|
@@ -53,15 +54,18 @@ var StyledLink = styled("a", {
|
|
|
53
54
|
},
|
|
54
55
|
defaultVariants: { size: "md" }
|
|
55
56
|
}, { enabledResponsiveVariants: true });
|
|
56
|
-
var Link = React$1.forwardRef(({ as, disabled, href, ...rest }, ref) =>
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
57
|
+
var Link = React$1.forwardRef(({ as, disabled, href, reloadDocument, ...rest }, ref) => {
|
|
58
|
+
const routerLinkProps = useRouterLinkProps(href, { reloadDocument });
|
|
59
|
+
return /* @__PURE__ */ React$1.createElement(StyledLink, {
|
|
60
|
+
as: as || routerLinkProps.as || (!href ? "button" : void 0),
|
|
61
|
+
noCapsize: !href ? true : void 0,
|
|
62
|
+
href,
|
|
63
|
+
...disabled && { disabled: true },
|
|
64
|
+
...rest,
|
|
65
|
+
...getExternalAnchorProps(href),
|
|
66
|
+
ref
|
|
67
|
+
});
|
|
68
|
+
});
|
|
65
69
|
Link.displayName = "Link";
|
|
66
70
|
//#endregion
|
|
67
71
|
export { Link, StyledLink };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Link.js","names":[],"sources":["../../../src/components/link/Link.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { styled } from '~/styled'\nimport { NavigatorActions } from '~/types/navigatorActions.types'\nimport { Override } from '~/utilities/types'\nimport { getExternalAnchorProps } from '~/utilities/uri'\n\nexport const StyledLink = styled(\n 'a',\n {\n base: [\n 'bg-[unset]',\n 'text-primary-800',\n 'cursor-pointer',\n 'font-body',\n 'no-underline',\n 'focus:text-primary-900',\n 'focus:underline',\n 'hover:text-primary-900',\n 'hover:underline',\n 'active:text-primary-1000',\n 'disabled:cursor-not-allowed',\n 'disabled:opacity-30',\n 'disabled:pointer-events-none',\n '[p>&,h1>&,h2>&,h3>&,h4>&,li>&,em>&]:after:content-none',\n '[p>&,h1>&,h2>&,h3>&,h4>&,li>&,em>&]:before:content-none',\n '[p>&,h1>&,h2>&,h3>&,h4>&,li>&,em>&]:text-[100%]/none'\n ],\n variants: {\n size: {\n xs: ['text-xs', 'leading-[1.6]', 'capsize-[0.4364]'],\n sm: ['text-sm', 'leading-[1.53]', 'capsize-[0.4056]'],\n md: ['text-md', 'leading-normal', 'capsize-[0.3864]'],\n lg: ['text-lg', 'leading-[1.52]', 'capsize-[0.3983]'],\n xl: ['text-xl', 'leading-[1.42]', 'capsize-[0.3506]']\n },\n noCapsize: {\n true: ['capsize-none']\n }\n },\n defaultVariants: {\n size: 'md'\n }\n },\n { enabledResponsiveVariants: true }\n)\n\ntype LinkProps = Override<\n React.ComponentProps<typeof StyledLink>,\n NavigatorActions & { disabled?: boolean }\n>\n\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n ({ as, disabled, href, ...rest }, ref) => (\n <StyledLink\n
|
|
1
|
+
{"version":3,"file":"Link.js","names":[],"sources":["../../../src/components/link/Link.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { styled } from '~/styled'\nimport { NavigatorActions } from '~/types/navigatorActions.types'\nimport { Override } from '~/utilities/types'\nimport { getExternalAnchorProps } from '~/utilities/uri'\n\nimport { useRouterLinkProps } from '../router-provider/RouterProvider'\n\nexport const StyledLink = styled(\n 'a',\n {\n base: [\n 'bg-[unset]',\n 'text-primary-800',\n 'cursor-pointer',\n 'font-body',\n 'no-underline',\n 'focus:text-primary-900',\n 'focus:underline',\n 'hover:text-primary-900',\n 'hover:underline',\n 'active:text-primary-1000',\n 'disabled:cursor-not-allowed',\n 'disabled:opacity-30',\n 'disabled:pointer-events-none',\n '[p>&,h1>&,h2>&,h3>&,h4>&,li>&,em>&]:after:content-none',\n '[p>&,h1>&,h2>&,h3>&,h4>&,li>&,em>&]:before:content-none',\n '[p>&,h1>&,h2>&,h3>&,h4>&,li>&,em>&]:text-[100%]/none'\n ],\n variants: {\n size: {\n xs: ['text-xs', 'leading-[1.6]', 'capsize-[0.4364]'],\n sm: ['text-sm', 'leading-[1.53]', 'capsize-[0.4056]'],\n md: ['text-md', 'leading-normal', 'capsize-[0.3864]'],\n lg: ['text-lg', 'leading-[1.52]', 'capsize-[0.3983]'],\n xl: ['text-xl', 'leading-[1.42]', 'capsize-[0.3506]']\n },\n noCapsize: {\n true: ['capsize-none']\n }\n },\n defaultVariants: {\n size: 'md'\n }\n },\n { enabledResponsiveVariants: true }\n)\n\ntype LinkProps = Override<\n React.ComponentProps<typeof StyledLink>,\n NavigatorActions & { disabled?: boolean; reloadDocument?: boolean }\n>\n\nexport const Link = React.forwardRef<HTMLAnchorElement, LinkProps>(\n ({ as, disabled, href, reloadDocument, ...rest }, ref) => {\n const routerLinkProps = useRouterLinkProps(href, { reloadDocument })\n\n return (\n <StyledLink\n as={as || routerLinkProps.as || (!href ? 'button' : undefined)}\n noCapsize={!href ? true : undefined}\n href={href}\n {...(disabled && { disabled: true })}\n {...rest}\n {...getExternalAnchorProps(href)}\n ref={ref as any}\n />\n )\n }\n)\n\nLink.displayName = 'Link'\n"],"mappings":";;;;;AASA,IAAa,aAAa,OACxB,KACA;CACE,MAAM;EACJ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD;CACD,UAAU;EACR,MAAM;GACJ,IAAI;IAAC;IAAW;IAAiB;IAAmB;GACpD,IAAI;IAAC;IAAW;IAAkB;IAAmB;GACrD,IAAI;IAAC;IAAW;IAAkB;IAAmB;GACrD,IAAI;IAAC;IAAW;IAAkB;IAAmB;GACrD,IAAI;IAAC;IAAW;IAAkB;IAAmB;GACtD;EACD,WAAW,EACT,MAAM,CAAC,eAAe,EACvB;EACF;CACD,iBAAiB,EACf,MAAM,MACP;CACF,EACD,EAAE,2BAA2B,MAAM,CACpC;AAOD,IAAa,OAAO,QAAM,YACvB,EAAE,IAAI,UAAU,MAAM,gBAAgB,GAAG,QAAQ,QAAQ;CACxD,MAAM,kBAAkB,mBAAmB,MAAM,EAAE,gBAAgB,CAAC;AAEpE,QACE,wBAAA,cAAC,YAAD;EACE,IAAI,MAAM,gBAAgB,OAAO,CAAC,OAAO,WAAW,KAAA;EACpD,WAAW,CAAC,OAAO,OAAO,KAAA;EACpB;EACN,GAAK,YAAY,EAAE,UAAU,MAAM;EACnC,GAAI;EACJ,GAAI,uBAAuB,KAAK;EAC3B;EACL,CAAA;EAGP;AAED,KAAK,cAAc"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { styled } from "../../styled.js";
|
|
2
|
-
import clsx from "clsx";
|
|
1
|
+
import { cn, styled } from "../../styled.js";
|
|
3
2
|
import * as React$1 from "react";
|
|
4
3
|
//#region src/components/loader/Loader.tsx
|
|
5
4
|
var Dot = styled("div", {
|
|
@@ -18,7 +17,7 @@ var Dot = styled("div", {
|
|
|
18
17
|
} }
|
|
19
18
|
});
|
|
20
19
|
var Loader = ({ className, message = "Loading", size = "md", ...props }) => /* @__PURE__ */ React$1.createElement("div", {
|
|
21
|
-
className:
|
|
20
|
+
className: cn("flex", "justify-center", className),
|
|
22
21
|
role: "alert",
|
|
23
22
|
...props
|
|
24
23
|
}, /* @__PURE__ */ React$1.createElement("span", { className: "sr-only" }, message), /* @__PURE__ */ React$1.createElement(Dot, { size }), /* @__PURE__ */ React$1.createElement(Dot, { size }), /* @__PURE__ */ React$1.createElement(Dot, { size }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Loader.js","names":[],"sources":["../../../src/components/loader/Loader.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"Loader.js","names":[],"sources":["../../../src/components/loader/Loader.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { styled } from '~/styled'\nimport { cn } from '~/styled'\n\nconst Dot = styled('div', {\n base: [\n 'animate-pulse',\n 'bg-current',\n 'rounded-full',\n 'animation-duration-900',\n 'nth-3:animation-delay-300',\n 'nth-4:animation-delay-600'\n ],\n variants: {\n size: {\n sm: ['size-1', 'mx-0.5'],\n md: ['size-1.5', 'mx-0.5'],\n lg: ['size-2', 'mx-[3px]']\n }\n }\n})\n\ntype LoaderProps = React.ComponentProps<'div'> & {\n message?: string\n size?: 'sm' | 'md' | 'lg'\n}\n\nexport const Loader = ({\n className,\n message = 'Loading',\n size = 'md',\n ...props\n}: LoaderProps) => (\n <div\n className={cn('flex', 'justify-center', className)}\n role=\"alert\"\n {...props}\n >\n <span className=\"sr-only\">{message}</span>\n <Dot size={size} />\n <Dot size={size} />\n <Dot size={size} />\n </div>\n)\n"],"mappings":";;;AAKA,IAAM,MAAM,OAAO,OAAO;CACxB,MAAM;EACJ;EACA;EACA;EACA;EACA;EACA;EACD;CACD,UAAU,EACR,MAAM;EACJ,IAAI,CAAC,UAAU,SAAS;EACxB,IAAI,CAAC,YAAY,SAAS;EAC1B,IAAI,CAAC,UAAU,WAAW;EAC3B,EACF;CACF,CAAC;AAOF,IAAa,UAAU,EACrB,WACA,UAAU,WACV,OAAO,MACP,GAAG,YAEH,wBAAA,cAAC,OAAD;CACE,WAAW,GAAG,QAAQ,kBAAkB,UAAU;CAClD,MAAK;CACL,GAAI;CAMA,EAJJ,wBAAA,cAAC,QAAD,EAAM,WAAU,WAA0B,EAAf,QAAe,EAC1C,wBAAA,cAAC,KAAD,EAAW,MAAQ,CAAA,EACnB,wBAAA,cAAC,KAAD,EAAW,MAAQ,CAAA,EACnB,wBAAA,cAAC,KAAD,EAAW,MAAQ,CAAA,CACf"}
|