@richardmcquiston01/dashboard-widgets-toolkit 0.9.0 → 0.10.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.
@@ -573,6 +573,12 @@ interface WidgetDefinition {
573
573
  * are not locked.
574
574
  */
575
575
  readonly locked?: boolean | WidgetLock;
576
+ /**
577
+ * The widget's home page in a paged dashboard: a page key or title. A
578
+ * widget no page lists yet (and a widget locked against moving) shows here;
579
+ * without it, on the first page. Ignored when the layout has no pages.
580
+ */
581
+ readonly page?: string;
576
582
  }
577
583
  /** What a viewer may not do to a locked widget. */
578
584
  interface WidgetLock {
@@ -616,6 +622,8 @@ interface LayoutItem {
616
622
  readonly sortOrder?: number;
617
623
  /** See `WidgetDefinition.locked`. Pinned widgets hold their slot. */
618
624
  readonly locked?: boolean | WidgetLock;
625
+ /** See `WidgetDefinition.page`: the widget's home page. */
626
+ readonly page?: string;
619
627
  }
620
628
  interface DashboardLayout {
621
629
  /** Widget keys in display order. Keys not listed follow, by sortOrder. */
@@ -624,7 +632,34 @@ interface DashboardLayout {
624
632
  readonly hidden: readonly string[];
625
633
  /** Widget keys collapsed to their header. */
626
634
  readonly minimized: readonly string[];
635
+ /**
636
+ * Pages of widgets. Absent, the lists above are the one and only page. With
637
+ * pages, each page owns its own lists and the top-level lists are left
638
+ * empty. See `pages.ts`.
639
+ */
640
+ readonly pages?: readonly LayoutPage[];
641
+ }
642
+ /** One page of a paged layout: the same lists as a layout, plus a name. */
643
+ interface LayoutPage {
644
+ /** Unique within the layout and stable when the page is renamed or moved. */
645
+ readonly key: string;
646
+ /** Shown in the page bar. At most `MAX_PAGE_TITLE_LENGTH` characters. */
647
+ readonly title: string;
648
+ readonly order: readonly string[];
649
+ readonly hidden: readonly string[];
650
+ readonly minimized: readonly string[];
651
+ /** Rows this page holds, overriding the dashboard's default. */
652
+ readonly maxRows?: number;
627
653
  }
654
+ /** Longest page title; longer saved titles are cut. */
655
+ declare const MAX_PAGE_TITLE_LENGTH = 30;
656
+ /**
657
+ * Most pages `parseLayout` keeps: a safety ceiling against malformed or
658
+ * hostile JSON, not a product limit.
659
+ */
660
+ declare const MAX_PARSED_PAGES = 50;
661
+ /** Most rows a page may be given with `maxRows`. */
662
+ declare const MAX_PAGE_ROWS = 20;
628
663
  declare const EMPTY_LAYOUT: DashboardLayout;
629
664
  /**
630
665
  * Reads a saved layout: a JSON string or an already-parsed object. Missing,
@@ -720,4 +755,4 @@ declare function niceDomain(values: readonly number[], tickCount?: number): Nice
720
755
  */
721
756
  declare function labelStride(count: number, maxLabels?: number): number;
722
757
 
723
- export { type LoadingWidget as $, type AlertListWidgetData as A, type BarListWidgetData as B, type CachedPayload as C, type DashboardWidget as D, type DetailMode as E, type DetailPage as F, type GraphWidgetData as G, type DetailProvider as H, type DetailProviders as I, type DetailSort as J, type KpiWidgetData as K, type Locale as L, EMPTY_LAYOUT as M, type NiceDomain as N, type EmptyWidget as O, type EnforceLocksOptions as P, type Err as Q, type ResolvedTableControls as R, type ErrorWidget as S, type TableWidgetData as T, type FormatOptions as U, type GraphPoint as V, type WidgetSize as W, type GraphSeries as X, type KpiDelta as Y, type KpiDeltaOptions as Z, type LayoutItem as _, type WidgetFill as a, resolveWidget as a$, MAX_DETAIL_PAGE_SIZE as a0, MAX_GRAPH_SERIES as a1, type Ok as a2, type OkWidget as a3, type ProviderOptions as a4, type ResolvedDetailOptions as a5, type ResolvedWidget as a6, type ResolvedWidgetLock as a7, type SortDirection as a8, type TableCell as a9, formatValue as aA, hiddenWidgets as aB, hideWidget as aC, isHidden as aD, isMinimized as aE, isWidgetEmptyState as aF, isWidgetKind as aG, isWidgetVisibleTo as aH, kpiDelta as aI, labelStride as aJ, loadingWidgets as aK, minimizeWidget as aL, moveWidget as aM, moveWidgetBy as aN, moveWidgetDown as aO, moveWidgetUp as aP, niceDomain as aQ, niceStep as aR, ok as aS, parseDetailQuery as aT, parseLayout as aU, percentChange as aV, pruneLayout as aW, queryRows as aX, resolveDetailOptions as aY, resolvePayload as aZ, resolveTableControls as a_, type TableColumn as aa, VALUE_FORMATS as ab, type ValueFormat as ac, WIDGET_FILLS as ad, WIDGET_KINDS as ae, WIDGET_SIZES as af, type WidgetCache as ag, type WidgetDataOf as ah, type WidgetDetailOptions as ai, type WidgetEmptyState as aj, type WidgetLock as ak, type WidgetProvider as al, type WidgetStatus as am, type WidgetTableControls as an, cacheKeyFor as ao, defaultDetailQuery as ap, defineWidget as aq, deriveDetailData as ar, describeUnknownError as as, emptyTextFor as at, emptyWidget as au, enforceLocks as av, err as aw, failedWidget as ax, formatCount as ay, formatPercentChange as az, type WidgetDefinition as b, resolveWidgetLock as b0, resolveWidgets as b1, restoreWidget as b2, serializeDetailQuery as b3, serializeLayout as b4, shareOf as b5, showWidget as b6, sortDefinitions as b7, tableDetailData as b8, toggleHidden as b9, toggleMinimized as ba, validateDetailData as bb, visibleWidgets as bc, widgetsFor as bd, type DetailProviderOptions as c, type DetailData as d, type DetailQuery as e, type DashboardLayout as f, type GaugeWidgetData as g, type TextWidgetData as h, type WidgetData as i, type ResolveOptions as j, type WidgetContext as k, type WidgetProviders as l, type WidgetKind as m, type Result as n, type WidgetPayload as o, type AlertListItem as p, type BarListItem as q, DEFAULT_COMPARISON_LABEL as r, DEFAULT_CURRENCY as s, DEFAULT_DETAIL_PAGE_SIZE as t, DEFAULT_EMPTY_TEXT as u, DETAIL_MODES as v, type DeltaDirection as w, type DeltaSentiment as x, type DetailCell as y, type DetailColumn as z };
758
+ export { type KpiDeltaOptions as $, type AlertListWidgetData as A, type BarListWidgetData as B, type CachedPayload as C, type DashboardWidget as D, type DetailCell as E, type DetailColumn as F, type GraphWidgetData as G, type DetailMode as H, type DetailPage as I, type DetailProvider as J, type KpiWidgetData as K, type Locale as L, type DetailProviders as M, type NiceDomain as N, type DetailSort as O, EMPTY_LAYOUT as P, type EmptyWidget as Q, type ResolvedTableControls as R, type EnforceLocksOptions as S, type TableWidgetData as T, type Err as U, type ErrorWidget as V, type WidgetSize as W, type FormatOptions as X, type GraphPoint as Y, type GraphSeries as Z, type KpiDelta as _, type WidgetFill as a, queryRows as a$, type LoadingWidget as a0, MAX_DETAIL_PAGE_SIZE as a1, MAX_GRAPH_SERIES as a2, MAX_PAGE_ROWS as a3, MAX_PAGE_TITLE_LENGTH as a4, MAX_PARSED_PAGES as a5, type Ok as a6, type OkWidget as a7, type ProviderOptions as a8, type ResolvedDetailOptions as a9, err as aA, failedWidget as aB, formatCount as aC, formatPercentChange as aD, formatValue as aE, hiddenWidgets as aF, hideWidget as aG, isHidden as aH, isMinimized as aI, isWidgetEmptyState as aJ, isWidgetKind as aK, isWidgetVisibleTo as aL, kpiDelta as aM, labelStride as aN, loadingWidgets as aO, minimizeWidget as aP, moveWidget as aQ, moveWidgetBy as aR, moveWidgetDown as aS, moveWidgetUp as aT, niceDomain as aU, niceStep as aV, ok as aW, parseDetailQuery as aX, parseLayout as aY, percentChange as aZ, pruneLayout as a_, type ResolvedWidget as aa, type ResolvedWidgetLock as ab, type SortDirection as ac, type TableCell as ad, type TableColumn as ae, VALUE_FORMATS as af, type ValueFormat as ag, WIDGET_FILLS as ah, WIDGET_KINDS as ai, WIDGET_SIZES as aj, type WidgetCache as ak, type WidgetDataOf as al, type WidgetDetailOptions as am, type WidgetEmptyState as an, type WidgetLock as ao, type WidgetProvider as ap, type WidgetStatus as aq, type WidgetTableControls as ar, cacheKeyFor as as, defaultDetailQuery as at, defineWidget as au, deriveDetailData as av, describeUnknownError as aw, emptyTextFor as ax, emptyWidget as ay, enforceLocks as az, type WidgetDefinition as b, resolveDetailOptions as b0, resolvePayload as b1, resolveTableControls as b2, resolveWidget as b3, resolveWidgetLock as b4, resolveWidgets as b5, restoreWidget as b6, serializeDetailQuery as b7, serializeLayout as b8, shareOf as b9, showWidget as ba, sortDefinitions as bb, tableDetailData as bc, toggleHidden as bd, toggleMinimized as be, validateDetailData as bf, visibleWidgets as bg, widgetsFor as bh, type DetailProviderOptions as c, type DetailData as d, type DetailQuery as e, type DashboardLayout as f, type GaugeWidgetData as g, type TextWidgetData as h, type WidgetData as i, type ResolveOptions as j, type WidgetContext as k, type WidgetProviders as l, type LayoutItem as m, type Result as n, type LayoutPage as o, type WidgetKind as p, type WidgetPayload as q, type AlertListItem as r, type BarListItem as s, DEFAULT_COMPARISON_LABEL as t, DEFAULT_CURRENCY as u, DEFAULT_DETAIL_PAGE_SIZE as v, DEFAULT_EMPTY_TEXT as w, DETAIL_MODES as x, type DeltaDirection as y, type DeltaSentiment as z };
@@ -573,6 +573,12 @@ interface WidgetDefinition {
573
573
  * are not locked.
574
574
  */
575
575
  readonly locked?: boolean | WidgetLock;
576
+ /**
577
+ * The widget's home page in a paged dashboard: a page key or title. A
578
+ * widget no page lists yet (and a widget locked against moving) shows here;
579
+ * without it, on the first page. Ignored when the layout has no pages.
580
+ */
581
+ readonly page?: string;
576
582
  }
577
583
  /** What a viewer may not do to a locked widget. */
578
584
  interface WidgetLock {
@@ -616,6 +622,8 @@ interface LayoutItem {
616
622
  readonly sortOrder?: number;
617
623
  /** See `WidgetDefinition.locked`. Pinned widgets hold their slot. */
618
624
  readonly locked?: boolean | WidgetLock;
625
+ /** See `WidgetDefinition.page`: the widget's home page. */
626
+ readonly page?: string;
619
627
  }
620
628
  interface DashboardLayout {
621
629
  /** Widget keys in display order. Keys not listed follow, by sortOrder. */
@@ -624,7 +632,34 @@ interface DashboardLayout {
624
632
  readonly hidden: readonly string[];
625
633
  /** Widget keys collapsed to their header. */
626
634
  readonly minimized: readonly string[];
635
+ /**
636
+ * Pages of widgets. Absent, the lists above are the one and only page. With
637
+ * pages, each page owns its own lists and the top-level lists are left
638
+ * empty. See `pages.ts`.
639
+ */
640
+ readonly pages?: readonly LayoutPage[];
641
+ }
642
+ /** One page of a paged layout: the same lists as a layout, plus a name. */
643
+ interface LayoutPage {
644
+ /** Unique within the layout and stable when the page is renamed or moved. */
645
+ readonly key: string;
646
+ /** Shown in the page bar. At most `MAX_PAGE_TITLE_LENGTH` characters. */
647
+ readonly title: string;
648
+ readonly order: readonly string[];
649
+ readonly hidden: readonly string[];
650
+ readonly minimized: readonly string[];
651
+ /** Rows this page holds, overriding the dashboard's default. */
652
+ readonly maxRows?: number;
627
653
  }
654
+ /** Longest page title; longer saved titles are cut. */
655
+ declare const MAX_PAGE_TITLE_LENGTH = 30;
656
+ /**
657
+ * Most pages `parseLayout` keeps: a safety ceiling against malformed or
658
+ * hostile JSON, not a product limit.
659
+ */
660
+ declare const MAX_PARSED_PAGES = 50;
661
+ /** Most rows a page may be given with `maxRows`. */
662
+ declare const MAX_PAGE_ROWS = 20;
628
663
  declare const EMPTY_LAYOUT: DashboardLayout;
629
664
  /**
630
665
  * Reads a saved layout: a JSON string or an already-parsed object. Missing,
@@ -720,4 +755,4 @@ declare function niceDomain(values: readonly number[], tickCount?: number): Nice
720
755
  */
721
756
  declare function labelStride(count: number, maxLabels?: number): number;
722
757
 
723
- export { type LoadingWidget as $, type AlertListWidgetData as A, type BarListWidgetData as B, type CachedPayload as C, type DashboardWidget as D, type DetailMode as E, type DetailPage as F, type GraphWidgetData as G, type DetailProvider as H, type DetailProviders as I, type DetailSort as J, type KpiWidgetData as K, type Locale as L, EMPTY_LAYOUT as M, type NiceDomain as N, type EmptyWidget as O, type EnforceLocksOptions as P, type Err as Q, type ResolvedTableControls as R, type ErrorWidget as S, type TableWidgetData as T, type FormatOptions as U, type GraphPoint as V, type WidgetSize as W, type GraphSeries as X, type KpiDelta as Y, type KpiDeltaOptions as Z, type LayoutItem as _, type WidgetFill as a, resolveWidget as a$, MAX_DETAIL_PAGE_SIZE as a0, MAX_GRAPH_SERIES as a1, type Ok as a2, type OkWidget as a3, type ProviderOptions as a4, type ResolvedDetailOptions as a5, type ResolvedWidget as a6, type ResolvedWidgetLock as a7, type SortDirection as a8, type TableCell as a9, formatValue as aA, hiddenWidgets as aB, hideWidget as aC, isHidden as aD, isMinimized as aE, isWidgetEmptyState as aF, isWidgetKind as aG, isWidgetVisibleTo as aH, kpiDelta as aI, labelStride as aJ, loadingWidgets as aK, minimizeWidget as aL, moveWidget as aM, moveWidgetBy as aN, moveWidgetDown as aO, moveWidgetUp as aP, niceDomain as aQ, niceStep as aR, ok as aS, parseDetailQuery as aT, parseLayout as aU, percentChange as aV, pruneLayout as aW, queryRows as aX, resolveDetailOptions as aY, resolvePayload as aZ, resolveTableControls as a_, type TableColumn as aa, VALUE_FORMATS as ab, type ValueFormat as ac, WIDGET_FILLS as ad, WIDGET_KINDS as ae, WIDGET_SIZES as af, type WidgetCache as ag, type WidgetDataOf as ah, type WidgetDetailOptions as ai, type WidgetEmptyState as aj, type WidgetLock as ak, type WidgetProvider as al, type WidgetStatus as am, type WidgetTableControls as an, cacheKeyFor as ao, defaultDetailQuery as ap, defineWidget as aq, deriveDetailData as ar, describeUnknownError as as, emptyTextFor as at, emptyWidget as au, enforceLocks as av, err as aw, failedWidget as ax, formatCount as ay, formatPercentChange as az, type WidgetDefinition as b, resolveWidgetLock as b0, resolveWidgets as b1, restoreWidget as b2, serializeDetailQuery as b3, serializeLayout as b4, shareOf as b5, showWidget as b6, sortDefinitions as b7, tableDetailData as b8, toggleHidden as b9, toggleMinimized as ba, validateDetailData as bb, visibleWidgets as bc, widgetsFor as bd, type DetailProviderOptions as c, type DetailData as d, type DetailQuery as e, type DashboardLayout as f, type GaugeWidgetData as g, type TextWidgetData as h, type WidgetData as i, type ResolveOptions as j, type WidgetContext as k, type WidgetProviders as l, type WidgetKind as m, type Result as n, type WidgetPayload as o, type AlertListItem as p, type BarListItem as q, DEFAULT_COMPARISON_LABEL as r, DEFAULT_CURRENCY as s, DEFAULT_DETAIL_PAGE_SIZE as t, DEFAULT_EMPTY_TEXT as u, DETAIL_MODES as v, type DeltaDirection as w, type DeltaSentiment as x, type DetailCell as y, type DetailColumn as z };
758
+ export { type KpiDeltaOptions as $, type AlertListWidgetData as A, type BarListWidgetData as B, type CachedPayload as C, type DashboardWidget as D, type DetailCell as E, type DetailColumn as F, type GraphWidgetData as G, type DetailMode as H, type DetailPage as I, type DetailProvider as J, type KpiWidgetData as K, type Locale as L, type DetailProviders as M, type NiceDomain as N, type DetailSort as O, EMPTY_LAYOUT as P, type EmptyWidget as Q, type ResolvedTableControls as R, type EnforceLocksOptions as S, type TableWidgetData as T, type Err as U, type ErrorWidget as V, type WidgetSize as W, type FormatOptions as X, type GraphPoint as Y, type GraphSeries as Z, type KpiDelta as _, type WidgetFill as a, queryRows as a$, type LoadingWidget as a0, MAX_DETAIL_PAGE_SIZE as a1, MAX_GRAPH_SERIES as a2, MAX_PAGE_ROWS as a3, MAX_PAGE_TITLE_LENGTH as a4, MAX_PARSED_PAGES as a5, type Ok as a6, type OkWidget as a7, type ProviderOptions as a8, type ResolvedDetailOptions as a9, err as aA, failedWidget as aB, formatCount as aC, formatPercentChange as aD, formatValue as aE, hiddenWidgets as aF, hideWidget as aG, isHidden as aH, isMinimized as aI, isWidgetEmptyState as aJ, isWidgetKind as aK, isWidgetVisibleTo as aL, kpiDelta as aM, labelStride as aN, loadingWidgets as aO, minimizeWidget as aP, moveWidget as aQ, moveWidgetBy as aR, moveWidgetDown as aS, moveWidgetUp as aT, niceDomain as aU, niceStep as aV, ok as aW, parseDetailQuery as aX, parseLayout as aY, percentChange as aZ, pruneLayout as a_, type ResolvedWidget as aa, type ResolvedWidgetLock as ab, type SortDirection as ac, type TableCell as ad, type TableColumn as ae, VALUE_FORMATS as af, type ValueFormat as ag, WIDGET_FILLS as ah, WIDGET_KINDS as ai, WIDGET_SIZES as aj, type WidgetCache as ak, type WidgetDataOf as al, type WidgetDetailOptions as am, type WidgetEmptyState as an, type WidgetLock as ao, type WidgetProvider as ap, type WidgetStatus as aq, type WidgetTableControls as ar, cacheKeyFor as as, defaultDetailQuery as at, defineWidget as au, deriveDetailData as av, describeUnknownError as aw, emptyTextFor as ax, emptyWidget as ay, enforceLocks as az, type WidgetDefinition as b, resolveDetailOptions as b0, resolvePayload as b1, resolveTableControls as b2, resolveWidget as b3, resolveWidgetLock as b4, resolveWidgets as b5, restoreWidget as b6, serializeDetailQuery as b7, serializeLayout as b8, shareOf as b9, showWidget as ba, sortDefinitions as bb, tableDetailData as bc, toggleHidden as bd, toggleMinimized as be, validateDetailData as bf, visibleWidgets as bg, widgetsFor as bh, type DetailProviderOptions as c, type DetailData as d, type DetailQuery as e, type DashboardLayout as f, type GaugeWidgetData as g, type TextWidgetData as h, type WidgetData as i, type ResolveOptions as j, type WidgetContext as k, type WidgetProviders as l, type LayoutItem as m, type Result as n, type LayoutPage as o, type WidgetKind as p, type WidgetPayload as q, type AlertListItem as r, type BarListItem as s, DEFAULT_COMPARISON_LABEL as t, DEFAULT_CURRENCY as u, DEFAULT_DETAIL_PAGE_SIZE as v, DEFAULT_EMPTY_TEXT as w, DETAIL_MODES as x, type DeltaDirection as y, type DeltaSentiment as z };
package/dist/styles.css CHANGED
@@ -179,6 +179,132 @@
179
179
  font-size: 0.875rem;
180
180
  }
181
181
 
182
+ :where(.dwt-pages) {
183
+ display: flex;
184
+ align-items: center;
185
+ gap: 8px;
186
+ margin-bottom: 12px;
187
+ }
188
+
189
+ :where(.dwt-page-tabs) {
190
+ display: flex;
191
+ flex-wrap: wrap;
192
+ gap: 4px;
193
+ min-width: 0;
194
+ }
195
+
196
+ :where(.dwt-page-tab) {
197
+ box-sizing: border-box;
198
+ min-height: 32px;
199
+ padding: 4px 12px;
200
+ font: inherit;
201
+ font-size: 0.875rem;
202
+ color: var(--dwt-text-secondary);
203
+ background: transparent;
204
+ border: 0;
205
+ border-bottom: 2px solid transparent;
206
+ cursor: pointer;
207
+ }
208
+
209
+ :where(.dwt-page-tab[aria-selected='true']) {
210
+ color: var(--dwt-text);
211
+ font-weight: 600;
212
+ border-bottom-color: var(--dwt-text);
213
+ }
214
+
215
+ :where(.dwt-page-tab:focus-visible) {
216
+ outline: 2px solid var(--dwt-focus);
217
+ outline-offset: 2px;
218
+ }
219
+
220
+ :where(.dwt-page-dot) {
221
+ display: none;
222
+ box-sizing: border-box;
223
+ width: 12px;
224
+ height: 12px;
225
+ border: 2px solid var(--dwt-text-secondary);
226
+ border-radius: 50%;
227
+ background: transparent;
228
+ }
229
+
230
+ :where(.dwt-page-tab[aria-selected='true'] .dwt-page-dot) {
231
+ border-color: var(--dwt-text);
232
+ background: var(--dwt-text);
233
+ }
234
+
235
+ @media (max-width: 640px) {
236
+ :where(.dwt-pages) {
237
+ justify-content: center;
238
+ }
239
+
240
+ :where(.dwt-page-tab) {
241
+ min-width: 24px;
242
+ min-height: 24px;
243
+ padding: 6px;
244
+ border-bottom: 0;
245
+ }
246
+
247
+ :where(.dwt-page-tab-title) {
248
+ position: absolute;
249
+ width: 1px;
250
+ height: 1px;
251
+ overflow: hidden;
252
+ clip-path: inset(50%);
253
+ white-space: nowrap;
254
+ }
255
+
256
+ :where(.dwt-page-dot) {
257
+ display: block;
258
+ }
259
+ }
260
+
261
+ :where(.dwt-page-manage) {
262
+ display: flex;
263
+ flex-wrap: wrap;
264
+ align-items: center;
265
+ gap: 8px;
266
+ margin-bottom: 12px;
267
+ font-size: 0.875rem;
268
+ }
269
+
270
+ :where(.dwt-page-rename) {
271
+ display: inline-flex;
272
+ align-items: center;
273
+ gap: 6px;
274
+ }
275
+
276
+ :where(.dwt-page-title-input) {
277
+ box-sizing: border-box;
278
+ height: 28px;
279
+ padding: 0 8px;
280
+ font: inherit;
281
+ color: var(--dwt-text);
282
+ background: var(--dwt-surface, transparent);
283
+ border: 1px solid var(--dwt-border);
284
+ border-radius: 6px;
285
+ }
286
+
287
+ :where(.dwt-page-error) {
288
+ color: var(--dwt-text);
289
+ font-weight: 600;
290
+ }
291
+
292
+ :where(.dwt-move-select) {
293
+ box-sizing: border-box;
294
+ max-width: 9rem;
295
+ height: 28px;
296
+ font: inherit;
297
+ font-size: 0.8125rem;
298
+ color: var(--dwt-text);
299
+ background: var(--dwt-surface, transparent);
300
+ border: 1px solid var(--dwt-border);
301
+ border-radius: 6px;
302
+ }
303
+
304
+ :where(.dwt-page-panel) {
305
+ min-width: 0;
306
+ }
307
+
182
308
  :where(.dwt-confirm) {
183
309
  display: inline-flex;
184
310
  align-items: center;
@@ -751,3 +877,15 @@
751
877
  border-radius: 6px;
752
878
  padding: 4px 8px;
753
879
  }
880
+
881
+ /* The previous and next buttons only help when the tabs collapse to dots.
882
+ After .dwt-icon-button so this display wins. */
883
+ :where(.dwt-page-nav) {
884
+ display: none;
885
+ }
886
+
887
+ @media (max-width: 640px) {
888
+ :where(.dwt-page-nav) {
889
+ display: inline-flex;
890
+ }
891
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@richardmcquiston01/dashboard-widgets-toolkit",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "Framework-agnostic dashboard widget toolkit: typed widget definitions and data payloads (KPI, gauge, table, bar list, alert list, chart), user layout (order, hide, minimise), and React renderers. Bring your own data providers.",
5
5
  "keywords": [
6
6
  "dashboard",