@worknice/whiteboard 0.68.1 → 0.70.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 (55) hide show
  1. package/dist/controls/Action.stories.d.ts +2 -0
  2. package/dist/controls/Button.d.ts +3 -1
  3. package/dist/controls/Button.js +10 -2
  4. package/dist/controls/Button.stories.d.ts +3 -1
  5. package/dist/controls/ButtonLink.js +6 -0
  6. package/dist/controls/Disclosure.d.ts +1 -1
  7. package/dist/controls/Disclosure.js +2 -1
  8. package/dist/controls/Disclosure.stories.d.ts +3 -1
  9. package/dist/controls/MenuButton.d.ts +4 -1
  10. package/dist/controls/MenuButton.js +12 -3
  11. package/dist/controls/MenuButton.stories.d.ts +2 -1
  12. package/dist/hud/NavOrgLogo.d.ts +8 -0
  13. package/dist/hud/NavOrgLogo.js +45 -0
  14. package/dist/hud/NavOrgLogo.module.js +7 -0
  15. package/dist/hud/{NavTitle_module.css → NavOrgLogo_module.css} +8 -3
  16. package/dist/icons/components/CalendarPlus.d.ts +5 -0
  17. package/dist/icons/components/CalendarPlus.js +14 -0
  18. package/dist/icons/components/FileCirclePlus.d.ts +5 -0
  19. package/dist/icons/components/FileCirclePlus.js +14 -0
  20. package/dist/icons/components/FileImport.d.ts +5 -0
  21. package/dist/icons/components/FileImport.js +14 -0
  22. package/dist/icons/components/index.d.ts +3 -0
  23. package/dist/icons/components/index.js +7 -1
  24. package/dist/icons/svgs/CalendarPlus.js +2 -0
  25. package/dist/icons/svgs/FileCirclePlus.js +2 -0
  26. package/dist/icons/svgs/FileImport.js +2 -0
  27. package/dist/layouts/FullLayout.d.ts +3 -4
  28. package/dist/layouts/FullLayout.js +37 -38
  29. package/dist/layouts/FullLayout.module.js +4 -4
  30. package/dist/layouts/FullLayout_module.css +95 -71
  31. package/dist/presentation/Container_module.css +3 -3
  32. package/dist/presentation/Header.js +1 -0
  33. package/dist/presentation/Header.module.js +1 -0
  34. package/dist/presentation/Header_module.css +24 -3
  35. package/dist/presentation/PageHeader.d.ts +14 -0
  36. package/dist/presentation/PageHeader.js +36 -0
  37. package/dist/presentation/PageHeader.module.js +7 -0
  38. package/dist/presentation/PageHeader_module.css +19 -0
  39. package/dist/presentation/RichList/RichList.d.ts +6 -2
  40. package/dist/presentation/RichList/RichList.js +59 -9
  41. package/dist/presentation/RichList/RichListRow.js +2 -1
  42. package/dist/presentation/RichList/RichListSkeleton.js +16 -8
  43. package/dist/presentation/RichList/RichListSkeleton.module.js +2 -1
  44. package/dist/presentation/RichList/RichListSkeleton_module.css +9 -4
  45. package/dist/presentation/RichList/helpers.d.ts +4 -0
  46. package/dist/presentation/RichList/helpers.js +7 -4
  47. package/dist/presentation/RichList/types.d.ts +7 -0
  48. package/dist/shared.css +0 -9
  49. package/dist/static/svg/CalendarPlus.svg +1 -0
  50. package/dist/static/svg/FileCirclePlus.svg +1 -0
  51. package/dist/static/svg/FileImport.svg +1 -0
  52. package/package.json +2 -2
  53. package/dist/hud/NavTitle.d.ts +0 -8
  54. package/dist/hud/NavTitle.js +0 -43
  55. package/dist/hud/NavTitle.module.js +0 -6
@@ -9,7 +9,7 @@ import * as __WEBPACK_EXTERNAL_MODULE__FullLayout_module_js_d92e323f__ from "./F
9
9
  const FullLayout = ({ aside, asidePosition = {
10
10
  desktop: "asideLast",
11
11
  mobile: "asideFirst"
12
- }, backLink, navigation, children, header, mainNavChildren, menuState, navTitle, setMenuState, summary, toolbarChildren, padding = "default" })=>{
12
+ }, navigation, children, header, mainNavChildren, menuState, setMenuState, summary, navToolbarStart, navFooter, padding = "default" })=>{
13
13
  const { pathname, router } = (0, __WEBPACK_EXTERNAL_MODULE__utils_useNextContext_js_47529181__["default"])();
14
14
  const toggleRef = (0, __WEBPACK_EXTERNAL_MODULE_react__.useRef)(null);
15
15
  const navRef = (0, __WEBPACK_EXTERNAL_MODULE_react__.useRef)(null);
@@ -84,43 +84,42 @@ const FullLayout = ({ aside, asidePosition = {
84
84
  [__WEBPACK_EXTERNAL_MODULE__FullLayout_module_js_d92e323f__["default"].closed]: "closed" === menuState
85
85
  }),
86
86
  children: [
87
- mainNavChildren ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)(__WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.Fragment, {
88
- children: [
89
- /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
90
- ref: toggleRef,
91
- className: __WEBPACK_EXTERNAL_MODULE__FullLayout_module_js_d92e323f__["default"].toggle,
92
- children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__hud_ToolbarButton_js_e9a8b3bc__["default"], {
93
- onClick: ()=>{
94
- setMenuState((current)=>"open" === current ? "closed" : "open");
95
- },
96
- title: "Toggle Sidebar",
97
- type: "ghost",
98
- children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__hud_SidebarIcon_js_fabd050a__["default"], {})
99
- })
100
- }),
101
- backLink ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
102
- className: __WEBPACK_EXTERNAL_MODULE__FullLayout_module_js_d92e323f__["default"].back,
103
- children: backLink
104
- }) : null,
105
- /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("nav", {
106
- ref: navRef,
107
- className: __WEBPACK_EXTERNAL_MODULE__FullLayout_module_js_d92e323f__["default"].nav,
108
- children: [
109
- /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
110
- className: __WEBPACK_EXTERNAL_MODULE__FullLayout_module_js_d92e323f__["default"].toolbar,
111
- children: toolbarChildren
112
- }),
113
- navTitle ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
114
- className: __WEBPACK_EXTERNAL_MODULE__FullLayout_module_js_d92e323f__["default"].navTitle,
115
- children: navTitle
116
- }) : null,
117
- /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
118
- className: __WEBPACK_EXTERNAL_MODULE__FullLayout_module_js_d92e323f__["default"].navContent,
119
- children: mainNavChildren
120
- })
121
- ]
122
- })
123
- ]
87
+ mainNavChildren ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.Fragment, {
88
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("nav", {
89
+ ref: navRef,
90
+ className: __WEBPACK_EXTERNAL_MODULE__FullLayout_module_js_d92e323f__["default"].nav,
91
+ children: [
92
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("header", {
93
+ className: __WEBPACK_EXTERNAL_MODULE__FullLayout_module_js_d92e323f__["default"].navToolbar,
94
+ children: [
95
+ navToolbarStart ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
96
+ className: __WEBPACK_EXTERNAL_MODULE__FullLayout_module_js_d92e323f__["default"].navToolbarStart,
97
+ children: navToolbarStart
98
+ }) : null,
99
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
100
+ ref: toggleRef,
101
+ className: __WEBPACK_EXTERNAL_MODULE__FullLayout_module_js_d92e323f__["default"].navToolbarEnd,
102
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__hud_ToolbarButton_js_e9a8b3bc__["default"], {
103
+ onClick: ()=>{
104
+ setMenuState((current)=>"open" === current ? "closed" : "open");
105
+ },
106
+ title: "Toggle Sidebar",
107
+ type: "ghost",
108
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__hud_SidebarIcon_js_fabd050a__["default"], {})
109
+ })
110
+ })
111
+ ]
112
+ }),
113
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
114
+ className: __WEBPACK_EXTERNAL_MODULE__FullLayout_module_js_d92e323f__["default"].navContent,
115
+ children: mainNavChildren
116
+ }),
117
+ navFooter ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("footer", {
118
+ className: __WEBPACK_EXTERNAL_MODULE__FullLayout_module_js_d92e323f__["default"].navFooter,
119
+ children: navFooter
120
+ }) : null
121
+ ]
122
+ })
124
123
  }) : null,
125
124
  /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
126
125
  className: (0, __WEBPACK_EXTERNAL_MODULE_clsx__["default"])(__WEBPACK_EXTERNAL_MODULE__FullLayout_module_js_d92e323f__["default"].content, "default" === padding && __WEBPACK_EXTERNAL_MODULE__FullLayout_module_js_d92e323f__["default"].padded, aside && {
@@ -3,11 +3,11 @@ const FullLayout_module_rslib_entry_ = {
3
3
  container: "container-lghvCT",
4
4
  open: "open-rMThLK",
5
5
  closed: "closed-iSkj26",
6
- toggle: "toggle-GcG0Tq",
7
- back: "back-vj3cdG",
8
6
  nav: "nav-PJYqK6",
9
- toolbar: "toolbar-Jw7eYV",
10
- navTitle: "navTitle-rDcRNN",
7
+ navToolbar: "navToolbar-fPH7h5",
8
+ navToolbarStart: "navToolbarStart-D3u8SP",
9
+ navToolbarEnd: "navToolbarEnd-dAB2oH",
10
+ navFooter: "navFooter-t_dTvk",
11
11
  navContent: "navContent-xOgco3",
12
12
  header: "header-BPDFUI",
13
13
  summary: "summary-yyotr2",
@@ -1,3 +1,14 @@
1
+ :root {
2
+ --nav-toggle-size: 38px;
3
+ --content-padded-horizontal-padding: var(--size-00);
4
+ }
5
+
6
+ @media (min-width: 768px) {
7
+ :root {
8
+ --content-padded-horizontal-padding: var(--size-p2);
9
+ }
10
+ }
11
+
1
12
  @media (max-width: 768px) {
2
13
  body:has(.container-lghvCT.open-rMThLK) {
3
14
  overflow: hidden;
@@ -5,7 +16,13 @@
5
16
  }
6
17
 
7
18
  .container-lghvCT {
19
+ --nav-toggle-inset: calc(var(--nav-toggle-size) + var(--size-n2));
8
20
  --nav-width: 100vw;
21
+ --page-header-inset: 0;
22
+ }
23
+
24
+ .closed-iSkj26:has(.nav-PJYqK6).container-lghvCT {
25
+ --page-header-inset: var(--nav-toggle-inset);
9
26
  }
10
27
 
11
28
  @media (min-width: 768px) {
@@ -24,62 +41,20 @@
24
41
  }
25
42
  }
26
43
 
27
- .toggle-GcG0Tq {
28
- color: #000;
29
- -webkit-user-select: none;
30
- user-select: none;
31
- z-index: 3;
32
- border-radius: 11px;
33
- position: fixed;
34
- top: 16px;
35
- left: 16px;
36
- }
37
-
38
- .closed-iSkj26 .toggle-GcG0Tq {
39
- -webkit-backdrop-filter: blur(20px);
40
- backdrop-filter: blur(20px);
41
- box-sizing: border-box;
42
- color: var(--tone-default);
43
- background: #ffffffb3;
44
- border: .5px solid #3c3c435c;
45
- }
46
-
47
- .back-vj3cdG {
48
- left: calc(var(--nav-width) + 16px);
49
- -webkit-user-select: none;
50
- user-select: none;
51
- z-index: 3;
52
- transition: left .25s ease-in-out;
53
- position: fixed;
54
- top: 16px;
55
- }
56
-
57
- .closed-iSkj26 .back-vj3cdG {
58
- left: 70px;
59
- }
60
-
61
- @media (max-width: 1440px) {
62
- .container-lghvCT:not(.closed-iSkj26, .open-rMThLK) .back-vj3cdG {
63
- left: 70px;
64
- }
65
- }
66
-
67
44
  .nav-PJYqK6 {
68
45
  --accent-color: var(--color-purple-000);
69
- -webkit-backdrop-filter: blur(20px);
70
- backdrop-filter: blur(20px);
71
46
  color: #000;
72
47
  justify-items: space-between;
73
48
  font-family: var(--typeface-system);
74
49
  bottom: 0;
75
50
  left: calc(-1 * var(--nav-width) - 1px);
51
+ padding-top: var(--size-n1);
76
52
  -webkit-user-select: none;
77
53
  user-select: none;
78
54
  width: var(--nav-width);
79
55
  z-index: 2;
80
- background: #ffffffb3;
81
- grid-template-rows: auto auto minmax(0, 1fr);
82
- padding-top: 16px;
56
+ border-right: .5px solid #3c3c435c;
57
+ grid-template-rows: auto minmax(0, 1fr) auto;
83
58
  font-size: 17px;
84
59
  font-style: normal;
85
60
  font-weight: 400;
@@ -89,7 +64,20 @@
89
64
  position: fixed;
90
65
  top: 0;
91
66
  overflow-y: hidden;
92
- box-shadow: .5px 0 #3c3c435c;
67
+ }
68
+
69
+ .nav-PJYqK6:before {
70
+ -webkit-backdrop-filter: blur(20px);
71
+ backdrop-filter: blur(20px);
72
+ content: "";
73
+ pointer-events: none;
74
+ z-index: -1;
75
+ background: #ffffffb3;
76
+ width: 100%;
77
+ position: absolute;
78
+ top: 0;
79
+ bottom: 0;
80
+ left: 0;
93
81
  }
94
82
 
95
83
  @media (min-width: 1440px) {
@@ -106,23 +94,76 @@
106
94
  left: 0;
107
95
  }
108
96
 
109
- .toolbar-Jw7eYV {
110
- justify-content: flex-end;
97
+ .navToolbar-fPH7h5 {
98
+ min-height: var(--nav-toggle-size);
99
+ padding: 0 var(--size-n1);
100
+ justify-content: space-between;
101
+ align-items: flex-start;
102
+ display: flex;
103
+ }
104
+
105
+ .navToolbarStart-D3u8SP {
106
+ flex: 1;
111
107
  align-items: center;
112
- height: 38px;
113
- padding: 0 16px;
108
+ min-width: 0;
114
109
  display: flex;
115
110
  }
116
111
 
117
- .navTitle-rDcRNN {
118
- padding: 16px 16px 0;
112
+ .navToolbarStart-D3u8SP button {
113
+ text-align: start;
114
+ justify-content: start;
115
+ max-width: 100%;
116
+ }
117
+
118
+ .navToolbarEnd-dAB2oH {
119
+ color: #000;
120
+ -webkit-user-select: none;
121
+ user-select: none;
122
+ border-radius: 11px;
123
+ flex-shrink: 0;
124
+ }
125
+
126
+ .closed-iSkj26 .navToolbarEnd-dAB2oH {
127
+ -webkit-backdrop-filter: blur(20px);
128
+ backdrop-filter: blur(20px);
129
+ box-sizing: border-box;
130
+ color: var(--tone-default);
131
+ left: var(--content-padded-horizontal-padding);
132
+ top: var(--size-n1);
133
+ z-index: 3;
134
+ background: #ffffffb3;
135
+ border: .5px solid #3c3c435c;
136
+ transition: left .25s ease-in-out;
137
+ position: fixed;
138
+ }
139
+
140
+ .navFooter-t_dTvk {
141
+ gap: var(--size-n3);
142
+ padding: 0 var(--size-n1) var(--size-n1);
143
+ display: grid;
144
+ }
145
+
146
+ .navFooter-t_dTvk button {
147
+ justify-content: start;
148
+ width: 100%;
119
149
  }
120
150
 
121
151
  .navContent-xOgco3 {
122
- padding: 16px;
152
+ margin-block: var(--size-n1);
153
+ min-height: 0;
154
+ padding-inline: var(--size-n1);
123
155
  overflow-y: auto;
124
156
  }
125
157
 
158
+ .header-BPDFUI {
159
+ --page-header-inset: 0;
160
+ transition: padding-left .25s ease-in-out;
161
+ }
162
+
163
+ .closed-iSkj26:has(.nav-PJYqK6) .header-BPDFUI {
164
+ padding-left: var(--nav-toggle-inset);
165
+ }
166
+
126
167
  @media (min-width: 1024px) {
127
168
  .header-BPDFUI {
128
169
  grid-column: 1 / -1;
@@ -173,16 +214,7 @@
173
214
  }
174
215
 
175
216
  .content-kaxfp0.padded-L3X4Ui {
176
- padding-top: 60px;
177
- padding-bottom: var(--size-00);
178
- padding-left: var(--size-00);
179
- padding-right: var(--size-00);
180
- }
181
-
182
- @media (min-width: 768px) {
183
- .content-kaxfp0.padded-L3X4Ui {
184
- padding: 60px var(--size-p3) var(--size-p3);
185
- }
217
+ padding: var(--size-n1) var(--content-padded-horizontal-padding);
186
218
  }
187
219
 
188
220
  @media (min-width: 1024px) {
@@ -195,11 +227,3 @@
195
227
  }
196
228
  }
197
229
 
198
- @media (min-width: 1440px) {
199
- .content-kaxfp0.padded-L3X4Ui {
200
- padding-bottom: var(--size-p4);
201
- padding-left: var(--size-p4);
202
- padding-right: var(--size-p4);
203
- }
204
- }
205
-
@@ -16,14 +16,14 @@
16
16
 
17
17
  .narrowWidthContent-jzMzq_ {
18
18
  width: 100%;
19
- padding-left: var(--container-spacing);
20
- padding-right: var(--container-spacing);
21
19
  }
22
20
 
23
- @media (min-width: 720px) {
21
+ @media (min-width: 768px) {
24
22
  .narrowWidthContent-jzMzq_ {
23
+ --page-header-inset: 0;
25
24
  width: 900px;
26
25
  max-width: calc(100% - var(--container-spacing) * 2);
26
+ padding: 0 var(--size-00);
27
27
  margin-left: auto;
28
28
  margin-right: auto;
29
29
  }
@@ -8,6 +8,7 @@ const Header = ({ actions, children, description, id, tagName: Tag = "header" })
8
8
  children: children
9
9
  }),
10
10
  actions ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
11
+ className: __WEBPACK_EXTERNAL_MODULE__Header_module_js_6aa79f68__["default"].actions,
11
12
  children: actions
12
13
  }) : null,
13
14
  description ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
@@ -1,6 +1,7 @@
1
1
  import "./Header_module.css";
2
2
  const Header_module_rslib_entry_ = {
3
3
  container: "container-LpNftB",
4
+ actions: "actions-M11a7I",
4
5
  description: "description-z2GJWi"
5
6
  };
6
7
  export { Header_module_rslib_entry_ as default };
@@ -1,17 +1,38 @@
1
1
  .container-LpNftB {
2
- align-items: center;
2
+ align-items: flex-start;
3
3
  gap: var(--size-n2) var(--size-p2);
4
4
  grid-template-columns: 1fr auto;
5
5
  display: grid;
6
6
  }
7
7
 
8
+ .container-LpNftB > div:first-child {
9
+ min-width: 0;
10
+ }
11
+
12
+ .actions-M11a7I {
13
+ flex-shrink: 0;
14
+ }
15
+
8
16
  .description-z2GJWi {
9
17
  grid-column: 1 / -1;
10
18
  }
11
19
 
12
20
  @media (max-width: 768px) {
13
- .container-LpNftB {
14
- grid-template-columns: 1fr;
21
+ .actions-M11a7I [data-button-part="label"] {
22
+ clip: rect(0, 0, 0, 0);
23
+ white-space: nowrap;
24
+ border: 0;
25
+ width: 1px;
26
+ height: 1px;
27
+ margin: -1px;
28
+ padding: 0;
29
+ position: absolute;
30
+ overflow: hidden;
31
+ }
32
+
33
+ .actions-M11a7I :is(button, a, span):has([data-button-part="icon"]):has([data-button-part="label"]) {
34
+ padding: var(--size-n2);
35
+ gap: 0;
15
36
  }
16
37
  }
17
38
 
@@ -0,0 +1,14 @@
1
+ import type { ReactNode } from "react";
2
+ type BackLink = {
3
+ href: string;
4
+ tooltip: ReactNode;
5
+ };
6
+ type Props = {
7
+ actions?: ReactNode;
8
+ backLink?: BackLink;
9
+ children: ReactNode;
10
+ description?: ReactNode;
11
+ id?: string;
12
+ };
13
+ declare const PageHeader: ({ actions, backLink, children, description, id }: Props) => import("react/jsx-runtime").JSX.Element;
14
+ export default PageHeader;
@@ -0,0 +1,36 @@
1
+ "use client";
2
+ import * as __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__ from "react/jsx-runtime";
3
+ import * as __WEBPACK_EXTERNAL_MODULE__controls_ButtonLink_js_1677d8df__ from "../controls/ButtonLink.js";
4
+ import * as __WEBPACK_EXTERNAL_MODULE__icons_components_ChevronLeft_js_95fe0c36__ from "../icons/components/ChevronLeft.js";
5
+ import * as __WEBPACK_EXTERNAL_MODULE__Header_js_94d20122__ from "./Header.js";
6
+ import * as __WEBPACK_EXTERNAL_MODULE__PageHeader_module_js_aa2b4516__ from "./PageHeader.module.js";
7
+ const PageHeader = ({ actions, backLink, children, description, id })=>/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("header", {
8
+ className: __WEBPACK_EXTERNAL_MODULE__PageHeader_module_js_aa2b4516__["default"].pageHeader,
9
+ id: id,
10
+ children: [
11
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsxs)("div", {
12
+ className: __WEBPACK_EXTERNAL_MODULE__PageHeader_module_js_aa2b4516__["default"].top,
13
+ children: [
14
+ backLink ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__controls_ButtonLink_js_1677d8df__["default"], {
15
+ href: backLink.href,
16
+ icon: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__icons_components_ChevronLeft_js_95fe0c36__["default"], {}),
17
+ tooltip: backLink.tooltip,
18
+ type: "ghost"
19
+ }) : null,
20
+ /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
21
+ className: __WEBPACK_EXTERNAL_MODULE__PageHeader_module_js_aa2b4516__["default"].main,
22
+ children: /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__Header_js_94d20122__["default"], {
23
+ actions: actions,
24
+ tagName: "div",
25
+ children: children
26
+ })
27
+ })
28
+ ]
29
+ }),
30
+ description ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)("div", {
31
+ children: description
32
+ }) : null
33
+ ]
34
+ });
35
+ const PageHeader_rslib_entry_ = PageHeader;
36
+ export { PageHeader_rslib_entry_ as default };
@@ -0,0 +1,7 @@
1
+ import "./PageHeader_module.css";
2
+ const PageHeader_module_rslib_entry_ = {
3
+ pageHeader: "pageHeader-RV66CE",
4
+ top: "top-wChgfn",
5
+ main: "main-KE919g"
6
+ };
7
+ export { PageHeader_module_rslib_entry_ as default };
@@ -0,0 +1,19 @@
1
+ .pageHeader-RV66CE {
2
+ gap: var(--size-n2);
3
+ flex-direction: column;
4
+ display: flex;
5
+ }
6
+
7
+ .top-wChgfn {
8
+ align-items: flex-start;
9
+ gap: var(--size-n2);
10
+ padding-left: var(--page-header-inset, 0);
11
+ transition: padding-left .25s ease-in-out;
12
+ display: flex;
13
+ }
14
+
15
+ .main-KE919g {
16
+ flex: 1;
17
+ min-width: 0;
18
+ }
19
+
@@ -110,14 +110,18 @@ type CommonProps<Type> = {
110
110
  * Set with `pathName` if you want column filters and visibility saved between visits.
111
111
  * @default (omitted) persistence disabled.
112
112
  */
113
+ storageId?: string;
114
+ /**
115
+ * @deprecated Use `storageId`. Kept for backwards compatibility with `Table`.
116
+ */
113
117
  id?: string;
114
118
  /**
115
- * Scope for saved list settings; use together with `id` so persistence is enabled.
119
+ * Scope for saved list settings; use together with `storageId` so persistence is enabled.
116
120
  * @default (omitted) persistence disabled.
117
121
  */
118
122
  pathName?: string;
119
123
  /**
120
- * Schema for validating stored list state when using `id` and `pathName`.
124
+ * Schema for validating stored list state when using `storageId` and `pathName`.
121
125
  * @default (omitted) stored JSON is not parsed with Zod before use.
122
126
  */
123
127
  localStorageSchema?: ZodTypeAny;
@@ -43,7 +43,8 @@ function mergeInlineSinglePersistedColumnFilters(tableColumnFilters, inlineColum
43
43
  }
44
44
  ];
45
45
  }
46
- const RichListInner = ({ data, getRowId, leadingSlot, mainSlot, contentSlots = EMPTY_RICH_LIST_CONTENT_SLOTS, contentAlignment = "space-evenly", trailingSlot, href, onClick, rowActions, bulkActions = EMPTY_RICH_LIST_BULK_ACTIONS, secondaryBulkActions = EMPTY_RICH_LIST_BULK_ACTIONS, rowHeight = "medium", csvFilename, fillContainerHeight = false, compactBreakpoint: compactBreakpointProp, emptyState = "No results", id, pathName, localStorageSchema, header, onFiltersChange })=>{
46
+ const RichListInner = ({ data, getRowId, leadingSlot, mainSlot, contentSlots = EMPTY_RICH_LIST_CONTENT_SLOTS, contentAlignment = "space-evenly", trailingSlot, href, onClick, rowActions, bulkActions = EMPTY_RICH_LIST_BULK_ACTIONS, secondaryBulkActions = EMPTY_RICH_LIST_BULK_ACTIONS, rowHeight = "medium", csvFilename, fillContainerHeight = false, compactBreakpoint: compactBreakpointProp, emptyState = "No results", storageId, id, pathName, localStorageSchema, header, onFiltersChange })=>{
47
+ const resolvedStorageId = storageId ?? id;
47
48
  const [searchTerm, setSearchTerm] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)("");
48
49
  const [inlineSingleSelectChoice, setInlineSingleSelectChoice] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)(void 0);
49
50
  const [isFilterModalOpen, setIsFilterModalOpen] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)(false);
@@ -154,6 +155,9 @@ const RichListInner = ({ data, getRowId, leadingSlot, mainSlot, contentSlots = E
154
155
  const sortableEntryIds = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>new Set(sortableEntries.map((entry)=>entry.id)), [
155
156
  sortableEntries
156
157
  ]);
158
+ const groupableEntryIds = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>new Set(groupableEntries.map((entry)=>entry.id)), [
159
+ groupableEntries
160
+ ]);
157
161
  const columnDefs = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>{
158
162
  const columnHelper = (0, __WEBPACK_EXTERNAL_MODULE__tanstack_react_table_777e1b4b__.createColumnHelper)();
159
163
  const tableFilteringForEntry = (entryId)=>!(void 0 !== inlineSingleSelectExcludedFromTableColumnId && entryId === inlineSingleSelectExcludedFromTableColumnId);
@@ -222,9 +226,9 @@ const RichListInner = ({ data, getRowId, leadingSlot, mainSlot, contentSlots = E
222
226
  }), [
223
227
  entriesWithFilter
224
228
  ]);
225
- const storageKey = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>pathName && id ? `${pathName}#${id}_richList` : null, [
229
+ const storageKey = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>pathName && resolvedStorageId ? `${pathName}#${resolvedStorageId}_richList` : null, [
226
230
  pathName,
227
- id
231
+ resolvedStorageId
228
232
  ]);
229
233
  const localStorageData = "undefined" != typeof window && storageKey ? window.localStorage.getItem(storageKey) : null;
230
234
  const parsedLocalStorage = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>{
@@ -245,6 +249,10 @@ const RichListInner = ({ data, getRowId, leadingSlot, mainSlot, contentSlots = E
245
249
  parsedLocalStorage.sorting,
246
250
  sortableEntryIds
247
251
  ]);
252
+ const initialGrouping = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>(parsedLocalStorage.grouping ?? []).filter((id)=>groupableEntryIds.has(id)), [
253
+ groupableEntryIds,
254
+ parsedLocalStorage.grouping
255
+ ]);
248
256
  const mergedInitialPersistedColumnFilters = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>parsedLocalStorage.columnFilters ?? columnFiltersInitialState, [
249
257
  parsedLocalStorage.columnFilters,
250
258
  columnFiltersInitialState
@@ -333,7 +341,7 @@ const RichListInner = ({ data, getRowId, leadingSlot, mainSlot, contentSlots = E
333
341
  columnVisibility: initialColumnVisibility,
334
342
  expanded: true,
335
343
  globalFilter: "",
336
- grouping: parsedLocalStorage.grouping ?? [],
344
+ grouping: initialGrouping,
337
345
  sorting: initialSorting
338
346
  },
339
347
  defaultColumn: {
@@ -359,6 +367,38 @@ const RichListInner = ({ data, getRowId, leadingSlot, mainSlot, contentSlots = E
359
367
  permanentlyHiddenColumnIds,
360
368
  table
361
369
  ]);
370
+ const hasRestoredLayoutFromStorageRef = (0, __WEBPACK_EXTERNAL_MODULE_react__.useRef)(false);
371
+ (0, __WEBPACK_EXTERNAL_MODULE_react__.useLayoutEffect)(()=>{
372
+ if (hasRestoredLayoutFromStorageRef.current || !storageKey || !localStorageSchema) return;
373
+ hasRestoredLayoutFromStorageRef.current = true;
374
+ const raw = window.localStorage.getItem(storageKey);
375
+ if (!raw) return;
376
+ try {
377
+ const parsed = JSON.parse(raw);
378
+ localStorageSchema.parse(parsed);
379
+ const sorting = (parsed.sorting ?? []).filter((sort)=>sortableEntryIds.has(sort.id));
380
+ if (sorting.length > 0) table.setSorting(sorting);
381
+ const grouping = (parsed.grouping ?? []).filter((id)=>groupableEntryIds.has(id));
382
+ if (grouping.length > 0) table.setGrouping(grouping);
383
+ if (parsed.columnVisibility) table.setColumnVisibility((prev)=>{
384
+ const next = {
385
+ ...prev,
386
+ ...parsed.columnVisibility
387
+ };
388
+ for (const id of permanentlyHiddenColumnIds)next[id] = false;
389
+ return next;
390
+ });
391
+ } catch (error) {
392
+ console.error("Error restoring RichList layout from localStorage:", error);
393
+ }
394
+ }, [
395
+ groupableEntryIds,
396
+ localStorageSchema,
397
+ permanentlyHiddenColumnIds,
398
+ sortableEntryIds,
399
+ storageKey,
400
+ table
401
+ ]);
362
402
  const tableState = table.getState();
363
403
  const persistedSorting = (0, __WEBPACK_EXTERNAL_MODULE_react__.useMemo)(()=>tableState.sorting.filter((sort)=>sortableEntryIds.has(sort.id)), [
364
404
  sortableEntryIds,
@@ -376,7 +416,8 @@ const RichListInner = ({ data, getRowId, leadingSlot, mainSlot, contentSlots = E
376
416
  ]);
377
417
  const showSearchReset = activeFilterCount > 0 || "" !== tableState.globalFilter;
378
418
  (0, __WEBPACK_EXTERNAL_MODULE_react__.useEffect)(()=>{
379
- if (storageKey) window.localStorage.setItem(storageKey, JSON.stringify({
419
+ if (!storageKey) return;
420
+ window.localStorage.setItem(storageKey, JSON.stringify({
380
421
  columnFilters: mergeInlineSinglePersistedColumnFilters(tableState.columnFilters, inlineSingleSelectExcludedFromTableColumnId, inlineSingleSelectOptionIdResolved),
381
422
  columnVisibility: tableState.columnVisibility,
382
423
  sorting: persistedSorting,
@@ -731,10 +772,17 @@ const RichListInner = ({ data, getRowId, leadingSlot, mainSlot, contentSlots = E
731
772
  };
732
773
  const RICH_LIST_DEFER_ROW_THRESHOLD = 1000;
733
774
  const RichList = (props)=>{
734
- const shouldDefer = props.data.length > RICH_LIST_DEFER_ROW_THRESHOLD;
735
- const [ready, setReady] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)(!shouldDefer);
775
+ const resolvedStorageId = props.storageId ?? props.id;
776
+ const persistenceEnabled = Boolean(resolvedStorageId);
777
+ const persistencePathReady = !persistenceEnabled || Boolean(props.pathName);
778
+ const shouldDefer = props.data.length > RICH_LIST_DEFER_ROW_THRESHOLD || persistenceEnabled;
779
+ const [ready, setReady] = (0, __WEBPACK_EXTERNAL_MODULE_react__.useState)(!shouldDefer && persistencePathReady);
736
780
  (0, __WEBPACK_EXTERNAL_MODULE_react__.useEffect)(()=>{
737
- if (ready) return;
781
+ if (ready || !persistencePathReady) return;
782
+ if (!shouldDefer) {
783
+ setReady(true);
784
+ return;
785
+ }
738
786
  let innerHandle = 0;
739
787
  const outerHandle = requestAnimationFrame(()=>{
740
788
  innerHandle = requestAnimationFrame(()=>setReady(true));
@@ -744,7 +792,9 @@ const RichList = (props)=>{
744
792
  cancelAnimationFrame(innerHandle);
745
793
  };
746
794
  }, [
747
- ready
795
+ persistencePathReady,
796
+ ready,
797
+ shouldDefer
748
798
  ]);
749
799
  return ready ? /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(RichListInner, {
750
800
  ...props
@@ -258,7 +258,8 @@ const RichListRow = ({ row, table, groupEntry, enableRowSelection, anyRowCanBeSe
258
258
  icon: action.icon,
259
259
  tooltip: action.label,
260
260
  href: action.href(rowOriginal),
261
- external: action.external
261
+ external: action.external,
262
+ download: action.download?.(rowOriginal)
262
263
  }, action.id);
263
264
  if ("onClick" === action.type) return /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_react_jsx_runtime_225474f2__.jsx)(__WEBPACK_EXTERNAL_MODULE__controls_Button_js_2f50b64a__["default"], {
264
265
  id: action.id,