@powerhousedao/contributor-billing 0.1.39 → 0.1.41

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 (260) hide show
  1. package/dist/document-models/index.d.ts +1 -0
  2. package/dist/document-models/index.d.ts.map +1 -1
  3. package/dist/document-models/index.js +1 -0
  4. package/dist/document-models/resource-template/actions.d.ts +32 -0
  5. package/dist/document-models/resource-template/actions.d.ts.map +1 -0
  6. package/dist/document-models/resource-template/actions.js +12 -0
  7. package/dist/document-models/resource-template/gen/actions.d.ts +14 -0
  8. package/dist/document-models/resource-template/gen/actions.d.ts.map +1 -0
  9. package/dist/document-models/resource-template/gen/actions.js +6 -0
  10. package/dist/document-models/resource-template/gen/audience-management/actions.d.ts +12 -0
  11. package/dist/document-models/resource-template/gen/audience-management/actions.d.ts.map +1 -0
  12. package/dist/document-models/resource-template/gen/audience-management/actions.js +1 -0
  13. package/dist/document-models/resource-template/gen/audience-management/creators.d.ts +5 -0
  14. package/dist/document-models/resource-template/gen/audience-management/creators.d.ts.map +1 -0
  15. package/dist/document-models/resource-template/gen/audience-management/creators.js +4 -0
  16. package/dist/document-models/resource-template/gen/audience-management/error.d.ts +21 -0
  17. package/dist/document-models/resource-template/gen/audience-management/error.d.ts.map +1 -0
  18. package/dist/document-models/resource-template/gen/audience-management/error.js +20 -0
  19. package/dist/document-models/resource-template/gen/audience-management/operations.d.ts +8 -0
  20. package/dist/document-models/resource-template/gen/audience-management/operations.d.ts.map +1 -0
  21. package/dist/document-models/resource-template/gen/audience-management/operations.js +3 -0
  22. package/dist/document-models/resource-template/gen/creators.d.ts +13 -0
  23. package/dist/document-models/resource-template/gen/creators.d.ts.map +1 -0
  24. package/dist/document-models/resource-template/gen/creators.js +12 -0
  25. package/dist/document-models/resource-template/gen/document-model.d.ts +3 -0
  26. package/dist/document-models/resource-template/gen/document-model.d.ts.map +1 -0
  27. package/dist/document-models/resource-template/gen/document-model.js +410 -0
  28. package/dist/document-models/resource-template/gen/document-schema.d.ts +408 -0
  29. package/dist/document-models/resource-template/gen/document-schema.d.ts.map +1 -0
  30. package/dist/document-models/resource-template/gen/document-schema.js +33 -0
  31. package/dist/document-models/resource-template/gen/document-type.d.ts +2 -0
  32. package/dist/document-models/resource-template/gen/document-type.d.ts.map +1 -0
  33. package/dist/document-models/resource-template/gen/document-type.js +1 -0
  34. package/dist/document-models/resource-template/gen/facet-targeting/actions.d.ts +20 -0
  35. package/dist/document-models/resource-template/gen/facet-targeting/actions.d.ts.map +1 -0
  36. package/dist/document-models/resource-template/gen/facet-targeting/actions.js +1 -0
  37. package/dist/document-models/resource-template/gen/facet-targeting/creators.d.ts +7 -0
  38. package/dist/document-models/resource-template/gen/facet-targeting/creators.d.ts.map +1 -0
  39. package/dist/document-models/resource-template/gen/facet-targeting/creators.js +6 -0
  40. package/dist/document-models/resource-template/gen/facet-targeting/error.d.ts +28 -0
  41. package/dist/document-models/resource-template/gen/facet-targeting/error.d.ts.map +1 -0
  42. package/dist/document-models/resource-template/gen/facet-targeting/error.js +29 -0
  43. package/dist/document-models/resource-template/gen/facet-targeting/operations.d.ts +10 -0
  44. package/dist/document-models/resource-template/gen/facet-targeting/operations.d.ts.map +1 -0
  45. package/dist/document-models/resource-template/gen/facet-targeting/operations.js +3 -0
  46. package/dist/document-models/resource-template/gen/index.d.ts +17 -0
  47. package/dist/document-models/resource-template/gen/index.d.ts.map +1 -0
  48. package/dist/document-models/resource-template/gen/index.js +16 -0
  49. package/dist/document-models/resource-template/gen/option-group-management/actions.d.ts +16 -0
  50. package/dist/document-models/resource-template/gen/option-group-management/actions.d.ts.map +1 -0
  51. package/dist/document-models/resource-template/gen/option-group-management/actions.js +1 -0
  52. package/dist/document-models/resource-template/gen/option-group-management/creators.d.ts +6 -0
  53. package/dist/document-models/resource-template/gen/option-group-management/creators.d.ts.map +1 -0
  54. package/dist/document-models/resource-template/gen/option-group-management/creators.js +5 -0
  55. package/dist/document-models/resource-template/gen/option-group-management/error.d.ts +28 -0
  56. package/dist/document-models/resource-template/gen/option-group-management/error.d.ts.map +1 -0
  57. package/dist/document-models/resource-template/gen/option-group-management/error.js +29 -0
  58. package/dist/document-models/resource-template/gen/option-group-management/operations.d.ts +9 -0
  59. package/dist/document-models/resource-template/gen/option-group-management/operations.d.ts.map +1 -0
  60. package/dist/document-models/resource-template/gen/option-group-management/operations.js +3 -0
  61. package/dist/document-models/resource-template/gen/ph-factories.d.ts +23 -0
  62. package/dist/document-models/resource-template/gen/ph-factories.d.ts.map +1 -0
  63. package/dist/document-models/resource-template/gen/ph-factories.js +61 -0
  64. package/dist/document-models/resource-template/gen/reducer.d.ts +3 -0
  65. package/dist/document-models/resource-template/gen/reducer.d.ts.map +1 -0
  66. package/dist/document-models/resource-template/gen/reducer.js +98 -0
  67. package/dist/document-models/resource-template/gen/schema/index.d.ts +3 -0
  68. package/dist/document-models/resource-template/gen/schema/index.d.ts.map +1 -0
  69. package/dist/document-models/resource-template/gen/schema/index.js +2 -0
  70. package/dist/document-models/resource-template/gen/schema/types.d.ts +305 -0
  71. package/dist/document-models/resource-template/gen/schema/types.d.ts.map +1 -0
  72. package/dist/document-models/resource-template/gen/schema/types.js +1 -0
  73. package/dist/document-models/resource-template/gen/schema/zod.d.ts +37 -0
  74. package/dist/document-models/resource-template/gen/schema/zod.d.ts.map +1 -0
  75. package/dist/document-models/resource-template/gen/schema/zod.js +236 -0
  76. package/dist/document-models/resource-template/gen/service-category-management/actions.d.ts +12 -0
  77. package/dist/document-models/resource-template/gen/service-category-management/actions.d.ts.map +1 -0
  78. package/dist/document-models/resource-template/gen/service-category-management/actions.js +1 -0
  79. package/dist/document-models/resource-template/gen/service-category-management/creators.d.ts +5 -0
  80. package/dist/document-models/resource-template/gen/service-category-management/creators.d.ts.map +1 -0
  81. package/dist/document-models/resource-template/gen/service-category-management/creators.js +4 -0
  82. package/dist/document-models/resource-template/gen/service-category-management/error.d.ts +2 -0
  83. package/dist/document-models/resource-template/gen/service-category-management/error.d.ts.map +1 -0
  84. package/dist/document-models/resource-template/gen/service-category-management/error.js +1 -0
  85. package/dist/document-models/resource-template/gen/service-category-management/operations.d.ts +8 -0
  86. package/dist/document-models/resource-template/gen/service-category-management/operations.d.ts.map +1 -0
  87. package/dist/document-models/resource-template/gen/service-category-management/operations.js +3 -0
  88. package/dist/document-models/resource-template/gen/service-management/actions.d.ts +24 -0
  89. package/dist/document-models/resource-template/gen/service-management/actions.d.ts.map +1 -0
  90. package/dist/document-models/resource-template/gen/service-management/actions.js +1 -0
  91. package/dist/document-models/resource-template/gen/service-management/creators.d.ts +8 -0
  92. package/dist/document-models/resource-template/gen/service-management/creators.d.ts.map +1 -0
  93. package/dist/document-models/resource-template/gen/service-management/creators.js +7 -0
  94. package/dist/document-models/resource-template/gen/service-management/error.d.ts +52 -0
  95. package/dist/document-models/resource-template/gen/service-management/error.d.ts.map +1 -0
  96. package/dist/document-models/resource-template/gen/service-management/error.js +61 -0
  97. package/dist/document-models/resource-template/gen/service-management/operations.d.ts +11 -0
  98. package/dist/document-models/resource-template/gen/service-management/operations.d.ts.map +1 -0
  99. package/dist/document-models/resource-template/gen/service-management/operations.js +3 -0
  100. package/dist/document-models/resource-template/gen/template-management/actions.d.ts +20 -0
  101. package/dist/document-models/resource-template/gen/template-management/actions.d.ts.map +1 -0
  102. package/dist/document-models/resource-template/gen/template-management/actions.js +1 -0
  103. package/dist/document-models/resource-template/gen/template-management/creators.d.ts +7 -0
  104. package/dist/document-models/resource-template/gen/template-management/creators.d.ts.map +1 -0
  105. package/dist/document-models/resource-template/gen/template-management/creators.js +6 -0
  106. package/dist/document-models/resource-template/gen/template-management/error.d.ts +2 -0
  107. package/dist/document-models/resource-template/gen/template-management/error.d.ts.map +1 -0
  108. package/dist/document-models/resource-template/gen/template-management/error.js +1 -0
  109. package/dist/document-models/resource-template/gen/template-management/operations.d.ts +10 -0
  110. package/dist/document-models/resource-template/gen/template-management/operations.d.ts.map +1 -0
  111. package/dist/document-models/resource-template/gen/template-management/operations.js +3 -0
  112. package/dist/document-models/resource-template/gen/types.d.ts +12 -0
  113. package/dist/document-models/resource-template/gen/types.d.ts.map +1 -0
  114. package/dist/document-models/resource-template/gen/types.js +1 -0
  115. package/dist/document-models/resource-template/gen/utils.d.ts +15 -0
  116. package/dist/document-models/resource-template/gen/utils.d.ts.map +1 -0
  117. package/dist/document-models/resource-template/gen/utils.js +65 -0
  118. package/dist/document-models/resource-template/hooks.d.ts +11 -0
  119. package/dist/document-models/resource-template/hooks.d.ts.map +1 -0
  120. package/dist/document-models/resource-template/hooks.js +26 -0
  121. package/dist/document-models/resource-template/index.d.ts +10 -0
  122. package/dist/document-models/resource-template/index.d.ts.map +1 -0
  123. package/dist/document-models/resource-template/index.js +9 -0
  124. package/dist/document-models/resource-template/module.d.ts +5 -0
  125. package/dist/document-models/resource-template/module.d.ts.map +1 -0
  126. package/dist/document-models/resource-template/module.js +10 -0
  127. package/dist/document-models/resource-template/src/index.d.ts +2 -0
  128. package/dist/document-models/resource-template/src/index.d.ts.map +1 -0
  129. package/dist/document-models/resource-template/src/index.js +1 -0
  130. package/dist/document-models/resource-template/src/reducers/audience-management.d.ts +3 -0
  131. package/dist/document-models/resource-template/src/reducers/audience-management.d.ts.map +1 -0
  132. package/dist/document-models/resource-template/src/reducers/audience-management.js +17 -0
  133. package/dist/document-models/resource-template/src/reducers/facet-targeting.d.ts +3 -0
  134. package/dist/document-models/resource-template/src/reducers/facet-targeting.d.ts.map +1 -0
  135. package/dist/document-models/resource-template/src/reducers/facet-targeting.js +46 -0
  136. package/dist/document-models/resource-template/src/reducers/option-group-management.d.ts +3 -0
  137. package/dist/document-models/resource-template/src/reducers/option-group-management.d.ts.map +1 -0
  138. package/dist/document-models/resource-template/src/reducers/option-group-management.js +42 -0
  139. package/dist/document-models/resource-template/src/reducers/service-category-management.d.ts +3 -0
  140. package/dist/document-models/resource-template/src/reducers/service-category-management.d.ts.map +1 -0
  141. package/dist/document-models/resource-template/src/reducers/service-category-management.js +10 -0
  142. package/dist/document-models/resource-template/src/reducers/service-management.d.ts +3 -0
  143. package/dist/document-models/resource-template/src/reducers/service-management.d.ts.map +1 -0
  144. package/dist/document-models/resource-template/src/reducers/service-management.js +68 -0
  145. package/dist/document-models/resource-template/src/reducers/template-management.d.ts +3 -0
  146. package/dist/document-models/resource-template/src/reducers/template-management.d.ts.map +1 -0
  147. package/dist/document-models/resource-template/src/reducers/template-management.js +32 -0
  148. package/dist/document-models/resource-template/src/tests/audience-management.test.d.ts +6 -0
  149. package/dist/document-models/resource-template/src/tests/audience-management.test.d.ts.map +1 -0
  150. package/dist/document-models/resource-template/src/tests/audience-management.test.js +29 -0
  151. package/dist/document-models/resource-template/src/tests/document-model.test.d.ts +10 -0
  152. package/dist/document-models/resource-template/src/tests/document-model.test.d.ts.map +1 -0
  153. package/dist/document-models/resource-template/src/tests/document-model.test.js +104 -0
  154. package/dist/document-models/resource-template/src/tests/facet-targeting.test.d.ts +6 -0
  155. package/dist/document-models/resource-template/src/tests/facet-targeting.test.d.ts.map +1 -0
  156. package/dist/document-models/resource-template/src/tests/facet-targeting.test.js +49 -0
  157. package/dist/document-models/resource-template/src/tests/option-group-management.test.d.ts +6 -0
  158. package/dist/document-models/resource-template/src/tests/option-group-management.test.d.ts.map +1 -0
  159. package/dist/document-models/resource-template/src/tests/option-group-management.test.js +39 -0
  160. package/dist/document-models/resource-template/src/tests/service-category-management.test.d.ts +6 -0
  161. package/dist/document-models/resource-template/src/tests/service-category-management.test.d.ts.map +1 -0
  162. package/dist/document-models/resource-template/src/tests/service-category-management.test.js +29 -0
  163. package/dist/document-models/resource-template/src/tests/service-management.test.d.ts +6 -0
  164. package/dist/document-models/resource-template/src/tests/service-management.test.d.ts.map +1 -0
  165. package/dist/document-models/resource-template/src/tests/service-management.test.js +59 -0
  166. package/dist/document-models/resource-template/src/tests/template-management.test.d.ts +6 -0
  167. package/dist/document-models/resource-template/src/tests/template-management.test.d.ts.map +1 -0
  168. package/dist/document-models/resource-template/src/tests/template-management.test.js +49 -0
  169. package/dist/document-models/resource-template/src/utils.d.ts +2 -0
  170. package/dist/document-models/resource-template/src/utils.d.ts.map +1 -0
  171. package/dist/document-models/resource-template/src/utils.js +1 -0
  172. package/dist/document-models/resource-template/utils.d.ts +14 -0
  173. package/dist/document-models/resource-template/utils.d.ts.map +1 -0
  174. package/dist/document-models/resource-template/utils.js +7 -0
  175. package/dist/document-models/service-offering/actions.d.ts +2 -0
  176. package/dist/document-models/service-offering/actions.d.ts.map +1 -1
  177. package/dist/document-models/service-offering/gen/document-model.d.ts.map +1 -1
  178. package/dist/document-models/service-offering/gen/document-model.js +47 -2
  179. package/dist/document-models/service-offering/gen/document-schema.d.ts +35 -16
  180. package/dist/document-models/service-offering/gen/document-schema.d.ts.map +1 -1
  181. package/dist/document-models/service-offering/gen/offering-management/actions.d.ts +10 -2
  182. package/dist/document-models/service-offering/gen/offering-management/actions.d.ts.map +1 -1
  183. package/dist/document-models/service-offering/gen/offering-management/creators.d.ts +4 -2
  184. package/dist/document-models/service-offering/gen/offering-management/creators.d.ts.map +1 -1
  185. package/dist/document-models/service-offering/gen/offering-management/creators.js +3 -1
  186. package/dist/document-models/service-offering/gen/offering-management/error.d.ts +20 -1
  187. package/dist/document-models/service-offering/gen/offering-management/error.d.ts.map +1 -1
  188. package/dist/document-models/service-offering/gen/offering-management/error.js +25 -0
  189. package/dist/document-models/service-offering/gen/offering-management/operations.d.ts +3 -1
  190. package/dist/document-models/service-offering/gen/offering-management/operations.d.ts.map +1 -1
  191. package/dist/document-models/service-offering/gen/ph-factories.d.ts.map +1 -1
  192. package/dist/document-models/service-offering/gen/ph-factories.js +1 -0
  193. package/dist/document-models/service-offering/gen/reducer.d.ts +1 -1
  194. package/dist/document-models/service-offering/gen/reducer.d.ts.map +1 -1
  195. package/dist/document-models/service-offering/gen/reducer.js +9 -1
  196. package/dist/document-models/service-offering/gen/schema/types.d.ts +21 -11
  197. package/dist/document-models/service-offering/gen/schema/types.d.ts.map +1 -1
  198. package/dist/document-models/service-offering/gen/schema/zod.d.ts +3 -1
  199. package/dist/document-models/service-offering/gen/schema/zod.d.ts.map +1 -1
  200. package/dist/document-models/service-offering/gen/schema/zod.js +14 -0
  201. package/dist/document-models/service-offering/gen/utils.d.ts.map +1 -1
  202. package/dist/document-models/service-offering/gen/utils.js +1 -0
  203. package/dist/document-models/service-offering/src/reducers/offering-management.d.ts.map +1 -1
  204. package/dist/document-models/service-offering/src/reducers/offering-management.js +22 -4
  205. package/dist/document-models/service-offering/src/reducers/option-group-management.d.ts.map +1 -1
  206. package/dist/document-models/service-offering/src/reducers/option-group-management.js +8 -11
  207. package/dist/document-models/service-offering/src/reducers/service-management.d.ts.map +1 -1
  208. package/dist/document-models/service-offering/src/reducers/service-management.js +12 -15
  209. package/dist/document-models/service-offering/src/reducers/tier-management.d.ts.map +1 -1
  210. package/dist/document-models/service-offering/src/reducers/tier-management.js +19 -21
  211. package/dist/document-models/service-offering/src/tests/offering-management.test.js +1 -81
  212. package/dist/document-models/service-offering/src/tests/tier-management.test.d.ts +4 -0
  213. package/dist/document-models/service-offering/src/tests/tier-management.test.d.ts.map +1 -1
  214. package/dist/document-models/service-offering/src/tests/tier-management.test.js +109 -1
  215. package/dist/editors/accounts-editor/components/AccountForm.d.ts.map +1 -1
  216. package/dist/editors/builder-team-admin/components/DriveExplorer.d.ts.map +1 -1
  217. package/dist/editors/builder-team-admin/components/DriveExplorer.js +4 -0
  218. package/dist/editors/builder-team-admin/components/FolderTree.d.ts +1 -1
  219. package/dist/editors/builder-team-admin/components/FolderTree.d.ts.map +1 -1
  220. package/dist/editors/builder-team-admin/components/FolderTree.js +134 -9
  221. package/dist/editors/builder-team-admin/components/ResourcesServices.d.ts +8 -0
  222. package/dist/editors/builder-team-admin/components/ResourcesServices.d.ts.map +1 -0
  223. package/dist/editors/builder-team-admin/components/ResourcesServices.js +76 -0
  224. package/dist/editors/builder-team-admin/hooks/useResourcesServicesAutoPlacement.d.ts +27 -0
  225. package/dist/editors/builder-team-admin/hooks/useResourcesServicesAutoPlacement.d.ts.map +1 -0
  226. package/dist/editors/builder-team-admin/hooks/useResourcesServicesAutoPlacement.js +123 -0
  227. package/dist/editors/index.d.ts +1 -0
  228. package/dist/editors/index.d.ts.map +1 -1
  229. package/dist/editors/index.js +1 -0
  230. package/dist/editors/resource-template-editor/components/FacetTargeting.d.ts +9 -0
  231. package/dist/editors/resource-template-editor/components/FacetTargeting.d.ts.map +1 -0
  232. package/dist/editors/resource-template-editor/components/FacetTargeting.js +451 -0
  233. package/dist/editors/resource-template-editor/components/TemplateInfo.d.ts +9 -0
  234. package/dist/editors/resource-template-editor/components/TemplateInfo.d.ts.map +1 -0
  235. package/dist/editors/resource-template-editor/components/TemplateInfo.js +988 -0
  236. package/dist/editors/resource-template-editor/editor.d.ts +2 -0
  237. package/dist/editors/resource-template-editor/editor.d.ts.map +1 -0
  238. package/dist/editors/resource-template-editor/editor.js +149 -0
  239. package/dist/editors/resource-template-editor/module.d.ts +4 -0
  240. package/dist/editors/resource-template-editor/module.d.ts.map +1 -0
  241. package/dist/editors/resource-template-editor/module.js +10 -0
  242. package/dist/editors/service-offering-editor/components/ResourceTemplateSelector.d.ts +9 -0
  243. package/dist/editors/service-offering-editor/components/ResourceTemplateSelector.d.ts.map +1 -0
  244. package/dist/editors/service-offering-editor/components/ResourceTemplateSelector.js +1050 -0
  245. package/dist/editors/service-offering-editor/components/ServicesList.d.ts.map +1 -1
  246. package/dist/editors/service-offering-editor/components/ServicesList.js +1 -1
  247. package/dist/editors/service-offering-editor/components/TabNavigation.d.ts.map +1 -1
  248. package/dist/editors/service-offering-editor/components/TabNavigation.js +17 -3
  249. package/dist/editors/service-offering-editor/components/TheMatrix.d.ts.map +1 -1
  250. package/dist/editors/service-offering-editor/components/TheMatrix.js +284 -25
  251. package/dist/editors/service-offering-editor/editor.d.ts.map +1 -1
  252. package/dist/editors/service-offering-editor/editor.js +2 -2
  253. package/dist/index.d.ts +1 -1
  254. package/dist/index.d.ts.map +1 -1
  255. package/dist/style.css +25 -0
  256. package/dist/subgraphs/budget-statements/resolvers.d.ts.map +1 -1
  257. package/dist/subgraphs/budget-statements/resolvers.js +76 -11
  258. package/dist/subgraphs/budget-statements/schema.d.ts.map +1 -1
  259. package/dist/subgraphs/budget-statements/schema.js +2 -1
  260. package/package.json +1 -1
@@ -0,0 +1,1050 @@
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
+ // If a template is selected and user is not changing, show the detail view with facet selection
51
+ if (selectedTemplate && !showingSelector) {
52
+ return (_jsxs(_Fragment, { children: [_jsx("style", { children: styles }), _jsx("div", { className: "rts-container", children: _jsx(TemplateDetailView, { template: selectedTemplate, offeringDocument: document, dispatch: dispatch, onChangeTemplate: handleChangeTemplate }) })] }));
53
+ }
54
+ 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, 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))) })] }))] })) })] })] }));
55
+ }
56
+ function TemplateCard({ template, isSelected, onSelect }) {
57
+ const { state } = template;
58
+ const globalState = state.global;
59
+ const statusStyle = getStatusStyle(globalState.status);
60
+ return (_jsxs("button", { type: "button", onClick: onSelect, className: `rts-card ${isSelected ? "rts-card--selected" : ""}`, children: [_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: {
61
+ backgroundColor: statusStyle.bg,
62
+ color: statusStyle.text,
63
+ }, 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" }) }) }))] }));
64
+ }
65
+ function TemplateDetailView({ template, offeringDocument, dispatch, onChangeTemplate, }) {
66
+ const globalState = template.state.global;
67
+ const statusStyle = getStatusStyle(globalState.status);
68
+ // Get the current facet selections from the offering document
69
+ const offeringFacetTargets = offeringDocument.state.global.facetTargets;
70
+ // Check if an option is selected in the offering
71
+ const isOptionSelected = useCallback((categoryKey, optionId) => {
72
+ const facetTarget = offeringFacetTargets.find((f) => f.categoryKey === categoryKey);
73
+ return facetTarget?.selectedOptions.includes(optionId) ?? false;
74
+ }, [offeringFacetTargets]);
75
+ // Toggle a facet option in the offering
76
+ const handleToggleFacetOption = useCallback((categoryKey, categoryLabel, optionId) => {
77
+ const now = new Date().toISOString();
78
+ const existingFacetTarget = offeringFacetTargets.find((f) => f.categoryKey === categoryKey);
79
+ if (!existingFacetTarget) {
80
+ // Create the facet target with this option selected
81
+ dispatch(setFacetTarget({
82
+ id: generateId(),
83
+ categoryKey,
84
+ categoryLabel,
85
+ selectedOptions: [optionId],
86
+ lastModified: now,
87
+ }));
88
+ }
89
+ else if (existingFacetTarget.selectedOptions.includes(optionId)) {
90
+ // Remove the option
91
+ dispatch(removeFacetOption({
92
+ categoryKey,
93
+ optionId,
94
+ lastModified: now,
95
+ }));
96
+ }
97
+ else {
98
+ // Add the option
99
+ dispatch(addFacetOption({
100
+ categoryKey,
101
+ optionId,
102
+ lastModified: now,
103
+ }));
104
+ }
105
+ }, [offeringFacetTargets, dispatch]);
106
+ 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: {
107
+ backgroundImage: globalState.thumbnailUrl
108
+ ? `url(${globalState.thumbnailUrl})`
109
+ : undefined,
110
+ }, 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: {
111
+ backgroundColor: statusStyle.bg,
112
+ color: statusStyle.text,
113
+ }, 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
114
+ ? {
115
+ backgroundColor: `${audience.color}15`,
116
+ borderColor: `${audience.color}40`,
117
+ color: audience.color,
118
+ }
119
+ : 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", 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" })] })] }), _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) => {
120
+ const selected = isOptionSelected(facet.categoryKey, option);
121
+ 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));
122
+ }) })] }, 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" })] })] })] }))] })] }));
123
+ }
124
+ function getStatusStyle(status) {
125
+ const statusColors = {
126
+ ACTIVE: {
127
+ bg: "var(--rts-emerald-light)",
128
+ text: "var(--rts-emerald)",
129
+ dot: "var(--rts-emerald)",
130
+ },
131
+ DRAFT: {
132
+ bg: "var(--rts-slate-light)",
133
+ text: "var(--rts-slate)",
134
+ dot: "var(--rts-slate)",
135
+ },
136
+ COMING_SOON: {
137
+ bg: "var(--rts-sky-light)",
138
+ text: "var(--rts-sky)",
139
+ dot: "var(--rts-sky)",
140
+ },
141
+ DEPRECATED: {
142
+ bg: "var(--rts-rose-light)",
143
+ text: "var(--rts-rose)",
144
+ dot: "var(--rts-rose)",
145
+ },
146
+ };
147
+ return statusColors[status] || statusColors.DRAFT;
148
+ }
149
+ const styles = `
150
+ .rts-container {
151
+ --rts-font: 'Instrument Sans', system-ui, sans-serif;
152
+ --rts-mono: 'DM Mono', 'SF Mono', monospace;
153
+
154
+ --rts-ink: #1a1f36;
155
+ --rts-ink-light: #4a5578;
156
+ --rts-ink-muted: #8792a8;
157
+ --rts-surface: #ffffff;
158
+ --rts-surface-raised: #fafbfc;
159
+ --rts-border: #e4e8f0;
160
+ --rts-border-light: #f0f2f7;
161
+
162
+ --rts-teal: #14b8a6;
163
+ --rts-teal-light: #ccfbf1;
164
+ --rts-violet: #7c5cff;
165
+ --rts-violet-light: #f4f1ff;
166
+ --rts-emerald: #10b981;
167
+ --rts-emerald-light: #e8faf3;
168
+ --rts-sky: #0ea5e9;
169
+ --rts-sky-light: #e8f7fc;
170
+ --rts-rose: #f43f5e;
171
+ --rts-rose-light: #fef1f3;
172
+ --rts-slate: #64748b;
173
+ --rts-slate-light: #f1f5f9;
174
+ --rts-amber: #f59e0b;
175
+ --rts-amber-light: #fef7e6;
176
+
177
+ font-family: var(--rts-font);
178
+ display: flex;
179
+ flex-direction: column;
180
+ gap: 24px;
181
+ }
182
+
183
+ /* Header */
184
+ .rts-header {
185
+ display: flex;
186
+ align-items: flex-start;
187
+ gap: 20px;
188
+ padding: 24px;
189
+ background: var(--rts-surface);
190
+ border-radius: 16px;
191
+ box-shadow: 0 1px 3px rgba(26, 31, 54, 0.04), 0 4px 16px rgba(26, 31, 54, 0.06);
192
+ border-left: 4px solid var(--rts-teal);
193
+ }
194
+
195
+ .rts-header__icon {
196
+ width: 48px;
197
+ height: 48px;
198
+ border-radius: 12px;
199
+ background: var(--rts-teal-light);
200
+ color: var(--rts-teal);
201
+ display: flex;
202
+ align-items: center;
203
+ justify-content: center;
204
+ flex-shrink: 0;
205
+ }
206
+
207
+ .rts-header__icon svg {
208
+ width: 24px;
209
+ height: 24px;
210
+ }
211
+
212
+ .rts-header__text {
213
+ flex: 1;
214
+ }
215
+
216
+ .rts-header__title {
217
+ font-size: 1.25rem;
218
+ font-weight: 700;
219
+ color: var(--rts-ink);
220
+ margin: 0 0 8px;
221
+ letter-spacing: -0.02em;
222
+ }
223
+
224
+ .rts-header__subtitle {
225
+ font-size: 0.9375rem;
226
+ color: var(--rts-ink-light);
227
+ margin: 0;
228
+ line-height: 1.6;
229
+ max-width: 600px;
230
+ }
231
+
232
+ /* Search */
233
+ .rts-search {
234
+ display: flex;
235
+ align-items: center;
236
+ gap: 12px;
237
+ padding: 14px 18px;
238
+ background: var(--rts-surface);
239
+ border: 1.5px solid var(--rts-border);
240
+ border-radius: 12px;
241
+ transition: all 0.15s ease;
242
+ }
243
+
244
+ .rts-search:focus-within {
245
+ border-color: var(--rts-teal);
246
+ box-shadow: 0 0 0 3px var(--rts-teal-light);
247
+ }
248
+
249
+ .rts-search > svg {
250
+ width: 20px;
251
+ height: 20px;
252
+ color: var(--rts-ink-muted);
253
+ flex-shrink: 0;
254
+ }
255
+
256
+ .rts-search__input {
257
+ flex: 1;
258
+ font-family: var(--rts-font);
259
+ font-size: 0.9375rem;
260
+ background: transparent;
261
+ border: none;
262
+ outline: none;
263
+ color: var(--rts-ink);
264
+ }
265
+
266
+ .rts-search__input::placeholder {
267
+ color: var(--rts-ink-muted);
268
+ }
269
+
270
+ .rts-search__clear {
271
+ display: flex;
272
+ align-items: center;
273
+ justify-content: center;
274
+ width: 24px;
275
+ height: 24px;
276
+ padding: 0;
277
+ background: var(--rts-border-light);
278
+ border: none;
279
+ border-radius: 6px;
280
+ color: var(--rts-ink-muted);
281
+ cursor: pointer;
282
+ transition: all 0.15s ease;
283
+ }
284
+
285
+ .rts-search__clear:hover {
286
+ background: var(--rts-border);
287
+ color: var(--rts-ink-light);
288
+ }
289
+
290
+ .rts-search__clear svg {
291
+ width: 14px;
292
+ height: 14px;
293
+ }
294
+
295
+ /* Templates */
296
+ .rts-templates {
297
+ display: flex;
298
+ flex-direction: column;
299
+ gap: 24px;
300
+ }
301
+
302
+ .rts-section__title {
303
+ display: flex;
304
+ align-items: center;
305
+ gap: 10px;
306
+ font-size: 0.8125rem;
307
+ font-weight: 600;
308
+ color: var(--rts-ink-light);
309
+ text-transform: uppercase;
310
+ letter-spacing: 0.05em;
311
+ margin: 0 0 16px;
312
+ }
313
+
314
+ .rts-section__dot {
315
+ width: 8px;
316
+ height: 8px;
317
+ border-radius: 50%;
318
+ background: var(--rts-slate);
319
+ }
320
+
321
+ .rts-section__dot--active {
322
+ background: var(--rts-emerald);
323
+ }
324
+
325
+ .rts-grid {
326
+ display: grid;
327
+ grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
328
+ gap: 16px;
329
+ }
330
+
331
+ /* Card */
332
+ .rts-card {
333
+ position: relative;
334
+ display: flex;
335
+ flex-direction: column;
336
+ text-align: left;
337
+ background: var(--rts-surface);
338
+ border: 2px solid var(--rts-border-light);
339
+ border-radius: 16px;
340
+ overflow: hidden;
341
+ cursor: pointer;
342
+ transition: all 0.2s ease;
343
+ }
344
+
345
+ .rts-card:hover {
346
+ border-color: var(--rts-border);
347
+ box-shadow: 0 4px 16px rgba(26, 31, 54, 0.08);
348
+ transform: translateY(-2px);
349
+ }
350
+
351
+ .rts-card--selected {
352
+ border-color: var(--rts-teal);
353
+ background: var(--rts-teal-light);
354
+ }
355
+
356
+ .rts-card--selected:hover {
357
+ border-color: var(--rts-teal);
358
+ }
359
+
360
+ .rts-card__header {
361
+ position: relative;
362
+ height: 100px;
363
+ }
364
+
365
+ .rts-card__thumb {
366
+ width: 100%;
367
+ height: 100%;
368
+ background-size: cover;
369
+ background-position: center;
370
+ background-color: var(--rts-border-light);
371
+ }
372
+
373
+ .rts-card__thumb--placeholder {
374
+ display: flex;
375
+ align-items: center;
376
+ justify-content: center;
377
+ background: linear-gradient(135deg, var(--rts-border-light) 0%, var(--rts-border) 100%);
378
+ color: var(--rts-ink-muted);
379
+ }
380
+
381
+ .rts-card__thumb--placeholder svg {
382
+ width: 32px;
383
+ height: 32px;
384
+ opacity: 0.5;
385
+ }
386
+
387
+ .rts-card__status {
388
+ position: absolute;
389
+ top: 10px;
390
+ left: 10px;
391
+ display: flex;
392
+ align-items: center;
393
+ gap: 6px;
394
+ padding: 4px 10px;
395
+ font-size: 0.625rem;
396
+ font-weight: 700;
397
+ text-transform: uppercase;
398
+ letter-spacing: 0.04em;
399
+ border-radius: 100px;
400
+ backdrop-filter: blur(8px);
401
+ }
402
+
403
+ .rts-card__status-dot {
404
+ width: 6px;
405
+ height: 6px;
406
+ border-radius: 50%;
407
+ }
408
+
409
+ .rts-card__body {
410
+ padding: 16px;
411
+ display: flex;
412
+ flex-direction: column;
413
+ gap: 8px;
414
+ flex: 1;
415
+ }
416
+
417
+ .rts-card__title {
418
+ font-size: 1rem;
419
+ font-weight: 600;
420
+ color: var(--rts-ink);
421
+ margin: 0;
422
+ letter-spacing: -0.01em;
423
+ }
424
+
425
+ .rts-card__summary {
426
+ font-size: 0.8125rem;
427
+ color: var(--rts-ink-light);
428
+ margin: 0;
429
+ line-height: 1.5;
430
+ display: -webkit-box;
431
+ -webkit-line-clamp: 2;
432
+ -webkit-box-orient: vertical;
433
+ overflow: hidden;
434
+ }
435
+
436
+ .rts-card__meta {
437
+ display: flex;
438
+ gap: 12px;
439
+ margin-top: auto;
440
+ padding-top: 8px;
441
+ }
442
+
443
+ .rts-card__tag {
444
+ display: inline-flex;
445
+ align-items: center;
446
+ gap: 4px;
447
+ font-size: 0.75rem;
448
+ color: var(--rts-ink-muted);
449
+ }
450
+
451
+ .rts-card__tag svg {
452
+ width: 14px;
453
+ height: 14px;
454
+ }
455
+
456
+ .rts-card__check {
457
+ position: absolute;
458
+ top: 10px;
459
+ right: 10px;
460
+ width: 28px;
461
+ height: 28px;
462
+ border-radius: 50%;
463
+ background: var(--rts-teal);
464
+ color: white;
465
+ display: flex;
466
+ align-items: center;
467
+ justify-content: center;
468
+ box-shadow: 0 2px 8px rgba(20, 184, 166, 0.4);
469
+ }
470
+
471
+ .rts-card__check svg {
472
+ width: 16px;
473
+ height: 16px;
474
+ }
475
+
476
+ /* Empty State */
477
+ .rts-empty {
478
+ padding: 48px;
479
+ text-align: center;
480
+ background: var(--rts-surface);
481
+ border-radius: 16px;
482
+ border: 2px dashed var(--rts-border);
483
+ }
484
+
485
+ .rts-empty--search {
486
+ padding: 24px;
487
+ border-style: solid;
488
+ background: var(--rts-surface-raised);
489
+ }
490
+
491
+ .rts-empty__icon {
492
+ width: 64px;
493
+ height: 64px;
494
+ margin: 0 auto 16px;
495
+ color: var(--rts-ink-muted);
496
+ opacity: 0.5;
497
+ }
498
+
499
+ .rts-empty__icon svg {
500
+ width: 100%;
501
+ height: 100%;
502
+ }
503
+
504
+ .rts-empty__title {
505
+ font-size: 1.125rem;
506
+ font-weight: 600;
507
+ color: var(--rts-ink);
508
+ margin: 0 0 8px;
509
+ }
510
+
511
+ .rts-empty__desc {
512
+ font-size: 0.9375rem;
513
+ color: var(--rts-ink-muted);
514
+ margin: 0;
515
+ max-width: 400px;
516
+ margin: 0 auto;
517
+ line-height: 1.6;
518
+ }
519
+
520
+ /* ========================================
521
+ Template Detail View (Read-Only)
522
+ ======================================== */
523
+
524
+ .rtd-container {
525
+ display: flex;
526
+ flex-direction: column;
527
+ gap: 20px;
528
+ }
529
+
530
+ /* Selected Header */
531
+ .rtd-selected-header {
532
+ display: flex;
533
+ align-items: center;
534
+ justify-content: space-between;
535
+ padding: 16px 20px;
536
+ background: var(--rts-teal-light);
537
+ border: 2px solid var(--rts-teal);
538
+ border-radius: 12px;
539
+ }
540
+
541
+ .rtd-selected-header__info {
542
+ display: flex;
543
+ align-items: center;
544
+ justify-content: space-between;
545
+ width: 100%;
546
+ }
547
+
548
+ .rtd-selected-header__badge {
549
+ display: inline-flex;
550
+ align-items: center;
551
+ gap: 8px;
552
+ font-size: 0.875rem;
553
+ font-weight: 600;
554
+ color: var(--rts-teal);
555
+ }
556
+
557
+ .rtd-selected-header__badge svg {
558
+ width: 18px;
559
+ height: 18px;
560
+ }
561
+
562
+ .rtd-selected-header__change {
563
+ display: inline-flex;
564
+ align-items: center;
565
+ gap: 6px;
566
+ padding: 8px 16px;
567
+ font-family: var(--rts-font);
568
+ font-size: 0.8125rem;
569
+ font-weight: 600;
570
+ color: var(--rts-teal);
571
+ background: white;
572
+ border: 1.5px solid var(--rts-teal);
573
+ border-radius: 8px;
574
+ cursor: pointer;
575
+ transition: all 0.15s ease;
576
+ }
577
+
578
+ .rtd-selected-header__change:hover {
579
+ background: var(--rts-teal);
580
+ color: white;
581
+ }
582
+
583
+ .rtd-selected-header__change svg {
584
+ width: 16px;
585
+ height: 16px;
586
+ }
587
+
588
+ /* Hero Section */
589
+ .rtd-hero {
590
+ display: grid;
591
+ grid-template-columns: 180px 1fr;
592
+ gap: 24px;
593
+ background: var(--rts-surface);
594
+ border-radius: 16px;
595
+ padding: 24px;
596
+ box-shadow: 0 1px 3px rgba(26, 31, 54, 0.04), 0 4px 16px rgba(26, 31, 54, 0.06);
597
+ }
598
+
599
+ .rtd-hero__thumbnail-area {
600
+ position: relative;
601
+ }
602
+
603
+ .rtd-hero__thumbnail {
604
+ width: 180px;
605
+ height: 135px;
606
+ border-radius: 12px;
607
+ background: linear-gradient(135deg, var(--rts-border-light) 0%, var(--rts-border) 100%);
608
+ background-size: cover;
609
+ background-position: center;
610
+ position: relative;
611
+ overflow: hidden;
612
+ }
613
+
614
+ .rtd-hero__thumbnail-placeholder {
615
+ position: absolute;
616
+ inset: 0;
617
+ display: flex;
618
+ align-items: center;
619
+ justify-content: center;
620
+ color: var(--rts-ink-muted);
621
+ }
622
+
623
+ .rtd-hero__thumbnail-placeholder svg {
624
+ width: 40px;
625
+ height: 40px;
626
+ opacity: 0.5;
627
+ }
628
+
629
+ .rtd-hero__status {
630
+ position: absolute;
631
+ top: 10px;
632
+ left: 10px;
633
+ display: flex;
634
+ align-items: center;
635
+ gap: 6px;
636
+ padding: 5px 12px;
637
+ font-size: 0.6875rem;
638
+ font-weight: 700;
639
+ text-transform: uppercase;
640
+ letter-spacing: 0.04em;
641
+ border-radius: 100px;
642
+ backdrop-filter: blur(8px);
643
+ }
644
+
645
+ .rtd-hero__status-dot {
646
+ width: 6px;
647
+ height: 6px;
648
+ border-radius: 50%;
649
+ }
650
+
651
+ .rtd-hero__identity {
652
+ display: flex;
653
+ flex-direction: column;
654
+ gap: 12px;
655
+ }
656
+
657
+ .rtd-hero__title {
658
+ font-size: 1.75rem;
659
+ font-weight: 700;
660
+ color: var(--rts-ink);
661
+ margin: 0;
662
+ letter-spacing: -0.02em;
663
+ }
664
+
665
+ .rtd-hero__audiences {
666
+ display: flex;
667
+ flex-wrap: wrap;
668
+ gap: 8px;
669
+ }
670
+
671
+ .rtd-hero__audience-tag {
672
+ display: inline-flex;
673
+ align-items: center;
674
+ padding: 5px 12px;
675
+ font-size: 0.8125rem;
676
+ font-weight: 600;
677
+ border-radius: 100px;
678
+ background: var(--rts-teal-light);
679
+ border: 1px solid rgba(20, 184, 166, 0.2);
680
+ color: var(--rts-teal);
681
+ }
682
+
683
+ .rtd-hero__summary {
684
+ font-size: 0.9375rem;
685
+ line-height: 1.6;
686
+ color: var(--rts-ink-light);
687
+ margin: 0;
688
+ }
689
+
690
+ /* Cards */
691
+ .rtd-card {
692
+ background: var(--rts-surface);
693
+ border-radius: 16px;
694
+ padding: 24px;
695
+ box-shadow: 0 1px 3px rgba(26, 31, 54, 0.04), 0 4px 16px rgba(26, 31, 54, 0.06);
696
+ }
697
+
698
+ .rtd-card__header {
699
+ display: flex;
700
+ align-items: flex-start;
701
+ gap: 14px;
702
+ margin-bottom: 16px;
703
+ }
704
+
705
+ .rtd-card__icon {
706
+ width: 40px;
707
+ height: 40px;
708
+ border-radius: 10px;
709
+ display: flex;
710
+ align-items: center;
711
+ justify-content: center;
712
+ flex-shrink: 0;
713
+ }
714
+
715
+ .rtd-card__icon svg {
716
+ width: 20px;
717
+ height: 20px;
718
+ }
719
+
720
+ .rtd-card__icon--violet {
721
+ background: var(--rts-violet-light);
722
+ color: var(--rts-violet);
723
+ }
724
+
725
+ .rtd-card__icon--emerald {
726
+ background: var(--rts-emerald-light);
727
+ color: var(--rts-emerald);
728
+ }
729
+
730
+ .rtd-card__icon--amber {
731
+ background: var(--rts-amber-light);
732
+ color: var(--rts-amber);
733
+ }
734
+
735
+ .rtd-card__icon--sky {
736
+ background: var(--rts-sky-light);
737
+ color: var(--rts-sky);
738
+ }
739
+
740
+ .rtd-card__icon--teal {
741
+ background: var(--rts-teal-light);
742
+ color: var(--rts-teal);
743
+ }
744
+
745
+ .rtd-card__title {
746
+ font-size: 1rem;
747
+ font-weight: 600;
748
+ color: var(--rts-ink);
749
+ margin: 0;
750
+ }
751
+
752
+ .rtd-card__subtitle {
753
+ font-size: 0.8125rem;
754
+ color: var(--rts-ink-muted);
755
+ margin: 2px 0 0;
756
+ }
757
+
758
+ .rtd-card__text {
759
+ font-size: 0.9375rem;
760
+ line-height: 1.7;
761
+ color: var(--rts-ink-light);
762
+ margin: 0;
763
+ }
764
+
765
+ .rtd-card__empty {
766
+ font-size: 0.875rem;
767
+ color: var(--rts-ink-muted);
768
+ font-style: italic;
769
+ margin: 0;
770
+ }
771
+
772
+ .rtd-grid {
773
+ display: grid;
774
+ grid-template-columns: 1fr 1fr;
775
+ gap: 20px;
776
+ }
777
+
778
+ /* Services */
779
+ .rtd-services {
780
+ display: flex;
781
+ flex-direction: column;
782
+ gap: 6px;
783
+ }
784
+
785
+ .rtd-service {
786
+ display: flex;
787
+ align-items: center;
788
+ gap: 10px;
789
+ padding: 10px 12px;
790
+ background: var(--rts-surface-raised);
791
+ border-radius: 8px;
792
+ }
793
+
794
+ .rtd-service__bullet {
795
+ width: 6px;
796
+ height: 6px;
797
+ border-radius: 50%;
798
+ background: var(--rts-emerald);
799
+ flex-shrink: 0;
800
+ }
801
+
802
+ .rtd-service__bullet--recurring {
803
+ background: var(--rts-amber);
804
+ }
805
+
806
+ .rtd-service__text {
807
+ font-size: 0.875rem;
808
+ color: var(--rts-ink);
809
+ }
810
+
811
+ /* Facets */
812
+ .rtd-facets {
813
+ display: grid;
814
+ grid-template-columns: repeat(2, 1fr);
815
+ gap: 12px;
816
+ }
817
+
818
+ .rtd-facet {
819
+ padding: 14px;
820
+ background: var(--rts-surface-raised);
821
+ border-radius: 10px;
822
+ border: 1px solid var(--rts-border-light);
823
+ }
824
+
825
+ .rtd-facet__label {
826
+ display: block;
827
+ font-size: 0.75rem;
828
+ font-weight: 600;
829
+ color: var(--rts-ink-muted);
830
+ text-transform: uppercase;
831
+ letter-spacing: 0.04em;
832
+ margin-bottom: 8px;
833
+ }
834
+
835
+ .rtd-facet__options {
836
+ display: flex;
837
+ flex-wrap: wrap;
838
+ gap: 6px;
839
+ }
840
+
841
+ .rtd-facet__option {
842
+ display: inline-block;
843
+ padding: 4px 10px;
844
+ font-size: 0.8125rem;
845
+ font-weight: 500;
846
+ color: var(--rts-sky);
847
+ background: var(--rts-sky-light);
848
+ border-radius: 6px;
849
+ text-transform: capitalize;
850
+ }
851
+
852
+ /* Interactive facet options */
853
+ .rtd-facet--selectable {
854
+ background: var(--rts-surface);
855
+ border: 1.5px solid var(--rts-border);
856
+ }
857
+
858
+ .rtd-facet__option--toggle {
859
+ display: inline-flex;
860
+ align-items: center;
861
+ gap: 8px;
862
+ padding: 8px 14px;
863
+ font-family: var(--rts-font);
864
+ font-size: 0.8125rem;
865
+ font-weight: 500;
866
+ color: var(--rts-ink-light);
867
+ background: var(--rts-surface-raised);
868
+ border: 1.5px solid var(--rts-border);
869
+ border-radius: 8px;
870
+ cursor: pointer;
871
+ transition: all 0.15s ease;
872
+ text-transform: capitalize;
873
+ }
874
+
875
+ .rtd-facet__option--toggle:hover {
876
+ border-color: var(--rts-sky);
877
+ background: var(--rts-sky-light);
878
+ color: var(--rts-sky);
879
+ }
880
+
881
+ .rtd-facet__option--toggle.rtd-facet__option--selected {
882
+ background: var(--rts-teal-light);
883
+ border-color: var(--rts-teal);
884
+ color: var(--rts-teal);
885
+ }
886
+
887
+ .rtd-facet__checkbox {
888
+ display: flex;
889
+ align-items: center;
890
+ justify-content: center;
891
+ width: 18px;
892
+ height: 18px;
893
+ border-radius: 4px;
894
+ background: var(--rts-surface);
895
+ border: 1.5px solid var(--rts-border);
896
+ flex-shrink: 0;
897
+ transition: all 0.15s ease;
898
+ }
899
+
900
+ .rtd-facet__option--toggle:hover .rtd-facet__checkbox {
901
+ border-color: var(--rts-sky);
902
+ }
903
+
904
+ .rtd-facet__option--selected .rtd-facet__checkbox {
905
+ background: var(--rts-teal);
906
+ border-color: var(--rts-teal);
907
+ }
908
+
909
+ .rtd-facet__checkbox svg {
910
+ width: 12px;
911
+ height: 12px;
912
+ color: white;
913
+ }
914
+
915
+ /* Services List */
916
+ .rtd-services-list {
917
+ display: flex;
918
+ flex-direction: column;
919
+ gap: 8px;
920
+ }
921
+
922
+ .rtd-service-item {
923
+ padding: 14px 16px;
924
+ background: var(--rts-surface-raised);
925
+ border-radius: 10px;
926
+ border: 1px solid var(--rts-border-light);
927
+ }
928
+
929
+ .rtd-service-item__main {
930
+ display: flex;
931
+ align-items: center;
932
+ gap: 10px;
933
+ }
934
+
935
+ .rtd-service-item__title {
936
+ font-size: 0.9375rem;
937
+ font-weight: 600;
938
+ color: var(--rts-ink);
939
+ }
940
+
941
+ .rtd-service-item__badge {
942
+ padding: 2px 8px;
943
+ font-size: 0.625rem;
944
+ font-weight: 700;
945
+ text-transform: uppercase;
946
+ letter-spacing: 0.04em;
947
+ color: var(--rts-emerald);
948
+ background: var(--rts-emerald-light);
949
+ border-radius: 4px;
950
+ }
951
+
952
+ .rtd-service-item__desc {
953
+ font-size: 0.8125rem;
954
+ color: var(--rts-ink-light);
955
+ margin: 6px 0 0;
956
+ line-height: 1.5;
957
+ }
958
+
959
+ /* Metadata */
960
+ .rtd-metadata {
961
+ display: grid;
962
+ grid-template-columns: 1fr 1fr;
963
+ gap: 16px;
964
+ padding: 20px;
965
+ background: var(--rts-surface);
966
+ border-radius: 12px;
967
+ box-shadow: 0 1px 3px rgba(26, 31, 54, 0.04);
968
+ }
969
+
970
+ .rtd-meta-field {
971
+ display: flex;
972
+ flex-direction: column;
973
+ gap: 6px;
974
+ }
975
+
976
+ .rtd-meta-field__label {
977
+ font-size: 0.6875rem;
978
+ font-weight: 700;
979
+ text-transform: uppercase;
980
+ letter-spacing: 0.06em;
981
+ color: var(--rts-ink-muted);
982
+ }
983
+
984
+ .rtd-meta-field__value {
985
+ font-size: 0.9375rem;
986
+ color: var(--rts-ink);
987
+ }
988
+
989
+ .rtd-meta-field__value--mono {
990
+ font-family: var(--rts-mono);
991
+ font-size: 0.875rem;
992
+ }
993
+
994
+ .rtd-meta-field__link {
995
+ display: inline-flex;
996
+ align-items: center;
997
+ gap: 6px;
998
+ font-size: 0.875rem;
999
+ color: var(--rts-teal);
1000
+ text-decoration: none;
1001
+ transition: color 0.15s ease;
1002
+ }
1003
+
1004
+ .rtd-meta-field__link:hover {
1005
+ color: #0d9488;
1006
+ }
1007
+
1008
+ .rtd-meta-field__link svg {
1009
+ width: 14px;
1010
+ height: 14px;
1011
+ }
1012
+
1013
+ /* Responsive */
1014
+ @media (max-width: 900px) {
1015
+ .rtd-hero {
1016
+ grid-template-columns: 1fr;
1017
+ }
1018
+
1019
+ .rtd-hero__thumbnail-area {
1020
+ order: -1;
1021
+ }
1022
+
1023
+ .rtd-hero__thumbnail {
1024
+ width: 100%;
1025
+ height: 160px;
1026
+ }
1027
+
1028
+ .rtd-grid {
1029
+ grid-template-columns: 1fr;
1030
+ }
1031
+
1032
+ .rtd-facets {
1033
+ grid-template-columns: 1fr;
1034
+ }
1035
+
1036
+ .rtd-metadata {
1037
+ grid-template-columns: 1fr;
1038
+ }
1039
+ }
1040
+
1041
+ @media (max-width: 768px) {
1042
+ .rts-header {
1043
+ flex-direction: column;
1044
+ }
1045
+
1046
+ .rts-grid {
1047
+ grid-template-columns: 1fr;
1048
+ }
1049
+ }
1050
+ `;