@mlightcad/cad-simple-viewer 1.7.4 → 1.7.6-preview.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 (190) hide show
  1. package/README.md +5 -0
  2. package/dist/cad-simple-viewer.js +11114 -8898
  3. package/dist/cad-simple-viewer.umd.cjs +432 -88
  4. package/dist/mtext-renderer-worker.js +2987 -2815
  5. package/find.ts +7 -0
  6. package/lib/app/AcApDocManager.d.ts +49 -1
  7. package/lib/app/AcApDocManager.d.ts.map +1 -1
  8. package/lib/app/AcApDocManager.js +150 -12
  9. package/lib/app/AcApDocManager.js.map +1 -1
  10. package/lib/app/AcApOpenDatabaseOptions.d.ts +33 -4
  11. package/lib/app/AcApOpenDatabaseOptions.d.ts.map +1 -1
  12. package/lib/app/AcApOpenFileDialog.d.ts +1 -1
  13. package/lib/app/AcApOpenFileDialog.d.ts.map +1 -1
  14. package/lib/app/AcApOpenFileDialog.js +22 -92
  15. package/lib/app/AcApOpenFileDialog.js.map +1 -1
  16. package/lib/app/AcApOpenFileProfiler.d.ts +14 -0
  17. package/lib/app/AcApOpenFileProfiler.d.ts.map +1 -1
  18. package/lib/app/AcApOpenFileProfiler.js +25 -3
  19. package/lib/app/AcApOpenFileProfiler.js.map +1 -1
  20. package/lib/app/AcApOpenFileProgressController.d.ts +17 -9
  21. package/lib/app/AcApOpenFileProgressController.d.ts.map +1 -1
  22. package/lib/app/AcApOpenFileProgressController.js +41 -20
  23. package/lib/app/AcApOpenFileProgressController.js.map +1 -1
  24. package/lib/app/AcApProgress.d.ts +5 -0
  25. package/lib/app/AcApProgress.d.ts.map +1 -1
  26. package/lib/app/AcApProgress.js +10 -0
  27. package/lib/app/AcApProgress.js.map +1 -1
  28. package/lib/app/dataSource/AcApDataSource.d.ts +97 -0
  29. package/lib/app/dataSource/AcApDataSource.d.ts.map +1 -0
  30. package/lib/app/dataSource/AcApDataSource.js +2 -0
  31. package/lib/app/dataSource/AcApDataSource.js.map +1 -0
  32. package/lib/app/dataSource/AcApDataSourceManager.d.ts +70 -0
  33. package/lib/app/dataSource/AcApDataSourceManager.d.ts.map +1 -0
  34. package/lib/app/dataSource/AcApDataSourceManager.js +84 -0
  35. package/lib/app/dataSource/AcApDataSourceManager.js.map +1 -0
  36. package/lib/app/dataSource/AcApLocalDataSource.d.ts +25 -0
  37. package/lib/app/dataSource/AcApLocalDataSource.d.ts.map +1 -0
  38. package/lib/app/dataSource/AcApLocalDataSource.js +153 -0
  39. package/lib/app/dataSource/AcApLocalDataSource.js.map +1 -0
  40. package/lib/app/dataSource/AcApUrlDataSource.d.ts +17 -0
  41. package/lib/app/dataSource/AcApUrlDataSource.d.ts.map +1 -0
  42. package/lib/app/dataSource/AcApUrlDataSource.js +214 -0
  43. package/lib/app/dataSource/AcApUrlDataSource.js.map +1 -0
  44. package/lib/app/dataSource/acapBuildDataSourceMenu.d.ts +42 -0
  45. package/lib/app/dataSource/acapBuildDataSourceMenu.d.ts.map +1 -0
  46. package/lib/app/dataSource/acapBuildDataSourceMenu.js +121 -0
  47. package/lib/app/dataSource/acapBuildDataSourceMenu.js.map +1 -0
  48. package/lib/app/dataSource/acapInvokeDataSourceMenuAction.d.ts +17 -0
  49. package/lib/app/dataSource/acapInvokeDataSourceMenuAction.d.ts.map +1 -0
  50. package/lib/app/dataSource/acapInvokeDataSourceMenuAction.js +74 -0
  51. package/lib/app/dataSource/acapInvokeDataSourceMenuAction.js.map +1 -0
  52. package/lib/app/dataSource/acapOpenCenteredPopup.d.ts +13 -0
  53. package/lib/app/dataSource/acapOpenCenteredPopup.d.ts.map +1 -0
  54. package/lib/app/dataSource/acapOpenCenteredPopup.js +35 -0
  55. package/lib/app/dataSource/acapOpenCenteredPopup.js.map +1 -0
  56. package/lib/app/dataSource/acapOpenDataSourceResult.d.ts +13 -0
  57. package/lib/app/dataSource/acapOpenDataSourceResult.d.ts.map +1 -0
  58. package/lib/app/dataSource/acapOpenDataSourceResult.js +90 -0
  59. package/lib/app/dataSource/acapOpenDataSourceResult.js.map +1 -0
  60. package/lib/app/dataSource/acapRunDataSourceMenuAction.d.ts +15 -0
  61. package/lib/app/dataSource/acapRunDataSourceMenuAction.d.ts.map +1 -0
  62. package/lib/app/dataSource/acapRunDataSourceMenuAction.js +74 -0
  63. package/lib/app/dataSource/acapRunDataSourceMenuAction.js.map +1 -0
  64. package/lib/app/dataSource/acapWithDataSourceBusy.d.ts +12 -0
  65. package/lib/app/dataSource/acapWithDataSourceBusy.d.ts.map +1 -0
  66. package/lib/app/dataSource/acapWithDataSourceBusy.js +88 -0
  67. package/lib/app/dataSource/acapWithDataSourceBusy.js.map +1 -0
  68. package/lib/app/dataSource/index.d.ts +11 -0
  69. package/lib/app/dataSource/index.d.ts.map +1 -0
  70. package/lib/app/dataSource/index.js +10 -0
  71. package/lib/app/dataSource/index.js.map +1 -0
  72. package/lib/app/index.d.ts +1 -0
  73. package/lib/app/index.d.ts.map +1 -1
  74. package/lib/app/index.js +1 -0
  75. package/lib/app/index.js.map +1 -1
  76. package/lib/app/openFileProgress.d.ts +8 -1
  77. package/lib/app/openFileProgress.d.ts.map +1 -1
  78. package/lib/app/openFileProgress.js +13 -2
  79. package/lib/app/openFileProgress.js.map +1 -1
  80. package/lib/app/syncCurrentSpaceFromTileMode.d.ts +25 -0
  81. package/lib/app/syncCurrentSpaceFromTileMode.d.ts.map +1 -0
  82. package/lib/app/syncCurrentSpaceFromTileMode.js +85 -0
  83. package/lib/app/syncCurrentSpaceFromTileMode.js.map +1 -0
  84. package/lib/editor/global/AcEdUiTheme.d.ts +10 -1
  85. package/lib/editor/global/AcEdUiTheme.d.ts.map +1 -1
  86. package/lib/editor/global/AcEdUiTheme.js +35 -2
  87. package/lib/editor/global/AcEdUiTheme.js.map +1 -1
  88. package/lib/editor/input/ui/AcEdCommandLine.d.ts.map +1 -1
  89. package/lib/editor/input/ui/AcEdCommandLine.js +7 -7
  90. package/lib/editor/input/ui/AcEdCommandLine.js.map +1 -1
  91. package/lib/find/AcApFindNavigator.d.ts +59 -0
  92. package/lib/find/AcApFindNavigator.d.ts.map +1 -0
  93. package/lib/find/AcApFindNavigator.js +145 -0
  94. package/lib/find/AcApFindNavigator.js.map +1 -0
  95. package/lib/find/findDrawing.d.ts +100 -0
  96. package/lib/find/findDrawing.d.ts.map +1 -0
  97. package/lib/find/findDrawing.js +183 -0
  98. package/lib/find/findDrawing.js.map +1 -0
  99. package/lib/find/findText.d.ts +147 -0
  100. package/lib/find/findText.d.ts.map +1 -0
  101. package/lib/find/findText.js +527 -0
  102. package/lib/find/findText.js.map +1 -0
  103. package/lib/find/index.d.ts +3 -0
  104. package/lib/find/index.d.ts.map +1 -0
  105. package/lib/find/index.js +3 -0
  106. package/lib/find/index.js.map +1 -0
  107. package/lib/i18n/ar/main.d.ts +26 -0
  108. package/lib/i18n/ar/main.d.ts.map +1 -1
  109. package/lib/i18n/ar/main.js +26 -0
  110. package/lib/i18n/ar/main.js.map +1 -1
  111. package/lib/i18n/cs/main.d.ts +26 -0
  112. package/lib/i18n/cs/main.d.ts.map +1 -1
  113. package/lib/i18n/cs/main.js +26 -0
  114. package/lib/i18n/cs/main.js.map +1 -1
  115. package/lib/i18n/en/main.d.ts +26 -0
  116. package/lib/i18n/en/main.d.ts.map +1 -1
  117. package/lib/i18n/en/main.js +26 -0
  118. package/lib/i18n/en/main.js.map +1 -1
  119. package/lib/i18n/tr/main.d.ts +26 -0
  120. package/lib/i18n/tr/main.d.ts.map +1 -1
  121. package/lib/i18n/tr/main.js +26 -0
  122. package/lib/i18n/tr/main.js.map +1 -1
  123. package/lib/i18n/zh/main.d.ts +26 -0
  124. package/lib/i18n/zh/main.d.ts.map +1 -1
  125. package/lib/i18n/zh/main.js +26 -0
  126. package/lib/i18n/zh/main.js.map +1 -1
  127. package/lib/index.d.ts +2 -0
  128. package/lib/index.d.ts.map +1 -1
  129. package/lib/index.js +2 -0
  130. package/lib/index.js.map +1 -1
  131. package/lib/spatialIndex/AcTrHierarchicalSpatialIndex.d.ts +29 -7
  132. package/lib/spatialIndex/AcTrHierarchicalSpatialIndex.d.ts.map +1 -1
  133. package/lib/spatialIndex/AcTrHierarchicalSpatialIndex.js +77 -38
  134. package/lib/spatialIndex/AcTrHierarchicalSpatialIndex.js.map +1 -1
  135. package/lib/ui/AcUiFileOpenPanel.d.ts +156 -0
  136. package/lib/ui/AcUiFileOpenPanel.d.ts.map +1 -0
  137. package/lib/ui/AcUiFileOpenPanel.js +695 -0
  138. package/lib/ui/AcUiFileOpenPanel.js.map +1 -0
  139. package/lib/ui/icons.d.ts +2 -0
  140. package/lib/ui/icons.d.ts.map +1 -1
  141. package/lib/ui/icons.js +2 -0
  142. package/lib/ui/icons.js.map +1 -1
  143. package/lib/ui/index.d.ts +1 -0
  144. package/lib/ui/index.d.ts.map +1 -1
  145. package/lib/ui/index.js +1 -0
  146. package/lib/ui/index.js.map +1 -1
  147. package/lib/util/AcApTextStyleFontPreload.d.ts +42 -0
  148. package/lib/util/AcApTextStyleFontPreload.d.ts.map +1 -0
  149. package/lib/util/AcApTextStyleFontPreload.js +149 -0
  150. package/lib/util/AcApTextStyleFontPreload.js.map +1 -0
  151. package/lib/util/index.d.ts +1 -0
  152. package/lib/util/index.d.ts.map +1 -1
  153. package/lib/util/index.js +1 -0
  154. package/lib/util/index.js.map +1 -1
  155. package/lib/view/AcTrConvertQueue.d.ts +78 -0
  156. package/lib/view/AcTrConvertQueue.d.ts.map +1 -0
  157. package/lib/view/AcTrConvertQueue.js +143 -0
  158. package/lib/view/AcTrConvertQueue.js.map +1 -0
  159. package/lib/view/AcTrGroupWcsBboxAssert.d.ts +9 -0
  160. package/lib/view/AcTrGroupWcsBboxAssert.d.ts.map +1 -1
  161. package/lib/view/AcTrGroupWcsBboxAssert.js +12 -0
  162. package/lib/view/AcTrGroupWcsBboxAssert.js.map +1 -1
  163. package/lib/view/AcTrLayer.d.ts.map +1 -1
  164. package/lib/view/AcTrLayer.js +5 -1
  165. package/lib/view/AcTrLayer.js.map +1 -1
  166. package/lib/view/AcTrLayout.d.ts +5 -0
  167. package/lib/view/AcTrLayout.d.ts.map +1 -1
  168. package/lib/view/AcTrLayout.js +26 -0
  169. package/lib/view/AcTrLayout.js.map +1 -1
  170. package/lib/view/AcTrLayoutView.d.ts.map +1 -1
  171. package/lib/view/AcTrLayoutView.js +3 -1
  172. package/lib/view/AcTrLayoutView.js.map +1 -1
  173. package/lib/view/AcTrProgressiveOpenFitController.d.ts +1 -0
  174. package/lib/view/AcTrProgressiveOpenFitController.d.ts.map +1 -1
  175. package/lib/view/AcTrProgressiveOpenFitController.js +2 -1
  176. package/lib/view/AcTrProgressiveOpenFitController.js.map +1 -1
  177. package/lib/view/AcTrScene.d.ts +7 -0
  178. package/lib/view/AcTrScene.d.ts.map +1 -1
  179. package/lib/view/AcTrScene.js +78 -48
  180. package/lib/view/AcTrScene.js.map +1 -1
  181. package/lib/view/AcTrView2d.d.ts +234 -18
  182. package/lib/view/AcTrView2d.d.ts.map +1 -1
  183. package/lib/view/AcTrView2d.js +1017 -296
  184. package/lib/view/AcTrView2d.js.map +1 -1
  185. package/package.json +17 -10
  186. package/src/find/AcApFindNavigator.ts +190 -0
  187. package/src/find/findDrawing.ts +211 -0
  188. package/src/find/findText.ts +595 -0
  189. package/src/find/index.ts +2 -0
  190. package/src/ui/icons.ts +4 -0
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Whole-drawing text search (FIND across layouts).
3
+ *
4
+ * Builds on {@link acapFindTextInLayout}: every layout of the drawing (model
5
+ * space and each paper space, in tab order) is searched with the same rules,
6
+ * and every hit is tagged with the layout it lives in so a UI can show it and
7
+ * navigate there.
8
+ *
9
+ * Pure TypeScript with no runtime imports (structural database shape), shared
10
+ * by cad-simple-ui-plugin and the Vue cad-viewer.
11
+ */
12
+ import { type AcApFindDatabaseLike, type AcApFindHit, type AcApFindOptions } from './findText';
13
+ /**
14
+ * Where to search.
15
+ *
16
+ * - `drawing` (default): every layout of the drawing
17
+ * - `layout`: only the layout that is currently active in the view
18
+ */
19
+ export type AcApFindScope = 'drawing' | 'layout';
20
+ /** One layout of the drawing (model space or paper space). */
21
+ export interface AcApFindLayoutInfo {
22
+ /** Layout name as shown on the layout tab (e.g. `Model`, `Layout1`). */
23
+ name: string;
24
+ /** Block table record id of the layout. */
25
+ btrId: string;
26
+ /** Tab order; layouts are searched and listed in this order. */
27
+ tabOrder: number;
28
+ }
29
+ /** A hit that also identifies the layout that contains it. */
30
+ export interface AcApFindLayoutHit extends AcApFindHit {
31
+ /** Block table record id of the layout containing the hit. */
32
+ layoutId: string;
33
+ /** Name of the layout containing the hit. */
34
+ layoutName: string;
35
+ }
36
+ /** Result of one drawing-level search. */
37
+ export interface AcApFindDrawingResult {
38
+ hits: AcApFindLayoutHit[];
39
+ /** True when more than `maxResults` entities matched. */
40
+ truncated: boolean;
41
+ }
42
+ /** Options for {@link acapFindText}. */
43
+ export interface AcApFindDrawingOptions extends AcApFindOptions {
44
+ /** Search scope; defaults to `drawing`. */
45
+ scope?: AcApFindScope;
46
+ /**
47
+ * Block table record id of the layout currently shown. Required for the
48
+ * `layout` scope; also used as the only layout when the drawing exposes no
49
+ * layout objects.
50
+ */
51
+ currentLayoutId: string;
52
+ }
53
+ interface LayoutLike {
54
+ layoutName?: string;
55
+ tabOrder?: number;
56
+ blockTableRecordId?: string;
57
+ }
58
+ /** Database shape used to enumerate layouts. */
59
+ export interface AcApFindLayoutsDatabaseLike {
60
+ objects?: {
61
+ layout?: {
62
+ newIterator?(): Iterable<LayoutLike>;
63
+ };
64
+ };
65
+ }
66
+ /**
67
+ * Lists the layouts of a drawing sorted by tab order (model space first in
68
+ * practice). Returns an empty list when the drawing has no layout objects.
69
+ */
70
+ export declare function acapListFindLayouts(db: AcApFindLayoutsDatabaseLike): AcApFindLayoutInfo[];
71
+ /**
72
+ * Finds text in the whole drawing or in the current layout only.
73
+ *
74
+ * Layouts are visited in tab order and the result cap is shared, so
75
+ * `truncated` is true as soon as any match beyond `maxResults` exists in any
76
+ * searched layout. Search runs on the database, not on the rendered scene, so
77
+ * layouts that were never opened in the view are searched too.
78
+ */
79
+ export declare function acapFindText(db: AcApFindDatabaseLike & AcApFindLayoutsDatabaseLike, query: string, options: AcApFindDrawingOptions): AcApFindDrawingResult;
80
+ /** Axis-aligned 2D box in WCS (plain numbers; no geometry library needed). */
81
+ export interface AcApFindBox {
82
+ min: {
83
+ x: number;
84
+ y: number;
85
+ };
86
+ max: {
87
+ x: number;
88
+ y: number;
89
+ };
90
+ }
91
+ /**
92
+ * View box for a hit: the text extents (`hit.extents` for nested text), widened so a short label does not
93
+ * zoom in absurdly far (at least ~10 text heights wide). Falls back to the
94
+ * hit position when the entity has no usable extents.
95
+ *
96
+ * @param layoutBtrId - Layout that contains the hit (`hit.layoutId`).
97
+ */
98
+ export declare function acapFindHitBox(db: AcApFindDatabaseLike, layoutBtrId: string, hit: AcApFindHit): AcApFindBox;
99
+ export {};
100
+ //# sourceMappingURL=findDrawing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findDrawing.d.ts","sourceRoot":"","sources":["../../src/find/findDrawing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAEL,KAAK,oBAAoB,EACzB,KAAK,WAAW,EAChB,KAAK,eAAe,EAErB,MAAM,YAAY,CAAA;AAEnB;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,CAAA;AAEhD,8DAA8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAA;IACZ,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAA;IACb,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,8DAA8D;AAC9D,MAAM,WAAW,iBAAkB,SAAQ,WAAW;IACpD,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAA;IAChB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,0CAA0C;AAC1C,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,iBAAiB,EAAE,CAAA;IACzB,yDAAyD;IACzD,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,wCAAwC;AACxC,MAAM,WAAW,sBAAuB,SAAQ,eAAe;IAC7D,2CAA2C;IAC3C,KAAK,CAAC,EAAE,aAAa,CAAA;IACrB;;;;OAIG;IACH,eAAe,EAAE,MAAM,CAAA;CACxB;AAED,UAAU,UAAU;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,gDAAgD;AAChD,MAAM,WAAW,2BAA2B;IAC1C,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE;YAAE,WAAW,CAAC,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAA;SAAE,CAAA;KAClD,CAAA;CACF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,EAAE,EAAE,2BAA2B,GAC9B,kBAAkB,EAAE,CAetB;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,EAAE,EAAE,oBAAoB,GAAG,2BAA2B,EACtD,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,sBAAsB,GAC9B,qBAAqB,CAkCvB;AAED,8EAA8E;AAC9E,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7B,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC9B;AAOD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,oBAAoB,EACxB,WAAW,EAAE,MAAM,EACnB,GAAG,EAAE,WAAW,GACf,WAAW,CAwCb"}
@@ -0,0 +1,183 @@
1
+ var __assign = (this && this.__assign) || function () {
2
+ __assign = Object.assign || function(t) {
3
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
4
+ s = arguments[i];
5
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
6
+ t[p] = s[p];
7
+ }
8
+ return t;
9
+ };
10
+ return __assign.apply(this, arguments);
11
+ };
12
+ var __values = (this && this.__values) || function(o) {
13
+ var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
14
+ if (m) return m.call(o);
15
+ if (o && typeof o.length === "number") return {
16
+ next: function () {
17
+ if (o && i >= o.length) o = void 0;
18
+ return { value: o && o[i++], done: !o };
19
+ }
20
+ };
21
+ throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
22
+ };
23
+ /**
24
+ * Whole-drawing text search (FIND across layouts).
25
+ *
26
+ * Builds on {@link acapFindTextInLayout}: every layout of the drawing (model
27
+ * space and each paper space, in tab order) is searched with the same rules,
28
+ * and every hit is tagged with the layout it lives in so a UI can show it and
29
+ * navigate there.
30
+ *
31
+ * Pure TypeScript with no runtime imports (structural database shape), shared
32
+ * by cad-simple-ui-plugin and the Vue cad-viewer.
33
+ */
34
+ import { ACAP_FIND_MAX_RESULTS, acapFindTextInLayout } from './findText';
35
+ /**
36
+ * Lists the layouts of a drawing sorted by tab order (model space first in
37
+ * practice). Returns an empty list when the drawing has no layout objects.
38
+ */
39
+ export function acapListFindLayouts(db) {
40
+ var e_1, _a;
41
+ var _b, _c;
42
+ var table = (_b = db.objects) === null || _b === void 0 ? void 0 : _b.layout;
43
+ if (!(table === null || table === void 0 ? void 0 : table.newIterator))
44
+ return [];
45
+ var layouts = [];
46
+ try {
47
+ for (var _d = __values(table.newIterator()), _e = _d.next(); !_e.done; _e = _d.next()) {
48
+ var layout = _e.value;
49
+ if (!layout.blockTableRecordId)
50
+ continue;
51
+ layouts.push({
52
+ name: (_c = layout.layoutName) !== null && _c !== void 0 ? _c : '',
53
+ btrId: layout.blockTableRecordId,
54
+ tabOrder: Number(layout.tabOrder) || 0
55
+ });
56
+ }
57
+ }
58
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
59
+ finally {
60
+ try {
61
+ if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
62
+ }
63
+ finally { if (e_1) throw e_1.error; }
64
+ }
65
+ return layouts.sort(function (a, b) { return a.tabOrder - b.tabOrder || a.name.localeCompare(b.name); });
66
+ }
67
+ /**
68
+ * Finds text in the whole drawing or in the current layout only.
69
+ *
70
+ * Layouts are visited in tab order and the result cap is shared, so
71
+ * `truncated` is true as soon as any match beyond `maxResults` exists in any
72
+ * searched layout. Search runs on the database, not on the rendered scene, so
73
+ * layouts that were never opened in the view are searched too.
74
+ */
75
+ export function acapFindText(db, query, options) {
76
+ var e_2, _a, e_3, _b;
77
+ var _c;
78
+ var max = (_c = options.maxResults) !== null && _c !== void 0 ? _c : ACAP_FIND_MAX_RESULTS;
79
+ var known = acapListFindLayouts(db);
80
+ var nameOf = function (btrId) { var _a, _b; return (_b = (_a = known.find(function (layout) { return layout.btrId === btrId; })) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : ''; };
81
+ var targets;
82
+ if (options.scope === 'layout' || known.length === 0) {
83
+ targets = [
84
+ { btrId: options.currentLayoutId, name: nameOf(options.currentLayoutId) }
85
+ ];
86
+ }
87
+ else {
88
+ targets = known.map(function (layout) { return ({ btrId: layout.btrId, name: layout.name }); });
89
+ }
90
+ var result = { hits: [], truncated: false };
91
+ try {
92
+ for (var targets_1 = __values(targets), targets_1_1 = targets_1.next(); !targets_1_1.done; targets_1_1 = targets_1.next()) {
93
+ var target = targets_1_1.value;
94
+ var found = acapFindTextInLayout(db, target.btrId, query, {
95
+ matchCase: options.matchCase,
96
+ maxResults: max - result.hits.length
97
+ });
98
+ try {
99
+ for (var _d = (e_3 = void 0, __values(found.hits)), _e = _d.next(); !_e.done; _e = _d.next()) {
100
+ var hit = _e.value;
101
+ result.hits.push(__assign(__assign({}, hit), { layoutId: target.btrId, layoutName: target.name }));
102
+ }
103
+ }
104
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
105
+ finally {
106
+ try {
107
+ if (_e && !_e.done && (_b = _d.return)) _b.call(_d);
108
+ }
109
+ finally { if (e_3) throw e_3.error; }
110
+ }
111
+ if (found.truncated) {
112
+ result.truncated = true;
113
+ break;
114
+ }
115
+ }
116
+ }
117
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
118
+ finally {
119
+ try {
120
+ if (targets_1_1 && !targets_1_1.done && (_a = targets_1.return)) _a.call(targets_1);
121
+ }
122
+ finally { if (e_2) throw e_2.error; }
123
+ }
124
+ return result;
125
+ }
126
+ /**
127
+ * View box for a hit: the text extents (`hit.extents` for nested text), widened so a short label does not
128
+ * zoom in absurdly far (at least ~10 text heights wide). Falls back to the
129
+ * hit position when the entity has no usable extents.
130
+ *
131
+ * @param layoutBtrId - Layout that contains the hit (`hit.layoutId`).
132
+ */
133
+ export function acapFindHitBox(db, layoutBtrId, hit) {
134
+ var e_4, _a;
135
+ var _b, _c;
136
+ var btr = db.tables.blockTable.getIdAt(layoutBtrId);
137
+ var owner = (_b = btr === null || btr === void 0 ? void 0 : btr.getIdAt) === null || _b === void 0 ? void 0 : _b.call(btr, hit.entityId);
138
+ var target = owner;
139
+ if (hit.kind === 'attribute' && (owner === null || owner === void 0 ? void 0 : owner.attributeIterator)) {
140
+ try {
141
+ for (var _d = __values(owner.attributeIterator()), _e = _d.next(); !_e.done; _e = _d.next()) {
142
+ var attribute = _e.value;
143
+ if (attribute.objectId === hit.textEntityId) {
144
+ target = attribute;
145
+ break;
146
+ }
147
+ }
148
+ }
149
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
150
+ finally {
151
+ try {
152
+ if (_e && !_e.done && (_a = _d.return)) _a.call(_d);
153
+ }
154
+ finally { if (e_4) throw e_4.error; }
155
+ }
156
+ }
157
+ var min;
158
+ var max;
159
+ try {
160
+ // Text nested in a block / dimension / table: the search already
161
+ // resolved its WCS extents (the owner's extents are the whole block).
162
+ var extents = (_c = hit.extents) !== null && _c !== void 0 ? _c : target === null || target === void 0 ? void 0 : target.geometricExtents;
163
+ if (!extents || !isFinite(extents.min.x) || !isFinite(extents.max.x)) {
164
+ throw new Error('no extents');
165
+ }
166
+ min = extents.min;
167
+ max = extents.max;
168
+ }
169
+ catch (_f) {
170
+ min = max = hit.position;
171
+ }
172
+ var cx = (min.x + max.x) / 2;
173
+ var cy = (min.y + max.y) / 2;
174
+ var w = max.x - min.x;
175
+ var h = max.y - min.y;
176
+ var width = Math.max(w * 3, h * 10, 1e-3);
177
+ var height = Math.max(h * 3, width / 4, 1e-3);
178
+ return {
179
+ min: { x: cx - width / 2, y: cy - height / 2 },
180
+ max: { x: cx + width / 2, y: cy + height / 2 }
181
+ };
182
+ }
183
+ //# sourceMappingURL=findDrawing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findDrawing.js","sourceRoot":"","sources":["../../src/find/findDrawing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Text search over the entities of one layout (FIND).
3
+ *
4
+ * Shared by every UI (cad-simple-ui-plugin, the full Vue cad-viewer) so that
5
+ * both behave identically. Pure TypeScript with no runtime imports, published
6
+ * as the `@mlightcad/cad-simple-viewer/find` subpath.
7
+ *
8
+ * Searched fields:
9
+ * - `TEXT` — `textString`
10
+ * - `MTEXT` — `contents` with MTEXT formatting codes removed
11
+ * - `ATTRIB` — attribute value (`textString`) of every `INSERT` in the layout
12
+ * (the tag is reported for display but is not searched)
13
+ * - `TEXT` / `MTEXT` / `ATTRIB` inside the block definition of every `INSERT`
14
+ * (nested blocks included, anonymous/dynamic blocks too): title blocks,
15
+ * legends and labels are usually drawn this way
16
+ * - constant `ATTDEF` values inside block definitions (the only ATTDEFs that
17
+ * are drawn inside a block; templates get their value from an `ATTRIB`)
18
+ * - `DIMENSION` — the text of its dimension block when that block has a
19
+ * match, otherwise the override text (`dimensionText`)
20
+ * - `MULTILEADER` — its MTEXT contents
21
+ * - `ACAD_TABLE` — the cell text (from the table block when present,
22
+ * otherwise the cell strings)
23
+ *
24
+ * Every layout is visited in one synchronous pass per search. A hit inside a
25
+ * block, dimension or table selects the top-level entity of the layout that
26
+ * contains it, and carries the WCS extents of the matched text so the view
27
+ * can zoom to the text itself instead of to the whole block. Xrefs are not
28
+ * searched.
29
+ *
30
+ * The module is structural (no `instanceof`) so it can be unit tested with
31
+ * plain objects.
32
+ */
33
+ /** Maximum number of hits returned by one search. */
34
+ export declare const ACAP_FIND_MAX_RESULTS = 500;
35
+ /** Kind of entity that produced a hit. */
36
+ export type AcApFindHitKind = 'text' | 'mtext' | 'attribute'
37
+ /** TEXT / MTEXT inside a block definition (via an `INSERT`). */
38
+ | 'block' | 'dimension' | 'leader' | 'table';
39
+ /** Options for {@link acapFindTextInLayout}. */
40
+ export interface AcApFindOptions {
41
+ /**
42
+ * When true the query must match case and accents exactly. When false
43
+ * (default) case, accents (diacritics) and runs of whitespace are ignored.
44
+ */
45
+ matchCase?: boolean;
46
+ /** Maximum hits to return; defaults to {@link ACAP_FIND_MAX_RESULTS}. */
47
+ maxResults?: number;
48
+ }
49
+ /** One match returned by {@link acapFindTextInLayout}. */
50
+ export interface AcApFindHit {
51
+ /**
52
+ * Top-level entity of the layout that is selected (the `INSERT` for
53
+ * attributes and block text, the `DIMENSION` / `ACAD_TABLE` for their text).
54
+ */
55
+ entityId: string;
56
+ /**
57
+ * Key of the text that matched, unique within the layout: the entity id
58
+ * for top-level text, the attribute id for attributes, and
59
+ * `<entityId>/<nested id>…` for text found inside a block, dimension or
60
+ * table (the same block text appears once per `INSERT`).
61
+ */
62
+ textEntityId: string;
63
+ kind: AcApFindHitKind;
64
+ /** Plain text that matched (formatting codes removed, whitespace collapsed). */
65
+ text: string;
66
+ /** Attribute tag, for `attribute` hits. */
67
+ tag?: string;
68
+ /** Block name of the owning `INSERT`, for `attribute` hits. */
69
+ blockName?: string;
70
+ layer: string;
71
+ /** Insertion point of the text in WCS. */
72
+ position: {
73
+ x: number;
74
+ y: number;
75
+ };
76
+ /**
77
+ * WCS extents of the matched text, when known (text nested in a block,
78
+ * dimension or table). Used to zoom to the text itself.
79
+ */
80
+ extents?: {
81
+ min: {
82
+ x: number;
83
+ y: number;
84
+ };
85
+ max: {
86
+ x: number;
87
+ y: number;
88
+ };
89
+ };
90
+ }
91
+ /** Result of one search. */
92
+ export interface AcApFindResult {
93
+ hits: AcApFindHit[];
94
+ /** True when more than `maxResults` entities matched. */
95
+ truncated: boolean;
96
+ }
97
+ type EntityLike = any;
98
+ /** Minimal database shape used by the search. */
99
+ export interface AcApFindDatabaseLike {
100
+ tables: {
101
+ blockTable: {
102
+ /** Block definition by name; used to search text inside blocks. */
103
+ getAt?(name: string): {
104
+ newIterator(): Iterable<EntityLike>;
105
+ } | undefined;
106
+ getIdAt(id: string): {
107
+ newIterator(): Iterable<EntityLike>;
108
+ /** Used to resolve the matched entity for zoom extents. */
109
+ getIdAt?(id: string): EntityLike;
110
+ } | undefined;
111
+ };
112
+ layerTable?: {
113
+ getAt(name: string): {
114
+ isOff?: boolean;
115
+ isFrozen?: boolean;
116
+ } | undefined;
117
+ };
118
+ };
119
+ }
120
+ /**
121
+ * Normalizes text or a query for comparison.
122
+ *
123
+ * - always: NFKC, whitespace runs → one space, trimmed
124
+ * - unless `matchCase`: accents removed, lower-cased
125
+ */
126
+ export declare function acapNormalizeFindText(value: string, matchCase?: boolean): string;
127
+ /**
128
+ * Converts MTEXT contents to plain text: removes formatting codes
129
+ * (`\f…;`, `\H…;`, `\C…;`, `\L \l \O \o \K \k`, braces), turns `\P` into a
130
+ * space, decodes `\~`, `\U+XXXX`, stacked fractions and `%%c %%d %%p`.
131
+ */
132
+ export declare function acapMTextToPlainText(contents: string): string;
133
+ /**
134
+ * Finds text in the entities of one block table record (a layout).
135
+ *
136
+ * Entities that are invisible or sit on an off/frozen layer are skipped so
137
+ * that results always correspond to something the user can see.
138
+ *
139
+ * @param db - Database owning the layout.
140
+ * @param layoutBtrId - Block table record id of the layout (model/paper space).
141
+ * @param query - User query; blank queries return no hits.
142
+ */
143
+ export declare function acapFindTextInLayout(db: AcApFindDatabaseLike, layoutBtrId: string, query: string, options?: AcApFindOptions): AcApFindResult;
144
+ /** Returns a short excerpt of `text` centred on the first match of `query`. */
145
+ export declare function acapFindExcerpt(text: string, query: string, matchCase?: boolean, width?: number): string;
146
+ export {};
147
+ //# sourceMappingURL=findText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findText.d.ts","sourceRoot":"","sources":["../../src/find/findText.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,MAAM,CAAA;AAExC,0CAA0C;AAC1C,MAAM,MAAM,eAAe,GACvB,MAAM,GACN,OAAO,GACP,WAAW;AACb,gEAAgE;GAC9D,OAAO,GACP,WAAW,GACX,QAAQ,GACR,OAAO,CAAA;AAEX,gDAAgD;AAChD,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,0DAA0D;AAC1D,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAA;IAChB;;;;;OAKG;IACH,YAAY,EAAE,MAAM,CAAA;IACpB,IAAI,EAAE,eAAe,CAAA;IACrB,gFAAgF;IAChF,IAAI,EAAE,MAAM,CAAA;IACZ,2CAA2C;IAC3C,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,0CAA0C;IAC1C,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE;QAAE,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAAC,GAAG,EAAE;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAA;CAC3E;AAED,4BAA4B;AAC5B,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,WAAW,EAAE,CAAA;IACnB,yDAAyD;IACzD,SAAS,EAAE,OAAO,CAAA;CACnB;AAGD,KAAK,UAAU,GAAG,GAAG,CAAA;AAGrB,iDAAiD;AACjD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE;QACN,UAAU,EAAE;YACV,mEAAmE;YACnE,KAAK,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG;gBAAE,WAAW,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAA;aAAE,GAAG,SAAS,CAAA;YACzE,OAAO,CAAC,EAAE,EAAE,MAAM,GACd;gBACE,WAAW,IAAI,QAAQ,CAAC,UAAU,CAAC,CAAA;gBACnC,2DAA2D;gBAC3D,OAAO,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,UAAU,CAAA;aACjC,GACD,SAAS,CAAA;SACd,CAAA;QACD,UAAU,CAAC,EAAE;YACX,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG;gBAAE,KAAK,CAAC,EAAE,OAAO,CAAC;gBAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;aAAE,GAAG,SAAS,CAAA;SACzE,CAAA;KACF,CAAA;CACF;AAKD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,SAAS,UAAQ,GAChB,MAAM,CAMR;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAiB7D;AAyHD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,oBAAoB,EACxB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,eAAoB,GAC5B,cAAc,CAwRhB;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,SAAS,UAAQ,EACjB,KAAK,SAAK,GACT,MAAM,CAQR"}