Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
214 commits
Select commit Hold shift + click to select a range
688a809
test: add presets-umd smoke tests (#7120)
jikkai Jun 18, 2026
f3d7fdc
feat(embed): add shared embed runtime
DR-Univer Jun 15, 2026
b9cfe5f
feat(embed): move product capabilities behind embed config
DR-Univer Jun 15, 2026
8f9b45a
fix(embed): keep sheet tabs switchable from child blocks
DR-Univer Jun 15, 2026
b469b7c
feat(embed): refine shared block runtime
DR-Univer Jun 18, 2026
2d7747f
feat(embed): size docs table-like blocks from content
DR-Univer Jun 18, 2026
30ffad2
fix(embed): chain docs table-like block wheel scroll
DR-Univer Jun 18, 2026
c788c7b
fix(embed): bound docs table-like bleed to container
DR-Univer Jun 18, 2026
9b6f1c5
feat(embed): register product content size providers
DR-Univer Jun 18, 2026
997f526
fix(embed): respect child wheel ownership in docs blocks
DR-Univer Jun 18, 2026
3cd84b5
feat(embed): measure docs block content width
DR-Univer Jun 18, 2026
c6ceae7
fix(embed): pass docs block content width to runtime
DR-Univer Jun 18, 2026
d644e0b
fix(embed): preserve doc float runtime props
DR-Univer Jun 18, 2026
62b0bf9
fix(embed): refresh docs block size after child changes
DR-Univer Jun 18, 2026
a44714f
fix(embed): coalesce docs block size refresh
DR-Univer Jun 18, 2026
4435e06
fix(embed): measure sheet block used range size
DR-Univer Jun 18, 2026
8e46912
docs(embed): specify docs table-like block bleed
DR-Univer Jun 18, 2026
ccd7ac1
fix(embed): pass docs block content height to runtime
DR-Univer Jun 18, 2026
1baf4e7
test(embed): cover docs block content height normalization
DR-Univer Jun 18, 2026
dce2ab2
fix(embed): accept legacy unit id in docs block refresh
DR-Univer Jun 18, 2026
f79f2e4
fix(embed): bleed docs blocks only when content overflows
DR-Univer Jun 18, 2026
fbcb2bf
fix(embed): preserve zoom wheel gestures in float blocks
DR-Univer Jun 18, 2026
bf51816
test(embed): cover product menu registry behavior
DR-Univer Jun 18, 2026
653157d
fix(embed): mount registered product menus in fullscreen
DR-Univer Jun 18, 2026
0256b26
fix(embed): use registered product menus for tab ribbons
DR-Univer Jun 18, 2026
5d19c86
docs(embed): clarify docs table-like block bleed
DR-Univer Jun 18, 2026
a10c130
feat(embed): register docs and sheets product menus
DR-Univer Jun 18, 2026
5c751fc
fix(embed): centralize floating menu root resolution
DR-Univer Jun 18, 2026
f7fc145
fix(embed): cap docs table block outer scroll
DR-Univer Jun 18, 2026
da57c37
feat(embed): standardize product floating menu matrix
DR-Univer Jun 18, 2026
f707d95
fix(design): avoid shortcut ref type conflict
DR-Univer Jun 18, 2026
2d0b3f3
test(embed): mark dom specs as jsdom
DR-Univer Jun 18, 2026
c980842
test(embed): cover child unit uniqueness
DR-Univer Jun 18, 2026
58c41e2
test(embed): cover resource persistence boundary
DR-Univer Jun 18, 2026
d29cf71
fix(embed): size docs table blocks by content width
DR-Univer Jun 18, 2026
e109759
fix(embed): keep fallback docs table blocks content-sized
DR-Univer Jun 18, 2026
a47847f
fix(embed): keep docs block wheel boundary current
DR-Univer Jun 18, 2026
9873aa7
fix(embed): keep sheet float menu visible fullscreen
DR-Univer Jun 18, 2026
5b0663f
fix(embed): register product embed contributions
DR-Univer Jun 18, 2026
eb3813f
fix(embed-ui): register product ui contributions
DR-Univer Jun 18, 2026
eb7722a
test(embed-ui): stabilize browser dependent specs
DR-Univer Jun 18, 2026
a509d44
test(embed-ui): restore jsdom spec environments
DR-Univer Jun 18, 2026
b96bb74
fix(embed): address codefactor spread notices
DR-Univer Jun 18, 2026
7ee4e91
fix(embed): carry docs block viewport height into runtime
DR-Univer Jun 18, 2026
ecd9724
fix(embed): allow wide docs table blocks to scroll fully
DR-Univer Jun 18, 2026
0b8523a
chore(embed): fix lint formatting on changed files
DR-Univer Jun 18, 2026
56b4956
fix(embed): align float dom transformer types
DR-Univer Jun 18, 2026
fd64ed3
test(embed): use shared vitest config
DR-Univer Jun 18, 2026
2b0a63d
chore(embed): align embed package conventions
DR-Univer Jun 18, 2026
67a1c90
fix(embed): update host capability type imports
DR-Univer Jun 18, 2026
2c90289
fix(embed): align drawing float dom checks
DR-Univer Jun 18, 2026
eac2f63
fix(embed): sync oss lockfile
DR-Univer Jun 18, 2026
c059813
fix(embed): guard sheet context menu override
DR-Univer Jun 18, 2026
f6b17d8
fix(embed): avoid custom block viewport export collision
DR-Univer Jun 18, 2026
8d55380
fix(embed): update render service tests
DR-Univer Jun 18, 2026
c61b107
fix(embed): update sheets render service test mock
DR-Univer Jun 18, 2026
e5561d8
fix(embed): align package export types
DR-Univer Jun 18, 2026
816abe7
fix(embed): include embed umd deps in core presets
DR-Univer Jun 18, 2026
4185fa2
fix(embed): scope popup injector to embedded renders
DR-Univer Jun 18, 2026
5618982
fix(embed): restore sheet e2e visual stability
DR-Univer Jun 18, 2026
2bb1f18
fix(embed): guard demo range popup attachment
DR-Univer Jun 18, 2026
1cb8608
fix(embed): keep demo range popup anchored once
DR-Univer Jun 18, 2026
aed06ed
fix(embed): dispose demo range popup lifecycle
DR-Univer Jun 18, 2026
0ecf627
fix(embed): dispose sheets demo lifecycles
DR-Univer Jun 18, 2026
f2986c8
test(embed): cover core and ui service contracts
DR-Univer Jun 18, 2026
2273c97
test(embed): fix service spec type checks
DR-Univer Jun 18, 2026
b513cf0
fix(embed-ui): align package types export
DR-Univer Jun 18, 2026
f2362b9
test(embed-ui): cover mount and preview services
DR-Univer Jun 18, 2026
e9bbe14
test(embed-ui): fix coverage spec type checks
DR-Univer Jun 19, 2026
e4f71e6
test(embed-ui): cover small service controllers
DR-Univer Jun 19, 2026
9d7b70f
test(embed): cover docs host integration paths
DR-Univer Jun 19, 2026
17cb982
test(embed): cover sheets host anchor paths
DR-Univer Jun 19, 2026
88aeef2
test(embed): cover guest unit contracts
DR-Univer Jun 19, 2026
5e0f202
test(embed-ui): cover render child view lifecycle
DR-Univer Jun 19, 2026
82ed12b
test(embed-ui): cover block contribution factory policies
DR-Univer Jun 19, 2026
4199884
test(embed): cover resource unit type mappings
DR-Univer Jun 19, 2026
ebe1c58
test(embed): cover resource ref validation branches
DR-Univer Jun 19, 2026
5ac6efe
fix(docs): keep embed bleed out of page layout
DR-Univer Jun 19, 2026
61ad037
fix(docs): pass embed bleed viewport to runtime
DR-Univer Jun 19, 2026
42efc0d
fix(docs): use bleed shell for table embeds
DR-Univer Jun 19, 2026
f87b929
feat(embed): integrate block runtime across hosts
DR-Univer Jun 21, 2026
29e7f3d
fix(ui): use kebab case dom spec filename
DR-Univer Jun 21, 2026
d5ec20d
test(embed-ui): align invalid adapter fixture with types
DR-Univer Jun 21, 2026
0a3e0ce
chore(embed): fix oss lint issues
DR-Univer Jun 21, 2026
b5a87bd
fix(sheets-ui): guard header resize selection reset
DR-Univer Jun 21, 2026
2f94a59
fix(sheets-ui): skip selection facade events without runtime
DR-Univer Jun 21, 2026
8b1334a
feat(embed): coordinate runtime focus scopes
DR-Univer Jun 24, 2026
6ba54cc
fix(embed): keep product ribbon titles unprefixed
DR-Univer Jun 24, 2026
af77c6b
fix(embed): focus tab peer child sessions
DR-Univer Jun 24, 2026
a1ba171
fix(docs): render embedded zoom updates immediately
DR-Univer Jun 24, 2026
7c695b2
fix(docs): limit immediate zoom render to embedded docs
DR-Univer Jun 24, 2026
951299c
fix(sheets): restore tab-peer embedded chrome
DR-Univer Jun 24, 2026
5afc889
fix(embed): avoid activating tab blocks on mount
DR-Univer Jun 24, 2026
142ffc5
fix(sheets): preserve host sheet while creating tab embeds
DR-Univer Jun 24, 2026
6e192a6
fix(embed): restore host anchors without mutations
DR-Univer Jun 24, 2026
0ad3d9f
fix(sheets): restore embed tabs through workbook model
DR-Univer Jun 24, 2026
ad928b7
fix(sheets): refresh restored embed anchors
DR-Univer Jun 24, 2026
11cb444
fix(embed): polish docs custom block interactions
DR-Univer Jun 25, 2026
7d31b46
chore(embed): remove non-code artifacts from pr
DR-Univer Jun 25, 2026
3e37c12
fix(embed-ui): preserve floating host transformer interactions
DR-Univer Jun 25, 2026
8c4d96e
fix(embed): ignore disposed doc menu access
DR-Univer Jun 25, 2026
d53f6fe
fix(sheets): activate embedded sheet tabs on mount
DR-Univer Jun 25, 2026
59588d0
fix(embed): reanchor floating chrome on host layout changes
DR-Univer Jun 25, 2026
9db129d
fix(embed): keep floating controls in visible host bounds
DR-Univer Jun 25, 2026
add9d3a
fix(embed): place floating drag handle above block
DR-Univer Jun 25, 2026
5999664
feat(embed): add embed facade APIs
DR-Univer Jun 25, 2026
226c297
fix(embed): align fullscreen chrome with ribbon
DR-Univer Jun 26, 2026
a5f0be6
fix(embed-ui): align icons dependency lockfile
hexf00 Jun 26, 2026
c1a8e54
fix(embed-ui): expose locale entries
hexf00 Jun 26, 2026
1b15584
fix(embed-ui): add locale fallbacks
hexf00 Jun 26, 2026
67b76b1
feat(embed): support referenced unit providers
hexf00 Jun 26, 2026
c52d46e
fix(embed-ui): persist host embed descriptors on host unit
hexf00 Jun 26, 2026
7346229
chore(embed & embed-ui): cleanup packages
jikkai Jun 26, 2026
d7f2106
chore(embed & embed-ui): cleanup packages
jikkai Jun 26, 2026
1d12720
feat: improve embed fullscreen hosts
DR-Univer Jun 26, 2026
0fe962c
chore: update @univerjs/icons (#7154)
jikkai Jun 25, 2026
e5dd59d
fix(embed): stabilize embedded block activation
DR-Univer Jun 27, 2026
5602e6b
fix(embed-ui): keep stage2 chrome roots transparent
DR-Univer Jun 27, 2026
30d2915
fix(embed-ui): enforce float stage interaction policy
DR-Univer Jun 27, 2026
68642bc
fix(embed-ui): keep sheet float runtimes mounted across stages
DR-Univer Jun 27, 2026
cf5218c
feat(embed): support host lifecycle anchors
hexf00 Jun 27, 2026
c7a4168
fix(embed-ui): unify floating menu policy
DR-Univer Jun 27, 2026
636bf33
fix(embed-ui): keep floating child focus stage gated
DR-Univer Jun 27, 2026
f0d7458
feat(embed): add facade createEmbed and lazy referenced unit loading
hexf00 Jun 27, 2026
b9646a5
feat(embed): return referenced unit facades
hexf00 Jun 27, 2026
6b11fee
docs(embed): document type fallback for descriptor reads
hexf00 Jun 27, 2026
96132ee
docs(embed): remove pro regression standard
hexf00 Jun 28, 2026
81f1fab
Improve embed passive interactions
DR-Univer Jun 28, 2026
cfc301b
feat(embed): add referenced unit materialization plan
hexf00 Jun 28, 2026
37ca375
feat(embed): expose pending referenced unit records
hexf00 Jun 29, 2026
17bbc64
feat(embed): add facade type helpers
hexf00 Jun 29, 2026
723a7a8
fix(embed): use stable referenced unit type errors
hexf00 Jun 29, 2026
c581124
fix(embed): use referenced unit provider conflict error
hexf00 Jun 29, 2026
fb69409
[skip ci]feat: align embed referenced unit provider contract
hexf00 Jun 29, 2026
ae32cdf
fix(embed): stabilize floating block interactions
DR-Univer Jun 29, 2026
0ea0b91
chore(embed): align plugin package versions
DR-Univer Jun 29, 2026
932274a
feat(embed): add local runtime ref provider
hexf00 Jun 29, 2026
80ee29f
feat(embed): support prioritized resource ref providers
hexf00 Jun 30, 2026
bcd2962
fix embed product menu action scope
DR-Univer Jun 30, 2026
ee4c200
fix(core): load/unload resources for base units
hexf00 Jun 30, 2026
12f7754
refactor(embed-ui): use @univerjs/design render/unmount for react roots
jikkai Jun 30, 2026
ff4ef03
fix(sheets-ui): use skeleton sheet id for scroll command
hexf00 Jun 30, 2026
fa537e9
fix(sheets-drawing-ui): align embed floating host types
hexf00 Jun 30, 2026
56c2c05
refactor(sheets-drawing-ui): simplify floating host touch dependencies
hexf00 Jul 1, 2026
a1d50be
feat(embed): canonicalize resource ref descriptors
hexf00 Jul 1, 2026
9b6e79c
revert: rollback embed ref descriptor expansion
hexf00 Jul 1, 2026
143fef8
feat(embed): materialize resource refs through providers
hexf00 Jul 2, 2026
85a9f6b
fix(embed-ui): align render child view test formatting
hexf00 Jul 2, 2026
aa50b87
fix(embed-ui): format embed ui test descriptors
hexf00 Jul 2, 2026
71ca82b
fix(embed): satisfy eslint error rules
hexf00 Jul 2, 2026
2e26c5d
fix(embed): remove redundant host context spread fallback
hexf00 Jul 2, 2026
a6f8bec
chore: update code structure and remove redundant changes
jikkai Jul 2, 2026
c8cf851
feat(embed): stabilize embedded block interactions
DR-Univer Jul 2, 2026
e82c3c9
fix(embed-ui): satisfy ci type checks
DR-Univer Jul 2, 2026
5ffcb8d
fix(sheets-ui): satisfy embed floating menu ci
DR-Univer Jul 2, 2026
a010c78
fix(embed): align plugin config conventions
DR-Univer Jul 2, 2026
1ef341b
chore(embed): sync package exports
DR-Univer Jul 2, 2026
cb3b03c
test(embed): update formula and focus test mocks
DR-Univer Jul 2, 2026
dd36903
test(embed): align drawing ui ci types
DR-Univer Jul 2, 2026
62e7677
test(sheets-drawing): align float dom removal mocks
DR-Univer Jul 2, 2026
9de9e4e
test(docs-ui): align embed menu specs
DR-Univer Jul 2, 2026
6eeaefc
test(engine-render): align measured block flow assertions
DR-Univer Jul 2, 2026
30a9d90
feat(embed): add referenced unit manager
hexf00 Jul 3, 2026
a49a138
chore(embed): fix referenced unit lint issues
hexf00 Jul 3, 2026
6979ab4
chore(core): align resource ref interface names
hexf00 Jul 3, 2026
562c5a2
test(sheets-ui): expect scroll command target ids
hexf00 Jul 3, 2026
cff24a6
ci: split sheets ui coverage shard
DR-Univer Jul 3, 2026
8b98ec8
ci: exclude embed visual shells from coverage
DR-Univer Jul 3, 2026
4cf6344
feat(embed): move unit leases into embed layer
hexf00 Jul 3, 2026
f1dd519
fix(embed): avoid unnecessary lease state spreads
hexf00 Jul 3, 2026
eaeb626
docs(embed): add FUniver embed examples
hexf00 Jul 3, 2026
17104f9
docs(embed): tighten facade examples
hexf00 Jul 3, 2026
dd2b5ff
docs(embed): simplify facade examples
hexf00 Jul 3, 2026
2fc8aa9
docs(embed): inline facade example ids
hexf00 Jul 3, 2026
1f6f1af
fix(embed): stabilize editor and host lifecycle
DR-Univer Jul 5, 2026
ff39154
feat(embed): refine floating toolbar behavior
DR-Univer Jul 5, 2026
573301a
fix(embed): keep float blocks from replacing host ribbon
DR-Univer Jul 5, 2026
b553208
chore(embed-ui): align icons dependency version
DR-Univer Jul 5, 2026
75bc059
test(sheets-ui): align renderer canvas mock
DR-Univer Jul 5, 2026
e39f5dd
fix(embed): align resource refs and render lifecycle
DR-Univer Jul 5, 2026
13a555a
ci(embed): keep codecov patch coverage active
DR-Univer Jul 5, 2026
96679dd
ci(embed): set active codecov floors
DR-Univer Jul 5, 2026
1d3a967
fix: stabilize embed editor focus
DR-Univer Jul 7, 2026
1ca98ca
fix(embed-ui): expose runtime child scope metadata
DR-Univer Jul 7, 2026
8c1ce9b
fix(sheets-drawing-ui): avoid duplicate float dom host registration
DR-Univer Jul 7, 2026
d3c817d
refactor(embed): expose docs host adapter from core (#7204)
hexf00 Jul 7, 2026
bb8a0a8
refactor(docs): reorganize type exports for better readability
jikkai Jul 7, 2026
b1c23f9
refactor: fix some issues
jikkai Jul 7, 2026
9d85a16
refactor: update test assertions
jikkai Jul 7, 2026
921dd19
refactor: remove react-dom from dependencies and peerDependencies
jikkai Jul 7, 2026
2b5503f
refactor(embed): consolidate embed integration
DR-Univer Jul 8, 2026
dac7463
refactor(embed): remove oss embed packages
DR-Univer Jul 8, 2026
35d4f7d
refactor(embed): remove empty ui compatibility stubs
DR-Univer Jul 8, 2026
50b019b
refactor(embed): clean oss review boundaries
DR-Univer Jul 8, 2026
f60084c
chore(embed): fix oss lint annotations
DR-Univer Jul 8, 2026
dc7aac4
chore(embed): fix sheets lint annotations
DR-Univer Jul 8, 2026
192a3c4
fix(embed): align docs focus coordinator token
DR-Univer Jul 8, 2026
a628ff9
fix(embed): register formula editor portal boundary
DR-Univer Jul 8, 2026
e14eabe
chore(embed): sync docs-ui dependencies
DR-Univer Jul 8, 2026
c077a52
fix(sheets-ui): remove drawing dependency
DR-Univer Jul 8, 2026
adfe0e8
test(e2e): allow embed runtime memory overhead
DR-Univer Jul 8, 2026
28d9a75
test(core): cover resource ref helpers
DR-Univer Jul 8, 2026
eae7c8e
chore(core): sync generated package exports
DR-Univer Jul 8, 2026
9d95933
feat(ui): scope runtime menus and ribbon
DR-Univer Jul 8, 2026
9cf7b79
fix(core): remove referenced unit export points
DR-Univer Jul 8, 2026
337a943
fix(core): resolve extensionless source subpath exports
DR-Univer Jul 8, 2026
a9ea3fa
fix(core): narrow referenced unit source exports
DR-Univer Jul 8, 2026
909830f
fix(embed): keep referenced unit api out of core exports
DR-Univer Jul 8, 2026
e333ad7
fix(ui): release retained popup and float dom state
DR-Univer Jul 8, 2026
a117d6a
refactor(ui): align retained runtime disposable ownership
DR-Univer Jul 8, 2026
afccbbe
chore: remove migrated embed stubs
DR-Univer Jul 8, 2026
3ef9e3b
chore: use connector injectors for popups
DR-Univer Jul 9, 2026
6951701
test: use connectInjector for ui wrappers
DR-Univer Jul 9, 2026
023c1cf
refactor: reorganize imports and clean up unused code in various comp…
jikkai Jul 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
* limitations under the License.
*/

import type { Nullable } from '../../../shared/types';
import type { IWorkbookData } from '../../../sheets/typedef';
import type { Workbook } from '../../../sheets/workbook';
import type { IDocumentData } from '../../../types/interfaces/i-document-data';
Expand Down Expand Up @@ -217,4 +218,23 @@ describe('UniverInstanceService', () => {
expect(service.getAllUnitsForType<MockBoardUnit>(UniverInstanceType.UNIVER_BOARD)).toEqual([board]);
expect(service.getUnitType('board-unit')).toBe(UniverInstanceType.UNIVER_BOARD);
});

it('does not rebroadcast unchanged current or focused units', () => {
const workbook = service.createUnit<Partial<IWorkbookData>, WorkbookModel>(UniverInstanceType.UNIVER_SHEET, createWorkbookData());
const currentIds: Array<string | null> = [];
const focusedIds: Array<Nullable<string>> = [];
service.getCurrentTypeOfUnit$<WorkbookModel>(UniverInstanceType.UNIVER_SHEET).subscribe((unit) => {
currentIds.push(unit?.getUnitId() ?? null);
});
service.focused$.subscribe((unitId) => {
focusedIds.push(unitId);
});

service.setCurrentUnitForType(workbook.getUnitId());
service.focusUnit(workbook.getUnitId());
service.focusUnit(workbook.getUnitId());

expect(currentIds).toEqual([workbook.getUnitId()]);
expect(focusedIds).toEqual([null, workbook.getUnitId()]);
});
});
41 changes: 41 additions & 0 deletions packages/core/src/services/instance/instance.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,28 @@ export interface ICreateUnitOptions {
* @default true
*/
makeCurrent?: boolean;
/**
* If product UI render services should skip their default main-canvas render
* creation. Embedded units create their render explicitly into a host-owned
* container instead.
*
* @default false
*/
skipAutoRender?: boolean;
/**
* If render services should create the render unit as an embedded/non-main
* render. Embedded renders are mounted explicitly by a host container and
* must not mutate global workbench state while resolving their local view.
*
* @default false
*/
embeddedRender?: boolean;
/**
* Optional parent injector for an embedded render unit. Render modules will
* resolve their dependencies from this injector before falling back to the
* root injector.
*/
renderParentInjector?: Injector;
}

interface ICreateUnitEvent<T extends UnitModel = UnitModel> {
Expand Down Expand Up @@ -84,6 +106,8 @@ export interface IUniverInstanceService {

/** Create a unit with snapshot info. */
createUnit<T, U extends UnitModel>(type: UniverInstanceType, data: Partial<T>, options?: ICreateUnitOptions): U;
/** Get the options originally used to create a unit. */
getUnitCreateOptions(unitId: string): Nullable<ICreateUnitOptions>;
/** Dispose a unit */
disposeUnit(unitId: string): boolean;

Expand All @@ -103,6 +127,7 @@ export interface IUniverInstanceService {
export const IUniverInstanceService = createIdentifier<IUniverInstanceService>('univer.current');
export class UniverInstanceService extends Disposable implements IUniverInstanceService {
private readonly _unitsByType = new Map<UniverInstanceType, UnitModel[]>();
private readonly _unitCreateOptions = new Map<string, ICreateUnitOptions>();

constructor(
@Inject(Injector) private readonly _injector: Injector,
Expand All @@ -122,6 +147,7 @@ export class UniverInstanceService extends Disposable implements IUniverInstance
this._currentUnits.forEach((unit) => unit?.dispose());
this._currentUnits.clear();
this._unitsByType.clear();
this._unitCreateOptions.clear();
}

private _createHandler!: (
Expand Down Expand Up @@ -169,6 +195,9 @@ export class UniverInstanceService extends Disposable implements IUniverInstance
setCurrentUnitForType(unitId: string): void {
const result = this._getUnitById(unitId);
if (!result) throw new Error(`[UniverInstanceService]: no document with unitId ${unitId}!`);
if (this._currentUnits.get(result[1]) === result[0]) {
return;
}

this._currentUnits.set(result[1], result[0]);
this._currentUnits$.next(this._currentUnits);
Expand Down Expand Up @@ -202,6 +231,9 @@ export class UniverInstanceService extends Disposable implements IUniverInstance
}

units.push(unit);
if (options) {
this._unitCreateOptions.set(newUnitId, { ...options });
}
this._unitAdded$.next({ unit, options });

if (options?.makeCurrent ?? true) {
Expand All @@ -221,6 +253,10 @@ export class UniverInstanceService extends Disposable implements IUniverInstance
return unit;
}

getUnitCreateOptions(unitId: string): Nullable<ICreateUnitOptions> {
return this._unitCreateOptions.get(unitId) ?? null;
}

getUniverSheetInstance(unitId: string): Nullable<Workbook> {
return this.getUnit<Workbook>(unitId, UniverInstanceType.UNIVER_SHEET);
}
Expand Down Expand Up @@ -251,6 +287,10 @@ export class UniverInstanceService extends Disposable implements IUniverInstance
}

focusUnit(id: string | null): void {
if (this._focused$.getValue() === id) {
return;
}

this._focused$.next(id);

if (this.focused instanceof Workbook) {
Expand Down Expand Up @@ -308,6 +348,7 @@ export class UniverInstanceService extends Disposable implements IUniverInstance
this._tryResetFocusOnRemoval(unitId);

this._unitDisposed$.next(unit);
this._unitCreateOptions.delete(unitId);

unit.dispose();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,10 @@ describe('ResourceLoaderService', () => {
let sheetAdded$: Subject<unknown>;
let docAdded$: Subject<unknown>;
let slideAdded$: Subject<unknown>;
let baseAdded$: Subject<unknown>;
let sheetDisposed$: Subject<unknown>;
let docDisposed$: Subject<unknown>;
let baseDisposed$: Subject<unknown>;
let slideDisposed$: Subject<unknown>;
let resourceManagerService: {
getAllResourceHooks: ReturnType<typeof vi.fn>;
Expand All @@ -50,8 +52,10 @@ describe('ResourceLoaderService', () => {
sheetAdded$ = new Subject();
docAdded$ = new Subject();
slideAdded$ = new Subject();
baseAdded$ = new Subject();
sheetDisposed$ = new Subject();
docDisposed$ = new Subject();
baseDisposed$ = new Subject();
slideDisposed$ = new Subject();
resourceManagerService = {
getAllResourceHooks: vi.fn(() => []),
Expand All @@ -65,11 +69,13 @@ describe('ResourceLoaderService', () => {
getTypeOfUnitAdded$: vi.fn((type) => {
if (type === UniverInstanceType.UNIVER_SHEET) return sheetAdded$;
if (type === UniverInstanceType.UNIVER_DOC) return docAdded$;
if (type === UniverInstanceType.UNIVER_BASE) return baseAdded$;
return slideAdded$;
}),
getTypeOfUnitDisposed$: vi.fn((type) => {
if (type === UniverInstanceType.UNIVER_SHEET) return sheetDisposed$;
if (type === UniverInstanceType.UNIVER_DOC) return docDisposed$;
if (type === UniverInstanceType.UNIVER_BASE) return baseDisposed$;
return slideDisposed$;
}),
getUnit: vi.fn(),
Expand Down Expand Up @@ -109,6 +115,19 @@ describe('ResourceLoaderService', () => {
expect(resourceManagerService.unloadResources).toHaveBeenCalledWith('book-1', UniverInstanceType.UNIVER_SHEET);
});

it('loads resources when a base unit is added and unloads them when disposed', () => {
const base = {
getUnitId: () => 'base-1',
getSnapshot: () => ({ resources: [{ name: 'base-plugin', data: '{}' }] }),
};

baseAdded$.next({ unit: base });
baseDisposed$.next(base);

expect(resourceManagerService.loadResources).toHaveBeenCalledWith('base-1', [{ name: 'base-plugin', data: '{}' }]);
expect(resourceManagerService.unloadResources).toHaveBeenCalledWith('base-1', UniverInstanceType.UNIVER_BASE);
});

it('saves a unit snapshot with current plugin resources', () => {
univerInstanceService.getUnit.mockReturnValue({
type: UniverInstanceType.UNIVER_SHEET,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,12 @@ export class ResourceLoaderService extends Disposable implements IResourceLoader
});
break;
}
case UniverInstanceType.UNIVER_BASE: {
this._univerInstanceService.getAllUnitsForType<UnitModel<{ resources?: IResources }>>(UniverInstanceType.UNIVER_BASE).forEach((base) => {
loadHookResource(hook, base.getUnitId(), base.getSnapshot().resources, 'Base');
});
break;
}
}
});
};
Expand Down Expand Up @@ -121,6 +127,12 @@ export class ResourceLoaderService extends Disposable implements IResourceLoader
})
);

this.disposeWithMe(
this._univerInstanceService.getTypeOfUnitAdded$<UnitModel<{ resources?: IResources }>>(UniverInstanceType.UNIVER_BASE).subscribe((event) => {
const { unit: base } = event;
this._resourceManagerService.loadResources(base.getUnitId(), base.getSnapshot().resources);
})
);
this.disposeWithMe(
this._univerInstanceService.getTypeOfUnitDisposed$<Workbook>(UniverInstanceType.UNIVER_SHEET).subscribe((workbook) => {
this._resourceManagerService.unloadResources(workbook.getUnitId(), UniverInstanceType.UNIVER_SHEET);
Expand All @@ -132,6 +144,11 @@ export class ResourceLoaderService extends Disposable implements IResourceLoader
this._resourceManagerService.unloadResources(doc.getUnitId(), UniverInstanceType.UNIVER_DOC);
})
);
this.disposeWithMe(
this._univerInstanceService.getTypeOfUnitDisposed$<UnitModel<{ resources?: IResources }>>(UniverInstanceType.UNIVER_BASE).subscribe((base) => {
this._resourceManagerService.unloadResources(base.getUnitId(), UniverInstanceType.UNIVER_BASE);
})
);
this.disposeWithMe(
this._univerInstanceService.getTypeOfUnitDisposed$<UnitModel>(UniverInstanceType.UNIVER_SLIDE).subscribe((slide) => {
this._resourceManagerService.unloadResources(slide.getUnitId(), UniverInstanceType.UNIVER_SLIDE);
Expand Down
2 changes: 1 addition & 1 deletion packages/core/src/services/resource-manager/type.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import { createIdentifier } from '../../common/di';

export type IResources = Array<{ id?: string; name: string; data: string }>;

type IBusinessName = 'SHEET' | 'DOC' | 'SLIDE';
type IBusinessName = 'SHEET' | 'DOC' | 'SLIDE' | 'BASE' | 'UNIVER';
export type IResourceName = `${IBusinessName}_${string}_PLUGIN`;
export interface IResourceHook<T = any> {
pluginName: IResourceName;
Expand Down
4 changes: 4 additions & 0 deletions packages/core/src/types/interfaces/i-drawing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,10 @@ export enum DrawingTypeEnum {
* Dom element, allows inserting HTML elements as floating objects into the document
*/
DRAWING_DOM = 8,
/**
* Block element, allows host products to place embeddable unit-backed blocks as drawing objects.
*/
DRAWING_BLOCK = 9,
}

export type DrawingType = DrawingTypeEnum | number;
Expand Down
Loading
Loading