@nova-design-system/nova-react 3.19.0 → 3.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -20
- package/dist/cjs/generated/components.server.js +14 -2
- package/dist/cjs/{index-C12eD0Qt.js → index-yxDlFA78.js} +670 -346
- package/dist/cjs/index.js +3 -1
- package/dist/cjs/{nv-accordion-item.entry-99OJUl7m.js → nv-accordion-item.entry-5DF2ffDE.js} +1 -1
- package/dist/cjs/{nv-accordion.entry-D8jaknF9.js → nv-accordion.entry-CPB1HBT1.js} +1 -1
- package/dist/cjs/{nv-alert.entry-D_uvQxc9.js → nv-alert.entry-jPxt1obA.js} +1 -1
- package/dist/cjs/{nv-avatar.entry-B2zfDM3w.js → nv-avatar.entry-zmnREEN-.js} +1 -1
- package/dist/cjs/{nv-badge_2.entry-Fnq2K2Ul.js → nv-badge_2.entry-DtkQx_M9.js} +1 -1
- package/dist/cjs/{nv-breadcrumb.entry-CEN2iYUQ.js → nv-breadcrumb.entry-DHAe5FxQ.js} +1 -1
- package/dist/cjs/{nv-breadcrumbs.entry-Bq8qINNk.js → nv-breadcrumbs.entry-C7XepUqF.js} +1 -1
- package/dist/cjs/nv-button.entry-Dg1knj3Y.js +164 -0
- package/dist/cjs/{nv-buttongroup.entry-CbTXVSWL.js → nv-buttongroup.entry-Dlim9p8N.js} +1 -1
- package/dist/cjs/{nv-calendar.entry-DNkXS4ll.js → nv-calendar.entry-rL5_GdQg.js} +1 -1
- package/dist/cjs/{nv-col.entry-Dlrdqper.js → nv-col.entry-CnbFx7h1.js} +1 -1
- package/dist/cjs/{nv-datagrid.entry-Z5GHfOvp.js → nv-datagrid.entry-CjUfR4ha.js} +3 -3
- package/dist/cjs/{nv-datagridcolumn.entry-DvSFVguN.js → nv-datagridcolumn.entry-BiuYIp4q.js} +1 -1
- package/dist/cjs/{nv-dialog.entry-BV6QBtx2.js → nv-dialog.entry-fDywe5i2.js} +2 -2
- package/dist/cjs/{nv-dialogfooter_2.entry-Ci1C_E-2.js → nv-dialogfooter_2.entry-CckfZ_QW.js} +1 -1
- package/dist/cjs/{nv-fieldcheckbox.entry-BD9ETFVV.js → nv-fieldcheckbox.entry-WmfLxGad.js} +1 -1
- package/dist/cjs/{nv-fielddate.entry-C06n2Hri.js → nv-fielddate.entry-GLGb7tzu.js} +1 -1
- package/dist/cjs/{nv-fielddaterange.entry-DFlaA4gv.js → nv-fielddaterange.entry-C8gXNY2P.js} +1 -1
- package/dist/cjs/{nv-fielddropdown.entry-ONwdJHOm.js → nv-fielddropdown.entry-BX1V8Uef.js} +1 -1
- package/dist/cjs/{nv-fielddropdownitem.entry-CDKQtEra.js → nv-fielddropdownitem.entry-BMVFbA1v.js} +1 -1
- package/dist/cjs/{nv-fieldmultiselect.entry-BHJC59Mw.js → nv-fieldmultiselect.entry-BuV-qWbu.js} +1 -1
- package/dist/cjs/{nv-fieldnumber.entry-CmL1LPom.js → nv-fieldnumber.entry-qM1ct5SM.js} +25 -8
- package/dist/cjs/{nv-fieldpassword.entry-Bqbf_LJJ.js → nv-fieldpassword.entry-BnGWErFQ.js} +1 -1
- package/dist/cjs/{nv-fieldradio.entry-RzSCysif.js → nv-fieldradio.entry-EliQYldW.js} +1 -1
- package/dist/cjs/{nv-fieldselect.entry-COTE8Ntn.js → nv-fieldselect.entry-BfPVPmaZ.js} +1 -1
- package/dist/cjs/{nv-fieldslider.entry-BVfmpUhc.js → nv-fieldslider.entry-DBPpL94x.js} +4 -2
- package/dist/cjs/{nv-fieldtext.entry-DO0lmw9C.js → nv-fieldtext.entry-BnabKYgq.js} +1 -1
- package/dist/cjs/{nv-fieldtextarea.entry-CzVq8gjw.js → nv-fieldtextarea.entry-HaELAnJb.js} +1 -1
- package/dist/cjs/{nv-fieldtime.entry-CRNYbeMY.js → nv-fieldtime.entry-CWQM7fza.js} +1 -1
- package/dist/cjs/nv-icon.entry-B5cWNyvf.js +80 -0
- package/dist/cjs/{nv-iconbutton_2.entry-0lnnCk0B.js → nv-iconbutton_2.entry-CP1o9IVZ.js} +7 -2
- package/dist/cjs/{nv-menu.entry-BjXa70qP.js → nv-menu.entry-wMwI_sZ3.js} +1 -1
- package/dist/cjs/{nv-menuitem.entry-CSPwpUWz.js → nv-menuitem.entry-C53TrB0_.js} +1 -1
- package/dist/cjs/{nv-notification.entry-BYHTrzUz.js → nv-notification.entry-BPyEusqt.js} +1 -1
- package/dist/cjs/{nv-notificationcontainer.entry-BBjrL7gt.js → nv-notificationcontainer.entry-MRIJURIS.js} +1 -1
- package/dist/cjs/{nv-popover.entry-J_M8_rLL.js → nv-popover.entry-fj50OLMu.js} +1 -1
- package/dist/cjs/{nv-row.entry-CmOypCPp.js → nv-row.entry-T0OlcSij.js} +1 -1
- package/dist/cjs/{nv-split.entry-BqBytQZn.js → nv-split.entry-DlI7I6Tb.js} +1 -1
- package/dist/cjs/{nv-stack.entry-BKPf62wy.js → nv-stack.entry-991A3rOk.js} +1 -1
- package/dist/cjs/{nv-table.entry-DSL_jd5Y.js → nv-table.entry-ClSU3-cR.js} +1 -1
- package/dist/cjs/nv-tableheader.entry-DzvbPDBN.js +75 -0
- package/dist/cjs/{nv-toggle.entry-DbQQdp5m.js → nv-toggle.entry-Dq5hAoVB.js} +3 -3
- package/dist/cjs/nv-togglebutton.entry-DI8HQ5Ou.js +56 -0
- package/dist/cjs/{nv-togglebuttongroup.entry-Bl43CVZN.js → nv-togglebuttongroup.entry-DzGOSBF7.js} +2 -2
- package/dist/cjs/{nv-tooltip.entry-CV841nfI.js → nv-tooltip.entry-CF0-gdZL.js} +2 -2
- package/dist/components/{NvDatatable.js → NvDatatable/NvDatatable.js} +89 -32
- package/dist/components/NvDatatable/index.js +3 -0
- package/dist/components/NvDatatable/types.js +1 -0
- package/dist/components/NvDatatable/utils.js +5 -0
- package/dist/generated/components.js +8 -0
- package/dist/generated/components.server.js +13 -2
- package/dist/providers/NotificationProvider.js +27 -0
- package/dist/types/components/NvDatatable/NvDatatable.d.ts +7 -0
- package/dist/types/components/NvDatatable/index.d.ts +3 -0
- package/dist/types/components/{NvDatatable.d.ts → NvDatatable/types.d.ts} +37 -20
- package/dist/types/components/NvDatatable/utils.d.ts +2 -0
- package/dist/types/generated/components.d.ts +6 -1
- package/dist/types/generated/components.server.d.ts +6 -1
- package/dist/types/providers/NotificationProvider.d.ts +1 -0
- package/package.json +1 -1
- package/dist/cjs/nv-button.entry-CmpagMPP.js +0 -159
- package/dist/cjs/nv-icon.entry-FoRJzCHm.js +0 -80
- package/dist/cjs/nv-togglebutton.entry-DNG6SFTU.js +0 -56
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./index-
|
|
3
|
+
var index = require('./index-yxDlFA78.js');
|
|
4
4
|
var clsx297c1ffe = require('./clsx-297c1ffe-BtxeOLZW.js');
|
|
5
5
|
require('react');
|
|
6
6
|
require('react-dom');
|
|
@@ -59,6 +59,11 @@ const NvIconbutton = class {
|
|
|
59
59
|
* Sets the shape of the button. Choose between square and rounded.
|
|
60
60
|
*/
|
|
61
61
|
this.shape = 'square';
|
|
62
|
+
/**
|
|
63
|
+
* Use this to make the button skip-able when users navigate with the keyboard.
|
|
64
|
+
* The button remains clickable but won’t be reached via the Tab key.
|
|
65
|
+
*/
|
|
66
|
+
this.disableTabindex = false;
|
|
62
67
|
//#endregion PROPERTIES
|
|
63
68
|
/****************************************************************************/
|
|
64
69
|
//#region METHODS
|
|
@@ -124,7 +129,7 @@ const NvIconbutton = class {
|
|
|
124
129
|
/****************************************************************************/
|
|
125
130
|
//#region RENDER
|
|
126
131
|
render() {
|
|
127
|
-
return (index.h(index.Host, { key: '
|
|
132
|
+
return (index.h(index.Host, { key: 'f3d9a8c4f5f3b549595b1a4b8eecddae89b23909', role: "button", type: this.type, tabindex: this.disableTabindex ? -1 : 0, disabled: this.disabled ? true : undefined, class: clsx297c1ffe.clsx('root', `size-${this.size}`, `emphasis-${this.emphasis}`, this.loading && 'loading', `shape-${this.shape}`), onClick: this.handleClick }, this.loading && index.h("nv-loader", { key: '9f25f8a2c72279f1ad4c92ed6e17341e4b43f26e', size: this.size }), !this.loading && index.h("nv-icon", { key: 'aa0d10482d4dded8f6680afe066c3c8d781160ef', name: this.name, size: this.size }), index.h("slot", { key: 'dc2a1ca7305ae4b14924d7acb79286596e5b358f' })));
|
|
128
133
|
}
|
|
129
134
|
static get formAssociated() { return true; }
|
|
130
135
|
get el() { return index.getElement(this); }
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./index-
|
|
3
|
+
var index = require('./index-yxDlFA78.js');
|
|
4
4
|
var constants69bafca2 = require('./constants-69bafca2-DpB_ghPF.js');
|
|
5
5
|
var collapse_animation6e0b08df = require('./collapse.animation-6e0b08df-AHWzNGm_.js');
|
|
6
6
|
var fade_animation9b939939 = require('./fade.animation-9b939939-DV--bM4S.js');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./index-
|
|
3
|
+
var index = require('./index-yxDlFA78.js');
|
|
4
4
|
var fade_animation9b939939 = require('./fade.animation-9b939939-DV--bM4S.js');
|
|
5
5
|
var styleValueTypes_esF5d10b79 = require('./style-value-types.es-f5d10b79-D0QCM8OB.js');
|
|
6
6
|
var events_utilsFe1d907f = require('./events.utils-fe1d907f-01N__3wY.js');
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('./index-yxDlFA78.js');
|
|
4
|
+
require('react');
|
|
5
|
+
require('react-dom');
|
|
6
|
+
|
|
7
|
+
const nvTableheaderCss = "nv-tableheader{display:inline-flex;width:100%;align-items:center;gap:var(--spacing-2)}nv-tableheader:focus-visible{border-radius:var(--radius-rounded-sm)}nv-tableheader:focus-visible:focus,nv-tableheader:focus-visible:focus-within{outline:none}nv-tableheader:focus-visible:focus-visible,nv-tableheader:focus-visible:has(:focus-visible){outline:calc(var(--focus-outline-stroke) * 1) solid var(--color-focus-brand);outline-offset:calc(var(--focus-outline-offset) * 1)}nv-tableheader nv-iconbutton{transition:transform 120ms ease, opacity 120ms ease}nv-tableheader nv-iconbutton svg{transition:transform 240ms ease}nv-tableheader nv-iconbutton.is-none{opacity:0.5}nv-tableheader nv-iconbutton.is-desc svg{transform:rotate(180deg)}";
|
|
8
|
+
const NvTableheaderStyle0 = nvTableheaderCss;
|
|
9
|
+
|
|
10
|
+
const NvTableheader = class {
|
|
11
|
+
constructor(hostRef) {
|
|
12
|
+
index.registerInstance(this, hostRef);
|
|
13
|
+
this.sortDirectionChanged = index.createEvent(this, "sortDirectionChanged");
|
|
14
|
+
/****************************************************************************/
|
|
15
|
+
//#region PROPERTIES
|
|
16
|
+
/**
|
|
17
|
+
* Will render the header as sortable with the corresponding icon button.
|
|
18
|
+
* Allows the header to be tabbed, and trigger sorting via click or keyboard
|
|
19
|
+
* navigation
|
|
20
|
+
*/
|
|
21
|
+
this.sortable = false;
|
|
22
|
+
/**
|
|
23
|
+
* The current sort direction of the header. Will be 'none' if the header is
|
|
24
|
+
* not sortable or if the sort direction is not set.
|
|
25
|
+
*/
|
|
26
|
+
this.sortDirection = 'none';
|
|
27
|
+
}
|
|
28
|
+
//#endregion PROPERTIES
|
|
29
|
+
/****************************************************************************/
|
|
30
|
+
//#region METHODS
|
|
31
|
+
cycleSortDirection(e) {
|
|
32
|
+
if (!this.sortable)
|
|
33
|
+
return;
|
|
34
|
+
e === null || e === void 0 ? void 0 : e.preventDefault();
|
|
35
|
+
const next = {
|
|
36
|
+
none: 'asc',
|
|
37
|
+
asc: 'desc',
|
|
38
|
+
desc: 'none',
|
|
39
|
+
};
|
|
40
|
+
this.sortDirection = next[this.sortDirection];
|
|
41
|
+
this.sortDirectionChanged.emit(this.sortDirection);
|
|
42
|
+
}
|
|
43
|
+
handleKeyDown(event) {
|
|
44
|
+
if (!this.sortable)
|
|
45
|
+
return;
|
|
46
|
+
if (event.key === 'Enter' || event.key === ' ') {
|
|
47
|
+
event.preventDefault();
|
|
48
|
+
this.cycleSortDirection();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
get ariaSort() {
|
|
52
|
+
const sortMap = {
|
|
53
|
+
none: 'none',
|
|
54
|
+
asc: 'ascending',
|
|
55
|
+
desc: 'descending',
|
|
56
|
+
};
|
|
57
|
+
if (!this.sortable)
|
|
58
|
+
return sortMap.none;
|
|
59
|
+
return sortMap[this.sortDirection];
|
|
60
|
+
}
|
|
61
|
+
//#endregion EVENTS
|
|
62
|
+
/****************************************************************************/
|
|
63
|
+
//#region RENDER
|
|
64
|
+
render() {
|
|
65
|
+
return (index.h(index.Host, { key: 'ff2fc290253d468d2d139afdc708b012258b3f31', role: "columnheader", "aria-sort": this.ariaSort, tabindex: this.sortable ? 0 : undefined, onKeyDown: this.handleKeyDown.bind(this), onClick: this.cycleSortDirection.bind(this) }, index.h("slot", { key: '3c70c590cc33ca2d722dbc3313c9e10583bfa631' }), this.sortable && (index.h("span", { key: '219a872d53157545302495cec6844d55b5026e00', class: "sort-icon-wrap", "aria-hidden": "true" }, index.h("nv-iconbutton", { key: 'd39698493a8504bb7e2af6fa52ac4c548b91bf40', disableTabindex: true, name: "arrow-up", size: "xs", emphasis: this.sortDirection === 'none' ? 'lower' : 'low',
|
|
66
|
+
// prevent mousedown from selecting text
|
|
67
|
+
onMouseDown: (e) => e.preventDefault(), class: {
|
|
68
|
+
'is-none': this.sortDirection === 'none',
|
|
69
|
+
'is-desc': this.sortDirection === 'desc',
|
|
70
|
+
} })))));
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
NvTableheader.style = NvTableheaderStyle0;
|
|
74
|
+
|
|
75
|
+
exports.nv_tableheader = NvTableheader;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./index-
|
|
3
|
+
var index = require('./index-yxDlFA78.js');
|
|
4
4
|
var clsx297c1ffe = require('./clsx-297c1ffe-BtxeOLZW.js');
|
|
5
5
|
var v4A79185f4 = require('./v4-a79185f4-2n0dOd_Y.js');
|
|
6
6
|
require('react');
|
|
@@ -66,8 +66,8 @@ const NvToggle = class {
|
|
|
66
66
|
/****************************************************************************/
|
|
67
67
|
//#region RENDER
|
|
68
68
|
render() {
|
|
69
|
-
return (index.h(index.Host, { key: '
|
|
70
|
-
this.el.querySelector('[slot="description"]')) && (index.h("div", { key: '
|
|
69
|
+
return (index.h(index.Host, { key: '8e5b801ed4263b02b9b00628e94de448986eca98', class: clsx297c1ffe.clsx(this.labelPlacement === 'before' && 'label-placement-before') }, index.h("div", { key: 'b25ed406fae37d41f1c1fbe4234ded3f94db14b0', class: "input-container" }, index.h("input", { key: '5a98b81705597f2a115517b6031289ee9be54bda', type: "checkbox", id: this.inputId, name: this.name, autocomplete: "off", value: this.value, checked: Boolean(this.checked), disabled: this.disabled || this.readonly, readonly: this.readonly })), index.h("div", { key: '89366dfe5c0106d7e28a858745941f0358220ce7', class: "text-container" }, (this.label || this.el.querySelector('[slot="label"]')) && (index.h("label", { key: '3f0192378adbd8d5d5f5f5684d1e929462d7832b', htmlFor: this.inputId, class: clsx297c1ffe.clsx(this.hideLabel && 'visually-hidden') }, index.h("slot", { key: 'ee95958740e62af025bc4a456fe1b9f12b9aac71', name: "label" }, this.label))), (this.description ||
|
|
70
|
+
this.el.querySelector('[slot="description"]')) && (index.h("div", { key: 'eee5a91ccbe1eed1d2ce41c0ce08cf8b49440501', class: "description" }, index.h("slot", { key: 'a925c57db61229d032412e315ff1f738a479b090', name: "description" }, this.description))))));
|
|
71
71
|
}
|
|
72
72
|
static get formAssociated() { return true; }
|
|
73
73
|
get el() { return index.getElement(this); }
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var index = require('./index-yxDlFA78.js');
|
|
4
|
+
require('react');
|
|
5
|
+
require('react-dom');
|
|
6
|
+
|
|
7
|
+
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);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=xs] nv-icon>svg{width:var(--spacing-3);height:var(--spacing-3);stroke-width:1.2px}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);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=sm] nv-icon>svg{width:var(--spacing-4);height:var(--spacing-4);stroke-width:1.5px}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);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=md] nv-icon>svg{width:var(--spacing-5);height:var(--spacing-5);stroke-width:1.6px}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);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[size=lg] nv-icon>svg{width:var(--spacing-6);height:var(--spacing-6);stroke-width:1.8px}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)}";
|
|
8
|
+
const NvTogglebuttonStyle0 = nvTogglebuttonCss;
|
|
9
|
+
|
|
10
|
+
const NvTogglebutton = class {
|
|
11
|
+
constructor(hostRef) {
|
|
12
|
+
index.registerInstance(this, hostRef);
|
|
13
|
+
this.toggled = index.createEvent(this, "toggled");
|
|
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 EVENTS
|
|
48
|
+
/****************************************************************************/
|
|
49
|
+
//#region RENDER
|
|
50
|
+
render() {
|
|
51
|
+
return (index.h(index.Host, { key: 'a36d2ac3ed287145dae1812e8488313e7509b979', role: "button", tabindex: "0", "aria-pressed": String(this.active), onClick: this.handleClick }, index.h("slot", { key: '463f95e6e68148d94047e8b71c99c449dccffbd6' })));
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
NvTogglebutton.style = NvTogglebuttonStyle0;
|
|
55
|
+
|
|
56
|
+
exports.nv_togglebutton = NvTogglebutton;
|
package/dist/cjs/{nv-togglebuttongroup.entry-Bl43CVZN.js → nv-togglebuttongroup.entry-DzGOSBF7.js}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./index-
|
|
3
|
+
var index = require('./index-yxDlFA78.js');
|
|
4
4
|
require('react');
|
|
5
5
|
require('react-dom');
|
|
6
6
|
|
|
@@ -156,7 +156,7 @@ const NvTogglebuttongroup = class {
|
|
|
156
156
|
/****************************************************************************/
|
|
157
157
|
//#region RENDER
|
|
158
158
|
render() {
|
|
159
|
-
return (index.h(index.Host, { key: '
|
|
159
|
+
return (index.h(index.Host, { key: '02b7814ffceeaa875edcbce4ebdd6465b24abf62' }, index.h("slot", { key: '89c9387a50ec0c1c660e490b66742be96e6f6b3e' })));
|
|
160
160
|
}
|
|
161
161
|
get el() { return index.getElement(this); }
|
|
162
162
|
static get watchers() { return {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var index = require('./index-
|
|
3
|
+
var index = require('./index-yxDlFA78.js');
|
|
4
4
|
require('react');
|
|
5
5
|
require('react-dom');
|
|
6
6
|
|
|
@@ -46,7 +46,7 @@ const NvTooltip = class {
|
|
|
46
46
|
/****************************************************************************/
|
|
47
47
|
//#region RENDER
|
|
48
48
|
render() {
|
|
49
|
-
return (index.h(index.Host, { key: '
|
|
49
|
+
return (index.h(index.Host, { key: '2ec10db6ad78e1637696e383069caf3fc8919587' }, index.h("slot", { key: '0df02ac8d76de82ae25ec3d9c73ef18cd6eee4d8' }), index.h("nv-popover", { key: '1ed0766ed0c3d43952be2be0dbafd94f07ec44b3', triggerMode: "hover", hasArrow: true, placement: this.placement, strategy: this.strategy, triggerElement: this.triggerElement, groupName: 'tooltip', enterDelay: this.enterDelay }, index.h("p", { key: 'bd44fba212d86969688bdf3e00a711f152500952', slot: "content" }, this.message), index.h("slot", { key: '31f2c47d800e4bd057c7475de931e11542eb5208', name: "content" }))));
|
|
50
50
|
}
|
|
51
51
|
get el() { return index.getElement(this); }
|
|
52
52
|
};
|
|
@@ -1,39 +1,88 @@
|
|
|
1
|
-
import React, { useMemo, useState, useEffect, useRef
|
|
2
|
-
import { flexRender, getCoreRowModel, getPaginationRowModel, useReactTable, } from '@tanstack/react-table';
|
|
3
|
-
import { NvTable } from '
|
|
4
|
-
|
|
1
|
+
import React, { useMemo, useState, useEffect, useRef } from 'react';
|
|
2
|
+
import { flexRender, getCoreRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, } from '@tanstack/react-table';
|
|
3
|
+
import { NvTable, NvTableheader } from '../../generated/components';
|
|
4
|
+
function NvDatatable({ columns, rows, pagination, sorting, renderPagination, stickyHeader, ...htmlProps }) {
|
|
5
5
|
const [paginationState, setPaginationState] = useState({
|
|
6
6
|
pageIndex: 0,
|
|
7
7
|
pageSize: pagination?.initialPageSize || 10,
|
|
8
8
|
});
|
|
9
|
+
const [sortingState, setSortingState] = useState(sorting?.sortState || []);
|
|
9
10
|
const lastRowRef = useRef(null);
|
|
10
11
|
const tableColumns = useMemo(() => columns
|
|
11
12
|
.filter((col) => !col.hidden)
|
|
12
|
-
.map((col) =>
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
13
|
+
.map((col) => {
|
|
14
|
+
const columnDef = {
|
|
15
|
+
accessorKey: col.field,
|
|
16
|
+
accessorFn: col.valueFormatter
|
|
17
|
+
? (row) => {
|
|
18
|
+
const rawValue = row[col.field];
|
|
19
|
+
return col.valueFormatter({
|
|
20
|
+
value: rawValue,
|
|
21
|
+
row,
|
|
22
|
+
field: col.field,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
: undefined,
|
|
26
|
+
header: col.headerName || String(col.field),
|
|
27
|
+
size: col.width,
|
|
28
|
+
enableResizing: col.resizable ?? true,
|
|
29
|
+
enableSorting: sorting ? col.sortable ?? true : false,
|
|
30
|
+
cell: (context) => {
|
|
31
|
+
const value = context.getValue();
|
|
32
|
+
const row = context.row.original;
|
|
33
|
+
const rowIndex = context.row.index;
|
|
34
|
+
if (col.renderCell) {
|
|
35
|
+
return col.renderCell({
|
|
36
|
+
value,
|
|
37
|
+
row,
|
|
38
|
+
field: col.field,
|
|
39
|
+
rowIndex,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return value;
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
if (col.sortingFn !== undefined) {
|
|
46
|
+
columnDef.sortingFn = col.sortingFn;
|
|
47
|
+
}
|
|
48
|
+
if (col.sortDescFirst !== undefined) {
|
|
49
|
+
columnDef.sortDescFirst = col.sortDescFirst;
|
|
50
|
+
}
|
|
51
|
+
if (col.invertSorting !== undefined) {
|
|
52
|
+
columnDef.invertSorting = col.invertSorting;
|
|
53
|
+
}
|
|
54
|
+
if (col.sortUndefined !== undefined) {
|
|
55
|
+
columnDef.sortUndefined = col.sortUndefined;
|
|
56
|
+
}
|
|
57
|
+
return columnDef;
|
|
58
|
+
}), [columns, sorting]);
|
|
32
59
|
const tableConfig = useMemo(() => {
|
|
33
60
|
const baseConfig = {
|
|
34
61
|
data: rows,
|
|
35
62
|
columns: tableColumns,
|
|
36
63
|
getCoreRowModel: getCoreRowModel(),
|
|
64
|
+
...(sorting && {
|
|
65
|
+
state: {
|
|
66
|
+
sorting: sorting.sortState || sortingState,
|
|
67
|
+
},
|
|
68
|
+
onSortingChange: sorting.mode === 'server'
|
|
69
|
+
? (updater) => {
|
|
70
|
+
const newSort = typeof updater === 'function'
|
|
71
|
+
? updater(sortingState)
|
|
72
|
+
: updater;
|
|
73
|
+
setSortingState(newSort);
|
|
74
|
+
sorting.onSortingChange?.(newSort);
|
|
75
|
+
}
|
|
76
|
+
: setSortingState,
|
|
77
|
+
manualSorting: sorting.mode === 'server',
|
|
78
|
+
enableSorting: true,
|
|
79
|
+
enableMultiSort: sorting.enableMultiSort ?? false,
|
|
80
|
+
enableSortingRemoval: sorting.enableSortingRemoval ?? true,
|
|
81
|
+
maxMultiSortColCount: sorting.maxMultiSortColCount,
|
|
82
|
+
sortDescFirst: sorting.sortDescFirst ?? false,
|
|
83
|
+
isMultiSortEvent: sorting.enableMultiSort ? () => true : undefined,
|
|
84
|
+
getSortedRowModel: sorting.mode === 'client' ? getSortedRowModel() : undefined,
|
|
85
|
+
}),
|
|
37
86
|
};
|
|
38
87
|
if (!pagination) {
|
|
39
88
|
return baseConfig;
|
|
@@ -64,13 +113,14 @@ const NvDatatable = ({ columns, rows, pagination, renderPagination, stickyHeader
|
|
|
64
113
|
manualPagination: true,
|
|
65
114
|
pageCount,
|
|
66
115
|
state: {
|
|
116
|
+
...baseConfig.state,
|
|
67
117
|
pagination: paginationState,
|
|
68
118
|
},
|
|
69
119
|
onPaginationChange: setPaginationState,
|
|
70
120
|
};
|
|
71
121
|
}
|
|
72
122
|
return baseConfig;
|
|
73
|
-
}, [rows, tableColumns, pagination, paginationState]);
|
|
123
|
+
}, [rows, tableColumns, pagination, paginationState, sorting, sortingState]);
|
|
74
124
|
const table = useReactTable(tableConfig);
|
|
75
125
|
useEffect(() => {
|
|
76
126
|
if (pagination?.mode === 'server' && pagination.onPaginationChange) {
|
|
@@ -133,16 +183,23 @@ const NvDatatable = ({ columns, rows, pagination, renderPagination, stickyHeader
|
|
|
133
183
|
return (React.createElement(React.Fragment, null,
|
|
134
184
|
React.createElement(NvTable, { ...htmlProps },
|
|
135
185
|
React.createElement("table", null,
|
|
136
|
-
React.createElement("thead", { "data-sticky-top": stickyHeader ? 'true' : undefined }, table.getHeaderGroups().map((headerGroup) => (React.createElement("tr", { key: headerGroup.id }, headerGroup.headers.map((header) =>
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
186
|
+
React.createElement("thead", { "data-sticky-top": stickyHeader ? 'true' : undefined }, table.getHeaderGroups().map((headerGroup) => (React.createElement("tr", { key: headerGroup.id }, headerGroup.headers.map((header) => {
|
|
187
|
+
const canSort = header.column.getCanSort();
|
|
188
|
+
const sortDirection = header.column.getIsSorted();
|
|
189
|
+
return (React.createElement("th", { key: header.id, "data-testid": `datatable-header-${header.id}`, style: {
|
|
190
|
+
width: header.column.columnDef.size + 'px',
|
|
191
|
+
}, "data-no-resize": header.column.columnDef.enableResizing ? null : true },
|
|
192
|
+
React.createElement(NvTableheader, { sortable: canSort ? true : undefined, sortDirection: sortDirection || (canSort ? 'none' : undefined), onSortDirectionChanged: canSort
|
|
193
|
+
? header.column.getToggleSortingHandler()
|
|
194
|
+
: undefined }, header.isPlaceholder
|
|
195
|
+
? null
|
|
196
|
+
: flexRender(header.column.columnDef.header, header.getContext()))));
|
|
197
|
+
}))))),
|
|
141
198
|
React.createElement("tbody", null, tableRows.map((row, index) => {
|
|
142
199
|
const isLastRow = isInfiniteScroll && index === tableRows.length - 1;
|
|
143
|
-
return (React.createElement("tr", { key: row.id, "data-testid": `datatable-row-${
|
|
200
|
+
return (React.createElement("tr", { key: row.id, "data-testid": `datatable-row-${index}`, ref: isLastRow ? lastRowRef : undefined }, row.getVisibleCells().map((cell) => (React.createElement("td", { key: cell.id, "data-testid": `datatable-cell-${cell.column.id}` }, flexRender(cell.column.columnDef.cell, cell.getContext()))))));
|
|
144
201
|
})))),
|
|
145
202
|
paginationAPI && renderPagination && renderPagination(paginationAPI)));
|
|
146
|
-
}
|
|
203
|
+
}
|
|
147
204
|
NvDatatable.displayName = 'NvDatatable';
|
|
148
205
|
export { NvDatatable };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -42,6 +42,7 @@ import { NvRow as NvRowElement, defineCustomElement as defineNvRow } from "@nova
|
|
|
42
42
|
import { NvSplit as NvSplitElement, defineCustomElement as defineNvSplit } from "@nova-design-system/nova-webcomponents/dist/components/nv-split.js";
|
|
43
43
|
import { NvStack as NvStackElement, defineCustomElement as defineNvStack } from "@nova-design-system/nova-webcomponents/dist/components/nv-stack.js";
|
|
44
44
|
import { NvTable as NvTableElement, defineCustomElement as defineNvTable } from "@nova-design-system/nova-webcomponents/dist/components/nv-table.js";
|
|
45
|
+
import { NvTableheader as NvTableheaderElement, defineCustomElement as defineNvTableheader } from "@nova-design-system/nova-webcomponents/dist/components/nv-tableheader.js";
|
|
45
46
|
import { NvToggle as NvToggleElement, defineCustomElement as defineNvToggle } from "@nova-design-system/nova-webcomponents/dist/components/nv-toggle.js";
|
|
46
47
|
import { NvTogglebutton as NvTogglebuttonElement, defineCustomElement as defineNvTogglebutton } from "@nova-design-system/nova-webcomponents/dist/components/nv-togglebutton.js";
|
|
47
48
|
import { NvTogglebuttongroup as NvTogglebuttongroupElement, defineCustomElement as defineNvTogglebuttongroup } from "@nova-design-system/nova-webcomponents/dist/components/nv-togglebuttongroup.js";
|
|
@@ -379,6 +380,13 @@ export const NvTable = createComponent({
|
|
|
379
380
|
events: {},
|
|
380
381
|
defineCustomElement: defineNvTable
|
|
381
382
|
});
|
|
383
|
+
export const NvTableheader = createComponent({
|
|
384
|
+
tagName: 'nv-tableheader',
|
|
385
|
+
elementClass: NvTableheaderElement,
|
|
386
|
+
react: React,
|
|
387
|
+
events: { onSortDirectionChanged: 'sortDirectionChanged' },
|
|
388
|
+
defineCustomElement: defineNvTableheader
|
|
389
|
+
});
|
|
382
390
|
export const NvToggle = createComponent({
|
|
383
391
|
tagName: 'nv-toggle',
|
|
384
392
|
elementClass: NvToggleElement,
|
|
@@ -98,7 +98,8 @@ export const NvButton = createComponent({
|
|
|
98
98
|
disabled: 'disabled',
|
|
99
99
|
fluid: 'fluid',
|
|
100
100
|
type: 'type',
|
|
101
|
-
form: 'form'
|
|
101
|
+
form: 'form',
|
|
102
|
+
disableTabindex: 'disable-tabindex'
|
|
102
103
|
},
|
|
103
104
|
hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
|
|
104
105
|
serializeShadowRoot
|
|
@@ -612,7 +613,8 @@ export const NvIconbutton = createComponent({
|
|
|
612
613
|
active: 'active',
|
|
613
614
|
name: 'name',
|
|
614
615
|
type: 'type',
|
|
615
|
-
shape: 'shape'
|
|
616
|
+
shape: 'shape',
|
|
617
|
+
disableTabindex: 'disable-tabindex'
|
|
616
618
|
},
|
|
617
619
|
hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
|
|
618
620
|
serializeShadowRoot
|
|
@@ -723,6 +725,15 @@ export const NvTable = createComponent({
|
|
|
723
725
|
hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
|
|
724
726
|
serializeShadowRoot
|
|
725
727
|
});
|
|
728
|
+
export const NvTableheader = createComponent({
|
|
729
|
+
tagName: 'nv-tableheader',
|
|
730
|
+
properties: {
|
|
731
|
+
sortable: 'sortable',
|
|
732
|
+
sortDirection: 'sort-direction'
|
|
733
|
+
},
|
|
734
|
+
hydrateModule: import('@nova-design-system/nova-webcomponents/hydrate'),
|
|
735
|
+
serializeShadowRoot
|
|
736
|
+
});
|
|
726
737
|
export const NvToggle = createComponent({
|
|
727
738
|
tagName: 'nv-toggle',
|
|
728
739
|
properties: {
|
|
@@ -12,9 +12,16 @@ const generateId = () => {
|
|
|
12
12
|
export const NotificationProvider = ({ children, position = DEFAULT_POSITION, maxNotifications = DEFAULT_MAX_NOTIFICATIONS, className, }) => {
|
|
13
13
|
const [notifications, setNotifications] = useState([]);
|
|
14
14
|
const notificationsRef = useRef([]);
|
|
15
|
+
const timersRef = useRef(new Map());
|
|
15
16
|
useEffect(() => {
|
|
16
17
|
notificationsRef.current = notifications;
|
|
17
18
|
}, [notifications]);
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
return () => {
|
|
21
|
+
timersRef.current.forEach((timer) => clearTimeout(timer));
|
|
22
|
+
timersRef.current.clear();
|
|
23
|
+
};
|
|
24
|
+
}, []);
|
|
18
25
|
const show = useCallback((options) => {
|
|
19
26
|
const id = options.id || generateId();
|
|
20
27
|
const ref = createRef();
|
|
@@ -28,6 +35,7 @@ export const NotificationProvider = ({ children, position = DEFAULT_POSITION, ma
|
|
|
28
35
|
icon: options.icon,
|
|
29
36
|
actions: options.actions ?? [],
|
|
30
37
|
actionSlot: options.actionSlot,
|
|
38
|
+
duration: options.duration ?? 0,
|
|
31
39
|
createdAt: Date.now(),
|
|
32
40
|
ref,
|
|
33
41
|
};
|
|
@@ -40,17 +48,36 @@ export const NotificationProvider = ({ children, position = DEFAULT_POSITION, ma
|
|
|
40
48
|
});
|
|
41
49
|
setTimeout(() => {
|
|
42
50
|
notification.ref.current?.show();
|
|
51
|
+
if (notification.duration && notification.duration > 0) {
|
|
52
|
+
const timer = setTimeout(() => {
|
|
53
|
+
const n = notificationsRef.current.find((item) => item.id === id);
|
|
54
|
+
n?.ref.current?.dismiss();
|
|
55
|
+
}, notification.duration);
|
|
56
|
+
timersRef.current.set(id, timer);
|
|
57
|
+
}
|
|
43
58
|
}, 0);
|
|
44
59
|
return id;
|
|
45
60
|
}, [maxNotifications]);
|
|
46
61
|
const dismiss = useCallback((id) => {
|
|
62
|
+
const timer = timersRef.current.get(id);
|
|
63
|
+
if (timer) {
|
|
64
|
+
clearTimeout(timer);
|
|
65
|
+
timersRef.current.delete(id);
|
|
66
|
+
}
|
|
47
67
|
const n = notificationsRef.current.find((item) => item.id === id);
|
|
48
68
|
n?.ref.current?.dismiss();
|
|
49
69
|
}, []);
|
|
50
70
|
const remove = useCallback((id) => {
|
|
71
|
+
const timer = timersRef.current.get(id);
|
|
72
|
+
if (timer) {
|
|
73
|
+
clearTimeout(timer);
|
|
74
|
+
timersRef.current.delete(id);
|
|
75
|
+
}
|
|
51
76
|
setNotifications((prev) => prev.filter((notification) => notification.id !== id));
|
|
52
77
|
}, []);
|
|
53
78
|
const removeAll = useCallback(() => {
|
|
79
|
+
timersRef.current.forEach((timer) => clearTimeout(timer));
|
|
80
|
+
timersRef.current.clear();
|
|
54
81
|
setNotifications([]);
|
|
55
82
|
}, []);
|
|
56
83
|
const handleNotificationClose = useCallback((id) => {
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { NvDatatableProps } from './types';
|
|
3
|
+
declare function NvDatatable<T>({ columns, rows, pagination, sorting, renderPagination, stickyHeader, ...htmlProps }: NvDatatableProps<T>): React.JSX.Element;
|
|
4
|
+
declare namespace NvDatatable {
|
|
5
|
+
var displayName: string;
|
|
6
|
+
}
|
|
7
|
+
export { NvDatatable };
|