UNPKG

@myrmidon/cadmus-part-general-pg

Version:
437 lines (406 loc) 25.9 kB
import * as i0 from '@angular/core'; import { OnInit, OnDestroy } from '@angular/core'; import { MatSnackBar } from '@angular/material/snack-bar'; import { Router, ActivatedRoute, Routes } from '@angular/router'; import { ItemService, ThesaurusService, UserLevelService } from '@myrmidon/cadmus-api'; import { EditPartFeatureBase, PartEditorService, EditFragmentFeatureBase, FragmentEditorService, EditedLayerRepository } from '@myrmidon/cadmus-state'; import { LibraryRouteService, TokenLocation, ComponentCanDeactivate, LayerHint, TextLayerService } from '@myrmidon/cadmus-core'; import { Observable } from 'rxjs'; import { DialogService } from '@myrmidon/ngx-mat-tools'; import { TextTileRow, TextTile } from '@myrmidon/cadmus-part-general-ui'; import { EditedItemRepository } from '@myrmidon/cadmus-item-editor'; declare class AssertedHistoricalDateFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<AssertedHistoricalDateFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<AssertedHistoricalDateFeatureComponent, "cadmus-asserted-historical-date-feature", never, {}, {}, never, never, true, never>; } declare class BibliographyPartFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<BibliographyPartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<BibliographyPartFeatureComponent, "cadmus-bibliography-part-feature", never, {}, {}, never, never, true, never>; } declare class CategoriesPartFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<CategoriesPartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<CategoriesPartFeatureComponent, "cadmus-categories-part-feature", never, {}, {}, never, never, true, never>; } declare class ChronologyFragmentFeatureComponent extends EditFragmentFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, editorService: FragmentEditorService, libraryRouteService: LibraryRouteService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<ChronologyFragmentFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<ChronologyFragmentFeatureComponent, "cadmus-chronology-fragment-feature", never, {}, {}, never, never, true, never>; } declare class ChronotopesPartFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<ChronotopesPartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<ChronotopesPartFeatureComponent, "cadmus-chronotopes-part-feature", never, {}, {}, never, never, true, never>; } declare class CommentFragmentFeatureComponent extends EditFragmentFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, editorService: FragmentEditorService, libraryRouteService: LibraryRouteService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<CommentFragmentFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<CommentFragmentFeatureComponent, "cadmus-comment-fragment-feature", never, {}, {}, never, never, true, never>; } declare class CommentPartFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<CommentPartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<CommentPartFeatureComponent, "cadmus-comment-part-feature", never, {}, {}, never, never, true, never>; } declare class DecoratedCountsPartFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<DecoratedCountsPartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<DecoratedCountsPartFeatureComponent, "cadmus-decorated-counts-part-feature", never, {}, {}, never, never, true, never>; } declare class DistrictLocationPartFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<DistrictLocationPartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<DistrictLocationPartFeatureComponent, "cadmus-district-location-part-feature", never, {}, {}, never, never, true, never>; } declare class DocReferencesPartFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<DocReferencesPartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<DocReferencesPartFeatureComponent, "cadmus-doc-references-part-feature", never, {}, {}, never, never, true, never>; } declare class ExternalIdsPartFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<ExternalIdsPartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<ExternalIdsPartFeatureComponent, "cadmus-refs-external-ids-part-feature", never, {}, {}, never, never, true, never>; } declare class FlagsPartFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<FlagsPartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<FlagsPartFeatureComponent, "cadmus-flags-part-feature", never, {}, {}, never, never, true, never>; } declare class HistoricalDatePartFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<HistoricalDatePartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<HistoricalDatePartFeatureComponent, "cadmus-historical-date-part-feature", never, {}, {}, never, never, true, never>; } declare class HistoricalEventsPartFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<HistoricalEventsPartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<HistoricalEventsPartFeatureComponent, "cadmus-historical-events-part-feature", never, {}, {}, never, never, true, never>; } declare class IndexKeywordsPartFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<IndexKeywordsPartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<IndexKeywordsPartFeatureComponent, "cadmus-index-keywords-part-feature", never, {}, {}, never, never, true, never>; } declare class KeywordsPartFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<KeywordsPartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<KeywordsPartFeatureComponent, "cadmus-keywords-part-feature", never, {}, {}, never, never, true, never>; } declare class MetadataPartFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<MetadataPartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<MetadataPartFeatureComponent, "cadmus-metadata-part-feature", never, {}, {}, never, never, true, never>; } declare class NamesPartFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<NamesPartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<NamesPartFeatureComponent, "cadmus-names-part-feature", never, {}, {}, never, never, true, never>; } declare class NotePartFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<NotePartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<NotePartFeatureComponent, "cadmus-note-part-feature", never, {}, {}, never, never, true, never>; } declare class PhysicalMeasurementsPartFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<PhysicalMeasurementsPartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<PhysicalMeasurementsPartFeatureComponent, "cadmus-physical-measurements-part-feature", never, {}, {}, never, never, true, never>; } declare class PhysicalStatesPartFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<PhysicalStatesPartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<PhysicalStatesPartFeatureComponent, "cadmus-physical-states-part-feature", never, {}, {}, never, never, true, never>; } declare class PinLinksFragmentFeatureComponent extends EditFragmentFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, editorService: FragmentEditorService, libraryRouteService: LibraryRouteService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<PinLinksFragmentFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<PinLinksFragmentFeatureComponent, "cadmus-pin-links-fragment-feature", never, {}, {}, never, never, true, never>; } declare class PinLinksPartFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); protected getReqThesauriIds(): string[]; static ɵfac: i0.ɵɵFactoryDeclaration<PinLinksPartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<PinLinksPartFeatureComponent, "cadmus-pin-links-part-feature", never, {}, {}, never, never, true, never>; } /** * The layer view model for a text tile. */ interface TextTileLayerView { checked: boolean; frIndex: number; model: TextTile; } /** * The layer view model for a row of text tiles. */ interface TextTileRowLayerView { tiles: TextTileLayerView[]; } /** * The layer view model for a tiled text. */ declare class TiledTextLayerView { private _rows; /** * Create a new view from the specified tiled text. * @param rows The tiled text rows. */ constructor(rows: TextTileRow[]); /** * The internal rows view models. */ get rows(): TextTileRowLayerView[]; /** * Get the tile at the specified coordinates. * * @param y The tile's y coordinate. * @param x The tile's x coordinate. */ getTileAt(y: number, x: number): TextTileLayerView; /** * Set the view state of all the tiles. * * @param state The state values to set in each tile's state. * @param setChecked True to set the checked property of states. * @param setFrIndex True to set the frIndex property of states. */ setAllTilesViewState(state: { checked?: boolean; frIndex?: number; }): void; /** * Set the fragment index of each tile in this view. This is equal to the * index to the fragment including the tile, when the tile is inside that * fragment, or to -1, when the tile is outside any fragment. Fragment indexes * refer to their locations, as received by this function. * * @param locations Fragments locations. */ setFragmentLocations(locations: TokenLocation[]): void; /** * Find the coordinates of the first tile having the specified checked state, * starting from the specified coordinates. * * @param y The y coordinates to start from. * @param x The x coordinates to start from. * @param checked True to find checked tiles, false to find unchecked tiles. * @param reverse True to find in reverse direction. * @returns The coordinates, or null if not found. */ findFirstCheckedCoords(y: number, x: number, checked: boolean, reverse?: boolean): { y: number; x: number; } | null; /** * "Linearly" set the checked state in the specified range of checked tiles. * * @param y1 The start y coordinate. * @param x1 The start x coordinate. * @param y2 The end y coordinate (included). * @param x2 The end x coordinate (included). * @param checked The state to be set. */ linearSetCheck(y1: number, x1: number, y2: number, x2: number, checked: boolean): void; /** * Get the coordinates of the next tile starting from the specified origin * tile. The next tile is the tile to the right of the origin tile in the * same row, or the first tile of the next row (if any) when the origin is * the last tile in its row. * * @param y The y coordinate of the origin tile. * @param x The x coordinate of the origin tile. * @returns The coordinates, or null if no other tiles after origin. */ getNextTileCoords(y: number, x: number): { y: number; x: number; } | null; /** * Get the coordinates of the previous tile starting from the specified origin * tile. The previous tile is the tile to the left of the origin tile in the * same row, or the last tile of the previous row (if any) when the origin is * the first tile in its row. * * @param y The y coordinate of the origin tile. * @param x The x coordinate of the origin tile. * @returns The coordinates, or null if no other tiles before origin. */ getPrevTileCoords(y: number, x: number): { y: number; x: number; } | null; /** * "Linearly" toggle the tiles according to the specified toggle action * in the specified set of tiles rows. When users toggle a tile from unchecked * to checked, and any other tile was checked, the checked state must be * extended so that all the tiles between the newly checked tile and the old * one(s) are checked, so that they form a continuous "line", eventually * spanning rows. The same inversely applies when un-checking tiles. This * ensures that users can select a single range of tiles by toggling at any * of its ends. * * @param y The y coordinate of the tile which was toggled. * @param x The x coordinate of the tile which was toggled. * @param checked The new checked state after toggling the tile. */ toggleLinearTileCheck(y: number, x: number, checked: boolean): void; /** * Get the location of the checked tiles, if any. As tiles are checked * only as an uninterrupted sequence, there can be only 0 or 1 location * in a set. * * @returns The location, or null if no tiles are checked. */ getCheckedLocation(): TokenLocation | null; /** * Get the location of the checked tiles, together with the index to the * fragment including them (or a part of them). Should the tiles be included * in more than 1 fragment, no fragment will be returned. * * @returns Object with fragment=fragment index or -1, and location=location * of checked tiles; or null if no checked tile. */ getCheckedLocationAndFragment(): { fragment: number; location: TokenLocation; } | null; } /** * Tiled text layer part editor. * This editor allows picking any layer and see all the text tiles included * in a fragment with a color highlight. Users can check any number of tiles * not belonging to any fragment in the selected layer, and add a new fragment * in the selected layer; or check any number of tiles belonging to a fragment * of the selected layer, and edit or delete it. * Tiles are thus colorized by the UI to render the fragments extent; and freely * checked by users to select the fragments to operate with. * All the checked tiles must follow each other, in one or more rows. Users can * just check the first and the last of a sequence to get the whole sequence * checked. */ declare class TiledTextLayerPartFeatureComponent implements OnInit, OnDestroy, ComponentCanDeactivate { private _router; private _repository; private _libraryRouteService; private _editedItemRepository; private _dialogService; private _sub?; readonly view: i0.WritableSignal<TiledTextLayerView | undefined>; selectedTile?: TextTileLayerView; itemId: string; partId?: string; roleId?: string; loading$: Observable<boolean>; saving$: Observable<boolean>; baseText$: Observable<string | undefined>; locations$: Observable<TokenLocation[]>; rows$: Observable<TextTileRow[]>; breakChance$: Observable<number | undefined>; layerHints$: Observable<LayerHint[]>; pickedLocation?: string; userLevel: number; constructor(route: ActivatedRoute, _router: Router, _repository: EditedLayerRepository, _libraryRouteService: LibraryRouteService, _editedItemRepository: EditedItemRepository, _dialogService: DialogService, userLevelService: UserLevelService); canDeactivate(): boolean; ngOnInit(): void; ngOnDestroy(): void; refreshBreakChance(): void; onTileChecked(y: number, x: number, checked: boolean): void; private getSelectedTileCoords; selectPrevTile(): void; selectNextTile(): void; deleteFragment(): void; deleteFragmentFromHint(hint: LayerHint): void; private navigateToFragmentEditor; editFragment(): void; editFragmentFromHint(hint: LayerHint): void; moveFragmentFromHint(hint: LayerHint): void; addFragment(): void; pickLocation(): void; clearTileChecks(): void; applyLayerPatches(patches: string[]): void; close(): void; static ɵfac: i0.ɵɵFactoryDeclaration<TiledTextLayerPartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<TiledTextLayerPartFeatureComponent, "cadmus-tiled-text-layer-part-feature", never, {}, {}, never, never, true, never>; } declare class TiledTextPartFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); static ɵfac: i0.ɵɵFactoryDeclaration<TiledTextPartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<TiledTextPartFeatureComponent, "cadmus-tiled-text-part-feature", never, {}, {}, never, never, true, never>; } /** * Token-based text layer part feature editor. This is a special type of editor, * rather than being a simple wrapper like the others; it is used for editing * any text layer (using token-based coordinates), whatever the type of its * fragments. Being a sort of portal for accessing a fragments editor, it has * no save capability: the single fragments are edited and saved as needed. */ declare class TokenTextLayerPartFeatureComponent implements OnInit, ComponentCanDeactivate { private _router; private _repository; private _textLayerService; private _libraryRouteService; private _editedItemRepository; private _dialogService; itemId: string; partId?: string; roleId?: string; loading$: Observable<boolean>; saving$: Observable<boolean>; baseText$: Observable<string | undefined>; locations$: Observable<TokenLocation[] | undefined>; breakChance$: Observable<number>; layerHints$: Observable<LayerHint[]>; pickedLocation?: string; userLevel: number; textSize: number; constructor(route: ActivatedRoute, _router: Router, _repository: EditedLayerRepository, _textLayerService: TextLayerService, _libraryRouteService: LibraryRouteService, _editedItemRepository: EditedItemRepository, _dialogService: DialogService, userLevelService: UserLevelService); canDeactivate(): boolean; makeLarger(): void; makeSmaller(): void; ngOnInit(): void; deleteFragment(): void; deleteFragmentFromHint(hint: LayerHint): void; refreshBreakChance(): void; private navigateToFragmentEditor; editFragment(): void; editFragmentFromHint(hint: LayerHint): void; addFragment(): void; moveFragmentFromHint(hint: LayerHint): void; applyLayerPatches(patches: string[]): void; pickLocation(): void; close(): void; static ɵfac: i0.ɵɵFactoryDeclaration<TokenTextLayerPartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<TokenTextLayerPartFeatureComponent, "cadmus-token-text-layer-part-feature", never, {}, {}, never, never, true, never>; } declare class TokenTextPartFeatureComponent extends EditPartFeatureBase implements OnInit { constructor(router: Router, route: ActivatedRoute, snackbar: MatSnackBar, itemService: ItemService, thesaurusService: ThesaurusService, editorService: PartEditorService); static ɵfac: i0.ɵɵFactoryDeclaration<TokenTextPartFeatureComponent, never>; static ɵcmp: i0.ɵɵComponentDeclaration<TokenTextPartFeatureComponent, "cadmus-token-text-part-feature", never, {}, {}, never, never, true, never>; } declare const CADMUS_PART_GENERAL_PG_ROUTES: Routes; export { AssertedHistoricalDateFeatureComponent, BibliographyPartFeatureComponent, CADMUS_PART_GENERAL_PG_ROUTES, CategoriesPartFeatureComponent, ChronologyFragmentFeatureComponent, ChronotopesPartFeatureComponent, CommentFragmentFeatureComponent, CommentPartFeatureComponent, DecoratedCountsPartFeatureComponent, DistrictLocationPartFeatureComponent, DocReferencesPartFeatureComponent, ExternalIdsPartFeatureComponent, FlagsPartFeatureComponent, HistoricalDatePartFeatureComponent, HistoricalEventsPartFeatureComponent, IndexKeywordsPartFeatureComponent, KeywordsPartFeatureComponent, MetadataPartFeatureComponent, NamesPartFeatureComponent, NotePartFeatureComponent, PhysicalMeasurementsPartFeatureComponent, PhysicalStatesPartFeatureComponent, PinLinksFragmentFeatureComponent, PinLinksPartFeatureComponent, TiledTextLayerPartFeatureComponent, TiledTextPartFeatureComponent, TokenTextLayerPartFeatureComponent, TokenTextPartFeatureComponent };