@difizen/libro-search 0.0.2-alpha.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 (58) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -0
  3. package/es/abstract-search-provider.d.ts +113 -0
  4. package/es/abstract-search-provider.d.ts.map +1 -0
  5. package/es/abstract-search-provider.js +126 -0
  6. package/es/index.d.ts +10 -0
  7. package/es/index.d.ts.map +1 -0
  8. package/es/index.js +9 -0
  9. package/es/index.less +107 -0
  10. package/es/libro-cell-search-provider.d.ts +10 -0
  11. package/es/libro-cell-search-provider.d.ts.map +1 -0
  12. package/es/libro-cell-search-provider.js +54 -0
  13. package/es/libro-search-engine-html.d.ts +3 -0
  14. package/es/libro-search-engine-html.d.ts.map +1 -0
  15. package/es/libro-search-engine-html.js +59 -0
  16. package/es/libro-search-engine-text.d.ts +10 -0
  17. package/es/libro-search-engine-text.d.ts.map +1 -0
  18. package/es/libro-search-engine-text.js +32 -0
  19. package/es/libro-search-generic-provider.d.ts +107 -0
  20. package/es/libro-search-generic-provider.d.ts.map +1 -0
  21. package/es/libro-search-generic-provider.js +467 -0
  22. package/es/libro-search-manager.d.ts +22 -0
  23. package/es/libro-search-manager.d.ts.map +1 -0
  24. package/es/libro-search-manager.js +102 -0
  25. package/es/libro-search-model.d.ts +111 -0
  26. package/es/libro-search-model.d.ts.map +1 -0
  27. package/es/libro-search-model.js +395 -0
  28. package/es/libro-search-protocol.d.ts +176 -0
  29. package/es/libro-search-protocol.d.ts.map +1 -0
  30. package/es/libro-search-protocol.js +36 -0
  31. package/es/libro-search-provider.d.ts +138 -0
  32. package/es/libro-search-provider.d.ts.map +1 -0
  33. package/es/libro-search-provider.js +759 -0
  34. package/es/libro-search-utils.d.ts +25 -0
  35. package/es/libro-search-utils.d.ts.map +1 -0
  36. package/es/libro-search-utils.js +85 -0
  37. package/es/libro-search-view.d.ts +59 -0
  38. package/es/libro-search-view.d.ts.map +1 -0
  39. package/es/libro-search-view.js +455 -0
  40. package/es/module.d.ts +4 -0
  41. package/es/module.d.ts.map +1 -0
  42. package/es/module.js +35 -0
  43. package/package.json +66 -0
  44. package/src/abstract-search-provider.ts +160 -0
  45. package/src/index.less +107 -0
  46. package/src/index.ts +9 -0
  47. package/src/libro-cell-search-provider.ts +39 -0
  48. package/src/libro-search-engine-html.ts +74 -0
  49. package/src/libro-search-engine-text.ts +34 -0
  50. package/src/libro-search-generic-provider.ts +303 -0
  51. package/src/libro-search-manager.ts +86 -0
  52. package/src/libro-search-model.ts +266 -0
  53. package/src/libro-search-protocol.ts +209 -0
  54. package/src/libro-search-provider.ts +507 -0
  55. package/src/libro-search-utils.spec.ts +37 -0
  56. package/src/libro-search-utils.ts +83 -0
  57. package/src/libro-search-view.tsx +404 -0
  58. package/src/module.ts +59 -0
@@ -0,0 +1,176 @@
1
+ import type { CellView } from '@difizen/libro-core';
2
+ import type { Disposable, Event } from '@difizen/mana-app';
3
+ import type { View } from '@difizen/mana-app';
4
+ import { Syringe } from '@difizen/mana-app';
5
+ /**
6
+ * Base search match interface
7
+ */
8
+ export interface SearchMatch {
9
+ /**
10
+ * Text of the exact match itself
11
+ */
12
+ readonly text: string;
13
+ /**
14
+ * Start location of the match (in a text, this is the column)
15
+ */
16
+ position: number;
17
+ }
18
+ /**
19
+ * HTML search match interface
20
+ */
21
+ export interface HTMLSearchMatch extends SearchMatch {
22
+ /**
23
+ * Node containing the match
24
+ */
25
+ readonly node: Text;
26
+ }
27
+ /**
28
+ * Filter interface
29
+ */
30
+ export interface SearchFilter {
31
+ /**
32
+ * Filter title
33
+ */
34
+ title: string;
35
+ /**
36
+ * Filter description
37
+ */
38
+ description: string;
39
+ /**
40
+ * Default value
41
+ */
42
+ default: boolean;
43
+ /**
44
+ * Does the filter support replace?
45
+ */
46
+ supportReplace: boolean;
47
+ }
48
+ /**
49
+ * Type of filters
50
+ *
51
+ */
52
+ export interface SearchFilters {
53
+ searchCellOutput: boolean;
54
+ onlySearchSelectedCells: boolean;
55
+ }
56
+ /**
57
+ * Base search provider interface
58
+ *
59
+ * #### Notes
60
+ * It is implemented by subprovider like searching on a single cell.
61
+ */
62
+ export interface BaseSearchProvider extends Disposable {
63
+ /**
64
+ * Get an initial query value if applicable so that it can be entered
65
+ * into the search box as an initial query
66
+ *
67
+ * @returns Initial value used to populate the search box.
68
+ */
69
+ getInitialQuery?(): string;
70
+ /**
71
+ * Start a search
72
+ *
73
+ * @param query Regular expression to test for
74
+ * @param filters Filters to apply when searching
75
+ */
76
+ startQuery(query: RegExp, filters?: SearchFilters): Promise<void>;
77
+ /**
78
+ * Stop a search and clear any internal state of the provider
79
+ */
80
+ endQuery(): Promise<void>;
81
+ /**
82
+ * Clear currently highlighted match.
83
+ */
84
+ clearHighlight(): Promise<void>;
85
+ /**
86
+ * Highlight the next match
87
+ *
88
+ * @param loop Whether to loop within the matches list.
89
+ *
90
+ * @returns The next match if it exists
91
+ */
92
+ highlightNext(loop?: boolean): Promise<SearchMatch | undefined>;
93
+ /**
94
+ * Highlight the previous match
95
+ *
96
+ * @param loop Whether to loop within the matches list.
97
+ *
98
+ * @returns The previous match if it exists.
99
+ */
100
+ highlightPrevious(loop?: boolean): Promise<SearchMatch | undefined>;
101
+ /**
102
+ * Replace the currently selected match with the provided text
103
+ * and highlight the next match.
104
+ *
105
+ * @param newText The replacement text
106
+ * @param loop Whether to loop within the matches list.
107
+ *
108
+ * @returns A promise that resolves with a boolean indicating whether a replace occurred.
109
+ */
110
+ replaceCurrentMatch(newText: string, loop?: boolean): Promise<boolean>;
111
+ /**
112
+ * Replace all matches in the widget with the provided text
113
+ *
114
+ * @param newText The replacement text.
115
+ *
116
+ * @returns A promise that resolves with a boolean indicating whether a replace occurred.
117
+ */
118
+ replaceAllMatches(newText: string): Promise<boolean>;
119
+ /**
120
+ * Signal indicating that something in the search has changed, so the UI should update
121
+ */
122
+ readonly stateChanged: Event<void>;
123
+ /**
124
+ * The current index of the selected match.
125
+ */
126
+ readonly currentMatchIndex: number | undefined;
127
+ /**
128
+ * The number of matches.
129
+ */
130
+ readonly matchesCount: number | undefined;
131
+ }
132
+ /**
133
+ * Search provider interface
134
+ */
135
+ export interface SearchProvider extends BaseSearchProvider {
136
+ /**
137
+ * Set to true if the widget under search is read-only, false
138
+ * if it is editable. Will be used to determine whether to show
139
+ * the replace option.
140
+ */
141
+ readonly isReadOnly: boolean;
142
+ /**
143
+ * Get the filters definition for the given provider.
144
+ *
145
+ * @returns The filters definition.
146
+ *
147
+ * ### Notes
148
+ * TODO For now it only supports boolean filters (represented with checkboxes)
149
+ */
150
+ getFilters?(): Record<string, SearchFilter>;
151
+ /**
152
+ * Validate a new filter value for the widget.
153
+ *
154
+ * @param name The filter name
155
+ * @param value The filter value candidate
156
+ *
157
+ * @returns The valid filter value
158
+ */
159
+ validateFilter?(name: string, value: boolean): Promise<boolean>;
160
+ }
161
+ export interface CellSearchProvider extends BaseSearchProvider {
162
+ isActive: boolean;
163
+ }
164
+ export interface CellSearchProviderContribution {
165
+ canHandle: (cell: CellView) => number;
166
+ factory: (cell: CellView) => CellSearchProvider;
167
+ getInitialQuery?: (cell: CellView) => string;
168
+ }
169
+ export declare const CellSearchProviderContribution: Syringe.DefinedToken;
170
+ export declare const LIBRO_SEARCH_FOUND_CLASSES: string[];
171
+ export declare const LIBRO_SEARCH_SELECTED_CLASSES: string[];
172
+ export interface SearchProviderOption {
173
+ view: View;
174
+ }
175
+ export declare const SearchProviderOption: unique symbol;
176
+ //# sourceMappingURL=libro-search-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"libro-search-protocol.d.ts","sourceRoot":"","sources":["../src/libro-search-protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { Syringe } from '@difizen/mana-app';
2
+
3
+ /**
4
+ * Base search match interface
5
+ */
6
+
7
+ /**
8
+ * HTML search match interface
9
+ */
10
+
11
+ /**
12
+ * Filter interface
13
+ */
14
+
15
+ /**
16
+ * Type of filters
17
+ *
18
+ */
19
+
20
+ /**
21
+ * Base search provider interface
22
+ *
23
+ * #### Notes
24
+ * It is implemented by subprovider like searching on a single cell.
25
+ */
26
+
27
+ /**
28
+ * Search provider interface
29
+ */
30
+
31
+ // export const SearchProvider = Syringe.defineToken('SearchProvider');
32
+
33
+ export var CellSearchProviderContribution = Syringe.defineToken('CellSearchProviderContribution');
34
+ export var LIBRO_SEARCH_FOUND_CLASSES = ['cm-string', 'cm-overlay', 'cm-searching', 'libro-searching'];
35
+ export var LIBRO_SEARCH_SELECTED_CLASSES = ['CodeMirror-selectedtext', 'libro-selectedtext'];
36
+ export var SearchProviderOption = Symbol('SearchProviderOption');
@@ -0,0 +1,138 @@
1
+ import type { CellView } from '@difizen/libro-core';
2
+ import { LibroView } from '@difizen/libro-core';
3
+ import { Deferred, DisposableCollection } from '@difizen/mana-app';
4
+ import { AbstractSearchProvider } from './abstract-search-provider.js';
5
+ import { LibroCellSearchProvider } from './libro-cell-search-provider.js';
6
+ import type { CellSearchProvider, SearchFilter, SearchMatch, SearchFilters } from './libro-search-protocol.js';
7
+ import { SearchProviderOption } from './libro-search-protocol.js';
8
+ export type LibroSearchProviderFactory = (option: SearchProviderOption) => LibroSearchProvider;
9
+ export declare const LibroSearchProviderFactory: unique symbol;
10
+ /**
11
+ * Libro view search provider
12
+ */
13
+ export declare class LibroSearchProvider extends AbstractSearchProvider {
14
+ libroCellSearchProvider: LibroCellSearchProvider;
15
+ protected cellsChangeDeferred: Deferred<void> | undefined;
16
+ protected toDispose: DisposableCollection;
17
+ protected currentProviderIndex: number | undefined;
18
+ searchCellOutput: boolean;
19
+ protected onlySearchSelectedCells: boolean;
20
+ replaceMode: boolean;
21
+ protected get filters(): SearchFilters;
22
+ protected query: RegExp | undefined;
23
+ protected searchProviders: (CellSearchProvider | undefined)[];
24
+ protected providerMap: Map<string, CellSearchProvider>;
25
+ protected documentHasChanged: boolean;
26
+ protected view: LibroView;
27
+ updateSearchCellOutput(value: boolean): void;
28
+ /**
29
+ * @param option Provide the view to search in
30
+ */
31
+ constructor(option: SearchProviderOption);
32
+ protected getProvider: (cell: CellView) => CellSearchProvider | undefined;
33
+ /**
34
+ * Report whether or not this provider has the ability to search on the given object
35
+ *
36
+ * @param domain Widget to test
37
+ * @returns Search ability
38
+ */
39
+ static isApplicable(domain: LibroView): domain is LibroView;
40
+ /**
41
+ * The current index of the selected match.
42
+ */
43
+ get currentMatchIndex(): number | undefined;
44
+ /**
45
+ * The number of matches.
46
+ */
47
+ get matchesCount(): number | undefined;
48
+ /**
49
+ * Set to true if the widget under search is read-only, false
50
+ * if it is editable. Will be used to determine whether to show
51
+ * the replace option.
52
+ */
53
+ get isReadOnly(): boolean;
54
+ /**
55
+ * Dispose of the resources held by the search provider.
56
+ *
57
+ * #### Notes
58
+ * If the object's `dispose` method is called more than once, all
59
+ * calls made after the first will be a no-op.
60
+ *
61
+ * #### Undefined Behavior
62
+ * It is undefined behavior to use any functionality of the object
63
+ * after it has been disposed unless otherwise explicitly noted.
64
+ */
65
+ dispose(): void;
66
+ /**
67
+ * Get the filters for the given provider.
68
+ *
69
+ * @returns The filters.
70
+ */
71
+ getFilters(): Record<string, SearchFilter>;
72
+ /**
73
+ * Get an initial query value if applicable so that it can be entered
74
+ * into the search box as an initial query
75
+ *
76
+ * @returns Initial value used to populate the search box.
77
+ */
78
+ getInitialQuery: () => string;
79
+ /**
80
+ * Clear currently highlighted match.
81
+ */
82
+ clearHighlight: () => Promise<void>;
83
+ /**
84
+ * Highlight the next match.
85
+ *
86
+ * @param loop Whether to loop within the matches list.
87
+ *
88
+ * @returns The next match if available.
89
+ */
90
+ highlightNext: (loop?: boolean) => Promise<SearchMatch | undefined>;
91
+ /**
92
+ * Highlight the previous match.
93
+ *
94
+ * @param loop Whether to loop within the matches list.
95
+ *
96
+ * @returns The previous match if available.
97
+ */
98
+ highlightPrevious: (loop?: boolean) => Promise<SearchMatch | undefined>;
99
+ /**
100
+ * Search for a regular expression with optional filters.
101
+ *
102
+ * @param query A regular expression to test for
103
+ * @param filters Filter parameters to pass to provider
104
+ *
105
+ */
106
+ startQuery: (query: RegExp, _filters?: SearchFilters, highlightNext?: boolean) => Promise<void>;
107
+ /**
108
+ * Stop the search and clear all internal state.
109
+ */
110
+ endQuery: () => Promise<void>;
111
+ /**
112
+ * Replace the currently selected match with the provided text
113
+ *
114
+ * @param newText The replacement text.
115
+ * @param loop Whether to loop within the matches list.
116
+ *
117
+ * @returns A promise that resolves with a boolean indicating whether a replace occurred.
118
+ */
119
+ replaceCurrentMatch: (newText: string, loop?: boolean) => Promise<boolean>;
120
+ /**
121
+ * Replace all matches in the notebook with the provided text
122
+ *
123
+ * @param newText The replacement text.
124
+ *
125
+ * @returns A promise that resolves with a boolean indicating whether a replace occurred.
126
+ */
127
+ replaceAllMatches: (newText: string) => Promise<boolean>;
128
+ protected addCellProvider: (index: number) => void;
129
+ protected removeCellProvider: (index: number) => void;
130
+ protected doCellsChanged: () => Promise<void>;
131
+ protected onCellsChanged: () => Promise<void>;
132
+ protected getActiveIndex: () => number | undefined;
133
+ protected stepNext: (reverse?: boolean, loop?: boolean) => Promise<SearchMatch | undefined>;
134
+ protected onActiveCellChanged: () => Promise<void>;
135
+ protected onSearchProviderChanged: () => void;
136
+ protected _onSelectionChanged: () => Promise<void>;
137
+ }
138
+ //# sourceMappingURL=libro-search-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"libro-search-provider.d.ts","sourceRoot":"","sources":["../src/libro-search-provider.ts"],"names":[],"mappings":"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"}