@teppen/react-ui 1.10.2 → 2.0.1

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 (190) hide show
  1. package/README.md +73 -6
  2. package/dist/cjs/node_modules/react-icons/bi/index.js.map +1 -1
  3. package/dist/cjs/node_modules/react-icons/lib/iconBase.js.map +1 -1
  4. package/dist/cjs/node_modules/react-icons/lib/iconContext.js.map +1 -1
  5. package/dist/cjs/node_modules/react-icons/lu/index.js.map +1 -1
  6. package/dist/cjs/node_modules/react-icons/md/index.js.map +1 -1
  7. package/dist/cjs/node_modules/react-icons/ti/index.js.map +1 -1
  8. package/dist/cjs/node_modules/tslib/tslib.es6.js +1 -1
  9. package/dist/cjs/node_modules/tslib/tslib.es6.js.map +1 -1
  10. package/dist/cjs/src/file-uploader/hook.js +1 -1
  11. package/dist/cjs/src/file-uploader/hook.js.map +1 -1
  12. package/dist/cjs/src/search-bar/condition-search-bar/base.js +1 -2
  13. package/dist/cjs/src/search-bar/condition-search-bar/base.js.map +1 -1
  14. package/dist/cjs/src/search-bar/condition-search-bar/condition-list.js +1 -2
  15. package/dist/cjs/src/search-bar/condition-search-bar/condition-list.js.map +1 -1
  16. package/dist/cjs/src/search-bar/condition-search-bar/input-form.js +1 -2
  17. package/dist/cjs/src/search-bar/condition-search-bar/input-form.js.map +1 -1
  18. package/dist/cjs/src/search-bar/id-generator/provider.js +1 -2
  19. package/dist/cjs/src/search-bar/id-generator/provider.js.map +1 -1
  20. package/dist/cjs/src/select-box/index.js +1 -2
  21. package/dist/cjs/src/select-box/index.js.map +1 -1
  22. package/dist/cjs/src/select-box/options-window/component.js +1 -1
  23. package/dist/cjs/src/select-box/options-window/component.js.map +1 -1
  24. package/dist/cjs/src/select-box/parts/input-area.js +1 -2
  25. package/dist/cjs/src/select-box/parts/input-area.js.map +1 -1
  26. package/dist/cjs/src/select-box/provider.js +1 -2
  27. package/dist/cjs/src/select-box/provider.js.map +1 -1
  28. package/dist/cjs/src/table/cell/ui/cell.js +1 -2
  29. package/dist/cjs/src/table/cell/ui/cell.js.map +1 -1
  30. package/dist/cjs/src/table/checkbox/components.js +1 -2
  31. package/dist/cjs/src/table/checkbox/components.js.map +1 -1
  32. package/dist/cjs/src/table/copy/format.js +2 -0
  33. package/dist/cjs/src/table/copy/format.js.map +1 -0
  34. package/dist/cjs/src/table/copy/hooks.js +1 -1
  35. package/dist/cjs/src/table/copy/hooks.js.map +1 -1
  36. package/dist/cjs/src/table/edit/provider.js +1 -2
  37. package/dist/cjs/src/table/edit/provider.js.map +1 -1
  38. package/dist/cjs/src/table/edit/ui/base-input.js +1 -2
  39. package/dist/cjs/src/table/edit/ui/base-input.js.map +1 -1
  40. package/dist/cjs/src/table/edit/ui/editor.js.map +1 -1
  41. package/dist/cjs/src/table/edit/ui/number-input.js +1 -2
  42. package/dist/cjs/src/table/edit/ui/number-input.js.map +1 -1
  43. package/dist/cjs/src/table/edit/ui/select-input.js +1 -2
  44. package/dist/cjs/src/table/edit/ui/select-input.js.map +1 -1
  45. package/dist/cjs/src/table/edit/ui/string-input.js +1 -2
  46. package/dist/cjs/src/table/edit/ui/string-input.js.map +1 -1
  47. package/dist/cjs/src/table/filter-v2/hook.js +1 -1
  48. package/dist/cjs/src/table/filter-v2/hook.js.map +1 -1
  49. package/dist/cjs/src/table/frame/frame.js +1 -2
  50. package/dist/cjs/src/table/frame/frame.js.map +1 -1
  51. package/dist/cjs/src/table/header/columns-width/provider.js +1 -2
  52. package/dist/cjs/src/table/header/columns-width/provider.js.map +1 -1
  53. package/dist/cjs/src/table/header/columns-width/reducer.js +1 -1
  54. package/dist/cjs/src/table/header/columns-width/reducer.js.map +1 -1
  55. package/dist/cjs/src/table/header/header-v2-hook.js +1 -1
  56. package/dist/cjs/src/table/header/header-v2-hook.js.map +1 -1
  57. package/dist/cjs/src/table/header/header-v2.js +1 -1
  58. package/dist/cjs/src/table/header/header-v2.js.map +1 -1
  59. package/dist/cjs/src/table/header/header.js +1 -2
  60. package/dist/cjs/src/table/header/header.js.map +1 -1
  61. package/dist/cjs/src/table/id/provider.js +1 -1
  62. package/dist/cjs/src/table/id/provider.js.map +1 -1
  63. package/dist/cjs/src/table/operation/components/keyboard-setting.js +1 -2
  64. package/dist/cjs/src/table/operation/components/keyboard-setting.js.map +1 -1
  65. package/dist/cjs/src/table/operation/event-target.js +2 -0
  66. package/dist/cjs/src/table/operation/event-target.js.map +1 -0
  67. package/dist/cjs/src/table/pagenation/components.js +1 -2
  68. package/dist/cjs/src/table/pagenation/components.js.map +1 -1
  69. package/dist/cjs/src/table/pagenation/hooks.js +1 -1
  70. package/dist/cjs/src/table/pagenation/hooks.js.map +1 -1
  71. package/dist/cjs/src/table/pagenation/providers.js +1 -2
  72. package/dist/cjs/src/table/pagenation/providers.js.map +1 -1
  73. package/dist/cjs/src/table/paste/hooks.js +1 -1
  74. package/dist/cjs/src/table/paste/hooks.js.map +1 -1
  75. package/dist/cjs/src/table/paste/logic.js +1 -1
  76. package/dist/cjs/src/table/paste/logic.js.map +1 -1
  77. package/dist/cjs/src/table/paste/parse.js +2 -0
  78. package/dist/cjs/src/table/paste/parse.js.map +1 -0
  79. package/dist/cjs/src/table/paste/provider.js +1 -1
  80. package/dist/cjs/src/table/paste/provider.js.map +1 -1
  81. package/dist/cjs/src/table/sheet/components.js +1 -1
  82. package/dist/cjs/src/table/sheet/components.js.map +1 -1
  83. package/dist/cjs/src/table/sheet/providers.js +1 -2
  84. package/dist/cjs/src/table/sheet/providers.js.map +1 -1
  85. package/dist/cjs/src/table/sort/components.js +1 -2
  86. package/dist/cjs/src/table/sort/components.js.map +1 -1
  87. package/dist/cjs/src/table/sort/provider.js +1 -2
  88. package/dist/cjs/src/table/sort/provider.js.map +1 -1
  89. package/dist/cjs/src/table/table/base.js +1 -2
  90. package/dist/cjs/src/table/table/base.js.map +1 -1
  91. package/dist/cjs/src/table/table/component-provider/provider.js +1 -2
  92. package/dist/cjs/src/table/table/component-provider/provider.js.map +1 -1
  93. package/dist/cjs/src/table/table/hook.js +1 -1
  94. package/dist/cjs/src/table/table/hook.js.map +1 -1
  95. package/dist/esm/node_modules/react-icons/bi/index.js.map +1 -1
  96. package/dist/esm/node_modules/react-icons/lib/iconBase.js.map +1 -1
  97. package/dist/esm/node_modules/react-icons/lib/iconContext.js.map +1 -1
  98. package/dist/esm/node_modules/react-icons/lu/index.js.map +1 -1
  99. package/dist/esm/node_modules/react-icons/md/index.js.map +1 -1
  100. package/dist/esm/node_modules/react-icons/ti/index.js.map +1 -1
  101. package/dist/esm/node_modules/tslib/tslib.es6.js +1 -1
  102. package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -1
  103. package/dist/esm/package.json +3 -0
  104. package/dist/esm/src/file-uploader/hook.js +1 -1
  105. package/dist/esm/src/file-uploader/hook.js.map +1 -1
  106. package/dist/esm/src/search-bar/condition-search-bar/base.js +1 -2
  107. package/dist/esm/src/search-bar/condition-search-bar/base.js.map +1 -1
  108. package/dist/esm/src/search-bar/condition-search-bar/condition-list.js +1 -2
  109. package/dist/esm/src/search-bar/condition-search-bar/condition-list.js.map +1 -1
  110. package/dist/esm/src/search-bar/condition-search-bar/input-form.js +1 -2
  111. package/dist/esm/src/search-bar/condition-search-bar/input-form.js.map +1 -1
  112. package/dist/esm/src/search-bar/id-generator/provider.js +1 -2
  113. package/dist/esm/src/search-bar/id-generator/provider.js.map +1 -1
  114. package/dist/esm/src/select-box/index.js +1 -2
  115. package/dist/esm/src/select-box/index.js.map +1 -1
  116. package/dist/esm/src/select-box/options-window/component.js +1 -1
  117. package/dist/esm/src/select-box/options-window/component.js.map +1 -1
  118. package/dist/esm/src/select-box/parts/input-area.js +1 -2
  119. package/dist/esm/src/select-box/parts/input-area.js.map +1 -1
  120. package/dist/esm/src/select-box/provider.js +1 -2
  121. package/dist/esm/src/select-box/provider.js.map +1 -1
  122. package/dist/esm/src/table/cell/ui/cell.js +1 -2
  123. package/dist/esm/src/table/cell/ui/cell.js.map +1 -1
  124. package/dist/esm/src/table/checkbox/components.js +1 -2
  125. package/dist/esm/src/table/checkbox/components.js.map +1 -1
  126. package/dist/esm/src/table/copy/format.js +2 -0
  127. package/dist/esm/src/table/copy/format.js.map +1 -0
  128. package/dist/esm/src/table/copy/hooks.js +1 -1
  129. package/dist/esm/src/table/copy/hooks.js.map +1 -1
  130. package/dist/esm/src/table/edit/provider.js +1 -2
  131. package/dist/esm/src/table/edit/provider.js.map +1 -1
  132. package/dist/esm/src/table/edit/ui/base-input.js +1 -2
  133. package/dist/esm/src/table/edit/ui/base-input.js.map +1 -1
  134. package/dist/esm/src/table/edit/ui/editor.js.map +1 -1
  135. package/dist/esm/src/table/edit/ui/number-input.js +1 -2
  136. package/dist/esm/src/table/edit/ui/number-input.js.map +1 -1
  137. package/dist/esm/src/table/edit/ui/select-input.js +1 -2
  138. package/dist/esm/src/table/edit/ui/select-input.js.map +1 -1
  139. package/dist/esm/src/table/edit/ui/string-input.js +1 -2
  140. package/dist/esm/src/table/edit/ui/string-input.js.map +1 -1
  141. package/dist/esm/src/table/filter-v2/hook.js +1 -1
  142. package/dist/esm/src/table/filter-v2/hook.js.map +1 -1
  143. package/dist/esm/src/table/frame/frame.js +1 -2
  144. package/dist/esm/src/table/frame/frame.js.map +1 -1
  145. package/dist/esm/src/table/header/columns-width/provider.js +1 -2
  146. package/dist/esm/src/table/header/columns-width/provider.js.map +1 -1
  147. package/dist/esm/src/table/header/columns-width/reducer.js +1 -1
  148. package/dist/esm/src/table/header/columns-width/reducer.js.map +1 -1
  149. package/dist/esm/src/table/header/header-v2-hook.js +1 -1
  150. package/dist/esm/src/table/header/header-v2-hook.js.map +1 -1
  151. package/dist/esm/src/table/header/header-v2.js +1 -1
  152. package/dist/esm/src/table/header/header-v2.js.map +1 -1
  153. package/dist/esm/src/table/header/header.js +1 -2
  154. package/dist/esm/src/table/header/header.js.map +1 -1
  155. package/dist/esm/src/table/id/provider.js +1 -1
  156. package/dist/esm/src/table/id/provider.js.map +1 -1
  157. package/dist/esm/src/table/operation/components/keyboard-setting.js +1 -2
  158. package/dist/esm/src/table/operation/components/keyboard-setting.js.map +1 -1
  159. package/dist/esm/src/table/operation/event-target.js +2 -0
  160. package/dist/esm/src/table/operation/event-target.js.map +1 -0
  161. package/dist/esm/src/table/pagenation/components.js +1 -2
  162. package/dist/esm/src/table/pagenation/components.js.map +1 -1
  163. package/dist/esm/src/table/pagenation/hooks.js +1 -1
  164. package/dist/esm/src/table/pagenation/hooks.js.map +1 -1
  165. package/dist/esm/src/table/pagenation/providers.js +1 -2
  166. package/dist/esm/src/table/pagenation/providers.js.map +1 -1
  167. package/dist/esm/src/table/paste/hooks.js +1 -1
  168. package/dist/esm/src/table/paste/hooks.js.map +1 -1
  169. package/dist/esm/src/table/paste/logic.js +1 -1
  170. package/dist/esm/src/table/paste/logic.js.map +1 -1
  171. package/dist/esm/src/table/paste/parse.js +2 -0
  172. package/dist/esm/src/table/paste/parse.js.map +1 -0
  173. package/dist/esm/src/table/paste/provider.js +1 -1
  174. package/dist/esm/src/table/paste/provider.js.map +1 -1
  175. package/dist/esm/src/table/sheet/components.js +1 -1
  176. package/dist/esm/src/table/sheet/components.js.map +1 -1
  177. package/dist/esm/src/table/sheet/providers.js +1 -2
  178. package/dist/esm/src/table/sheet/providers.js.map +1 -1
  179. package/dist/esm/src/table/sort/components.js +1 -2
  180. package/dist/esm/src/table/sort/components.js.map +1 -1
  181. package/dist/esm/src/table/sort/provider.js +1 -2
  182. package/dist/esm/src/table/sort/provider.js.map +1 -1
  183. package/dist/esm/src/table/table/base.js +1 -2
  184. package/dist/esm/src/table/table/base.js.map +1 -1
  185. package/dist/esm/src/table/table/component-provider/provider.js +1 -2
  186. package/dist/esm/src/table/table/component-provider/provider.js.map +1 -1
  187. package/dist/esm/src/table/table/hook.js +1 -1
  188. package/dist/esm/src/table/table/hook.js.map +1 -1
  189. package/dist/index.d.ts +13 -1
  190. package/package.json +1 -3
package/README.md CHANGED
@@ -7,6 +7,7 @@ This is a React component library that provides some useful UI elements for your
7
7
  This library includes the following components:
8
8
 
9
9
  - Table: A simple Table. (1.0.0 ~) (※ Not compatible with 0.\*.\*)
10
+ - FileUploader: A drop area and file picker with file type and size checks.
10
11
 
11
12
  ## Installation
12
13
 
@@ -210,8 +211,8 @@ export default App;
210
211
  A component that displays a table based on the row and column information passed as arguments. The table component has the following features:
211
212
 
212
213
  - Pagination function
213
- - Sorting function
214
- - Filtering function (only when `label` is set in the column information)
214
+ - Sorting function (except for columns that use `render` while `editable` is false, or that set `disableSort`)
215
+ - Filtering function (only when `label` is set in the column information; the same columns as sorting are excluded, and `disableFilter` turns it off)
215
216
  - Editing function (only when `editable` is true and `onCellBlur` is set in the column information)
216
217
  - Checkbox function
217
218
  - Paste function
@@ -219,7 +220,13 @@ A component that displays a table based on the row and column information passed
219
220
 
220
221
  #### Arguments
221
222
 
222
- The table component only accepts the arguments `rows`, `cols`, `initialCondition`, `onClickRow`, `onUpdateRow`, `applyRowFormatting`, `conditionalFormattings`. Details for each argument are described below.
223
+ The table component accepts the arguments `id`, `rows`, `cols`, `initialCondition`, `onClickRow`, `onUpdateRow`, `onPasteError`, `errorHandler`, `applyRowFormatting`, `checkbox`, `conditionalFormattings`, `maxHeight` and `maxWidth`. Details for each argument are described below.
224
+
225
+ All of these types are exported from the package, e.g. `import type { TTableColumn, TPropsTable } from "@teppen/react-ui";`.
226
+
227
+ ##### id
228
+
229
+ `id` is used for the element ids inside the table. It is optional; without it, each table gets a unique id automatically.
223
230
 
224
231
  ##### rows
225
232
 
@@ -227,11 +234,13 @@ The table component only accepts the arguments `rows`, `cols`, `initialCondition
227
234
 
228
235
  ```ts
229
236
  export type DataObject = {
230
- [key: string]: number | string;
237
+ [key: string]: number | string | Date;
231
238
  id: number | string;
232
239
  };
233
240
  ```
234
241
 
242
+ The row objects you pass are given back unchanged to callbacks such as `onClickRow`, `onCellBlur` and `checkbox`, so `Date` values stay `Date` objects.
243
+
235
244
  ※ `onClick` property has been deprecated since version 1.0.0 in favor of the new Table argument `onClickRow`
236
245
 
237
246
  ##### cols
@@ -241,7 +250,7 @@ In `cols`, you specify the data to be displayed in the table from left to right.
241
250
  it is not necessary to always include the key `label`, but it is required for some functions, so it is recommended to set it.
242
251
 
243
252
  ```ts
244
- export type TColumnType = "string" | "number" | "select";
253
+ export type TColumnType = "string" | "number" | "select" | "date" | "datetime";
245
254
 
246
255
  export type TTableColumn = {
247
256
  key: string;
@@ -252,6 +261,8 @@ export type TTableColumn = {
252
261
  options: { value: string; label: string }[]; // Only When "type" is "select"
253
262
  editable?: boolean;
254
263
  render?: (value: string | number, row: DataObject) => React.ReactNode; // Only When "editable" is false
264
+ // When "type" is "date" or "datetime", "render" is required and "editable" must be false:
265
+ // render: (value: Date) => React.ReactNode;
255
266
  allowEmpty?: boolean; // Only When "type" is "select"
256
267
  constraints?: {
257
268
  maxLength?: number; // Only when "type" is "string"
@@ -270,7 +281,7 @@ export type TTableColumn = {
270
281
  ```
271
282
 
272
283
  ※ TColumnType no longer supports `component` since version 1.0.0. Instead, `render`
273
- is now supported, allowing for sorting and filtering functions that were not previously supported by `component`.
284
+ is now supported. Columns that use `render` (when `editable` is false) are not sortable or filterable, because what they display may differ from the underlying value.
274
285
 
275
286
  ##### initialCondition
276
287
 
@@ -297,11 +308,36 @@ type TOnClickRow = (row: DataObject) => void;
297
308
 
298
309
  In `onUpdateRow`, You can define the behavior when you paste data from Excel or spreadsheets into a table. This is optional.
299
310
  For multi-line data, this function is executed one line at a time.
311
+ Pasted data is read as tab-separated cells, as copied from Excel or Google Sheets. For number columns, values such as `1,000` are accepted.
300
312
 
301
313
  ```ts
302
314
  type TOnUpdateRow = (newRow: DataObject, oldRow: DataObject) => void;
303
315
  ```
304
316
 
317
+ ##### onPasteError
318
+
319
+ In `onPasteError`, you can handle pasted data that cannot be applied, for example when it does not fit in the table or targets a column that is not editable. This is optional; if it is not set, the message is shown with `window.alert`.
320
+ Invalid values are reported to `errorHandler` instead.
321
+
322
+ ```ts
323
+ type TOnPasteError = (error: {
324
+ type: "NOT_ENOUGH_ROWS" | "NOT_ENOUGH_COLUMNS" | "NOT_EDITABLE_COLUMN";
325
+ message: string;
326
+ }) => void;
327
+ ```
328
+
329
+ ##### errorHandler
330
+
331
+ In `errorHandler`, you can handle values that break a column's `constraints` (when editing a cell or pasting). This is optional; if it is not set, the errors are shown with `window.alert`.
332
+
333
+ ```ts
334
+ type TErrorHandler = (errors: TErrorValidation[]) => void;
335
+ ```
336
+
337
+ ##### maxHeight / maxWidth
338
+
339
+ CSS sizes (e.g. `"600px"`) that limit the table area. The table scrolls inside it.
340
+
305
341
  ##### applyRowFormatting
306
342
 
307
343
  In `applyRowFormatting`, depending on the status of each row, you can define the format of the row using TailwindCSS classes. In principle, TailwindCSS classes other than background and text color are not guaranteed to work, but any class can be specified.
@@ -343,6 +379,37 @@ type TConditionalFormatting = {
343
379
  };
344
380
  ```
345
381
 
382
+ ### FileUploader Component
383
+
384
+ A drop area that also opens the file picker when clicked.
385
+
386
+ ```tsx
387
+ import { FileUploader } from "@teppen/react-ui";
388
+
389
+ <FileUploader
390
+ allowedExtensions={[".pdf", ".xlsx"]}
391
+ maxFileSize={10 * 1024 * 1024}
392
+ onFilesAdded={(files) => console.log(files)}
393
+ onFilesRejected={(files) => console.log("rejected", files)}
394
+ />;
395
+ ```
396
+
397
+ Files are checked as follows:
398
+
399
+ - With only `allowedExtensions`, only the extension is checked. With only `acceptedFileTypes` (MIME types such as `"image/*"`), only the MIME type is checked.
400
+ - With neither or both, a file is accepted if it matches either list. The defaults cover common images, Office documents, PDF, text and archives.
401
+ - Files larger than `maxFileSize` (bytes) are rejected.
402
+
403
+ For a custom UI, use the `useFileUploader` hook, which returns the props for the drop area and the hidden file input.
404
+
405
+ ## Breaking changes since 1.10.2
406
+
407
+ - Table callbacks (`onClickRow`, `applyRowFormatting`, `checkbox`, `onCellBlur`, `onUpdateRow`) receive the row objects passed in `rows` as they are. Before, some of them received copies in which `Date` values had become ISO strings.
408
+ - FileUploader: when only `allowedExtensions` or only `acceptedFileTypes` is given, files are checked against that list alone. Before, files that matched the other (default) list were also accepted.
409
+ - Read-only columns without `render` can now be sorted and filtered. Use `disableSort` / `disableFilter` to turn this off.
410
+ - Copying a `datetime` cell gives `YYYY-MM-DD HH:mm:ss` in local time instead of an ISO string in UTC.
411
+ - Pasted text is split only on tabs, so a value such as `a,b` stays in one cell.
412
+
346
413
  ## License
347
414
 
348
415
  This library is licensed under MIT license. See LICENSE file for more information.