@powerhousedao/contributor-billing 0.1.40 → 0.1.42

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 (307) hide show
  1. package/dist/document-models/document-models.d.ts.map +1 -1
  2. package/dist/document-models/document-models.js +2 -0
  3. package/dist/document-models/index.d.ts +1 -0
  4. package/dist/document-models/index.d.ts.map +1 -1
  5. package/dist/document-models/index.js +1 -0
  6. package/dist/document-models/resource-template/actions.d.ts +32 -0
  7. package/dist/document-models/resource-template/actions.d.ts.map +1 -0
  8. package/dist/document-models/resource-template/actions.js +12 -0
  9. package/dist/document-models/resource-template/gen/actions.d.ts +14 -0
  10. package/dist/document-models/resource-template/gen/actions.d.ts.map +1 -0
  11. package/dist/document-models/resource-template/gen/actions.js +6 -0
  12. package/dist/document-models/resource-template/gen/audience-management/actions.d.ts +12 -0
  13. package/dist/document-models/resource-template/gen/audience-management/actions.d.ts.map +1 -0
  14. package/dist/document-models/resource-template/gen/audience-management/actions.js +1 -0
  15. package/dist/document-models/resource-template/gen/audience-management/creators.d.ts +5 -0
  16. package/dist/document-models/resource-template/gen/audience-management/creators.d.ts.map +1 -0
  17. package/dist/document-models/resource-template/gen/audience-management/creators.js +4 -0
  18. package/dist/document-models/resource-template/gen/audience-management/error.d.ts +21 -0
  19. package/dist/document-models/resource-template/gen/audience-management/error.d.ts.map +1 -0
  20. package/dist/document-models/resource-template/gen/audience-management/error.js +20 -0
  21. package/dist/document-models/resource-template/gen/audience-management/operations.d.ts +8 -0
  22. package/dist/document-models/resource-template/gen/audience-management/operations.d.ts.map +1 -0
  23. package/dist/document-models/resource-template/gen/audience-management/operations.js +3 -0
  24. package/dist/document-models/resource-template/gen/creators.d.ts +13 -0
  25. package/dist/document-models/resource-template/gen/creators.d.ts.map +1 -0
  26. package/dist/document-models/resource-template/gen/creators.js +12 -0
  27. package/dist/document-models/resource-template/gen/document-model.d.ts +3 -0
  28. package/dist/document-models/resource-template/gen/document-model.d.ts.map +1 -0
  29. package/dist/document-models/resource-template/gen/document-model.js +410 -0
  30. package/dist/document-models/resource-template/gen/document-schema.d.ts +408 -0
  31. package/dist/document-models/resource-template/gen/document-schema.d.ts.map +1 -0
  32. package/dist/document-models/resource-template/gen/document-schema.js +33 -0
  33. package/dist/document-models/resource-template/gen/document-type.d.ts +2 -0
  34. package/dist/document-models/resource-template/gen/document-type.d.ts.map +1 -0
  35. package/dist/document-models/resource-template/gen/document-type.js +1 -0
  36. package/dist/document-models/resource-template/gen/facet-targeting/actions.d.ts +20 -0
  37. package/dist/document-models/resource-template/gen/facet-targeting/actions.d.ts.map +1 -0
  38. package/dist/document-models/resource-template/gen/facet-targeting/actions.js +1 -0
  39. package/dist/document-models/resource-template/gen/facet-targeting/creators.d.ts +7 -0
  40. package/dist/document-models/resource-template/gen/facet-targeting/creators.d.ts.map +1 -0
  41. package/dist/document-models/resource-template/gen/facet-targeting/creators.js +6 -0
  42. package/dist/document-models/resource-template/gen/facet-targeting/error.d.ts +28 -0
  43. package/dist/document-models/resource-template/gen/facet-targeting/error.d.ts.map +1 -0
  44. package/dist/document-models/resource-template/gen/facet-targeting/error.js +29 -0
  45. package/dist/document-models/resource-template/gen/facet-targeting/operations.d.ts +10 -0
  46. package/dist/document-models/resource-template/gen/facet-targeting/operations.d.ts.map +1 -0
  47. package/dist/document-models/resource-template/gen/facet-targeting/operations.js +3 -0
  48. package/dist/document-models/resource-template/gen/index.d.ts +17 -0
  49. package/dist/document-models/resource-template/gen/index.d.ts.map +1 -0
  50. package/dist/document-models/resource-template/gen/index.js +16 -0
  51. package/dist/document-models/resource-template/gen/option-group-management/actions.d.ts +16 -0
  52. package/dist/document-models/resource-template/gen/option-group-management/actions.d.ts.map +1 -0
  53. package/dist/document-models/resource-template/gen/option-group-management/actions.js +1 -0
  54. package/dist/document-models/resource-template/gen/option-group-management/creators.d.ts +6 -0
  55. package/dist/document-models/resource-template/gen/option-group-management/creators.d.ts.map +1 -0
  56. package/dist/document-models/resource-template/gen/option-group-management/creators.js +5 -0
  57. package/dist/document-models/resource-template/gen/option-group-management/error.d.ts +28 -0
  58. package/dist/document-models/resource-template/gen/option-group-management/error.d.ts.map +1 -0
  59. package/dist/document-models/resource-template/gen/option-group-management/error.js +29 -0
  60. package/dist/document-models/resource-template/gen/option-group-management/operations.d.ts +9 -0
  61. package/dist/document-models/resource-template/gen/option-group-management/operations.d.ts.map +1 -0
  62. package/dist/document-models/resource-template/gen/option-group-management/operations.js +3 -0
  63. package/dist/document-models/resource-template/gen/ph-factories.d.ts +23 -0
  64. package/dist/document-models/resource-template/gen/ph-factories.d.ts.map +1 -0
  65. package/dist/document-models/resource-template/gen/ph-factories.js +61 -0
  66. package/dist/document-models/resource-template/gen/reducer.d.ts +3 -0
  67. package/dist/document-models/resource-template/gen/reducer.d.ts.map +1 -0
  68. package/dist/document-models/resource-template/gen/reducer.js +98 -0
  69. package/dist/document-models/resource-template/gen/schema/index.d.ts +3 -0
  70. package/dist/document-models/resource-template/gen/schema/index.d.ts.map +1 -0
  71. package/dist/document-models/resource-template/gen/schema/index.js +2 -0
  72. package/dist/document-models/resource-template/gen/schema/types.d.ts +305 -0
  73. package/dist/document-models/resource-template/gen/schema/types.d.ts.map +1 -0
  74. package/dist/document-models/resource-template/gen/schema/types.js +1 -0
  75. package/dist/document-models/resource-template/gen/schema/zod.d.ts +37 -0
  76. package/dist/document-models/resource-template/gen/schema/zod.d.ts.map +1 -0
  77. package/dist/document-models/resource-template/gen/schema/zod.js +236 -0
  78. package/dist/document-models/resource-template/gen/service-category-management/actions.d.ts +12 -0
  79. package/dist/document-models/resource-template/gen/service-category-management/actions.d.ts.map +1 -0
  80. package/dist/document-models/resource-template/gen/service-category-management/actions.js +1 -0
  81. package/dist/document-models/resource-template/gen/service-category-management/creators.d.ts +5 -0
  82. package/dist/document-models/resource-template/gen/service-category-management/creators.d.ts.map +1 -0
  83. package/dist/document-models/resource-template/gen/service-category-management/creators.js +4 -0
  84. package/dist/document-models/resource-template/gen/service-category-management/error.d.ts +2 -0
  85. package/dist/document-models/resource-template/gen/service-category-management/error.d.ts.map +1 -0
  86. package/dist/document-models/resource-template/gen/service-category-management/error.js +1 -0
  87. package/dist/document-models/resource-template/gen/service-category-management/operations.d.ts +8 -0
  88. package/dist/document-models/resource-template/gen/service-category-management/operations.d.ts.map +1 -0
  89. package/dist/document-models/resource-template/gen/service-category-management/operations.js +3 -0
  90. package/dist/document-models/resource-template/gen/service-management/actions.d.ts +24 -0
  91. package/dist/document-models/resource-template/gen/service-management/actions.d.ts.map +1 -0
  92. package/dist/document-models/resource-template/gen/service-management/actions.js +1 -0
  93. package/dist/document-models/resource-template/gen/service-management/creators.d.ts +8 -0
  94. package/dist/document-models/resource-template/gen/service-management/creators.d.ts.map +1 -0
  95. package/dist/document-models/resource-template/gen/service-management/creators.js +7 -0
  96. package/dist/document-models/resource-template/gen/service-management/error.d.ts +52 -0
  97. package/dist/document-models/resource-template/gen/service-management/error.d.ts.map +1 -0
  98. package/dist/document-models/resource-template/gen/service-management/error.js +61 -0
  99. package/dist/document-models/resource-template/gen/service-management/operations.d.ts +11 -0
  100. package/dist/document-models/resource-template/gen/service-management/operations.d.ts.map +1 -0
  101. package/dist/document-models/resource-template/gen/service-management/operations.js +3 -0
  102. package/dist/document-models/resource-template/gen/template-management/actions.d.ts +20 -0
  103. package/dist/document-models/resource-template/gen/template-management/actions.d.ts.map +1 -0
  104. package/dist/document-models/resource-template/gen/template-management/actions.js +1 -0
  105. package/dist/document-models/resource-template/gen/template-management/creators.d.ts +7 -0
  106. package/dist/document-models/resource-template/gen/template-management/creators.d.ts.map +1 -0
  107. package/dist/document-models/resource-template/gen/template-management/creators.js +6 -0
  108. package/dist/document-models/resource-template/gen/template-management/error.d.ts +2 -0
  109. package/dist/document-models/resource-template/gen/template-management/error.d.ts.map +1 -0
  110. package/dist/document-models/resource-template/gen/template-management/error.js +1 -0
  111. package/dist/document-models/resource-template/gen/template-management/operations.d.ts +10 -0
  112. package/dist/document-models/resource-template/gen/template-management/operations.d.ts.map +1 -0
  113. package/dist/document-models/resource-template/gen/template-management/operations.js +3 -0
  114. package/dist/document-models/resource-template/gen/types.d.ts +12 -0
  115. package/dist/document-models/resource-template/gen/types.d.ts.map +1 -0
  116. package/dist/document-models/resource-template/gen/types.js +1 -0
  117. package/dist/document-models/resource-template/gen/utils.d.ts +15 -0
  118. package/dist/document-models/resource-template/gen/utils.d.ts.map +1 -0
  119. package/dist/document-models/resource-template/gen/utils.js +65 -0
  120. package/dist/document-models/resource-template/hooks.d.ts +11 -0
  121. package/dist/document-models/resource-template/hooks.d.ts.map +1 -0
  122. package/dist/document-models/resource-template/hooks.js +26 -0
  123. package/dist/document-models/resource-template/index.d.ts +10 -0
  124. package/dist/document-models/resource-template/index.d.ts.map +1 -0
  125. package/dist/document-models/resource-template/index.js +9 -0
  126. package/dist/document-models/resource-template/module.d.ts +5 -0
  127. package/dist/document-models/resource-template/module.d.ts.map +1 -0
  128. package/dist/document-models/resource-template/module.js +10 -0
  129. package/dist/document-models/resource-template/reducers/audience-management.d.ts +3 -0
  130. package/dist/document-models/resource-template/reducers/audience-management.d.ts.map +1 -0
  131. package/dist/document-models/resource-template/reducers/audience-management.js +17 -0
  132. package/dist/document-models/resource-template/reducers/facet-preset-management.d.ts +59 -0
  133. package/dist/document-models/resource-template/reducers/facet-preset-management.d.ts.map +1 -0
  134. package/dist/document-models/resource-template/reducers/facet-preset-management.js +52 -0
  135. package/dist/document-models/resource-template/reducers/facet-targeting.d.ts +3 -0
  136. package/dist/document-models/resource-template/reducers/facet-targeting.d.ts.map +1 -0
  137. package/dist/document-models/resource-template/reducers/facet-targeting.js +47 -0
  138. package/dist/document-models/resource-template/reducers/option-group-management.d.ts +3 -0
  139. package/dist/document-models/resource-template/reducers/option-group-management.d.ts.map +1 -0
  140. package/dist/document-models/resource-template/reducers/option-group-management.js +44 -0
  141. package/dist/document-models/resource-template/reducers/service-category-management.d.ts +3 -0
  142. package/dist/document-models/resource-template/reducers/service-category-management.d.ts.map +1 -0
  143. package/dist/document-models/resource-template/reducers/service-category-management.js +10 -0
  144. package/dist/document-models/resource-template/reducers/service-management.d.ts +3 -0
  145. package/dist/document-models/resource-template/reducers/service-management.d.ts.map +1 -0
  146. package/dist/document-models/resource-template/reducers/service-management.js +71 -0
  147. package/dist/document-models/resource-template/reducers/template-management.d.ts +3 -0
  148. package/dist/document-models/resource-template/reducers/template-management.d.ts.map +1 -0
  149. package/dist/document-models/resource-template/reducers/template-management.js +32 -0
  150. package/dist/document-models/resource-template/src/index.d.ts +2 -0
  151. package/dist/document-models/resource-template/src/index.d.ts.map +1 -0
  152. package/dist/document-models/resource-template/src/index.js +1 -0
  153. package/dist/document-models/resource-template/src/reducers/audience-management.d.ts +3 -0
  154. package/dist/document-models/resource-template/src/reducers/audience-management.d.ts.map +1 -0
  155. package/dist/document-models/resource-template/src/reducers/audience-management.js +17 -0
  156. package/dist/document-models/resource-template/src/reducers/facet-targeting.d.ts +3 -0
  157. package/dist/document-models/resource-template/src/reducers/facet-targeting.d.ts.map +1 -0
  158. package/dist/document-models/resource-template/src/reducers/facet-targeting.js +46 -0
  159. package/dist/document-models/resource-template/src/reducers/option-group-management.d.ts +3 -0
  160. package/dist/document-models/resource-template/src/reducers/option-group-management.d.ts.map +1 -0
  161. package/dist/document-models/resource-template/src/reducers/option-group-management.js +42 -0
  162. package/dist/document-models/resource-template/src/reducers/service-category-management.d.ts +3 -0
  163. package/dist/document-models/resource-template/src/reducers/service-category-management.d.ts.map +1 -0
  164. package/dist/document-models/resource-template/src/reducers/service-category-management.js +10 -0
  165. package/dist/document-models/resource-template/src/reducers/service-management.d.ts +3 -0
  166. package/dist/document-models/resource-template/src/reducers/service-management.d.ts.map +1 -0
  167. package/dist/document-models/resource-template/src/reducers/service-management.js +68 -0
  168. package/dist/document-models/resource-template/src/reducers/template-management.d.ts +3 -0
  169. package/dist/document-models/resource-template/src/reducers/template-management.d.ts.map +1 -0
  170. package/dist/document-models/resource-template/src/reducers/template-management.js +32 -0
  171. package/dist/document-models/resource-template/src/tests/audience-management.test.d.ts +6 -0
  172. package/dist/document-models/resource-template/src/tests/audience-management.test.d.ts.map +1 -0
  173. package/dist/document-models/resource-template/src/tests/audience-management.test.js +29 -0
  174. package/dist/document-models/resource-template/src/tests/document-model.test.d.ts +10 -0
  175. package/dist/document-models/resource-template/src/tests/document-model.test.d.ts.map +1 -0
  176. package/dist/document-models/resource-template/src/tests/document-model.test.js +104 -0
  177. package/dist/document-models/resource-template/src/tests/facet-targeting.test.d.ts +6 -0
  178. package/dist/document-models/resource-template/src/tests/facet-targeting.test.d.ts.map +1 -0
  179. package/dist/document-models/resource-template/src/tests/facet-targeting.test.js +49 -0
  180. package/dist/document-models/resource-template/src/tests/option-group-management.test.d.ts +6 -0
  181. package/dist/document-models/resource-template/src/tests/option-group-management.test.d.ts.map +1 -0
  182. package/dist/document-models/resource-template/src/tests/option-group-management.test.js +39 -0
  183. package/dist/document-models/resource-template/src/tests/service-category-management.test.d.ts +6 -0
  184. package/dist/document-models/resource-template/src/tests/service-category-management.test.d.ts.map +1 -0
  185. package/dist/document-models/resource-template/src/tests/service-category-management.test.js +29 -0
  186. package/dist/document-models/resource-template/src/tests/service-management.test.d.ts +6 -0
  187. package/dist/document-models/resource-template/src/tests/service-management.test.d.ts.map +1 -0
  188. package/dist/document-models/resource-template/src/tests/service-management.test.js +59 -0
  189. package/dist/document-models/resource-template/src/tests/template-management.test.d.ts +6 -0
  190. package/dist/document-models/resource-template/src/tests/template-management.test.d.ts.map +1 -0
  191. package/dist/document-models/resource-template/src/tests/template-management.test.js +49 -0
  192. package/dist/document-models/resource-template/src/utils.d.ts +2 -0
  193. package/dist/document-models/resource-template/src/utils.d.ts.map +1 -0
  194. package/dist/document-models/resource-template/src/utils.js +1 -0
  195. package/dist/document-models/resource-template/utils.d.ts +14 -0
  196. package/dist/document-models/resource-template/utils.d.ts.map +1 -0
  197. package/dist/document-models/resource-template/utils.js +7 -0
  198. package/dist/document-models/service-offering/actions.d.ts +2 -0
  199. package/dist/document-models/service-offering/actions.d.ts.map +1 -1
  200. package/dist/document-models/service-offering/gen/document-model.d.ts.map +1 -1
  201. package/dist/document-models/service-offering/gen/document-model.js +51 -6
  202. package/dist/document-models/service-offering/gen/document-schema.d.ts +35 -16
  203. package/dist/document-models/service-offering/gen/document-schema.d.ts.map +1 -1
  204. package/dist/document-models/service-offering/gen/offering-management/actions.d.ts +10 -2
  205. package/dist/document-models/service-offering/gen/offering-management/actions.d.ts.map +1 -1
  206. package/dist/document-models/service-offering/gen/offering-management/creators.d.ts +4 -2
  207. package/dist/document-models/service-offering/gen/offering-management/creators.d.ts.map +1 -1
  208. package/dist/document-models/service-offering/gen/offering-management/creators.js +3 -1
  209. package/dist/document-models/service-offering/gen/offering-management/error.d.ts +20 -1
  210. package/dist/document-models/service-offering/gen/offering-management/error.d.ts.map +1 -1
  211. package/dist/document-models/service-offering/gen/offering-management/error.js +25 -0
  212. package/dist/document-models/service-offering/gen/offering-management/operations.d.ts +3 -1
  213. package/dist/document-models/service-offering/gen/offering-management/operations.d.ts.map +1 -1
  214. package/dist/document-models/service-offering/gen/ph-factories.d.ts.map +1 -1
  215. package/dist/document-models/service-offering/gen/ph-factories.js +1 -0
  216. package/dist/document-models/service-offering/gen/reducer.d.ts.map +1 -1
  217. package/dist/document-models/service-offering/gen/reducer.js +9 -1
  218. package/dist/document-models/service-offering/gen/schema/types.d.ts +24 -11
  219. package/dist/document-models/service-offering/gen/schema/types.d.ts.map +1 -1
  220. package/dist/document-models/service-offering/gen/schema/zod.d.ts +3 -1
  221. package/dist/document-models/service-offering/gen/schema/zod.d.ts.map +1 -1
  222. package/dist/document-models/service-offering/gen/schema/zod.js +17 -0
  223. package/dist/document-models/service-offering/gen/utils.d.ts.map +1 -1
  224. package/dist/document-models/service-offering/gen/utils.js +1 -0
  225. package/dist/document-models/service-offering/src/reducers/offering-management.d.ts.map +1 -1
  226. package/dist/document-models/service-offering/src/reducers/offering-management.js +22 -4
  227. package/dist/document-models/service-offering/src/reducers/service-management.d.ts.map +1 -1
  228. package/dist/document-models/service-offering/src/reducers/service-management.js +5 -0
  229. package/dist/document-models/service-offering/src/tests/offering-management.test.js +1 -81
  230. package/dist/document-models/service-offering/src/tests/tier-management.test.d.ts +4 -0
  231. package/dist/document-models/service-offering/src/tests/tier-management.test.d.ts.map +1 -1
  232. package/dist/document-models/service-offering/src/tests/tier-management.test.js +109 -1
  233. package/dist/editors/builder-team-admin/components/DriveExplorer.d.ts.map +1 -1
  234. package/dist/editors/builder-team-admin/components/DriveExplorer.js +4 -0
  235. package/dist/editors/builder-team-admin/components/FolderTree.d.ts +1 -1
  236. package/dist/editors/builder-team-admin/components/FolderTree.d.ts.map +1 -1
  237. package/dist/editors/builder-team-admin/components/FolderTree.js +134 -9
  238. package/dist/editors/builder-team-admin/components/ResourcesServices.d.ts +8 -0
  239. package/dist/editors/builder-team-admin/components/ResourcesServices.d.ts.map +1 -0
  240. package/dist/editors/builder-team-admin/components/ResourcesServices.js +76 -0
  241. package/dist/editors/builder-team-admin/hooks/useResourcesServicesAutoPlacement.d.ts +27 -0
  242. package/dist/editors/builder-team-admin/hooks/useResourcesServicesAutoPlacement.d.ts.map +1 -0
  243. package/dist/editors/builder-team-admin/hooks/useResourcesServicesAutoPlacement.js +123 -0
  244. package/dist/editors/index.d.ts +1 -0
  245. package/dist/editors/index.d.ts.map +1 -1
  246. package/dist/editors/index.js +1 -0
  247. package/dist/editors/resource-template-editor/components/FacetTargeting.d.ts +9 -0
  248. package/dist/editors/resource-template-editor/components/FacetTargeting.d.ts.map +1 -0
  249. package/dist/editors/resource-template-editor/components/FacetTargeting.js +958 -0
  250. package/dist/editors/resource-template-editor/components/TemplateInfo.d.ts +9 -0
  251. package/dist/editors/resource-template-editor/components/TemplateInfo.d.ts.map +1 -0
  252. package/dist/editors/resource-template-editor/components/TemplateInfo.js +1288 -0
  253. package/dist/editors/resource-template-editor/editor.d.ts +2 -0
  254. package/dist/editors/resource-template-editor/editor.d.ts.map +1 -0
  255. package/dist/editors/resource-template-editor/editor.js +149 -0
  256. package/dist/editors/resource-template-editor/module.d.ts +4 -0
  257. package/dist/editors/resource-template-editor/module.d.ts.map +1 -0
  258. package/dist/editors/resource-template-editor/module.js +10 -0
  259. package/dist/editors/service-offering-editor/components/EditName.js +1 -1
  260. package/dist/editors/service-offering-editor/components/OfferingInfo.d.ts +1 -1
  261. package/dist/editors/service-offering-editor/components/OfferingInfo.d.ts.map +1 -1
  262. package/dist/editors/service-offering-editor/components/OfferingProgress.d.ts +10 -0
  263. package/dist/editors/service-offering-editor/components/OfferingProgress.d.ts.map +1 -0
  264. package/dist/editors/service-offering-editor/components/OfferingProgress.js +240 -0
  265. package/dist/editors/service-offering-editor/components/ResourceTemplateSelector.d.ts +9 -0
  266. package/dist/editors/service-offering-editor/components/ResourceTemplateSelector.d.ts.map +1 -0
  267. package/dist/editors/service-offering-editor/components/ResourceTemplateSelector.js +1157 -0
  268. package/dist/editors/service-offering-editor/components/ScopeAndFacets.d.ts +1 -1
  269. package/dist/editors/service-offering-editor/components/ScopeAndFacets.d.ts.map +1 -1
  270. package/dist/editors/service-offering-editor/components/ServiceCatalog.d.ts +1 -1
  271. package/dist/editors/service-offering-editor/components/ServiceCatalog.d.ts.map +1 -1
  272. package/dist/editors/service-offering-editor/components/ServiceCatalog.js +318 -1
  273. package/dist/editors/service-offering-editor/components/ServicesList.d.ts +1 -1
  274. package/dist/editors/service-offering-editor/components/ServicesList.d.ts.map +1 -1
  275. package/dist/editors/service-offering-editor/components/TabNavigation.d.ts.map +1 -1
  276. package/dist/editors/service-offering-editor/components/TabNavigation.js +17 -3
  277. package/dist/editors/service-offering-editor/components/TheMatrix.d.ts +1 -1
  278. package/dist/editors/service-offering-editor/components/TheMatrix.d.ts.map +1 -1
  279. package/dist/editors/service-offering-editor/components/TheMatrix.js +823 -29
  280. package/dist/editors/service-offering-editor/components/TierDefinition.d.ts +1 -1
  281. package/dist/editors/service-offering-editor/components/TierDefinition.d.ts.map +1 -1
  282. package/dist/editors/service-offering-editor/components/TierDefinition.js +406 -4
  283. package/dist/editors/service-offering-editor/components/TiersList.d.ts +1 -1
  284. package/dist/editors/service-offering-editor/components/TiersList.d.ts.map +1 -1
  285. package/dist/editors/service-offering-editor/editor.d.ts.map +1 -1
  286. package/dist/editors/service-offering-editor/editor.js +4 -4
  287. package/dist/index.d.ts +1 -1
  288. package/dist/index.d.ts.map +1 -1
  289. package/dist/powerhouse.manifest.json +18 -0
  290. package/dist/style.css +25 -0
  291. package/dist/subgraphs/index.d.ts +1 -0
  292. package/dist/subgraphs/index.d.ts.map +1 -1
  293. package/dist/subgraphs/index.js +1 -0
  294. package/dist/subgraphs/resource-template/index.d.ts +11 -0
  295. package/dist/subgraphs/resource-template/index.d.ts.map +1 -0
  296. package/dist/subgraphs/resource-template/index.js +11 -0
  297. package/dist/subgraphs/resource-template/resolvers.d.ts +3 -0
  298. package/dist/subgraphs/resource-template/resolvers.d.ts.map +1 -0
  299. package/dist/subgraphs/resource-template/resolvers.js +312 -0
  300. package/dist/subgraphs/resource-template/schema.d.ts +3 -0
  301. package/dist/subgraphs/resource-template/schema.d.ts.map +1 -0
  302. package/dist/subgraphs/resource-template/schema.js +262 -0
  303. package/dist/subgraphs/service-offering/resolvers.d.ts.map +1 -1
  304. package/dist/subgraphs/service-offering/resolvers.js +24 -0
  305. package/dist/subgraphs/service-offering/schema.d.ts.map +1 -1
  306. package/dist/subgraphs/service-offering/schema.js +21 -0
  307. package/package.json +1 -1
@@ -0,0 +1,1157 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState, useMemo, useCallback } from "react";
3
+ import { selectResourceTemplate, changeResourceTemplate, addFacetOption, removeFacetOption, setFacetTarget, } from "../../../document-models/service-offering/gen/offering-management/creators.js";
4
+ import { generateId } from "document-model/core";
5
+ import { useResourceTemplateDocumentsInSelectedDrive } from "../../../document-models/resource-template/hooks.js";
6
+ export function ResourceTemplateSelector({ document, dispatch, }) {
7
+ const templates = useResourceTemplateDocumentsInSelectedDrive();
8
+ const [searchQuery, setSearchQuery] = useState("");
9
+ const [showingSelector, setShowingSelector] = useState(false);
10
+ // Get the currently selected template ID from document state
11
+ const currentTemplateId = document.state.global.resourceTemplateId;
12
+ const filteredTemplates = useMemo(() => {
13
+ if (!templates)
14
+ return [];
15
+ if (!searchQuery.trim())
16
+ return templates;
17
+ const query = searchQuery.toLowerCase();
18
+ return templates.filter((t) => t.state.global.title.toLowerCase().includes(query) ||
19
+ t.state.global.summary.toLowerCase().includes(query));
20
+ }, [templates, searchQuery]);
21
+ const selectedTemplate = useMemo(() => {
22
+ if (!currentTemplateId || !templates)
23
+ return null;
24
+ return templates.find((t) => t.header.id === currentTemplateId) || null;
25
+ }, [currentTemplateId, templates]);
26
+ const handleSelectTemplate = useCallback((template) => {
27
+ const now = new Date().toISOString();
28
+ if (currentTemplateId) {
29
+ // If a template is already selected, use change operation
30
+ dispatch(changeResourceTemplate({
31
+ previousTemplateId: currentTemplateId,
32
+ newTemplateId: template.header.id,
33
+ lastModified: now,
34
+ }));
35
+ }
36
+ else {
37
+ // First time selection
38
+ dispatch(selectResourceTemplate({
39
+ resourceTemplateId: template.header.id,
40
+ lastModified: now,
41
+ }));
42
+ }
43
+ setShowingSelector(false);
44
+ }, [currentTemplateId, dispatch]);
45
+ const handleChangeTemplate = useCallback(() => {
46
+ setShowingSelector(true);
47
+ }, []);
48
+ const activeTemplates = filteredTemplates.filter((t) => t.state.global.status === "ACTIVE");
49
+ const otherTemplates = filteredTemplates.filter((t) => t.state.global.status !== "ACTIVE");
50
+ // Determine recommended template (Social Proof / Authority Bias)
51
+ // The most complete active template is recommended
52
+ const recommendedTemplateId = useMemo(() => {
53
+ if (!activeTemplates || activeTemplates.length === 0)
54
+ return null;
55
+ // Score templates by completeness (more services, facets, audiences = better)
56
+ const scored = activeTemplates.map((t) => ({
57
+ id: t.header.id,
58
+ score: t.state.global.services.length * 3 + // Services weighted highest
59
+ t.state.global.facetTargets.length * 2 +
60
+ t.state.global.targetAudiences.length +
61
+ (t.state.global.description ? 2 : 0) +
62
+ (t.state.global.thumbnailUrl ? 1 : 0),
63
+ }));
64
+ const best = scored.sort((a, b) => b.score - a.score)[0];
65
+ return best?.id || null;
66
+ }, [activeTemplates]);
67
+ // If a template is selected and user is not changing, show the detail view with facet selection
68
+ if (selectedTemplate && !showingSelector) {
69
+ return (_jsxs(_Fragment, { children: [_jsx("style", { children: styles }), _jsx("div", { className: "rts-container", children: _jsx(TemplateDetailView, { template: selectedTemplate, offeringDocument: document, dispatch: dispatch, onChangeTemplate: handleChangeTemplate }) })] }));
70
+ }
71
+ return (_jsxs(_Fragment, { children: [_jsx("style", { children: styles }), _jsxs("div", { className: "rts-container", children: [_jsxs("div", { className: "rts-header", children: [_jsx("div", { className: "rts-header__icon", children: _jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.75", children: _jsx("path", { d: "M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m0 12.75h7.5m-7.5 3H12M10.5 2.25H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z" }) }) }), _jsxs("div", { className: "rts-header__text", children: [_jsx("h2", { className: "rts-header__title", children: "Select Resource Template" }), _jsx("p", { className: "rts-header__subtitle", children: "Choose a resource template to base this service offering on. The template defines the product configuration, target audiences, and available services." })] })] }), _jsxs("div", { className: "rts-search", children: [_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", children: [_jsx("circle", { cx: "11", cy: "11", r: "8", strokeWidth: "2" }), _jsx("path", { d: "M21 21l-4.35-4.35", strokeWidth: "2" })] }), _jsx("input", { type: "text", value: searchQuery, onChange: (e) => setSearchQuery(e.target.value), placeholder: "Search resource templates...", className: "rts-search__input" }), searchQuery && (_jsx("button", { type: "button", onClick: () => setSearchQuery(""), className: "rts-search__clear", children: _jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", children: _jsx("path", { d: "M18 6L6 18M6 6l12 12", strokeWidth: "2" }) }) }))] }), _jsx("div", { className: "rts-templates", children: !templates || templates.length === 0 ? (_jsxs("div", { className: "rts-empty", children: [_jsx("div", { className: "rts-empty__icon", children: _jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: _jsx("path", { d: "M19.5 14.25v-2.625a3.375 3.375 0 00-3.375-3.375h-1.5A1.125 1.125 0 0113.5 7.125v-1.5a3.375 3.375 0 00-3.375-3.375H8.25m6.75 12H9m1.5-12H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 00-9-9z" }) }) }), _jsx("h3", { className: "rts-empty__title", children: "No Resource Templates Found" }), _jsx("p", { className: "rts-empty__desc", children: "Create a Resource Template first to define the base configuration for your service offering." })] })) : filteredTemplates.length === 0 ? (_jsx("div", { className: "rts-empty rts-empty--search", children: _jsxs("p", { className: "rts-empty__desc", children: ["No templates match \"", searchQuery, "\""] }) })) : (_jsxs(_Fragment, { children: [activeTemplates.length > 0 && (_jsxs("div", { className: "rts-section", children: [_jsxs("h3", { className: "rts-section__title", children: [_jsx("span", { className: "rts-section__dot rts-section__dot--active" }), "Active Templates"] }), _jsx("div", { className: "rts-grid", children: activeTemplates.map((template) => (_jsx(TemplateCard, { template: template, isSelected: currentTemplateId === template.header.id, isRecommended: template.header.id === recommendedTemplateId, onSelect: () => handleSelectTemplate(template) }, template.header.id))) })] })), otherTemplates.length > 0 && (_jsxs("div", { className: "rts-section", children: [_jsxs("h3", { className: "rts-section__title", children: [_jsx("span", { className: "rts-section__dot" }), "Other Templates"] }), _jsx("div", { className: "rts-grid", children: otherTemplates.map((template) => (_jsx(TemplateCard, { template: template, isSelected: currentTemplateId === template.header.id, onSelect: () => handleSelectTemplate(template) }, template.header.id))) })] }))] })) })] })] }));
72
+ }
73
+ function TemplateCard({ template, isSelected, isRecommended, onSelect, }) {
74
+ const { state } = template;
75
+ const globalState = state.global;
76
+ const statusStyle = getStatusStyle(globalState.status);
77
+ return (_jsxs("button", { type: "button", onClick: onSelect, className: `rts-card ${isSelected ? "rts-card--selected" : ""} ${isRecommended ? "rts-card--recommended" : ""}`, children: [isRecommended && !isSelected && (_jsxs("div", { className: "rts-card__recommended", children: [_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" }) }), "Recommended"] })), _jsxs("div", { className: "rts-card__header", children: [globalState.thumbnailUrl ? (_jsx("div", { className: "rts-card__thumb", style: { backgroundImage: `url(${globalState.thumbnailUrl})` } })) : (_jsx("div", { className: "rts-card__thumb rts-card__thumb--placeholder", children: _jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: [_jsx("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }), _jsx("circle", { cx: "8.5", cy: "8.5", r: "1.5" }), _jsx("path", { d: "M21 15l-5-5L5 21" })] }) })), _jsxs("span", { className: "rts-card__status", style: {
78
+ backgroundColor: statusStyle.bg,
79
+ color: statusStyle.text,
80
+ }, children: [_jsx("span", { className: "rts-card__status-dot", style: { backgroundColor: statusStyle.dot } }), globalState.status.replace("_", " ")] })] }), _jsxs("div", { className: "rts-card__body", children: [_jsx("h4", { className: "rts-card__title", children: globalState.title || "Untitled" }), _jsx("p", { className: "rts-card__summary", children: globalState.summary || "No summary provided" }), _jsxs("div", { className: "rts-card__meta", children: [globalState.targetAudiences.length > 0 && (_jsxs("span", { className: "rts-card__tag", children: [_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", children: [_jsx("path", { d: "M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2", strokeWidth: "2" }), _jsx("circle", { cx: "9", cy: "7", r: "4", strokeWidth: "2" }), _jsx("path", { d: "M23 21v-2a4 4 0 0 0-3-3.87", strokeWidth: "2" }), _jsx("path", { d: "M16 3.13a4 4 0 0 1 0 7.75", strokeWidth: "2" })] }), globalState.targetAudiences.length] })), globalState.services.length > 0 && (_jsxs("span", { className: "rts-card__tag", children: [_jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", children: [_jsx("path", { d: "M12 2L2 7l10 5 10-5-10-5z", strokeWidth: "2" }), _jsx("path", { d: "M2 17l10 5 10-5", strokeWidth: "2" }), _jsx("path", { d: "M2 12l10 5 10-5", strokeWidth: "2" })] }), globalState.services.length] })), globalState.facetTargets.length > 0 && (_jsxs("span", { className: "rts-card__tag", children: [_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", children: _jsx("path", { d: "M3 6h18M7 12h10M10 18h4", strokeWidth: "2" }) }), globalState.facetTargets.length] }))] })] }), isSelected && (_jsx("div", { className: "rts-card__check", children: _jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", children: _jsx("path", { d: "M5 12l5 5L20 7", strokeWidth: "2.5" }) }) }))] }));
81
+ }
82
+ function TemplateDetailView({ template, offeringDocument, dispatch, onChangeTemplate, }) {
83
+ const globalState = template.state.global;
84
+ const statusStyle = getStatusStyle(globalState.status);
85
+ // Get the current facet selections from the offering document
86
+ const offeringFacetTargets = offeringDocument.state.global.facetTargets;
87
+ // Check if an option is selected in the offering
88
+ const isOptionSelected = useCallback((categoryKey, optionId) => {
89
+ const facetTarget = offeringFacetTargets.find((f) => f.categoryKey === categoryKey);
90
+ return facetTarget?.selectedOptions.includes(optionId) ?? false;
91
+ }, [offeringFacetTargets]);
92
+ // Toggle a facet option in the offering
93
+ const handleToggleFacetOption = useCallback((categoryKey, categoryLabel, optionId) => {
94
+ const now = new Date().toISOString();
95
+ const existingFacetTarget = offeringFacetTargets.find((f) => f.categoryKey === categoryKey);
96
+ if (!existingFacetTarget) {
97
+ // Create the facet target with this option selected
98
+ dispatch(setFacetTarget({
99
+ id: generateId(),
100
+ categoryKey,
101
+ categoryLabel,
102
+ selectedOptions: [optionId],
103
+ lastModified: now,
104
+ }));
105
+ }
106
+ else if (existingFacetTarget.selectedOptions.includes(optionId)) {
107
+ // Remove the option
108
+ dispatch(removeFacetOption({
109
+ categoryKey,
110
+ optionId,
111
+ lastModified: now,
112
+ }));
113
+ }
114
+ else {
115
+ // Add the option
116
+ dispatch(addFacetOption({
117
+ categoryKey,
118
+ optionId,
119
+ lastModified: now,
120
+ }));
121
+ }
122
+ }, [offeringFacetTargets, dispatch]);
123
+ // Calculate facet completion progress (Goal-Gradient Effect)
124
+ const facetProgress = useMemo(() => {
125
+ const totalOptions = globalState.facetTargets.reduce((sum, facet) => sum + facet.selectedOptions.length, 0);
126
+ const selectedOptions = offeringFacetTargets.reduce((sum, facet) => sum + facet.selectedOptions.length, 0);
127
+ const percent = totalOptions > 0 ? Math.round((selectedOptions / totalOptions) * 100) : 0;
128
+ return { total: totalOptions, selected: selectedOptions, percent };
129
+ }, [globalState.facetTargets, offeringFacetTargets]);
130
+ return (_jsxs("div", { className: "rtd-container", children: [_jsx("div", { className: "rtd-selected-header", children: _jsxs("div", { className: "rtd-selected-header__info", children: [_jsxs("span", { className: "rtd-selected-header__badge", children: [_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M5 12l5 5L20 7" }) }), "Selected Template"] }), _jsxs("button", { type: "button", onClick: onChangeTemplate, className: "rtd-selected-header__change", children: [_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" }) }), "Change Template"] })] }) }), _jsxs("section", { className: "rtd-hero", children: [_jsx("div", { className: "rtd-hero__thumbnail-area", children: _jsxs("div", { className: "rtd-hero__thumbnail", style: {
131
+ backgroundImage: globalState.thumbnailUrl
132
+ ? `url(${globalState.thumbnailUrl})`
133
+ : undefined,
134
+ }, children: [!globalState.thumbnailUrl && (_jsx("div", { className: "rtd-hero__thumbnail-placeholder", children: _jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.5", children: [_jsx("rect", { x: "3", y: "3", width: "18", height: "18", rx: "2" }), _jsx("circle", { cx: "8.5", cy: "8.5", r: "1.5" }), _jsx("path", { d: "M21 15l-5-5L5 21" })] }) })), _jsxs("span", { className: "rtd-hero__status", style: {
135
+ backgroundColor: statusStyle.bg,
136
+ color: statusStyle.text,
137
+ }, children: [_jsx("span", { className: "rtd-hero__status-dot", style: { backgroundColor: statusStyle.dot } }), globalState.status.replace("_", " ")] })] }) }), _jsxs("div", { className: "rtd-hero__identity", children: [_jsx("h1", { className: "rtd-hero__title", children: globalState.title || "Untitled Template" }), globalState.targetAudiences.length > 0 && (_jsx("div", { className: "rtd-hero__audiences", children: globalState.targetAudiences.map((audience) => (_jsx("span", { className: "rtd-hero__audience-tag", style: audience.color
138
+ ? {
139
+ backgroundColor: `${audience.color}15`,
140
+ borderColor: `${audience.color}40`,
141
+ color: audience.color,
142
+ }
143
+ : undefined, children: audience.label }, audience.id))) })), _jsx("p", { className: "rtd-hero__summary", children: globalState.summary || "No summary provided" })] })] }), globalState.description && (_jsxs("section", { className: "rtd-card", children: [_jsxs("div", { className: "rtd-card__header", children: [_jsx("div", { className: "rtd-card__icon rtd-card__icon--violet", children: _jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.75", children: _jsx("path", { d: "M4 6h16M4 12h16M4 18h10" }) }) }), _jsx("div", { children: _jsx("h3", { className: "rtd-card__title", children: "Description" }) })] }), _jsx("p", { className: "rtd-card__text", children: globalState.description })] })), _jsxs("div", { className: "rtd-grid", children: [_jsxs("section", { className: "rtd-card", children: [_jsxs("div", { className: "rtd-card__header", children: [_jsx("div", { className: "rtd-card__icon rtd-card__icon--emerald", children: _jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.75", children: [_jsx("path", { d: "M12 2L2 7l10 5 10-5-10-5z" }), _jsx("path", { d: "M2 17l10 5 10-5" }), _jsx("path", { d: "M2 12l10 5 10-5" })] }) }), _jsxs("div", { children: [_jsx("h3", { className: "rtd-card__title", children: "Formation & Setup" }), _jsx("p", { className: "rtd-card__subtitle", children: "One-time setup services" })] })] }), globalState.setupServices.length > 0 ? (_jsx("div", { className: "rtd-services", children: globalState.setupServices.map((service, index) => (_jsxs("div", { className: "rtd-service", children: [_jsx("span", { className: "rtd-service__bullet" }), _jsx("span", { className: "rtd-service__text", children: service })] }, index))) })) : (_jsx("p", { className: "rtd-card__empty", children: "No setup services defined" }))] }), _jsxs("section", { className: "rtd-card", children: [_jsxs("div", { className: "rtd-card__header", children: [_jsx("div", { className: "rtd-card__icon rtd-card__icon--amber", children: _jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.75", children: [_jsx("path", { d: "M12 8v4l3 3" }), _jsx("circle", { cx: "12", cy: "12", r: "9" })] }) }), _jsxs("div", { children: [_jsx("h3", { className: "rtd-card__title", children: "Recurring Services" }), _jsx("p", { className: "rtd-card__subtitle", children: "Ongoing services included" })] })] }), globalState.recurringServices.length > 0 ? (_jsx("div", { className: "rtd-services", children: globalState.recurringServices.map((service, index) => (_jsxs("div", { className: "rtd-service", children: [_jsx("span", { className: "rtd-service__bullet rtd-service__bullet--recurring" }), _jsx("span", { className: "rtd-service__text", children: service })] }, index))) })) : (_jsx("p", { className: "rtd-card__empty", children: "No recurring services defined" }))] })] }), globalState.facetTargets.length > 0 && (_jsxs("section", { className: "rtd-card", children: [_jsxs("div", { className: "rtd-card__header rtd-card__header--with-progress", children: [_jsxs("div", { className: "rtd-card__header-left", children: [_jsx("div", { className: "rtd-card__icon rtd-card__icon--sky", children: _jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.75", children: _jsx("path", { d: "M3 6h18M7 12h10M10 18h4" }) }) }), _jsxs("div", { children: [_jsx("h3", { className: "rtd-card__title", children: "Facet Targeting" }), _jsx("p", { className: "rtd-card__subtitle", children: "Select which facet options apply to this offering" })] })] }), _jsxs("div", { className: "rtd-facet-progress", children: [_jsx("div", { className: "rtd-facet-progress__bar", children: _jsx("div", { className: "rtd-facet-progress__fill", style: { width: `${facetProgress.percent}%` } }) }), _jsxs("span", { className: "rtd-facet-progress__text", children: [facetProgress.selected, " of ", facetProgress.total, " selected", facetProgress.percent === 100 && (_jsx("span", { className: "rtd-facet-progress__complete", children: " \u2713" }))] })] })] }), _jsx("div", { className: "rtd-facets", children: globalState.facetTargets.map((facet) => (_jsxs("div", { className: "rtd-facet rtd-facet--selectable", children: [_jsx("span", { className: "rtd-facet__label", children: facet.categoryLabel }), _jsx("div", { className: "rtd-facet__options", children: facet.selectedOptions.map((option) => {
144
+ const selected = isOptionSelected(facet.categoryKey, option);
145
+ return (_jsxs("button", { type: "button", className: `rtd-facet__option rtd-facet__option--toggle ${selected ? "rtd-facet__option--selected" : ""}`, onClick: () => handleToggleFacetOption(facet.categoryKey, facet.categoryLabel, option), children: [_jsx("span", { className: "rtd-facet__checkbox", children: selected && (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3", children: _jsx("path", { d: "M5 12l5 5L20 7" }) })) }), option.replace(/-/g, " ")] }, option));
146
+ }) })] }, facet.id))) })] })), globalState.services.length > 0 && (_jsxs("section", { className: "rtd-card", children: [_jsxs("div", { className: "rtd-card__header", children: [_jsx("div", { className: "rtd-card__icon rtd-card__icon--teal", children: _jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.75", children: _jsx("path", { d: "M4 6h16M4 10h16M4 14h10M4 18h6" }) }) }), _jsxs("div", { children: [_jsx("h3", { className: "rtd-card__title", children: "Services Defined" }), _jsxs("p", { className: "rtd-card__subtitle", children: [globalState.services.length, " service", globalState.services.length !== 1 ? "s" : "", " available"] })] })] }), _jsx("div", { className: "rtd-services-list", children: globalState.services.map((service) => (_jsxs("div", { className: "rtd-service-item", children: [_jsxs("div", { className: "rtd-service-item__main", children: [_jsx("span", { className: "rtd-service-item__title", children: service.title }), service.isSetupFormation && (_jsx("span", { className: "rtd-service-item__badge", children: "Setup" }))] }), service.description && (_jsx("p", { className: "rtd-service-item__desc", children: service.description }))] }, service.id))) })] })), _jsxs("section", { className: "rtd-metadata", children: [globalState.operatorId && (_jsxs("div", { className: "rtd-meta-field", children: [_jsx("span", { className: "rtd-meta-field__label", children: "Operator ID" }), _jsx("span", { className: "rtd-meta-field__value rtd-meta-field__value--mono", children: globalState.operatorId })] })), globalState.infoLink && (_jsxs("div", { className: "rtd-meta-field", children: [_jsx("span", { className: "rtd-meta-field__label", children: "More Info" }), _jsxs("a", { href: globalState.infoLink, target: "_blank", rel: "noopener noreferrer", className: "rtd-meta-field__link", children: [globalState.infoLink, _jsxs("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", children: [_jsx("path", { d: "M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6" }), _jsx("polyline", { points: "15 3 21 3 21 9" }), _jsx("line", { x1: "10", y1: "14", x2: "21", y2: "3" })] })] })] }))] })] }));
147
+ }
148
+ function getStatusStyle(status) {
149
+ const statusColors = {
150
+ ACTIVE: {
151
+ bg: "var(--rts-emerald-light)",
152
+ text: "var(--rts-emerald)",
153
+ dot: "var(--rts-emerald)",
154
+ },
155
+ DRAFT: {
156
+ bg: "var(--rts-slate-light)",
157
+ text: "var(--rts-slate)",
158
+ dot: "var(--rts-slate)",
159
+ },
160
+ COMING_SOON: {
161
+ bg: "var(--rts-sky-light)",
162
+ text: "var(--rts-sky)",
163
+ dot: "var(--rts-sky)",
164
+ },
165
+ DEPRECATED: {
166
+ bg: "var(--rts-rose-light)",
167
+ text: "var(--rts-rose)",
168
+ dot: "var(--rts-rose)",
169
+ },
170
+ };
171
+ return statusColors[status] || statusColors.DRAFT;
172
+ }
173
+ const styles = `
174
+ .rts-container {
175
+ --rts-font: 'Instrument Sans', system-ui, sans-serif;
176
+ --rts-mono: 'DM Mono', 'SF Mono', monospace;
177
+
178
+ --rts-ink: #1a1f36;
179
+ --rts-ink-light: #4a5578;
180
+ --rts-ink-muted: #8792a8;
181
+ --rts-surface: #ffffff;
182
+ --rts-surface-raised: #fafbfc;
183
+ --rts-border: #e4e8f0;
184
+ --rts-border-light: #f0f2f7;
185
+
186
+ --rts-teal: #14b8a6;
187
+ --rts-teal-light: #ccfbf1;
188
+ --rts-violet: #7c5cff;
189
+ --rts-violet-light: #f4f1ff;
190
+ --rts-emerald: #10b981;
191
+ --rts-emerald-light: #e8faf3;
192
+ --rts-sky: #0ea5e9;
193
+ --rts-sky-light: #e8f7fc;
194
+ --rts-rose: #f43f5e;
195
+ --rts-rose-light: #fef1f3;
196
+ --rts-slate: #64748b;
197
+ --rts-slate-light: #f1f5f9;
198
+ --rts-amber: #f59e0b;
199
+ --rts-amber-light: #fef7e6;
200
+
201
+ font-family: var(--rts-font);
202
+ display: flex;
203
+ flex-direction: column;
204
+ gap: 24px;
205
+ }
206
+
207
+ /* Header */
208
+ .rts-header {
209
+ display: flex;
210
+ align-items: flex-start;
211
+ gap: 20px;
212
+ padding: 24px;
213
+ background: var(--rts-surface);
214
+ border-radius: 16px;
215
+ box-shadow: 0 1px 3px rgba(26, 31, 54, 0.04), 0 4px 16px rgba(26, 31, 54, 0.06);
216
+ border-left: 4px solid var(--rts-teal);
217
+ }
218
+
219
+ .rts-header__icon {
220
+ width: 48px;
221
+ height: 48px;
222
+ border-radius: 12px;
223
+ background: var(--rts-teal-light);
224
+ color: var(--rts-teal);
225
+ display: flex;
226
+ align-items: center;
227
+ justify-content: center;
228
+ flex-shrink: 0;
229
+ }
230
+
231
+ .rts-header__icon svg {
232
+ width: 24px;
233
+ height: 24px;
234
+ }
235
+
236
+ .rts-header__text {
237
+ flex: 1;
238
+ }
239
+
240
+ .rts-header__title {
241
+ font-size: 1.25rem;
242
+ font-weight: 700;
243
+ color: var(--rts-ink);
244
+ margin: 0 0 8px;
245
+ letter-spacing: -0.02em;
246
+ }
247
+
248
+ .rts-header__subtitle {
249
+ font-size: 0.9375rem;
250
+ color: var(--rts-ink-light);
251
+ margin: 0;
252
+ line-height: 1.6;
253
+ max-width: 600px;
254
+ }
255
+
256
+ /* Search */
257
+ .rts-search {
258
+ display: flex;
259
+ align-items: center;
260
+ gap: 12px;
261
+ padding: 14px 18px;
262
+ background: var(--rts-surface);
263
+ border: 1.5px solid var(--rts-border);
264
+ border-radius: 12px;
265
+ transition: all 0.15s ease;
266
+ }
267
+
268
+ .rts-search:focus-within {
269
+ border-color: var(--rts-teal);
270
+ box-shadow: 0 0 0 3px var(--rts-teal-light);
271
+ }
272
+
273
+ .rts-search > svg {
274
+ width: 20px;
275
+ height: 20px;
276
+ color: var(--rts-ink-muted);
277
+ flex-shrink: 0;
278
+ }
279
+
280
+ .rts-search__input {
281
+ flex: 1;
282
+ font-family: var(--rts-font);
283
+ font-size: 0.9375rem;
284
+ background: transparent;
285
+ border: none;
286
+ outline: none;
287
+ color: var(--rts-ink);
288
+ }
289
+
290
+ .rts-search__input::placeholder {
291
+ color: var(--rts-ink-muted);
292
+ }
293
+
294
+ .rts-search__clear {
295
+ display: flex;
296
+ align-items: center;
297
+ justify-content: center;
298
+ width: 24px;
299
+ height: 24px;
300
+ padding: 0;
301
+ background: var(--rts-border-light);
302
+ border: none;
303
+ border-radius: 6px;
304
+ color: var(--rts-ink-muted);
305
+ cursor: pointer;
306
+ transition: all 0.15s ease;
307
+ }
308
+
309
+ .rts-search__clear:hover {
310
+ background: var(--rts-border);
311
+ color: var(--rts-ink-light);
312
+ }
313
+
314
+ .rts-search__clear svg {
315
+ width: 14px;
316
+ height: 14px;
317
+ }
318
+
319
+ /* Templates */
320
+ .rts-templates {
321
+ display: flex;
322
+ flex-direction: column;
323
+ gap: 24px;
324
+ }
325
+
326
+ .rts-section__title {
327
+ display: flex;
328
+ align-items: center;
329
+ gap: 10px;
330
+ font-size: 0.8125rem;
331
+ font-weight: 600;
332
+ color: var(--rts-ink-light);
333
+ text-transform: uppercase;
334
+ letter-spacing: 0.05em;
335
+ margin: 0 0 16px;
336
+ }
337
+
338
+ .rts-section__dot {
339
+ width: 8px;
340
+ height: 8px;
341
+ border-radius: 50%;
342
+ background: var(--rts-slate);
343
+ }
344
+
345
+ .rts-section__dot--active {
346
+ background: var(--rts-emerald);
347
+ }
348
+
349
+ .rts-grid {
350
+ display: grid;
351
+ grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
352
+ gap: 16px;
353
+ }
354
+
355
+ /* Card */
356
+ .rts-card {
357
+ position: relative;
358
+ display: flex;
359
+ flex-direction: column;
360
+ text-align: left;
361
+ background: var(--rts-surface);
362
+ border: 2px solid var(--rts-border-light);
363
+ border-radius: 16px;
364
+ overflow: hidden;
365
+ cursor: pointer;
366
+ transition: all 0.2s ease;
367
+ }
368
+
369
+ .rts-card:hover {
370
+ border-color: var(--rts-border);
371
+ box-shadow: 0 4px 16px rgba(26, 31, 54, 0.08);
372
+ transform: translateY(-2px);
373
+ }
374
+
375
+ .rts-card--selected {
376
+ border-color: var(--rts-teal);
377
+ background: var(--rts-teal-light);
378
+ }
379
+
380
+ .rts-card--selected:hover {
381
+ border-color: var(--rts-teal);
382
+ }
383
+
384
+ .rts-card__header {
385
+ position: relative;
386
+ height: 100px;
387
+ }
388
+
389
+ .rts-card__thumb {
390
+ width: 100%;
391
+ height: 100%;
392
+ background-size: cover;
393
+ background-position: center;
394
+ background-color: var(--rts-border-light);
395
+ }
396
+
397
+ .rts-card__thumb--placeholder {
398
+ display: flex;
399
+ align-items: center;
400
+ justify-content: center;
401
+ background: linear-gradient(135deg, var(--rts-border-light) 0%, var(--rts-border) 100%);
402
+ color: var(--rts-ink-muted);
403
+ }
404
+
405
+ .rts-card__thumb--placeholder svg {
406
+ width: 32px;
407
+ height: 32px;
408
+ opacity: 0.5;
409
+ }
410
+
411
+ .rts-card__status {
412
+ position: absolute;
413
+ top: 10px;
414
+ left: 10px;
415
+ display: flex;
416
+ align-items: center;
417
+ gap: 6px;
418
+ padding: 4px 10px;
419
+ font-size: 0.625rem;
420
+ font-weight: 700;
421
+ text-transform: uppercase;
422
+ letter-spacing: 0.04em;
423
+ border-radius: 100px;
424
+ backdrop-filter: blur(8px);
425
+ }
426
+
427
+ .rts-card__status-dot {
428
+ width: 6px;
429
+ height: 6px;
430
+ border-radius: 50%;
431
+ }
432
+
433
+ .rts-card__body {
434
+ padding: 16px;
435
+ display: flex;
436
+ flex-direction: column;
437
+ gap: 8px;
438
+ flex: 1;
439
+ }
440
+
441
+ .rts-card__title {
442
+ font-size: 1rem;
443
+ font-weight: 600;
444
+ color: var(--rts-ink);
445
+ margin: 0;
446
+ letter-spacing: -0.01em;
447
+ }
448
+
449
+ .rts-card__summary {
450
+ font-size: 0.8125rem;
451
+ color: var(--rts-ink-light);
452
+ margin: 0;
453
+ line-height: 1.5;
454
+ display: -webkit-box;
455
+ -webkit-line-clamp: 2;
456
+ -webkit-box-orient: vertical;
457
+ overflow: hidden;
458
+ }
459
+
460
+ .rts-card__meta {
461
+ display: flex;
462
+ gap: 12px;
463
+ margin-top: auto;
464
+ padding-top: 8px;
465
+ }
466
+
467
+ .rts-card__tag {
468
+ display: inline-flex;
469
+ align-items: center;
470
+ gap: 4px;
471
+ font-size: 0.75rem;
472
+ color: var(--rts-ink-muted);
473
+ }
474
+
475
+ .rts-card__tag svg {
476
+ width: 14px;
477
+ height: 14px;
478
+ }
479
+
480
+ .rts-card__check {
481
+ position: absolute;
482
+ top: 10px;
483
+ right: 10px;
484
+ width: 28px;
485
+ height: 28px;
486
+ border-radius: 50%;
487
+ background: var(--rts-teal);
488
+ color: white;
489
+ display: flex;
490
+ align-items: center;
491
+ justify-content: center;
492
+ box-shadow: 0 2px 8px rgba(20, 184, 166, 0.4);
493
+ }
494
+
495
+ .rts-card__check svg {
496
+ width: 16px;
497
+ height: 16px;
498
+ }
499
+
500
+ /* Recommended Badge - Social Proof */
501
+ .rts-card--recommended {
502
+ border-color: var(--rts-amber);
503
+ box-shadow: 0 0 0 1px var(--rts-amber), 0 4px 16px rgba(245, 158, 11, 0.15);
504
+ }
505
+
506
+ .rts-card--recommended:hover {
507
+ border-color: var(--rts-amber);
508
+ box-shadow: 0 0 0 1px var(--rts-amber), 0 6px 20px rgba(245, 158, 11, 0.2);
509
+ }
510
+
511
+ .rts-card__recommended {
512
+ position: absolute;
513
+ top: -1px;
514
+ right: 40px;
515
+ display: flex;
516
+ align-items: center;
517
+ gap: 4px;
518
+ padding: 6px 12px;
519
+ font-size: 0.625rem;
520
+ font-weight: 700;
521
+ text-transform: uppercase;
522
+ letter-spacing: 0.04em;
523
+ color: white;
524
+ background: linear-gradient(135deg, var(--rts-amber) 0%, #d97706 100%);
525
+ border-radius: 0 0 8px 8px;
526
+ box-shadow: 0 2px 8px rgba(245, 158, 11, 0.4);
527
+ z-index: 5;
528
+ }
529
+
530
+ .rts-card__recommended svg {
531
+ width: 12px;
532
+ height: 12px;
533
+ fill: currentColor;
534
+ stroke: currentColor;
535
+ }
536
+
537
+ /* Empty State */
538
+ .rts-empty {
539
+ padding: 48px;
540
+ text-align: center;
541
+ background: var(--rts-surface);
542
+ border-radius: 16px;
543
+ border: 2px dashed var(--rts-border);
544
+ }
545
+
546
+ .rts-empty--search {
547
+ padding: 24px;
548
+ border-style: solid;
549
+ background: var(--rts-surface-raised);
550
+ }
551
+
552
+ .rts-empty__icon {
553
+ width: 64px;
554
+ height: 64px;
555
+ margin: 0 auto 16px;
556
+ color: var(--rts-ink-muted);
557
+ opacity: 0.5;
558
+ }
559
+
560
+ .rts-empty__icon svg {
561
+ width: 100%;
562
+ height: 100%;
563
+ }
564
+
565
+ .rts-empty__title {
566
+ font-size: 1.125rem;
567
+ font-weight: 600;
568
+ color: var(--rts-ink);
569
+ margin: 0 0 8px;
570
+ }
571
+
572
+ .rts-empty__desc {
573
+ font-size: 0.9375rem;
574
+ color: var(--rts-ink-muted);
575
+ margin: 0;
576
+ max-width: 400px;
577
+ margin: 0 auto;
578
+ line-height: 1.6;
579
+ }
580
+
581
+ /* ========================================
582
+ Template Detail View (Read-Only)
583
+ ======================================== */
584
+
585
+ .rtd-container {
586
+ display: flex;
587
+ flex-direction: column;
588
+ gap: 20px;
589
+ }
590
+
591
+ /* Selected Header */
592
+ .rtd-selected-header {
593
+ display: flex;
594
+ align-items: center;
595
+ justify-content: space-between;
596
+ padding: 16px 20px;
597
+ background: var(--rts-teal-light);
598
+ border: 2px solid var(--rts-teal);
599
+ border-radius: 12px;
600
+ }
601
+
602
+ .rtd-selected-header__info {
603
+ display: flex;
604
+ align-items: center;
605
+ justify-content: space-between;
606
+ width: 100%;
607
+ }
608
+
609
+ .rtd-selected-header__badge {
610
+ display: inline-flex;
611
+ align-items: center;
612
+ gap: 8px;
613
+ font-size: 0.875rem;
614
+ font-weight: 600;
615
+ color: var(--rts-teal);
616
+ }
617
+
618
+ .rtd-selected-header__badge svg {
619
+ width: 18px;
620
+ height: 18px;
621
+ }
622
+
623
+ .rtd-selected-header__change {
624
+ display: inline-flex;
625
+ align-items: center;
626
+ gap: 6px;
627
+ padding: 8px 16px;
628
+ font-family: var(--rts-font);
629
+ font-size: 0.8125rem;
630
+ font-weight: 600;
631
+ color: var(--rts-teal);
632
+ background: white;
633
+ border: 1.5px solid var(--rts-teal);
634
+ border-radius: 8px;
635
+ cursor: pointer;
636
+ transition: all 0.15s ease;
637
+ }
638
+
639
+ .rtd-selected-header__change:hover {
640
+ background: var(--rts-teal);
641
+ color: white;
642
+ }
643
+
644
+ .rtd-selected-header__change svg {
645
+ width: 16px;
646
+ height: 16px;
647
+ }
648
+
649
+ /* Hero Section */
650
+ .rtd-hero {
651
+ display: grid;
652
+ grid-template-columns: 180px 1fr;
653
+ gap: 24px;
654
+ background: var(--rts-surface);
655
+ border-radius: 16px;
656
+ padding: 24px;
657
+ box-shadow: 0 1px 3px rgba(26, 31, 54, 0.04), 0 4px 16px rgba(26, 31, 54, 0.06);
658
+ }
659
+
660
+ .rtd-hero__thumbnail-area {
661
+ position: relative;
662
+ }
663
+
664
+ .rtd-hero__thumbnail {
665
+ width: 180px;
666
+ height: 135px;
667
+ border-radius: 12px;
668
+ background: linear-gradient(135deg, var(--rts-border-light) 0%, var(--rts-border) 100%);
669
+ background-size: cover;
670
+ background-position: center;
671
+ position: relative;
672
+ overflow: hidden;
673
+ }
674
+
675
+ .rtd-hero__thumbnail-placeholder {
676
+ position: absolute;
677
+ inset: 0;
678
+ display: flex;
679
+ align-items: center;
680
+ justify-content: center;
681
+ color: var(--rts-ink-muted);
682
+ }
683
+
684
+ .rtd-hero__thumbnail-placeholder svg {
685
+ width: 40px;
686
+ height: 40px;
687
+ opacity: 0.5;
688
+ }
689
+
690
+ .rtd-hero__status {
691
+ position: absolute;
692
+ top: 10px;
693
+ left: 10px;
694
+ display: flex;
695
+ align-items: center;
696
+ gap: 6px;
697
+ padding: 5px 12px;
698
+ font-size: 0.6875rem;
699
+ font-weight: 700;
700
+ text-transform: uppercase;
701
+ letter-spacing: 0.04em;
702
+ border-radius: 100px;
703
+ backdrop-filter: blur(8px);
704
+ }
705
+
706
+ .rtd-hero__status-dot {
707
+ width: 6px;
708
+ height: 6px;
709
+ border-radius: 50%;
710
+ }
711
+
712
+ .rtd-hero__identity {
713
+ display: flex;
714
+ flex-direction: column;
715
+ gap: 12px;
716
+ }
717
+
718
+ .rtd-hero__title {
719
+ font-size: 1.75rem;
720
+ font-weight: 700;
721
+ color: var(--rts-ink);
722
+ margin: 0;
723
+ letter-spacing: -0.02em;
724
+ }
725
+
726
+ .rtd-hero__audiences {
727
+ display: flex;
728
+ flex-wrap: wrap;
729
+ gap: 8px;
730
+ }
731
+
732
+ .rtd-hero__audience-tag {
733
+ display: inline-flex;
734
+ align-items: center;
735
+ padding: 5px 12px;
736
+ font-size: 0.8125rem;
737
+ font-weight: 600;
738
+ border-radius: 100px;
739
+ background: var(--rts-teal-light);
740
+ border: 1px solid rgba(20, 184, 166, 0.2);
741
+ color: var(--rts-teal);
742
+ }
743
+
744
+ .rtd-hero__summary {
745
+ font-size: 0.9375rem;
746
+ line-height: 1.6;
747
+ color: var(--rts-ink-light);
748
+ margin: 0;
749
+ }
750
+
751
+ /* Cards */
752
+ .rtd-card {
753
+ background: var(--rts-surface);
754
+ border-radius: 16px;
755
+ padding: 24px;
756
+ box-shadow: 0 1px 3px rgba(26, 31, 54, 0.04), 0 4px 16px rgba(26, 31, 54, 0.06);
757
+ }
758
+
759
+ .rtd-card__header {
760
+ display: flex;
761
+ align-items: flex-start;
762
+ gap: 14px;
763
+ margin-bottom: 16px;
764
+ }
765
+
766
+ .rtd-card__header--with-progress {
767
+ flex-wrap: wrap;
768
+ justify-content: space-between;
769
+ }
770
+
771
+ .rtd-card__header-left {
772
+ display: flex;
773
+ align-items: flex-start;
774
+ gap: 14px;
775
+ }
776
+
777
+ /* Goal-Gradient Progress Bar for Facet Selection */
778
+ .rtd-facet-progress {
779
+ display: flex;
780
+ flex-direction: column;
781
+ align-items: flex-end;
782
+ gap: 6px;
783
+ min-width: 140px;
784
+ }
785
+
786
+ .rtd-facet-progress__bar {
787
+ width: 100%;
788
+ height: 6px;
789
+ background: var(--rts-border-light);
790
+ border-radius: 100px;
791
+ overflow: hidden;
792
+ }
793
+
794
+ .rtd-facet-progress__fill {
795
+ height: 100%;
796
+ background: linear-gradient(90deg, var(--rts-sky), var(--rts-emerald));
797
+ border-radius: 100px;
798
+ transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);
799
+ }
800
+
801
+ .rtd-facet-progress__text {
802
+ font-size: 0.6875rem;
803
+ color: var(--rts-ink-muted);
804
+ font-weight: 500;
805
+ }
806
+
807
+ .rtd-facet-progress__complete {
808
+ color: var(--rts-emerald);
809
+ font-weight: 600;
810
+ }
811
+
812
+ .rtd-card__icon {
813
+ width: 40px;
814
+ height: 40px;
815
+ border-radius: 10px;
816
+ display: flex;
817
+ align-items: center;
818
+ justify-content: center;
819
+ flex-shrink: 0;
820
+ }
821
+
822
+ .rtd-card__icon svg {
823
+ width: 20px;
824
+ height: 20px;
825
+ }
826
+
827
+ .rtd-card__icon--violet {
828
+ background: var(--rts-violet-light);
829
+ color: var(--rts-violet);
830
+ }
831
+
832
+ .rtd-card__icon--emerald {
833
+ background: var(--rts-emerald-light);
834
+ color: var(--rts-emerald);
835
+ }
836
+
837
+ .rtd-card__icon--amber {
838
+ background: var(--rts-amber-light);
839
+ color: var(--rts-amber);
840
+ }
841
+
842
+ .rtd-card__icon--sky {
843
+ background: var(--rts-sky-light);
844
+ color: var(--rts-sky);
845
+ }
846
+
847
+ .rtd-card__icon--teal {
848
+ background: var(--rts-teal-light);
849
+ color: var(--rts-teal);
850
+ }
851
+
852
+ .rtd-card__title {
853
+ font-size: 1rem;
854
+ font-weight: 600;
855
+ color: var(--rts-ink);
856
+ margin: 0;
857
+ }
858
+
859
+ .rtd-card__subtitle {
860
+ font-size: 0.8125rem;
861
+ color: var(--rts-ink-muted);
862
+ margin: 2px 0 0;
863
+ }
864
+
865
+ .rtd-card__text {
866
+ font-size: 0.9375rem;
867
+ line-height: 1.7;
868
+ color: var(--rts-ink-light);
869
+ margin: 0;
870
+ }
871
+
872
+ .rtd-card__empty {
873
+ font-size: 0.875rem;
874
+ color: var(--rts-ink-muted);
875
+ font-style: italic;
876
+ margin: 0;
877
+ }
878
+
879
+ .rtd-grid {
880
+ display: grid;
881
+ grid-template-columns: 1fr 1fr;
882
+ gap: 20px;
883
+ }
884
+
885
+ /* Services */
886
+ .rtd-services {
887
+ display: flex;
888
+ flex-direction: column;
889
+ gap: 6px;
890
+ }
891
+
892
+ .rtd-service {
893
+ display: flex;
894
+ align-items: center;
895
+ gap: 10px;
896
+ padding: 10px 12px;
897
+ background: var(--rts-surface-raised);
898
+ border-radius: 8px;
899
+ }
900
+
901
+ .rtd-service__bullet {
902
+ width: 6px;
903
+ height: 6px;
904
+ border-radius: 50%;
905
+ background: var(--rts-emerald);
906
+ flex-shrink: 0;
907
+ }
908
+
909
+ .rtd-service__bullet--recurring {
910
+ background: var(--rts-amber);
911
+ }
912
+
913
+ .rtd-service__text {
914
+ font-size: 0.875rem;
915
+ color: var(--rts-ink);
916
+ }
917
+
918
+ /* Facets */
919
+ .rtd-facets {
920
+ display: grid;
921
+ grid-template-columns: repeat(2, 1fr);
922
+ gap: 12px;
923
+ }
924
+
925
+ .rtd-facet {
926
+ padding: 14px;
927
+ background: var(--rts-surface-raised);
928
+ border-radius: 10px;
929
+ border: 1px solid var(--rts-border-light);
930
+ }
931
+
932
+ .rtd-facet__label {
933
+ display: block;
934
+ font-size: 0.75rem;
935
+ font-weight: 600;
936
+ color: var(--rts-ink-muted);
937
+ text-transform: uppercase;
938
+ letter-spacing: 0.04em;
939
+ margin-bottom: 8px;
940
+ }
941
+
942
+ .rtd-facet__options {
943
+ display: flex;
944
+ flex-wrap: wrap;
945
+ gap: 6px;
946
+ }
947
+
948
+ .rtd-facet__option {
949
+ display: inline-block;
950
+ padding: 4px 10px;
951
+ font-size: 0.8125rem;
952
+ font-weight: 500;
953
+ color: var(--rts-sky);
954
+ background: var(--rts-sky-light);
955
+ border-radius: 6px;
956
+ text-transform: capitalize;
957
+ }
958
+
959
+ /* Interactive facet options */
960
+ .rtd-facet--selectable {
961
+ background: var(--rts-surface);
962
+ border: 1.5px solid var(--rts-border);
963
+ }
964
+
965
+ .rtd-facet__option--toggle {
966
+ display: inline-flex;
967
+ align-items: center;
968
+ gap: 8px;
969
+ padding: 8px 14px;
970
+ font-family: var(--rts-font);
971
+ font-size: 0.8125rem;
972
+ font-weight: 500;
973
+ color: var(--rts-ink-light);
974
+ background: var(--rts-surface-raised);
975
+ border: 1.5px solid var(--rts-border);
976
+ border-radius: 8px;
977
+ cursor: pointer;
978
+ transition: all 0.15s ease;
979
+ text-transform: capitalize;
980
+ }
981
+
982
+ .rtd-facet__option--toggle:hover {
983
+ border-color: var(--rts-sky);
984
+ background: var(--rts-sky-light);
985
+ color: var(--rts-sky);
986
+ }
987
+
988
+ .rtd-facet__option--toggle.rtd-facet__option--selected {
989
+ background: var(--rts-teal-light);
990
+ border-color: var(--rts-teal);
991
+ color: var(--rts-teal);
992
+ }
993
+
994
+ .rtd-facet__checkbox {
995
+ display: flex;
996
+ align-items: center;
997
+ justify-content: center;
998
+ width: 18px;
999
+ height: 18px;
1000
+ border-radius: 4px;
1001
+ background: var(--rts-surface);
1002
+ border: 1.5px solid var(--rts-border);
1003
+ flex-shrink: 0;
1004
+ transition: all 0.15s ease;
1005
+ }
1006
+
1007
+ .rtd-facet__option--toggle:hover .rtd-facet__checkbox {
1008
+ border-color: var(--rts-sky);
1009
+ }
1010
+
1011
+ .rtd-facet__option--selected .rtd-facet__checkbox {
1012
+ background: var(--rts-teal);
1013
+ border-color: var(--rts-teal);
1014
+ }
1015
+
1016
+ .rtd-facet__checkbox svg {
1017
+ width: 12px;
1018
+ height: 12px;
1019
+ color: white;
1020
+ }
1021
+
1022
+ /* Services List */
1023
+ .rtd-services-list {
1024
+ display: flex;
1025
+ flex-direction: column;
1026
+ gap: 8px;
1027
+ }
1028
+
1029
+ .rtd-service-item {
1030
+ padding: 14px 16px;
1031
+ background: var(--rts-surface-raised);
1032
+ border-radius: 10px;
1033
+ border: 1px solid var(--rts-border-light);
1034
+ }
1035
+
1036
+ .rtd-service-item__main {
1037
+ display: flex;
1038
+ align-items: center;
1039
+ gap: 10px;
1040
+ }
1041
+
1042
+ .rtd-service-item__title {
1043
+ font-size: 0.9375rem;
1044
+ font-weight: 600;
1045
+ color: var(--rts-ink);
1046
+ }
1047
+
1048
+ .rtd-service-item__badge {
1049
+ padding: 2px 8px;
1050
+ font-size: 0.625rem;
1051
+ font-weight: 700;
1052
+ text-transform: uppercase;
1053
+ letter-spacing: 0.04em;
1054
+ color: var(--rts-emerald);
1055
+ background: var(--rts-emerald-light);
1056
+ border-radius: 4px;
1057
+ }
1058
+
1059
+ .rtd-service-item__desc {
1060
+ font-size: 0.8125rem;
1061
+ color: var(--rts-ink-light);
1062
+ margin: 6px 0 0;
1063
+ line-height: 1.5;
1064
+ }
1065
+
1066
+ /* Metadata */
1067
+ .rtd-metadata {
1068
+ display: grid;
1069
+ grid-template-columns: 1fr 1fr;
1070
+ gap: 16px;
1071
+ padding: 20px;
1072
+ background: var(--rts-surface);
1073
+ border-radius: 12px;
1074
+ box-shadow: 0 1px 3px rgba(26, 31, 54, 0.04);
1075
+ }
1076
+
1077
+ .rtd-meta-field {
1078
+ display: flex;
1079
+ flex-direction: column;
1080
+ gap: 6px;
1081
+ }
1082
+
1083
+ .rtd-meta-field__label {
1084
+ font-size: 0.6875rem;
1085
+ font-weight: 700;
1086
+ text-transform: uppercase;
1087
+ letter-spacing: 0.06em;
1088
+ color: var(--rts-ink-muted);
1089
+ }
1090
+
1091
+ .rtd-meta-field__value {
1092
+ font-size: 0.9375rem;
1093
+ color: var(--rts-ink);
1094
+ }
1095
+
1096
+ .rtd-meta-field__value--mono {
1097
+ font-family: var(--rts-mono);
1098
+ font-size: 0.875rem;
1099
+ }
1100
+
1101
+ .rtd-meta-field__link {
1102
+ display: inline-flex;
1103
+ align-items: center;
1104
+ gap: 6px;
1105
+ font-size: 0.875rem;
1106
+ color: var(--rts-teal);
1107
+ text-decoration: none;
1108
+ transition: color 0.15s ease;
1109
+ }
1110
+
1111
+ .rtd-meta-field__link:hover {
1112
+ color: #0d9488;
1113
+ }
1114
+
1115
+ .rtd-meta-field__link svg {
1116
+ width: 14px;
1117
+ height: 14px;
1118
+ }
1119
+
1120
+ /* Responsive */
1121
+ @media (max-width: 900px) {
1122
+ .rtd-hero {
1123
+ grid-template-columns: 1fr;
1124
+ }
1125
+
1126
+ .rtd-hero__thumbnail-area {
1127
+ order: -1;
1128
+ }
1129
+
1130
+ .rtd-hero__thumbnail {
1131
+ width: 100%;
1132
+ height: 160px;
1133
+ }
1134
+
1135
+ .rtd-grid {
1136
+ grid-template-columns: 1fr;
1137
+ }
1138
+
1139
+ .rtd-facets {
1140
+ grid-template-columns: 1fr;
1141
+ }
1142
+
1143
+ .rtd-metadata {
1144
+ grid-template-columns: 1fr;
1145
+ }
1146
+ }
1147
+
1148
+ @media (max-width: 768px) {
1149
+ .rts-header {
1150
+ flex-direction: column;
1151
+ }
1152
+
1153
+ .rts-grid {
1154
+ grid-template-columns: 1fr;
1155
+ }
1156
+ }
1157
+ `;