@dxos/react-ui-grid 0.8.4-main.84f28bd → 0.8.4-main.ae835ea

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.
@@ -1,341 +0,0 @@
1
- import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
-
3
- // src/index.ts
4
- import { defaultColSize, defaultRowSize } from "@dxos/lit-grid";
5
-
6
- // src/Grid/Grid.tsx
7
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
8
- import "@dxos/lit-grid/dx-grid.pcss";
9
- import { createComponent } from "@lit/react";
10
- import { createContextScope } from "@radix-ui/react-context";
11
- import { useControllableState } from "@radix-ui/react-use-controllable-state";
12
- import React, { forwardRef, useCallback, useEffect, useState } from "react";
13
- import { DxGrid as NaturalDxGrid } from "@dxos/lit-grid";
14
- import { colToA1Notation, rowToA1Notation, closestCell, commentedClassName, toPlaneCellIndex, parseCellIndex, cellQuery } from "@dxos/lit-grid";
15
- var DxGrid = createComponent({
16
- tagName: "dx-grid",
17
- elementClass: NaturalDxGrid,
18
- react: React,
19
- events: {
20
- onAxisResize: "dx-axis-resize",
21
- onEdit: "dx-edit-request",
22
- onSelect: "dx-grid-cells-select"
23
- }
24
- });
25
- var initialBox = {
26
- insetInlineStart: 0,
27
- insetBlockStart: 0,
28
- inlineSize: 0,
29
- blockSize: 0
30
- };
31
- var GRID_NAME = "Grid";
32
- var [createGridContext, createGridScope] = createContextScope(GRID_NAME, []);
33
- var [GridProvider, useGridContext] = createGridContext(GRID_NAME);
34
- var GridRoot = ({ id, editing: propsEditing, defaultEditing, onEditingChange, children, __gridScope }) => {
35
- var _effect = _useSignals();
36
- try {
37
- const [editing = null, setEditing] = useControllableState({
38
- prop: propsEditing,
39
- defaultProp: defaultEditing,
40
- onChange: onEditingChange
41
- });
42
- const [editBox, setEditBox] = useState(initialBox);
43
- return /* @__PURE__ */ React.createElement(GridProvider, {
44
- id,
45
- editing,
46
- setEditing,
47
- editBox,
48
- setEditBox,
49
- scope: __gridScope
50
- }, /* @__PURE__ */ React.createElement("div", {
51
- className: "dx-grid-host",
52
- style: {
53
- display: "contents"
54
- }
55
- }, children));
56
- } finally {
57
- _effect.f();
58
- }
59
- };
60
- GridRoot.displayName = GRID_NAME;
61
- var GRID_CONTENT_NAME = "GridContent";
62
- var GridContent = /* @__PURE__ */ forwardRef((props, forwardedRef) => {
63
- var _effect = _useSignals();
64
- try {
65
- const { id, editing, setEditBox, setEditing } = useGridContext(GRID_CONTENT_NAME, props.__gridScope);
66
- const [dxGrid, setDxGridInternal] = useState(null);
67
- const setDxGrid = useCallback((nextDxGrid) => {
68
- setDxGridInternal(nextDxGrid);
69
- if (forwardedRef) {
70
- if (typeof forwardedRef === "function") {
71
- forwardedRef?.(nextDxGrid);
72
- } else {
73
- forwardedRef.current = nextDxGrid;
74
- }
75
- }
76
- }, [
77
- forwardedRef,
78
- dxGrid
79
- ]);
80
- useEffect(() => {
81
- if (dxGrid && props.getCells) {
82
- dxGrid.getCells = props.getCells;
83
- dxGrid.requestUpdate("initialCells");
84
- }
85
- }, [
86
- props.getCells,
87
- dxGrid
88
- ]);
89
- const handleEdit = useCallback((event) => {
90
- setEditBox(event.cellBox);
91
- setEditing({
92
- index: event.cellIndex,
93
- cellElement: event.cellElement,
94
- initialContent: event.initialContent
95
- });
96
- }, []);
97
- return /* @__PURE__ */ React.createElement(DxGrid, {
98
- ...props,
99
- gridId: id,
100
- mode: editing ? "edit" : "browse",
101
- onEdit: handleEdit,
102
- ref: setDxGrid
103
- });
104
- } finally {
105
- _effect.f();
106
- }
107
- });
108
- GridContent.displayName = GRID_CONTENT_NAME;
109
- var gridSeparatorInlineEnd = "[&>.dx-grid]:relative [&>.dx-grid]:after:absolute [&>.dx-grid]:after:inset-block-0 [&>.dx-grid]:after:-inline-end-px [&>.dx-grid]:after:is-px [&>.dx-grid]:after:bg-subduedSeparator";
110
- var gridSeparatorBlockEnd = "[&>.dx-grid]:relative [&>.dx-grid]:before:absolute [&>.dx-grid]:before:inset-inline-0 [&>.dx-grid]:before:-block-end-px [&>.dx-grid]:before:bs-px [&>.dx-grid]:before:bg-subduedSeparator";
111
- var Grid = {
112
- Root: GridRoot,
113
- Content: GridContent
114
- };
115
-
116
- // src/CellEditor/CellEditor.tsx
117
- import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
118
- import { completionStatus } from "@codemirror/autocomplete";
119
- import { EditorView, keymap } from "@codemirror/view";
120
- import React2 from "react";
121
- import { useThemeContext } from "@dxos/react-ui";
122
- import { createBasicExtensions, createThemeExtensions, preventNewline, useTextEditor } from "@dxos/react-ui-editor";
123
- import { mx } from "@dxos/react-ui-theme";
124
- var editorKeys = ({ onNav, onClose }) => {
125
- return keymap.of([
126
- {
127
- key: "ArrowUp",
128
- run: (editor) => {
129
- const value = editor.state.doc.toString();
130
- onNav?.(value, {
131
- key: "ArrowUp"
132
- });
133
- return !!onNav;
134
- }
135
- },
136
- {
137
- key: "ArrowDown",
138
- run: (editor) => {
139
- const value = editor.state.doc.toString();
140
- onNav?.(value, {
141
- key: "ArrowDown"
142
- });
143
- return !!onNav;
144
- }
145
- },
146
- {
147
- key: "Mod-ArrowLeft",
148
- run: (editor) => {
149
- const value = editor.state.doc.toString();
150
- onNav?.(value, {
151
- key: "ArrowLeft"
152
- });
153
- return !!onNav;
154
- }
155
- },
156
- {
157
- key: "Mod-ArrowRight",
158
- run: (editor) => {
159
- const value = editor.state.doc.toString();
160
- onNav?.(value, {
161
- key: "ArrowRight"
162
- });
163
- return !!onNav;
164
- }
165
- },
166
- {
167
- key: "Enter",
168
- run: (editor) => {
169
- if (completionStatus(editor.state)) {
170
- return false;
171
- } else {
172
- onClose(editor.state.doc.toString(), {
173
- key: "Enter"
174
- });
175
- return true;
176
- }
177
- },
178
- shift: (editor) => {
179
- if (completionStatus(editor.state)) {
180
- return false;
181
- } else {
182
- onClose(editor.state.doc.toString(), {
183
- key: "Enter",
184
- shift: true
185
- });
186
- return true;
187
- }
188
- }
189
- },
190
- {
191
- key: "Tab",
192
- run: (editor) => {
193
- if (completionStatus(editor.state)) {
194
- return false;
195
- } else {
196
- onClose(editor.state.doc.toString(), {
197
- key: "Tab"
198
- });
199
- return true;
200
- }
201
- },
202
- shift: (editor) => {
203
- if (completionStatus(editor.state)) {
204
- return false;
205
- } else {
206
- onClose(editor.state.doc.toString(), {
207
- key: "Tab",
208
- shift: true
209
- });
210
- return true;
211
- }
212
- }
213
- },
214
- {
215
- key: "Escape",
216
- run: () => {
217
- onClose(void 0, {
218
- key: "Escape"
219
- });
220
- return true;
221
- }
222
- }
223
- ]);
224
- };
225
- var CellEditor = ({ value, extension, autoFocus, onBlur, box, gridId, slots }) => {
226
- var _effect = _useSignals2();
227
- try {
228
- const { themeMode } = useThemeContext();
229
- const { parentRef } = useTextEditor(() => {
230
- return {
231
- autoFocus,
232
- initialValue: value,
233
- selection: {
234
- anchor: value?.length ?? 0
235
- },
236
- extensions: [
237
- extension ?? [],
238
- preventNewline,
239
- EditorView.focusChangeEffect.of((state, focusing) => {
240
- if (!focusing) {
241
- onBlur?.(state.doc.toString());
242
- }
243
- return null;
244
- }),
245
- createBasicExtensions({
246
- lineWrapping: true
247
- }),
248
- createThemeExtensions({
249
- themeMode,
250
- slots: {
251
- editor: {
252
- className: mx("!min-is-full !is-min !max-is-[--dx-grid-cell-editor-max-inline-size] !min-bs-full !max-bs-[--dx-grid-cell-editor-max-block-size]", slots?.editor?.className)
253
- },
254
- scroller: {
255
- className: mx("!overflow-x-hidden !plb-[max(0,calc(var(--dx-grid-cell-editor-padding-block)-1px))] !pie-0 !pis-[--dx-grid-cell-editor-padding-inline]", slots?.scroller?.className)
256
- },
257
- content: {
258
- className: mx("!break-normal", slots?.content?.className)
259
- }
260
- }
261
- })
262
- ]
263
- };
264
- }, [
265
- extension,
266
- autoFocus,
267
- value,
268
- onBlur,
269
- themeMode,
270
- slots
271
- ]);
272
- return /* @__PURE__ */ React2.createElement("div", {
273
- "data-testid": "grid.cell-editor",
274
- ref: parentRef,
275
- className: "absolute z-[1] dx-grid__cell-editor",
276
- style: {
277
- insetInlineStart: box?.insetInlineStart ?? "0px",
278
- insetBlockStart: box?.insetBlockStart ?? "0px",
279
- minInlineSize: box?.inlineSize ?? "180px",
280
- minBlockSize: box?.blockSize ?? "30px",
281
- ...{
282
- "--dx-gridCellWidth": `${box?.inlineSize ?? 200}px`
283
- }
284
- },
285
- ...gridId && {
286
- "data-grid": gridId
287
- }
288
- });
289
- } finally {
290
- _effect.f();
291
- }
292
- };
293
-
294
- // src/CellEditor/GridCellEditor.tsx
295
- import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
296
- import React3, { useCallback as useCallback2 } from "react";
297
- var GridCellEditor = ({ extension, getCellContent, onBlur, slots, __gridScope }) => {
298
- var _effect = _useSignals3();
299
- try {
300
- const { id, editing, setEditing, editBox } = useGridContext("GridCellEditor", __gridScope);
301
- const handleBlur = useCallback2((value) => {
302
- setEditing(null);
303
- onBlur?.(value);
304
- }, [
305
- onBlur
306
- ]);
307
- return editing ? /* @__PURE__ */ React3.createElement(CellEditor, {
308
- value: editing.initialContent ?? getCellContent(editing.index),
309
- autoFocus: true,
310
- box: editBox,
311
- onBlur: handleBlur,
312
- extension,
313
- gridId: id,
314
- slots
315
- }) : null;
316
- } finally {
317
- _effect.f();
318
- }
319
- };
320
- export {
321
- CellEditor,
322
- Grid,
323
- GridCellEditor,
324
- GridContent,
325
- GridRoot,
326
- cellQuery,
327
- closestCell,
328
- colToA1Notation,
329
- commentedClassName,
330
- createGridScope,
331
- defaultColSize,
332
- defaultRowSize,
333
- editorKeys,
334
- gridSeparatorBlockEnd,
335
- gridSeparatorInlineEnd,
336
- parseCellIndex,
337
- rowToA1Notation,
338
- toPlaneCellIndex,
339
- useGridContext
340
- };
341
- //# sourceMappingURL=index.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/index.ts", "../../../src/Grid/Grid.tsx", "../../../src/CellEditor/CellEditor.tsx", "../../../src/CellEditor/GridCellEditor.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nexport { defaultColSize, defaultRowSize } from '@dxos/lit-grid';\n\nexport * from './Grid';\nexport * from './CellEditor';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport '@dxos/lit-grid/dx-grid.pcss';\n\nimport { createComponent, type EventName } from '@lit/react';\nimport { createContextScope, type Scope } from '@radix-ui/react-context';\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport React, {\n type ComponentProps,\n type PropsWithChildren,\n forwardRef,\n useCallback,\n useEffect,\n useState,\n} from 'react';\n\nimport { type DxAxisResize, type DxEditRequest, type DxGridCellsSelect, DxGrid as NaturalDxGrid } from '@dxos/lit-grid';\n\ntype DxGridElement = NaturalDxGrid;\n\nconst DxGrid = createComponent({\n tagName: 'dx-grid',\n elementClass: NaturalDxGrid,\n react: React,\n events: {\n onAxisResize: 'dx-axis-resize' as EventName<DxAxisResize>,\n onEdit: 'dx-edit-request' as EventName<DxEditRequest>,\n onSelect: 'dx-grid-cells-select' as EventName<DxGridCellsSelect>,\n },\n});\n\ntype GridEditBox = DxEditRequest['cellBox'];\n\nconst initialBox = {\n insetInlineStart: 0,\n insetBlockStart: 0,\n inlineSize: 0,\n blockSize: 0,\n} satisfies GridEditBox;\n\ntype GridEditing = {\n index: DxEditRequest['cellIndex'];\n cellElement: DxEditRequest['cellElement'];\n initialContent: DxEditRequest['initialContent'];\n} | null;\n\ntype GridContextValue = {\n id: string;\n editing: GridEditing;\n setEditing: (nextEditing: GridEditing) => void;\n editBox: GridEditBox;\n setEditBox: (nextEditBox: GridEditBox) => void;\n};\n\ntype GridScopedProps<P> = P & { __gridScope?: Scope };\n\nconst GRID_NAME = 'Grid';\n\nconst [createGridContext, createGridScope] = createContextScope(GRID_NAME, []);\n\nconst [GridProvider, useGridContext] = createGridContext<GridContextValue>(GRID_NAME);\n\ntype GridRootProps = PropsWithChildren<\n { id: string } & Partial<{\n editing: GridEditing;\n defaultEditing: GridEditing;\n onEditingChange: (nextEditing: GridEditing) => void;\n }>\n>;\n\nconst GridRoot = ({\n id,\n editing: propsEditing,\n defaultEditing,\n onEditingChange,\n children,\n __gridScope,\n}: GridScopedProps<GridRootProps>) => {\n const [editing = null, setEditing] = useControllableState({\n prop: propsEditing,\n defaultProp: defaultEditing,\n onChange: onEditingChange,\n });\n const [editBox, setEditBox] = useState<GridEditBox>(initialBox);\n return (\n <GridProvider\n id={id}\n editing={editing}\n setEditing={setEditing}\n editBox={editBox}\n setEditBox={setEditBox}\n scope={__gridScope}\n >\n <div className='dx-grid-host' style={{ display: 'contents' }}>\n {children}\n </div>\n </GridProvider>\n );\n};\n\nGridRoot.displayName = GRID_NAME;\n\ntype GridContentProps = Omit<ComponentProps<typeof DxGrid>, 'onEdit'> & {\n getCells?: NaturalDxGrid['getCells'];\n activeRefs?: string;\n};\n\nconst GRID_CONTENT_NAME = 'GridContent';\n\nconst GridContent = forwardRef<NaturalDxGrid, GridScopedProps<GridContentProps>>((props, forwardedRef) => {\n const { id, editing, setEditBox, setEditing } = useGridContext(GRID_CONTENT_NAME, props.__gridScope);\n const [dxGrid, setDxGridInternal] = useState<NaturalDxGrid | null>(null);\n\n // NOTE(thure): using `useState` instead of `useRef` works with refs provided by `@lit/react` and gives us\n // a reliable dependency for `useEffect` whereas `useLayoutEffect` does not guarantee the element will be defined.\n const setDxGrid = useCallback(\n (nextDxGrid: NaturalDxGrid | null) => {\n setDxGridInternal(nextDxGrid);\n if (forwardedRef) {\n if (typeof forwardedRef === 'function') {\n forwardedRef?.(nextDxGrid);\n } else {\n forwardedRef.current = nextDxGrid;\n }\n }\n },\n [forwardedRef, dxGrid],\n );\n\n useEffect(() => {\n if (dxGrid && props.getCells) {\n dxGrid.getCells = props.getCells;\n dxGrid.requestUpdate('initialCells');\n }\n }, [props.getCells, dxGrid]);\n\n const handleEdit = useCallback((event: DxEditRequest) => {\n setEditBox(event.cellBox);\n setEditing({ index: event.cellIndex, cellElement: event.cellElement, initialContent: event.initialContent });\n }, []);\n\n return <DxGrid {...props} gridId={id} mode={editing ? 'edit' : 'browse'} onEdit={handleEdit} ref={setDxGrid} />;\n});\n\nGridContent.displayName = GRID_CONTENT_NAME;\n\n//\n// Fragments\n//\n\n// NOTE(Zan): These fragments add border to inline-end and block-end of the grid using pseudo-elements.\n// These are offset by 1px to avoid double borders in planks.\nconst gridSeparatorInlineEnd =\n '[&>.dx-grid]:relative [&>.dx-grid]:after:absolute [&>.dx-grid]:after:inset-block-0 [&>.dx-grid]:after:-inline-end-px [&>.dx-grid]:after:is-px [&>.dx-grid]:after:bg-subduedSeparator';\nconst gridSeparatorBlockEnd =\n '[&>.dx-grid]:relative [&>.dx-grid]:before:absolute [&>.dx-grid]:before:inset-inline-0 [&>.dx-grid]:before:-block-end-px [&>.dx-grid]:before:bs-px [&>.dx-grid]:before:bg-subduedSeparator';\n\n//\n// Exports\n//\n\nexport const Grid = {\n Root: GridRoot,\n Content: GridContent,\n};\n\nexport { GridRoot, GridContent, useGridContext, createGridScope, gridSeparatorInlineEnd, gridSeparatorBlockEnd };\n\nexport type { GridRootProps, GridContentProps, GridEditing, GridEditBox, GridScopedProps, DxGridElement };\n\nexport {\n colToA1Notation,\n rowToA1Notation,\n closestCell,\n commentedClassName,\n toPlaneCellIndex,\n parseCellIndex,\n cellQuery,\n} from '@dxos/lit-grid';\n\nexport type {\n DxGridRange,\n DxGridAxisMeta,\n DxAxisResize,\n DxGridCells,\n DxGridPlaneRange,\n DxGridPlaneCells,\n DxGridCellIndex,\n DxGridPlaneCellIndex,\n DxGridCellValue,\n DxGridPlane,\n DxGridPosition,\n DxGridPlanePosition,\n DxGridAxis,\n} from '@dxos/lit-grid';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { completionStatus } from '@codemirror/autocomplete';\nimport { type Extension } from '@codemirror/state';\nimport { EditorView, keymap } from '@codemirror/view';\nimport React, { type KeyboardEvent } from 'react';\n\nimport { useThemeContext } from '@dxos/react-ui';\nimport {\n type UseTextEditorProps,\n createBasicExtensions,\n createThemeExtensions,\n preventNewline,\n useTextEditor,\n type ThemeExtensionsOptions,\n} from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { type GridEditBox } from '../Grid';\n\nexport type EditorKeyEvent = Pick<KeyboardEvent<HTMLInputElement>, 'key'> & { shift?: boolean };\n\nexport type EditorKeyHandler = (value: string | undefined, event: EditorKeyEvent) => void;\nexport type EditorBlurHandler = (value: string | undefined) => void;\nexport type EditorKeyOrBlurHandler = (value: string | undefined, event?: EditorKeyEvent) => void;\n\nexport type EditorKeysProps = {\n onClose: EditorKeyHandler;\n onNav?: EditorKeyHandler;\n};\n\n// TODO(Zan): Should each consumer be responsible for defining these?\nexport const editorKeys = ({ onNav, onClose }: EditorKeysProps): Extension => {\n return keymap.of([\n {\n key: 'ArrowUp',\n run: (editor) => {\n const value = editor.state.doc.toString();\n onNav?.(value, { key: 'ArrowUp' });\n return !!onNav;\n },\n },\n {\n key: 'ArrowDown',\n run: (editor) => {\n const value = editor.state.doc.toString();\n onNav?.(value, { key: 'ArrowDown' });\n return !!onNav;\n },\n },\n {\n key: 'Mod-ArrowLeft',\n run: (editor) => {\n const value = editor.state.doc.toString();\n onNav?.(value, { key: 'ArrowLeft' });\n return !!onNav;\n },\n },\n {\n key: 'Mod-ArrowRight',\n run: (editor) => {\n const value = editor.state.doc.toString();\n onNav?.(value, { key: 'ArrowRight' });\n return !!onNav;\n },\n },\n {\n key: 'Enter',\n run: (editor) => {\n if (completionStatus(editor.state)) {\n return false;\n } else {\n onClose(editor.state.doc.toString(), { key: 'Enter' });\n return true;\n }\n },\n shift: (editor) => {\n if (completionStatus(editor.state)) {\n return false;\n } else {\n onClose(editor.state.doc.toString(), { key: 'Enter', shift: true });\n return true;\n }\n },\n },\n {\n key: 'Tab',\n run: (editor) => {\n if (completionStatus(editor.state)) {\n return false;\n } else {\n onClose(editor.state.doc.toString(), { key: 'Tab' });\n return true;\n }\n },\n shift: (editor) => {\n if (completionStatus(editor.state)) {\n return false;\n } else {\n onClose(editor.state.doc.toString(), { key: 'Tab', shift: true });\n return true;\n }\n },\n },\n {\n key: 'Escape',\n run: () => {\n onClose(undefined, { key: 'Escape' });\n return true;\n },\n },\n ]);\n};\n\nexport type CellEditorProps = {\n value?: string;\n extension?: Extension;\n box?: GridEditBox;\n gridId?: string;\n onBlur?: EditorBlurHandler;\n} & Pick<UseTextEditorProps, 'autoFocus'> &\n Pick<ThemeExtensionsOptions, 'slots'>;\n\nexport const CellEditor = ({ value, extension, autoFocus, onBlur, box, gridId, slots }: CellEditorProps) => {\n const { themeMode } = useThemeContext();\n const { parentRef } = useTextEditor(() => {\n return {\n autoFocus,\n initialValue: value,\n selection: { anchor: value?.length ?? 0 },\n extensions: [\n extension ?? [],\n preventNewline,\n EditorView.focusChangeEffect.of((state, focusing) => {\n if (!focusing) {\n onBlur?.(state.doc.toString());\n }\n return null;\n }),\n createBasicExtensions({ lineWrapping: true }),\n createThemeExtensions({\n themeMode,\n slots: {\n editor: {\n className: mx(\n '!min-is-full !is-min !max-is-[--dx-grid-cell-editor-max-inline-size] !min-bs-full !max-bs-[--dx-grid-cell-editor-max-block-size]',\n slots?.editor?.className,\n ),\n },\n scroller: {\n className: mx(\n '!overflow-x-hidden !plb-[max(0,calc(var(--dx-grid-cell-editor-padding-block)-1px))] !pie-0 !pis-[--dx-grid-cell-editor-padding-inline]',\n slots?.scroller?.className,\n ),\n },\n content: { className: mx('!break-normal', slots?.content?.className) },\n },\n }),\n ],\n };\n }, [extension, autoFocus, value, onBlur, themeMode, slots]);\n\n return (\n <div\n data-testid='grid.cell-editor'\n ref={parentRef}\n className='absolute z-[1] dx-grid__cell-editor'\n style={{\n insetInlineStart: box?.insetInlineStart ?? '0px',\n insetBlockStart: box?.insetBlockStart ?? '0px',\n minInlineSize: box?.inlineSize ?? '180px',\n minBlockSize: box?.blockSize ?? '30px',\n ...{ '--dx-gridCellWidth': `${box?.inlineSize ?? 200}px` },\n }}\n {...(gridId && { 'data-grid': gridId })}\n />\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { CellEditor, type CellEditorProps } from './CellEditor';\nimport { type GridScopedProps, useGridContext, type DxGridCellIndex } from '../Grid';\n\nexport type GridCellEditorProps = GridScopedProps<\n Pick<CellEditorProps, 'extension' | 'onBlur' | 'slots'> & {\n getCellContent: (index: DxGridCellIndex) => string | undefined;\n }\n>;\n\nexport const GridCellEditor = ({ extension, getCellContent, onBlur, slots, __gridScope }: GridCellEditorProps) => {\n const { id, editing, setEditing, editBox } = useGridContext('GridCellEditor', __gridScope);\n\n const handleBlur = useCallback(\n (value?: string) => {\n setEditing(null);\n onBlur?.(value);\n },\n [onBlur],\n );\n\n return editing ? (\n <CellEditor\n value={editing.initialContent ?? getCellContent(editing.index)}\n autoFocus\n box={editBox}\n onBlur={handleBlur}\n extension={extension}\n gridId={id}\n slots={slots}\n />\n ) : null;\n};\n"],
5
- "mappings": "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",
6
- "names": ["defaultColSize", "defaultRowSize", "createComponent", "createContextScope", "useControllableState", "React", "forwardRef", "useCallback", "useEffect", "useState", "DxGrid", "NaturalDxGrid", "colToA1Notation", "rowToA1Notation", "closestCell", "commentedClassName", "toPlaneCellIndex", "parseCellIndex", "cellQuery", "DxGrid", "createComponent", "tagName", "elementClass", "NaturalDxGrid", "react", "React", "events", "onAxisResize", "onEdit", "onSelect", "initialBox", "insetInlineStart", "insetBlockStart", "inlineSize", "blockSize", "GRID_NAME", "createGridContext", "createGridScope", "createContextScope", "GridProvider", "useGridContext", "GridRoot", "id", "editing", "propsEditing", "defaultEditing", "onEditingChange", "children", "__gridScope", "setEditing", "useControllableState", "prop", "defaultProp", "onChange", "editBox", "setEditBox", "useState", "scope", "div", "className", "style", "display", "displayName", "GRID_CONTENT_NAME", "GridContent", "forwardRef", "props", "forwardedRef", "dxGrid", "setDxGridInternal", "setDxGrid", "useCallback", "nextDxGrid", "current", "useEffect", "getCells", "requestUpdate", "handleEdit", "event", "cellBox", "index", "cellIndex", "cellElement", "initialContent", "gridId", "mode", "ref", "gridSeparatorInlineEnd", "gridSeparatorBlockEnd", "Grid", "Root", "Content", "completionStatus", "EditorView", "keymap", "React", "useThemeContext", "createBasicExtensions", "createThemeExtensions", "preventNewline", "useTextEditor", "mx", "editorKeys", "onNav", "onClose", "keymap", "of", "key", "run", "editor", "value", "state", "doc", "toString", "completionStatus", "shift", "undefined", "CellEditor", "extension", "autoFocus", "onBlur", "box", "gridId", "slots", "themeMode", "useThemeContext", "parentRef", "useTextEditor", "initialValue", "selection", "anchor", "length", "extensions", "preventNewline", "EditorView", "focusChangeEffect", "focusing", "createBasicExtensions", "lineWrapping", "createThemeExtensions", "className", "mx", "scroller", "content", "React", "div", "data-testid", "ref", "style", "insetInlineStart", "insetBlockStart", "minInlineSize", "inlineSize", "minBlockSize", "blockSize", "React", "useCallback", "GridCellEditor", "extension", "getCellContent", "onBlur", "slots", "__gridScope", "id", "editing", "setEditing", "editBox", "useGridContext", "handleBlur", "useCallback", "value", "React", "CellEditor", "initialContent", "index", "autoFocus", "box", "gridId"]
7
- }
@@ -1 +0,0 @@
1
- {"inputs":{"src/Grid/Grid.tsx":{"bytes":16989,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@dxos/lit-grid/dx-grid.pcss","kind":"import-statement","external":true},{"path":"@lit/react","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/lit-grid","kind":"import-statement","external":true},{"path":"@dxos/lit-grid","kind":"import-statement","external":true}],"format":"esm"},"src/Grid/index.ts":{"bytes":449,"imports":[{"path":"src/Grid/Grid.tsx","kind":"import-statement","original":"./Grid"}],"format":"esm"},"src/CellEditor/CellEditor.tsx":{"bytes":18224,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@codemirror/autocomplete","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true}],"format":"esm"},"src/CellEditor/GridCellEditor.tsx":{"bytes":3727,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"src/CellEditor/CellEditor.tsx","kind":"import-statement","original":"./CellEditor"},{"path":"src/Grid/index.ts","kind":"import-statement","original":"../Grid"}],"format":"esm"},"src/CellEditor/index.ts":{"bytes":575,"imports":[{"path":"src/CellEditor/CellEditor.tsx","kind":"import-statement","original":"./CellEditor"},{"path":"src/CellEditor/GridCellEditor.tsx","kind":"import-statement","original":"./GridCellEditor"}],"format":"esm"},"src/index.ts":{"bytes":791,"imports":[{"path":"@dxos/lit-grid","kind":"import-statement","external":true},{"path":"src/Grid/index.ts","kind":"import-statement","original":"./Grid"},{"path":"src/CellEditor/index.ts","kind":"import-statement","original":"./CellEditor"}],"format":"esm"}},"outputs":{"dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":20009},"dist/lib/node-esm/index.mjs":{"imports":[{"path":"@dxos/lit-grid","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@dxos/lit-grid/dx-grid.pcss","kind":"import-statement","external":true},{"path":"@lit/react","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/lit-grid","kind":"import-statement","external":true},{"path":"@dxos/lit-grid","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@codemirror/autocomplete","kind":"import-statement","external":true},{"path":"@codemirror/view","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-editor","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"exports":["CellEditor","Grid","GridCellEditor","GridContent","GridRoot","cellQuery","closestCell","colToA1Notation","commentedClassName","createGridScope","defaultColSize","defaultRowSize","editorKeys","gridSeparatorBlockEnd","gridSeparatorInlineEnd","parseCellIndex","rowToA1Notation","toPlaneCellIndex","useGridContext"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":65},"src/Grid/Grid.tsx":{"bytesInOutput":3687},"src/Grid/index.ts":{"bytesInOutput":0},"src/CellEditor/CellEditor.tsx":{"bytesInOutput":4685},"src/CellEditor/index.ts":{"bytesInOutput":0},"src/CellEditor/GridCellEditor.tsx":{"bytesInOutput":802}},"bytes":9819}}}