@mshuja288/aksuicore 0.3.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -84,12 +84,16 @@ declare function Snackbar({ message, success, onDismiss, }: {
84
84
  /** @deprecated Prefer Snackbar — alias kept for configurator migration */
85
85
  declare const StatusMessage: typeof Snackbar;
86
86
 
87
- declare function Topbar({ title, logoSrc, logoAlt, username, onLogout, children, }: {
87
+ declare function Topbar({ title, logoSrc, logoAlt, username, onLogout, showMenuButton, menuOpen, onMenuClick, children, }: {
88
88
  title: string;
89
89
  logoSrc?: string;
90
90
  logoAlt?: string;
91
91
  username?: string;
92
92
  onLogout?: () => void;
93
+ /** Shows a hamburger control (used by AppShell drawer on small screens). */
94
+ showMenuButton?: boolean;
95
+ menuOpen?: boolean;
96
+ onMenuClick?: () => void;
93
97
  children?: ReactNode;
94
98
  }): react.JSX.Element;
95
99
 
@@ -99,11 +103,12 @@ type SideNavItem = {
99
103
  /** Compact label for the mobile bottom nav (falls back to `label`). */
100
104
  short?: string;
101
105
  };
102
- declare function SideNav({ items, activeId, onSelect, label, }: {
106
+ declare function SideNav({ items, activeId, onSelect, label, className, }: {
103
107
  items: SideNavItem[];
104
108
  activeId: string;
105
109
  onSelect: (id: string) => void;
106
110
  label?: string;
111
+ className?: string;
107
112
  }): react.JSX.Element;
108
113
 
109
114
  type PageSizeOption = {
@@ -132,6 +137,7 @@ declare function FormActions({ pending, editing, saveLabel, updateLabel, newLabe
132
137
  replaceSaveWhenEditing?: boolean;
133
138
  }): react.JSX.Element | null;
134
139
 
140
+ type MobileNavMode = "drawer" | "bottom" | "hybrid";
135
141
  type AppShellProps = {
136
142
  title: string;
137
143
  logoSrc?: string;
@@ -142,8 +148,21 @@ type AppShellProps = {
142
148
  activeNavId: string;
143
149
  onNavSelect: (id: string) => void;
144
150
  navLabel?: string;
145
- /** When true (default), renders a mobile bottom nav from `navItems`. */
151
+ /**
152
+ * Small-screen navigation strategy.
153
+ * - `drawer` (default): hamburger opens a collapsible side menu; no crowded bottom bar
154
+ * - `bottom`: classic bottom nav from all `navItems` (fine for a few sections)
155
+ * - `hybrid`: compact bottom bar with current section + Menu that opens the drawer
156
+ */
157
+ mobileNav?: MobileNavMode;
158
+ /**
159
+ * When true, renders the mobile bottom nav.
160
+ * Defaults to true for `bottom` / `hybrid`, false for `drawer`.
161
+ */
146
162
  showBottomNav?: boolean;
163
+ /** Controlled drawer open state (optional). */
164
+ navDrawerOpen?: boolean;
165
+ onNavDrawerOpenChange?: (open: boolean) => void;
147
166
  topbarActions?: ReactNode;
148
167
  children: ReactNode;
149
168
  /** Extra class on the content/screen region */
@@ -151,9 +170,9 @@ type AppShellProps = {
151
170
  };
152
171
  /**
153
172
  * Application chrome: topbar + left side nav + content screen.
154
- * Matches aksconfigurator_ui shell layout.
173
+ * On small screens, prefers a collapsible drawer over a crowded bottom nav.
155
174
  */
156
- declare function AppShell({ title, logoSrc, logoAlt, username, onLogout, navItems, activeNavId, onNavSelect, navLabel, showBottomNav, topbarActions, children, screenClassName, }: AppShellProps): react.JSX.Element;
175
+ declare function AppShell({ title, logoSrc, logoAlt, username, onLogout, navItems, activeNavId, onNavSelect, navLabel, mobileNav, showBottomNav, navDrawerOpen, onNavDrawerOpenChange, topbarActions, children, screenClassName, }: AppShellProps): react.JSX.Element;
157
176
 
158
177
  type TableColumn<T> = {
159
178
  key: string;
@@ -165,10 +184,19 @@ type TableColumn<T> = {
165
184
  /** When set, filter uses an exact-match Select instead of text contains. */
166
185
  filterOptions?: SelectOption[];
167
186
  filterPlaceholder?: string;
187
+ /** When false, column starts hidden. Default true. */
188
+ defaultVisible?: boolean;
189
+ /** Key sent to export APIs when different from `key` (e.g. PascalCase property name). */
190
+ exportKey?: string;
168
191
  };
169
192
  /** Formats supported by the shared table download control (matches akscore TableExport). */
170
193
  type ExportDownloadFormat = "csv" | "xlsx" | "json";
171
- declare function RecordWorkspace<T>({ title, columns, items, rowKey, empty, onAdd, addLabel, canAdd, onView, onUpdate, onDelete, canUpdate, canDelete, onDownload, canDownload, downloadBusy, toolbar, form, }: {
194
+ /** Column descriptors passed to `onDownload` (visible columns only). */
195
+ type ExportColumnRef = {
196
+ key: string;
197
+ header: string;
198
+ };
199
+ declare function RecordWorkspace<T>({ title, columns, items, rowKey, empty, onAdd, addLabel, canAdd, onView, onUpdate, onDelete, canUpdate, canDelete, onDownload, canDownload, downloadBusy, showColumnPicker, columnPrefsKey, visibleColumnKeys, defaultVisibleColumnKeys, onVisibleColumnKeysChange, toolbar, form, }: {
172
200
  title: string;
173
201
  columns: TableColumn<T>[];
174
202
  items: T[];
@@ -182,10 +210,22 @@ declare function RecordWorkspace<T>({ title, columns, items, rowKey, empty, onAd
182
210
  onDelete?: (item: T) => void;
183
211
  canUpdate?: (item: T) => boolean;
184
212
  canDelete?: (item: T) => boolean;
185
- /** When set, shows CSV / Excel / JSON download controls in the side rail. */
186
- onDownload?: (format: ExportDownloadFormat) => void;
213
+ /**
214
+ * When set, shows CSV / Excel / JSON download controls.
215
+ * Second argument lists currently visible columns (exportKey ?? key).
216
+ */
217
+ onDownload?: (format: ExportDownloadFormat, columns: ExportColumnRef[]) => void;
187
218
  canDownload?: boolean;
188
219
  downloadBusy?: boolean;
220
+ /** Column checklist in the side rail. Default true. */
221
+ showColumnPicker?: boolean;
222
+ /** Persist visible column keys in localStorage under this key. */
223
+ columnPrefsKey?: string;
224
+ /** Controlled visible column keys. */
225
+ visibleColumnKeys?: string[];
226
+ /** Uncontrolled initial visible keys (defaults to columns with defaultVisible !== false). */
227
+ defaultVisibleColumnKeys?: string[];
228
+ onVisibleColumnKeysChange?: (keys: string[]) => void;
189
229
  toolbar?: ReactNode;
190
230
  /** Slot for Add/Update/View dialogs owned by the host app. */
191
231
  form?: ReactNode;
@@ -193,4 +233,4 @@ declare function RecordWorkspace<T>({ title, columns, items, rowKey, empty, onAd
193
233
  /** @deprecated Prefer RecordWorkspace — alias kept for configurator migration */
194
234
  declare const RecordTable: typeof RecordWorkspace;
195
235
 
196
- export { type AksuiTokenName, AppSelect, type AppSelectOption, AppShell, type AppShellProps, Button, type ButtonVariant, ConfirmDeleteDialog, DateField, Dialog, type ExportDownloadFormat, FormActions, FormDialog, type PageSizeOption, Pagination, RecordTable, RecordWorkspace, Select, type SelectOption, SideNav, type SideNavItem, Snackbar, StatusMessage, type TableColumn, Topbar, aksuiThemeVersion, aksuiTokens };
236
+ export { type AksuiTokenName, AppSelect, type AppSelectOption, AppShell, type AppShellProps, Button, type ButtonVariant, ConfirmDeleteDialog, DateField, Dialog, type ExportColumnRef, type ExportDownloadFormat, FormActions, FormDialog, type MobileNavMode, type PageSizeOption, Pagination, RecordTable, RecordWorkspace, Select, type SelectOption, SideNav, type SideNavItem, Snackbar, StatusMessage, type TableColumn, Topbar, aksuiThemeVersion, aksuiTokens };
package/dist/index.d.ts CHANGED
@@ -84,12 +84,16 @@ declare function Snackbar({ message, success, onDismiss, }: {
84
84
  /** @deprecated Prefer Snackbar — alias kept for configurator migration */
85
85
  declare const StatusMessage: typeof Snackbar;
86
86
 
87
- declare function Topbar({ title, logoSrc, logoAlt, username, onLogout, children, }: {
87
+ declare function Topbar({ title, logoSrc, logoAlt, username, onLogout, showMenuButton, menuOpen, onMenuClick, children, }: {
88
88
  title: string;
89
89
  logoSrc?: string;
90
90
  logoAlt?: string;
91
91
  username?: string;
92
92
  onLogout?: () => void;
93
+ /** Shows a hamburger control (used by AppShell drawer on small screens). */
94
+ showMenuButton?: boolean;
95
+ menuOpen?: boolean;
96
+ onMenuClick?: () => void;
93
97
  children?: ReactNode;
94
98
  }): react.JSX.Element;
95
99
 
@@ -99,11 +103,12 @@ type SideNavItem = {
99
103
  /** Compact label for the mobile bottom nav (falls back to `label`). */
100
104
  short?: string;
101
105
  };
102
- declare function SideNav({ items, activeId, onSelect, label, }: {
106
+ declare function SideNav({ items, activeId, onSelect, label, className, }: {
103
107
  items: SideNavItem[];
104
108
  activeId: string;
105
109
  onSelect: (id: string) => void;
106
110
  label?: string;
111
+ className?: string;
107
112
  }): react.JSX.Element;
108
113
 
109
114
  type PageSizeOption = {
@@ -132,6 +137,7 @@ declare function FormActions({ pending, editing, saveLabel, updateLabel, newLabe
132
137
  replaceSaveWhenEditing?: boolean;
133
138
  }): react.JSX.Element | null;
134
139
 
140
+ type MobileNavMode = "drawer" | "bottom" | "hybrid";
135
141
  type AppShellProps = {
136
142
  title: string;
137
143
  logoSrc?: string;
@@ -142,8 +148,21 @@ type AppShellProps = {
142
148
  activeNavId: string;
143
149
  onNavSelect: (id: string) => void;
144
150
  navLabel?: string;
145
- /** When true (default), renders a mobile bottom nav from `navItems`. */
151
+ /**
152
+ * Small-screen navigation strategy.
153
+ * - `drawer` (default): hamburger opens a collapsible side menu; no crowded bottom bar
154
+ * - `bottom`: classic bottom nav from all `navItems` (fine for a few sections)
155
+ * - `hybrid`: compact bottom bar with current section + Menu that opens the drawer
156
+ */
157
+ mobileNav?: MobileNavMode;
158
+ /**
159
+ * When true, renders the mobile bottom nav.
160
+ * Defaults to true for `bottom` / `hybrid`, false for `drawer`.
161
+ */
146
162
  showBottomNav?: boolean;
163
+ /** Controlled drawer open state (optional). */
164
+ navDrawerOpen?: boolean;
165
+ onNavDrawerOpenChange?: (open: boolean) => void;
147
166
  topbarActions?: ReactNode;
148
167
  children: ReactNode;
149
168
  /** Extra class on the content/screen region */
@@ -151,9 +170,9 @@ type AppShellProps = {
151
170
  };
152
171
  /**
153
172
  * Application chrome: topbar + left side nav + content screen.
154
- * Matches aksconfigurator_ui shell layout.
173
+ * On small screens, prefers a collapsible drawer over a crowded bottom nav.
155
174
  */
156
- declare function AppShell({ title, logoSrc, logoAlt, username, onLogout, navItems, activeNavId, onNavSelect, navLabel, showBottomNav, topbarActions, children, screenClassName, }: AppShellProps): react.JSX.Element;
175
+ declare function AppShell({ title, logoSrc, logoAlt, username, onLogout, navItems, activeNavId, onNavSelect, navLabel, mobileNav, showBottomNav, navDrawerOpen, onNavDrawerOpenChange, topbarActions, children, screenClassName, }: AppShellProps): react.JSX.Element;
157
176
 
158
177
  type TableColumn<T> = {
159
178
  key: string;
@@ -165,10 +184,19 @@ type TableColumn<T> = {
165
184
  /** When set, filter uses an exact-match Select instead of text contains. */
166
185
  filterOptions?: SelectOption[];
167
186
  filterPlaceholder?: string;
187
+ /** When false, column starts hidden. Default true. */
188
+ defaultVisible?: boolean;
189
+ /** Key sent to export APIs when different from `key` (e.g. PascalCase property name). */
190
+ exportKey?: string;
168
191
  };
169
192
  /** Formats supported by the shared table download control (matches akscore TableExport). */
170
193
  type ExportDownloadFormat = "csv" | "xlsx" | "json";
171
- declare function RecordWorkspace<T>({ title, columns, items, rowKey, empty, onAdd, addLabel, canAdd, onView, onUpdate, onDelete, canUpdate, canDelete, onDownload, canDownload, downloadBusy, toolbar, form, }: {
194
+ /** Column descriptors passed to `onDownload` (visible columns only). */
195
+ type ExportColumnRef = {
196
+ key: string;
197
+ header: string;
198
+ };
199
+ declare function RecordWorkspace<T>({ title, columns, items, rowKey, empty, onAdd, addLabel, canAdd, onView, onUpdate, onDelete, canUpdate, canDelete, onDownload, canDownload, downloadBusy, showColumnPicker, columnPrefsKey, visibleColumnKeys, defaultVisibleColumnKeys, onVisibleColumnKeysChange, toolbar, form, }: {
172
200
  title: string;
173
201
  columns: TableColumn<T>[];
174
202
  items: T[];
@@ -182,10 +210,22 @@ declare function RecordWorkspace<T>({ title, columns, items, rowKey, empty, onAd
182
210
  onDelete?: (item: T) => void;
183
211
  canUpdate?: (item: T) => boolean;
184
212
  canDelete?: (item: T) => boolean;
185
- /** When set, shows CSV / Excel / JSON download controls in the side rail. */
186
- onDownload?: (format: ExportDownloadFormat) => void;
213
+ /**
214
+ * When set, shows CSV / Excel / JSON download controls.
215
+ * Second argument lists currently visible columns (exportKey ?? key).
216
+ */
217
+ onDownload?: (format: ExportDownloadFormat, columns: ExportColumnRef[]) => void;
187
218
  canDownload?: boolean;
188
219
  downloadBusy?: boolean;
220
+ /** Column checklist in the side rail. Default true. */
221
+ showColumnPicker?: boolean;
222
+ /** Persist visible column keys in localStorage under this key. */
223
+ columnPrefsKey?: string;
224
+ /** Controlled visible column keys. */
225
+ visibleColumnKeys?: string[];
226
+ /** Uncontrolled initial visible keys (defaults to columns with defaultVisible !== false). */
227
+ defaultVisibleColumnKeys?: string[];
228
+ onVisibleColumnKeysChange?: (keys: string[]) => void;
189
229
  toolbar?: ReactNode;
190
230
  /** Slot for Add/Update/View dialogs owned by the host app. */
191
231
  form?: ReactNode;
@@ -193,4 +233,4 @@ declare function RecordWorkspace<T>({ title, columns, items, rowKey, empty, onAd
193
233
  /** @deprecated Prefer RecordWorkspace — alias kept for configurator migration */
194
234
  declare const RecordTable: typeof RecordWorkspace;
195
235
 
196
- export { type AksuiTokenName, AppSelect, type AppSelectOption, AppShell, type AppShellProps, Button, type ButtonVariant, ConfirmDeleteDialog, DateField, Dialog, type ExportDownloadFormat, FormActions, FormDialog, type PageSizeOption, Pagination, RecordTable, RecordWorkspace, Select, type SelectOption, SideNav, type SideNavItem, Snackbar, StatusMessage, type TableColumn, Topbar, aksuiThemeVersion, aksuiTokens };
236
+ export { type AksuiTokenName, AppSelect, type AppSelectOption, AppShell, type AppShellProps, Button, type ButtonVariant, ConfirmDeleteDialog, DateField, Dialog, type ExportColumnRef, type ExportDownloadFormat, FormActions, FormDialog, type MobileNavMode, type PageSizeOption, Pagination, RecordTable, RecordWorkspace, Select, type SelectOption, SideNav, type SideNavItem, Snackbar, StatusMessage, type TableColumn, Topbar, aksuiThemeVersion, aksuiTokens };