owndesign 0.2.2 → 0.3.1

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 (159) hide show
  1. package/dist/index.js +1 -1
  2. package/dist/server/index.js +889 -809
  3. package/dist/server/prompts/agents/design-page.md +21 -2
  4. package/dist/server/prompts/index.ts +0 -1
  5. package/dist/server/templates/html/page-shell.html +1 -3
  6. package/dist/server/templates/owndesign-runtime.test.ts +51 -0
  7. package/dist/server/templates/owndesign-runtime.ts +138 -0
  8. package/dist/server/templates/single-html.ts +18 -0
  9. package/dist/web/assets/{angular-html-BC-ehZ2Z.js → angular-html-BdqUTOSr.js} +1 -1
  10. package/dist/web/assets/{angular-ts-CbNdIQVH.js → angular-ts-CHVPl0K2.js} +1 -1
  11. package/dist/web/assets/{apl-CKXIPXmN.js → apl-Cdj8xhOr.js} +1 -1
  12. package/dist/web/assets/{arc-DCbsmfyT.js → arc-CQzLFt8P.js} +1 -1
  13. package/dist/web/assets/architecture-7EHR7CIX-D_1q3iHJ.js +1 -0
  14. package/dist/web/assets/{architectureDiagram-3BPJPVTR-C3CSEDbb.js → architectureDiagram-3BPJPVTR-DQRev6P0.js} +1 -1
  15. package/dist/web/assets/{astro-0YgDtFyB.js → astro-CqvP6Sm9.js} +1 -1
  16. package/dist/web/assets/{blade-DCBz6o9i.js → blade-AHcrF7FJ.js} +1 -1
  17. package/dist/web/assets/{blockDiagram-GPEHLZMM-Wy4mtab2.js → blockDiagram-GPEHLZMM-wWr1jqbH.js} +1 -1
  18. package/dist/web/assets/{c-B_5YfUT4.js → c-L6BASEY4.js} +1 -1
  19. package/dist/web/assets/{c4Diagram-AAUBKEIU-DvAQK-yr.js → c4Diagram-AAUBKEIU-QcoxyP1-.js} +1 -1
  20. package/dist/web/assets/channel-CKLAyPXF.js +1 -0
  21. package/dist/web/assets/{chunk-2J33WTMH-D12BmulM.js → chunk-2J33WTMH-Rt8Y9qQM.js} +1 -1
  22. package/dist/web/assets/{chunk-4BX2VUAB-CUsT6Yoy.js → chunk-4BX2VUAB-DgnUshBl.js} +1 -1
  23. package/dist/web/assets/{chunk-55IACEB6-B1fNBh7K.js → chunk-55IACEB6-C4VtZ0S1.js} +1 -1
  24. package/dist/web/assets/{chunk-727SXJPM-BNwBLitG.js → chunk-727SXJPM-pX8vxQBM.js} +1 -1
  25. package/dist/web/assets/{chunk-AQP2D5EJ-Cj6w8RRN.js → chunk-AQP2D5EJ-CtASt0uL.js} +1 -1
  26. package/dist/web/assets/{chunk-FMBD7UC4-DZQMeOiP.js → chunk-FMBD7UC4-AYbdnBZ-.js} +1 -1
  27. package/dist/web/assets/{chunk-ND2GUHAM-BDZZZpgK.js → chunk-ND2GUHAM-Bi2LmhY7.js} +1 -1
  28. package/dist/web/assets/chunk-QZHKN3VN-_jfeFdsU.js +1 -0
  29. package/dist/web/assets/classDiagram-4FO5ZUOK-CPA3GyTp.js +1 -0
  30. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-CPA3GyTp.js +1 -0
  31. package/dist/web/assets/{cobol-B7rjWy71.js → cobol-2mv2h2I-.js} +1 -1
  32. package/dist/web/assets/{coffee-327Z21kX.js → coffee-WyF-3t43.js} +1 -1
  33. package/dist/web/assets/{cose-bilkent-S5V4N54A-D1c4YrLP.js → cose-bilkent-S5V4N54A-DM6dd-q1.js} +1 -1
  34. package/dist/web/assets/{cpp-76QBVYPh.js → cpp-CAEbN4Ya.js} +1 -1
  35. package/dist/web/assets/{crystal-B4heXbZm.js → crystal-DyRNEnWF.js} +1 -1
  36. package/dist/web/assets/{css-CzEdf7OR.js → css-CG0mYlL5.js} +1 -1
  37. package/dist/web/assets/{dagre-BM42HDAG-ET87-tzF.js → dagre-BM42HDAG-D_NqzEVm.js} +1 -1
  38. package/dist/web/assets/{diagram-2AECGRRQ-CBQXEPqZ.js → diagram-2AECGRRQ-Bgm-_Eko.js} +1 -1
  39. package/dist/web/assets/{diagram-5GNKFQAL-CtNzeaR4.js → diagram-5GNKFQAL-C_9mv9Qd.js} +1 -1
  40. package/dist/web/assets/{diagram-KO2AKTUF-DKv9ewpj.js → diagram-KO2AKTUF-BHQT9JgD.js} +1 -1
  41. package/dist/web/assets/{diagram-LMA3HP47-BdL7Q4hm.js → diagram-LMA3HP47-B48NzL_Q.js} +1 -1
  42. package/dist/web/assets/{diagram-OG6HWLK6-BTYYRviK.js → diagram-OG6HWLK6-DKk01CLS.js} +1 -1
  43. package/dist/web/assets/{edge-CbifZx89.js → edge-WFDIDqY1.js} +1 -1
  44. package/dist/web/assets/{elixir-D7epo7XU.js → elixir-CP1ajsZR.js} +1 -1
  45. package/dist/web/assets/{elm-CDnfHiSW.js → elm-oora7HJE.js} +1 -1
  46. package/dist/web/assets/{erDiagram-TEJ5UH35-DoS_g6rc.js → erDiagram-TEJ5UH35-ClLJSrwL.js} +1 -1
  47. package/dist/web/assets/{erb-CJPDtktp.js → erb-DpZNjJ9_.js} +1 -1
  48. package/dist/web/assets/eventmodeling-FCH6USID-1ivGez78.js +1 -0
  49. package/dist/web/assets/{flowDiagram-I6XJVG4X-INqAi_9A.js → flowDiagram-I6XJVG4X-m1zK1OOI.js} +1 -1
  50. package/dist/web/assets/{ganttDiagram-6RSMTGT7-BtV9RfaV.js → ganttDiagram-6RSMTGT7-R7B6FFxw.js} +1 -1
  51. package/dist/web/assets/{git-rebase-XN1VAGxD.js → git-rebase-Dg9skXJz.js} +1 -1
  52. package/dist/web/assets/gitGraph-WXDBUCRP-Dpi4pm_y.js +1 -0
  53. package/dist/web/assets/{gitGraphDiagram-PVQCEYII-Bg7oxgNx.js → gitGraphDiagram-PVQCEYII-rvpKbkxm.js} +1 -1
  54. package/dist/web/assets/{glimmer-js-jAUeYMlX.js → glimmer-js-BM1sc5ia.js} +1 -1
  55. package/dist/web/assets/{glimmer-ts-wcJbAc9L.js → glimmer-ts-BJ5aeU1p.js} +1 -1
  56. package/dist/web/assets/{glsl-CqkwmhMS.js → glsl-DAXCJ1Bs.js} +1 -1
  57. package/dist/web/assets/{graphql-MSHUJ_J9.js → graphql-_HTUmoJJ.js} +1 -1
  58. package/dist/web/assets/{hack-o9VcDxFX.js → hack-Bbw_IBNu.js} +1 -1
  59. package/dist/web/assets/{haml-yMII7dOY.js → haml-BElCN2ig.js} +1 -1
  60. package/dist/web/assets/{handlebars-DqywSDps.js → handlebars-PfBBM4Ul.js} +1 -1
  61. package/dist/web/assets/{highlighted-body-OFNGDK62-DZUhBEEf.js → highlighted-body-OFNGDK62-B7shmJas.js} +1 -1
  62. package/dist/web/assets/{html-D8D_RndX.js → html-BF5zzurH.js} +1 -1
  63. package/dist/web/assets/{html-derivative-Db1SyKg8.js → html-derivative-oPCMAlhR.js} +1 -1
  64. package/dist/web/assets/{http-Bqs_GAGw.js → http-B3FNtPG9.js} +1 -1
  65. package/dist/web/assets/{hurl-j0mDeRMp.js → hurl-Dp2M6dIg.js} +1 -1
  66. package/dist/web/assets/index-YSa89xAk.js +977 -0
  67. package/dist/web/assets/index-qzT4Spui.css +2 -0
  68. package/dist/web/assets/info-J43DQDTF-CCIIC-lT.js +1 -0
  69. package/dist/web/assets/{infoDiagram-5YYISTIA-D4cmnLLV.js → infoDiagram-5YYISTIA-DUiIIzSJ.js} +1 -1
  70. package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-BY9yvtJK.js → ishikawaDiagram-YF4QCWOH-BDoM1IJ1.js} +1 -1
  71. package/dist/web/assets/{java-CegvNhLh.js → java-D8VYPdmO.js} +1 -1
  72. package/dist/web/assets/{javascript-DhcUAesx.js → javascript-8l7nZMBo.js} +1 -1
  73. package/dist/web/assets/{jinja-BdSDD1Q-.js → jinja-CTV42GN6.js} +1 -1
  74. package/dist/web/assets/{jison-CarYqmfq.js → jison-DOEd3yQu.js} +1 -1
  75. package/dist/web/assets/{journeyDiagram-JHISSGLW-rDquyMpx.js → journeyDiagram-JHISSGLW-o_K8r6Fc.js} +1 -1
  76. package/dist/web/assets/{json-wCF8Ai7e.js → json-BJP4ONN0.js} +1 -1
  77. package/dist/web/assets/{jsx-Ct3LR2iE.js → jsx-kpZBrH4w.js} +1 -1
  78. package/dist/web/assets/{julia-Brh5r__6.js → julia-H9ccs9iA.js} +1 -1
  79. package/dist/web/assets/{just-CK9u7rV8.js → just-hj2UAEFQ.js} +1 -1
  80. package/dist/web/assets/{kanban-definition-UN3LZRKU-DRY4BHuX.js → kanban-definition-UN3LZRKU-QwMAKT_f.js} +1 -1
  81. package/dist/web/assets/{latex-CnioxxTZ.js → latex-CyO33iPb.js} +1 -1
  82. package/dist/web/assets/{linear-DdVYArrQ.js → linear-o7e5jEgw.js} +1 -1
  83. package/dist/web/assets/{liquid-CWr27PHL.js → liquid-_mek6fOE.js} +1 -1
  84. package/dist/web/assets/{lua-BHz_f72B.js → lua-C2DhJyVI.js} +1 -1
  85. package/dist/web/assets/{marko-DYZOkg7A.js → marko-CZEiD-NB.js} +1 -1
  86. package/dist/web/assets/{mdc-a5KQMe4S.js → mdc-A90dq1MH.js} +1 -1
  87. package/dist/web/assets/mermaid-GHXKKRXX-BHX3ego2.js +1 -0
  88. package/dist/web/assets/{mermaid-parser.core-BAsHbYUQ.js → mermaid-parser.core-CwzV1M_V.js} +2 -2
  89. package/dist/web/assets/{mindmap-definition-RKZ34NQL-C1ndv4OX.js → mindmap-definition-RKZ34NQL-BMri-V6y.js} +1 -1
  90. package/dist/web/assets/{nginx-DYjAek21.js → nginx-DOMnJ23j.js} +1 -1
  91. package/dist/web/assets/{nim-BY3DE5rh.js → nim-zbR5LDAV.js} +1 -1
  92. package/dist/web/assets/packet-YPE3B663-ByXdjZNB.js +1 -0
  93. package/dist/web/assets/{perl-Q7rsz5p8.js → perl-DdSkRoeE.js} +1 -1
  94. package/dist/web/assets/{php-wkLOOMEB.js → php-BpQLZPHO.js} +1 -1
  95. package/dist/web/assets/pie-LRSECV5Y-B4cm_9Re.js +1 -0
  96. package/dist/web/assets/{pieDiagram-4H26LBE5-hbmKZkAo.js → pieDiagram-4H26LBE5-DFad80u4.js} +1 -1
  97. package/dist/web/assets/{pug-DBjGFTz6.js → pug-C_fdPtH-.js} +1 -1
  98. package/dist/web/assets/{qml-6JbnGGh-.js → qml-CNXBf8kx.js} +1 -1
  99. package/dist/web/assets/{quadrantDiagram-W4KKPZXB-Ce3Tyy1v.js → quadrantDiagram-W4KKPZXB-CXH7Ps0K.js} +1 -1
  100. package/dist/web/assets/{r-CpWosUkA.js → r-BCVwx55G.js} +1 -1
  101. package/dist/web/assets/radar-GUYGQ44K-BfTLimWm.js +1 -0
  102. package/dist/web/assets/{razor-VaRLosil.js → razor-4UnzbliN.js} +1 -1
  103. package/dist/web/assets/{regexp-BXX0dR0g.js → regexp-Cx44IXhZ.js} +1 -1
  104. package/dist/web/assets/{requirementDiagram-4Y6WPE33-BvuMdAA_.js → requirementDiagram-4Y6WPE33-jgMAzOs_.js} +1 -1
  105. package/dist/web/assets/{rst-B5mAlZz_.js → rst-BQ98T0pl.js} +1 -1
  106. package/dist/web/assets/{ruby-CuJVGKz0.js → ruby-CQe2_1Mx.js} +1 -1
  107. package/dist/web/assets/{sankeyDiagram-5OEKKPKP-9vzIUX0R.js → sankeyDiagram-5OEKKPKP-D_3RedGH.js} +1 -1
  108. package/dist/web/assets/{sas-CVzjXYMr.js → sas-Df1AewjZ.js} +1 -1
  109. package/dist/web/assets/{scss-WQpgeU5g.js → scss-Mnube1Aq.js} +1 -1
  110. package/dist/web/assets/{sequenceDiagram-3UESZ5HK-q6rXjDsy.js → sequenceDiagram-3UESZ5HK-C1836wpQ.js} +1 -1
  111. package/dist/web/assets/{shellscript-CycmgFgs.js → shellscript-CDszjMg6.js} +1 -1
  112. package/dist/web/assets/{shellsession-CSmahWBB.js → shellsession-CnjHVqYh.js} +1 -1
  113. package/dist/web/assets/{soy-E8MJKPgz.js → soy-B5asYSZT.js} +1 -1
  114. package/dist/web/assets/{sql-ChzFHxMA.js → sql-BFrC3Vi5.js} +1 -1
  115. package/dist/web/assets/{stata-D-Voeimj.js → stata-KlFU2EjN.js} +1 -1
  116. package/dist/web/assets/{stateDiagram-AJRCARHV-QkbVYicl.js → stateDiagram-AJRCARHV-S48Ai71o.js} +1 -1
  117. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-bf5jD_zW.js +1 -0
  118. package/dist/web/assets/{surrealql-CDreHe5D.js → surrealql-rIRDXr_v.js} +1 -1
  119. package/dist/web/assets/{svelte-UtC71yfS.js → svelte-BQftzg5X.js} +1 -1
  120. package/dist/web/assets/{templ-DI5vQSP6.js → templ-DfQQPqaN.js} +1 -1
  121. package/dist/web/assets/{tex-B1pg-O0j.js → tex-8LsiEF9g.js} +1 -1
  122. package/dist/web/assets/{timeline-definition-PNZ67QCA-hOb9CPgd.js → timeline-definition-PNZ67QCA-C9H3XLfz.js} +1 -1
  123. package/dist/web/assets/treeView-BLDUP644-mOvRjQhT.js +1 -0
  124. package/dist/web/assets/treemap-LRROVOQU--QiNmmi5.js +1 -0
  125. package/dist/web/assets/{ts-tags-DDRBQd18.js → ts-tags-i6Dbvl26.js} +1 -1
  126. package/dist/web/assets/{tsx-BNOyqGp9.js → tsx-BMATElFg.js} +1 -1
  127. package/dist/web/assets/{twig-zClWYmrr.js → twig-Cy6dMspl.js} +1 -1
  128. package/dist/web/assets/{typescript-Bywfx-vz.js → typescript-BMNfloOQ.js} +1 -1
  129. package/dist/web/assets/{vennDiagram-CIIHVFJN-Cx7yBOK-.js → vennDiagram-CIIHVFJN-DGW7CatZ.js} +1 -1
  130. package/dist/web/assets/{vue-Bp_voCJR.js → vue-DRQ1Vnbf.js} +1 -1
  131. package/dist/web/assets/{vue-html-C43GF5Id.js → vue-html-BbCBEXlS.js} +1 -1
  132. package/dist/web/assets/{vue-vine-CSRbNOMz.js → vue-vine-CgyY7JdC.js} +1 -1
  133. package/dist/web/assets/wardley-L42UT6IY-CX5eMTMw.js +1 -0
  134. package/dist/web/assets/{wardleyDiagram-YWT4CUSO-Cwiuub7b.js → wardleyDiagram-YWT4CUSO-DCGzfbps.js} +1 -1
  135. package/dist/web/assets/{xml-rhD_p6eK.js → xml-95qkb9yN.js} +1 -1
  136. package/dist/web/assets/{xsl-B-H8kR_6.js → xsl-D6gyo8CK.js} +1 -1
  137. package/dist/web/assets/{xychartDiagram-2RQKCTM6-DAix_-GG.js → xychartDiagram-2RQKCTM6-YEjKJtlZ.js} +1 -1
  138. package/dist/web/assets/{yaml-CRIMWRGF.js → yaml-KYdypczj.js} +1 -1
  139. package/dist/web/index.html +2 -2
  140. package/package.json +4 -1
  141. package/dist/server/prompts/agents/component-audit.md +0 -24
  142. package/dist/web/assets/architecture-7EHR7CIX-Dy_x80xD.js +0 -1
  143. package/dist/web/assets/channel-CNy21oVR.js +0 -1
  144. package/dist/web/assets/chunk-QZHKN3VN-ZvBMuvS3.js +0 -1
  145. package/dist/web/assets/classDiagram-4FO5ZUOK-CdVQzF3q.js +0 -1
  146. package/dist/web/assets/classDiagram-v2-Q7XG4LA2-CdVQzF3q.js +0 -1
  147. package/dist/web/assets/eventmodeling-FCH6USID-dHNYNvhr.js +0 -1
  148. package/dist/web/assets/gitGraph-WXDBUCRP-BTlPmENP.js +0 -1
  149. package/dist/web/assets/index-BMuMlfUY.css +0 -2
  150. package/dist/web/assets/index-DlSOjemg.js +0 -977
  151. package/dist/web/assets/info-J43DQDTF-Dk_AfWti.js +0 -1
  152. package/dist/web/assets/mermaid-GHXKKRXX-DsECfWij.js +0 -1
  153. package/dist/web/assets/packet-YPE3B663-C6X9xd7B.js +0 -1
  154. package/dist/web/assets/pie-LRSECV5Y-B7m9jxWQ.js +0 -1
  155. package/dist/web/assets/radar-GUYGQ44K-CNV--1hE.js +0 -1
  156. package/dist/web/assets/stateDiagram-v2-BHNVJYJU-CemwCoPd.js +0 -1
  157. package/dist/web/assets/treeView-BLDUP644-4kzz9e5T.js +0 -1
  158. package/dist/web/assets/treemap-LRROVOQU-CUGlq2kA.js +0 -1
  159. package/dist/web/assets/wardley-L42UT6IY-NTb3kln2.js +0 -1
@@ -41,12 +41,29 @@ Choose one strong visual direction that fits the product instead of blending gen
41
41
  - `index.html` is the only previewable page and the main design canvas.
42
42
  - Put the page structure, CSS, and local prototype JavaScript directly in `index.html`.
43
43
  - Do not create additional HTML pages, React/Vue/Svelte apps, framework build files, custom elements, Shadow DOM, component module folders, or reuse metadata.
44
- - For multiple pages, screens, routes, or steps, implement internal views in `index.html` using state, hash routing, tabs, buttons, or `[data-view]` sections.
44
+ - For multiple pages, page-level screens, or route-like navigation, use hash routing inside `index.html`.
45
+ - Do not use path-based browser routing.
45
46
  - Use `<main id="app">` for the visible app/page body.
46
47
  - Keep CSS in the file's `<style>` block and organize it clearly: reset, tokens, layout, components, states, responsive rules, and motion.
47
48
  - Keep JavaScript in the file's `<script>` block and include only prototype behavior that is needed for visible interaction.
49
+ - Preserve the OwnDesign protected runtime script with `data-owndesign-runtime="preview-route-bridge"` unchanged, exactly once, as the last element inside `<body>`.
50
+ - Put app-specific prototype JavaScript in a separate earlier script block, not inside the OwnDesign protected runtime script.
48
51
  - Prefer one coherent, finished file over abstractions that make the prototype harder to inspect.
49
52
 
53
+ ## Hash-addressable UI State
54
+
55
+ Every design state that a viewer would want to link to or return to directly should be restorable from `location.hash`, so the same state appears on direct load.
56
+
57
+ - Use stable semantic hash routes such as `#/dashboard`, `#/orders`, `#/settings`, and `#/detail/123`.
58
+ - Encode deep-link-worthy route state in the hash query when it changes the designed screen, such as `#/orders?tab=kanban&drawer=filters`, `#/settings?tab=billing&modal=invite-member`, or `#/products/42?panel=details`.
59
+ - The current page-level view and any deep-link-worthy UI state must be derived from `location.hash`, not only from in-memory variables or prior click history.
60
+ - A direct load of `index.html#/route?...` must render the matching route and any material active tab, open modal, open drawer or side panel, selected detail, filter, mode, and route-specific mock content without requiring previous clicks.
61
+ - Render the current hash state on initial load, such as `DOMContentLoaded`, as well as on `hashchange`; do not rely on `hashchange` firing for the first paint.
62
+ - Use normal hash navigation for page-level route changes. For in-page sub-state such as active tabs, open modals, drawers, side panels, filters, modes, and selected details, update the hash with `history.replaceState` so the Back button moves between pages instead of every toggle.
63
+ - Navigation links, tab controls, modal open and close controls, drawer toggles, side-panel controls, filters, modes, and selected-detail controls should update `location.hash` when they control a deep-link-worthy design state.
64
+ - Provide a sensible default route and default UI state when the hash is empty, incomplete, or unknown.
65
+ - Keep ephemeral micro-interactions in local state only, such as hover, focus, pressed button feedback, transient toasts, loading spinners, and unsubmitted form typing.
66
+
50
67
  ## Frontend Taste Model
51
68
 
52
69
  Every rendered `index.html` should feel like a complete product-quality prototype:
@@ -86,7 +103,7 @@ Avoid data-first implementation. Start from the visible interface structure, the
86
103
 
87
104
  Build frontend prototypes. Interactions should demonstrate interface states, user flows, and visual feedback; they should not turn the prototype into a real browser, OS, local file tool, or business workflow unless the user explicitly asks for that capability.
88
105
 
89
- Good prototype interactions include active tabs, modal open/close, drawer visibility, filter chips, selected rows, toast messages, simple steppers, hash/view switching, local preview toggles, and small local state changes that make the UI intention clear.
106
+ Good prototype interactions include hash-addressable routes and UI states, active tabs, modal open/close, drawer visibility, side-panel state, filter chips, selected rows, toast messages, simple steppers, local preview toggles, and small local state changes that make the UI intention clear. Follow the Hash-addressable UI State rules for direct-load recovery.
90
107
 
91
108
  For complex actions such as Add, Import, Upload, Select folder, Connect source, Sync, Export, Pay, Sign in, or Publish, default to a mock UI flow: open a modal, show sample items, update a visible state, or display a credible simulated result. Do not access local files or external services by default.
92
109
 
@@ -120,12 +137,14 @@ Before calling `previewRefresh`, review the current `index.html` source and veri
120
137
 
121
138
  - First viewport: the product purpose, visual direction, and at least one primary action or workflow entry point are visible without scrolling.
122
139
  - Single target: the complete previewable prototype lives in `index.html` and uses `<main id="app">` for the visible body.
140
+ - Hash recovery: any route, tab, modal, drawer, panel, filter, mode, or selected-detail state that materially changes the design can be restored by direct-loading the current URL hash.
123
141
  - Readability: body text is at least 14px, contrast is comfortable, and no important text is clipped, hidden, or overlapping.
124
142
  - Layout: desktop and any required mobile layout have no accidental horizontal overflow, cramped controls, or incoherent stacking.
125
143
  - States: navigation, filters, tabs, buttons, modals, drawers, and form controls produce visible feedback when included.
126
144
  - Content: labels, sample data, and copy are specific to the product domain, with no lorem ipsum or vague placeholder filler.
127
145
  - Resources: font, icon, image, and dependency choices follow `resource_policy`.
128
146
  - Icons: configured icons are aligned with adjacent text and controls, and dynamically inserted icons are initialized when needed.
147
+ - Runtime: the OwnDesign protected runtime script is unchanged, appears exactly once, and remains the last element inside `<body>`.
129
148
  - Code: CSS and JavaScript are organized inside the file and contain no unfinished template placeholders or dead handlers.
130
149
  - Finish: the page feels like a polished interface prototype, not a wireframe, empty scaffold, or code exercise.
131
150
 
@@ -3,7 +3,6 @@ import path from 'node:path';
3
3
  import { fileURLToPath } from 'node:url';
4
4
 
5
5
  const PROMPT_FILES = {
6
- 'agents/component-audit': 'agents/component-audit.md',
7
6
  'agents/design-page': 'agents/design-page.md',
8
7
  } as const;
9
8
 
@@ -58,8 +58,6 @@
58
58
  <script>
59
59
  // OwnDesign Single HTML app logic starts here.
60
60
  </script>
61
- <script>
62
- lucide.createIcons();
63
- </script>
61
+ {{runtimeScript}}
64
62
  </body>
65
63
  </html>
@@ -0,0 +1,51 @@
1
+ import { describe, expect, it } from 'vitest';
2
+
3
+ import {
4
+ OWNDESIGN_RUNTIME_ATTRIBUTE,
5
+ OWNDESIGN_RUNTIME_SCRIPT_TAG,
6
+ assertOwnDesignRuntimeScript,
7
+ } from './owndesign-runtime';
8
+ import { buildSingleHtmlTemplate } from './single-html';
9
+
10
+ describe('OwnDesign runtime script', () => {
11
+ it('renders the protected runtime script as the last body element', () => {
12
+ const html = buildSingleHtmlTemplate({ title: 'Dashboard' });
13
+
14
+ expect(html).toContain(OWNDESIGN_RUNTIME_ATTRIBUTE);
15
+ expect(html).toContain('source: \'owndesign-preview\'');
16
+ expect(html).toContain('type: \'route-changed\'');
17
+ expect(html).toContain('lucide.createIcons();');
18
+ expect(countOccurrences(html, OWNDESIGN_RUNTIME_SCRIPT_TAG)).toBe(1);
19
+ expect(() => assertOwnDesignRuntimeScript(html)).not.toThrow();
20
+ });
21
+
22
+ it('rejects missing, changed, duplicated, or non-final runtime scripts', () => {
23
+ const html = buildSingleHtmlTemplate({ title: 'Dashboard' });
24
+
25
+ expect(() => assertOwnDesignRuntimeScript(html.replace(OWNDESIGN_RUNTIME_SCRIPT_TAG, ''))).toThrow(
26
+ 'OwnDesign runtime script',
27
+ );
28
+ expect(() =>
29
+ assertOwnDesignRuntimeScript(html.replace('route-changed', 'route-updated')),
30
+ ).toThrow('OwnDesign runtime script');
31
+ expect(() =>
32
+ assertOwnDesignRuntimeScript(html.replace('</body>', `${OWNDESIGN_RUNTIME_SCRIPT_TAG}\n</body>`)),
33
+ ).toThrow('OwnDesign runtime script');
34
+ expect(() =>
35
+ assertOwnDesignRuntimeScript(html.replace('</body>', '<div>After</div>\n</body>')),
36
+ ).toThrow('last element');
37
+ });
38
+
39
+ it('allows only whitespace or comments after the runtime script before body closes', () => {
40
+ const html = buildSingleHtmlTemplate({ title: 'Dashboard' }).replace(
41
+ '</body>',
42
+ '<!-- generated marker -->\n</body>',
43
+ );
44
+
45
+ expect(() => assertOwnDesignRuntimeScript(html)).not.toThrow();
46
+ });
47
+ });
48
+
49
+ function countOccurrences(content: string, needle: string) {
50
+ return content.split(needle).length - 1;
51
+ }
@@ -0,0 +1,138 @@
1
+ export const OWNDESIGN_RUNTIME_ATTRIBUTE = 'data-owndesign-runtime="preview-route-bridge"';
2
+
3
+ export const OWNDESIGN_RUNTIME_SCRIPT_TAG = `<script ${OWNDESIGN_RUNTIME_ATTRIBUTE}>
4
+ (() => {
5
+ const sendRoute = () => {
6
+ window.parent?.postMessage(
7
+ {
8
+ source: 'owndesign-preview',
9
+ type: 'route-changed',
10
+ version: 1,
11
+ hash: window.location.hash || '',
12
+ },
13
+ '*',
14
+ );
15
+ };
16
+
17
+ const scheduleRouteUpdate = () => {
18
+ window.requestAnimationFrame(sendRoute);
19
+ };
20
+
21
+ const patchHistory = (method) => {
22
+ const original = window.history[method];
23
+
24
+ window.history[method] = function patchedHistoryMethod(...args) {
25
+ const result = original.apply(this, args);
26
+ scheduleRouteUpdate();
27
+ return result;
28
+ };
29
+ };
30
+
31
+ patchHistory('pushState');
32
+ patchHistory('replaceState');
33
+ window.addEventListener('hashchange', scheduleRouteUpdate);
34
+ window.addEventListener('popstate', scheduleRouteUpdate);
35
+ window.addEventListener('pageshow', scheduleRouteUpdate);
36
+ document.addEventListener('DOMContentLoaded', scheduleRouteUpdate);
37
+ scheduleRouteUpdate();
38
+
39
+ if (window.lucide) {
40
+ lucide.createIcons();
41
+ }
42
+ })();
43
+ </script>`;
44
+
45
+ const BODY_CLOSE_PATTERN = /<\/body\s*>/gi;
46
+ const BODY_OPEN_PATTERN = /<body(?:\s[^>]*)?>/i;
47
+ const HTML_COMMENT_PATTERN = /<!--[\s\S]*?-->/g;
48
+
49
+ export function assertOwnDesignRuntimeScript(content: string) {
50
+ const normalizedContent = normalizeLineEndings(content);
51
+ const normalizedRuntimeScript = normalizeLineEndings(OWNDESIGN_RUNTIME_SCRIPT_TAG);
52
+ const runtimeScriptCount = countOccurrences(normalizedContent, normalizedRuntimeScript);
53
+
54
+ if (runtimeScriptCount !== 1) {
55
+ throw new Error(
56
+ 'Keep the OwnDesign runtime script unchanged and include it exactly once as the last element inside <body>.',
57
+ );
58
+ }
59
+
60
+ const bodyOpen = BODY_OPEN_PATTERN.exec(normalizedContent);
61
+ BODY_OPEN_PATTERN.lastIndex = 0;
62
+ const bodyClose = getLastMatch(normalizedContent, BODY_CLOSE_PATTERN);
63
+
64
+ if (!bodyOpen || !bodyClose) {
65
+ throw new Error(
66
+ 'Keep the OwnDesign runtime script inside <body> as the last element.',
67
+ );
68
+ }
69
+
70
+ const runtimeScriptIndex = normalizedContent.indexOf(normalizedRuntimeScript);
71
+ const runtimeScriptEnd = runtimeScriptIndex + normalizedRuntimeScript.length;
72
+ const bodyContentStart = bodyOpen.index + bodyOpen[0].length;
73
+
74
+ if (runtimeScriptIndex < bodyContentStart || runtimeScriptEnd > bodyClose.index) {
75
+ throw new Error(
76
+ 'Keep the OwnDesign runtime script inside <body> as the last element.',
77
+ );
78
+ }
79
+
80
+ const trailingBodyContent = normalizedContent
81
+ .slice(runtimeScriptEnd, bodyClose.index)
82
+ .replace(HTML_COMMENT_PATTERN, '')
83
+ .trim();
84
+
85
+ if (trailingBodyContent) {
86
+ throw new Error(
87
+ 'Keep the OwnDesign runtime script as the last element inside <body>.',
88
+ );
89
+ }
90
+ }
91
+
92
+ export function isProtectedSingleHtmlPath(relativePath: string) {
93
+ return normalizeRelativePath(relativePath).toLowerCase() === 'index.html';
94
+ }
95
+
96
+ function normalizeLineEndings(value: string) {
97
+ return value.replaceAll('\r\n', '\n').replaceAll('\r', '\n');
98
+ }
99
+
100
+ function countOccurrences(content: string, needle: string) {
101
+ return content.split(needle).length - 1;
102
+ }
103
+
104
+ function normalizeRelativePath(relativePath: string) {
105
+ const segments: string[] = [];
106
+
107
+ for (const segment of relativePath.replaceAll('\\', '/').split('/')) {
108
+ if (!segment || segment === '.') {
109
+ continue;
110
+ }
111
+
112
+ if (segment === '..') {
113
+ if (segments.length > 0 && segments.at(-1) !== '..') {
114
+ segments.pop();
115
+ } else {
116
+ segments.push(segment);
117
+ }
118
+ continue;
119
+ }
120
+
121
+ segments.push(segment);
122
+ }
123
+
124
+ return segments.join('/');
125
+ }
126
+
127
+ function getLastMatch(content: string, pattern: RegExp) {
128
+ pattern.lastIndex = 0;
129
+ let lastMatch: RegExpExecArray | null = null;
130
+ let currentMatch: RegExpExecArray | null;
131
+
132
+ while ((currentMatch = pattern.exec(content))) {
133
+ lastMatch = currentMatch;
134
+ }
135
+
136
+ pattern.lastIndex = 0;
137
+ return lastMatch;
138
+ }
@@ -0,0 +1,18 @@
1
+ import { loadTemplate } from './index';
2
+ import { OWNDESIGN_RUNTIME_SCRIPT_TAG } from './owndesign-runtime';
3
+
4
+ export function buildSingleHtmlTemplate({ title }: { title: string }) {
5
+ return renderTemplate(loadTemplate('html/page-shell'), {
6
+ lang: 'zh-CN',
7
+ runtimeScript: OWNDESIGN_RUNTIME_SCRIPT_TAG,
8
+ title: escapeHtmlText(title),
9
+ });
10
+ }
11
+
12
+ function renderTemplate(template: string, values: Record<string, string>) {
13
+ return `${template.replace(/\{\{([a-zA-Z0-9]+)\}\}/g, (_match, key: string) => values[key] ?? '')}\n`;
14
+ }
15
+
16
+ function escapeHtmlText(value: string) {
17
+ return value.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;');
18
+ }
@@ -1 +1 @@
1
- import{Bn as e}from"./index-DlSOjemg.js";import{t}from"./html-D8D_RndX.js";var n=[Object.freeze(JSON.parse('{"injectionSelector":"L:text.html -comment","name":"angular-expression","patterns":[{"include":"#ngExpression"}],"repository":{"arrayLiteral":{"begin":"\\\\[","beginCaptures":{"0":{"name":"meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.ts"}},"name":"meta.array.literal.ts","patterns":[{"include":"#ngExpression"},{"include":"#punctuationComma"}]},"booleanLiteral":{"patterns":[{"match":"(?<![$.])\\\\btrue\\\\b(?!\\\\$)","name":"constant.language.boolean.true.ts"},{"match":"(?<![$.])\\\\bfalse\\\\b(?!\\\\$)","name":"constant.language.boolean.false.ts"}]},"expressionOperator":{"patterns":[{"captures":{"1":{"name":"keyword.operator.logical.ts"},"2":{"name":"entity.name.function.pipe.ng"}},"match":"((?<!\\\\|)\\\\|(?!\\\\|))\\\\s?([-$0-9A-Z_a-z]*)"},{"match":"(?<![$.])\\\\b(let)\\\\b(?!\\\\$)","name":"storage.type.ts"},{"match":"(?<![$.])\\\\b(await)\\\\b(?!\\\\$)","name":"keyword.control.flow.ts"},{"match":"(?<![$.])\\\\bdelete\\\\b(?!\\\\$)","name":"keyword.operator.expression.delete.ts"},{"match":"(?<![$.])\\\\bin\\\\b(?!\\\\$)","name":"keyword.operator.expression.in.ts"},{"match":"(?<![$.])\\\\bof\\\\b(?!\\\\$)","name":"keyword.operator.expression.of.ts"},{"match":"(?<![$.])\\\\bif\\\\b(?!\\\\$)","name":"keyword.control.if.ts"},{"match":"(?<![$.])\\\\belse\\\\b(?!\\\\$)","name":"keyword.control.else.ts"},{"match":"(?<![$.])\\\\bthen\\\\b(?!\\\\$)","name":"keyword.control.then.ts"},{"match":"(?<![$.])\\\\binstanceof\\\\b(?!\\\\$)","name":"keyword.operator.expression.instanceof.ts"},{"match":"(?<![$.])\\\\bnew\\\\b(?!\\\\$)","name":"keyword.operator.new.ts"},{"match":"(?<![$.])\\\\bvoid\\\\b(?!\\\\$)","name":"keyword.operator.expression.void.ts"},{"begin":"(?<![$.])\\\\bas\\\\b(?!\\\\$)","beginCaptures":{"0":{"name":"storage.type.as.ts"}},"end":"(?=$|[]\\"\'),:;}])","patterns":[{"include":"#type"}]},{"match":"(?:\\\\*|(?<!\\\\()/|[-%+])=","name":"keyword.operator.assignment.compound.ts"},{"match":"(?:[\\\\&^]|<<|>>>??|\\\\|)=","name":"keyword.operator.assignment.compound.bitwise.ts"},{"match":"<<|>>>?","name":"keyword.operator.bitwise.shift.ts"},{"match":"[!=]==?","name":"keyword.operator.comparison.ts"},{"match":"<=|>=|<>|[<>]","name":"keyword.operator.relational.ts"},{"match":"!|&&|\\\\?\\\\?|\\\\|\\\\|","name":"keyword.operator.logical.ts"},{"match":"[\\\\&^|~]","name":"keyword.operator.bitwise.ts"},{"match":"=","name":"keyword.operator.assignment.ts"},{"match":"--","name":"keyword.operator.decrement.ts"},{"match":"\\\\+\\\\+","name":"keyword.operator.increment.ts"},{"match":"[-%*+/]","name":"keyword.operator.arithmetic.ts"},{"captures":{"1":{"name":"keyword.operator.arithmetic.ts"}},"match":"(?<=[$_[:alnum:]])\\\\s*(/)(?![*/])"},{"include":"#typeofOperator"}]},"functionCall":{"begin":"(?=(\\\\??\\\\.\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\()","end":"(?<=\\\\))(?!(\\\\??\\\\.\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\()","patterns":[{"match":"\\\\?","name":"punctuation.accessor.ts"},{"match":"\\\\.","name":"punctuation.accessor.ts"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.ts"},{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.ts"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#type"},{"include":"#punctuationComma"}]},{"include":"#parenExpression"}]},"functionParameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.ts"}},"name":"meta.parameters.ts","patterns":[{"include":"#decorator"},{"include":"#parameterName"},{"include":"#variableInitializer"},{"match":",","name":"punctuation.separator.parameter.ts"}]},"identifiers":{"patterns":[{"match":"([$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s*\\\\.\\\\s*prototype\\\\b(?!\\\\$))","name":"support.class.ts"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"constant.other.object.property.ts"},"3":{"name":"variable.other.object.property.ts"}},"match":"([!?]?\\\\.)\\\\s*(?:(\\\\p{upper}[$_\\\\d[:upper:]]*)|([$_[:alpha:]][$_[:alnum:]]*))(?=\\\\s*\\\\.\\\\s*[$_[:alpha:]][$_[:alnum:]]*)"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"entity.name.function.ts"}},"match":"(?:([!?]?\\\\.)\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s*=\\\\s*((async\\\\s+)|(function\\\\s*[(<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)|((<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)(\\\\s*:\\\\s*(.)*)?\\\\s*=>)))"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"constant.other.property.ts"}},"match":"([!?]?\\\\.)\\\\s*(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"variable.other.property.ts"}},"match":"([!?]?\\\\.)\\\\s*([$_[:alpha:]][$_[:alnum:]]*)"},{"captures":{"1":{"name":"constant.other.object.ts"},"2":{"name":"variable.other.object.ts"}},"match":"(?:(\\\\p{upper}[$_\\\\d[:upper:]]*)|([$_[:alpha:]][$_[:alnum:]]*))(?=\\\\s*\\\\.\\\\s*[$_[:alpha:]][$_[:alnum:]]*)"},{"match":"(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])","name":"constant.character.other"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"variable.other.readwrite.ts"}]},"literal":{"name":"literal.ts","patterns":[{"include":"#numericLiteral"},{"include":"#booleanLiteral"},{"include":"#nullLiteral"},{"include":"#undefinedLiteral"},{"include":"#numericConstantLiteral"},{"include":"#arrayLiteral"},{"include":"#thisLiteral"}]},"ngExpression":{"name":"meta.expression.ng","patterns":[{"include":"#string"},{"include":"#literal"},{"include":"#ternaryExpression"},{"include":"#expressionOperator"},{"include":"#functionCall"},{"include":"#identifiers"},{"include":"#parenExpression"},{"include":"#punctuationComma"},{"include":"#punctuationSemicolon"},{"include":"#punctuationAccessor"}]},"nullLiteral":{"match":"(?<![$.])\\\\bnull\\\\b(?!\\\\$)","name":"constant.language.null.ts"},"numericConstantLiteral":{"patterns":[{"match":"(?<![$.])\\\\bNaN\\\\b(?!\\\\$)","name":"constant.language.nan.ts"},{"match":"(?<![$.])\\\\bInfinity\\\\b(?!\\\\$)","name":"constant.language.infinity.ts"}]},"numericLiteral":{"patterns":[{"match":"\\\\b(?<!\\\\$)0([Xx])\\\\h+\\\\b(?!\\\\$)","name":"constant.numeric.hex.ts"},{"match":"\\\\b(?<!\\\\$)0([Bb])[01]+\\\\b(?!\\\\$)","name":"constant.numeric.binary.ts"},{"match":"\\\\\\\\b(?<!\\\\$)0([Oo])?[0-7]+\\\\b(?!\\\\$)","name":"constant.numeric.octal.ts"},{"captures":{"0":{"name":"constant.numeric.decimal.ts"},"1":{"name":"meta.delimiter.decimal.period.ts"},"2":{"name":"meta.delimiter.decimal.period.ts"},"3":{"name":"meta.delimiter.decimal.period.ts"},"4":{"name":"meta.delimiter.decimal.period.ts"},"5":{"name":"meta.delimiter.decimal.period.ts"},"6":{"name":"meta.delimiter.decimal.period.ts"}},"match":"(?<!\\\\$)(?:\\\\b[0-9]+(\\\\.)[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+(\\\\.)[Ee][-+]?[0-9]+\\\\b|\\\\B(\\\\.)[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+(\\\\.)\\\\B|\\\\B(\\\\.)[0-9]+\\\\b|\\\\b[0-9]+\\\\b(?!\\\\.))(?!\\\\$)"}]},"parameterName":{"patterns":[{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"storage.modifier.ts"},"3":{"name":"keyword.operator.rest.ts"},"4":{"name":"entity.name.function.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:\\\\s*\\\\b(readonly)\\\\s+)?(?:\\\\s*\\\\b(p(?:ublic|rivate|rotected))\\\\s+)?(\\\\.\\\\.\\\\.)?\\\\s*(?<![:=])([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(\\\\??)(?=\\\\s*(=\\\\s*((async\\\\s+)|(function\\\\s*[(<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)|((<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)(\\\\s*:\\\\s*(.)*)?\\\\s*=>)))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>))))))))"},{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"storage.modifier.ts"},"3":{"name":"keyword.operator.rest.ts"},"4":{"name":"variable.parameter.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:\\\\s*\\\\b(readonly)\\\\s+)?(?:\\\\s*\\\\b(p(?:ublic|rivate|rotected))\\\\s+)?(\\\\.\\\\.\\\\.)?\\\\s*(?<![:=])([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(\\\\??)"}]},"parenExpression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#ngExpression"},{"include":"#punctuationComma"}]},"punctuationAccessor":{"match":"(?:\\\\?|!?)\\\\.","name":"punctuation.accessor.ts"},"punctuationComma":{"match":",","name":"punctuation.separator.comma.ts"},"punctuationSemicolon":{"match":";","name":"punctuation.terminator.statement.ts"},"qstringDouble":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ts"}},"end":"(\\")|([^\\\\n\\\\\\\\])$","endCaptures":{"1":{"name":"punctuation.definition.string.end.ts"},"2":{"name":"invalid.illegal.newline.ts"}},"name":"string.quoted.double.ts","patterns":[{"include":"#stringCharacterEscape"}]},"qstringSingle":{"begin":"\'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ts"}},"end":"(\')|([^\\\\n\\\\\\\\])$","endCaptures":{"1":{"name":"punctuation.definition.string.end.ts"},"2":{"name":"invalid.illegal.newline.ts"}},"name":"string.quoted.single.ts","patterns":[{"include":"#stringCharacterEscape"}]},"string":{"patterns":[{"include":"#qstringSingle"},{"include":"#qstringDouble"},{"include":"#templateLiteral"}]},"stringCharacterEscape":{"match":"\\\\\\\\(x\\\\h{2}|[012][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)","name":"constant.character.escape.ts"},"templateLiteral":{"patterns":[{"include":"#templateLiteralCall"},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?(`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.ts"},"2":{"name":"string.template.ts punctuation.definition.string.template.begin.ts"}},"contentName":"string.template.ts","end":"`","endCaptures":{"0":{"name":"string.template.ts punctuation.definition.string.template.end.ts"}},"patterns":[{"include":"#templateLiteralSubstitutionElement"},{"include":"#stringCharacterEscape"}]}]},"templateLiteralCall":{"patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([$_[:alpha:]][$_[:alnum:]]*)(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\\\s*)?`)","end":"(?=`)","patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([$_[:alpha:]][$_[:alnum:]]*))","end":"(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\\\s*)?`)","patterns":[{"include":"#support-function-call-identifiers"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.tagged-template.ts"}]},{"include":"#typeArguments"}]},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?\\\\s*(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\\\s*)`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.ts"}},"end":"(?=`)","patterns":[{"include":"#typeArguments"}]}]},"templateLiteralSubstitutionElement":{"begin":"\\\\$\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.template-expression.begin.ts"}},"contentName":"meta.embedded.line.ts","end":"}","endCaptures":{"0":{"name":"punctuation.definition.template-expression.end.ts"}},"name":"meta.template.expression.ts","patterns":[{"include":"#ngExpression"}]},"ternaryExpression":{"begin":"(?!\\\\?\\\\.\\\\s*\\\\D)(\\\\?)(?!\\\\?)","beginCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"end":"\\\\s*(:)","endCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"patterns":[{"include":"#ngExpression"}]},"thisLiteral":{"match":"(?<![$.])\\\\bthis\\\\b(?!\\\\$)","name":"variable.language.this.ts"},"type":{"name":"meta.type.ts","patterns":[{"include":"#string"},{"include":"#numericLiteral"},{"include":"#typeBuiltinLiterals"},{"include":"#typeTuple"},{"include":"#typeObject"},{"include":"#typeOperators"},{"include":"#typeFnTypeParameters"},{"include":"#typeParenOrFunctionParameters"},{"include":"#typeName"}]},"typeAnnotation":{"begin":":","beginCaptures":{"0":{"name":"keyword.operator.type.annotation.ts"}},"end":"(?=$|[]),;}]|//|\\")|(?==[^>])|(?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)","name":"meta.type.annotation.ts","patterns":[{"include":"#type"}]},"typeArguments":{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.ts"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#typeArgumentsBody"}]},"typeArgumentsBody":{"patterns":[{"captures":{"0":{"name":"keyword.operator.type.ts"}},"match":"(?<![$_[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(_)(?![$_[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))"},{"include":"#type"},{"include":"#punctuationComma"}]},"typeBuiltinLiterals":{"match":"(?<![$.])\\\\b(this|true|false|undefined|null)\\\\b(?!\\\\$)","name":"support.type.builtin.ts"},"typeFnTypeParameters":{"patterns":[{"captures":{"1":{"name":"keyword.control.new.ts"}},"match":"(?<![$.])\\\\b(new)\\\\b(?=\\\\s*<)","name":"meta.type.constructor.ts"},{"begin":"(?<![$.])\\\\b(new)\\\\b\\\\s*(?=\\\\()","beginCaptures":{"1":{"name":"keyword.control.new.ts"}},"end":"(?<=\\\\))","name":"meta.type.constructor.ts","patterns":[{"include":"#functionParameters"}]},{"begin":"(?<=>)\\\\s*(?=\\\\()","end":"(?<=\\\\))","include":"#typeofOperator","name":"meta.type.function.ts","patterns":[{"include":"#functionParameters"}]},{"begin":"((?=\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>))))))","end":"(?<=\\\\))","name":"meta.type.function.ts","patterns":[{"include":"#functionParameters"}]}]},"typeName":{"patterns":[{"captures":{"1":{"name":"entity.name.type.module.ts"},"2":{"name":"punctuation.accessor.ts"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*([!?]?\\\\.)"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"entity.name.type.ts"}]},"typeObject":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"name":"meta.object.type.ts","patterns":[{"include":"#typeObjectMembers"}]},"typeObjectMembers":{"patterns":[{"include":"#typeAnnotation"},{"include":"#punctuationComma"},{"include":"#punctuationSemicolon"}]},"typeOperators":{"patterns":[{"include":"#typeofOperator"},{"match":"[\\\\&|]","name":"keyword.operator.type.ts"},{"match":"(?<![$.])\\\\bkeyof\\\\b(?!\\\\$)","name":"keyword.operator.expression.keyof.ts"}]},"typeParenOrFunctionParameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"name":"meta.type.paren.cover.ts","patterns":[{"include":"#type"},{"include":"#functionParameters"}]},"typeTuple":{"begin":"\\\\[","beginCaptures":{"0":{"name":"meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.ts"}},"name":"meta.type.tuple.ts","patterns":[{"include":"#type"},{"include":"#punctuationComma"}]},"typeofOperator":{"match":"(?<![$.])\\\\btypeof\\\\b(?!\\\\$)","name":"keyword.operator.expression.typeof.ts"},"undefinedLiteral":{"match":"(?<![$.])\\\\bundefined\\\\b(?!\\\\$)","name":"constant.language.undefined.ts"},"variableInitializer":{"begin":"(?<![!=])(=)(?!=)","beginCaptures":{"1":{"name":"keyword.operator.assignment.ts"}},"end":"(?=$|[]),;}])","patterns":[{"include":"#ngExpression"}]}},"scopeName":"expression.ng"}'))],r=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment -expression.ng -meta.tag -source.css -source.js","name":"angular-let-declaration","patterns":[{"include":"#letDeclaration"}],"repository":{"letDeclaration":{"begin":"(@let)\\\\s+([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(=)?","beginCaptures":{"1":{"name":"storage.type.ng"},"2":{"name":"variable.other.constant.ng"},"3":{"name":"keyword.operator.assignment.ng"}},"end":"(?<=;)","name":"meta.definition.variable.ng","patterns":[{"include":"#letInitializer"}]},"letInitializer":{"begin":"\\\\s*","beginCaptures":{"0":{"name":"keyword.operator.assignment.ng"}},"contentName":"meta.definition.variable.initializer.ng","end":";","endCaptures":{"0":{"name":"punctuation.terminator.statement.ng"}},"patterns":[{"include":"expression.ng"}]}},"scopeName":"template.let.ng","embeddedLangs":["angular-expression"]}`)),i=[...n,r],a=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment","name":"angular-template","patterns":[{"include":"#interpolation"}],"repository":{"interpolation":{"begin":"\\\\{\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"contentName":"expression.ng","end":"}}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"patterns":[{"include":"expression.ng"}]}},"scopeName":"template.ng","embeddedLangs":["angular-expression"]}`)),o=[...n,a],s=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment -expression.ng -meta.tag -source.css -source.js","name":"angular-template-blocks","patterns":[{"include":"#block"}],"repository":{"block":{"begin":"(@)(if|else if|else|defer|placeholder|loading|error|switch|case|default|for|empty)\\\\s*","beginCaptures":{"1":{"patterns":[{"include":"#transition"}]},"2":{"name":"keyword.control.block.kind.ng"}},"end":"(?<=})","name":"control.block.ng","patterns":[{"include":"#blockExpression"},{"include":"#blockBody"}]},"blockBody":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"contentName":"control.block.body.ng","end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"patterns":[{"include":"text.html.derivative.ng"},{"include":"template.ng"}]},"blockExpression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"contentName":"control.block.expression.ng","end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#blockExpressionOfClause"},{"include":"#blockExpressionLetBinding"},{"include":"#blockExpressionTrackClause"},{"include":"expression.ng"}]},"blockExpressionLetBinding":{"begin":"\\\\blet\\\\b","beginCaptures":{"0":{"name":"storage.type.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"blockExpressionOfClause":{"begin":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s+(of)\\\\b","beginCaptures":{"1":{"name":"variable.other.constant.ng"},"2":{"name":"keyword.operator.expression.of.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"blockExpressionTrackClause":{"begin":"\\\\btrack\\\\b","beginCaptures":{"0":{"name":"keyword.control.track.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"transition":{"match":"@","name":"keyword.control.block.transition.ng"}},"scopeName":"template.blocks.ng","embeddedLangs":["angular-expression","angular-template"]}`)),c=[...n,...o,s],l=e({default:()=>d}),u=Object.freeze(JSON.parse(`{"displayName":"Angular HTML","injections":{"R:text.html - (comment.block, text.html meta.embedded, meta.tag.*.*.html, meta.tag.*.*.*.html, meta.tag.*.*.*.*.html)":{"patterns":[{"match":"<","name":"invalid.illegal.bad-angle-bracket.html"}]}},"name":"angular-html","patterns":[{"include":"text.html.basic#core-minus-invalid"},{"begin":"(</?)(\\\\w[^>\\\\s]*)(?<!/)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":"((?: ?/)?>)","endCaptures":{"1":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.other.unrecognized.html.derivative","patterns":[{"include":"text.html.basic#attribute"}]}],"scopeName":"text.html.derivative.ng","embeddedLangs":["html","angular-expression","angular-let-declaration","angular-template","angular-template-blocks"]}`)),d=[...t,...n,...i,...o,...c,u];export{i as a,o as i,l as n,n as o,c as r,d as t};
1
+ import{Bn as e}from"./index-YSa89xAk.js";import{t}from"./html-BF5zzurH.js";var n=[Object.freeze(JSON.parse('{"injectionSelector":"L:text.html -comment","name":"angular-expression","patterns":[{"include":"#ngExpression"}],"repository":{"arrayLiteral":{"begin":"\\\\[","beginCaptures":{"0":{"name":"meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.ts"}},"name":"meta.array.literal.ts","patterns":[{"include":"#ngExpression"},{"include":"#punctuationComma"}]},"booleanLiteral":{"patterns":[{"match":"(?<![$.])\\\\btrue\\\\b(?!\\\\$)","name":"constant.language.boolean.true.ts"},{"match":"(?<![$.])\\\\bfalse\\\\b(?!\\\\$)","name":"constant.language.boolean.false.ts"}]},"expressionOperator":{"patterns":[{"captures":{"1":{"name":"keyword.operator.logical.ts"},"2":{"name":"entity.name.function.pipe.ng"}},"match":"((?<!\\\\|)\\\\|(?!\\\\|))\\\\s?([-$0-9A-Z_a-z]*)"},{"match":"(?<![$.])\\\\b(let)\\\\b(?!\\\\$)","name":"storage.type.ts"},{"match":"(?<![$.])\\\\b(await)\\\\b(?!\\\\$)","name":"keyword.control.flow.ts"},{"match":"(?<![$.])\\\\bdelete\\\\b(?!\\\\$)","name":"keyword.operator.expression.delete.ts"},{"match":"(?<![$.])\\\\bin\\\\b(?!\\\\$)","name":"keyword.operator.expression.in.ts"},{"match":"(?<![$.])\\\\bof\\\\b(?!\\\\$)","name":"keyword.operator.expression.of.ts"},{"match":"(?<![$.])\\\\bif\\\\b(?!\\\\$)","name":"keyword.control.if.ts"},{"match":"(?<![$.])\\\\belse\\\\b(?!\\\\$)","name":"keyword.control.else.ts"},{"match":"(?<![$.])\\\\bthen\\\\b(?!\\\\$)","name":"keyword.control.then.ts"},{"match":"(?<![$.])\\\\binstanceof\\\\b(?!\\\\$)","name":"keyword.operator.expression.instanceof.ts"},{"match":"(?<![$.])\\\\bnew\\\\b(?!\\\\$)","name":"keyword.operator.new.ts"},{"match":"(?<![$.])\\\\bvoid\\\\b(?!\\\\$)","name":"keyword.operator.expression.void.ts"},{"begin":"(?<![$.])\\\\bas\\\\b(?!\\\\$)","beginCaptures":{"0":{"name":"storage.type.as.ts"}},"end":"(?=$|[]\\"\'),:;}])","patterns":[{"include":"#type"}]},{"match":"(?:\\\\*|(?<!\\\\()/|[-%+])=","name":"keyword.operator.assignment.compound.ts"},{"match":"(?:[\\\\&^]|<<|>>>??|\\\\|)=","name":"keyword.operator.assignment.compound.bitwise.ts"},{"match":"<<|>>>?","name":"keyword.operator.bitwise.shift.ts"},{"match":"[!=]==?","name":"keyword.operator.comparison.ts"},{"match":"<=|>=|<>|[<>]","name":"keyword.operator.relational.ts"},{"match":"!|&&|\\\\?\\\\?|\\\\|\\\\|","name":"keyword.operator.logical.ts"},{"match":"[\\\\&^|~]","name":"keyword.operator.bitwise.ts"},{"match":"=","name":"keyword.operator.assignment.ts"},{"match":"--","name":"keyword.operator.decrement.ts"},{"match":"\\\\+\\\\+","name":"keyword.operator.increment.ts"},{"match":"[-%*+/]","name":"keyword.operator.arithmetic.ts"},{"captures":{"1":{"name":"keyword.operator.arithmetic.ts"}},"match":"(?<=[$_[:alnum:]])\\\\s*(/)(?![*/])"},{"include":"#typeofOperator"}]},"functionCall":{"begin":"(?=(\\\\??\\\\.\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\()","end":"(?<=\\\\))(?!(\\\\??\\\\.\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\()","patterns":[{"match":"\\\\?","name":"punctuation.accessor.ts"},{"match":"\\\\.","name":"punctuation.accessor.ts"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.ts"},{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.ts"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#type"},{"include":"#punctuationComma"}]},{"include":"#parenExpression"}]},"functionParameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"punctuation.definition.parameters.begin.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"punctuation.definition.parameters.end.ts"}},"name":"meta.parameters.ts","patterns":[{"include":"#decorator"},{"include":"#parameterName"},{"include":"#variableInitializer"},{"match":",","name":"punctuation.separator.parameter.ts"}]},"identifiers":{"patterns":[{"match":"([$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s*\\\\.\\\\s*prototype\\\\b(?!\\\\$))","name":"support.class.ts"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"constant.other.object.property.ts"},"3":{"name":"variable.other.object.property.ts"}},"match":"([!?]?\\\\.)\\\\s*(?:(\\\\p{upper}[$_\\\\d[:upper:]]*)|([$_[:alpha:]][$_[:alnum:]]*))(?=\\\\s*\\\\.\\\\s*[$_[:alpha:]][$_[:alnum:]]*)"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"entity.name.function.ts"}},"match":"(?:([!?]?\\\\.)\\\\s*)?([$_[:alpha:]][$_[:alnum:]]*)(?=\\\\s*=\\\\s*((async\\\\s+)|(function\\\\s*[(<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)|((<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)(\\\\s*:\\\\s*(.)*)?\\\\s*=>)))"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"constant.other.property.ts"}},"match":"([!?]?\\\\.)\\\\s*(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])"},{"captures":{"1":{"name":"punctuation.accessor.ts"},"2":{"name":"variable.other.property.ts"}},"match":"([!?]?\\\\.)\\\\s*([$_[:alpha:]][$_[:alnum:]]*)"},{"captures":{"1":{"name":"constant.other.object.ts"},"2":{"name":"variable.other.object.ts"}},"match":"(?:(\\\\p{upper}[$_\\\\d[:upper:]]*)|([$_[:alpha:]][$_[:alnum:]]*))(?=\\\\s*\\\\.\\\\s*[$_[:alpha:]][$_[:alnum:]]*)"},{"match":"(\\\\p{upper}[$_\\\\d[:upper:]]*)(?![$_[:alnum:]])","name":"constant.character.other"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"variable.other.readwrite.ts"}]},"literal":{"name":"literal.ts","patterns":[{"include":"#numericLiteral"},{"include":"#booleanLiteral"},{"include":"#nullLiteral"},{"include":"#undefinedLiteral"},{"include":"#numericConstantLiteral"},{"include":"#arrayLiteral"},{"include":"#thisLiteral"}]},"ngExpression":{"name":"meta.expression.ng","patterns":[{"include":"#string"},{"include":"#literal"},{"include":"#ternaryExpression"},{"include":"#expressionOperator"},{"include":"#functionCall"},{"include":"#identifiers"},{"include":"#parenExpression"},{"include":"#punctuationComma"},{"include":"#punctuationSemicolon"},{"include":"#punctuationAccessor"}]},"nullLiteral":{"match":"(?<![$.])\\\\bnull\\\\b(?!\\\\$)","name":"constant.language.null.ts"},"numericConstantLiteral":{"patterns":[{"match":"(?<![$.])\\\\bNaN\\\\b(?!\\\\$)","name":"constant.language.nan.ts"},{"match":"(?<![$.])\\\\bInfinity\\\\b(?!\\\\$)","name":"constant.language.infinity.ts"}]},"numericLiteral":{"patterns":[{"match":"\\\\b(?<!\\\\$)0([Xx])\\\\h+\\\\b(?!\\\\$)","name":"constant.numeric.hex.ts"},{"match":"\\\\b(?<!\\\\$)0([Bb])[01]+\\\\b(?!\\\\$)","name":"constant.numeric.binary.ts"},{"match":"\\\\\\\\b(?<!\\\\$)0([Oo])?[0-7]+\\\\b(?!\\\\$)","name":"constant.numeric.octal.ts"},{"captures":{"0":{"name":"constant.numeric.decimal.ts"},"1":{"name":"meta.delimiter.decimal.period.ts"},"2":{"name":"meta.delimiter.decimal.period.ts"},"3":{"name":"meta.delimiter.decimal.period.ts"},"4":{"name":"meta.delimiter.decimal.period.ts"},"5":{"name":"meta.delimiter.decimal.period.ts"},"6":{"name":"meta.delimiter.decimal.period.ts"}},"match":"(?<!\\\\$)(?:\\\\b[0-9]+(\\\\.)[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+(\\\\.)[Ee][-+]?[0-9]+\\\\b|\\\\B(\\\\.)[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+[Ee][-+]?[0-9]+\\\\b|\\\\b[0-9]+(\\\\.)\\\\B|\\\\B(\\\\.)[0-9]+\\\\b|\\\\b[0-9]+\\\\b(?!\\\\.))(?!\\\\$)"}]},"parameterName":{"patterns":[{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"storage.modifier.ts"},"3":{"name":"keyword.operator.rest.ts"},"4":{"name":"entity.name.function.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:\\\\s*\\\\b(readonly)\\\\s+)?(?:\\\\s*\\\\b(p(?:ublic|rivate|rotected))\\\\s+)?(\\\\.\\\\.\\\\.)?\\\\s*(?<![:=])([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(\\\\??)(?=\\\\s*(=\\\\s*((async\\\\s+)|(function\\\\s*[(<])|(function\\\\s+)|([$_[:alpha:]][$_[:alnum:]]*\\\\s*=>)|((<([^<>]|<[^<>]+>)+>\\\\s*)?\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)(\\\\s*:\\\\s*(.)*)?\\\\s*=>)))|(:\\\\s*((<)|(\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>))))))))"},{"captures":{"1":{"name":"storage.modifier.ts"},"2":{"name":"storage.modifier.ts"},"3":{"name":"keyword.operator.rest.ts"},"4":{"name":"variable.parameter.ts"},"5":{"name":"keyword.operator.optional.ts"}},"match":"(?:\\\\s*\\\\b(readonly)\\\\s+)?(?:\\\\s*\\\\b(p(?:ublic|rivate|rotected))\\\\s+)?(\\\\.\\\\.\\\\.)?\\\\s*(?<![:=])([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(\\\\??)"}]},"parenExpression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#ngExpression"},{"include":"#punctuationComma"}]},"punctuationAccessor":{"match":"(?:\\\\?|!?)\\\\.","name":"punctuation.accessor.ts"},"punctuationComma":{"match":",","name":"punctuation.separator.comma.ts"},"punctuationSemicolon":{"match":";","name":"punctuation.terminator.statement.ts"},"qstringDouble":{"begin":"\\"","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ts"}},"end":"(\\")|([^\\\\n\\\\\\\\])$","endCaptures":{"1":{"name":"punctuation.definition.string.end.ts"},"2":{"name":"invalid.illegal.newline.ts"}},"name":"string.quoted.double.ts","patterns":[{"include":"#stringCharacterEscape"}]},"qstringSingle":{"begin":"\'","beginCaptures":{"0":{"name":"punctuation.definition.string.begin.ts"}},"end":"(\')|([^\\\\n\\\\\\\\])$","endCaptures":{"1":{"name":"punctuation.definition.string.end.ts"},"2":{"name":"invalid.illegal.newline.ts"}},"name":"string.quoted.single.ts","patterns":[{"include":"#stringCharacterEscape"}]},"string":{"patterns":[{"include":"#qstringSingle"},{"include":"#qstringDouble"},{"include":"#templateLiteral"}]},"stringCharacterEscape":{"match":"\\\\\\\\(x\\\\h{2}|[012][0-7]{0,2}|3[0-6][0-7]?|37[0-7]?|[4-7][0-7]?|.|$)","name":"constant.character.escape.ts"},"templateLiteral":{"patterns":[{"include":"#templateLiteralCall"},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?(`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.ts"},"2":{"name":"string.template.ts punctuation.definition.string.template.begin.ts"}},"contentName":"string.template.ts","end":"`","endCaptures":{"0":{"name":"string.template.ts punctuation.definition.string.template.end.ts"}},"patterns":[{"include":"#templateLiteralSubstitutionElement"},{"include":"#stringCharacterEscape"}]}]},"templateLiteralCall":{"patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([$_[:alpha:]][$_[:alnum:]]*)(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\\\s*)?`)","end":"(?=`)","patterns":[{"begin":"(?=(([$_[:alpha:]][$_[:alnum:]]*\\\\s*\\\\??\\\\.\\\\s*)*|(\\\\??\\\\.\\\\s*)?)([$_[:alpha:]][$_[:alnum:]]*))","end":"(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\\\s*)?`)","patterns":[{"include":"#support-function-call-identifiers"},{"match":"([$_[:alpha:]][$_[:alnum:]]*)","name":"entity.name.function.tagged-template.ts"}]},{"include":"#typeArguments"}]},{"begin":"([$_[:alpha:]][$_[:alnum:]]*)?\\\\s*(?=(<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))(([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>|<\\\\s*(((keyof|infer|typeof|readonly)\\\\s+)|(([$_[:alpha:]][$_[:alnum:]]*|(\\\\{([^{}]|(\\\\{([^{}]|\\\\{[^{}]*})*}))*})|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(\\\\[([^]\\\\[]|(\\\\[([^]\\\\[]|\\\\[[^]\\\\[]*])*]))*])|(\'([^\'\\\\\\\\]|\\\\\\\\.)*\')|(\\"([^\\"\\\\\\\\]|\\\\\\\\.)*\\")|(`([^\\\\\\\\`]|\\\\\\\\.)*`))(?=\\\\s*([,.<>\\\\[]|=>|&(?!&)|\\\\|(?!\\\\|)))))([^(<>]|(\\\\(([^()]|(\\\\(([^()]|\\\\([^()]*\\\\))*\\\\)))*\\\\))|(?<==)>)*(?<!=)>))*(?<!=)>)*(?<!=)>\\\\s*)`)","beginCaptures":{"1":{"name":"entity.name.function.tagged-template.ts"}},"end":"(?=`)","patterns":[{"include":"#typeArguments"}]}]},"templateLiteralSubstitutionElement":{"begin":"\\\\$\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.template-expression.begin.ts"}},"contentName":"meta.embedded.line.ts","end":"}","endCaptures":{"0":{"name":"punctuation.definition.template-expression.end.ts"}},"name":"meta.template.expression.ts","patterns":[{"include":"#ngExpression"}]},"ternaryExpression":{"begin":"(?!\\\\?\\\\.\\\\s*\\\\D)(\\\\?)(?!\\\\?)","beginCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"end":"\\\\s*(:)","endCaptures":{"1":{"name":"keyword.operator.ternary.ts"}},"patterns":[{"include":"#ngExpression"}]},"thisLiteral":{"match":"(?<![$.])\\\\bthis\\\\b(?!\\\\$)","name":"variable.language.this.ts"},"type":{"name":"meta.type.ts","patterns":[{"include":"#string"},{"include":"#numericLiteral"},{"include":"#typeBuiltinLiterals"},{"include":"#typeTuple"},{"include":"#typeObject"},{"include":"#typeOperators"},{"include":"#typeFnTypeParameters"},{"include":"#typeParenOrFunctionParameters"},{"include":"#typeName"}]},"typeAnnotation":{"begin":":","beginCaptures":{"0":{"name":"keyword.operator.type.annotation.ts"}},"end":"(?=$|[]),;}]|//|\\")|(?==[^>])|(?<=[]$)>_}[:alpha:]])\\\\s*(?=\\\\{)","name":"meta.type.annotation.ts","patterns":[{"include":"#type"}]},"typeArguments":{"begin":"<","beginCaptures":{"0":{"name":"punctuation.definition.typeparameters.begin.ts"}},"end":">","endCaptures":{"0":{"name":"punctuation.definition.typeparameters.end.ts"}},"name":"meta.type.parameters.ts","patterns":[{"include":"#typeArgumentsBody"}]},"typeArgumentsBody":{"patterns":[{"captures":{"0":{"name":"keyword.operator.type.ts"}},"match":"(?<![$_[:alnum:]])(?:(?<=\\\\.\\\\.\\\\.)|(?<!\\\\.))(_)(?![$_[:alnum:]])(?:(?=\\\\.\\\\.\\\\.)|(?!\\\\.))"},{"include":"#type"},{"include":"#punctuationComma"}]},"typeBuiltinLiterals":{"match":"(?<![$.])\\\\b(this|true|false|undefined|null)\\\\b(?!\\\\$)","name":"support.type.builtin.ts"},"typeFnTypeParameters":{"patterns":[{"captures":{"1":{"name":"keyword.control.new.ts"}},"match":"(?<![$.])\\\\b(new)\\\\b(?=\\\\s*<)","name":"meta.type.constructor.ts"},{"begin":"(?<![$.])\\\\b(new)\\\\b\\\\s*(?=\\\\()","beginCaptures":{"1":{"name":"keyword.control.new.ts"}},"end":"(?<=\\\\))","name":"meta.type.constructor.ts","patterns":[{"include":"#functionParameters"}]},{"begin":"(?<=>)\\\\s*(?=\\\\()","end":"(?<=\\\\))","include":"#typeofOperator","name":"meta.type.function.ts","patterns":[{"include":"#functionParameters"}]},{"begin":"((?=\\\\(\\\\s*((\\\\))|(\\\\.\\\\.\\\\.)|([$_[:alnum:]]+\\\\s*(([,:=?])|(\\\\)\\\\s*=>))))))","end":"(?<=\\\\))","name":"meta.type.function.ts","patterns":[{"include":"#functionParameters"}]}]},"typeName":{"patterns":[{"captures":{"1":{"name":"entity.name.type.module.ts"},"2":{"name":"punctuation.accessor.ts"}},"match":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s*([!?]?\\\\.)"},{"match":"[$_[:alpha:]][$_[:alnum:]]*","name":"entity.name.type.ts"}]},"typeObject":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"name":"meta.object.type.ts","patterns":[{"include":"#typeObjectMembers"}]},"typeObjectMembers":{"patterns":[{"include":"#typeAnnotation"},{"include":"#punctuationComma"},{"include":"#punctuationSemicolon"}]},"typeOperators":{"patterns":[{"include":"#typeofOperator"},{"match":"[\\\\&|]","name":"keyword.operator.type.ts"},{"match":"(?<![$.])\\\\bkeyof\\\\b(?!\\\\$)","name":"keyword.operator.expression.keyof.ts"}]},"typeParenOrFunctionParameters":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"name":"meta.type.paren.cover.ts","patterns":[{"include":"#type"},{"include":"#functionParameters"}]},"typeTuple":{"begin":"\\\\[","beginCaptures":{"0":{"name":"meta.brace.square.ts"}},"end":"]","endCaptures":{"0":{"name":"meta.brace.square.ts"}},"name":"meta.type.tuple.ts","patterns":[{"include":"#type"},{"include":"#punctuationComma"}]},"typeofOperator":{"match":"(?<![$.])\\\\btypeof\\\\b(?!\\\\$)","name":"keyword.operator.expression.typeof.ts"},"undefinedLiteral":{"match":"(?<![$.])\\\\bundefined\\\\b(?!\\\\$)","name":"constant.language.undefined.ts"},"variableInitializer":{"begin":"(?<![!=])(=)(?!=)","beginCaptures":{"1":{"name":"keyword.operator.assignment.ts"}},"end":"(?=$|[]),;}])","patterns":[{"include":"#ngExpression"}]}},"scopeName":"expression.ng"}'))],r=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment -expression.ng -meta.tag -source.css -source.js","name":"angular-let-declaration","patterns":[{"include":"#letDeclaration"}],"repository":{"letDeclaration":{"begin":"(@let)\\\\s+([$_[:alpha:]][$_[:alnum:]]*)\\\\s*(=)?","beginCaptures":{"1":{"name":"storage.type.ng"},"2":{"name":"variable.other.constant.ng"},"3":{"name":"keyword.operator.assignment.ng"}},"end":"(?<=;)","name":"meta.definition.variable.ng","patterns":[{"include":"#letInitializer"}]},"letInitializer":{"begin":"\\\\s*","beginCaptures":{"0":{"name":"keyword.operator.assignment.ng"}},"contentName":"meta.definition.variable.initializer.ng","end":";","endCaptures":{"0":{"name":"punctuation.terminator.statement.ng"}},"patterns":[{"include":"expression.ng"}]}},"scopeName":"template.let.ng","embeddedLangs":["angular-expression"]}`)),i=[...n,r],a=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment","name":"angular-template","patterns":[{"include":"#interpolation"}],"repository":{"interpolation":{"begin":"\\\\{\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"contentName":"expression.ng","end":"}}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"patterns":[{"include":"expression.ng"}]}},"scopeName":"template.ng","embeddedLangs":["angular-expression"]}`)),o=[...n,a],s=Object.freeze(JSON.parse(`{"injectTo":["text.html.derivative","text.html.derivative.ng","source.ts.ng"],"injectionSelector":"L:text.html -comment -expression.ng -meta.tag -source.css -source.js","name":"angular-template-blocks","patterns":[{"include":"#block"}],"repository":{"block":{"begin":"(@)(if|else if|else|defer|placeholder|loading|error|switch|case|default|for|empty)\\\\s*","beginCaptures":{"1":{"patterns":[{"include":"#transition"}]},"2":{"name":"keyword.control.block.kind.ng"}},"end":"(?<=})","name":"control.block.ng","patterns":[{"include":"#blockExpression"},{"include":"#blockBody"}]},"blockBody":{"begin":"\\\\{","beginCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"contentName":"control.block.body.ng","end":"}","endCaptures":{"0":{"name":"punctuation.definition.block.ts"}},"patterns":[{"include":"text.html.derivative.ng"},{"include":"template.ng"}]},"blockExpression":{"begin":"\\\\(","beginCaptures":{"0":{"name":"meta.brace.round.ts"}},"contentName":"control.block.expression.ng","end":"\\\\)","endCaptures":{"0":{"name":"meta.brace.round.ts"}},"patterns":[{"include":"#blockExpressionOfClause"},{"include":"#blockExpressionLetBinding"},{"include":"#blockExpressionTrackClause"},{"include":"expression.ng"}]},"blockExpressionLetBinding":{"begin":"\\\\blet\\\\b","beginCaptures":{"0":{"name":"storage.type.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"blockExpressionOfClause":{"begin":"([$_[:alpha:]][$_[:alnum:]]*)\\\\s+(of)\\\\b","beginCaptures":{"1":{"name":"variable.other.constant.ng"},"2":{"name":"keyword.operator.expression.of.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"blockExpressionTrackClause":{"begin":"\\\\btrack\\\\b","beginCaptures":{"0":{"name":"keyword.control.track.ng"}},"end":"(?=[$)])|(?<=;)","patterns":[{"include":"expression.ng"}]},"transition":{"match":"@","name":"keyword.control.block.transition.ng"}},"scopeName":"template.blocks.ng","embeddedLangs":["angular-expression","angular-template"]}`)),c=[...n,...o,s],l=e({default:()=>d}),u=Object.freeze(JSON.parse(`{"displayName":"Angular HTML","injections":{"R:text.html - (comment.block, text.html meta.embedded, meta.tag.*.*.html, meta.tag.*.*.*.html, meta.tag.*.*.*.*.html)":{"patterns":[{"match":"<","name":"invalid.illegal.bad-angle-bracket.html"}]}},"name":"angular-html","patterns":[{"include":"text.html.basic#core-minus-invalid"},{"begin":"(</?)(\\\\w[^>\\\\s]*)(?<!/)","beginCaptures":{"1":{"name":"punctuation.definition.tag.begin.html"},"2":{"name":"entity.name.tag.html"}},"end":"((?: ?/)?>)","endCaptures":{"1":{"name":"punctuation.definition.tag.end.html"}},"name":"meta.tag.other.unrecognized.html.derivative","patterns":[{"include":"text.html.basic#attribute"}]}],"scopeName":"text.html.derivative.ng","embeddedLangs":["html","angular-expression","angular-let-declaration","angular-template","angular-template-blocks"]}`)),d=[...t,...n,...i,...o,...c,u];export{i as a,o as i,l as n,n as o,c as r,d as t};