@worknice/whiteboard 0.14.0 → 0.15.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.
@@ -199,12 +199,12 @@
199
199
 
200
200
  @media (min-width: 1440px) {
201
201
  .centerLayoutContent-OXDuxB {
202
- padding: var(--size-p5) var(--size-p5);
202
+ padding: var(--size-p4) var(--size-p4);
203
203
  }
204
204
  }
205
205
 
206
206
  .narrowLayoutContent-v6PtTH {
207
- padding: 70px var(--size-00) var(--size-00);
207
+ padding: 60px var(--size-00) var(--size-00);
208
208
  grid-template-columns: minmax(0, 720px);
209
209
  justify-content: center;
210
210
  display: grid;
@@ -212,19 +212,19 @@
212
212
 
213
213
  @media (min-width: 768px) {
214
214
  .narrowLayoutContent-v6PtTH {
215
- padding: 70px var(--size-p3) var(--size-p3);
215
+ padding: 60px var(--size-p3) var(--size-p3);
216
216
  }
217
217
  }
218
218
 
219
219
  @media (min-width: 1440px) {
220
220
  .narrowLayoutContent-v6PtTH {
221
- padding: 70px var(--size-p5) var(--size-p5);
221
+ padding: 60px var(--size-p4) var(--size-p4);
222
222
  }
223
223
  }
224
224
 
225
225
  .content-kaxfp0 {
226
226
  column-gap: var(--size-p2);
227
- padding-top: 70px;
227
+ padding-top: 60px;
228
228
  padding-bottom: var(--size-00);
229
229
  padding-left: var(--size-00);
230
230
  padding-right: var(--size-00);
@@ -234,7 +234,7 @@
234
234
 
235
235
  @media (min-width: 768px) {
236
236
  .content-kaxfp0 {
237
- padding: 70px var(--size-p3) var(--size-p3);
237
+ padding: 60px var(--size-p3) var(--size-p3);
238
238
  }
239
239
  }
240
240
 
@@ -255,9 +255,9 @@
255
255
 
256
256
  @media (min-width: 1440px) {
257
257
  .content-kaxfp0 {
258
- padding-bottom: var(--size-p5);
259
- padding-left: var(--size-p5);
260
- padding-right: var(--size-p5);
258
+ padding-bottom: var(--size-p4);
259
+ padding-left: var(--size-p4);
260
+ padding-right: var(--size-p4);
261
261
  }
262
262
  }
263
263
 
@@ -8,18 +8,20 @@
8
8
  }
9
9
 
10
10
  .main-dwl9Kv {
11
- padding: 70px var(--size-00) var(--size-00);
11
+ padding: 60px var(--size-00) var(--size-00);
12
12
  }
13
13
 
14
14
  @media (min-width: 768px) {
15
15
  .main-dwl9Kv {
16
- padding: 70px var(--size-p3) var(--size-p3);
16
+ padding: 60px var(--size-p3) var(--size-p3);
17
17
  }
18
18
  }
19
19
 
20
- @media (min-width: 1024px) {
20
+ @media (min-width: 1440px) {
21
21
  .main-dwl9Kv {
22
- padding: var(--size-p5);
22
+ padding-bottom: var(--size-p4);
23
+ padding-left: var(--size-p4);
24
+ padding-right: var(--size-p4);
23
25
  }
24
26
  }
25
27
 
@@ -62,10 +62,9 @@ type Props<Type> = {
62
62
  estimatedRowSize?: number;
63
63
  emptyState?: ReactNode;
64
64
  id?: string;
65
- showRowCount?: boolean;
66
65
  pathName?: string;
67
66
  localStorageSchema?: ZodTypeAny;
68
67
  getRowId: (row: Type) => string;
69
68
  };
70
- declare const Table: <Type>({ data, columns, bulkActions, secondaryBulkActions, csvFilename, estimatedRowSize, emptyState, pathName, id, showRowCount, localStorageSchema, getRowId, }: Props<Type>) => import("react/jsx-runtime").JSX.Element;
69
+ declare const Table: <Type>({ data, columns, bulkActions, secondaryBulkActions, csvFilename, estimatedRowSize, emptyState, pathName, id, localStorageSchema, getRowId, }: Props<Type>) => import("react/jsx-runtime").JSX.Element;
71
70
  export default Table;
@@ -21,7 +21,7 @@ import * as __WEBPACK_EXTERNAL_MODULE__PlainText_js_cd0b6798__ from "./PlainText
21
21
  import * as __WEBPACK_EXTERNAL_MODULE__Table_module_js_1c0e33be__ from "./Table.module.js";
22
22
  import * as __WEBPACK_EXTERNAL_MODULE__VStack_js_02eb6792__ from "./VStack.js";
23
23
  const selectColumnId = "_selectColumn";
24
- const Table = ({ data, columns, bulkActions = [], secondaryBulkActions = [], csvFilename, estimatedRowSize = 100, emptyState = "No results", pathName, id, showRowCount = true, localStorageSchema, getRowId })=>{
24
+ const Table = ({ data, columns, bulkActions = [], secondaryBulkActions = [], csvFilename, estimatedRowSize = 100, emptyState = "No results", pathName, id, localStorageSchema, getRowId })=>{
25
25
  const [searchTerm, setSearchTerm] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)("");
26
26
  const lastSelectedRow = (0, __WEBPACK_EXTERNAL_MODULE_react__.useRef)(void 0);
27
27
  const { refs, x: bulkSelectionModalXCoordinate } = (0, __WEBPACK_EXTERNAL_MODULE__floating_ui_react_dom_d5bb3c23__.useFloating)({
@@ -336,9 +336,9 @@ const Table = ({ data, columns, bulkActions = [], secondaryBulkActions = [], csv
336
336
  }) : null
337
337
  ]
338
338
  }) : null,
339
- showRowCount || showSearchReset ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)(__WEBPACK_EXTERNAL_MODULE__HStack_js_cc26058d__["default"], {
339
+ showSearchReset ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)(__WEBPACK_EXTERNAL_MODULE__HStack_js_cc26058d__["default"], {
340
340
  children: [
341
- showRowCount ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("p", {
341
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("p", {
342
342
  children: [
343
343
  "Showing ",
344
344
  table.getPreGroupedRowModel().flatRows.length,
@@ -346,8 +346,8 @@ const Table = ({ data, columns, bulkActions = [], secondaryBulkActions = [], csv
346
346
  " ",
347
347
  table.getPreFilteredRowModel().flatRows.length
348
348
  ]
349
- }) : null,
350
- showSearchReset ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__controls_Button_js_f591ba2e__["default"], {
349
+ }),
350
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__controls_Button_js_f591ba2e__["default"], {
351
351
  onClick: ()=>{
352
352
  table.setColumnFilters(columnFiltersInitialState);
353
353
  table.resetGlobalFilter();
@@ -356,7 +356,7 @@ const Table = ({ data, columns, bulkActions = [], secondaryBulkActions = [], csv
356
356
  type: "secondary",
357
357
  size: "small",
358
358
  children: "Reset filters and search"
359
- }) : null
359
+ })
360
360
  ]
361
361
  }) : null,
362
362
  /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
@@ -461,7 +461,7 @@ const Table = ({ data, columns, bulkActions = [], secondaryBulkActions = [], csv
461
461
  ]
462
462
  })
463
463
  }),
464
- showRowCount || shouldShowCsvExport ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
464
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
465
465
  className: __WEBPACK_EXTERNAL_MODULE__Table_module_js_1c0e33be__["default"].downloadLink,
466
466
  children: [
467
467
  /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("p", {
@@ -479,7 +479,7 @@ const Table = ({ data, columns, bulkActions = [], secondaryBulkActions = [], csv
479
479
  children: "Download all rows as CSV"
480
480
  }) : null
481
481
  ]
482
- }) : null
482
+ })
483
483
  ]
484
484
  })
485
485
  ]
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,107 @@
1
+ import * as __WEBPACK_EXTERNAL_MODULE_vitest__ from "vitest";
2
+ import * as __WEBPACK_EXTERNAL_MODULE__isValidDate_js_ab620b77__ from "./isValidDate.js";
3
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.describe)("isValidDate", ()=>{
4
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.it)("returns null for null values", ()=>{
5
+ const validator = (0, __WEBPACK_EXTERNAL_MODULE__isValidDate_js_ab620b77__["default"])("date");
6
+ const result = validator({
7
+ date: null
8
+ });
9
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.expect)(result).toBeNull();
10
+ });
11
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.it)("returns null for undefined values", ()=>{
12
+ const validator = (0, __WEBPACK_EXTERNAL_MODULE__isValidDate_js_ab620b77__["default"])("date");
13
+ const result = validator({});
14
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.expect)(result).toBeNull();
15
+ });
16
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.it)("returns null for valid date strings", ()=>{
17
+ const validator = (0, __WEBPACK_EXTERNAL_MODULE__isValidDate_js_ab620b77__["default"])("date");
18
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.expect)(validator({
19
+ date: "2023-12-25"
20
+ })).toBeNull();
21
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.expect)(validator({
22
+ date: "2023-01-01"
23
+ })).toBeNull();
24
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.expect)(validator({
25
+ date: "2024-02-29"
26
+ })).toBeNull();
27
+ });
28
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.it)("returns error for invalid date strings", ()=>{
29
+ const validator = (0, __WEBPACK_EXTERNAL_MODULE__isValidDate_js_ab620b77__["default"])("date");
30
+ const result = validator({
31
+ date: "invalid-date"
32
+ });
33
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.expect)(result).toEqual({
34
+ id: __WEBPACK_EXTERNAL_MODULE_vitest__.expect.any(String),
35
+ field: "date",
36
+ message: "Invalid date."
37
+ });
38
+ });
39
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.it)("returns error for invalid date formats", ()=>{
40
+ const validator = (0, __WEBPACK_EXTERNAL_MODULE__isValidDate_js_ab620b77__["default"])("date");
41
+ const result = validator({
42
+ date: "25/12/2023"
43
+ });
44
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.expect)(result).toEqual({
45
+ id: __WEBPACK_EXTERNAL_MODULE_vitest__.expect.any(String),
46
+ field: "date",
47
+ message: "Invalid date."
48
+ });
49
+ });
50
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.it)("returns error for impossible dates", ()=>{
51
+ const validator = (0, __WEBPACK_EXTERNAL_MODULE__isValidDate_js_ab620b77__["default"])("date");
52
+ const result = validator({
53
+ date: "2023-02-30"
54
+ });
55
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.expect)(result).toEqual({
56
+ id: __WEBPACK_EXTERNAL_MODULE_vitest__.expect.any(String),
57
+ field: "date",
58
+ message: "Invalid date."
59
+ });
60
+ });
61
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.it)("returns null for empty strings", ()=>{
62
+ const validator = (0, __WEBPACK_EXTERNAL_MODULE__isValidDate_js_ab620b77__["default"])("date");
63
+ const result = validator({
64
+ date: ""
65
+ });
66
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.expect)(result).toBeNull();
67
+ });
68
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.it)("returns null for whitespace-only strings", ()=>{
69
+ const validator = (0, __WEBPACK_EXTERNAL_MODULE__isValidDate_js_ab620b77__["default"])("date");
70
+ const result = validator({
71
+ date: " "
72
+ });
73
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.expect)(result).toBeNull();
74
+ });
75
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.it)("uses custom error message when provided", ()=>{
76
+ const validator = (0, __WEBPACK_EXTERNAL_MODULE__isValidDate_js_ab620b77__["default"])("birthDate", "Please enter a valid birth date.");
77
+ const result = validator({
78
+ birthDate: "invalid"
79
+ });
80
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.expect)(result).toEqual({
81
+ id: __WEBPACK_EXTERNAL_MODULE_vitest__.expect.any(String),
82
+ field: "birthDate",
83
+ message: "Please enter a valid birth date."
84
+ });
85
+ });
86
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.it)("works with different field names", ()=>{
87
+ const validator = (0, __WEBPACK_EXTERNAL_MODULE__isValidDate_js_ab620b77__["default"])("startDate");
88
+ const result = validator({
89
+ startDate: "not-a-date"
90
+ });
91
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.expect)(result).toEqual({
92
+ id: __WEBPACK_EXTERNAL_MODULE_vitest__.expect.any(String),
93
+ field: "startDate",
94
+ message: "Invalid date."
95
+ });
96
+ });
97
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.it)("generates unique IDs for each error", ()=>{
98
+ const validator = (0, __WEBPACK_EXTERNAL_MODULE__isValidDate_js_ab620b77__["default"])("date");
99
+ const result1 = validator({
100
+ date: "invalid1"
101
+ });
102
+ const result2 = validator({
103
+ date: "invalid2"
104
+ });
105
+ (0, __WEBPACK_EXTERNAL_MODULE_vitest__.expect)(result1?.id).not.toEqual(result2?.id);
106
+ });
107
+ });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@worknice/whiteboard",
3
3
  "description": "",
4
- "version": "0.14.0",
4
+ "version": "0.15.0",
5
5
  "license": "MIT",
6
6
  "private": false,
7
7
  "files": [
@@ -38,7 +38,7 @@
38
38
  "react-markdown": "^10.1.0",
39
39
  "utf8": "^3.0.0",
40
40
  "zod": "^3.22.3",
41
- "@worknice/utils": "^0.6.36"
41
+ "@worknice/utils": "^0.6.37"
42
42
  },
43
43
  "devDependencies": {
44
44
  "@anolilab/semantic-release-pnpm": "^1.1.10",
@@ -70,7 +70,8 @@
70
70
  "semantic-release-scope-filter": "^1.0.0",
71
71
  "temporal-polyfill": "^0.2.5",
72
72
  "typescript": "~5.5.0",
73
- "uuid": "^11.0.5"
73
+ "uuid": "^11.0.5",
74
+ "vitest": "^2.1.0"
74
75
  },
75
76
  "peerDependencies": {
76
77
  "@react-email/components": "^0.0.7",
@@ -87,7 +88,8 @@
87
88
  "fix": "if [[ -z $TURBO_HASH ]]; then pnpm turbo fix; else exit 0; fi",
88
89
  "fix:lint": "eslint \"src/**/*.{js,ts,tsx}\" --fix",
89
90
  "fix:format": "prettier '**/*.{js,ts,tsx,css}' --write",
90
- "test": "exit 0",
91
+ "test": "vitest run",
92
+ "test:unit": "vitest run",
91
93
  "test:format": "prettier '**/*.{js,ts,tsx,css}' --check",
92
94
  "test:lint": "eslint \"src/**/*.{js,ts,tsx}\"",
93
95
  "test:types": "tsc --noEmit --pretty"