@nova-design-system/nova-react 3.23.0 → 3.24.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.
Files changed (74) hide show
  1. package/dist/cjs/events.utils-B6GgGra--01N__3wY.js +23 -0
  2. package/dist/cjs/generated/components.server.js +47 -0
  3. package/dist/cjs/{grow.animation-CvHGHBL4-DDIEYBK-.js → grow.animation-D7ep_aVl-BuXEDSK-.js} +0 -21
  4. package/dist/cjs/{i18n.utils-DOZbXX2L-BizoXo6c.js → i18n.utils-IlwlcG9l-ku0bScip.js} +14 -18
  5. package/dist/cjs/{index-CtjeeUI-.js → index-kU2nW5aN.js} +1589 -920
  6. package/dist/cjs/{nv-dialog.entry-O47Eol_7.js → index.esm-D3eWMME9-CG1TVKfu.js} +1 -296
  7. package/dist/cjs/index.js +4 -1
  8. package/dist/cjs/{nv-accordion-item.entry-B_l0-ux0.js → nv-accordion-item.entry-Bu1tAcCq.js} +1 -1
  9. package/dist/cjs/{nv-accordion.entry-BX8_YuZF.js → nv-accordion.entry-jWjLdX8w.js} +3 -8
  10. package/dist/cjs/{nv-alert.entry-DCWYR0OK.js → nv-alert.entry-E9ZJay_K.js} +2 -3
  11. package/dist/cjs/{nv-avatar.entry-C_xZD3Lp.js → nv-avatar.entry-CUX7u0kR.js} +1 -1
  12. package/dist/cjs/{nv-badge_2.entry-JjqANStV.js → nv-badge_2.entry-bxpV5gxE.js} +2 -2
  13. package/dist/cjs/{nv-breadcrumb.entry-DQZDn6cm.js → nv-breadcrumb.entry-Cbbb9Qeh.js} +1 -1
  14. package/dist/cjs/{nv-breadcrumbs.entry-Bz0GjhY_.js → nv-breadcrumbs.entry-BTqnp9zO.js} +1 -1
  15. package/dist/cjs/{nv-button.entry-Br1DH9Vj.js → nv-button.entry-upWH19y6.js} +4 -6
  16. package/dist/cjs/{nv-buttongroup.entry-BZaTKN_n.js → nv-buttongroup.entry-CuZCRsnV.js} +1 -1
  17. package/dist/cjs/{nv-calendar.entry-D9ESuu7C.js → nv-calendar.entry-CT3mASW6.js} +15 -25
  18. package/dist/cjs/{nv-col.entry-CfgPMMxS.js → nv-col.entry--pCxkaTh.js} +1 -1
  19. package/dist/cjs/{nv-datagrid.entry-DcB5q2oC.js → nv-datagrid.entry-CGCEhO8C.js} +68 -73
  20. package/dist/cjs/{nv-datagridcolumn.entry-BhKOzXA6.js → nv-datagridcolumn.entry-Fsqc7CT_.js} +1 -1
  21. package/dist/cjs/nv-dialog.entry-B6OYcZxQ.js +300 -0
  22. package/dist/cjs/{nv-dialogfooter_2.entry-Dn16bI8a.js → nv-dialogfooter_2.entry-C4fP_n2-.js} +1 -1
  23. package/dist/cjs/nv-drawer.entry-C5O4KvHU.js +445 -0
  24. package/dist/cjs/nv-drawerfooter_2.entry-C-reYJXG.js +146 -0
  25. package/dist/cjs/{nv-fieldcheckbox.entry-Bx6ArV_b.js → nv-fieldcheckbox.entry-bk7UNQny.js} +7 -7
  26. package/dist/cjs/{nv-fielddate.entry-B4P0U8QG.js → nv-fielddate.entry-dqZDBVmm.js} +13 -16
  27. package/dist/cjs/{nv-fielddaterange.entry-BORwYJ-k.js → nv-fielddaterange.entry-wNRasXky.js} +13 -14
  28. package/dist/cjs/{nv-fielddropdown.entry-DzBAIynY.js → nv-fielddropdown.entry-BA15piWa.js} +40 -49
  29. package/dist/cjs/{nv-fielddropdownitem.entry-C_17isWd.js → nv-fielddropdownitem.entry-DEWaf9dC.js} +3 -4
  30. package/dist/cjs/{nv-fieldmultiselect.entry-DiqRreWh.js → nv-fieldmultiselect.entry-BWY5xOAd.js} +35 -43
  31. package/dist/cjs/{nv-fieldnumber.entry-C9O4UPp3.js → nv-fieldnumber.entry-DoYORd0d.js} +7 -7
  32. package/dist/cjs/{nv-fieldpassword.entry-BfVJNT0A.js → nv-fieldpassword.entry-CPaLj9aD.js} +7 -7
  33. package/dist/cjs/{nv-fieldradio.entry-CG22oETM.js → nv-fieldradio.entry-CvUmEaCa.js} +5 -5
  34. package/dist/cjs/{nv-fieldselect.entry-BPQEtrv2.js → nv-fieldselect.entry-uUIZ6hmN.js} +9 -9
  35. package/dist/cjs/{nv-fieldslider.entry-CozmnUfN.js → nv-fieldslider.entry-DnvmxxYY.js} +6 -6
  36. package/dist/cjs/{nv-fieldtext.entry-BD-z01ru.js → nv-fieldtext.entry-BYAJp3n_.js} +7 -7
  37. package/dist/cjs/{nv-fieldtextarea.entry-7UrKWDHg.js → nv-fieldtextarea.entry-DU2bWYeg.js} +7 -8
  38. package/dist/cjs/{nv-fieldtime.entry-DakOlLiO.js → nv-fieldtime.entry-DlMNDTht.js} +28 -36
  39. package/dist/cjs/{nv-icon.entry-Db00kB2u.js → nv-icon.entry-CnUkRzaA.js} +3 -3
  40. package/dist/cjs/{nv-iconbutton_2.entry-CaKCa8NT.js → nv-iconbutton_2.entry-hqp4AcRq.js} +6 -7
  41. package/dist/cjs/{nv-menu.entry-CK2HdmBt.js → nv-menu.entry-Dc_FvIx7.js} +4 -5
  42. package/dist/cjs/{nv-menuitem.entry-mKMqCAdz.js → nv-menuitem.entry-DzMhx6c_.js} +2 -2
  43. package/dist/cjs/{nv-notification-bullet.entry-DtbjtFxs.js → nv-notification-bullet.entry-BwhHCMQF.js} +2 -3
  44. package/dist/cjs/{nv-notification.entry-CLb0gNu3.js → nv-notification.entry-C3m5p5BL.js} +11 -97
  45. package/dist/cjs/{nv-notificationcontainer.entry-Cijivlm6.js → nv-notificationcontainer.entry-DTRNn7VE.js} +2 -2
  46. package/dist/cjs/{nv-popover.entry-mLdLSp6n.js → nv-popover.entry-B0c-2rO4.js} +15 -15
  47. package/dist/cjs/{nv-row.entry-C2C94fcv.js → nv-row.entry-CdcjVGZv.js} +2 -2
  48. package/dist/cjs/{nv-sidebar.entry-inDVNJ4s.js → nv-sidebar.entry-CiN813gQ.js} +4 -4
  49. package/dist/cjs/{nv-sidebarcontent.entry-DxoljE15.js → nv-sidebarcontent.entry-D9hpAhK8.js} +2 -2
  50. package/dist/cjs/{nv-sidebardivider.entry-D_yern0R.js → nv-sidebardivider.entry-B4EMyca5.js} +2 -2
  51. package/dist/cjs/{nv-sidebarfooter.entry-Rkkn9TB_.js → nv-sidebarfooter.entry-CHi4qOFe.js} +2 -2
  52. package/dist/cjs/{nv-sidebargroup.entry-C1p9qqxr.js → nv-sidebargroup.entry-RVqrsyIU.js} +2 -2
  53. package/dist/cjs/{nv-sidebarheader.entry-CYpD_4pI.js → nv-sidebarheader.entry-_7ch0O3G.js} +2 -2
  54. package/dist/cjs/{nv-sidebarlogo.entry-BgK03M1v.js → nv-sidebarlogo.entry-Ch9F-JnT.js} +2 -2
  55. package/dist/cjs/{nv-sidebarnavitem.entry-DglvcCOD.js → nv-sidebarnavitem.entry-DVrafSMr.js} +5 -6
  56. package/dist/cjs/{nv-sidebarnavsubitem.entry-Dt1jKmC-.js → nv-sidebarnavsubitem.entry-C0XDAzma.js} +2 -2
  57. package/dist/cjs/{nv-split.entry-mzg2F66T.js → nv-split.entry-0HTslRAX.js} +44 -42
  58. package/dist/cjs/{nv-stack.entry-nnvjTrBy.js → nv-stack.entry-CqO7uTQf.js} +2 -2
  59. package/dist/cjs/{nv-table.entry-DkbNgxtI.js → nv-table.entry-DH85n8Mc.js} +7 -9
  60. package/dist/cjs/{nv-tableheader.entry-CRVFTQA-.js → nv-tableheader.entry-CKfocdxD.js} +3 -3
  61. package/dist/cjs/{nv-toggle.entry-oC9TVkr1.js → nv-toggle.entry-BHUl76Im.js} +3 -3
  62. package/dist/cjs/nv-togglebutton.entry-D_9COjY-.js +67 -0
  63. package/dist/cjs/{nv-togglebuttongroup.entry-BYXX5ejg.js → nv-togglebuttongroup.entry-C0NLbsq7.js} +4 -5
  64. package/dist/cjs/{nv-tooltip.entry-OJGxfJEh.js → nv-tooltip.entry-BfViGE_U.js} +2 -2
  65. package/dist/cjs/slide.animation-CmH5d1of-BZuw607U.js +90 -0
  66. package/dist/components/NvDatatable/NvDatatable.js +40 -24
  67. package/dist/generated/components.js +27 -0
  68. package/dist/generated/components.server.js +44 -0
  69. package/dist/types/components/NvDatatable/NvDatatable.d.ts +1 -1
  70. package/dist/types/components/NvDatatable/types.d.ts +8 -3
  71. package/dist/types/generated/components.d.ts +14 -0
  72. package/dist/types/generated/components.server.d.ts +14 -0
  73. package/package.json +1 -1
  74. package/dist/cjs/nv-togglebutton.entry-BTWCzbS9.js +0 -67
@@ -0,0 +1,90 @@
1
+ 'use strict';
2
+
3
+ var fade_animationDcRL9lcm = require('./fade.animation-DcRL9lcm-DAZeHoKN.js');
4
+ var styleValueTypes_esXlgmw4x8 = require('./style-value-types.es-xlgmw4x8-B1vLqX9m.js');
5
+
6
+ const useSlide = (node, { duration } = { duration: 200 }) => {
7
+ const nodeStyler = fade_animationDcRL9lcm.index(node);
8
+ /**
9
+ * Will animate the translateX property.
10
+ *
11
+ * @param {object} options - The options for the animation.
12
+ * @param {number} options.from - The starting value for the translateX property.
13
+ * @param {number} options.to - The ending value for the translateX property.
14
+ * @returns {Promise<void>} - A promise that resolves when the animation is
15
+ * complete.
16
+ */
17
+ const slideX = (options = { from: 0, to: 100 }) => () => {
18
+ return new Promise(resolve => {
19
+ styleValueTypes_esXlgmw4x8.animate({
20
+ from: { x: options.from },
21
+ to: { x: options.to },
22
+ ease: styleValueTypes_esXlgmw4x8.easeOut,
23
+ duration,
24
+ onUpdate(latest) {
25
+ nodeStyler.set({ transform: `translateX(${latest.x}%)` });
26
+ },
27
+ onComplete() {
28
+ resolve();
29
+ },
30
+ });
31
+ });
32
+ };
33
+ /**
34
+ * Will animate the translateY property.
35
+ *
36
+ * @param {object} options - The options for the animation.
37
+ * @param {number} options.from - The starting value for the translateY property.
38
+ * @param {number} options.to - The ending value for the translateY property.
39
+ * @returns {Promise<void>} - A promise that resolves when the animation is
40
+ * complete.
41
+ */
42
+ const slideY = (options = { from: 0, to: 100 }) => () => {
43
+ return new Promise(resolve => {
44
+ styleValueTypes_esXlgmw4x8.animate({
45
+ from: { y: options.from },
46
+ to: { y: options.to },
47
+ ease: styleValueTypes_esXlgmw4x8.easeOut,
48
+ duration,
49
+ onUpdate(latest) {
50
+ nodeStyler.set({ transform: `translateY(${latest.y}%)` });
51
+ },
52
+ onComplete() {
53
+ resolve();
54
+ },
55
+ });
56
+ });
57
+ };
58
+ /**
59
+ * Applies the slideX styles without animating, useful when initial state
60
+ * is slid out.
61
+ *
62
+ * @param {number} amount - The amount to translate the element by.
63
+ * @returns {function} - A function that applies the slideX styles.
64
+ */
65
+ const setSlideX = (amount = 100) => nodeStyler.set({ transform: `translateX(${amount}%)` });
66
+ /**
67
+ * Applies the slideY styles without animating, useful when initial state
68
+ * is slid out.
69
+ *
70
+ * @param {number} amount - The amount to translate the element by.
71
+ * @returns {function} - A function that applies the slideY styles.
72
+ */
73
+ const setSlideY = (amount = 100) => nodeStyler.set({ transform: `translateY(${amount}%)` });
74
+ /**
75
+ * Applies the slideIn styles without animating, useful when initial state
76
+ * is slid in.
77
+ */
78
+ function setSlideReset() {
79
+ nodeStyler.set({ transform: `translateX(${0}%) translateY(${0}%)` });
80
+ }
81
+ return {
82
+ slideX,
83
+ slideY,
84
+ setSlideX,
85
+ setSlideY,
86
+ setSlideReset,
87
+ };
88
+ };
89
+
90
+ exports.useSlide = useSlide;
@@ -1,7 +1,8 @@
1
1
  import React, { useMemo, useState, useEffect, useRef, useCallback, } from 'react';
2
2
  import { flexRender, getCoreRowModel, getPaginationRowModel, getSortedRowModel, getFilteredRowModel, useReactTable, } from '@tanstack/react-table';
3
3
  import { NvTable, NvTableheader } from '../../generated/components';
4
- function NvDatatable({ columns, rows, pagination, sorting, filtering, renderPagination, renderFiltering, stickyHeader, ...htmlProps }) {
4
+ function NvDatatable({ mode = 'client', columns, rows, pagination, sorting, filtering, renderPagination, renderFiltering, stickyHeader, ...htmlProps }) {
5
+ const isInfiniteScroll = pagination?.infinite && mode === 'server';
5
6
  const [paginationState, setPaginationState] = useState({
6
7
  pageIndex: 0,
7
8
  pageSize: pagination?.initialPageSize || 10,
@@ -17,11 +18,11 @@ function NvDatatable({ columns, rows, pagination, sorting, filtering, renderPagi
17
18
  }
18
19
  debouncedSetFilter.current = setTimeout(() => {
19
20
  setGlobalFilterState(value);
20
- if (filtering?.mode === 'server' && filtering.onFilterChange) {
21
+ if (mode === 'server' && filtering?.onFilterChange) {
21
22
  filtering.onFilterChange(value);
22
23
  }
23
24
  }, debounceMs);
24
- }, [filtering]);
25
+ }, [filtering, mode]);
25
26
  useEffect(() => {
26
27
  return () => {
27
28
  if (debouncedSetFilter.current) {
@@ -37,6 +38,7 @@ function NvDatatable({ columns, rows, pagination, sorting, filtering, renderPagi
37
38
  const tableColumns = useMemo(() => columns
38
39
  .filter((col) => !col.hidden)
39
40
  .map((col) => {
41
+ const headerName = col.headerName || String(col.field);
40
42
  const columnDef = {
41
43
  accessorKey: col.field,
42
44
  accessorFn: col.valueFormatter
@@ -49,7 +51,12 @@ function NvDatatable({ columns, rows, pagination, sorting, filtering, renderPagi
49
51
  });
50
52
  }
51
53
  : undefined,
52
- header: col.headerName || String(col.field),
54
+ header: col.renderHeader
55
+ ? () => col.renderHeader({
56
+ headerName,
57
+ field: col.field,
58
+ })
59
+ : headerName,
53
60
  size: col.width,
54
61
  enableResizing: col.resizable ?? true,
55
62
  enableSorting: sorting ? col.sortable ?? true : false,
@@ -92,7 +99,7 @@ function NvDatatable({ columns, rows, pagination, sorting, filtering, renderPagi
92
99
  sorting: sorting.sortState || sortingState,
93
100
  ...(filtering && { globalFilter: globalFilterState }),
94
101
  },
95
- onSortingChange: sorting.mode === 'server'
102
+ onSortingChange: mode === 'server'
96
103
  ? (updater) => {
97
104
  const newSort = typeof updater === 'function'
98
105
  ? updater(sortingState)
@@ -101,14 +108,14 @@ function NvDatatable({ columns, rows, pagination, sorting, filtering, renderPagi
101
108
  sorting.onSortingChange?.(newSort);
102
109
  }
103
110
  : setSortingState,
104
- manualSorting: sorting.mode === 'server',
111
+ manualSorting: mode === 'server',
105
112
  enableSorting: true,
106
113
  enableMultiSort: sorting.enableMultiSort ?? false,
107
114
  enableSortingRemoval: sorting.enableSortingRemoval ?? true,
108
115
  maxMultiSortColCount: sorting.maxMultiSortColCount,
109
116
  sortDescFirst: sorting.sortDescFirst ?? false,
110
117
  isMultiSortEvent: sorting.enableMultiSort ? () => true : undefined,
111
- getSortedRowModel: sorting.mode === 'client' ? getSortedRowModel() : undefined,
118
+ getSortedRowModel: mode === 'client' ? getSortedRowModel() : undefined,
112
119
  }),
113
120
  ...(filtering && {
114
121
  state: {
@@ -120,18 +127,18 @@ function NvDatatable({ columns, rows, pagination, sorting, filtering, renderPagi
120
127
  ? updater(globalFilterState)
121
128
  : updater;
122
129
  setGlobalFilterState(newFilter);
123
- if (filtering.mode === 'server' && filtering.onFilterChange) {
130
+ if (mode === 'server' && filtering.onFilterChange) {
124
131
  filtering.onFilterChange(newFilter);
125
132
  }
126
133
  },
127
134
  globalFilterFn: filtering.globalFilterFn,
128
- getFilteredRowModel: filtering.mode === 'client' ? getFilteredRowModel() : undefined,
135
+ getFilteredRowModel: mode === 'client' ? getFilteredRowModel() : undefined,
129
136
  }),
130
137
  };
131
138
  if (!pagination) {
132
139
  return baseConfig;
133
140
  }
134
- if (pagination.mode === 'client') {
141
+ if (mode === 'client' && !pagination.infinite) {
135
142
  return {
136
143
  ...baseConfig,
137
144
  getPaginationRowModel: getPaginationRowModel(),
@@ -143,7 +150,7 @@ function NvDatatable({ columns, rows, pagination, sorting, filtering, renderPagi
143
150
  },
144
151
  };
145
152
  }
146
- if (pagination.mode === 'server') {
153
+ if (mode === 'server' && !pagination.infinite) {
147
154
  const pageSize = paginationState.pageSize;
148
155
  let pageCount = -1;
149
156
  if (pagination.totalPageCount !== undefined) {
@@ -173,27 +180,30 @@ function NvDatatable({ columns, rows, pagination, sorting, filtering, renderPagi
173
180
  sortingState,
174
181
  filtering,
175
182
  globalFilterState,
183
+ mode,
176
184
  ]);
177
185
  const table = useReactTable(tableConfig);
178
186
  useEffect(() => {
179
- if (pagination?.mode === 'server' && pagination.onPaginationChange) {
187
+ if (mode === 'server' &&
188
+ !pagination?.infinite &&
189
+ pagination?.onPaginationChange) {
180
190
  pagination.onPaginationChange({
181
191
  pageIndex: paginationState.pageIndex,
182
192
  pageSize: paginationState.pageSize,
183
193
  });
184
194
  }
185
- }, [paginationState, pagination]);
195
+ }, [paginationState, pagination, mode]);
186
196
  useEffect(() => {
187
- if (pagination?.mode !== 'infinite' || !lastRowRef.current) {
197
+ if (!isInfiniteScroll || !lastRowRef.current) {
188
198
  return;
189
199
  }
190
- const threshold = pagination.loadMoreThreshold || 500;
200
+ const threshold = pagination?.loadMoreThreshold || 500;
191
201
  const observer = new IntersectionObserver((entries) => {
192
202
  const entry = entries[0];
193
203
  if (entry.isIntersecting &&
194
- pagination.hasMore &&
195
- !pagination.isLoading &&
196
- pagination.onLoadMore) {
204
+ pagination?.hasMore &&
205
+ !pagination?.isLoading &&
206
+ pagination?.onLoadMore) {
197
207
  pagination.onLoadMore();
198
208
  }
199
209
  }, {
@@ -204,14 +214,14 @@ function NvDatatable({ columns, rows, pagination, sorting, filtering, renderPagi
204
214
  return () => {
205
215
  observer.disconnect();
206
216
  };
207
- }, [rows, pagination]);
217
+ }, [rows, pagination, isInfiniteScroll]);
208
218
  const tablePaginationState = table.getState().pagination;
209
219
  const paginationAPI = useMemo(() => {
210
220
  if (!pagination) {
211
221
  return null;
212
222
  }
213
223
  const pageCount = table.getPageCount();
214
- const rowCount = pagination.mode === 'server'
224
+ const rowCount = mode === 'server' && !pagination.infinite
215
225
  ? pagination.totalRowCount || rows.length
216
226
  : rows.length;
217
227
  return {
@@ -227,12 +237,18 @@ function NvDatatable({ columns, rows, pagination, sorting, filtering, renderPagi
227
237
  setPageSize: (size) => table.setPageSize(size),
228
238
  canPreviousPage: table.getCanPreviousPage(),
229
239
  canNextPage: table.getCanNextPage(),
230
- isLoading: pagination.mode === 'infinite' ? pagination.isLoading : undefined,
231
- hasMore: pagination.mode === 'infinite' ? pagination.hasMore : undefined,
240
+ isLoading: isInfiniteScroll ? pagination.isLoading : undefined,
241
+ hasMore: isInfiniteScroll ? pagination.hasMore : undefined,
232
242
  };
233
- }, [pagination, table, rows.length, tablePaginationState]);
243
+ }, [
244
+ pagination,
245
+ table,
246
+ rows.length,
247
+ tablePaginationState,
248
+ mode,
249
+ isInfiniteScroll,
250
+ ]);
234
251
  const tableRows = table.getRowModel().rows;
235
- const isInfiniteScroll = pagination?.mode === 'infinite';
236
252
  const filteringAPI = useMemo(() => {
237
253
  if (!filtering) {
238
254
  return null;
@@ -15,6 +15,9 @@ import { NvDatagridcolumn as NvDatagridcolumnElement, defineCustomElement as def
15
15
  import { NvDialog as NvDialogElement, defineCustomElement as defineNvDialog } from "@nova-design-system/nova-webcomponents/dist/components/nv-dialog.js";
16
16
  import { NvDialogfooter as NvDialogfooterElement, defineCustomElement as defineNvDialogfooter } from "@nova-design-system/nova-webcomponents/dist/components/nv-dialogfooter.js";
17
17
  import { NvDialogheader as NvDialogheaderElement, defineCustomElement as defineNvDialogheader } from "@nova-design-system/nova-webcomponents/dist/components/nv-dialogheader.js";
18
+ import { NvDrawer as NvDrawerElement, defineCustomElement as defineNvDrawer } from "@nova-design-system/nova-webcomponents/dist/components/nv-drawer.js";
19
+ import { NvDrawerfooter as NvDrawerfooterElement, defineCustomElement as defineNvDrawerfooter } from "@nova-design-system/nova-webcomponents/dist/components/nv-drawerfooter.js";
20
+ import { NvDrawerheader as NvDrawerheaderElement, defineCustomElement as defineNvDrawerheader } from "@nova-design-system/nova-webcomponents/dist/components/nv-drawerheader.js";
18
21
  import { NvFieldcheckbox as NvFieldcheckboxElement, defineCustomElement as defineNvFieldcheckbox } from "@nova-design-system/nova-webcomponents/dist/components/nv-fieldcheckbox.js";
19
22
  import { NvFielddate as NvFielddateElement, defineCustomElement as defineNvFielddate } from "@nova-design-system/nova-webcomponents/dist/components/nv-fielddate.js";
20
23
  import { NvFielddaterange as NvFielddaterangeElement, defineCustomElement as defineNvFielddaterange } from "@nova-design-system/nova-webcomponents/dist/components/nv-fielddaterange.js";
@@ -190,6 +193,30 @@ export const NvDialogheader = createComponent({
190
193
  events: {},
191
194
  defineCustomElement: defineNvDialogheader
192
195
  });
196
+ export const NvDrawer = createComponent({
197
+ tagName: 'nv-drawer',
198
+ elementClass: NvDrawerElement,
199
+ react: React,
200
+ events: { onOpenChanged: 'openChanged' },
201
+ defineCustomElement: defineNvDrawer
202
+ });
203
+ export const NvDrawerfooter = createComponent({
204
+ tagName: 'nv-drawerfooter',
205
+ elementClass: NvDrawerfooterElement,
206
+ react: React,
207
+ events: {
208
+ onDrawerCanceled: 'drawerCanceled',
209
+ onDrawerPrimaryClicked: 'drawerPrimaryClicked'
210
+ },
211
+ defineCustomElement: defineNvDrawerfooter
212
+ });
213
+ export const NvDrawerheader = createComponent({
214
+ tagName: 'nv-drawerheader',
215
+ elementClass: NvDrawerheaderElement,
216
+ react: React,
217
+ events: {},
218
+ defineCustomElement: defineNvDrawerheader
219
+ });
193
220
  export const NvFieldcheckbox = createComponent({
194
221
  tagName: 'nv-fieldcheckbox',
195
222
  elementClass: NvFieldcheckboxElement,
@@ -225,6 +225,50 @@ export const NvDialogheader = createComponent({
225
225
  clientModule: clientComponents.NvDialogheader,
226
226
  serializeShadowRoot,
227
227
  });
228
+ export const NvDrawer = createComponent({
229
+ tagName: 'nv-drawer',
230
+ properties: {
231
+ open: 'open',
232
+ undismissable: 'undismissable',
233
+ clickOutside: 'click-outside',
234
+ controlled: 'controlled',
235
+ side: 'side',
236
+ size: 'size',
237
+ width: 'width',
238
+ autofocus: 'autofocus',
239
+ swipeToOpen: 'swipe-to-open'
240
+ },
241
+ hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
242
+ clientModule: clientComponents.NvDrawer,
243
+ serializeShadowRoot,
244
+ });
245
+ export const NvDrawerfooter = createComponent({
246
+ tagName: 'nv-drawerfooter',
247
+ properties: {
248
+ disabled: 'disabled',
249
+ undismissable: 'undismissable',
250
+ leadingIcon: 'leading-icon',
251
+ trailingIcon: 'trailing-icon',
252
+ danger: 'danger',
253
+ cancelLabel: 'cancel-label',
254
+ primaryLabel: 'primary-label',
255
+ primaryButtonType: 'primary-button-type',
256
+ form: 'form'
257
+ },
258
+ hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
259
+ clientModule: clientComponents.NvDrawerfooter,
260
+ serializeShadowRoot,
261
+ });
262
+ export const NvDrawerheader = createComponent({
263
+ tagName: 'nv-drawerheader',
264
+ properties: {
265
+ heading: 'heading',
266
+ subheading: 'subheading'
267
+ },
268
+ hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
269
+ clientModule: clientComponents.NvDrawerheader,
270
+ serializeShadowRoot,
271
+ });
228
272
  export const NvFieldcheckbox = createComponent({
229
273
  tagName: 'nv-fieldcheckbox',
230
274
  properties: {
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { NvDatatableProps } from './types';
3
- declare function NvDatatable<T>({ columns, rows, pagination, sorting, filtering, renderPagination, renderFiltering, stickyHeader, ...htmlProps }: NvDatatableProps<T>): React.JSX.Element;
3
+ declare function NvDatatable<T>({ mode, columns, rows, pagination, sorting, filtering, renderPagination, renderFiltering, stickyHeader, ...htmlProps }: NvDatatableProps<T>): React.JSX.Element;
4
4
  declare namespace NvDatatable {
5
5
  var displayName: string;
6
6
  }
@@ -1,6 +1,8 @@
1
1
  import type { ComponentProps } from 'react';
2
2
  import type { SortingFn, NoInfer, SortingState, Row } from '@tanstack/react-table';
3
+ export type NvDatatableMode = 'client' | 'server';
3
4
  export type NvDatatableProps<T> = {
5
+ mode?: NvDatatableMode;
4
6
  columns: Array<NvDatatableColumn<T>>;
5
7
  rows: Array<T>;
6
8
  pagination?: NvDatatablePaginationConfig;
@@ -18,12 +20,17 @@ export interface NvDatatableColumn<Row, K extends keyof Row = keyof Row, F = Row
18
20
  hidden?: boolean;
19
21
  valueFormatter?: (params: NvTableValueFormatterParams<Row, Row[K], K>) => F;
20
22
  renderCell?: (params: NvTableRenderCellParams<Row, F, K>) => React.ReactNode;
23
+ renderHeader?: (params: NvTableRenderHeaderParams<K>) => React.ReactNode;
21
24
  sortable?: boolean;
22
25
  sortingFn?: SortingFn<Row> | string;
23
26
  sortDescFirst?: boolean;
24
27
  invertSorting?: boolean;
25
28
  sortUndefined?: 'first' | 'last' | false | -1 | 1;
26
29
  }
30
+ export interface NvTableRenderHeaderParams<Field> {
31
+ headerName: string;
32
+ field: Field;
33
+ }
27
34
  export interface NvTableRenderCellParams<Row, Value, Field> {
28
35
  value: Value | NoInfer<Value>;
29
36
  row: Row;
@@ -36,7 +43,7 @@ export interface NvTableValueFormatterParams<Row, Value, Field> {
36
43
  field: Field;
37
44
  }
38
45
  export interface NvDatatablePaginationConfig {
39
- mode: 'client' | 'server' | 'infinite';
46
+ infinite?: boolean;
40
47
  initialPageSize?: number;
41
48
  pageSizeOptions?: number[];
42
49
  totalRowCount?: number;
@@ -68,7 +75,6 @@ export interface NvDatatableRenderPaginationAPI {
68
75
  }
69
76
  export type NvDataTableSortingState = SortingState;
70
77
  export interface NvDatatableSortingConfig {
71
- mode: 'client' | 'server';
72
78
  enableMultiSort?: boolean;
73
79
  enableSortingRemoval?: boolean;
74
80
  maxMultiSortColCount?: number;
@@ -77,7 +83,6 @@ export interface NvDatatableSortingConfig {
77
83
  onSortingChange?: (sorting: SortingState) => void;
78
84
  }
79
85
  export interface NvDatatableFilteringConfig<T> {
80
- mode: 'client' | 'server';
81
86
  filterState?: unknown;
82
87
  onFilterChange?: (filterState: unknown) => void;
83
88
  globalFilterFn?: (row: Row<T>, columnId: string, filterValue: unknown) => boolean;
@@ -15,6 +15,9 @@ import { NvDatagridcolumn as NvDatagridcolumnElement } from "@nova-design-system
15
15
  import { NvDialog as NvDialogElement } from "@nova-design-system/nova-webcomponents/dist/components/nv-dialog.js";
16
16
  import { NvDialogfooter as NvDialogfooterElement } from "@nova-design-system/nova-webcomponents/dist/components/nv-dialogfooter.js";
17
17
  import { NvDialogheader as NvDialogheaderElement } from "@nova-design-system/nova-webcomponents/dist/components/nv-dialogheader.js";
18
+ import { NvDrawer as NvDrawerElement } from "@nova-design-system/nova-webcomponents/dist/components/nv-drawer.js";
19
+ import { NvDrawerfooter as NvDrawerfooterElement } from "@nova-design-system/nova-webcomponents/dist/components/nv-drawerfooter.js";
20
+ import { NvDrawerheader as NvDrawerheaderElement } from "@nova-design-system/nova-webcomponents/dist/components/nv-drawerheader.js";
18
21
  import { NvFieldcheckbox as NvFieldcheckboxElement } from "@nova-design-system/nova-webcomponents/dist/components/nv-fieldcheckbox.js";
19
22
  import { NvFielddate as NvFielddateElement } from "@nova-design-system/nova-webcomponents/dist/components/nv-fielddate.js";
20
23
  import { NvFielddaterange as NvFielddaterangeElement } from "@nova-design-system/nova-webcomponents/dist/components/nv-fielddaterange.js";
@@ -128,6 +131,17 @@ export type NvDialogfooterEvents = {
128
131
  export declare const NvDialogfooter: StencilReactComponent<NvDialogfooterElement, NvDialogfooterEvents>;
129
132
  export type NvDialogheaderEvents = NonNullable<unknown>;
130
133
  export declare const NvDialogheader: StencilReactComponent<NvDialogheaderElement, NvDialogheaderEvents>;
134
+ export type NvDrawerEvents = {
135
+ onOpenChanged: EventName<CustomEvent<boolean>>;
136
+ };
137
+ export declare const NvDrawer: StencilReactComponent<NvDrawerElement, NvDrawerEvents>;
138
+ export type NvDrawerfooterEvents = {
139
+ onDrawerCanceled: EventName<CustomEvent<void>>;
140
+ onDrawerPrimaryClicked: EventName<CustomEvent<void>>;
141
+ };
142
+ export declare const NvDrawerfooter: StencilReactComponent<NvDrawerfooterElement, NvDrawerfooterEvents>;
143
+ export type NvDrawerheaderEvents = NonNullable<unknown>;
144
+ export declare const NvDrawerheader: StencilReactComponent<NvDrawerheaderElement, NvDrawerheaderEvents>;
131
145
  export type NvFieldcheckboxEvents = {
132
146
  onCheckedChanged: EventName<CustomEvent<boolean>>;
133
147
  };
@@ -15,6 +15,9 @@ import { NvDatagridcolumn as NvDatagridcolumnElement } from "@nova-design-system
15
15
  import { NvDialog as NvDialogElement } from "@nova-design-system/nova-webcomponents/dist/components/nv-dialog.js";
16
16
  import { NvDialogfooter as NvDialogfooterElement } from "@nova-design-system/nova-webcomponents/dist/components/nv-dialogfooter.js";
17
17
  import { NvDialogheader as NvDialogheaderElement } from "@nova-design-system/nova-webcomponents/dist/components/nv-dialogheader.js";
18
+ import { NvDrawer as NvDrawerElement } from "@nova-design-system/nova-webcomponents/dist/components/nv-drawer.js";
19
+ import { NvDrawerfooter as NvDrawerfooterElement } from "@nova-design-system/nova-webcomponents/dist/components/nv-drawerfooter.js";
20
+ import { NvDrawerheader as NvDrawerheaderElement } from "@nova-design-system/nova-webcomponents/dist/components/nv-drawerheader.js";
18
21
  import { NvFieldcheckbox as NvFieldcheckboxElement } from "@nova-design-system/nova-webcomponents/dist/components/nv-fieldcheckbox.js";
19
22
  import { NvFielddate as NvFielddateElement } from "@nova-design-system/nova-webcomponents/dist/components/nv-fielddate.js";
20
23
  import { NvFielddaterange as NvFielddaterangeElement } from "@nova-design-system/nova-webcomponents/dist/components/nv-fielddaterange.js";
@@ -130,6 +133,17 @@ export type NvDialogfooterEvents = {
130
133
  export declare const NvDialogfooter: StencilReactComponent<NvDialogfooterElement, NvDialogfooterEvents>;
131
134
  export type NvDialogheaderEvents = NonNullable<unknown>;
132
135
  export declare const NvDialogheader: StencilReactComponent<NvDialogheaderElement, NvDialogheaderEvents>;
136
+ export type NvDrawerEvents = {
137
+ onOpenChanged: EventName<CustomEvent<boolean>>;
138
+ };
139
+ export declare const NvDrawer: StencilReactComponent<NvDrawerElement, NvDrawerEvents>;
140
+ export type NvDrawerfooterEvents = {
141
+ onDrawerCanceled: EventName<CustomEvent<void>>;
142
+ onDrawerPrimaryClicked: EventName<CustomEvent<void>>;
143
+ };
144
+ export declare const NvDrawerfooter: StencilReactComponent<NvDrawerfooterElement, NvDrawerfooterEvents>;
145
+ export type NvDrawerheaderEvents = NonNullable<unknown>;
146
+ export declare const NvDrawerheader: StencilReactComponent<NvDrawerheaderElement, NvDrawerheaderEvents>;
133
147
  export type NvFieldcheckboxEvents = {
134
148
  onCheckedChanged: EventName<CustomEvent<boolean>>;
135
149
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nova-design-system/nova-react",
3
- "version": "3.23.0",
3
+ "version": "3.24.0",
4
4
  "description": "Nova is a design system created by Elia Group to empower creators to efficiently build solutions that people love to use.",
5
5
  "author": "Elia Group",
6
6
  "homepage": "https://nova.eliagroup.io",
@@ -1,67 +0,0 @@
1
- 'use strict';
2
-
3
- var index = require('./index-CtjeeUI-.js');
4
- require('@stencil/react-output-target/runtime');
5
- require('react');
6
- require('react-dom');
7
-
8
- const nvTogglebuttonCss = "nv-togglebutton{display:inline-flex;justify-content:center;align-items:center}nv-togglebutton:focus-visible,nv-togglebutton:has(:focus-visible){z-index:1}nv-togglebutton[size=xs]{padding:var(--button-xs-padding-y) var(--button-xs-padding-x);gap:var(--button-xs-gap);border-radius:var(--button-xs-border-radius);line-height:var(--button-xs-line-height);height:var(--button-xs-height);font-size:var(--button-xs-font-size)}nv-togglebutton[size=xs] nv-icon>svg{width:var(--spacing-3);height:var(--spacing-3);stroke-width:1.2px}nv-togglebutton[size=xs]{padding-top:calc(var(--togglegroup-xs-button-padding-y) - 1px);padding-bottom:calc(var(--togglegroup-xs-button-padding-y) - 1px);border-radius:calc(var(--togglegroup-xs-button-radius));border-width:0}nv-togglebutton[size=sm]{padding:var(--button-sm-padding-y) var(--button-sm-padding-x);gap:var(--button-sm-gap);border-radius:var(--button-sm-border-radius);line-height:var(--button-sm-line-height);height:var(--button-sm-height);font-size:var(--button-sm-font-size)}nv-togglebutton[size=sm] nv-icon>svg{width:var(--spacing-4);height:var(--spacing-4);stroke-width:1.5px}nv-togglebutton[size=sm]{padding-top:calc(var(--togglegroup-sm-button-padding-y) - 1px);padding-bottom:calc(var(--togglegroup-sm-button-padding-y) - 1px);border-radius:calc(var(--togglegroup-sm-button-radius));border-width:0}nv-togglebutton[size=md]{padding:var(--button-md-padding-y) var(--button-md-padding-x);gap:var(--button-md-gap);border-radius:var(--button-md-border-radius);line-height:var(--button-md-line-height);height:var(--button-md-height);font-size:var(--button-md-font-size)}nv-togglebutton[size=md] nv-icon>svg{width:var(--spacing-5);height:var(--spacing-5);stroke-width:1.6px}nv-togglebutton[size=md]{padding-top:calc(var(--togglegroup-md-button-padding-y) - 1px);padding-bottom:calc(var(--togglegroup-md-button-padding-y) - 1px);border-radius:calc(var(--togglegroup-md-button-radius));border-width:0}nv-togglebutton[size=lg]{padding:var(--button-lg-padding-y) var(--button-lg-padding-x);gap:var(--button-lg-gap);border-radius:var(--button-lg-border-radius);line-height:var(--button-lg-line-height);height:var(--button-lg-height);font-size:var(--button-lg-font-size)}nv-togglebutton[size=lg] nv-icon>svg{width:var(--spacing-6);height:var(--spacing-6);stroke-width:1.8px}nv-togglebutton[size=lg]{padding-top:calc(var(--togglegroup-lg-button-padding-y) - 1px);padding-bottom:calc(var(--togglegroup-lg-button-padding-y) - 1px);border-radius:calc(var(--togglegroup-lg-button-radius));border-width:0}nv-togglebutton[emphasis=high]{background:var(--components-button-low-background);border:1px solid var(--components-button-low-border);color:var(--components-button-low-text)}nv-togglebutton[emphasis=high]:hover{background:var(--components-button-low-background-hover);border:1px solid var(--components-button-low-border);color:var(--components-button-low-text-hover)}nv-togglebutton[emphasis=high]:active{background:var(--components-button-low-background-active);border:1px solid var(--components-button-low-border-active);color:var(--components-button-low-text-active)}nv-togglebutton[emphasis=high]:focus,nv-togglebutton[emphasis=high]:focus-within{outline:none}nv-togglebutton[emphasis=high]:focus-visible,nv-togglebutton[emphasis=high]:has(:focus-visible){outline:calc(var(--focus-outline-stroke) * 1) solid var(--color-focus-brand);outline-offset:calc(var(--focus-outline-offset) * 1)}nv-togglebutton[emphasis=high]:disabled:not([disabled=false]){opacity:0.5;cursor:not-allowed;box-shadow:none}nv-togglebutton[emphasis=high][active]:not([active=false]){background:var(--components-button-low-background-active);border:1px solid var(--components-button-low-border-active);color:var(--components-button-low-text-active)}nv-togglebutton[emphasis=low]{background:var(--components-button-lower-background);border:1px solid var(--components-button-lower-border);color:var(--components-button-lower-text)}nv-togglebutton[emphasis=low]:hover{background:var(--components-button-lower-background-hover);border:1px solid var(--components-button-lower-border);color:var(--components-button-lower-text-hover)}nv-togglebutton[emphasis=low]:active{background:var(--components-button-lower-background-active);border:1px solid var(--components-button-lower-border-active);color:var(--components-button-lower-text-active)}nv-togglebutton[emphasis=low]:focus,nv-togglebutton[emphasis=low]:focus-within{outline:none}nv-togglebutton[emphasis=low]:focus-visible,nv-togglebutton[emphasis=low]:has(:focus-visible){outline:calc(var(--focus-outline-stroke) * 1) solid var(--color-focus-brand);outline-offset:calc(var(--focus-outline-offset) * 1)}nv-togglebutton[emphasis=low]:disabled:not([disabled=false]){opacity:0.5;cursor:not-allowed;box-shadow:none}nv-togglebutton[emphasis=low][active]:not([active=false]),nv-togglebutton[emphasis=low]:active{background:var(--components-button-lower-background-hover);border:1px solid var(--components-button-lower-border);color:var(--components-button-lower-text-hover)}";
9
-
10
- const NvTogglebutton = class {
11
- constructor(hostRef) {
12
- index.registerInstance(this, hostRef);
13
- this.toggled = index.createEvent(this, "toggled", 7);
14
- /****************************************************************************/
15
- //#region PROPERTIES
16
- /**
17
- * Determines how large or small the togglebutton appears, allowing for
18
- * customization of the togglebutton's dimensions to fit different design
19
- * specifications and user needs.
20
- */
21
- this.size = 'md';
22
- /**
23
- * Prevents all interaction, rendering the toggle in a non-interactive state.
24
- */
25
- this.disabled = false;
26
- /**
27
- * Whether the button is active or not. Will not toggle automatically but
28
- * needs to be controlled externally.
29
- */
30
- this.active = false;
31
- /**
32
- * Make it more or less visually prominent to users.
33
- */
34
- this.emphasis = 'high';
35
- //#endregion PROPERTIES
36
- /****************************************************************************/
37
- //#region METHODS
38
- this.handleClick = () => {
39
- if (this.disabled)
40
- return;
41
- this.toggled.emit({
42
- value: this.value,
43
- active: this.active,
44
- });
45
- };
46
- }
47
- //#endregion METHODS
48
- /****************************************************************************/
49
- //#region LISTENERS
50
- handleKeyDown(event) {
51
- if (event.key === 'Enter' || event.key === ' ') {
52
- event.preventDefault();
53
- this.el.click();
54
- }
55
- }
56
- /* eslint-enable nova/event-bubbling */
57
- //#endregion EVENTS
58
- /****************************************************************************/
59
- //#region RENDER
60
- render() {
61
- return (index.h(index.Host, { key: '0285637cb14c292c67d767dc83b72f52c5368269', role: "button", tabindex: "0", "aria-pressed": String(this.active), onClick: this.handleClick }, index.h("slot", { key: 'a84f303e76070b99ff2c01e5ec400f2e78503b19' })));
62
- }
63
- get el() { return index.getElement(this); }
64
- };
65
- NvTogglebutton.style = nvTogglebuttonCss;
66
-
67
- exports.nv_togglebutton = NvTogglebutton;