@eml-payments/ui-kit 0.1.7 → 0.1.8

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 (163) hide show
  1. package/README.md +149 -3
  2. package/dist/src/components/Button/Button.d.ts +3 -0
  3. package/dist/src/components/Button/Button.js +11 -0
  4. package/dist/{components → src/components}/Button/Button.types.d.ts +1 -1
  5. package/dist/{components/Button/Button.d.ts → src/components/Button/ButtonVariants.d.ts} +0 -3
  6. package/dist/{components/Button/Button.js → src/components/Button/ButtonVariants.js} +0 -9
  7. package/dist/{components → src/components}/Checkbox/Checkbox.d.ts +1 -1
  8. package/dist/{components → src/components}/Checkbox/Checkbox.js +1 -3
  9. package/dist/{components → src/components}/Checkbox/Checkbox.types.d.ts +2 -2
  10. package/dist/{components → src/components}/Divider/Divider.d.ts +1 -1
  11. package/dist/{components → src/components}/Ellipsis/Ellipsis.d.ts +1 -1
  12. package/dist/{components → src/components}/Ellipsis/Ellipsis.functions.js +2 -1
  13. package/dist/{components → src/components}/Input/Input.d.ts +1 -1
  14. package/dist/{components → src/components}/Input/Input.js +2 -1
  15. package/dist/{components → src/components}/Input/Input.types.d.ts +1 -1
  16. package/dist/{components → src/components}/Label/Label.types.d.ts +2 -1
  17. package/dist/src/components/Pills/Pills.d.ts +2 -0
  18. package/dist/src/components/Pills/Pills.js +31 -0
  19. package/dist/src/components/Pills/Pills.stories.d.ts +14 -0
  20. package/dist/src/components/Pills/Pills.stories.js +76 -0
  21. package/dist/src/components/Pills/Pills.types.d.ts +9 -0
  22. package/dist/src/components/Pills/index.d.ts +2 -0
  23. package/dist/src/components/Pills/index.js +2 -0
  24. package/dist/{components → src/components}/RadioGroup/RadioGroup.js +1 -1
  25. package/dist/src/components/RadioGroup/RadioGroup.types.d.ts +5 -0
  26. package/dist/src/components/Select/Select.d.ts +14 -0
  27. package/dist/src/components/Select/Select.js +25 -0
  28. package/dist/src/components/Select/Select.stories.d.ts +10 -0
  29. package/dist/src/components/Select/Select.stories.js +33 -0
  30. package/dist/src/components/Select/Select.types.d.ts +11 -0
  31. package/dist/src/components/Select/index.d.ts +2 -0
  32. package/dist/src/components/Select/index.js +2 -0
  33. package/dist/src/components/SelectWrapper/SelectWrapper.d.ts +2 -0
  34. package/dist/src/components/SelectWrapper/SelectWrapper.js +8 -0
  35. package/dist/src/components/SelectWrapper/SelectWrapper.stories.d.ts +12 -0
  36. package/dist/src/components/SelectWrapper/SelectWrapper.stories.js +83 -0
  37. package/dist/src/components/SelectWrapper/SelectWrapper.types.d.ts +15 -0
  38. package/dist/src/components/SelectWrapper/index.d.ts +2 -0
  39. package/dist/src/components/SelectWrapper/index.js +2 -0
  40. package/dist/src/components/SelectWrapper/select.d.ts +13 -0
  41. package/dist/src/components/SelectWrapper/select.js +25 -0
  42. package/dist/{components → src/components}/Switch/Switch.d.ts +1 -1
  43. package/dist/{components → src/components}/Switch/Switch.js +15 -15
  44. package/dist/{components → src/components}/Switch/Switch.types.d.ts +2 -2
  45. package/dist/src/components/Table/Pagination/PaginationControls.d.ts +2 -0
  46. package/dist/src/components/Table/Pagination/PaginationControls.js +11 -0
  47. package/dist/src/components/Table/Pagination/PaginationControls.types.d.ts +9 -0
  48. package/dist/src/components/Table/Pagination/PaginationControls.types.js +1 -0
  49. package/dist/src/components/Table/Pagination/index.d.ts +2 -0
  50. package/dist/src/components/Table/Pagination/index.js +2 -0
  51. package/dist/src/components/Table/Table.d.ts +4 -0
  52. package/dist/src/components/Table/Table.js +32 -0
  53. package/dist/src/components/Table/Table.stories.d.ts +20 -0
  54. package/dist/src/components/Table/Table.stories.js +75 -0
  55. package/dist/src/components/Table/Table.types.d.ts +22 -0
  56. package/dist/src/components/Table/Table.types.js +1 -0
  57. package/dist/src/components/Table/hooks/useTableController.d.ts +13 -0
  58. package/dist/src/components/Table/hooks/useTableController.js +69 -0
  59. package/dist/src/components/Table/table.helpers.d.ts +4 -0
  60. package/dist/src/components/Table/table.helpers.js +24 -0
  61. package/dist/{components → src/components}/Tooltip/Tooltip.stories.d.ts +2 -2
  62. package/dist/{components → src/components}/Tooltip/Tooltip.types.d.ts +1 -1
  63. package/dist/src/components/Tooltip/Tooltip.types.js +1 -0
  64. package/dist/src/components/index.d.ts +10 -0
  65. package/dist/src/components/index.js +10 -0
  66. package/dist/src/config/defaultTheme.d.ts +2 -0
  67. package/dist/{config → src/config}/uikitConfig.d.ts +1 -1
  68. package/dist/src/config/uikitConfig.js +1 -0
  69. package/dist/{context → src/context}/UIKitContext.d.ts +1 -1
  70. package/dist/src/context/UIKitProvider.d.ts +5 -0
  71. package/dist/{context → src/context}/UIKitProvider.js +8 -4
  72. package/dist/{index.d.ts → src/index.d.ts} +1 -3
  73. package/dist/{index.js → src/index.js} +1 -3
  74. package/dist/src/lib/utils.d.ts +2 -0
  75. package/dist/src/lib/utils.js +5 -0
  76. package/package.json +21 -3
  77. package/dist/components/RadioGroup/RadioGroup.types.d.ts +0 -5
  78. package/dist/components/Table/Table.d.ts +0 -36
  79. package/dist/components/Table/Table.js +0 -120
  80. package/dist/components/Table/Table.stories.d.ts +0 -9
  81. package/dist/components/Table/Table.stories.js +0 -19
  82. package/dist/components/Table/Table.types.d.ts +0 -4
  83. package/dist/config/defaultTheme.d.ts +0 -2
  84. package/dist/context/UIKitProvider.d.ts +0 -5
  85. package/dist/index.css +0 -1
  86. package/dist/stories/Header.stories.d.ts +0 -18
  87. package/dist/stories/Header.stories.js +0 -26
  88. package/dist/stories/Page.stories.d.ts +0 -12
  89. package/dist/stories/Page.stories.js +0 -24
  90. /package/dist/{components → src/components}/Button/Button.stories.d.ts +0 -0
  91. /package/dist/{components → src/components}/Button/Button.stories.js +0 -0
  92. /package/dist/{components → src/components}/Button/Button.types.js +0 -0
  93. /package/dist/{components → src/components}/Button/index.d.ts +0 -0
  94. /package/dist/{components → src/components}/Button/index.js +0 -0
  95. /package/dist/{components → src/components}/Checkbox/Checkbox.stories.d.ts +0 -0
  96. /package/dist/{components → src/components}/Checkbox/Checkbox.stories.js +0 -0
  97. /package/dist/{components → src/components}/Checkbox/Checkbox.types.js +0 -0
  98. /package/dist/{components → src/components}/Checkbox/index.d.ts +0 -0
  99. /package/dist/{components → src/components}/Checkbox/index.js +0 -0
  100. /package/dist/{components → src/components}/Divider/Divider.js +0 -0
  101. /package/dist/{components → src/components}/Divider/Divider.stories.d.ts +0 -0
  102. /package/dist/{components → src/components}/Divider/Divider.stories.js +0 -0
  103. /package/dist/{components → src/components}/Divider/Divider.types.d.ts +0 -0
  104. /package/dist/{components → src/components}/Divider/Divider.types.js +0 -0
  105. /package/dist/{components → src/components}/Divider/index.d.ts +0 -0
  106. /package/dist/{components → src/components}/Divider/index.js +0 -0
  107. /package/dist/{components → src/components}/Ellipsis/Ellipsis.functions.d.ts +0 -0
  108. /package/dist/{components → src/components}/Ellipsis/Ellipsis.js +0 -0
  109. /package/dist/{components → src/components}/Ellipsis/Ellipsis.stories.d.ts +0 -0
  110. /package/dist/{components → src/components}/Ellipsis/Ellipsis.stories.js +0 -0
  111. /package/dist/{components → src/components}/Ellipsis/Ellipsis.types.d.ts +0 -0
  112. /package/dist/{components → src/components}/Ellipsis/Ellipsis.types.js +0 -0
  113. /package/dist/{components → src/components}/Ellipsis/index.d.ts +0 -0
  114. /package/dist/{components → src/components}/Ellipsis/index.js +0 -0
  115. /package/dist/{components → src/components}/Input/Input.stories.d.ts +0 -0
  116. /package/dist/{components → src/components}/Input/Input.stories.js +0 -0
  117. /package/dist/{components → src/components}/Input/Input.types.js +0 -0
  118. /package/dist/{components → src/components}/Input/index.d.ts +0 -0
  119. /package/dist/{components → src/components}/Input/index.js +0 -0
  120. /package/dist/{components → src/components}/Label/Label.d.ts +0 -0
  121. /package/dist/{components → src/components}/Label/Label.js +0 -0
  122. /package/dist/{components → src/components}/Label/Label.stories.d.ts +0 -0
  123. /package/dist/{components → src/components}/Label/Label.stories.js +0 -0
  124. /package/dist/{components → src/components}/Label/Label.types.js +0 -0
  125. /package/dist/{components → src/components}/Label/index.d.ts +0 -0
  126. /package/dist/{components → src/components}/Label/index.js +0 -0
  127. /package/dist/{components/RadioGroup/RadioGroup.types.js → src/components/Pills/Pills.types.js} +0 -0
  128. /package/dist/{components → src/components}/RadioGroup/RadioGroup.d.ts +0 -0
  129. /package/dist/{components → src/components}/RadioGroup/RadioGroup.stories.d.ts +0 -0
  130. /package/dist/{components → src/components}/RadioGroup/RadioGroup.stories.js +0 -0
  131. /package/dist/{components/Switch/Switch.types.js → src/components/RadioGroup/RadioGroup.types.js} +0 -0
  132. /package/dist/{components → src/components}/RadioGroup/index.d.ts +0 -0
  133. /package/dist/{components → src/components}/RadioGroup/index.js +0 -0
  134. /package/dist/{components/Table/Table.types.js → src/components/Select/Select.types.js} +0 -0
  135. /package/dist/{components/Tooltip/Tooltip.types.js → src/components/SelectWrapper/SelectWrapper.types.js} +0 -0
  136. /package/dist/{components → src/components}/Switch/Switch.stories.d.ts +0 -0
  137. /package/dist/{components → src/components}/Switch/Switch.stories.js +0 -0
  138. /package/dist/{config/uikitConfig.js → src/components/Switch/Switch.types.js} +0 -0
  139. /package/dist/{components → src/components}/Switch/index.d.ts +0 -0
  140. /package/dist/{components → src/components}/Switch/index.js +0 -0
  141. /package/dist/{components → src/components}/Table/index.d.ts +0 -0
  142. /package/dist/{components → src/components}/Table/index.js +0 -0
  143. /package/dist/{components → src/components}/Tooltip/Tooltip.d.ts +0 -0
  144. /package/dist/{components → src/components}/Tooltip/Tooltip.js +0 -0
  145. /package/dist/{components → src/components}/Tooltip/Tooltip.stories.js +0 -0
  146. /package/dist/{components → src/components}/Tooltip/index.d.ts +0 -0
  147. /package/dist/{components → src/components}/Tooltip/index.js +0 -0
  148. /package/dist/{config → src/config}/defaultTheme.js +0 -0
  149. /package/dist/{config → src/config}/index.d.ts +0 -0
  150. /package/dist/{config → src/config}/index.js +0 -0
  151. /package/dist/{context → src/context}/UIKitContext.js +0 -0
  152. /package/dist/{context → src/context}/useUIKitTheme.d.ts +0 -0
  153. /package/dist/{context → src/context}/useUIKitTheme.js +0 -0
  154. /package/dist/{hooks → src/hooks}/useToggle.d.ts +0 -0
  155. /package/dist/{hooks → src/hooks}/useToggle.js +0 -0
  156. /package/dist/{stories → src/stories}/Header.d.ts +0 -0
  157. /package/dist/{stories → src/stories}/Header.js +0 -0
  158. /package/dist/{stories → src/stories}/Page.d.ts +0 -0
  159. /package/dist/{stories → src/stories}/Page.js +0 -0
  160. /package/dist/{types → src/types}/index.d.ts +0 -0
  161. /package/dist/{types → src/types}/index.js +0 -0
  162. /package/dist/{utils → src/utils}/classNames.d.ts +0 -0
  163. /package/dist/{utils → src/utils}/classNames.js +0 -0
@@ -10,18 +10,22 @@ const mergeTheme = (user) => {
10
10
  };
11
11
  };
12
12
  function applyThemeToRoot(theme) {
13
- if (typeof window === 'undefined')
13
+ if (typeof window === 'undefined') {
14
14
  return;
15
+ }
15
16
  const root = document.documentElement;
16
17
  const { colors = {}, radius, fontFamily } = theme;
17
18
  Object.entries(colors).forEach(([key, value]) => {
18
- if (value)
19
+ if (value) {
19
20
  root.style.setProperty(`--uikit-${key}`, value);
21
+ }
20
22
  });
21
- if (radius)
23
+ if (radius) {
22
24
  root.style.setProperty('--uikit-radius', radius);
23
- if (fontFamily)
25
+ }
26
+ if (fontFamily) {
24
27
  root.style.setProperty('--uikit-font-family', fontFamily);
28
+ }
25
29
  }
26
30
  export const UIKitProvider = ({ config, children }) => {
27
31
  const mergedTheme = useMemo(() => mergeTheme(config), [config]);
@@ -1,6 +1,4 @@
1
1
  export { UIKitProvider } from './context/UIKitProvider';
2
2
  export { useUIKitTheme } from './context/useUIKitTheme';
3
- export * from './components/Button';
4
- export * from './components/Input';
5
- export * from './components/Table';
3
+ export * from './components';
6
4
  export * from './types';
@@ -1,6 +1,4 @@
1
1
  export { UIKitProvider } from './context/UIKitProvider';
2
2
  export { useUIKitTheme } from './context/useUIKitTheme';
3
- export * from './components/Button';
4
- export * from './components/Input';
5
- export * from './components/Table';
3
+ export * from './components';
6
4
  export * from './types';
@@ -0,0 +1,2 @@
1
+ import { type ClassValue } from 'clsx';
2
+ export declare function cn(...inputs: ClassValue[]): string;
@@ -0,0 +1,5 @@
1
+ import { clsx } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+ export function cn(...inputs) {
4
+ return twMerge(clsx(inputs));
5
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eml-payments/ui-kit",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "private": false,
5
5
  "description": "ARLO UIKit",
6
6
  "homepage": "https://github.com/EML-Payments/arlo.npm.uikit#readme",
@@ -37,12 +37,20 @@
37
37
  "build-storybook": "storybook build",
38
38
  "build": "tsc",
39
39
  "lint": "eslint . --ext .ts,.tsx --fix",
40
- "prepare": "husky install"
40
+ "format": "prettier --list-different \"**/*.{js,jsx,ts,tsx,json,htm,html,yml,yaml}\"",
41
+ "format:fix": "prettier --write \"**/*.{js,jsx,ts,tsx,json,htm,html,yml,yaml}\"",
42
+ "task:prettier": "prettier \"./src/**/*.{ts,tsx}\" --check --log-level error",
43
+ "task:prettier:fix": "prettier --write \"./src/**/*.{ts,tsx}\" --check --log-level error",
44
+ "task:eslint": "eslint \"./src/**/*\" --ext .ts,.tsx --cache",
45
+ "task:eslint:fix": "eslint \"./src/**/*.tsx\" --fix --cache && eslint \"src/**/*.ts\" --fix --cache",
46
+ "task:typecheck": "tsc",
47
+ "formatx": "npm run task:prettier:fix && npm run task:eslint:fix && npm run task:typecheck"
41
48
  },
42
49
  "dependencies": {
43
50
  "@radix-ui/react-checkbox": "^1.3.2",
44
51
  "@radix-ui/react-label": "^2.1.7",
45
52
  "@radix-ui/react-radio-group": "^1.3.7",
53
+ "@radix-ui/react-select": "^2.2.5",
46
54
  "@radix-ui/react-slot": "^1.2.3",
47
55
  "@radix-ui/react-switch": "^1.2.5",
48
56
  "@radix-ui/react-tooltip": "^1.2.7",
@@ -53,19 +61,29 @@
53
61
  "prettier": "^3.6.2",
54
62
  "react": ">=18.0.0",
55
63
  "react-dom": ">=18.0.0",
64
+ "react-icons": "^5.5.0",
56
65
  "tailwind-merge": "^3.3.1",
57
66
  "tailwindcss": "^3.4.1",
58
67
  "tailwindcss-animate": "^1.0.7",
59
68
  "tw-animate-css": "^1.3.5"
60
69
  },
61
70
  "devDependencies": {
71
+ "@storybook/addon-a11y": "^9.0.15",
62
72
  "@storybook/addon-docs": "^9.0.15",
63
73
  "@storybook/addon-onboarding": "^9.0.15",
64
74
  "@storybook/react-vite": "^9.0.15",
65
75
  "@typescript-eslint/eslint-plugin": "^8.35.1",
66
76
  "autoprefixer": "^10.4.13",
67
- "eslint": "^8.56.0",
77
+ "@eslint/js": "^9.30.1",
78
+ "eslint": "^9.31.0",
79
+ "eslint-config-prettier": "^10.1.5",
80
+ "eslint-plugin-import": "^2.32.0",
81
+ "eslint-plugin-jsx-a11y": "^6.10.2",
82
+ "eslint-plugin-prettier": "^5.5.1",
68
83
  "eslint-plugin-react": "^7.37.5",
84
+ "eslint-plugin-react-hooks": "^5.2.0",
85
+ "eslint-plugin-react-refresh": "^0.4.20",
86
+ "typescript-eslint": "^8.36.0",
69
87
  "eslint-plugin-storybook": "^9.0.15",
70
88
  "husky": "^8.0.3",
71
89
  "postcss": "^8.4.21",
@@ -1,5 +0,0 @@
1
- import { ComponentProps } from 'react';
2
- import { RadioGroup as ShadCNRadioGroup } from '@radix-ui/react-radio-group';
3
- export interface RadioGroupProps extends ComponentProps<typeof ShadCNRadioGroup> {
4
- size?: 'sm' | 'md' | 'lg';
5
- }
@@ -1,36 +0,0 @@
1
- import { type ColumnDef, type RowSelectionState } from '@tanstack/react-table';
2
- import { type Dispatch, type ReactNode, type SetStateAction } from 'react';
3
- type PaginationProps = {
4
- pageSize: number;
5
- pageIndex: number;
6
- pageCount: number;
7
- onPageChange: (_pageIndex: number) => void;
8
- onPageSizeChange: (_pageSize: number) => void;
9
- };
10
- type RowAction<T> = {
11
- title: string;
12
- fn: (_row: T) => void;
13
- icon: ReactNode;
14
- className?: string;
15
- };
16
- type TableAction = {
17
- title: string;
18
- fn: () => void;
19
- icon: ReactNode;
20
- className?: string;
21
- };
22
- type TableProps<T extends object> = {
23
- data: T[];
24
- columns: ColumnDef<T, unknown>[];
25
- sortableFields?: string[];
26
- onSortChange?: (_field: string | undefined, _direction: 'asc' | 'desc' | undefined) => void;
27
- selected?: RowSelectionState;
28
- setSelected?: Dispatch<SetStateAction<RowSelectionState>>;
29
- rowIdKey?: keyof T;
30
- rowActions?: RowAction<T>[];
31
- tableActions?: TableAction[];
32
- search?: string;
33
- setSearch?: Dispatch<SetStateAction<string>>;
34
- } & Partial<PaginationProps>;
35
- export declare function Table<T extends object>({ data, search, columns, selected, pageSize, rowIdKey, setSearch, pageIndex, pageCount, rowActions, setSelected, onSortChange, tableActions, onPageChange, onPageSizeChange, sortableFields, }: TableProps<T>): import("react/jsx-runtime").JSX.Element;
36
- export {};
@@ -1,120 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { flexRender, getCoreRowModel, getPaginationRowModel, useReactTable, } from '@tanstack/react-table';
3
- import { useEffect, useMemo, useState } from 'react';
4
- import { Button } from '../Button';
5
- export function Table({ data, search, columns, selected, pageSize, rowIdKey, setSearch, pageIndex, pageCount, rowActions, setSelected, onSortChange, tableActions, onPageChange, onPageSizeChange, sortableFields = [], }) {
6
- const [inputValue, setInputValue] = useState(search !== null && search !== void 0 ? search : '');
7
- useEffect(() => {
8
- if (setSearch) {
9
- setSearch(inputValue);
10
- if (onPageChange) {
11
- onPageChange(0);
12
- }
13
- }
14
- }, [inputValue, setSearch, onPageChange]);
15
- const [sortingField, setSortingField] = useState(undefined);
16
- const [sortingDirection, setSortingDirection] = useState(undefined);
17
- function handleSortClick(key) {
18
- if (!key || !sortableFields.includes(key)) {
19
- return;
20
- }
21
- let nextDir;
22
- if (sortingField !== key) {
23
- nextDir = 'asc';
24
- }
25
- else if (sortingDirection === 'asc') {
26
- nextDir = 'desc';
27
- }
28
- else if (sortingDirection === 'desc') {
29
- nextDir = undefined;
30
- }
31
- else {
32
- nextDir = 'asc';
33
- }
34
- setSortingField(nextDir ? key : undefined);
35
- setSortingDirection(nextDir);
36
- onSortChange === null || onSortChange === void 0 ? void 0 : onSortChange(nextDir ? key : undefined, nextDir);
37
- }
38
- const isSelectionEnabled = selected !== undefined && setSelected !== undefined;
39
- const isPaginationEnabled = pageIndex !== undefined &&
40
- pageSize !== undefined &&
41
- pageCount !== undefined &&
42
- onPageChange !== undefined &&
43
- onPageSizeChange !== undefined;
44
- function getAccessorKey(col) {
45
- return 'accessorKey' in col && typeof col.accessorKey === 'string' ? col.accessorKey : undefined;
46
- }
47
- const internalColumns = useMemo(() => {
48
- const result = [];
49
- if (isSelectionEnabled) {
50
- result.unshift({
51
- id: '__select__',
52
- accessorFn: (row) => row,
53
- enableSorting: false,
54
- header: ({ table }) => {
55
- return (_jsx("input", { type: "checkbox", checked: table.getIsAllPageRowsSelected(), onChange: table.getToggleAllRowsSelectedHandler() }));
56
- },
57
- cell: ({ row }) => {
58
- return (_jsx("input", { type: "checkbox", checked: row.getIsSelected(), disabled: !row.getCanSelect(), onChange: row.getToggleSelectedHandler() }));
59
- },
60
- });
61
- }
62
- for (const col of columns) {
63
- const key = getAccessorKey(col);
64
- result.push({
65
- ...col,
66
- enableSorting: key ? sortableFields.includes(key) : false,
67
- });
68
- }
69
- if (rowActions) {
70
- result.push({
71
- id: '__actions__',
72
- accessorFn: (row) => row,
73
- enableSorting: false,
74
- header: 'Actions',
75
- cell: (info) => (_jsx("div", { className: "flex gap-2", children: rowActions.map((action) => (_jsx(Button, { title: action.title, "aria-label": action.title, className: action.className, onClick: () => action.fn(info.row.original), children: action.icon }, action.title))) })),
76
- });
77
- }
78
- return result;
79
- }, [columns, sortableFields, rowActions, isSelectionEnabled]);
80
- const table = useReactTable({
81
- data,
82
- manualSorting: true,
83
- columns: internalColumns,
84
- getCoreRowModel: getCoreRowModel(),
85
- manualPagination: isPaginationEnabled,
86
- enableRowSelection: isSelectionEnabled,
87
- ...(rowIdKey && {
88
- getRowId: (row) => String(row[rowIdKey]),
89
- }),
90
- ...(isPaginationEnabled && { getPaginationRowModel: getPaginationRowModel() }),
91
- state: {
92
- ...(isSelectionEnabled && { rowSelection: selected }),
93
- ...(isPaginationEnabled && { pagination: { pageIndex, pageSize } }),
94
- },
95
- ...(isSelectionEnabled && { onRowSelectionChange: setSelected }),
96
- ...(isPaginationEnabled && {
97
- onPaginationChange: (updater) => {
98
- const next = typeof updater === 'function' ? updater({ pageIndex, pageSize }) : updater;
99
- onPageChange(next.pageIndex);
100
- onPageSizeChange(next.pageSize);
101
- },
102
- }),
103
- });
104
- let sortIcon;
105
- if (sortingDirection === 'asc') {
106
- sortIcon = ' 🔼';
107
- }
108
- else if (sortingDirection === 'desc') {
109
- sortIcon = ' 🔽';
110
- }
111
- else {
112
- sortIcon = null;
113
- }
114
- return (_jsxs("div", { children: [_jsxs("div", { className: "flex justify-between", children: [setSearch && (_jsx("div", { className: "mb-4", children: _jsx("input", { type: "text", value: inputValue, placeholder: "Search\u2026", className: "border px-3 py-2 w-full max-w-sm", onChange: (e) => setInputValue(e.target.value) }) })), tableActions && (_jsx("div", { className: "mb-2 flex gap-2", children: tableActions.map((action) => (_jsxs(Button, { onClick: action.fn, title: action.title, "aria-label": action.title, className: action.className, children: [action.icon, action.title] }, action.title))) }))] }), _jsxs("table", { className: "table-auto w-full border border-gray-300 border-collapse", children: [_jsx("thead", { children: table.getHeaderGroups().map((headerGroup) => (_jsx("tr", { className: "bg-gray-100", children: headerGroup.headers.map((header) => {
115
- const key = getAccessorKey(header.column.columnDef);
116
- return (_jsx("th", { className: "border border-gray-300 px-4 py-2 text-left", children: header.isPlaceholder ? null : (_jsxs("div", { className: header.column.getCanSort()
117
- ? 'cursor-pointer select-none'
118
- : undefined, onClick: () => handleSortClick(key), children: [flexRender(header.column.columnDef.header, header.getContext()), sortingField === key && sortIcon] })) }, header.id));
119
- }) }, headerGroup.id))) }), _jsx("tbody", { children: table.getRowModel().rows.length ? (table.getRowModel().rows.map((row) => (_jsx("tr", { className: row.getIsSelected() ? 'bg-blue-100' : undefined, children: row.getVisibleCells().map((cell) => (_jsx("td", { className: "border border-gray-300 px-4 py-2", children: flexRender(cell.column.columnDef.cell, cell.getContext()) }, cell.id))) }, row.id)))) : (_jsx("tr", { children: _jsx("td", { colSpan: internalColumns.length, children: _jsx("div", { className: "p-4 text-center", children: _jsx("h2", { children: "\u041D\u044F\u043C\u0430 \u043D\u0430\u043B\u0438\u0447\u043D\u0438 \u0434\u0430\u043D\u043D\u0438" }) }) }) })) })] }), isPaginationEnabled && (_jsxs("div", { className: "mt-4 flex items-center gap-2", children: [_jsx("button", { onClick: () => onPageChange(pageIndex - 1), disabled: pageIndex === 0, className: "px-3 py-1 bg-gray-200 rounded disabled:opacity-50", children: "Previous" }), _jsx("button", { onClick: () => onPageChange(pageIndex + 1), disabled: pageIndex + 1 >= pageCount, className: "px-3 py-1 bg-gray-200 rounded disabled:opacity-50", children: "Next" }), _jsxs("span", { className: "ml-2", children: ["Page ", pageIndex + 1, " of ", pageCount] }), _jsx("select", { value: pageSize, onChange: (e) => onPageSizeChange(Number(e.target.value)), className: "ml-4 border border-gray-300 px-2 py-1", children: [10, 20, 30, 50].map((size) => (_jsxs("option", { value: size, children: ["Show ", size] }, size))) })] }))] }));
120
- }
@@ -1,9 +0,0 @@
1
- import { Table } from './Table';
2
- declare const _default: {
3
- title: string;
4
- component: typeof Table;
5
- };
6
- export default _default;
7
- export declare const Basic: {
8
- render: () => import("react/jsx-runtime").JSX.Element;
9
- };
@@ -1,19 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Table } from './Table';
3
- const data = [
4
- { name: 'Alice', email: 'alice@email.com', role: 'Admin' },
5
- { name: 'Bob', email: 'bob@email.com', role: 'User' },
6
- { name: 'Charlie', email: 'charlie@email.com', role: 'User' },
7
- ];
8
- const columns = [
9
- { header: 'Name', accessorKey: 'name' },
10
- { header: 'Email', accessorKey: 'email' },
11
- { header: 'Role', accessorKey: 'role' },
12
- ];
13
- export default {
14
- title: 'UIKit/Table',
15
- component: Table,
16
- };
17
- export const Basic = {
18
- render: () => _jsx(Table, { data: data, columns: columns }),
19
- };
@@ -1,4 +0,0 @@
1
- import { TableOptions } from '@tanstack/react-table';
2
- export interface TableProps<T> extends TableOptions<T> {
3
- className?: string;
4
- }
@@ -1,2 +0,0 @@
1
- import { UIKitConfig } from './uikitConfig';
2
- export declare const defaultTheme: UIKitConfig;
@@ -1,5 +0,0 @@
1
- import React, { PropsWithChildren } from 'react';
2
- import { UIKitConfig } from '../config/uikitConfig';
3
- export declare const UIKitProvider: React.FC<PropsWithChildren<{
4
- config?: UIKitConfig;
5
- }>>;
package/dist/index.css DELETED
@@ -1 +0,0 @@
1
- *,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background:0 0% 100%;--foreground:0 0% 3.9%;--card:0 0% 100%;--card-foreground:0 0% 3.9%;--popover:0 0% 100%;--popover-foreground:0 0% 3.9%;--primary:0 0% 9%;--primary-foreground:0 0% 98%;--secondary:0 0% 96.1%;--secondary-foreground:0 0% 9%;--muted:0 0% 96.1%;--muted-foreground:0 0% 45.1%;--accent:0 0% 96.1%;--accent-foreground:0 0% 9%;--destructive:0 84.2% 60.2%;--destructive-foreground:0 0% 98%;--border:0 0% 89.8%;--input:0 0% 89.8%;--ring:0 0% 3.9%;--chart-1:12 76% 61%;--chart-2:173 58% 39%;--chart-3:197 37% 24%;--chart-4:43 74% 66%;--chart-5:27 87% 67%;--radius:0.5rem}.dark{--background:0 0% 3.9%;--foreground:0 0% 98%;--card:0 0% 3.9%;--card-foreground:0 0% 98%;--popover:0 0% 3.9%;--popover-foreground:0 0% 98%;--primary:0 0% 98%;--primary-foreground:0 0% 9%;--secondary:0 0% 14.9%;--secondary-foreground:0 0% 98%;--muted:0 0% 14.9%;--muted-foreground:0 0% 63.9%;--accent:0 0% 14.9%;--accent-foreground:0 0% 98%;--destructive:0 62.8% 30.6%;--destructive-foreground:0 0% 98%;--border:0 0% 14.9%;--input:0 0% 14.9%;--ring:0 0% 83.1%;--chart-1:220 70% 50%;--chart-2:160 60% 45%;--chart-3:30 80% 55%;--chart-4:280 65% 60%;--chart-5:340 75% 55%}*{border-color:hsl(var(--border))}body{background-color:hsl(var(--background));color:hsl(var(--foreground))}.pointer-events-none{pointer-events:none}.static{position:static}.absolute{position:absolute}.relative{position:relative}.inset-y-0{top:0;bottom:0}.right-3{right:.75rem}.z-50{z-index:50}.mb-2{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.ml-2{margin-left:.5rem}.ml-4{margin-left:1rem}.mt-4{margin-top:1rem}.block{display:block}.inline-block{display:inline-block}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.aspect-square{aspect-ratio:1/1}.h-10{height:2.5rem}.h-24{height:6rem}.h-3{height:.75rem}.h-3\.5{height:.875rem}.h-4{height:1rem}.h-5{height:1.25rem}.h-6{height:1.5rem}.h-7{height:1.75rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[15px\]{height:15px}.h-\[24px\]{height:24px}.h-full{height:100%}.h-px{height:1px}.w-11{width:2.75rem}.w-14{width:3.5rem}.w-3{width:.75rem}.w-3\.5{width:.875rem}.w-4{width:1rem}.w-5{width:1.25rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[15px\]{width:15px}.w-\[200px\]{width:200px}.w-\[42px\]{width:42px}.w-full{width:100%}.w-px{width:1px}.max-w-sm{max-width:24rem}.max-w-xs{max-width:20rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.table-auto{table-layout:auto}.border-collapse{border-collapse:collapse}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes spin{to{transform:rotate(1turn)}}.animate-spin{animation:spin 1s linear infinite}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-row{flex-direction:row}.flex-row-reverse{flex-direction:row-reverse}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.gap-3{gap:.75rem}.gap-4{gap:1rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(.5rem*var(--tw-space-x-reverse));margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.overflow-hidden,.truncate{overflow:hidden}.truncate{white-space:nowrap}.text-ellipsis,.truncate{text-overflow:ellipsis}.whitespace-nowrap{white-space:nowrap}.break-words{overflow-wrap:break-word}.rounded{border-radius:var(--uikit-radius,.5rem)}.rounded-full{border-radius:9999px}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.border{border-width:1px}.border-2{border-width:2px}.border-\[var\(--uikit-primary\)\]{border-color:var(--uikit-primary)}.border-\[var\(--uikit-secondary\)\]{border-color:var(--uikit-secondary)}.border-black{--tw-border-opacity:1;border-color:rgb(0 0 0/var(--tw-border-opacity,1))}.border-error{border-color:var(--uikit-error,#d7263d)}.border-gray-300{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.border-input{border-color:hsl(var(--input))}.border-primary{border-color:hsl(var(--primary))}.bg-\[var\(--uikit-error\)\]{background-color:var(--uikit-error)}.bg-\[var\(--uikit-info\)\]{background-color:var(--uikit-info)}.bg-\[var\(--uikit-primary\)\]{background-color:var(--uikit-primary)}.bg-background{background-color:hsl(var(--background))}.bg-blue-100{--tw-bg-opacity:1;background-color:rgb(219 234 254/var(--tw-bg-opacity,1))}.bg-gray-100{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-200{--tw-bg-opacity:1;background-color:rgb(229 231 235/var(--tw-bg-opacity,1))}.bg-muted{background-color:hsl(var(--muted))}.bg-transparent{background-color:transparent}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.fill-primary{fill:hsl(var(--primary))}.p-2{padding:.5rem}.p-4{padding:1rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-1\.5{padding-top:.375rem;padding-bottom:.375rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pl-3{padding-left:.75rem}.text-left{text-align:left}.text-center{text-align:center}.text-base{font-size:1rem;line-height:1.5rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xs{font-size:.75rem;line-height:1rem}.font-\[var\(--uikit-font-family\)\]{font-weight:var(--uikit-font-family)}.font-bold{font-weight:700}.font-medium{font-weight:500}.leading-none{line-height:1}.text-\[var\(--uikit-secondary\)\]{color:var(--uikit-secondary)}.text-\[var\(--uikit-text-primary\)\]{color:var(--uikit-text-primary)}.text-blue-500{--tw-text-opacity:1;color:rgb(59 130 246/var(--tw-text-opacity,1))}.text-current{color:currentColor}.text-error{color:var(--uikit-error,#d7263d)}.text-foreground{color:hsl(var(--foreground))}.text-primary{color:hsl(var(--primary))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.opacity-70{opacity:.7}.shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.shadow,.shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-transform{transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0) scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1)) rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0) scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1)) rotate(var(--tw-exit-rotate,0))}}:root{--uikit-primary:#0a5fff;--uikit-secondary:#71717b;--uikit-tertiary:#f3f5fb;--uikit-accent:#e3ecff;--uikit-success:#16c784;--uikit-warning:#f4b740;--uikit-error:#d7263d;--uikit-info:#fef9bf;--uikit-radius:8px;--uikit-font-family:Inter,system-ui,sans-serif;--uikit-text-primary:#27272a}.file\:border-0::file-selector-button{border-width:0}.file\:bg-transparent::file-selector-button{background-color:transparent}.file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.file\:font-medium::file-selector-button{font-weight:500}.file\:text-foreground::file-selector-button{color:hsl(var(--foreground))}.placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.hover\:border:hover{border-width:1px}.hover\:border-\[var\(--uikit-primary\)\]:hover{border-color:var(--uikit-primary)}.hover\:bg-\[var\(--uikit-secondary\)\]:hover{background-color:var(--uikit-secondary)}.hover\:bg-transparent:hover{background-color:transparent}.hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.focus\:border-\[var\(--uikit-primary\)\]:focus{border-color:var(--uikit-primary)}.focus\:border-\[var\(--uikit-secondary\)\]:focus{border-color:var(--uikit-secondary)}.focus\:bg-\[var\(--uikit-error\)\]:focus{background-color:var(--uikit-error)}.focus\:bg-\[var\(--uikit-primary\)\]:focus{background-color:var(--uikit-primary)}.focus\:bg-white:focus{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.focus\:text-\[var\(--uikit-secondary\)\]:focus{color:var(--uikit-secondary)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.focus-visible\:ring-error:focus-visible{--tw-ring-color:var(--uikit-error,#d7263d)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color:hsl(var(--background))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x:1rem}.data-\[state\=checked\]\:translate-x-4[data-state=checked],.data-\[state\=checked\]\:translate-x-5[data-state=checked]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-5[data-state=checked]{--tw-translate-x:1.25rem}.data-\[state\=checked\]\:translate-x-7[data-state=checked]{--tw-translate-x:1.75rem}.data-\[state\=checked\]\:translate-x-7[data-state=checked],.data-\[state\=checked\]\:translate-x-\[20px\][data-state=checked]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:translate-x-\[20px\][data-state=checked]{--tw-translate-x:20px}.data-\[state\=unchecked\]\:translate-x-\[2px\][data-state=unchecked]{--tw-translate-x:2px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.data-\[state\=checked\]\:bg-\[var\(--uikit-primary\)\][data-state=checked]{background-color:var(--uikit-primary)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=unchecked\]\:bg-black[data-state=unchecked]{--tw-bg-opacity:1;background-color:rgb(0 0 0/var(--tw-bg-opacity,1))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}@media (min-width:640px){.sm\:max-w-sm{max-width:24rem}}@media (min-width:768px){.md\:max-w-md{max-width:28rem}.md\:text-sm{font-size:.875rem;line-height:1.25rem}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:h-3 svg{height:.75rem}.\[\&_svg\]\:h-4 svg{height:1rem}.\[\&_svg\]\:w-3 svg{width:.75rem}.\[\&_svg\]\:w-4 svg{width:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}
@@ -1,18 +0,0 @@
1
- import type { StoryObj } from '@storybook/react-vite';
2
- declare const meta: {
3
- title: string;
4
- component: ({ user, onLogin, onLogout, onCreateAccount }: import("./Header").HeaderProps) => import("react/jsx-runtime").JSX.Element;
5
- tags: string[];
6
- parameters: {
7
- layout: string;
8
- };
9
- args: {
10
- onLogin: import("@vitest/spy").Mock<(...args: any[]) => any>;
11
- onLogout: import("@vitest/spy").Mock<(...args: any[]) => any>;
12
- onCreateAccount: import("@vitest/spy").Mock<(...args: any[]) => any>;
13
- };
14
- };
15
- export default meta;
16
- type Story = StoryObj<typeof meta>;
17
- export declare const LoggedIn: Story;
18
- export declare const LoggedOut: Story;
@@ -1,26 +0,0 @@
1
- import { fn } from 'storybook/test';
2
- import { Header } from './Header';
3
- const meta = {
4
- title: 'Example/Header',
5
- component: Header,
6
- // This component will have an automatically generated Autodocs entry: https://storybook.js.org/docs/writing-docs/autodocs
7
- tags: ['autodocs'],
8
- parameters: {
9
- // More on how to position stories at: https://storybook.js.org/docs/configure/story-layout
10
- layout: 'fullscreen',
11
- },
12
- args: {
13
- onLogin: fn(),
14
- onLogout: fn(),
15
- onCreateAccount: fn(),
16
- },
17
- };
18
- export default meta;
19
- export const LoggedIn = {
20
- args: {
21
- user: {
22
- name: 'Jane Doe',
23
- },
24
- },
25
- };
26
- export const LoggedOut = {};
@@ -1,12 +0,0 @@
1
- import type { StoryObj } from '@storybook/react-vite';
2
- declare const meta: {
3
- title: string;
4
- component: import("react").FC<{}>;
5
- parameters: {
6
- layout: string;
7
- };
8
- };
9
- export default meta;
10
- type Story = StoryObj<typeof meta>;
11
- export declare const LoggedOut: Story;
12
- export declare const LoggedIn: Story;
@@ -1,24 +0,0 @@
1
- import { expect, userEvent, within } from 'storybook/test';
2
- import { Page } from './Page';
3
- const meta = {
4
- title: 'Example/Page',
5
- component: Page,
6
- parameters: {
7
- // More on how to position stories at: https://storybook.js.org/docs/configure/story-layout
8
- layout: 'fullscreen',
9
- },
10
- };
11
- export default meta;
12
- export const LoggedOut = {};
13
- // More on component testing: https://storybook.js.org/docs/writing-tests/interaction-testing
14
- export const LoggedIn = {
15
- play: async ({ canvasElement }) => {
16
- const canvas = within(canvasElement);
17
- const loginButton = canvas.getByRole('button', { name: /Log in/i });
18
- await expect(loginButton).toBeInTheDocument();
19
- await userEvent.click(loginButton);
20
- await expect(loginButton).not.toBeInTheDocument();
21
- const logoutButton = canvas.getByRole('button', { name: /Log out/i });
22
- await expect(logoutButton).toBeInTheDocument();
23
- },
24
- };
File without changes
File without changes
File without changes
File without changes