@toolbox-web/grid-react 0.8.0 → 0.9.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 CHANGED
@@ -14,6 +14,7 @@ React adapter for `@toolbox-web/grid` data grid component. Provides components a
14
14
  - ✅ **Declarative columns** - Define columns via props or `GridColumn` components
15
15
  - ✅ **Render props** - Clean `children` syntax for custom cells
16
16
  - ✅ **Type-level defaults** - App-wide renderers/editors via `GridTypeProvider`
17
+ - ✅ **Icon configuration** - App-wide icon overrides via `GridProvider` or `GridIconProvider`
17
18
  - ✅ **Hooks API** - `useGrid` and `useGridEvent` for programmatic access
18
19
  - ✅ **Ref forwarding** - Access grid instance via `DataGridRef`
19
20
  - ✅ **Master-detail** - `GridDetailPanel` for expandable rows
@@ -534,6 +535,80 @@ function Dashboard() {
534
535
  | `useGridTypeDefaults()` | Get all type defaults from context |
535
536
  | `useTypeDefault(type)` | Get defaults for a specific type |
536
537
 
538
+ ## App-Wide Icon Configuration
539
+
540
+ Customize grid icons at the application level using `GridIconProvider` or the combined `GridProvider`:
541
+
542
+ ### Using GridProvider (Recommended)
543
+
544
+ ```tsx
545
+ import { GridProvider, DataGrid } from '@toolbox-web/grid-react';
546
+
547
+ // Define icon overrides and type defaults together
548
+ const icons = {
549
+ expand: '➕',
550
+ collapse: '➖',
551
+ sortAsc: '↑',
552
+ sortDesc: '↓',
553
+ };
554
+
555
+ const typeDefaults = {
556
+ country: { renderer: (ctx) => <span>🌍 {ctx.value}</span> },
557
+ };
558
+
559
+ function App() {
560
+ return (
561
+ <GridProvider icons={icons} defaults={typeDefaults}>
562
+ <Dashboard />
563
+ </GridProvider>
564
+ );
565
+ }
566
+ ```
567
+
568
+ ### Using GridIconProvider (Icons Only)
569
+
570
+ ```tsx
571
+ import { GridIconProvider, DataGrid } from '@toolbox-web/grid-react';
572
+
573
+ const customIcons = {
574
+ expand: '▶',
575
+ collapse: '▼',
576
+ sortAsc: '△',
577
+ sortDesc: '▽',
578
+ filter: '<svg>...</svg>', // SVG markup supported
579
+ };
580
+
581
+ function App() {
582
+ return (
583
+ <GridIconProvider icons={customIcons}>
584
+ <DataGrid rows={data} columns={columns} />
585
+ </GridIconProvider>
586
+ );
587
+ }
588
+ ```
589
+
590
+ **Available Icons:**
591
+
592
+ | Icon | Default | Description |
593
+ | -------------- | ------- | ------------------------------------ |
594
+ | `expand` | `▶` | Expand icon for trees/groups/details |
595
+ | `collapse` | `▼` | Collapse icon |
596
+ | `sortAsc` | `▲` | Sort ascending indicator |
597
+ | `sortDesc` | `▼` | Sort descending indicator |
598
+ | `sortNone` | `⇅` | Unsorted indicator |
599
+ | `filter` | SVG | Filter icon in headers |
600
+ | `filterActive` | SVG | Filter icon when active |
601
+ | `submenuArrow` | `▶` | Context menu submenu arrow |
602
+ | `dragHandle` | `⋮⋮` | Drag handle for reordering |
603
+ | `toolPanel` | `☰` | Tool panel toggle icon |
604
+ | `print` | `🖨️` | Print button icon |
605
+
606
+ **Precedence (highest wins):**
607
+
608
+ 1. `gridConfig.icons` - Per-grid overrides
609
+ 2. `GridProvider`/`GridIconProvider` - App-level defaults
610
+ 3. Built-in defaults
611
+
537
612
  ## Using Plugins (Advanced)
538
613
 
539
614
  > **Note:** For most use cases, prefer the [declarative feature props](#enabling-features) approach above.
@@ -588,14 +663,16 @@ Inject custom CSS into the grid:
588
663
 
589
664
  ### Exported Components
590
665
 
591
- | Component | Description |
592
- | ------------------ | ------------------------------------ |
593
- | `DataGrid` | Main grid component wrapper |
594
- | `GridColumn` | Declarative column with render props |
595
- | `GridDetailPanel` | Master-detail expandable panel |
596
- | `GridToolPanel` | Custom sidebar panel |
597
- | `GridToolButtons` | Toolbar button container |
598
- | `GridTypeProvider` | App-level type defaults context |
666
+ | Component | Description |
667
+ | ------------------ | ------------------------------------------- |
668
+ | `DataGrid` | Main grid component wrapper |
669
+ | `GridColumn` | Declarative column with render props |
670
+ | `GridDetailPanel` | Master-detail expandable panel |
671
+ | `GridToolPanel` | Custom sidebar panel |
672
+ | `GridToolButtons` | Toolbar button container |
673
+ | `GridProvider` | Combined provider for icons & type defaults |
674
+ | `GridTypeProvider` | App-level type defaults context |
675
+ | `GridIconProvider` | App-level icon overrides context |
599
676
 
600
677
  ### Exported Hooks
601
678
 
@@ -605,6 +682,7 @@ Inject custom CSS into the grid:
605
682
  | `useGridEvent` | Type-safe event subscription with cleanup |
606
683
  | `useGridTypeDefaults()` | Get all type defaults from context |
607
684
  | `useTypeDefault(type)` | Get defaults for a specific type |
685
+ | `useGridIcons()` | Get icon overrides from context |
608
686
 
609
687
  ### Exported Types
610
688
 
@@ -625,6 +703,9 @@ import type {
625
703
  ReactTypeDefault,
626
704
  TypeDefaultsMap,
627
705
  GridTypeProviderProps,
706
+ // Icon overrides
707
+ GridIconProviderProps,
708
+ GridProviderProps,
628
709
  } from '@toolbox-web/grid-react';
629
710
  ```
630
711
 
package/features/index.js CHANGED
@@ -7,7 +7,7 @@ import "./filtering.js";
7
7
  import "./grouping-columns.js";
8
8
  import "./grouping-rows.js";
9
9
  import "./master-detail.js";
10
- import "../chunks/multi-sort-Ae2VVdZb.js";
10
+ import "./multi-sort.js";
11
11
  import "./pinned-columns.js";
12
12
  import "./pinned-rows.js";
13
13
  import "./pivot.js";
@@ -1,3 +1,3 @@
1
1
  import { MultiSortPlugin as t } from "@toolbox-web/grid/plugins/multi-sort";
2
- import { r as e } from "./feature-registry-Y3KvnN54.js";
2
+ import { r as e } from "../chunks/feature-registry-Y3KvnN54.js";
3
3
  e("multiSort", (r) => r === !0 || r === "multi" ? new t() : r === "single" ? new t({ maxSortColumns: 1 }) : new t(r));
@@ -1 +1 @@
1
- import "../chunks/multi-sort-Ae2VVdZb.js";
1
+ import "./multi-sort.js";
package/index.d.ts CHANGED
@@ -9,6 +9,8 @@ export type { AllFeatureProps, FeatureProps, SSRProps } from './lib/feature-prop
9
9
  export type { ColumnShorthand } from './lib/column-shorthand';
10
10
  export type { EventHandler, EventProps } from './lib/event-props';
11
11
  export { GridTypeProvider, useGridTypeDefaults, useTypeDefault, type GridTypeProviderProps, type ReactTypeDefault, type TypeDefaultsMap, } from './lib/grid-type-registry';
12
+ export { GridIconProvider, useGridIcons, type GridIconProviderProps } from './lib/grid-icon-registry';
13
+ export { GridProvider, type GridProviderProps } from './lib/grid-provider';
12
14
  export type { ReactColumnConfig, ReactGridConfig } from './lib/react-column-config';
13
15
  export { useGrid, type ExportMethods, type SelectionMethods, type UseGridReturn } from './lib/use-grid';
14
16
  export { useGridEvent } from './lib/use-grid-event';
package/index.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../libs/grid-react/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,YAAY,CAAC;AAGpB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC9G,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,GAC3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGtG,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGnF,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGlE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,0BAA0B,CAAC;AAGlC,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAGpF,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACxG,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../libs/grid-react/src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,YAAY,CAAC;AAGpB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC9G,OAAO,EACL,kBAAkB,EAClB,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,GAC3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGtG,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAGnF,YAAY,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAG9D,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGlE,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,cAAc,EACd,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EACrB,KAAK,eAAe,GACrB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,KAAK,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAGtG,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAG3E,YAAY,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAGpF,OAAO,EAAE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACxG,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}