@osdk/react-components 0.20.0-main-4e2a115a796e8664c3972548bb02e707baafa912 → 0.20.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 (134) hide show
  1. package/CHANGELOG.md +2 -10
  2. package/build/browser/object-table/ObjectTable.js +2 -1
  3. package/build/browser/object-table/ObjectTable.js.map +1 -1
  4. package/build/browser/object-table/ObjectTableApi.js.map +1 -1
  5. package/build/browser/object-table/hooks/useObjectTableData.js +5 -3
  6. package/build/browser/object-table/hooks/useObjectTableData.js.map +1 -1
  7. package/build/browser/pdf-viewer/PdfViewer.js +4 -6
  8. package/build/browser/pdf-viewer/PdfViewer.js.map +1 -1
  9. package/build/browser/pdf-viewer/components/PdfAnnotationOverlay.js +43 -0
  10. package/build/browser/pdf-viewer/components/PdfAnnotationOverlay.js.map +1 -0
  11. package/build/browser/pdf-viewer/components/PdfViewerAnnotationLayer.js +22 -14
  12. package/build/browser/pdf-viewer/components/PdfViewerAnnotationLayer.js.map +1 -1
  13. package/build/browser/pdf-viewer/components/PdfViewerContent.js +4 -6
  14. package/build/browser/pdf-viewer/components/PdfViewerContent.js.map +1 -1
  15. package/build/browser/pdf-viewer/hooks/usePdfAnnotationPortals.js +83 -13
  16. package/build/browser/pdf-viewer/hooks/usePdfAnnotationPortals.js.map +1 -1
  17. package/build/browser/pdf-viewer/types.js.map +1 -1
  18. package/build/browser/shared/calendar/DatePickerCommon.module.css +5 -0
  19. package/build/browser/styles.css +5 -0
  20. package/build/browser/util/UserAgent.js +1 -1
  21. package/build/browser/util/UserAgent.js.map +1 -1
  22. package/build/cjs/chunk-2GAPPUP5.cjs +11 -0
  23. package/build/cjs/{chunk-BN5MGNSI.cjs.map → chunk-2GAPPUP5.cjs.map} +1 -1
  24. package/build/cjs/{chunk-QYUADULX.cjs → chunk-4MGATUJ3.cjs} +17 -17
  25. package/build/cjs/{chunk-QYUADULX.cjs.map → chunk-4MGATUJ3.cjs.map} +1 -1
  26. package/build/cjs/{chunk-HOPH2463.cjs → chunk-4WDDVYWV.cjs} +3 -3
  27. package/build/cjs/chunk-4WDDVYWV.cjs.map +1 -0
  28. package/build/cjs/chunk-5UTN55T6.cjs +11 -0
  29. package/build/cjs/{chunk-LLGHXDSY.cjs.map → chunk-5UTN55T6.cjs.map} +1 -1
  30. package/build/cjs/{chunk-YWDLYGD5.cjs → chunk-AICPFRJQ.cjs} +32 -32
  31. package/build/cjs/{chunk-YWDLYGD5.cjs.map → chunk-AICPFRJQ.cjs.map} +1 -1
  32. package/build/cjs/{chunk-WYIUQ3FZ.cjs → chunk-DAHWLFFD.cjs} +4 -4
  33. package/build/cjs/{chunk-WYIUQ3FZ.cjs.map → chunk-DAHWLFFD.cjs.map} +1 -1
  34. package/build/cjs/{chunk-ETOC4FJE.cjs → chunk-FWZS3WQ4.cjs} +135 -34
  35. package/build/cjs/chunk-FWZS3WQ4.cjs.map +1 -0
  36. package/build/cjs/{chunk-67LMSFXM.cjs → chunk-GUBIWML7.cjs} +16 -13
  37. package/build/cjs/chunk-GUBIWML7.cjs.map +1 -0
  38. package/build/cjs/chunk-KLL6MAZL.cjs +11 -0
  39. package/build/cjs/{chunk-YWYFWFUF.cjs.map → chunk-KLL6MAZL.cjs.map} +1 -1
  40. package/build/cjs/{chunk-7CYKOZFL.cjs → chunk-LIF2LJ2I.cjs} +7 -7
  41. package/build/cjs/{chunk-7CYKOZFL.cjs.map → chunk-LIF2LJ2I.cjs.map} +1 -1
  42. package/build/cjs/{chunk-4JJP3RNQ.cjs → chunk-PPQSIR4K.cjs} +4 -4
  43. package/build/cjs/{chunk-4JJP3RNQ.cjs.map → chunk-PPQSIR4K.cjs.map} +1 -1
  44. package/build/cjs/{chunk-4V245Z6A.cjs → chunk-PWXV5SBK.cjs} +26 -28
  45. package/build/cjs/chunk-PWXV5SBK.cjs.map +1 -0
  46. package/build/cjs/chunk-UJKIIMIE.cjs +11 -0
  47. package/build/cjs/{chunk-DCRVOHKP.cjs.map → chunk-UJKIIMIE.cjs.map} +1 -1
  48. package/build/cjs/chunk-VBM5GWFP.cjs +11 -0
  49. package/build/cjs/{chunk-LGUTBX34.cjs.map → chunk-VBM5GWFP.cjs.map} +1 -1
  50. package/build/cjs/{chunk-4KC5U44T.cjs → chunk-XA3S7YAO.cjs} +2 -2
  51. package/build/cjs/chunk-XA3S7YAO.cjs.map +1 -0
  52. package/build/cjs/{chunk-GN3PIYGH.cjs → chunk-Y6BGC7DP.cjs} +22 -22
  53. package/build/cjs/{chunk-GN3PIYGH.cjs.map → chunk-Y6BGC7DP.cjs.map} +1 -1
  54. package/build/cjs/public/experimental/action-form.cjs +6 -6
  55. package/build/cjs/public/experimental/action-form.css +3 -0
  56. package/build/cjs/public/experimental/action-form.css.map +1 -1
  57. package/build/cjs/public/experimental/document-viewer.cjs +5 -5
  58. package/build/cjs/public/experimental/document-viewer.d.cts +1 -1
  59. package/build/cjs/public/experimental/email-viewer.cjs +3 -3
  60. package/build/cjs/public/experimental/excel-viewer.cjs +3 -3
  61. package/build/cjs/public/experimental/filter-list.cjs +15 -15
  62. package/build/cjs/public/experimental/filter-list.css +3 -0
  63. package/build/cjs/public/experimental/filter-list.css.map +1 -1
  64. package/build/cjs/public/experimental/image-viewer.cjs +3 -3
  65. package/build/cjs/public/experimental/markdown-renderer.cjs +3 -3
  66. package/build/cjs/public/experimental/object-table.cjs +10 -10
  67. package/build/cjs/public/experimental/object-table.css +3 -0
  68. package/build/cjs/public/experimental/object-table.css.map +1 -1
  69. package/build/cjs/public/experimental/object-table.d.cts +14 -1
  70. package/build/cjs/public/experimental/pdf-viewer.cjs +25 -25
  71. package/build/cjs/public/experimental/pdf-viewer.d.cts +9 -4
  72. package/build/cjs/public/experimental/tiff-renderer.cjs +3 -3
  73. package/build/cjs/public/experimental/video-viewer.cjs +3 -3
  74. package/build/cjs/public/experimental/xml-viewer.cjs +3 -3
  75. package/build/cjs/public/experimental.cjs +67 -67
  76. package/build/cjs/public/experimental.css +3 -0
  77. package/build/cjs/public/experimental.css.map +1 -1
  78. package/build/cjs/public/experimental.d.cts +1 -1
  79. package/build/cjs/{types-CbSNeyzw.d.cts → types-Cg_LdKf-.d.cts} +1 -0
  80. package/build/esm/object-table/ObjectTable.js +2 -1
  81. package/build/esm/object-table/ObjectTable.js.map +1 -1
  82. package/build/esm/object-table/ObjectTableApi.js.map +1 -1
  83. package/build/esm/object-table/hooks/useObjectTableData.js +5 -3
  84. package/build/esm/object-table/hooks/useObjectTableData.js.map +1 -1
  85. package/build/esm/pdf-viewer/PdfViewer.js +4 -6
  86. package/build/esm/pdf-viewer/PdfViewer.js.map +1 -1
  87. package/build/esm/pdf-viewer/components/PdfAnnotationOverlay.js +43 -0
  88. package/build/esm/pdf-viewer/components/PdfAnnotationOverlay.js.map +1 -0
  89. package/build/esm/pdf-viewer/components/PdfViewerAnnotationLayer.js +22 -14
  90. package/build/esm/pdf-viewer/components/PdfViewerAnnotationLayer.js.map +1 -1
  91. package/build/esm/pdf-viewer/components/PdfViewerContent.js +4 -6
  92. package/build/esm/pdf-viewer/components/PdfViewerContent.js.map +1 -1
  93. package/build/esm/pdf-viewer/hooks/usePdfAnnotationPortals.js +83 -13
  94. package/build/esm/pdf-viewer/hooks/usePdfAnnotationPortals.js.map +1 -1
  95. package/build/esm/pdf-viewer/types.js.map +1 -1
  96. package/build/esm/shared/calendar/DatePickerCommon.module.css +5 -0
  97. package/build/esm/util/UserAgent.js +1 -1
  98. package/build/esm/util/UserAgent.js.map +1 -1
  99. package/build/types/object-table/ObjectTable.d.ts +1 -1
  100. package/build/types/object-table/ObjectTable.d.ts.map +1 -1
  101. package/build/types/object-table/ObjectTableApi.d.ts +13 -0
  102. package/build/types/object-table/ObjectTableApi.d.ts.map +1 -1
  103. package/build/types/object-table/hooks/useObjectTableData.d.ts +1 -1
  104. package/build/types/object-table/hooks/useObjectTableData.d.ts.map +1 -1
  105. package/build/types/pdf-viewer/PdfViewer.d.ts.map +1 -1
  106. package/build/types/pdf-viewer/components/PdfAnnotationOverlay.d.ts +9 -0
  107. package/build/types/pdf-viewer/components/PdfAnnotationOverlay.d.ts.map +1 -0
  108. package/build/types/pdf-viewer/components/PdfViewerAnnotationLayer.d.ts +2 -1
  109. package/build/types/pdf-viewer/components/PdfViewerAnnotationLayer.d.ts.map +1 -1
  110. package/build/types/pdf-viewer/components/PdfViewerContent.d.ts.map +1 -1
  111. package/build/types/pdf-viewer/hooks/usePdfAnnotationPortals.d.ts +5 -1
  112. package/build/types/pdf-viewer/hooks/usePdfAnnotationPortals.d.ts.map +1 -1
  113. package/build/types/pdf-viewer/types.d.ts +1 -0
  114. package/build/types/pdf-viewer/types.d.ts.map +1 -1
  115. package/docs/GettingStarted.md +65 -0
  116. package/docs/ObjectTable.md +6 -5
  117. package/docs/Prerequisites.md +1 -2
  118. package/docs/StylingOverview.md +146 -0
  119. package/docs/TokenColors.md +130 -0
  120. package/docs/TokenSpacing.md +73 -0
  121. package/docs/TokenTypography.md +57 -0
  122. package/docs/UsageWithOsdk.md +47 -0
  123. package/docs/Welcome.md +42 -0
  124. package/package.json +8 -8
  125. package/build/cjs/chunk-4KC5U44T.cjs.map +0 -1
  126. package/build/cjs/chunk-4V245Z6A.cjs.map +0 -1
  127. package/build/cjs/chunk-67LMSFXM.cjs.map +0 -1
  128. package/build/cjs/chunk-BN5MGNSI.cjs +0 -11
  129. package/build/cjs/chunk-DCRVOHKP.cjs +0 -11
  130. package/build/cjs/chunk-ETOC4FJE.cjs.map +0 -1
  131. package/build/cjs/chunk-HOPH2463.cjs.map +0 -1
  132. package/build/cjs/chunk-LGUTBX34.cjs +0 -11
  133. package/build/cjs/chunk-LLGHXDSY.cjs +0 -11
  134. package/build/cjs/chunk-YWYFWFUF.cjs +0 -11
@@ -0,0 +1,65 @@
1
+ # Getting Started
2
+
3
+ ## 1. Install
4
+
5
+ ```bash
6
+ npm install @osdk/react-components @osdk/react @osdk/client @osdk/api react react-dom classnames
7
+ ```
8
+
9
+ ## 2. Import styles
10
+
11
+ Add the component styles to your application CSS entry point:
12
+
13
+ ```css
14
+ /* index.css */
15
+ @layer osdk.components;
16
+
17
+ @import "@osdk/react-components/styles.css" layer(osdk.components);
18
+ ```
19
+
20
+ Add portal isolation to your root element:
21
+
22
+ ```css
23
+ #root {
24
+ isolation: isolate;
25
+ }
26
+ ```
27
+
28
+ ## 3. Set up the provider
29
+
30
+ Wrap your application with `OsdkProvider`:
31
+
32
+ ```tsx
33
+ import { createClient } from "@osdk/client";
34
+ import { OsdkProvider } from "@osdk/react";
35
+
36
+ const client = createClient(
37
+ "https://your-stack.palantirfoundry.com",
38
+ "ri.ontology.main.ontology.{UUID}",
39
+ async () => {
40
+ // return your auth token
41
+ },
42
+ );
43
+
44
+ function App() {
45
+ return (
46
+ <OsdkProvider client={client}>
47
+ {/* your app */}
48
+ </OsdkProvider>
49
+ );
50
+ }
51
+ ```
52
+
53
+ ## 4. Render your first component
54
+
55
+ ```tsx
56
+ import { ObjectTable } from "@osdk/react-components/experimental/object-table";
57
+ import { Employee } from "@your-osdk-package";
58
+
59
+ function EmployeeDirectory() {
60
+ return <ObjectTable objectType={Employee} />;
61
+ }
62
+ ```
63
+
64
+ That's it! The `ObjectTable` handles data fetching, pagination, and sorting
65
+ out of the box.
@@ -72,11 +72,12 @@ Add selection mode to enable row selection:
72
72
 
73
73
  ### Core Props
74
74
 
75
- | Prop | Type | Required | Default | Description |
76
- | ------------ | -------- | -------- | ------- | ------------------------------- |
77
- | `objectType` | `Q` | ✅ | - | The OSDK object type to display |
78
- | `className` | `string` | ❌ | - | CSS class for custom styling |
79
- | `rowHeight` | `number` | ❌ | `40` | Height of each row in pixels |
75
+ | Prop | Type | Required | Default | Description |
76
+ | --------------- | --------- | -------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
77
+ | `objectType` | `Q` | ✅ | - | The OSDK object type to display |
78
+ | `className` | `string` | ❌ | - | CSS class for custom styling |
79
+ | `rowHeight` | `number` | ❌ | `40` | Height of each row in pixels |
80
+ | `streamUpdates` | `boolean` | ❌ | `false` | When `true`, subscribes via websocket so the table automatically updates as matching objects are added, updated, or removed in Foundry. Cannot be used together with `pivotTo` or `withProperties` — the server does not support websocket subscriptions for link-traversal or derived-property queries, so those queries still fetch normally but won't receive real-time updates. |
80
81
 
81
82
  ### Column Management
82
83
 
@@ -8,8 +8,7 @@ Setup required before using `@osdk/react-components` or `@osdk/cbac-components`.
8
8
 
9
9
  ## Install dependencies
10
10
 
11
- :::tip If your tooling already installs dependencies, skip this step.
12
- :::
11
+ > **Tip:** If your tooling already installs dependencies, skip this step.
13
12
 
14
13
  Use whichever package manager your project uses (`# if using CBAC components` lines are optional):
15
14
 
@@ -0,0 +1,146 @@
1
+ # Styling Overview
2
+
3
+ `@osdk/react-components` uses a three-layer token architecture that makes
4
+ theming predictable and composable.
5
+
6
+ ## Token Architecture
7
+
8
+ ```
9
+ Blueprint Core (@blueprintjs/core)
10
+ |
11
+ Blueprint Tokens (--bp-*)
12
+ |
13
+ OSDK Tokens (--osdk-*)
14
+ |
15
+ Component Styles
16
+ ```
17
+
18
+ [Blueprint](https://blueprintjs.com) is a React UI toolkit built by Palantir.
19
+ OSDK components use Blueprint's design tokens as the foundation layer so they
20
+ integrate seamlessly with other Palantir applications and components that
21
+ already use Blueprint.
22
+
23
+ ### Layer 1: Blueprint Tokens
24
+
25
+ The foundation. Blueprint design tokens (`--bp-*`) define the raw visual
26
+ primitives — colors, typography, spacing, and intent states. These are
27
+ inherited from `@blueprintjs/core`.
28
+
29
+ ### Layer 2: OSDK Tokens
30
+
31
+ OSDK tokens (`--osdk-*`) map to Blueprint tokens by default. Override these
32
+ to theme OSDK components **without** affecting other Blueprint components in
33
+ your app.
34
+
35
+ ```css
36
+ :root {
37
+ /* Override just the OSDK table header */
38
+ --osdk-table-header-bg: #f5f5f5;
39
+ }
40
+ ```
41
+
42
+ ### Layer 3: Component Tokens
43
+
44
+ Per-component CSS variables (e.g. `--osdk-table-*`, `--osdk-form-*`) control
45
+ specific UI elements. Each component documents its available variables.
46
+
47
+ ## CSS Layers
48
+
49
+ Styles are organized using CSS `@layer` for predictable cascade ordering:
50
+
51
+ ```css
52
+ @layer osdk.components, user.brand;
53
+
54
+ @import "@osdk/react-components/styles.css" layer(osdk.components);
55
+ @import "./my-brand.css" layer(user.brand);
56
+ ```
57
+
58
+ Later layers always win, regardless of selector specificity. This means your
59
+ brand overrides will always take precedence over OSDK defaults.
60
+
61
+ ## Dark Mode
62
+
63
+ Wrap your app with `OsdkThemeProvider` to control the color scheme:
64
+
65
+ ```tsx
66
+ import { OsdkThemeProvider } from "@osdk/react-components/experimental/theme";
67
+
68
+ function App() {
69
+ return (
70
+ <OsdkThemeProvider defaultTheme="system">
71
+ {/* your app */}
72
+ </OsdkThemeProvider>
73
+ );
74
+ }
75
+ ```
76
+
77
+ ### Theme modes
78
+
79
+ | Mode | Behavior |
80
+ | ---------- | ----------------------------------------------------------- |
81
+ | `"system"` | Follows the OS `prefers-color-scheme` and updates on change |
82
+ | `"light"` | Forces light theme regardless of OS setting |
83
+ | `"dark"` | Forces dark theme regardless of OS setting |
84
+
85
+ The provider sets `data-bp-color-scheme` on the document element, which
86
+ the CSS token layer uses to flip both `--bp-*` and `--osdk-*` tokens.
87
+
88
+ ### Switching at runtime
89
+
90
+ Use the `useOsdkTheme` hook from a descendant to switch modes:
91
+
92
+ ```tsx
93
+ import { useOsdkTheme } from "@osdk/react-components/experimental/theme";
94
+
95
+ function ThemeToggle() {
96
+ const { resolvedTheme, setTheme } = useOsdkTheme();
97
+ return (
98
+ <button
99
+ onClick={() => setTheme(resolvedTheme === "dark" ? "light" : "dark")}
100
+ >
101
+ Toggle theme
102
+ </button>
103
+ );
104
+ }
105
+ ```
106
+
107
+ ### Controlled mode
108
+
109
+ If an external store already owns the theme (e.g. Redux, a parent
110
+ design-system provider), pass `theme` instead of `defaultTheme`:
111
+
112
+ ```tsx
113
+ <OsdkThemeProvider theme={externalTheme} onThemeChanged={setExternalTheme}>
114
+ ```
115
+
116
+ ## When to Override `--bp-*` vs `--osdk-*`
117
+
118
+ | Prefix | Override when you want to... |
119
+ | ---------------------- | ----------------------------------------------------- |
120
+ | `--bp-*` | Theme both Blueprint and OSDK components consistently |
121
+ | `--osdk-*` | Theme only OSDK components, leave Blueprint unchanged |
122
+ | `--osdk-<component>-*` | Customize a single component |
123
+
124
+ Every `--osdk-*` token maps to a `--bp-*` token by default. If your app
125
+ uses Blueprint components alongside OSDK components and you want a
126
+ consistent look, override the `--bp-*` tokens. If you only want to restyle
127
+ OSDK components without affecting Blueprint, override the `--osdk-*` tokens.
128
+
129
+ ## Custom Themes
130
+
131
+ Create a brand layer that overrides the tokens you care about:
132
+
133
+ ```css
134
+ /* user-brand.css */
135
+ :root {
136
+ /* Global surface overrides */
137
+ --osdk-surface-border-radius: 8px;
138
+
139
+ /* Table-specific overrides */
140
+ --osdk-table-header-bg: var(--my-brand-surface);
141
+ --osdk-table-row-bg-hover: var(--my-brand-hover);
142
+
143
+ /* Form-specific overrides */
144
+ --osdk-form-section-padding: 20px;
145
+ }
146
+ ```
@@ -0,0 +1,130 @@
1
+ # Color Tokens
2
+
3
+ All color values in `@osdk/react-components` are exposed as CSS custom
4
+ properties. Override them to theme components without touching source code.
5
+
6
+ ## Palette Tokens
7
+
8
+ Raw color primitives mapped from Blueprint. Use these as building blocks for
9
+ semantic tokens.
10
+
11
+ | Token | Maps to |
12
+ | ----------------------------- | --------------------------- |
13
+ | `--osdk-palette-white` | `--bp-palette-white` |
14
+ | `--osdk-palette-black` | `--bp-palette-black` |
15
+ | `--osdk-palette-gray-1` | `--bp-palette-gray-1` |
16
+ | `--osdk-palette-gray-2` | `--bp-palette-gray-2` |
17
+ | `--osdk-palette-gray-4` | `--bp-palette-gray-4` |
18
+ | `--osdk-palette-dark-gray-2` | `--bp-palette-dark-gray-2` |
19
+ | `--osdk-palette-dark-gray-3` | `--bp-palette-dark-gray-3` |
20
+ | `--osdk-palette-light-gray-1` | `--bp-palette-light-gray-1` |
21
+ | `--osdk-palette-light-gray-3` | `--bp-palette-light-gray-3` |
22
+ | `--osdk-palette-light-gray-4` | `--bp-palette-light-gray-4` |
23
+ | `--osdk-palette-light-gray-5` | `--bp-palette-light-gray-5` |
24
+
25
+ ## Semantic Background Tokens
26
+
27
+ Higher-level tokens that abstract palette usage into meaningful roles.
28
+
29
+ | Token | Default |
30
+ | --------------------------------- | ---------------------------------- |
31
+ | `--osdk-background-primary` | `var(--osdk-palette-white)` |
32
+ | `--osdk-background-secondary` | `var(--osdk-palette-light-gray-5)` |
33
+ | `--osdk-background-tertiary` | `var(--osdk-palette-light-gray-4)` |
34
+ | `--osdk-background-skeleton-from` | `color-mix(gray-1, 5%)` |
35
+ | `--osdk-background-skeleton-to` | `color-mix(gray-1, 40%)` |
36
+ | `--osdk-background-backdrop` | `color-mix(black, 50%)` |
37
+
38
+ ## Intent Tokens
39
+
40
+ Intent tokens define interactive color states. Each intent has five states:
41
+ `rest`, `hover`, `active`, `disabled`, and `foreground`.
42
+
43
+ ### Default
44
+
45
+ | Token | Maps to |
46
+ | ---------------------------------- | -------------------------------- |
47
+ | `--osdk-intent-default-rest` | `--bp-intent-default-rest` |
48
+ | `--osdk-intent-default-hover` | `--bp-intent-default-hover` |
49
+ | `--osdk-intent-default-active` | `--bp-intent-default-active` |
50
+ | `--osdk-intent-default-disabled` | `--bp-intent-default-disabled` |
51
+ | `--osdk-intent-default-foreground` | `--bp-intent-default-foreground` |
52
+
53
+ ### Primary
54
+
55
+ | Token | Maps to |
56
+ | ---------------------------------- | -------------------------------- |
57
+ | `--osdk-intent-primary-rest` | `--bp-intent-primary-rest` |
58
+ | `--osdk-intent-primary-hover` | `--bp-intent-primary-hover` |
59
+ | `--osdk-intent-primary-active` | `--bp-intent-primary-active` |
60
+ | `--osdk-intent-primary-disabled` | `--bp-intent-primary-disabled` |
61
+ | `--osdk-intent-primary-foreground` | `--bp-intent-primary-foreground` |
62
+
63
+ ### Success
64
+
65
+ | Token | Maps to |
66
+ | ---------------------------------- | -------------------------------- |
67
+ | `--osdk-intent-success-rest` | `--bp-intent-success-rest` |
68
+ | `--osdk-intent-success-hover` | `--bp-intent-success-hover` |
69
+ | `--osdk-intent-success-active` | `--bp-intent-success-active` |
70
+ | `--osdk-intent-success-disabled` | `--bp-intent-success-disabled` |
71
+ | `--osdk-intent-success-foreground` | `--bp-intent-success-foreground` |
72
+
73
+ ### Warning
74
+
75
+ | Token | Maps to |
76
+ | ---------------------------------- | -------------------------------- |
77
+ | `--osdk-intent-warning-rest` | `--bp-intent-warning-rest` |
78
+ | `--osdk-intent-warning-hover` | `--bp-intent-warning-hover` |
79
+ | `--osdk-intent-warning-active` | `--bp-intent-warning-active` |
80
+ | `--osdk-intent-warning-disabled` | `--bp-intent-warning-disabled` |
81
+ | `--osdk-intent-warning-foreground` | `--bp-intent-warning-foreground` |
82
+
83
+ ### Danger
84
+
85
+ | Token | Maps to |
86
+ | --------------------------------- | ------------------------------- |
87
+ | `--osdk-intent-danger-rest` | `--bp-intent-danger-rest` |
88
+ | `--osdk-intent-danger-hover` | `--bp-intent-danger-hover` |
89
+ | `--osdk-intent-danger-active` | `--bp-intent-danger-active` |
90
+ | `--osdk-intent-danger-disabled` | `--bp-intent-danger-disabled` |
91
+ | `--osdk-intent-danger-foreground` | `--bp-intent-danger-foreground` |
92
+
93
+ ## Surface Tokens
94
+
95
+ | Token | Maps to |
96
+ | ------------------------------------------------ | ---------------------------------------------- |
97
+ | `--osdk-surface-background-color-default-rest` | `--bp-surface-background-color-default-rest` |
98
+ | `--osdk-surface-background-color-default-hover` | `--bp-surface-background-color-default-hover` |
99
+ | `--osdk-surface-background-color-default-active` | `--bp-surface-background-color-default-active` |
100
+ | `--osdk-surface-background-color-danger-rest` | `--bp-surface-background-color-danger-rest` |
101
+ | `--osdk-surface-background-color-danger-hover` | `--bp-surface-background-color-danger-hover` |
102
+ | `--osdk-surface-background-color-danger-active` | `--bp-surface-background-color-danger-active` |
103
+ | `--osdk-surface-border-color-default` | `--bp-surface-border-color-default` |
104
+ | `--osdk-surface-border-color-strong` | `--bp-surface-border-color-strong` |
105
+
106
+ ## Custom Color Tokens
107
+
108
+ Derived colors using `color-mix()` for opacity effects.
109
+
110
+ | Token | Definition |
111
+ | ---------------------------------- | ------------------------------------- |
112
+ | `--osdk-custom-color-gray-1` | `color-mix(gray-1, 5%)` |
113
+ | `--osdk-custom-color-gray-2` | `color-mix(gray-1, 8%)` |
114
+ | `--osdk-custom-color-gray-3` | `color-mix(gray-1, 10%)` |
115
+ | `--osdk-custom-color-gray-4` | `color-mix(gray-1, 20%)` |
116
+ | `--osdk-custom-color-light-gray-1` | `color-mix(light-gray-1, 60%)` |
117
+ | `--osdk-custom-color-light-gray-2` | `color-mix(light-gray-5, 50%)` |
118
+ | `--osdk-custom-color-primary-1` | `color-mix(intent-primary-rest, 50%)` |
119
+
120
+ ## Typography Color Tokens
121
+
122
+ | Token | Maps to |
123
+ | ------------------------------------------ | ---------------------------------------- |
124
+ | `--osdk-typography-color-default-rest` | `--bp-typography-color-default-rest` |
125
+ | `--osdk-typography-color-default-hover` | `--bp-typography-color-default-hover` |
126
+ | `--osdk-typography-color-default-active` | `--bp-typography-color-default-active` |
127
+ | `--osdk-typography-color-default-disabled` | `--bp-typography-color-default-disabled` |
128
+ | `--osdk-typography-color-muted` | `--bp-typography-color-muted` |
129
+ | `--osdk-typography-color-danger-rest` | `--bp-typography-color-danger-rest` |
130
+ | `--osdk-typography-color-danger-active` | `--bp-typography-color-danger-active` |
@@ -0,0 +1,73 @@
1
+ # Spacing Tokens
2
+
3
+ Spacing, border, shadow, and z-index tokens used across
4
+ `@osdk/react-components`. These tokens are a subset of the full
5
+ [CSS Variables reference](./CSSVariables.md), which documents every
6
+ custom property including per-component tokens.
7
+
8
+ ## Surface Spacing
9
+
10
+ | Token | Maps to |
11
+ | ------------------------------ | ---------------------------- |
12
+ | `--osdk-surface-spacing` | `--bp-surface-spacing` |
13
+ | `--osdk-surface-border-radius` | `--bp-surface-border-radius` |
14
+ | `--osdk-surface-border-width` | `--bp-surface-border-width` |
15
+ | `--osdk-surface-layer-primary` | `--bp-surface-layer-primary` |
16
+
17
+ ## Borders
18
+
19
+ | Token | Default |
20
+ | ------------------------------------- | --------------------------------------------------------------------------------- |
21
+ | `--osdk-surface-border` | `var(--osdk-surface-border-width) solid var(--osdk-surface-border-color-default)` |
22
+ | `--osdk-surface-border-color-default` | `--bp-surface-border-color-default` |
23
+ | `--osdk-surface-border-color-strong` | `--bp-surface-border-color-strong` |
24
+
25
+ ## Shadows
26
+
27
+ | Token | Maps to |
28
+ | ------------------------- | ----------------------- |
29
+ | `--osdk-surface-shadow-2` | `--bp-surface-shadow-2` |
30
+
31
+ ## Z-Index
32
+
33
+ Four z-index layers provide consistent stacking across components.
34
+
35
+ | Token | Maps to | Typical use |
36
+ | -------------------------- | ------------------------ | --------------------------------- |
37
+ | `--osdk-surface-z-index-1` | `--bp-surface-z-index-1` | Base content |
38
+ | `--osdk-surface-z-index-2` | `--bp-surface-z-index-2` | Sticky headers, floating elements |
39
+ | `--osdk-surface-z-index-3` | `--bp-surface-z-index-3` | Overlays, dropdowns |
40
+ | `--osdk-surface-z-index-4` | `--bp-surface-z-index-4` | Modals, dialogs |
41
+
42
+ ## Focus Tokens
43
+
44
+ | Token | Maps to |
45
+ | ------------------------------------- | ------------------------------------------------------------------------- |
46
+ | `--osdk-emphasis-focus-width` | `--bp-emphasis-focus-width` |
47
+ | `--osdk-emphasis-focus-color` | `--bp-emphasis-focus-color` |
48
+ | `--osdk-emphasis-focus-offset` | `--bp-emphasis-focus-offset` |
49
+ | `--osdk-focus-outline` | `var(--osdk-emphasis-focus-width) solid var(--osdk-emphasis-focus-color)` |
50
+ | `--osdk-focus-visible-outline-offset` | `var(--osdk-emphasis-focus-offset)` |
51
+
52
+ ## Transition Tokens
53
+
54
+ | Token | Maps to |
55
+ | ------------------------------------- | ----------------------------------- |
56
+ | `--osdk-emphasis-transition-duration` | `--bp-emphasis-transition-duration` |
57
+ | `--osdk-emphasis-ease-default` | `--bp-emphasis-ease-default` |
58
+
59
+ ## Miscellaneous
60
+
61
+ | Token | Default |
62
+ | ------------------------- | ------- |
63
+ | `--osdk-disabled-opacity` | `0.5` |
64
+
65
+ ## Override Example
66
+
67
+ ```css
68
+ /* Increase border radius for a softer look */
69
+ :root {
70
+ --osdk-surface-border-radius: 8px;
71
+ --osdk-surface-spacing: 12px;
72
+ }
73
+ ```
@@ -0,0 +1,57 @@
1
+ # Typography Tokens
2
+
3
+ Typography tokens control font family, size, weight, and line height across
4
+ all `@osdk/react-components`.
5
+
6
+ ## Font Family
7
+
8
+ | Token | Maps to |
9
+ | ---------------------------------- | -------------------------------- |
10
+ | `--osdk-typography-family-default` | `--bp-typography-family-default` |
11
+
12
+ The default font family inherits from Blueprint, which resolves to the
13
+ system font stack.
14
+
15
+ ## Font Sizes
16
+
17
+ | Token | Maps to | Typical use |
18
+ | ------------------------------------- | ----------------------------------- | ---------------------- |
19
+ | `--osdk-typography-size-body-x-small` | `--bp-typography-size-body-x-small` | Captions, footnotes |
20
+ | `--osdk-typography-size-body-small` | `--bp-typography-size-body-small` | Secondary text, labels |
21
+ | `--osdk-typography-size-body-medium` | `--bp-typography-size-body-medium` | Body text (default) |
22
+ | `--osdk-typography-size-body-large` | `--bp-typography-size-body-large` | Headings, emphasis |
23
+
24
+ ## Font Weights
25
+
26
+ | Token | Maps to | Typical use |
27
+ | ---------------------------------- | -------------------------------- | ------------------ |
28
+ | `--osdk-typography-weight-default` | `--bp-typography-weight-default` | Body text |
29
+ | `--osdk-typography-weight-bold` | `--bp-typography-weight-bold` | Headings, emphasis |
30
+
31
+ ## Line Height
32
+
33
+ | Token | Maps to |
34
+ | --------------------------------------- | ------------------------------------- |
35
+ | `--osdk-typography-line-height-default` | `--bp-typography-line-height-default` |
36
+
37
+ ## Global Defaults
38
+
39
+ The root element sets these defaults for all OSDK components:
40
+
41
+ ```css
42
+ :root {
43
+ font-family: var(--osdk-typography-family-default);
44
+ color: var(--osdk-typography-color-default-rest);
45
+ font-size: var(--osdk-typography-size-body-medium);
46
+ }
47
+ ```
48
+
49
+ ## Override Example
50
+
51
+ ```css
52
+ /* Make all OSDK components use a custom font */
53
+ :root {
54
+ --osdk-typography-family-default: "Inter", sans-serif;
55
+ --osdk-typography-size-body-medium: 15px;
56
+ }
57
+ ```
@@ -0,0 +1,47 @@
1
+ # Usage with OSDK
2
+
3
+ `@osdk/react-components` is built on top of
4
+ [`@osdk/react`](https://github.com/palantir/osdk-ts/tree/main/packages/react),
5
+ which provides hooks for fetching Ontology data. Components accept OSDK types
6
+ directly and handle data loading, caching, and state management automatically.
7
+
8
+ ## How it works
9
+
10
+ Every OSDK-aware component follows a two-layer architecture:
11
+
12
+ 1. **OSDK layer** (e.g. `ObjectTable`, `FilterList`, `ActionForm`) — fetches
13
+ data via `@osdk/react` hooks, converts OSDK entities into primitives, and
14
+ passes them down.
15
+ 2. **Base layer** (e.g. `BaseTable`, `BaseFilterList`) — a pure React
16
+ component with no OSDK imports. It receives primitives and handles all UI
17
+ interactions and styling.
18
+
19
+ This means you can always drop down to the `Base*` variant and bring your own
20
+ data source.
21
+
22
+ ## OsdkProvider
23
+
24
+ All components require an `OsdkProvider` wrapping your app. The provider
25
+ supplies the OSDK client that hooks use for network requests.
26
+
27
+ ```tsx
28
+ import { createClient } from "@osdk/client";
29
+ import { OsdkProvider } from "@osdk/react";
30
+
31
+ const client = createClient(
32
+ "https://your-stack.palantirfoundry.com",
33
+ "your-ontology-rid",
34
+ async () => "your-auth-token",
35
+ );
36
+
37
+ function App() {
38
+ return (
39
+ <OsdkProvider client={client}>
40
+ {/* All @osdk/react-components go inside here */}
41
+ </OsdkProvider>
42
+ );
43
+ }
44
+ ```
45
+
46
+ Refer to individual component stories for up-to-date usage examples — the
47
+ component API is under active development and props may change between releases.
@@ -0,0 +1,42 @@
1
+ # OSDK React Components
2
+
3
+ React components for building Foundry applications. These components are
4
+ Ontology-aware — pass in OSDK entities, and they handle data loading, caching,
5
+ and state management automatically.
6
+
7
+ Built on top of [`@osdk/react`](https://github.com/palantir/osdk-ts/tree/main/packages/react),
8
+ these components use OSDK hooks internally to provide ready-to-use UI elements.
9
+ While `@osdk/react` gives you low-level hooks for data fetching,
10
+ `@osdk/react-components` provides UI widgets for common patterns like tables,
11
+ forms, and filters.
12
+
13
+ ## Available Components
14
+
15
+ | Component | Description |
16
+ | ---------------- | ---------------------------------------------------------------------------- |
17
+ | `ObjectTable` | Displays an Object Set as a sortable, paginated table with inline editing |
18
+ | `FilterList` | Interactive filter panel with histogram filters, date ranges, and search |
19
+ | `ActionForm` | Auto-generated form for executing Ontology Actions |
20
+ | `DocumentViewer` | Unified media viewer that auto-detects file type (PDF, Excel, images, video) |
21
+ | `AipAgentChat` | Chat surface backed by Foundry LMS |
22
+
23
+ All components are exported under `@osdk/react-components/experimental/*`
24
+ sub-paths (e.g. `@osdk/react-components/experimental/object-table`).
25
+
26
+ ## Quick Start
27
+
28
+ ```bash
29
+ npm install @osdk/react-components @osdk/react @osdk/client @osdk/api react react-dom classnames
30
+ ```
31
+
32
+ ```tsx
33
+ import { ObjectTable } from "@osdk/react-components/experimental/object-table";
34
+ import { Employee } from "@your-osdk-package";
35
+
36
+ function EmployeeDirectory() {
37
+ return <ObjectTable objectType={Employee} />;
38
+ }
39
+ ```
40
+
41
+ See the **Installation** page for full setup instructions including CSS layers
42
+ and provider configuration.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@osdk/react-components",
3
- "version": "0.20.0-main-4e2a115a796e8664c3972548bb02e707baafa912",
3
+ "version": "0.20.0",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -193,9 +193,9 @@
193
193
  "xlsx": "^0.18.5"
194
194
  },
195
195
  "peerDependencies": {
196
- "@osdk/api": ">=2.24.0-beta.0",
197
- "@osdk/client": ">=2.24.0-beta.0",
198
- "@osdk/react": ">=2.24.0-beta.0",
196
+ "@osdk/api": "^2.8.0",
197
+ "@osdk/client": "^2.8.0",
198
+ "@osdk/react": "^2.8.0",
199
199
  "@types/react": "^17 || ^18 || ^19",
200
200
  "classnames": "^2.0.0",
201
201
  "react": "^17 || ^18 || ^19",
@@ -219,12 +219,12 @@
219
219
  "react": "^18.3.1",
220
220
  "react-dom": "^18.3.1",
221
221
  "typescript": "~5.5.4",
222
+ "@osdk/api": "2.24.0",
222
223
  "@osdk/aip-core": "0.4.0",
223
- "@osdk/api": "2.24.0-main-4e2a115a796e8664c3972548bb02e707baafa912",
224
- "@osdk/client": "2.24.0-main-4e2a115a796e8664c3972548bb02e707baafa912",
225
- "@osdk/monorepo.api-extractor": "~0.7.0",
224
+ "@osdk/client": "2.24.0",
226
225
  "@osdk/monorepo.tsconfig": "~0.7.0",
227
- "@osdk/react": "2.24.0-main-4e2a115a796e8664c3972548bb02e707baafa912"
226
+ "@osdk/react": "2.24.0",
227
+ "@osdk/monorepo.api-extractor": "~0.7.0"
228
228
  },
229
229
  "publishConfig": {
230
230
  "access": "public"