@rfdtech/components 0.3.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 (79) hide show
  1. package/README.md +399 -0
  2. package/dist/components/app-switcher/AppSwitcher.d.ts +4 -0
  3. package/dist/components/app-switcher/AppSwitcher.d.ts.map +1 -0
  4. package/dist/components/app-switcher/AppSwitcher.test.d.ts +2 -0
  5. package/dist/components/app-switcher/AppSwitcher.test.d.ts.map +1 -0
  6. package/dist/components/app-switcher/AppSwitcherItem.d.ts +8 -0
  7. package/dist/components/app-switcher/AppSwitcherItem.d.ts.map +1 -0
  8. package/dist/components/app-switcher/GridIcon.d.ts +2 -0
  9. package/dist/components/app-switcher/GridIcon.d.ts.map +1 -0
  10. package/dist/components/app-switcher/SystemAppIcon.d.ts +6 -0
  11. package/dist/components/app-switcher/SystemAppIcon.d.ts.map +1 -0
  12. package/dist/components/app-switcher/api/fetchMeApps.d.ts +6 -0
  13. package/dist/components/app-switcher/api/fetchMeApps.d.ts.map +1 -0
  14. package/dist/components/app-switcher/api/fetchMeApps.test.d.ts +2 -0
  15. package/dist/components/app-switcher/api/fetchMeApps.test.d.ts.map +1 -0
  16. package/dist/components/app-switcher/api/mapMeAppToAppItem.d.ts +4 -0
  17. package/dist/components/app-switcher/api/mapMeAppToAppItem.d.ts.map +1 -0
  18. package/dist/components/app-switcher/api/mapMeAppToAppItem.test.d.ts +2 -0
  19. package/dist/components/app-switcher/api/mapMeAppToAppItem.test.d.ts.map +1 -0
  20. package/dist/components/app-switcher/api/meAppsClient.d.ts +3 -0
  21. package/dist/components/app-switcher/api/meAppsClient.d.ts.map +1 -0
  22. package/dist/components/app-switcher/api/meAppsClient.test.d.ts +2 -0
  23. package/dist/components/app-switcher/api/meAppsClient.test.d.ts.map +1 -0
  24. package/dist/components/app-switcher/hooks/useAppSwitcher.d.ts +3 -0
  25. package/dist/components/app-switcher/hooks/useAppSwitcher.d.ts.map +1 -0
  26. package/dist/components/app-switcher/hooks/useMeApps.d.ts +3 -0
  27. package/dist/components/app-switcher/hooks/useMeApps.d.ts.map +1 -0
  28. package/dist/components/app-switcher/hooks/useMeApps.test.d.ts +2 -0
  29. package/dist/components/app-switcher/hooks/useMeApps.test.d.ts.map +1 -0
  30. package/dist/components/app-switcher/index.d.ts +11 -0
  31. package/dist/components/app-switcher/index.d.ts.map +1 -0
  32. package/dist/components/bulk-import-modal/BulkImportModal.d.ts +4 -0
  33. package/dist/components/bulk-import-modal/BulkImportModal.d.ts.map +1 -0
  34. package/dist/components/bulk-import-modal/BulkImportModal.test.d.ts +2 -0
  35. package/dist/components/bulk-import-modal/BulkImportModal.test.d.ts.map +1 -0
  36. package/dist/components/bulk-import-modal/hooks/useBulkImportFlow.d.ts +3 -0
  37. package/dist/components/bulk-import-modal/hooks/useBulkImportFlow.d.ts.map +1 -0
  38. package/dist/components/bulk-import-modal/hooks/useBulkImportFlow.test.d.ts +2 -0
  39. package/dist/components/bulk-import-modal/hooks/useBulkImportFlow.test.d.ts.map +1 -0
  40. package/dist/components/bulk-import-modal/index.d.ts +12 -0
  41. package/dist/components/bulk-import-modal/index.d.ts.map +1 -0
  42. package/dist/components/bulk-import-modal/steps/MatchColumnsStep.d.ts +13 -0
  43. package/dist/components/bulk-import-modal/steps/MatchColumnsStep.d.ts.map +1 -0
  44. package/dist/components/bulk-import-modal/steps/SelectHeaderRowStep.d.ts +8 -0
  45. package/dist/components/bulk-import-modal/steps/SelectHeaderRowStep.d.ts.map +1 -0
  46. package/dist/components/bulk-import-modal/steps/UploadStep.d.ts +11 -0
  47. package/dist/components/bulk-import-modal/steps/UploadStep.d.ts.map +1 -0
  48. package/dist/components/bulk-import-modal/steps/ValidateDataStep.d.ts +16 -0
  49. package/dist/components/bulk-import-modal/steps/ValidateDataStep.d.ts.map +1 -0
  50. package/dist/components/bulk-import-modal/utils/mapRowsToRecords.d.ts +9 -0
  51. package/dist/components/bulk-import-modal/utils/mapRowsToRecords.d.ts.map +1 -0
  52. package/dist/components/bulk-import-modal/utils/mapRowsToRecords.test.d.ts +2 -0
  53. package/dist/components/bulk-import-modal/utils/mapRowsToRecords.test.d.ts.map +1 -0
  54. package/dist/components/bulk-import-modal/utils/parseSpreadsheetFile.d.ts +7 -0
  55. package/dist/components/bulk-import-modal/utils/parseSpreadsheetFile.d.ts.map +1 -0
  56. package/dist/components/bulk-import-modal/utils/parseSpreadsheetFile.test.d.ts +2 -0
  57. package/dist/components/bulk-import-modal/utils/parseSpreadsheetFile.test.d.ts.map +1 -0
  58. package/dist/components/bulk-import-modal/utils/validateFieldValue.d.ts +5 -0
  59. package/dist/components/bulk-import-modal/utils/validateFieldValue.d.ts.map +1 -0
  60. package/dist/components/bulk-import-modal/utils/validateFieldValue.test.d.ts +2 -0
  61. package/dist/components/bulk-import-modal/utils/validateFieldValue.test.d.ts.map +1 -0
  62. package/dist/components/bulk-import-modal/utils/validateMappedRows.d.ts +7 -0
  63. package/dist/components/bulk-import-modal/utils/validateMappedRows.d.ts.map +1 -0
  64. package/dist/components/bulk-import-modal/utils/validateMappedRows.test.d.ts +2 -0
  65. package/dist/components/bulk-import-modal/utils/validateMappedRows.test.d.ts.map +1 -0
  66. package/dist/index.cjs +38 -0
  67. package/dist/index.css +1 -0
  68. package/dist/index.d.ts +3 -0
  69. package/dist/index.d.ts.map +1 -0
  70. package/dist/index.js +22616 -0
  71. package/dist/test/fixtures.d.ts +4 -0
  72. package/dist/test/fixtures.d.ts.map +1 -0
  73. package/dist/test/setup.d.ts +2 -0
  74. package/dist/test/setup.d.ts.map +1 -0
  75. package/dist/types/app-switcher.d.ts +102 -0
  76. package/dist/types/app-switcher.d.ts.map +1 -0
  77. package/dist/types/bulk-import-modal.d.ts +92 -0
  78. package/dist/types/bulk-import-modal.d.ts.map +1 -0
  79. package/package.json +66 -0
@@ -0,0 +1,4 @@
1
+ import type { MeApp, MeAppsResponse } from "../types/app-switcher";
2
+ export declare const sampleMeApp: MeApp;
3
+ export declare const sampleMeAppsResponse: MeAppsResponse;
4
+ //# sourceMappingURL=fixtures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/test/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEnE,eAAO,MAAM,WAAW,EAAE,KAOzB,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,cASlC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import "@testing-library/jest-dom/vitest";
2
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,kCAAkC,CAAC"}
@@ -0,0 +1,102 @@
1
+ import type { CSSProperties, ReactNode } from "react";
2
+ export interface AppItem {
3
+ /** Unique identifier for the app */
4
+ id: string;
5
+ /** Display name shown below the icon */
6
+ name: string;
7
+ /** Icon as a React node, image URL, or emoji string */
8
+ icon: ReactNode | string;
9
+ /** URL to navigate to when the app is selected */
10
+ href?: string;
11
+ /** Custom click handler (called before navigation if href is set) */
12
+ onClick?: (app: AppItem) => void;
13
+ /** Whether the app is disabled */
14
+ disabled?: boolean;
15
+ /** Optional badge text (e.g. "New") */
16
+ badge?: string;
17
+ /** Original API payload when loaded from `/v1/me/apps` */
18
+ metadata?: MeApp;
19
+ }
20
+ export interface MeApp {
21
+ system_id: string;
22
+ system_name: string;
23
+ system_code: string;
24
+ frontend_url: string;
25
+ role: string;
26
+ permissions: string[];
27
+ }
28
+ export interface MeAppsResponse {
29
+ success: boolean;
30
+ message: string;
31
+ data: {
32
+ apps: MeApp[];
33
+ };
34
+ meta: {
35
+ count: number;
36
+ };
37
+ }
38
+ export interface AppSwitcherBaseProps {
39
+ /** Controlled open state */
40
+ open?: boolean;
41
+ /** Callback when open state changes */
42
+ onOpenChange?: (open: boolean) => void;
43
+ /** Called when an app is selected */
44
+ onAppSelect?: (app: AppItem) => void;
45
+ /** Number of columns in the grid (default: 3) */
46
+ columns?: number;
47
+ /** Accessible label for the trigger button */
48
+ triggerLabel?: string;
49
+ /** Custom trigger element (replaces default 9-dot icon) */
50
+ trigger?: ReactNode;
51
+ /** Panel title shown at the top */
52
+ title?: string;
53
+ /** Footer content (e.g. "More from Google" link) */
54
+ footer?: ReactNode;
55
+ /** Additional CSS class for the root container */
56
+ className?: string;
57
+ /** Inline styles for the root container */
58
+ style?: CSSProperties;
59
+ /** Placement of the panel relative to trigger */
60
+ placement?: "bottom-end" | "bottom-start" | "bottom";
61
+ /** Whether to close the panel when an app is selected */
62
+ closeOnSelect?: boolean;
63
+ }
64
+ export interface AppSwitcherWithApps extends AppSwitcherBaseProps {
65
+ /** Static apps to display in the grid */
66
+ apps: AppItem[];
67
+ baseUrl?: never;
68
+ accessToken?: never;
69
+ }
70
+ export interface AppSwitcherWithFetch extends AppSwitcherBaseProps {
71
+ apps?: never;
72
+ /** API base URL, e.g. `https://api.example.com` */
73
+ baseUrl: string;
74
+ /** Bearer access token for authenticated requests */
75
+ accessToken: string;
76
+ }
77
+ export type AppSwitcherProps = AppSwitcherWithApps | AppSwitcherWithFetch;
78
+ export interface UseMeAppsOptions {
79
+ baseUrl: string;
80
+ accessToken: string;
81
+ enabled?: boolean;
82
+ }
83
+ export interface UseMeAppsReturn {
84
+ apps: AppItem[];
85
+ loading: boolean;
86
+ error: string | null;
87
+ refetch: () => void;
88
+ }
89
+ export interface UseAppSwitcherOptions {
90
+ open?: boolean;
91
+ onOpenChange?: (open: boolean) => void;
92
+ closeOnSelect?: boolean;
93
+ }
94
+ export interface UseAppSwitcherReturn {
95
+ open: boolean;
96
+ setOpen: (open: boolean) => void;
97
+ toggle: () => void;
98
+ close: () => void;
99
+ triggerRef: React.RefObject<HTMLButtonElement | null>;
100
+ panelRef: React.RefObject<HTMLDivElement | null>;
101
+ }
102
+ //# sourceMappingURL=app-switcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-switcher.d.ts","sourceRoot":"","sources":["../../src/types/app-switcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ export type BulkImportFieldType = "string" | "email" | "number" | "integer" | "date" | "boolean" | "url" | "phone";
2
+ export interface BulkImportField {
3
+ key: string;
4
+ label: string;
5
+ required?: boolean;
6
+ type?: BulkImportFieldType;
7
+ pattern?: string | RegExp;
8
+ patternMessage?: string;
9
+ minLength?: number;
10
+ maxLength?: number;
11
+ min?: number;
12
+ max?: number;
13
+ options?: string[];
14
+ optionsIgnoreCase?: boolean;
15
+ optionsMessage?: string;
16
+ description?: string;
17
+ example?: string;
18
+ trim?: boolean;
19
+ validate?: (value: string) => string | null;
20
+ }
21
+ export interface BulkImportValidationError {
22
+ row: number;
23
+ fieldKey: string;
24
+ fieldLabel: string;
25
+ message: string;
26
+ severity: "error" | "warning";
27
+ }
28
+ export interface BulkImportResult {
29
+ rows: Record<string, string>[];
30
+ errors: BulkImportValidationError[];
31
+ warnings: BulkImportValidationError[];
32
+ }
33
+ export interface BulkImportModalProps {
34
+ open: boolean;
35
+ onOpenChange: (open: boolean) => void;
36
+ fields: BulkImportField[];
37
+ onComplete: (result: BulkImportResult) => void;
38
+ title?: string;
39
+ maxFileSizeBytes?: number;
40
+ allowImportWithWarnings?: boolean;
41
+ className?: string;
42
+ }
43
+ export interface SourceColumn {
44
+ index: number;
45
+ label: string;
46
+ }
47
+ export interface ParsedSpreadsheet {
48
+ rows: string[][];
49
+ fileName: string;
50
+ }
51
+ export type BulkImportStep = 1 | 2 | 3 | 4;
52
+ /** Maps source column index to target field key */
53
+ export type SourceColumnMapping = Record<number, string | null>;
54
+ /** @deprecated Use SourceColumnMapping — kept for backwards compatibility */
55
+ export type ColumnMapping = Record<string, number | null>;
56
+ export interface UseBulkImportFlowOptions {
57
+ fields: BulkImportField[];
58
+ maxFileSizeBytes?: number;
59
+ open: boolean;
60
+ }
61
+ export interface UseBulkImportFlowReturn {
62
+ step: BulkImportStep;
63
+ parsed: ParsedSpreadsheet | null;
64
+ parseError: string | null;
65
+ headerRowIndex: number | null;
66
+ sourceColumnMapping: SourceColumnMapping;
67
+ excludedColumns: number[];
68
+ sourceColumns: SourceColumn[];
69
+ mappedRows: Record<string, string>[];
70
+ validationErrors: BulkImportValidationError[];
71
+ validationWarnings: BulkImportValidationError[];
72
+ selectedRowIds: number[];
73
+ showOnlyErrors: boolean;
74
+ discardedRows: number[];
75
+ canGoNext: boolean;
76
+ canImport: boolean;
77
+ isParsing: boolean;
78
+ setHeaderRowIndex: (index: number) => void;
79
+ setSourceColumnMapping: (mapping: SourceColumnMapping) => void;
80
+ updateSourceMapping: (sourceIndex: number, fieldKey: string | null) => void;
81
+ toggleExcludedColumn: (sourceIndex: number) => void;
82
+ setSelectedRowIds: (rowIds: number[]) => void;
83
+ toggleRowSelection: (rowId: number) => void;
84
+ setShowOnlyErrors: (value: boolean) => void;
85
+ discardSelectedRows: () => void;
86
+ handleFile: (file: File) => Promise<void>;
87
+ goNext: () => void;
88
+ goBack: () => void;
89
+ reset: () => void;
90
+ buildResult: () => BulkImportResult;
91
+ }
92
+ //# sourceMappingURL=bulk-import-modal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk-import-modal.d.ts","sourceRoot":"","sources":["../../src/types/bulk-import-modal.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAC3B,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,SAAS,GACT,MAAM,GACN,SAAS,GACT,KAAK,GACL,OAAO,CAAC;AAEZ,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,yBAAyB;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IAC/B,MAAM,EAAE,yBAAyB,EAAE,CAAC;IACpC,QAAQ,EAAE,yBAAyB,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,UAAU,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE3C,mDAAmD;AACnD,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;AAEhE,6EAA6E;AAC7E,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;AAE1D,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACjC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;IACrC,gBAAgB,EAAE,yBAAyB,EAAE,CAAC;IAC9C,kBAAkB,EAAE,yBAAyB,EAAE,CAAC;IAChD,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,sBAAsB,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAC/D,mBAAmB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC5E,oBAAoB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC9C,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,iBAAiB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,WAAW,EAAE,MAAM,gBAAgB,CAAC;CACrC"}
package/package.json ADDED
@@ -0,0 +1,66 @@
1
+ {
2
+ "name": "@rfdtech/components",
3
+ "version": "0.3.0",
4
+ "description": "Shared React component library for Ghana School of Law (GSL) projects",
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": {
12
+ "types": "./dist/index.d.ts",
13
+ "default": "./dist/index.js"
14
+ },
15
+ "require": {
16
+ "types": "./dist/index.d.ts",
17
+ "default": "./dist/index.cjs"
18
+ }
19
+ }
20
+ },
21
+ "files": [
22
+ "dist"
23
+ ],
24
+ "scripts": {
25
+ "build": "vite build && tsc -p tsconfig.build.json",
26
+ "dev": "vite --config vite.demo.config.ts",
27
+ "demo": "vite --config vite.demo.config.ts",
28
+ "test": "vitest run",
29
+ "test:watch": "vitest",
30
+ "typecheck": "tsc --noEmit"
31
+ },
32
+ "peerDependencies": {
33
+ "react": ">=18.0.0",
34
+ "react-dom": ">=18.0.0"
35
+ },
36
+ "devDependencies": {
37
+ "@testing-library/jest-dom": "^6.9.1",
38
+ "@testing-library/react": "^16.3.2",
39
+ "@testing-library/user-event": "^14.6.1",
40
+ "@types/react": "^19.1.8",
41
+ "@types/react-dom": "^19.1.6",
42
+ "@vitejs/plugin-react": "^4.6.0",
43
+ "jsdom": "^29.1.1",
44
+ "react": "^19.1.0",
45
+ "react-dom": "^19.1.0",
46
+ "typescript": "^5.8.3",
47
+ "vite": "^6.3.5",
48
+ "vite-plugin-dts": "^4.5.4",
49
+ "vite-plugin-lib-inject-css": "^2.2.2",
50
+ "vitest": "^4.1.8"
51
+ },
52
+ "keywords": [
53
+ "react",
54
+ "components",
55
+ "gsl",
56
+ "ghana-school-of-law",
57
+ "app-switcher",
58
+ "app-launcher",
59
+ "google-apps",
60
+ "product-switcher"
61
+ ],
62
+ "license": "MIT",
63
+ "dependencies": {
64
+ "xlsx": "^0.18.5"
65
+ }
66
+ }