@burdenoff/microfe-planmagnet 2026.1008.2 → 2026.1008.4

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 (1970) hide show
  1. package/dist/_virtual/__vite-browser-external.js +0 -2
  2. package/dist/components/MarkdownEditor.js +0 -2
  3. package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js +0 -2
  4. package/dist/node_modules/@apollo/client/errors/ServerError.js +0 -2
  5. package/dist/node_modules/@apollo/client/errors/utils.js +0 -2
  6. package/dist/node_modules/clsx/dist/clsx.js +0 -2
  7. package/dist/node_modules/d3-array/src/ascending.js +0 -2
  8. package/dist/node_modules/d3-array/src/bisect.js +0 -2
  9. package/dist/node_modules/d3-array/src/bisector.js +0 -2
  10. package/dist/node_modules/d3-array/src/descending.js +0 -2
  11. package/dist/node_modules/d3-array/src/max.js +0 -2
  12. package/dist/node_modules/d3-array/src/min.js +0 -2
  13. package/dist/node_modules/d3-array/src/number.js +0 -2
  14. package/dist/node_modules/d3-array/src/quantile.js +0 -2
  15. package/dist/node_modules/d3-array/src/quickselect.js +0 -2
  16. package/dist/node_modules/d3-array/src/range.js +0 -2
  17. package/dist/node_modules/d3-array/src/sort.js +0 -2
  18. package/dist/node_modules/d3-array/src/ticks.js +0 -2
  19. package/dist/node_modules/d3-color/src/color.js +0 -2
  20. package/dist/node_modules/d3-color/src/define.js +0 -2
  21. package/dist/node_modules/d3-format/src/defaultLocale.js +0 -2
  22. package/dist/node_modules/d3-format/src/exponent.js +0 -2
  23. package/dist/node_modules/d3-format/src/formatDecimal.js +0 -2
  24. package/dist/node_modules/d3-format/src/formatGroup.js +0 -2
  25. package/dist/node_modules/d3-format/src/formatNumerals.js +0 -2
  26. package/dist/node_modules/d3-format/src/formatPrefixAuto.js +0 -2
  27. package/dist/node_modules/d3-format/src/formatRounded.js +0 -2
  28. package/dist/node_modules/d3-format/src/formatSpecifier.js +0 -2
  29. package/dist/node_modules/d3-format/src/formatTrim.js +0 -2
  30. package/dist/node_modules/d3-format/src/formatTypes.js +0 -2
  31. package/dist/node_modules/d3-format/src/identity.js +0 -2
  32. package/dist/node_modules/d3-format/src/locale.js +0 -2
  33. package/dist/node_modules/d3-format/src/precisionFixed.js +0 -2
  34. package/dist/node_modules/d3-format/src/precisionPrefix.js +0 -2
  35. package/dist/node_modules/d3-format/src/precisionRound.js +0 -2
  36. package/dist/node_modules/d3-interpolate/src/array.js +0 -2
  37. package/dist/node_modules/d3-interpolate/src/basis.js +0 -2
  38. package/dist/node_modules/d3-interpolate/src/basisClosed.js +0 -2
  39. package/dist/node_modules/d3-interpolate/src/color.js +0 -2
  40. package/dist/node_modules/d3-interpolate/src/constant.js +0 -2
  41. package/dist/node_modules/d3-interpolate/src/date.js +0 -2
  42. package/dist/node_modules/d3-interpolate/src/number.js +0 -2
  43. package/dist/node_modules/d3-interpolate/src/numberArray.js +0 -2
  44. package/dist/node_modules/d3-interpolate/src/object.js +0 -2
  45. package/dist/node_modules/d3-interpolate/src/piecewise.js +0 -2
  46. package/dist/node_modules/d3-interpolate/src/rgb.js +0 -2
  47. package/dist/node_modules/d3-interpolate/src/round.js +0 -2
  48. package/dist/node_modules/d3-interpolate/src/string.js +0 -2
  49. package/dist/node_modules/d3-interpolate/src/value.js +0 -2
  50. package/dist/node_modules/d3-path/src/path.js +0 -2
  51. package/dist/node_modules/d3-scale/src/band.js +0 -2
  52. package/dist/node_modules/d3-scale/src/constant.js +0 -2
  53. package/dist/node_modules/d3-scale/src/continuous.js +0 -2
  54. package/dist/node_modules/d3-scale/src/diverging.js +0 -2
  55. package/dist/node_modules/d3-scale/src/identity.js +0 -2
  56. package/dist/node_modules/d3-scale/src/init.js +0 -2
  57. package/dist/node_modules/d3-scale/src/linear.js +0 -2
  58. package/dist/node_modules/d3-scale/src/log.js +0 -2
  59. package/dist/node_modules/d3-scale/src/nice.js +0 -2
  60. package/dist/node_modules/d3-scale/src/number.js +0 -2
  61. package/dist/node_modules/d3-scale/src/ordinal.js +0 -2
  62. package/dist/node_modules/d3-scale/src/pow.js +0 -2
  63. package/dist/node_modules/d3-scale/src/quantile.js +0 -2
  64. package/dist/node_modules/d3-scale/src/quantize.js +0 -2
  65. package/dist/node_modules/d3-scale/src/radial.js +0 -2
  66. package/dist/node_modules/d3-scale/src/sequential.js +0 -2
  67. package/dist/node_modules/d3-scale/src/sequentialQuantile.js +0 -2
  68. package/dist/node_modules/d3-scale/src/symlog.js +0 -2
  69. package/dist/node_modules/d3-scale/src/threshold.js +0 -2
  70. package/dist/node_modules/d3-scale/src/tickFormat.js +0 -2
  71. package/dist/node_modules/d3-scale/src/time.js +0 -2
  72. package/dist/node_modules/d3-scale/src/utcTime.js +0 -2
  73. package/dist/node_modules/d3-shape/src/area.js +0 -2
  74. package/dist/node_modules/d3-shape/src/array.js +0 -2
  75. package/dist/node_modules/d3-shape/src/constant.js +0 -2
  76. package/dist/node_modules/d3-shape/src/curve/basis.js +0 -2
  77. package/dist/node_modules/d3-shape/src/curve/basisClosed.js +0 -2
  78. package/dist/node_modules/d3-shape/src/curve/basisOpen.js +0 -2
  79. package/dist/node_modules/d3-shape/src/curve/bump.js +0 -2
  80. package/dist/node_modules/d3-shape/src/curve/linear.js +0 -2
  81. package/dist/node_modules/d3-shape/src/curve/linearClosed.js +0 -2
  82. package/dist/node_modules/d3-shape/src/curve/monotone.js +0 -2
  83. package/dist/node_modules/d3-shape/src/curve/natural.js +0 -2
  84. package/dist/node_modules/d3-shape/src/curve/step.js +0 -2
  85. package/dist/node_modules/d3-shape/src/line.js +0 -2
  86. package/dist/node_modules/d3-shape/src/math.js +0 -2
  87. package/dist/node_modules/d3-shape/src/noop.js +0 -2
  88. package/dist/node_modules/d3-shape/src/offset/expand.js +0 -2
  89. package/dist/node_modules/d3-shape/src/offset/none.js +0 -2
  90. package/dist/node_modules/d3-shape/src/offset/silhouette.js +0 -2
  91. package/dist/node_modules/d3-shape/src/offset/wiggle.js +0 -2
  92. package/dist/node_modules/d3-shape/src/order/none.js +0 -2
  93. package/dist/node_modules/d3-shape/src/path.js +0 -2
  94. package/dist/node_modules/d3-shape/src/point.js +0 -2
  95. package/dist/node_modules/d3-shape/src/stack.js +0 -2
  96. package/dist/node_modules/d3-shape/src/symbol/circle.js +0 -2
  97. package/dist/node_modules/d3-shape/src/symbol/cross.js +0 -2
  98. package/dist/node_modules/d3-shape/src/symbol/diamond.js +0 -2
  99. package/dist/node_modules/d3-shape/src/symbol/square.js +0 -2
  100. package/dist/node_modules/d3-shape/src/symbol/star.js +0 -2
  101. package/dist/node_modules/d3-shape/src/symbol/triangle.js +0 -2
  102. package/dist/node_modules/d3-shape/src/symbol/wye.js +0 -2
  103. package/dist/node_modules/d3-shape/src/symbol.js +0 -2
  104. package/dist/node_modules/d3-time/src/day.js +0 -2
  105. package/dist/node_modules/d3-time/src/duration.js +0 -2
  106. package/dist/node_modules/d3-time/src/hour.js +0 -2
  107. package/dist/node_modules/d3-time/src/interval.js +0 -2
  108. package/dist/node_modules/d3-time/src/millisecond.js +0 -2
  109. package/dist/node_modules/d3-time/src/minute.js +0 -2
  110. package/dist/node_modules/d3-time/src/month.js +0 -2
  111. package/dist/node_modules/d3-time/src/second.js +0 -2
  112. package/dist/node_modules/d3-time/src/ticks.js +0 -2
  113. package/dist/node_modules/d3-time/src/week.js +0 -2
  114. package/dist/node_modules/d3-time/src/year.js +0 -2
  115. package/dist/node_modules/d3-time-format/src/defaultLocale.js +0 -2
  116. package/dist/node_modules/d3-time-format/src/locale.js +0 -2
  117. package/dist/node_modules/decimal.js-light/decimal.js +0 -2
  118. package/dist/node_modules/eventemitter3/index.js +0 -2
  119. package/dist/node_modules/fast-equals/dist/es/index.js +0 -2
  120. package/dist/node_modules/fflate/esm/browser.js +0 -2
  121. package/dist/node_modules/internmap/src/index.js +0 -2
  122. package/dist/node_modules/jszip/dist/jszip.min.js +0 -2
  123. package/dist/node_modules/lodash/_DataView.js +0 -2
  124. package/dist/node_modules/lodash/_Hash.js +0 -2
  125. package/dist/node_modules/lodash/_ListCache.js +0 -2
  126. package/dist/node_modules/lodash/_Map.js +0 -2
  127. package/dist/node_modules/lodash/_MapCache.js +0 -2
  128. package/dist/node_modules/lodash/_Promise.js +0 -2
  129. package/dist/node_modules/lodash/_Set.js +0 -2
  130. package/dist/node_modules/lodash/_SetCache.js +0 -2
  131. package/dist/node_modules/lodash/_Stack.js +0 -2
  132. package/dist/node_modules/lodash/_Symbol.js +0 -2
  133. package/dist/node_modules/lodash/_Uint8Array.js +0 -2
  134. package/dist/node_modules/lodash/_WeakMap.js +0 -2
  135. package/dist/node_modules/lodash/_apply.js +0 -2
  136. package/dist/node_modules/lodash/_arrayEach.js +0 -2
  137. package/dist/node_modules/lodash/_arrayEvery.js +0 -2
  138. package/dist/node_modules/lodash/_arrayFilter.js +0 -2
  139. package/dist/node_modules/lodash/_arrayIncludes.js +0 -2
  140. package/dist/node_modules/lodash/_arrayIncludesWith.js +0 -2
  141. package/dist/node_modules/lodash/_arrayLikeKeys.js +0 -2
  142. package/dist/node_modules/lodash/_arrayMap.js +0 -2
  143. package/dist/node_modules/lodash/_arrayPush.js +0 -2
  144. package/dist/node_modules/lodash/_arraySome.js +0 -2
  145. package/dist/node_modules/lodash/_asciiToArray.js +0 -2
  146. package/dist/node_modules/lodash/_assignValue.js +0 -2
  147. package/dist/node_modules/lodash/_assocIndexOf.js +0 -2
  148. package/dist/node_modules/lodash/_baseAssign.js +0 -2
  149. package/dist/node_modules/lodash/_baseAssignIn.js +0 -2
  150. package/dist/node_modules/lodash/_baseAssignValue.js +0 -2
  151. package/dist/node_modules/lodash/_baseClone.js +0 -2
  152. package/dist/node_modules/lodash/_baseCreate.js +0 -2
  153. package/dist/node_modules/lodash/_baseEach.js +0 -2
  154. package/dist/node_modules/lodash/_baseEvery.js +0 -2
  155. package/dist/node_modules/lodash/_baseExtremum.js +0 -2
  156. package/dist/node_modules/lodash/_baseFindIndex.js +0 -2
  157. package/dist/node_modules/lodash/_baseFlatten.js +0 -2
  158. package/dist/node_modules/lodash/_baseFor.js +0 -2
  159. package/dist/node_modules/lodash/_baseForOwn.js +0 -2
  160. package/dist/node_modules/lodash/_baseGet.js +0 -2
  161. package/dist/node_modules/lodash/_baseGetAllKeys.js +0 -2
  162. package/dist/node_modules/lodash/_baseGetTag.js +0 -2
  163. package/dist/node_modules/lodash/_baseGt.js +0 -2
  164. package/dist/node_modules/lodash/_baseHasIn.js +0 -2
  165. package/dist/node_modules/lodash/_baseIndexOf.js +0 -2
  166. package/dist/node_modules/lodash/_baseIsArguments.js +0 -2
  167. package/dist/node_modules/lodash/_baseIsEqual.js +0 -2
  168. package/dist/node_modules/lodash/_baseIsEqualDeep.js +0 -2
  169. package/dist/node_modules/lodash/_baseIsMap.js +0 -2
  170. package/dist/node_modules/lodash/_baseIsMatch.js +0 -2
  171. package/dist/node_modules/lodash/_baseIsNaN.js +0 -2
  172. package/dist/node_modules/lodash/_baseIsNative.js +0 -2
  173. package/dist/node_modules/lodash/_baseIsSet.js +0 -2
  174. package/dist/node_modules/lodash/_baseIsTypedArray.js +0 -2
  175. package/dist/node_modules/lodash/_baseIteratee.js +0 -2
  176. package/dist/node_modules/lodash/_baseKeys.js +0 -2
  177. package/dist/node_modules/lodash/_baseKeysIn.js +0 -2
  178. package/dist/node_modules/lodash/_baseLt.js +0 -2
  179. package/dist/node_modules/lodash/_baseMap.js +0 -2
  180. package/dist/node_modules/lodash/_baseMatches.js +0 -2
  181. package/dist/node_modules/lodash/_baseMatchesProperty.js +0 -2
  182. package/dist/node_modules/lodash/_baseOrderBy.js +0 -2
  183. package/dist/node_modules/lodash/_baseProperty.js +0 -2
  184. package/dist/node_modules/lodash/_basePropertyDeep.js +0 -2
  185. package/dist/node_modules/lodash/_baseRange.js +0 -2
  186. package/dist/node_modules/lodash/_baseRest.js +0 -2
  187. package/dist/node_modules/lodash/_baseSetToString.js +0 -2
  188. package/dist/node_modules/lodash/_baseSlice.js +0 -2
  189. package/dist/node_modules/lodash/_baseSome.js +0 -2
  190. package/dist/node_modules/lodash/_baseSortBy.js +0 -2
  191. package/dist/node_modules/lodash/_baseSum.js +0 -2
  192. package/dist/node_modules/lodash/_baseTimes.js +0 -2
  193. package/dist/node_modules/lodash/_baseToString.js +0 -2
  194. package/dist/node_modules/lodash/_baseTrim.js +0 -2
  195. package/dist/node_modules/lodash/_baseUnary.js +0 -2
  196. package/dist/node_modules/lodash/_baseUniq.js +0 -2
  197. package/dist/node_modules/lodash/_baseUnset.js +0 -2
  198. package/dist/node_modules/lodash/_cacheHas.js +0 -2
  199. package/dist/node_modules/lodash/_castPath.js +0 -2
  200. package/dist/node_modules/lodash/_castSlice.js +0 -2
  201. package/dist/node_modules/lodash/_cloneArrayBuffer.js +0 -2
  202. package/dist/node_modules/lodash/_cloneBuffer.js +0 -2
  203. package/dist/node_modules/lodash/_cloneDataView.js +0 -2
  204. package/dist/node_modules/lodash/_cloneRegExp.js +0 -2
  205. package/dist/node_modules/lodash/_cloneSymbol.js +0 -2
  206. package/dist/node_modules/lodash/_cloneTypedArray.js +0 -2
  207. package/dist/node_modules/lodash/_compareAscending.js +0 -2
  208. package/dist/node_modules/lodash/_compareMultiple.js +0 -2
  209. package/dist/node_modules/lodash/_copyArray.js +0 -2
  210. package/dist/node_modules/lodash/_copyObject.js +0 -2
  211. package/dist/node_modules/lodash/_copySymbols.js +0 -2
  212. package/dist/node_modules/lodash/_copySymbolsIn.js +0 -2
  213. package/dist/node_modules/lodash/_coreJsData.js +0 -2
  214. package/dist/node_modules/lodash/_createBaseEach.js +0 -2
  215. package/dist/node_modules/lodash/_createBaseFor.js +0 -2
  216. package/dist/node_modules/lodash/_createCaseFirst.js +0 -2
  217. package/dist/node_modules/lodash/_createFind.js +0 -2
  218. package/dist/node_modules/lodash/_createRange.js +0 -2
  219. package/dist/node_modules/lodash/_createSet.js +0 -2
  220. package/dist/node_modules/lodash/_customOmitClone.js +0 -2
  221. package/dist/node_modules/lodash/_defineProperty.js +0 -2
  222. package/dist/node_modules/lodash/_equalArrays.js +0 -2
  223. package/dist/node_modules/lodash/_equalByTag.js +0 -2
  224. package/dist/node_modules/lodash/_equalObjects.js +0 -2
  225. package/dist/node_modules/lodash/_flatRest.js +0 -2
  226. package/dist/node_modules/lodash/_freeGlobal.js +0 -2
  227. package/dist/node_modules/lodash/_getAllKeys.js +0 -2
  228. package/dist/node_modules/lodash/_getAllKeysIn.js +0 -2
  229. package/dist/node_modules/lodash/_getMapData.js +0 -2
  230. package/dist/node_modules/lodash/_getMatchData.js +0 -2
  231. package/dist/node_modules/lodash/_getNative.js +0 -2
  232. package/dist/node_modules/lodash/_getPrototype.js +0 -2
  233. package/dist/node_modules/lodash/_getRawTag.js +0 -2
  234. package/dist/node_modules/lodash/_getSymbols.js +0 -2
  235. package/dist/node_modules/lodash/_getSymbolsIn.js +0 -2
  236. package/dist/node_modules/lodash/_getTag.js +0 -2
  237. package/dist/node_modules/lodash/_getValue.js +0 -2
  238. package/dist/node_modules/lodash/_hasPath.js +0 -2
  239. package/dist/node_modules/lodash/_hasUnicode.js +0 -2
  240. package/dist/node_modules/lodash/_hashClear.js +0 -2
  241. package/dist/node_modules/lodash/_hashDelete.js +0 -2
  242. package/dist/node_modules/lodash/_hashGet.js +0 -2
  243. package/dist/node_modules/lodash/_hashHas.js +0 -2
  244. package/dist/node_modules/lodash/_hashSet.js +0 -2
  245. package/dist/node_modules/lodash/_initCloneArray.js +0 -2
  246. package/dist/node_modules/lodash/_initCloneByTag.js +0 -2
  247. package/dist/node_modules/lodash/_initCloneObject.js +0 -2
  248. package/dist/node_modules/lodash/_isFlattenable.js +0 -2
  249. package/dist/node_modules/lodash/_isIndex.js +0 -2
  250. package/dist/node_modules/lodash/_isIterateeCall.js +0 -2
  251. package/dist/node_modules/lodash/_isKey.js +0 -2
  252. package/dist/node_modules/lodash/_isKeyable.js +0 -2
  253. package/dist/node_modules/lodash/_isMasked.js +0 -2
  254. package/dist/node_modules/lodash/_isPrototype.js +0 -2
  255. package/dist/node_modules/lodash/_isStrictComparable.js +0 -2
  256. package/dist/node_modules/lodash/_listCacheClear.js +0 -2
  257. package/dist/node_modules/lodash/_listCacheDelete.js +0 -2
  258. package/dist/node_modules/lodash/_listCacheGet.js +0 -2
  259. package/dist/node_modules/lodash/_listCacheHas.js +0 -2
  260. package/dist/node_modules/lodash/_listCacheSet.js +0 -2
  261. package/dist/node_modules/lodash/_mapCacheClear.js +0 -2
  262. package/dist/node_modules/lodash/_mapCacheDelete.js +0 -2
  263. package/dist/node_modules/lodash/_mapCacheGet.js +0 -2
  264. package/dist/node_modules/lodash/_mapCacheHas.js +0 -2
  265. package/dist/node_modules/lodash/_mapCacheSet.js +0 -2
  266. package/dist/node_modules/lodash/_mapToArray.js +0 -2
  267. package/dist/node_modules/lodash/_matchesStrictComparable.js +0 -2
  268. package/dist/node_modules/lodash/_memoizeCapped.js +0 -2
  269. package/dist/node_modules/lodash/_nativeCreate.js +0 -2
  270. package/dist/node_modules/lodash/_nativeKeys.js +0 -2
  271. package/dist/node_modules/lodash/_nativeKeysIn.js +0 -2
  272. package/dist/node_modules/lodash/_nodeUtil.js +0 -2
  273. package/dist/node_modules/lodash/_objectToString.js +0 -2
  274. package/dist/node_modules/lodash/_overArg.js +0 -2
  275. package/dist/node_modules/lodash/_overRest.js +0 -2
  276. package/dist/node_modules/lodash/_parent.js +0 -2
  277. package/dist/node_modules/lodash/_root.js +0 -2
  278. package/dist/node_modules/lodash/_setCacheAdd.js +0 -2
  279. package/dist/node_modules/lodash/_setCacheHas.js +0 -2
  280. package/dist/node_modules/lodash/_setToArray.js +0 -2
  281. package/dist/node_modules/lodash/_setToString.js +0 -2
  282. package/dist/node_modules/lodash/_shortOut.js +0 -2
  283. package/dist/node_modules/lodash/_stackClear.js +0 -2
  284. package/dist/node_modules/lodash/_stackDelete.js +0 -2
  285. package/dist/node_modules/lodash/_stackGet.js +0 -2
  286. package/dist/node_modules/lodash/_stackHas.js +0 -2
  287. package/dist/node_modules/lodash/_stackSet.js +0 -2
  288. package/dist/node_modules/lodash/_strictIndexOf.js +0 -2
  289. package/dist/node_modules/lodash/_stringToArray.js +0 -2
  290. package/dist/node_modules/lodash/_stringToPath.js +0 -2
  291. package/dist/node_modules/lodash/_toKey.js +0 -2
  292. package/dist/node_modules/lodash/_toSource.js +0 -2
  293. package/dist/node_modules/lodash/_trimmedEndIndex.js +0 -2
  294. package/dist/node_modules/lodash/_unicodeToArray.js +0 -2
  295. package/dist/node_modules/lodash/constant.js +0 -2
  296. package/dist/node_modules/lodash/debounce.js +0 -2
  297. package/dist/node_modules/lodash/eq.js +0 -2
  298. package/dist/node_modules/lodash/every.js +0 -2
  299. package/dist/node_modules/lodash/find.js +0 -2
  300. package/dist/node_modules/lodash/findIndex.js +0 -2
  301. package/dist/node_modules/lodash/flatMap.js +0 -2
  302. package/dist/node_modules/lodash/flatten.js +0 -2
  303. package/dist/node_modules/lodash/get.js +0 -2
  304. package/dist/node_modules/lodash/hasIn.js +0 -2
  305. package/dist/node_modules/lodash/identity.js +0 -2
  306. package/dist/node_modules/lodash/isArguments.js +0 -2
  307. package/dist/node_modules/lodash/isArray.js +0 -2
  308. package/dist/node_modules/lodash/isArrayLike.js +0 -2
  309. package/dist/node_modules/lodash/isBoolean.js +0 -2
  310. package/dist/node_modules/lodash/isBuffer.js +0 -2
  311. package/dist/node_modules/lodash/isEqual.js +0 -2
  312. package/dist/node_modules/lodash/isFunction.js +0 -2
  313. package/dist/node_modules/lodash/isLength.js +0 -2
  314. package/dist/node_modules/lodash/isMap.js +0 -2
  315. package/dist/node_modules/lodash/isNaN.js +0 -2
  316. package/dist/node_modules/lodash/isNil.js +0 -2
  317. package/dist/node_modules/lodash/isNumber.js +0 -2
  318. package/dist/node_modules/lodash/isObject.js +0 -2
  319. package/dist/node_modules/lodash/isObjectLike.js +0 -2
  320. package/dist/node_modules/lodash/isPlainObject.js +0 -2
  321. package/dist/node_modules/lodash/isSet.js +0 -2
  322. package/dist/node_modules/lodash/isString.js +0 -2
  323. package/dist/node_modules/lodash/isSymbol.js +0 -2
  324. package/dist/node_modules/lodash/isTypedArray.js +0 -2
  325. package/dist/node_modules/lodash/keys.js +0 -2
  326. package/dist/node_modules/lodash/keysIn.js +0 -2
  327. package/dist/node_modules/lodash/last.js +0 -2
  328. package/dist/node_modules/lodash/map.js +0 -2
  329. package/dist/node_modules/lodash/mapValues.js +0 -2
  330. package/dist/node_modules/lodash/max.js +0 -2
  331. package/dist/node_modules/lodash/maxBy.js +0 -2
  332. package/dist/node_modules/lodash/memoize.js +0 -2
  333. package/dist/node_modules/lodash/min.js +0 -2
  334. package/dist/node_modules/lodash/noop.js +0 -2
  335. package/dist/node_modules/lodash/now.js +0 -2
  336. package/dist/node_modules/lodash/omit.js +0 -2
  337. package/dist/node_modules/lodash/property.js +0 -2
  338. package/dist/node_modules/lodash/range.js +0 -2
  339. package/dist/node_modules/lodash/some.js +0 -2
  340. package/dist/node_modules/lodash/sortBy.js +0 -2
  341. package/dist/node_modules/lodash/stubArray.js +0 -2
  342. package/dist/node_modules/lodash/stubFalse.js +0 -2
  343. package/dist/node_modules/lodash/sumBy.js +0 -2
  344. package/dist/node_modules/lodash/throttle.js +0 -2
  345. package/dist/node_modules/lodash/toFinite.js +0 -2
  346. package/dist/node_modules/lodash/toInteger.js +0 -2
  347. package/dist/node_modules/lodash/toNumber.js +0 -2
  348. package/dist/node_modules/lodash/toString.js +0 -2
  349. package/dist/node_modules/lodash/uniqBy.js +0 -2
  350. package/dist/node_modules/lodash/upperFirst.js +0 -2
  351. package/dist/node_modules/object-assign/index.js +0 -2
  352. package/dist/node_modules/pptxgenjs/dist/pptxgen.es.js +0 -2
  353. package/dist/node_modules/prop-types/checkPropTypes.js +0 -2
  354. package/dist/node_modules/prop-types/factoryWithThrowingShims.js +0 -2
  355. package/dist/node_modules/prop-types/factoryWithTypeCheckers.js +0 -2
  356. package/dist/node_modules/prop-types/index.js +0 -2
  357. package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js +0 -2
  358. package/dist/node_modules/prop-types/lib/has.js +0 -2
  359. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js +0 -2
  360. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js +0 -2
  361. package/dist/node_modules/prop-types/node_modules/react-is/index.js +0 -2
  362. package/dist/node_modules/react-is/cjs/react-is.development.js +0 -2
  363. package/dist/node_modules/react-is/cjs/react-is.production.min.js +0 -2
  364. package/dist/node_modules/react-is/index.js +0 -2
  365. package/dist/node_modules/react-smooth/es6/Animate.js +0 -2
  366. package/dist/node_modules/react-smooth/es6/AnimateManager.js +0 -2
  367. package/dist/node_modules/react-smooth/es6/configUpdate.js +0 -2
  368. package/dist/node_modules/react-smooth/es6/easing.js +0 -2
  369. package/dist/node_modules/react-smooth/es6/index.js +0 -2
  370. package/dist/node_modules/react-smooth/es6/setRafTimeout.js +0 -2
  371. package/dist/node_modules/react-smooth/es6/util.js +0 -2
  372. package/dist/node_modules/recharts/es6/cartesian/Area.js +0 -2
  373. package/dist/node_modules/recharts/es6/cartesian/Bar.js +0 -2
  374. package/dist/node_modules/recharts/es6/cartesian/Brush.js +0 -2
  375. package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js +0 -2
  376. package/dist/node_modules/recharts/es6/cartesian/CartesianGrid.js +0 -2
  377. package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js +0 -2
  378. package/dist/node_modules/recharts/es6/cartesian/Line.js +0 -2
  379. package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js +0 -2
  380. package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js +0 -2
  381. package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js +0 -2
  382. package/dist/node_modules/recharts/es6/cartesian/XAxis.js +0 -2
  383. package/dist/node_modules/recharts/es6/cartesian/YAxis.js +0 -2
  384. package/dist/node_modules/recharts/es6/cartesian/getEquidistantTicks.js +0 -2
  385. package/dist/node_modules/recharts/es6/cartesian/getTicks.js +0 -2
  386. package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js +0 -2
  387. package/dist/node_modules/recharts/es6/chart/AreaChart.js +0 -2
  388. package/dist/node_modules/recharts/es6/chart/BarChart.js +0 -2
  389. package/dist/node_modules/recharts/es6/chart/LineChart.js +0 -2
  390. package/dist/node_modules/recharts/es6/chart/Sankey.js +0 -2
  391. package/dist/node_modules/recharts/es6/chart/Treemap.js +0 -2
  392. package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js +0 -2
  393. package/dist/node_modules/recharts/es6/component/Cell.js +0 -2
  394. package/dist/node_modules/recharts/es6/component/Cursor.js +0 -2
  395. package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js +0 -2
  396. package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js +0 -2
  397. package/dist/node_modules/recharts/es6/component/Label.js +0 -2
  398. package/dist/node_modules/recharts/es6/component/LabelList.js +0 -2
  399. package/dist/node_modules/recharts/es6/component/Legend.js +0 -2
  400. package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js +0 -2
  401. package/dist/node_modules/recharts/es6/component/Text.js +0 -2
  402. package/dist/node_modules/recharts/es6/component/Tooltip.js +0 -2
  403. package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js +0 -2
  404. package/dist/node_modules/recharts/es6/container/Layer.js +0 -2
  405. package/dist/node_modules/recharts/es6/container/Surface.js +0 -2
  406. package/dist/node_modules/recharts/es6/context/chartLayoutContext.js +0 -2
  407. package/dist/node_modules/recharts/es6/shape/Cross.js +0 -2
  408. package/dist/node_modules/recharts/es6/shape/Curve.js +0 -2
  409. package/dist/node_modules/recharts/es6/shape/Dot.js +0 -2
  410. package/dist/node_modules/recharts/es6/shape/Polygon.js +0 -2
  411. package/dist/node_modules/recharts/es6/shape/Rectangle.js +0 -2
  412. package/dist/node_modules/recharts/es6/shape/Sector.js +0 -2
  413. package/dist/node_modules/recharts/es6/shape/Symbols.js +0 -2
  414. package/dist/node_modules/recharts/es6/shape/Trapezoid.js +0 -2
  415. package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js +0 -2
  416. package/dist/node_modules/recharts/es6/util/BarUtils.js +0 -2
  417. package/dist/node_modules/recharts/es6/util/CartesianUtils.js +0 -2
  418. package/dist/node_modules/recharts/es6/util/ChartUtils.js +0 -2
  419. package/dist/node_modules/recharts/es6/util/Constants.js +0 -2
  420. package/dist/node_modules/recharts/es6/util/CssPrefixUtils.js +0 -2
  421. package/dist/node_modules/recharts/es6/util/DOMUtils.js +0 -2
  422. package/dist/node_modules/recharts/es6/util/DataUtils.js +0 -2
  423. package/dist/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js +0 -2
  424. package/dist/node_modules/recharts/es6/util/Events.js +0 -2
  425. package/dist/node_modules/recharts/es6/util/Global.js +0 -2
  426. package/dist/node_modules/recharts/es6/util/IfOverflowMatches.js +0 -2
  427. package/dist/node_modules/recharts/es6/util/LogUtils.js +0 -2
  428. package/dist/node_modules/recharts/es6/util/PolarUtils.js +0 -2
  429. package/dist/node_modules/recharts/es6/util/ReactUtils.js +0 -2
  430. package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js +0 -2
  431. package/dist/node_modules/recharts/es6/util/ShallowEqual.js +0 -2
  432. package/dist/node_modules/recharts/es6/util/TickUtils.js +0 -2
  433. package/dist/node_modules/recharts/es6/util/calculateViewBox.js +0 -2
  434. package/dist/node_modules/recharts/es6/util/cursor/getCursorPoints.js +0 -2
  435. package/dist/node_modules/recharts/es6/util/cursor/getCursorRectangle.js +0 -2
  436. package/dist/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js +0 -2
  437. package/dist/node_modules/recharts/es6/util/getEveryNthWithCondition.js +0 -2
  438. package/dist/node_modules/recharts/es6/util/getLegendProps.js +0 -2
  439. package/dist/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js +0 -2
  440. package/dist/node_modules/recharts/es6/util/payload/getUniqPayload.js +0 -2
  441. package/dist/node_modules/recharts/es6/util/tooltip/translate.js +0 -2
  442. package/dist/node_modules/recharts/es6/util/types.js +0 -2
  443. package/dist/node_modules/recharts-scale/es6/getNiceTickValues.js +0 -2
  444. package/dist/node_modules/recharts-scale/es6/util/arithmetic.js +0 -2
  445. package/dist/node_modules/recharts-scale/es6/util/utils.js +0 -2
  446. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +0 -2
  447. package/dist/node_modules/tiny-invariant/dist/esm/tiny-invariant.js +0 -2
  448. package/dist/node_modules/victory-vendor/es/d3-scale.js +0 -2
  449. package/dist/node_modules/write-excel-file/modules/export/convertFileContentToUint8ArrayBrowser.js +0 -2
  450. package/dist/node_modules/write-excel-file/modules/export/convertFilesContentToUint8Arrays.js +0 -2
  451. package/dist/node_modules/write-excel-file/modules/export/downloadBlob.js +0 -2
  452. package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileBrowser.js +0 -2
  453. package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileUniversal.js +0 -2
  454. package/dist/node_modules/write-excel-file/modules/getSheetData/getSheetData.js +0 -2
  455. package/dist/node_modules/write-excel-file/modules/xlsx/features/conditionalFormatting.js +0 -2
  456. package/dist/node_modules/write-excel-file/modules/xlsx/features/images.js +0 -2
  457. package/dist/node_modules/write-excel-file/modules/xlsx/features/stickyRowsOrColumns.js +0 -2
  458. package/dist/node_modules/write-excel-file/modules/xlsx/files/_Content_Types_.xml.js +0 -2
  459. package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.js +0 -2
  460. package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.rels.js +0 -2
  461. package/dist/node_modules/write-excel-file/modules/xlsx/files/rels.js +0 -2
  462. package/dist/node_modules/write-excel-file/modules/xlsx/files/sharedStrings.xml.js +0 -2
  463. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/cell.js +0 -2
  464. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/column.js +0 -2
  465. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/columns.js +0 -2
  466. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/drawingReference.js +0 -2
  467. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/helpers/getCellStyleProperties.js +0 -2
  468. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/mergedCellsDescription.js +0 -2
  469. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageMargins.js +0 -2
  470. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageSetup.js +0 -2
  471. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/processMergedCells.js +0 -2
  472. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/row.js +0 -2
  473. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheet.xml.js +0 -2
  474. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetData.js +0 -2
  475. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetViews.js +0 -2
  476. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml.rels.js +0 -2
  477. package/dist/node_modules/write-excel-file/modules/xlsx/files/styles.xml.js +0 -2
  478. package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.js +0 -2
  479. package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.rels.js +0 -2
  480. package/dist/node_modules/write-excel-file/modules/xlsx/generateXlsxFileContents.js +0 -2
  481. package/dist/node_modules/write-excel-file/modules/xlsx/getFeatures.js +0 -2
  482. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/convertDateToSerialNumber.js +0 -2
  483. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getAdditionalContent.js +0 -2
  484. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getElementXml.js +0 -2
  485. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getWrittenFiles.js +0 -2
  486. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/transformContent.js +0 -2
  487. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getAlignmentXml.js +0 -2
  488. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getBorderXml.js +0 -2
  489. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getCellAddress.js +0 -2
  490. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFileExtensionForContentType.js +0 -2
  491. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFillXml.js +0 -2
  492. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFontXml.js +0 -2
  493. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getOrderOfSiblings.js +0 -2
  494. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getXlsxColorForHexColor.js +0 -2
  495. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasAlignment.js +0 -2
  496. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasBorder.js +0 -2
  497. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFill.js +0 -2
  498. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFont.js +0 -2
  499. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isCellObject.js +0 -2
  500. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isObject.js +0 -2
  501. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/orderOfSiblings.js +0 -2
  502. package/dist/node_modules/write-excel-file/modules/xlsx/initializeSharedStrings.js +0 -2
  503. package/dist/node_modules/write-excel-file/modules/xlsx/initializeSheets.js +0 -2
  504. package/dist/node_modules/write-excel-file/modules/xlsx/initializeStyles.js +0 -2
  505. package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetData.js +0 -2
  506. package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetName.js +0 -2
  507. package/dist/node_modules/write-excel-file/modules/xml/appendMarkupInsideElement.js +0 -2
  508. package/dist/node_modules/write-excel-file/modules/xml/applyEnclosingElementOffset.js +0 -2
  509. package/dist/node_modules/write-excel-file/modules/xml/escapeXmlSpecialCharacters.js +0 -2
  510. package/dist/node_modules/write-excel-file/modules/xml/findElement.js +0 -2
  511. package/dist/node_modules/write-excel-file/modules/xml/findElementInsideElement.js +0 -2
  512. package/dist/node_modules/write-excel-file/modules/xml/findElementsNonRecursive_.js +0 -2
  513. package/dist/node_modules/write-excel-file/modules/xml/getAttributesString.js +0 -2
  514. package/dist/node_modules/write-excel-file/modules/xml/getChildElements.js +0 -2
  515. package/dist/node_modules/write-excel-file/modules/xml/getClosingTagMarkup.js +0 -2
  516. package/dist/node_modules/write-excel-file/modules/xml/getMarkupInsideElement.js +0 -2
  517. package/dist/node_modules/write-excel-file/modules/xml/getOpeningTagMarkup.js +0 -2
  518. package/dist/node_modules/write-excel-file/modules/xml/getSelfClosingTagMarkup.js +0 -2
  519. package/dist/node_modules/write-excel-file/modules/xml/insertElementMarkupAccordingToOrderOfSiblings.js +0 -2
  520. package/dist/node_modules/write-excel-file/modules/xml/prependMarkupInsideElement.js +0 -2
  521. package/dist/node_modules/write-excel-file/modules/xml/removeInvalidXmlCharacters.js +0 -2
  522. package/dist/node_modules/write-excel-file/modules/xml/replaceElement.js +0 -2
  523. package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeName.js +0 -2
  524. package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeValue.js +0 -2
  525. package/dist/node_modules/write-excel-file/modules/xml/sanitizeTextContent.js +0 -2
  526. package/dist/node_modules/write-excel-file/modules/xml/setMarkupInsideElement.js +0 -2
  527. package/dist/node_modules/write-excel-file/modules/zip/zipToArrayBuffer.js +0 -2
  528. package/dist/planmagnet/PlanMagnetRoot.js +0 -2
  529. package/dist/planmagnet/PlanMagnetRoutes.js +0 -2
  530. package/dist/planmagnet/activity/activityDescribe.js +0 -2
  531. package/dist/planmagnet/activity/relativeTime.js +0 -2
  532. package/dist/planmagnet/admin/PlanMagnetAdminRoot.js +0 -2
  533. package/dist/planmagnet/automation/AutomationExecutionsPanel.js +0 -2
  534. package/dist/planmagnet/automation/AutomationRuleFields.js +0 -2
  535. package/dist/planmagnet/automation/automationRuleTypes.js +0 -2
  536. package/dist/planmagnet/board/BoardViewBar.js +0 -2
  537. package/dist/planmagnet/board/BulkActions.js +0 -2
  538. package/dist/planmagnet/board/ProjectBoard.js +0 -2
  539. package/dist/planmagnet/board/boardViewConfig.js +0 -2
  540. package/dist/planmagnet/budgets/BudgetControls.js +0 -2
  541. package/dist/planmagnet/budgets/ExpenseControls.js +0 -2
  542. package/dist/planmagnet/budgets/ProjectBudgetsSummary.js +0 -2
  543. package/dist/planmagnet/budgets/budgetMath.js +0 -2
  544. package/dist/planmagnet/comments/CommentAttachmentUpload.js +0 -2
  545. package/dist/planmagnet/comments/CommentAttachments.js +0 -2
  546. package/dist/planmagnet/comments/CommentBody.js +0 -2
  547. package/dist/planmagnet/comments/CommentThread.js +0 -2
  548. package/dist/planmagnet/comments/MentionComposer.js +0 -2
  549. package/dist/planmagnet/comments/RoadmapComments.js +0 -2
  550. package/dist/planmagnet/comments/TargetComments.js +0 -2
  551. package/dist/planmagnet/comments/WorkItemActivity.js +0 -2
  552. package/dist/planmagnet/comments/WorkItemComments.js +0 -2
  553. package/dist/planmagnet/comments/commentAttachmentUploadClient.js +0 -2
  554. package/dist/planmagnet/comments/commentImageTokens.js +0 -2
  555. package/dist/planmagnet/comments/commentTokens.js +0 -2
  556. package/dist/planmagnet/comments/fileDisplay.js +0 -2
  557. package/dist/planmagnet/comments/useCommentFileUrl.js +0 -2
  558. package/dist/planmagnet/controls/AutomationRuleControls.js +0 -2
  559. package/dist/planmagnet/controls/CompetitorControls.js +0 -2
  560. package/dist/planmagnet/controls/ConfirmButton.js +0 -2
  561. package/dist/planmagnet/controls/CustomFieldControls.js +0 -2
  562. package/dist/planmagnet/controls/CustomFieldValuesPanel.js +0 -2
  563. package/dist/planmagnet/controls/FeatureControls.js +0 -2
  564. package/dist/planmagnet/controls/FeatureTriage.js +0 -2
  565. package/dist/planmagnet/controls/FeedbackControls.js +0 -2
  566. package/dist/planmagnet/controls/LiveStatus.js +0 -2
  567. package/dist/planmagnet/controls/MilestoneControls.js +0 -2
  568. package/dist/planmagnet/controls/ObjectiveControls.js +0 -2
  569. package/dist/planmagnet/controls/Pickers.js +0 -2
  570. package/dist/planmagnet/controls/PortfolioControls.js +0 -2
  571. package/dist/planmagnet/controls/PrioritizationControls.js +0 -2
  572. package/dist/planmagnet/controls/ProgramControls.js +0 -2
  573. package/dist/planmagnet/controls/ProjectControls.js +0 -2
  574. package/dist/planmagnet/controls/QualityGateControls.js +0 -2
  575. package/dist/planmagnet/controls/ReleaseControls.js +0 -2
  576. package/dist/planmagnet/controls/RiskControls.js +0 -2
  577. package/dist/planmagnet/controls/SyncControls.js +0 -2
  578. package/dist/planmagnet/controls/TemplateControls.js +0 -2
  579. package/dist/planmagnet/controls/WebhookSubscriptionControls.js +0 -2
  580. package/dist/planmagnet/controls/WorkItemControls.js +0 -2
  581. package/dist/planmagnet/create/CreateDialogs.js +0 -2
  582. package/dist/planmagnet/dashboards/DashboardUI.js +0 -2
  583. package/dist/planmagnet/dashboards/cards/DeliveryTimelineCard.js +0 -2
  584. package/dist/planmagnet/dashboards/cards/ObjectivesProgressCard.js +0 -2
  585. package/dist/planmagnet/dashboards/cards/PortfolioHealthCard.js +0 -2
  586. package/dist/planmagnet/dashboards/cards/QualityMetricsCard.js +0 -2
  587. package/dist/planmagnet/dashboards/cards/RiskSeverityCard.js +0 -2
  588. package/dist/planmagnet/dashboards/cards/RoadmapHorizonCard.js +0 -2
  589. package/dist/planmagnet/dashboards/cards/SprintCapacityCard.js +0 -2
  590. package/dist/planmagnet/dashboards/cards/TaskCompletionCard.js +0 -2
  591. package/dist/planmagnet/dashboards/cards/TeamCapacityCard.js +0 -2
  592. package/dist/planmagnet/dashboards/cards/TeamOverviewCard.js +0 -2
  593. package/dist/planmagnet/dashboards/cards/TeamWorkloadCard.js +0 -2
  594. package/dist/planmagnet/dashboards/cards/TimeLoggedCard.js +0 -2
  595. package/dist/planmagnet/dependency/DependencyGraph.js +0 -2
  596. package/dist/planmagnet/dependency/DependencyPanel.js +0 -2
  597. package/dist/planmagnet/dependency/GanttChart.js +0 -2
  598. package/dist/planmagnet/dependency/useProjectWorkItemsGraph.js +0 -2
  599. package/dist/planmagnet/discussion/WorkItemDiscussionPanel.js +0 -2
  600. package/dist/planmagnet/docs/DocDiffView.js +0 -2
  601. package/dist/planmagnet/docs/DocStatusBadge.js +0 -2
  602. package/dist/planmagnet/docs/DocSuggestionsPanel.js +0 -2
  603. package/dist/planmagnet/docs/DocVersionCompare.js +0 -2
  604. package/dist/planmagnet/export/ExportWorkItemsButton.js +0 -2
  605. package/dist/planmagnet/export/workItemsCsv.js +0 -2
  606. package/dist/planmagnet/forecast/DeliveryForecastCard.js +0 -2
  607. package/dist/planmagnet/forecast/ProjectOutlookCard.js +0 -2
  608. package/dist/planmagnet/forecast/ProjectRiskSummaryCard.js +0 -2
  609. package/dist/planmagnet/forecast/ResourceForecastCard.js +0 -2
  610. package/dist/planmagnet/forecast/riskFlags.js +0 -2
  611. package/dist/planmagnet/hooks/useCounts.js +0 -2
  612. package/dist/planmagnet/hooks/useEntityId.js +0 -2
  613. package/dist/planmagnet/hooks/useLiveRefresh.js +0 -2
  614. package/dist/planmagnet/hooks/usePresence.js +0 -2
  615. package/dist/planmagnet/hooks/useProjectWorkflow.js +0 -2
  616. package/dist/planmagnet/import/exportColumns.js +0 -2
  617. package/dist/planmagnet/integrations/routes.js +0 -2
  618. package/dist/planmagnet/integrations/syncTypes.js +0 -2
  619. package/dist/planmagnet/integrations/useSyncProviderCapabilities.js +0 -2
  620. package/dist/planmagnet/links/CodeLinksPanel.js +0 -2
  621. package/dist/planmagnet/links/IssueLinksPanel.js +0 -2
  622. package/dist/planmagnet/meetings/MeetingActionItemsPanel.js +0 -2
  623. package/dist/planmagnet/meetings/MeetingsCard.js +0 -2
  624. package/dist/planmagnet/meetings/ScheduleCeremoniesDialog.js +0 -2
  625. package/dist/planmagnet/meetings/ScheduleMeetingDialog.js +0 -2
  626. package/dist/planmagnet/meetings/UnlinkMeetingDialog.js +0 -2
  627. package/dist/planmagnet/meetings/meetingActions.js +0 -2
  628. package/dist/planmagnet/meetings/meetingGraphql.js +0 -2
  629. package/dist/planmagnet/meetings/meetingModel.js +0 -2
  630. package/dist/planmagnet/milestones/MilestoneControls.js +0 -2
  631. package/dist/planmagnet/pages/ActivityActivityPagePage.js +0 -2
  632. package/dist/planmagnet/pages/AiActivityPagePage.js +0 -2
  633. package/dist/planmagnet/pages/AiPlanPagePage.js +0 -2
  634. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js +0 -2
  635. package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.js +0 -2
  636. package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.js +0 -2
  637. package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.js +0 -2
  638. package/dist/planmagnet/pages/CompetitorsCompetitorDetailPagePage.js +0 -2
  639. package/dist/planmagnet/pages/CompetitorsCompetitorsPagePage.js +0 -2
  640. package/dist/planmagnet/pages/CompetitorsCreateCompetitorPagePage.js +0 -2
  641. package/dist/planmagnet/pages/CompetitorsEditCompetitorPagePage.js +0 -2
  642. package/dist/planmagnet/pages/DashboardDashboardPagePage.js +0 -2
  643. package/dist/planmagnet/pages/DashboardsExecutivePagePage.js +0 -2
  644. package/dist/planmagnet/pages/DashboardsLeadershipPagePage.js +0 -2
  645. package/dist/planmagnet/pages/DashboardsProjectManagerPagePage.js +0 -2
  646. package/dist/planmagnet/pages/DashboardsTeamUtilizationPagePage.js +0 -2
  647. package/dist/planmagnet/pages/DocsDocDetailPagePage.js +0 -2
  648. package/dist/planmagnet/pages/DocsDocsPagePage.js +0 -2
  649. package/dist/planmagnet/pages/GoalsCreateObjectivePagePage.js +0 -2
  650. package/dist/planmagnet/pages/GoalsGoalsPagePage.js +0 -2
  651. package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.js +0 -2
  652. package/dist/planmagnet/pages/IntegrationsNewSyncPagePage.js +0 -2
  653. package/dist/planmagnet/pages/IntegrationsSyncDetailPagePage.js +0 -2
  654. package/dist/planmagnet/pages/IntegrationsSyncsPagePage.js +0 -2
  655. package/dist/planmagnet/pages/IntegrationsWebhooksPagePage.js +0 -2
  656. package/dist/planmagnet/pages/MeetingsMeetingDetailPagePage.js +0 -2
  657. package/dist/planmagnet/pages/MeetingsMeetingsPagePage.js +0 -2
  658. package/dist/planmagnet/pages/NotFoundPage.js +0 -2
  659. package/dist/planmagnet/pages/PortfoliosCreatePortfolioPagePage.js +0 -2
  660. package/dist/planmagnet/pages/PortfoliosEditPortfolioPagePage.js +0 -2
  661. package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.js +0 -2
  662. package/dist/planmagnet/pages/PortfoliosPortfoliosPagePage.js +0 -2
  663. package/dist/planmagnet/pages/ProductsCreateProductPagePage.js +0 -2
  664. package/dist/planmagnet/pages/ProductsCreateRoadmapPagePage.js +0 -2
  665. package/dist/planmagnet/pages/ProductsCustomerSatisfactionPagePage.js +93 -82
  666. package/dist/planmagnet/pages/ProductsEditProductPagePage.js +0 -2
  667. package/dist/planmagnet/pages/ProductsEditReleasePagePage.js +0 -2
  668. package/dist/planmagnet/pages/ProductsEditRoadmapPagePage.js +0 -2
  669. package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.js +0 -2
  670. package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js +0 -2
  671. package/dist/planmagnet/pages/ProductsFeaturesPagePage.js +0 -2
  672. package/dist/planmagnet/pages/ProductsNewFeaturePagePage.js +0 -2
  673. package/dist/planmagnet/pages/ProductsPrioritizationPagePage.js +0 -2
  674. package/dist/planmagnet/pages/ProductsProductDetailPagePage.js +0 -2
  675. package/dist/planmagnet/pages/ProductsProductFeatureDetailPagePage.js +0 -2
  676. package/dist/planmagnet/pages/ProductsProductHierarchyPagePage.js +0 -2
  677. package/dist/planmagnet/pages/ProductsProductLinesPagePage.js +0 -2
  678. package/dist/planmagnet/pages/ProductsProductsPagePage.js +0 -2
  679. package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js +0 -2
  680. package/dist/planmagnet/pages/ProductsReleasesPagePage.js +0 -2
  681. package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.js +0 -2
  682. package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.js +0 -2
  683. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js +0 -2
  684. package/dist/planmagnet/pages/ProgramsCreateProgramPagePage.js +0 -2
  685. package/dist/planmagnet/pages/ProgramsEditProgramPagePage.js +0 -2
  686. package/dist/planmagnet/pages/ProgramsProgramDetailPagePage.js +0 -2
  687. package/dist/planmagnet/pages/ProgramsProgramsPagePage.js +0 -2
  688. package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.js +0 -2
  689. package/dist/planmagnet/pages/ProjectsAtRiskPagePage.js +0 -2
  690. package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.js +0 -2
  691. package/dist/planmagnet/pages/ProjectsBudgetsPagePage.js +0 -2
  692. package/dist/planmagnet/pages/ProjectsCreateProjectPagePage.js +0 -2
  693. package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.js +0 -2
  694. package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.js +0 -2
  695. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js +0 -2
  696. package/dist/planmagnet/pages/ProjectsGanttPagePage.js +0 -2
  697. package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.js +0 -2
  698. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.js +0 -2
  699. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js +0 -2
  700. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js +0 -2
  701. package/dist/planmagnet/pages/ProjectsPlanningPagePage.js +0 -2
  702. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js +0 -2
  703. package/dist/planmagnet/pages/ProjectsProjectsPagePage.js +0 -2
  704. package/dist/planmagnet/pages/ProjectsQualityGatesPagePage.js +0 -2
  705. package/dist/planmagnet/pages/ProjectsWorkflowPagePage.js +0 -2
  706. package/dist/planmagnet/pages/ReportsCreateReportPagePage.js +0 -2
  707. package/dist/planmagnet/pages/ReportsEditReportPagePage.js +0 -2
  708. package/dist/planmagnet/pages/ReportsReportPagePage.js +0 -2
  709. package/dist/planmagnet/pages/ReportsReportsPagePage.js +0 -2
  710. package/dist/planmagnet/pages/RisksRiskDetailPagePage.js +0 -2
  711. package/dist/planmagnet/pages/RisksRiskRegisterPagePage.js +0 -2
  712. package/dist/planmagnet/pages/SprintsStartSprintPagePage.js +0 -2
  713. package/dist/planmagnet/pages/TasksCreateTaskPagePage.js +0 -2
  714. package/dist/planmagnet/pages/TasksEditTaskPagePage.js +0 -2
  715. package/dist/planmagnet/pages/TasksImportPagePage.js +0 -2
  716. package/dist/planmagnet/pages/TasksMyDashboardPagePage.js +0 -2
  717. package/dist/planmagnet/pages/TasksMyWorkPagePage.js +0 -2
  718. package/dist/planmagnet/pages/TasksTaskDetailPagePage.js +0 -2
  719. package/dist/planmagnet/pages/TasksTasksPagePage.js +0 -2
  720. package/dist/planmagnet/pages/TasksTimeEntriesPagePage.js +0 -2
  721. package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.js +0 -2
  722. package/dist/planmagnet/pages/TasksTimesheetsPagePage.js +0 -2
  723. package/dist/planmagnet/pages/TeamCreateTeamPagePage.js +0 -2
  724. package/dist/planmagnet/pages/TeamInviteMemberPagePage.js +0 -2
  725. package/dist/planmagnet/pages/TeamTeamDetailPagePage.js +0 -2
  726. package/dist/planmagnet/pages/TeamTeamEditPagePage.js +0 -2
  727. package/dist/planmagnet/pages/TeamTeamPagePage.js +0 -2
  728. package/dist/planmagnet/pages/TeamTeamsListPagePage.js +0 -2
  729. package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.js +0 -2
  730. package/dist/planmagnet/pages/TemplatesTemplatesPagePage.js +0 -2
  731. package/dist/planmagnet/pages/WorkspaceCreateWorkspacePagePage.js +0 -2
  732. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js +0 -2
  733. package/dist/planmagnet/pages/analytics/DeliveryKpisCard.js +0 -2
  734. package/dist/planmagnet/pages/analytics/MetricsCard.js +0 -2
  735. package/dist/planmagnet/pages/analytics/QualityMetricsCard.js +0 -2
  736. package/dist/planmagnet/pages/analytics/SprintDeliveryCards.js +0 -2
  737. package/dist/planmagnet/pages/analytics/StatusFlowCard.js +0 -2
  738. package/dist/planmagnet/pages/analytics/ThroughputCard.js +0 -2
  739. package/dist/planmagnet/pages/analytics/WorkBreakdownCard.js +0 -2
  740. package/dist/planmagnet/pages/analytics/analyticsRange.js +0 -2
  741. package/dist/planmagnet/people/People.js +0 -2
  742. package/dist/planmagnet/presence/PresenceAvatars.js +0 -2
  743. package/dist/planmagnet/product/FeatureLinkPanels.js +0 -2
  744. package/dist/planmagnet/product/ProductControls.js +0 -2
  745. package/dist/planmagnet/product/ProductFeatureControls.js +0 -2
  746. package/dist/planmagnet/product/ProductFeatureLinkCard.js +0 -2
  747. package/dist/planmagnet/product/ProductLineControls.js +0 -2
  748. package/dist/planmagnet/product/ProductTeamsPanel.js +0 -2
  749. package/dist/planmagnet/product/WorkItemProductFeatureChip.js +0 -2
  750. package/dist/planmagnet/product/hierarchy.js +0 -2
  751. package/dist/planmagnet/product/hierarchyOperations.js +0 -2
  752. package/dist/planmagnet/product/refusal.js +0 -2
  753. package/dist/planmagnet/product/routes.js +0 -2
  754. package/dist/planmagnet/providers/PlanMagnetProvider.js +0 -2
  755. package/dist/planmagnet/releases/ReleaseChecklistCard.js +0 -2
  756. package/dist/planmagnet/releases/ReleaseGatesCard.js +0 -2
  757. package/dist/planmagnet/releases/ReleaseNotesCard.js +0 -2
  758. package/dist/planmagnet/releases/ReleaseReadinessCard.js +0 -2
  759. package/dist/planmagnet/releases/ReleaseWorkItemsCard.js +0 -2
  760. package/dist/planmagnet/releases/useReleaseOptions.js +0 -2
  761. package/dist/planmagnet/reports/ExportMenu.js +0 -2
  762. package/dist/planmagnet/reports/PrintReportView.js +0 -2
  763. package/dist/planmagnet/reports/ReportBuilderCanvas.js +0 -2
  764. package/dist/planmagnet/reports/ReportBuilderPage.js +0 -2
  765. package/dist/planmagnet/reports/ReportRunHistory.js +0 -2
  766. package/dist/planmagnet/reports/ReportWidgetRenderer.js +0 -2
  767. package/dist/planmagnet/reports/SchedulesPanel.js +0 -2
  768. package/dist/planmagnet/reports/ShareDialog.js +0 -2
  769. package/dist/planmagnet/reports/SharedReportPage.js +0 -2
  770. package/dist/planmagnet/reports/WidgetEditorDialog.js +0 -2
  771. package/dist/planmagnet/reports/reportExportPptx.js +0 -2
  772. package/dist/planmagnet/reports/reportExportXlsx.js +0 -2
  773. package/dist/planmagnet/reports/reportGraphql.js +0 -2
  774. package/dist/planmagnet/reports/reportModel.js +0 -2
  775. package/dist/planmagnet/reports/sharedReportRoute.js +0 -2
  776. package/dist/planmagnet/roadmaps/FeatureInitiativeCard.js +0 -2
  777. package/dist/planmagnet/roadmaps/RoadmapControls.js +0 -2
  778. package/dist/planmagnet/roadmaps/RoadmapNowNextLater.js +0 -2
  779. package/dist/planmagnet/roadmaps/RoadmapPresentation.js +0 -2
  780. package/dist/planmagnet/roadmaps/RoadmapReviewPanel.js +0 -2
  781. package/dist/planmagnet/roadmaps/RoadmapVersionsPanel.js +0 -2
  782. package/dist/planmagnet/roadmaps/planningFocus.js +0 -2
  783. package/dist/planmagnet/satisfaction/DeliverySatisfactionSection.js +0 -2
  784. package/dist/planmagnet/satisfaction/SatisfactionFigures.js +0 -2
  785. package/dist/planmagnet/satisfaction/SatisfactionImportDialog.js +0 -2
  786. package/dist/planmagnet/satisfaction/SatisfactionLinkFields.js +0 -2
  787. package/dist/planmagnet/satisfaction/SatisfactionReleaseSelect.js +0 -2
  788. package/dist/planmagnet/satisfaction/SatisfactionResponseDialog.js +0 -2
  789. package/dist/planmagnet/satisfaction/SatisfactionResponsesTable.js +0 -2
  790. package/dist/planmagnet/satisfaction/SatisfactionSummaryCard.js +0 -2
  791. package/dist/planmagnet/satisfaction/SatisfactionWindowPicker.js +0 -2
  792. package/dist/planmagnet/satisfaction/satisfaction.d.ts +2 -1
  793. package/dist/planmagnet/satisfaction/satisfaction.js +2 -4
  794. package/dist/planmagnet/satisfaction/satisfactionCsv.js +0 -2
  795. package/dist/planmagnet/satisfaction/satisfactionForm.js +0 -2
  796. package/dist/planmagnet/satisfaction/satisfactionOperations.js +0 -2
  797. package/dist/planmagnet/satisfaction/useSatisfactionAccess.js +0 -2
  798. package/dist/planmagnet/skills/RequiredSkillsEditor.js +0 -2
  799. package/dist/planmagnet/skills/SkillChips.js +0 -2
  800. package/dist/planmagnet/skills/SkillCoverageCard.js +0 -2
  801. package/dist/planmagnet/skills/WorkItemRequiredSkills.js +0 -2
  802. package/dist/planmagnet/skills/skillOperations.js +0 -2
  803. package/dist/planmagnet/skills/skillTags.js +0 -2
  804. package/dist/planmagnet/skills/useRequiredSkillsDraft.js +0 -2
  805. package/dist/planmagnet/sprints/SprintControls.js +0 -2
  806. package/dist/planmagnet/sprints/SprintDates.js +0 -2
  807. package/dist/planmagnet/store/planmagnetStore.js +0 -2
  808. package/dist/planmagnet/team/PendingInvitations.js +0 -2
  809. package/dist/planmagnet/team/TeamControls.js +0 -2
  810. package/dist/planmagnet/team/UnmatchedCrewIdentities.js +0 -2
  811. package/dist/planmagnet/team/invitationEmail.js +0 -2
  812. package/dist/planmagnet/time/TaskTimePanel.js +0 -2
  813. package/dist/planmagnet/time/TimeEntryControls.js +0 -2
  814. package/dist/planmagnet/time/TimesheetControls.js +0 -2
  815. package/dist/planmagnet/time/timeShared.js +0 -2
  816. package/dist/planmagnet/utils/cn.js +0 -2
  817. package/dist/planmagnet/utils/email.js +0 -2
  818. package/dist/planmagnet/utils/formValidation.js +0 -2
  819. package/dist/planmagnet/utils/graphqlErrors.js +0 -2
  820. package/dist/planmagnet/utils/lineDiff.js +0 -2
  821. package/dist/planmagnet/utils/mutationResult.js +0 -2
  822. package/dist/planmagnet/utils/navigation.js +0 -2
  823. package/dist/planmagnet/utils/qualityGateCriteria.js +0 -2
  824. package/dist/planmagnet/utils/rowNavigation.js +0 -2
  825. package/dist/planmagnet/utils/statusColor.js +0 -2
  826. package/dist/planmagnet/utils/urlParam.js +0 -2
  827. package/dist/planmagnet/webhooks/webhookTypes.js +0 -2
  828. package/dist/shared/hooks/useTr.js +0 -2
  829. package/dist/shared/utils/i18n.js +0 -2
  830. package/package.json +2 -1
  831. package/dist/_virtual/__vite-browser-external.js.map +0 -1
  832. package/dist/components/Button.d.ts.map +0 -1
  833. package/dist/components/Button.stories.d.ts.map +0 -1
  834. package/dist/components/MarkdownEditor.d.ts.map +0 -1
  835. package/dist/components/MarkdownEditor.js.map +0 -1
  836. package/dist/dev/main.d.ts.map +0 -1
  837. package/dist/generated/global-operations.d.ts.map +0 -1
  838. package/dist/generated/global-types.d.ts.map +0 -1
  839. package/dist/generated/wspace-operations.d.ts.map +0 -1
  840. package/dist/generated/wspace-types.d.ts.map +0 -1
  841. package/dist/index.d.ts.map +0 -1
  842. package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js.map +0 -1
  843. package/dist/node_modules/@apollo/client/errors/ServerError.js.map +0 -1
  844. package/dist/node_modules/@apollo/client/errors/utils.js.map +0 -1
  845. package/dist/node_modules/clsx/dist/clsx.js.map +0 -1
  846. package/dist/node_modules/d3-array/src/ascending.js.map +0 -1
  847. package/dist/node_modules/d3-array/src/bisect.js.map +0 -1
  848. package/dist/node_modules/d3-array/src/bisector.js.map +0 -1
  849. package/dist/node_modules/d3-array/src/descending.js.map +0 -1
  850. package/dist/node_modules/d3-array/src/max.js.map +0 -1
  851. package/dist/node_modules/d3-array/src/min.js.map +0 -1
  852. package/dist/node_modules/d3-array/src/number.js.map +0 -1
  853. package/dist/node_modules/d3-array/src/quantile.js.map +0 -1
  854. package/dist/node_modules/d3-array/src/quickselect.js.map +0 -1
  855. package/dist/node_modules/d3-array/src/range.js.map +0 -1
  856. package/dist/node_modules/d3-array/src/sort.js.map +0 -1
  857. package/dist/node_modules/d3-array/src/ticks.js.map +0 -1
  858. package/dist/node_modules/d3-color/src/color.js.map +0 -1
  859. package/dist/node_modules/d3-color/src/define.js.map +0 -1
  860. package/dist/node_modules/d3-format/src/defaultLocale.js.map +0 -1
  861. package/dist/node_modules/d3-format/src/exponent.js.map +0 -1
  862. package/dist/node_modules/d3-format/src/formatDecimal.js.map +0 -1
  863. package/dist/node_modules/d3-format/src/formatGroup.js.map +0 -1
  864. package/dist/node_modules/d3-format/src/formatNumerals.js.map +0 -1
  865. package/dist/node_modules/d3-format/src/formatPrefixAuto.js.map +0 -1
  866. package/dist/node_modules/d3-format/src/formatRounded.js.map +0 -1
  867. package/dist/node_modules/d3-format/src/formatSpecifier.js.map +0 -1
  868. package/dist/node_modules/d3-format/src/formatTrim.js.map +0 -1
  869. package/dist/node_modules/d3-format/src/formatTypes.js.map +0 -1
  870. package/dist/node_modules/d3-format/src/identity.js.map +0 -1
  871. package/dist/node_modules/d3-format/src/locale.js.map +0 -1
  872. package/dist/node_modules/d3-format/src/precisionFixed.js.map +0 -1
  873. package/dist/node_modules/d3-format/src/precisionPrefix.js.map +0 -1
  874. package/dist/node_modules/d3-format/src/precisionRound.js.map +0 -1
  875. package/dist/node_modules/d3-interpolate/src/array.js.map +0 -1
  876. package/dist/node_modules/d3-interpolate/src/basis.js.map +0 -1
  877. package/dist/node_modules/d3-interpolate/src/basisClosed.js.map +0 -1
  878. package/dist/node_modules/d3-interpolate/src/color.js.map +0 -1
  879. package/dist/node_modules/d3-interpolate/src/constant.js.map +0 -1
  880. package/dist/node_modules/d3-interpolate/src/date.js.map +0 -1
  881. package/dist/node_modules/d3-interpolate/src/number.js.map +0 -1
  882. package/dist/node_modules/d3-interpolate/src/numberArray.js.map +0 -1
  883. package/dist/node_modules/d3-interpolate/src/object.js.map +0 -1
  884. package/dist/node_modules/d3-interpolate/src/piecewise.js.map +0 -1
  885. package/dist/node_modules/d3-interpolate/src/rgb.js.map +0 -1
  886. package/dist/node_modules/d3-interpolate/src/round.js.map +0 -1
  887. package/dist/node_modules/d3-interpolate/src/string.js.map +0 -1
  888. package/dist/node_modules/d3-interpolate/src/value.js.map +0 -1
  889. package/dist/node_modules/d3-path/src/path.js.map +0 -1
  890. package/dist/node_modules/d3-scale/src/band.js.map +0 -1
  891. package/dist/node_modules/d3-scale/src/constant.js.map +0 -1
  892. package/dist/node_modules/d3-scale/src/continuous.js.map +0 -1
  893. package/dist/node_modules/d3-scale/src/diverging.js.map +0 -1
  894. package/dist/node_modules/d3-scale/src/identity.js.map +0 -1
  895. package/dist/node_modules/d3-scale/src/init.js.map +0 -1
  896. package/dist/node_modules/d3-scale/src/linear.js.map +0 -1
  897. package/dist/node_modules/d3-scale/src/log.js.map +0 -1
  898. package/dist/node_modules/d3-scale/src/nice.js.map +0 -1
  899. package/dist/node_modules/d3-scale/src/number.js.map +0 -1
  900. package/dist/node_modules/d3-scale/src/ordinal.js.map +0 -1
  901. package/dist/node_modules/d3-scale/src/pow.js.map +0 -1
  902. package/dist/node_modules/d3-scale/src/quantile.js.map +0 -1
  903. package/dist/node_modules/d3-scale/src/quantize.js.map +0 -1
  904. package/dist/node_modules/d3-scale/src/radial.js.map +0 -1
  905. package/dist/node_modules/d3-scale/src/sequential.js.map +0 -1
  906. package/dist/node_modules/d3-scale/src/sequentialQuantile.js.map +0 -1
  907. package/dist/node_modules/d3-scale/src/symlog.js.map +0 -1
  908. package/dist/node_modules/d3-scale/src/threshold.js.map +0 -1
  909. package/dist/node_modules/d3-scale/src/tickFormat.js.map +0 -1
  910. package/dist/node_modules/d3-scale/src/time.js.map +0 -1
  911. package/dist/node_modules/d3-scale/src/utcTime.js.map +0 -1
  912. package/dist/node_modules/d3-shape/src/area.js.map +0 -1
  913. package/dist/node_modules/d3-shape/src/array.js.map +0 -1
  914. package/dist/node_modules/d3-shape/src/constant.js.map +0 -1
  915. package/dist/node_modules/d3-shape/src/curve/basis.js.map +0 -1
  916. package/dist/node_modules/d3-shape/src/curve/basisClosed.js.map +0 -1
  917. package/dist/node_modules/d3-shape/src/curve/basisOpen.js.map +0 -1
  918. package/dist/node_modules/d3-shape/src/curve/bump.js.map +0 -1
  919. package/dist/node_modules/d3-shape/src/curve/linear.js.map +0 -1
  920. package/dist/node_modules/d3-shape/src/curve/linearClosed.js.map +0 -1
  921. package/dist/node_modules/d3-shape/src/curve/monotone.js.map +0 -1
  922. package/dist/node_modules/d3-shape/src/curve/natural.js.map +0 -1
  923. package/dist/node_modules/d3-shape/src/curve/step.js.map +0 -1
  924. package/dist/node_modules/d3-shape/src/line.js.map +0 -1
  925. package/dist/node_modules/d3-shape/src/math.js.map +0 -1
  926. package/dist/node_modules/d3-shape/src/noop.js.map +0 -1
  927. package/dist/node_modules/d3-shape/src/offset/expand.js.map +0 -1
  928. package/dist/node_modules/d3-shape/src/offset/none.js.map +0 -1
  929. package/dist/node_modules/d3-shape/src/offset/silhouette.js.map +0 -1
  930. package/dist/node_modules/d3-shape/src/offset/wiggle.js.map +0 -1
  931. package/dist/node_modules/d3-shape/src/order/none.js.map +0 -1
  932. package/dist/node_modules/d3-shape/src/path.js.map +0 -1
  933. package/dist/node_modules/d3-shape/src/point.js.map +0 -1
  934. package/dist/node_modules/d3-shape/src/stack.js.map +0 -1
  935. package/dist/node_modules/d3-shape/src/symbol/circle.js.map +0 -1
  936. package/dist/node_modules/d3-shape/src/symbol/cross.js.map +0 -1
  937. package/dist/node_modules/d3-shape/src/symbol/diamond.js.map +0 -1
  938. package/dist/node_modules/d3-shape/src/symbol/square.js.map +0 -1
  939. package/dist/node_modules/d3-shape/src/symbol/star.js.map +0 -1
  940. package/dist/node_modules/d3-shape/src/symbol/triangle.js.map +0 -1
  941. package/dist/node_modules/d3-shape/src/symbol/wye.js.map +0 -1
  942. package/dist/node_modules/d3-shape/src/symbol.js.map +0 -1
  943. package/dist/node_modules/d3-time/src/day.js.map +0 -1
  944. package/dist/node_modules/d3-time/src/duration.js.map +0 -1
  945. package/dist/node_modules/d3-time/src/hour.js.map +0 -1
  946. package/dist/node_modules/d3-time/src/interval.js.map +0 -1
  947. package/dist/node_modules/d3-time/src/millisecond.js.map +0 -1
  948. package/dist/node_modules/d3-time/src/minute.js.map +0 -1
  949. package/dist/node_modules/d3-time/src/month.js.map +0 -1
  950. package/dist/node_modules/d3-time/src/second.js.map +0 -1
  951. package/dist/node_modules/d3-time/src/ticks.js.map +0 -1
  952. package/dist/node_modules/d3-time/src/week.js.map +0 -1
  953. package/dist/node_modules/d3-time/src/year.js.map +0 -1
  954. package/dist/node_modules/d3-time-format/src/defaultLocale.js.map +0 -1
  955. package/dist/node_modules/d3-time-format/src/locale.js.map +0 -1
  956. package/dist/node_modules/decimal.js-light/decimal.js.map +0 -1
  957. package/dist/node_modules/eventemitter3/index.js.map +0 -1
  958. package/dist/node_modules/fast-equals/dist/es/index.js.map +0 -1
  959. package/dist/node_modules/fflate/esm/browser.js.map +0 -1
  960. package/dist/node_modules/internmap/src/index.js.map +0 -1
  961. package/dist/node_modules/jszip/dist/jszip.min.js.map +0 -1
  962. package/dist/node_modules/lodash/_DataView.js.map +0 -1
  963. package/dist/node_modules/lodash/_Hash.js.map +0 -1
  964. package/dist/node_modules/lodash/_ListCache.js.map +0 -1
  965. package/dist/node_modules/lodash/_Map.js.map +0 -1
  966. package/dist/node_modules/lodash/_MapCache.js.map +0 -1
  967. package/dist/node_modules/lodash/_Promise.js.map +0 -1
  968. package/dist/node_modules/lodash/_Set.js.map +0 -1
  969. package/dist/node_modules/lodash/_SetCache.js.map +0 -1
  970. package/dist/node_modules/lodash/_Stack.js.map +0 -1
  971. package/dist/node_modules/lodash/_Symbol.js.map +0 -1
  972. package/dist/node_modules/lodash/_Uint8Array.js.map +0 -1
  973. package/dist/node_modules/lodash/_WeakMap.js.map +0 -1
  974. package/dist/node_modules/lodash/_apply.js.map +0 -1
  975. package/dist/node_modules/lodash/_arrayEach.js.map +0 -1
  976. package/dist/node_modules/lodash/_arrayEvery.js.map +0 -1
  977. package/dist/node_modules/lodash/_arrayFilter.js.map +0 -1
  978. package/dist/node_modules/lodash/_arrayIncludes.js.map +0 -1
  979. package/dist/node_modules/lodash/_arrayIncludesWith.js.map +0 -1
  980. package/dist/node_modules/lodash/_arrayLikeKeys.js.map +0 -1
  981. package/dist/node_modules/lodash/_arrayMap.js.map +0 -1
  982. package/dist/node_modules/lodash/_arrayPush.js.map +0 -1
  983. package/dist/node_modules/lodash/_arraySome.js.map +0 -1
  984. package/dist/node_modules/lodash/_asciiToArray.js.map +0 -1
  985. package/dist/node_modules/lodash/_assignValue.js.map +0 -1
  986. package/dist/node_modules/lodash/_assocIndexOf.js.map +0 -1
  987. package/dist/node_modules/lodash/_baseAssign.js.map +0 -1
  988. package/dist/node_modules/lodash/_baseAssignIn.js.map +0 -1
  989. package/dist/node_modules/lodash/_baseAssignValue.js.map +0 -1
  990. package/dist/node_modules/lodash/_baseClone.js.map +0 -1
  991. package/dist/node_modules/lodash/_baseCreate.js.map +0 -1
  992. package/dist/node_modules/lodash/_baseEach.js.map +0 -1
  993. package/dist/node_modules/lodash/_baseEvery.js.map +0 -1
  994. package/dist/node_modules/lodash/_baseExtremum.js.map +0 -1
  995. package/dist/node_modules/lodash/_baseFindIndex.js.map +0 -1
  996. package/dist/node_modules/lodash/_baseFlatten.js.map +0 -1
  997. package/dist/node_modules/lodash/_baseFor.js.map +0 -1
  998. package/dist/node_modules/lodash/_baseForOwn.js.map +0 -1
  999. package/dist/node_modules/lodash/_baseGet.js.map +0 -1
  1000. package/dist/node_modules/lodash/_baseGetAllKeys.js.map +0 -1
  1001. package/dist/node_modules/lodash/_baseGetTag.js.map +0 -1
  1002. package/dist/node_modules/lodash/_baseGt.js.map +0 -1
  1003. package/dist/node_modules/lodash/_baseHasIn.js.map +0 -1
  1004. package/dist/node_modules/lodash/_baseIndexOf.js.map +0 -1
  1005. package/dist/node_modules/lodash/_baseIsArguments.js.map +0 -1
  1006. package/dist/node_modules/lodash/_baseIsEqual.js.map +0 -1
  1007. package/dist/node_modules/lodash/_baseIsEqualDeep.js.map +0 -1
  1008. package/dist/node_modules/lodash/_baseIsMap.js.map +0 -1
  1009. package/dist/node_modules/lodash/_baseIsMatch.js.map +0 -1
  1010. package/dist/node_modules/lodash/_baseIsNaN.js.map +0 -1
  1011. package/dist/node_modules/lodash/_baseIsNative.js.map +0 -1
  1012. package/dist/node_modules/lodash/_baseIsSet.js.map +0 -1
  1013. package/dist/node_modules/lodash/_baseIsTypedArray.js.map +0 -1
  1014. package/dist/node_modules/lodash/_baseIteratee.js.map +0 -1
  1015. package/dist/node_modules/lodash/_baseKeys.js.map +0 -1
  1016. package/dist/node_modules/lodash/_baseKeysIn.js.map +0 -1
  1017. package/dist/node_modules/lodash/_baseLt.js.map +0 -1
  1018. package/dist/node_modules/lodash/_baseMap.js.map +0 -1
  1019. package/dist/node_modules/lodash/_baseMatches.js.map +0 -1
  1020. package/dist/node_modules/lodash/_baseMatchesProperty.js.map +0 -1
  1021. package/dist/node_modules/lodash/_baseOrderBy.js.map +0 -1
  1022. package/dist/node_modules/lodash/_baseProperty.js.map +0 -1
  1023. package/dist/node_modules/lodash/_basePropertyDeep.js.map +0 -1
  1024. package/dist/node_modules/lodash/_baseRange.js.map +0 -1
  1025. package/dist/node_modules/lodash/_baseRest.js.map +0 -1
  1026. package/dist/node_modules/lodash/_baseSetToString.js.map +0 -1
  1027. package/dist/node_modules/lodash/_baseSlice.js.map +0 -1
  1028. package/dist/node_modules/lodash/_baseSome.js.map +0 -1
  1029. package/dist/node_modules/lodash/_baseSortBy.js.map +0 -1
  1030. package/dist/node_modules/lodash/_baseSum.js.map +0 -1
  1031. package/dist/node_modules/lodash/_baseTimes.js.map +0 -1
  1032. package/dist/node_modules/lodash/_baseToString.js.map +0 -1
  1033. package/dist/node_modules/lodash/_baseTrim.js.map +0 -1
  1034. package/dist/node_modules/lodash/_baseUnary.js.map +0 -1
  1035. package/dist/node_modules/lodash/_baseUniq.js.map +0 -1
  1036. package/dist/node_modules/lodash/_baseUnset.js.map +0 -1
  1037. package/dist/node_modules/lodash/_cacheHas.js.map +0 -1
  1038. package/dist/node_modules/lodash/_castPath.js.map +0 -1
  1039. package/dist/node_modules/lodash/_castSlice.js.map +0 -1
  1040. package/dist/node_modules/lodash/_cloneArrayBuffer.js.map +0 -1
  1041. package/dist/node_modules/lodash/_cloneBuffer.js.map +0 -1
  1042. package/dist/node_modules/lodash/_cloneDataView.js.map +0 -1
  1043. package/dist/node_modules/lodash/_cloneRegExp.js.map +0 -1
  1044. package/dist/node_modules/lodash/_cloneSymbol.js.map +0 -1
  1045. package/dist/node_modules/lodash/_cloneTypedArray.js.map +0 -1
  1046. package/dist/node_modules/lodash/_compareAscending.js.map +0 -1
  1047. package/dist/node_modules/lodash/_compareMultiple.js.map +0 -1
  1048. package/dist/node_modules/lodash/_copyArray.js.map +0 -1
  1049. package/dist/node_modules/lodash/_copyObject.js.map +0 -1
  1050. package/dist/node_modules/lodash/_copySymbols.js.map +0 -1
  1051. package/dist/node_modules/lodash/_copySymbolsIn.js.map +0 -1
  1052. package/dist/node_modules/lodash/_coreJsData.js.map +0 -1
  1053. package/dist/node_modules/lodash/_createBaseEach.js.map +0 -1
  1054. package/dist/node_modules/lodash/_createBaseFor.js.map +0 -1
  1055. package/dist/node_modules/lodash/_createCaseFirst.js.map +0 -1
  1056. package/dist/node_modules/lodash/_createFind.js.map +0 -1
  1057. package/dist/node_modules/lodash/_createRange.js.map +0 -1
  1058. package/dist/node_modules/lodash/_createSet.js.map +0 -1
  1059. package/dist/node_modules/lodash/_customOmitClone.js.map +0 -1
  1060. package/dist/node_modules/lodash/_defineProperty.js.map +0 -1
  1061. package/dist/node_modules/lodash/_equalArrays.js.map +0 -1
  1062. package/dist/node_modules/lodash/_equalByTag.js.map +0 -1
  1063. package/dist/node_modules/lodash/_equalObjects.js.map +0 -1
  1064. package/dist/node_modules/lodash/_flatRest.js.map +0 -1
  1065. package/dist/node_modules/lodash/_freeGlobal.js.map +0 -1
  1066. package/dist/node_modules/lodash/_getAllKeys.js.map +0 -1
  1067. package/dist/node_modules/lodash/_getAllKeysIn.js.map +0 -1
  1068. package/dist/node_modules/lodash/_getMapData.js.map +0 -1
  1069. package/dist/node_modules/lodash/_getMatchData.js.map +0 -1
  1070. package/dist/node_modules/lodash/_getNative.js.map +0 -1
  1071. package/dist/node_modules/lodash/_getPrototype.js.map +0 -1
  1072. package/dist/node_modules/lodash/_getRawTag.js.map +0 -1
  1073. package/dist/node_modules/lodash/_getSymbols.js.map +0 -1
  1074. package/dist/node_modules/lodash/_getSymbolsIn.js.map +0 -1
  1075. package/dist/node_modules/lodash/_getTag.js.map +0 -1
  1076. package/dist/node_modules/lodash/_getValue.js.map +0 -1
  1077. package/dist/node_modules/lodash/_hasPath.js.map +0 -1
  1078. package/dist/node_modules/lodash/_hasUnicode.js.map +0 -1
  1079. package/dist/node_modules/lodash/_hashClear.js.map +0 -1
  1080. package/dist/node_modules/lodash/_hashDelete.js.map +0 -1
  1081. package/dist/node_modules/lodash/_hashGet.js.map +0 -1
  1082. package/dist/node_modules/lodash/_hashHas.js.map +0 -1
  1083. package/dist/node_modules/lodash/_hashSet.js.map +0 -1
  1084. package/dist/node_modules/lodash/_initCloneArray.js.map +0 -1
  1085. package/dist/node_modules/lodash/_initCloneByTag.js.map +0 -1
  1086. package/dist/node_modules/lodash/_initCloneObject.js.map +0 -1
  1087. package/dist/node_modules/lodash/_isFlattenable.js.map +0 -1
  1088. package/dist/node_modules/lodash/_isIndex.js.map +0 -1
  1089. package/dist/node_modules/lodash/_isIterateeCall.js.map +0 -1
  1090. package/dist/node_modules/lodash/_isKey.js.map +0 -1
  1091. package/dist/node_modules/lodash/_isKeyable.js.map +0 -1
  1092. package/dist/node_modules/lodash/_isMasked.js.map +0 -1
  1093. package/dist/node_modules/lodash/_isPrototype.js.map +0 -1
  1094. package/dist/node_modules/lodash/_isStrictComparable.js.map +0 -1
  1095. package/dist/node_modules/lodash/_listCacheClear.js.map +0 -1
  1096. package/dist/node_modules/lodash/_listCacheDelete.js.map +0 -1
  1097. package/dist/node_modules/lodash/_listCacheGet.js.map +0 -1
  1098. package/dist/node_modules/lodash/_listCacheHas.js.map +0 -1
  1099. package/dist/node_modules/lodash/_listCacheSet.js.map +0 -1
  1100. package/dist/node_modules/lodash/_mapCacheClear.js.map +0 -1
  1101. package/dist/node_modules/lodash/_mapCacheDelete.js.map +0 -1
  1102. package/dist/node_modules/lodash/_mapCacheGet.js.map +0 -1
  1103. package/dist/node_modules/lodash/_mapCacheHas.js.map +0 -1
  1104. package/dist/node_modules/lodash/_mapCacheSet.js.map +0 -1
  1105. package/dist/node_modules/lodash/_mapToArray.js.map +0 -1
  1106. package/dist/node_modules/lodash/_matchesStrictComparable.js.map +0 -1
  1107. package/dist/node_modules/lodash/_memoizeCapped.js.map +0 -1
  1108. package/dist/node_modules/lodash/_nativeCreate.js.map +0 -1
  1109. package/dist/node_modules/lodash/_nativeKeys.js.map +0 -1
  1110. package/dist/node_modules/lodash/_nativeKeysIn.js.map +0 -1
  1111. package/dist/node_modules/lodash/_nodeUtil.js.map +0 -1
  1112. package/dist/node_modules/lodash/_objectToString.js.map +0 -1
  1113. package/dist/node_modules/lodash/_overArg.js.map +0 -1
  1114. package/dist/node_modules/lodash/_overRest.js.map +0 -1
  1115. package/dist/node_modules/lodash/_parent.js.map +0 -1
  1116. package/dist/node_modules/lodash/_root.js.map +0 -1
  1117. package/dist/node_modules/lodash/_setCacheAdd.js.map +0 -1
  1118. package/dist/node_modules/lodash/_setCacheHas.js.map +0 -1
  1119. package/dist/node_modules/lodash/_setToArray.js.map +0 -1
  1120. package/dist/node_modules/lodash/_setToString.js.map +0 -1
  1121. package/dist/node_modules/lodash/_shortOut.js.map +0 -1
  1122. package/dist/node_modules/lodash/_stackClear.js.map +0 -1
  1123. package/dist/node_modules/lodash/_stackDelete.js.map +0 -1
  1124. package/dist/node_modules/lodash/_stackGet.js.map +0 -1
  1125. package/dist/node_modules/lodash/_stackHas.js.map +0 -1
  1126. package/dist/node_modules/lodash/_stackSet.js.map +0 -1
  1127. package/dist/node_modules/lodash/_strictIndexOf.js.map +0 -1
  1128. package/dist/node_modules/lodash/_stringToArray.js.map +0 -1
  1129. package/dist/node_modules/lodash/_stringToPath.js.map +0 -1
  1130. package/dist/node_modules/lodash/_toKey.js.map +0 -1
  1131. package/dist/node_modules/lodash/_toSource.js.map +0 -1
  1132. package/dist/node_modules/lodash/_trimmedEndIndex.js.map +0 -1
  1133. package/dist/node_modules/lodash/_unicodeToArray.js.map +0 -1
  1134. package/dist/node_modules/lodash/constant.js.map +0 -1
  1135. package/dist/node_modules/lodash/debounce.js.map +0 -1
  1136. package/dist/node_modules/lodash/eq.js.map +0 -1
  1137. package/dist/node_modules/lodash/every.js.map +0 -1
  1138. package/dist/node_modules/lodash/find.js.map +0 -1
  1139. package/dist/node_modules/lodash/findIndex.js.map +0 -1
  1140. package/dist/node_modules/lodash/flatMap.js.map +0 -1
  1141. package/dist/node_modules/lodash/flatten.js.map +0 -1
  1142. package/dist/node_modules/lodash/get.js.map +0 -1
  1143. package/dist/node_modules/lodash/hasIn.js.map +0 -1
  1144. package/dist/node_modules/lodash/identity.js.map +0 -1
  1145. package/dist/node_modules/lodash/isArguments.js.map +0 -1
  1146. package/dist/node_modules/lodash/isArray.js.map +0 -1
  1147. package/dist/node_modules/lodash/isArrayLike.js.map +0 -1
  1148. package/dist/node_modules/lodash/isBoolean.js.map +0 -1
  1149. package/dist/node_modules/lodash/isBuffer.js.map +0 -1
  1150. package/dist/node_modules/lodash/isEqual.js.map +0 -1
  1151. package/dist/node_modules/lodash/isFunction.js.map +0 -1
  1152. package/dist/node_modules/lodash/isLength.js.map +0 -1
  1153. package/dist/node_modules/lodash/isMap.js.map +0 -1
  1154. package/dist/node_modules/lodash/isNaN.js.map +0 -1
  1155. package/dist/node_modules/lodash/isNil.js.map +0 -1
  1156. package/dist/node_modules/lodash/isNumber.js.map +0 -1
  1157. package/dist/node_modules/lodash/isObject.js.map +0 -1
  1158. package/dist/node_modules/lodash/isObjectLike.js.map +0 -1
  1159. package/dist/node_modules/lodash/isPlainObject.js.map +0 -1
  1160. package/dist/node_modules/lodash/isSet.js.map +0 -1
  1161. package/dist/node_modules/lodash/isString.js.map +0 -1
  1162. package/dist/node_modules/lodash/isSymbol.js.map +0 -1
  1163. package/dist/node_modules/lodash/isTypedArray.js.map +0 -1
  1164. package/dist/node_modules/lodash/keys.js.map +0 -1
  1165. package/dist/node_modules/lodash/keysIn.js.map +0 -1
  1166. package/dist/node_modules/lodash/last.js.map +0 -1
  1167. package/dist/node_modules/lodash/map.js.map +0 -1
  1168. package/dist/node_modules/lodash/mapValues.js.map +0 -1
  1169. package/dist/node_modules/lodash/max.js.map +0 -1
  1170. package/dist/node_modules/lodash/maxBy.js.map +0 -1
  1171. package/dist/node_modules/lodash/memoize.js.map +0 -1
  1172. package/dist/node_modules/lodash/min.js.map +0 -1
  1173. package/dist/node_modules/lodash/noop.js.map +0 -1
  1174. package/dist/node_modules/lodash/now.js.map +0 -1
  1175. package/dist/node_modules/lodash/omit.js.map +0 -1
  1176. package/dist/node_modules/lodash/property.js.map +0 -1
  1177. package/dist/node_modules/lodash/range.js.map +0 -1
  1178. package/dist/node_modules/lodash/some.js.map +0 -1
  1179. package/dist/node_modules/lodash/sortBy.js.map +0 -1
  1180. package/dist/node_modules/lodash/stubArray.js.map +0 -1
  1181. package/dist/node_modules/lodash/stubFalse.js.map +0 -1
  1182. package/dist/node_modules/lodash/sumBy.js.map +0 -1
  1183. package/dist/node_modules/lodash/throttle.js.map +0 -1
  1184. package/dist/node_modules/lodash/toFinite.js.map +0 -1
  1185. package/dist/node_modules/lodash/toInteger.js.map +0 -1
  1186. package/dist/node_modules/lodash/toNumber.js.map +0 -1
  1187. package/dist/node_modules/lodash/toString.js.map +0 -1
  1188. package/dist/node_modules/lodash/uniqBy.js.map +0 -1
  1189. package/dist/node_modules/lodash/upperFirst.js.map +0 -1
  1190. package/dist/node_modules/object-assign/index.js.map +0 -1
  1191. package/dist/node_modules/pptxgenjs/dist/pptxgen.es.js.map +0 -1
  1192. package/dist/node_modules/prop-types/checkPropTypes.js.map +0 -1
  1193. package/dist/node_modules/prop-types/factoryWithThrowingShims.js.map +0 -1
  1194. package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +0 -1
  1195. package/dist/node_modules/prop-types/index.js.map +0 -1
  1196. package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js.map +0 -1
  1197. package/dist/node_modules/prop-types/lib/has.js.map +0 -1
  1198. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js.map +0 -1
  1199. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js.map +0 -1
  1200. package/dist/node_modules/prop-types/node_modules/react-is/index.js.map +0 -1
  1201. package/dist/node_modules/react-is/cjs/react-is.development.js.map +0 -1
  1202. package/dist/node_modules/react-is/cjs/react-is.production.min.js.map +0 -1
  1203. package/dist/node_modules/react-is/index.js.map +0 -1
  1204. package/dist/node_modules/react-smooth/es6/Animate.js.map +0 -1
  1205. package/dist/node_modules/react-smooth/es6/AnimateManager.js.map +0 -1
  1206. package/dist/node_modules/react-smooth/es6/configUpdate.js.map +0 -1
  1207. package/dist/node_modules/react-smooth/es6/easing.js.map +0 -1
  1208. package/dist/node_modules/react-smooth/es6/index.js.map +0 -1
  1209. package/dist/node_modules/react-smooth/es6/setRafTimeout.js.map +0 -1
  1210. package/dist/node_modules/react-smooth/es6/util.js.map +0 -1
  1211. package/dist/node_modules/recharts/es6/cartesian/Area.js.map +0 -1
  1212. package/dist/node_modules/recharts/es6/cartesian/Bar.js.map +0 -1
  1213. package/dist/node_modules/recharts/es6/cartesian/Brush.js.map +0 -1
  1214. package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js.map +0 -1
  1215. package/dist/node_modules/recharts/es6/cartesian/CartesianGrid.js.map +0 -1
  1216. package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js.map +0 -1
  1217. package/dist/node_modules/recharts/es6/cartesian/Line.js.map +0 -1
  1218. package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js.map +0 -1
  1219. package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js.map +0 -1
  1220. package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js.map +0 -1
  1221. package/dist/node_modules/recharts/es6/cartesian/XAxis.js.map +0 -1
  1222. package/dist/node_modules/recharts/es6/cartesian/YAxis.js.map +0 -1
  1223. package/dist/node_modules/recharts/es6/cartesian/getEquidistantTicks.js.map +0 -1
  1224. package/dist/node_modules/recharts/es6/cartesian/getTicks.js.map +0 -1
  1225. package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js.map +0 -1
  1226. package/dist/node_modules/recharts/es6/chart/AreaChart.js.map +0 -1
  1227. package/dist/node_modules/recharts/es6/chart/BarChart.js.map +0 -1
  1228. package/dist/node_modules/recharts/es6/chart/LineChart.js.map +0 -1
  1229. package/dist/node_modules/recharts/es6/chart/Sankey.js.map +0 -1
  1230. package/dist/node_modules/recharts/es6/chart/Treemap.js.map +0 -1
  1231. package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js.map +0 -1
  1232. package/dist/node_modules/recharts/es6/component/Cell.js.map +0 -1
  1233. package/dist/node_modules/recharts/es6/component/Cursor.js.map +0 -1
  1234. package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js.map +0 -1
  1235. package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js.map +0 -1
  1236. package/dist/node_modules/recharts/es6/component/Label.js.map +0 -1
  1237. package/dist/node_modules/recharts/es6/component/LabelList.js.map +0 -1
  1238. package/dist/node_modules/recharts/es6/component/Legend.js.map +0 -1
  1239. package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js.map +0 -1
  1240. package/dist/node_modules/recharts/es6/component/Text.js.map +0 -1
  1241. package/dist/node_modules/recharts/es6/component/Tooltip.js.map +0 -1
  1242. package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js.map +0 -1
  1243. package/dist/node_modules/recharts/es6/container/Layer.js.map +0 -1
  1244. package/dist/node_modules/recharts/es6/container/Surface.js.map +0 -1
  1245. package/dist/node_modules/recharts/es6/context/chartLayoutContext.js.map +0 -1
  1246. package/dist/node_modules/recharts/es6/shape/Cross.js.map +0 -1
  1247. package/dist/node_modules/recharts/es6/shape/Curve.js.map +0 -1
  1248. package/dist/node_modules/recharts/es6/shape/Dot.js.map +0 -1
  1249. package/dist/node_modules/recharts/es6/shape/Polygon.js.map +0 -1
  1250. package/dist/node_modules/recharts/es6/shape/Rectangle.js.map +0 -1
  1251. package/dist/node_modules/recharts/es6/shape/Sector.js.map +0 -1
  1252. package/dist/node_modules/recharts/es6/shape/Symbols.js.map +0 -1
  1253. package/dist/node_modules/recharts/es6/shape/Trapezoid.js.map +0 -1
  1254. package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js.map +0 -1
  1255. package/dist/node_modules/recharts/es6/util/BarUtils.js.map +0 -1
  1256. package/dist/node_modules/recharts/es6/util/CartesianUtils.js.map +0 -1
  1257. package/dist/node_modules/recharts/es6/util/ChartUtils.js.map +0 -1
  1258. package/dist/node_modules/recharts/es6/util/Constants.js.map +0 -1
  1259. package/dist/node_modules/recharts/es6/util/CssPrefixUtils.js.map +0 -1
  1260. package/dist/node_modules/recharts/es6/util/DOMUtils.js.map +0 -1
  1261. package/dist/node_modules/recharts/es6/util/DataUtils.js.map +0 -1
  1262. package/dist/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js.map +0 -1
  1263. package/dist/node_modules/recharts/es6/util/Events.js.map +0 -1
  1264. package/dist/node_modules/recharts/es6/util/Global.js.map +0 -1
  1265. package/dist/node_modules/recharts/es6/util/IfOverflowMatches.js.map +0 -1
  1266. package/dist/node_modules/recharts/es6/util/LogUtils.js.map +0 -1
  1267. package/dist/node_modules/recharts/es6/util/PolarUtils.js.map +0 -1
  1268. package/dist/node_modules/recharts/es6/util/ReactUtils.js.map +0 -1
  1269. package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js.map +0 -1
  1270. package/dist/node_modules/recharts/es6/util/ShallowEqual.js.map +0 -1
  1271. package/dist/node_modules/recharts/es6/util/TickUtils.js.map +0 -1
  1272. package/dist/node_modules/recharts/es6/util/calculateViewBox.js.map +0 -1
  1273. package/dist/node_modules/recharts/es6/util/cursor/getCursorPoints.js.map +0 -1
  1274. package/dist/node_modules/recharts/es6/util/cursor/getCursorRectangle.js.map +0 -1
  1275. package/dist/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js.map +0 -1
  1276. package/dist/node_modules/recharts/es6/util/getEveryNthWithCondition.js.map +0 -1
  1277. package/dist/node_modules/recharts/es6/util/getLegendProps.js.map +0 -1
  1278. package/dist/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js.map +0 -1
  1279. package/dist/node_modules/recharts/es6/util/payload/getUniqPayload.js.map +0 -1
  1280. package/dist/node_modules/recharts/es6/util/tooltip/translate.js.map +0 -1
  1281. package/dist/node_modules/recharts/es6/util/types.js.map +0 -1
  1282. package/dist/node_modules/recharts-scale/es6/getNiceTickValues.js.map +0 -1
  1283. package/dist/node_modules/recharts-scale/es6/util/arithmetic.js.map +0 -1
  1284. package/dist/node_modules/recharts-scale/es6/util/utils.js.map +0 -1
  1285. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +0 -1
  1286. package/dist/node_modules/tiny-invariant/dist/esm/tiny-invariant.js.map +0 -1
  1287. package/dist/node_modules/victory-vendor/es/d3-scale.js.map +0 -1
  1288. package/dist/node_modules/write-excel-file/modules/export/convertFileContentToUint8ArrayBrowser.js.map +0 -1
  1289. package/dist/node_modules/write-excel-file/modules/export/convertFilesContentToUint8Arrays.js.map +0 -1
  1290. package/dist/node_modules/write-excel-file/modules/export/downloadBlob.js.map +0 -1
  1291. package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileBrowser.js.map +0 -1
  1292. package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileUniversal.js.map +0 -1
  1293. package/dist/node_modules/write-excel-file/modules/getSheetData/getSheetData.js.map +0 -1
  1294. package/dist/node_modules/write-excel-file/modules/xlsx/features/conditionalFormatting.js.map +0 -1
  1295. package/dist/node_modules/write-excel-file/modules/xlsx/features/images.js.map +0 -1
  1296. package/dist/node_modules/write-excel-file/modules/xlsx/features/stickyRowsOrColumns.js.map +0 -1
  1297. package/dist/node_modules/write-excel-file/modules/xlsx/files/_Content_Types_.xml.js.map +0 -1
  1298. package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.js.map +0 -1
  1299. package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.rels.js.map +0 -1
  1300. package/dist/node_modules/write-excel-file/modules/xlsx/files/rels.js.map +0 -1
  1301. package/dist/node_modules/write-excel-file/modules/xlsx/files/sharedStrings.xml.js.map +0 -1
  1302. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/cell.js.map +0 -1
  1303. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/column.js.map +0 -1
  1304. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/columns.js.map +0 -1
  1305. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/drawingReference.js.map +0 -1
  1306. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/helpers/getCellStyleProperties.js.map +0 -1
  1307. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/mergedCellsDescription.js.map +0 -1
  1308. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageMargins.js.map +0 -1
  1309. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageSetup.js.map +0 -1
  1310. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/processMergedCells.js.map +0 -1
  1311. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/row.js.map +0 -1
  1312. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheet.xml.js.map +0 -1
  1313. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetData.js.map +0 -1
  1314. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetViews.js.map +0 -1
  1315. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml.rels.js.map +0 -1
  1316. package/dist/node_modules/write-excel-file/modules/xlsx/files/styles.xml.js.map +0 -1
  1317. package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.js.map +0 -1
  1318. package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.rels.js.map +0 -1
  1319. package/dist/node_modules/write-excel-file/modules/xlsx/generateXlsxFileContents.js.map +0 -1
  1320. package/dist/node_modules/write-excel-file/modules/xlsx/getFeatures.js.map +0 -1
  1321. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/convertDateToSerialNumber.js.map +0 -1
  1322. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getAdditionalContent.js.map +0 -1
  1323. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getElementXml.js.map +0 -1
  1324. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getWrittenFiles.js.map +0 -1
  1325. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/transformContent.js.map +0 -1
  1326. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getAlignmentXml.js.map +0 -1
  1327. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getBorderXml.js.map +0 -1
  1328. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getCellAddress.js.map +0 -1
  1329. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFileExtensionForContentType.js.map +0 -1
  1330. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFillXml.js.map +0 -1
  1331. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFontXml.js.map +0 -1
  1332. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getOrderOfSiblings.js.map +0 -1
  1333. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getXlsxColorForHexColor.js.map +0 -1
  1334. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasAlignment.js.map +0 -1
  1335. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasBorder.js.map +0 -1
  1336. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFill.js.map +0 -1
  1337. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFont.js.map +0 -1
  1338. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isCellObject.js.map +0 -1
  1339. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isObject.js.map +0 -1
  1340. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/orderOfSiblings.js.map +0 -1
  1341. package/dist/node_modules/write-excel-file/modules/xlsx/initializeSharedStrings.js.map +0 -1
  1342. package/dist/node_modules/write-excel-file/modules/xlsx/initializeSheets.js.map +0 -1
  1343. package/dist/node_modules/write-excel-file/modules/xlsx/initializeStyles.js.map +0 -1
  1344. package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetData.js.map +0 -1
  1345. package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetName.js.map +0 -1
  1346. package/dist/node_modules/write-excel-file/modules/xml/appendMarkupInsideElement.js.map +0 -1
  1347. package/dist/node_modules/write-excel-file/modules/xml/applyEnclosingElementOffset.js.map +0 -1
  1348. package/dist/node_modules/write-excel-file/modules/xml/escapeXmlSpecialCharacters.js.map +0 -1
  1349. package/dist/node_modules/write-excel-file/modules/xml/findElement.js.map +0 -1
  1350. package/dist/node_modules/write-excel-file/modules/xml/findElementInsideElement.js.map +0 -1
  1351. package/dist/node_modules/write-excel-file/modules/xml/findElementsNonRecursive_.js.map +0 -1
  1352. package/dist/node_modules/write-excel-file/modules/xml/getAttributesString.js.map +0 -1
  1353. package/dist/node_modules/write-excel-file/modules/xml/getChildElements.js.map +0 -1
  1354. package/dist/node_modules/write-excel-file/modules/xml/getClosingTagMarkup.js.map +0 -1
  1355. package/dist/node_modules/write-excel-file/modules/xml/getMarkupInsideElement.js.map +0 -1
  1356. package/dist/node_modules/write-excel-file/modules/xml/getOpeningTagMarkup.js.map +0 -1
  1357. package/dist/node_modules/write-excel-file/modules/xml/getSelfClosingTagMarkup.js.map +0 -1
  1358. package/dist/node_modules/write-excel-file/modules/xml/insertElementMarkupAccordingToOrderOfSiblings.js.map +0 -1
  1359. package/dist/node_modules/write-excel-file/modules/xml/prependMarkupInsideElement.js.map +0 -1
  1360. package/dist/node_modules/write-excel-file/modules/xml/removeInvalidXmlCharacters.js.map +0 -1
  1361. package/dist/node_modules/write-excel-file/modules/xml/replaceElement.js.map +0 -1
  1362. package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeName.js.map +0 -1
  1363. package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeValue.js.map +0 -1
  1364. package/dist/node_modules/write-excel-file/modules/xml/sanitizeTextContent.js.map +0 -1
  1365. package/dist/node_modules/write-excel-file/modules/xml/setMarkupInsideElement.js.map +0 -1
  1366. package/dist/node_modules/write-excel-file/modules/zip/zipToArrayBuffer.js.map +0 -1
  1367. package/dist/planmagnet/PlanMagnetRoot.d.ts.map +0 -1
  1368. package/dist/planmagnet/PlanMagnetRoot.js.map +0 -1
  1369. package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +0 -1
  1370. package/dist/planmagnet/PlanMagnetRoutes.js.map +0 -1
  1371. package/dist/planmagnet/activity/activityDescribe.d.ts.map +0 -1
  1372. package/dist/planmagnet/activity/activityDescribe.js.map +0 -1
  1373. package/dist/planmagnet/activity/relativeTime.d.ts.map +0 -1
  1374. package/dist/planmagnet/activity/relativeTime.js.map +0 -1
  1375. package/dist/planmagnet/admin/PlanMagnetAdminRoot.d.ts.map +0 -1
  1376. package/dist/planmagnet/admin/PlanMagnetAdminRoot.js.map +0 -1
  1377. package/dist/planmagnet/automation/AutomationExecutionsPanel.d.ts.map +0 -1
  1378. package/dist/planmagnet/automation/AutomationExecutionsPanel.js.map +0 -1
  1379. package/dist/planmagnet/automation/AutomationRuleFields.d.ts.map +0 -1
  1380. package/dist/planmagnet/automation/AutomationRuleFields.js.map +0 -1
  1381. package/dist/planmagnet/automation/automationRuleTypes.d.ts.map +0 -1
  1382. package/dist/planmagnet/automation/automationRuleTypes.js.map +0 -1
  1383. package/dist/planmagnet/board/BoardViewBar.d.ts.map +0 -1
  1384. package/dist/planmagnet/board/BoardViewBar.js.map +0 -1
  1385. package/dist/planmagnet/board/BulkActions.d.ts.map +0 -1
  1386. package/dist/planmagnet/board/BulkActions.js.map +0 -1
  1387. package/dist/planmagnet/board/ProjectBoard.d.ts.map +0 -1
  1388. package/dist/planmagnet/board/ProjectBoard.js.map +0 -1
  1389. package/dist/planmagnet/board/boardViewConfig.d.ts.map +0 -1
  1390. package/dist/planmagnet/board/boardViewConfig.js.map +0 -1
  1391. package/dist/planmagnet/budgets/BudgetControls.d.ts.map +0 -1
  1392. package/dist/planmagnet/budgets/BudgetControls.js.map +0 -1
  1393. package/dist/planmagnet/budgets/ExpenseControls.d.ts.map +0 -1
  1394. package/dist/planmagnet/budgets/ExpenseControls.js.map +0 -1
  1395. package/dist/planmagnet/budgets/ProjectBudgetsSummary.d.ts.map +0 -1
  1396. package/dist/planmagnet/budgets/ProjectBudgetsSummary.js.map +0 -1
  1397. package/dist/planmagnet/budgets/budgetMath.d.ts.map +0 -1
  1398. package/dist/planmagnet/budgets/budgetMath.js.map +0 -1
  1399. package/dist/planmagnet/comments/CommentAttachmentUpload.d.ts.map +0 -1
  1400. package/dist/planmagnet/comments/CommentAttachmentUpload.js.map +0 -1
  1401. package/dist/planmagnet/comments/CommentAttachments.d.ts.map +0 -1
  1402. package/dist/planmagnet/comments/CommentAttachments.js.map +0 -1
  1403. package/dist/planmagnet/comments/CommentBody.d.ts.map +0 -1
  1404. package/dist/planmagnet/comments/CommentBody.js.map +0 -1
  1405. package/dist/planmagnet/comments/CommentThread.d.ts.map +0 -1
  1406. package/dist/planmagnet/comments/CommentThread.js.map +0 -1
  1407. package/dist/planmagnet/comments/MentionComposer.d.ts.map +0 -1
  1408. package/dist/planmagnet/comments/MentionComposer.js.map +0 -1
  1409. package/dist/planmagnet/comments/RoadmapComments.d.ts.map +0 -1
  1410. package/dist/planmagnet/comments/RoadmapComments.js.map +0 -1
  1411. package/dist/planmagnet/comments/TargetComments.d.ts.map +0 -1
  1412. package/dist/planmagnet/comments/TargetComments.js.map +0 -1
  1413. package/dist/planmagnet/comments/WorkItemActivity.d.ts.map +0 -1
  1414. package/dist/planmagnet/comments/WorkItemActivity.js.map +0 -1
  1415. package/dist/planmagnet/comments/WorkItemComments.d.ts.map +0 -1
  1416. package/dist/planmagnet/comments/WorkItemComments.js.map +0 -1
  1417. package/dist/planmagnet/comments/commentAttachmentUploadClient.d.ts.map +0 -1
  1418. package/dist/planmagnet/comments/commentAttachmentUploadClient.js.map +0 -1
  1419. package/dist/planmagnet/comments/commentImageTokens.d.ts.map +0 -1
  1420. package/dist/planmagnet/comments/commentImageTokens.js.map +0 -1
  1421. package/dist/planmagnet/comments/commentTokens.d.ts.map +0 -1
  1422. package/dist/planmagnet/comments/commentTokens.js.map +0 -1
  1423. package/dist/planmagnet/comments/fileDisplay.d.ts.map +0 -1
  1424. package/dist/planmagnet/comments/fileDisplay.js.map +0 -1
  1425. package/dist/planmagnet/comments/useCommentFileUrl.d.ts.map +0 -1
  1426. package/dist/planmagnet/comments/useCommentFileUrl.js.map +0 -1
  1427. package/dist/planmagnet/controls/AutomationRuleControls.d.ts.map +0 -1
  1428. package/dist/planmagnet/controls/AutomationRuleControls.js.map +0 -1
  1429. package/dist/planmagnet/controls/CompetitorControls.d.ts.map +0 -1
  1430. package/dist/planmagnet/controls/CompetitorControls.js.map +0 -1
  1431. package/dist/planmagnet/controls/ConfirmButton.d.ts.map +0 -1
  1432. package/dist/planmagnet/controls/ConfirmButton.js.map +0 -1
  1433. package/dist/planmagnet/controls/CustomFieldControls.d.ts.map +0 -1
  1434. package/dist/planmagnet/controls/CustomFieldControls.js.map +0 -1
  1435. package/dist/planmagnet/controls/CustomFieldValuesPanel.d.ts.map +0 -1
  1436. package/dist/planmagnet/controls/CustomFieldValuesPanel.js.map +0 -1
  1437. package/dist/planmagnet/controls/FeatureControls.d.ts.map +0 -1
  1438. package/dist/planmagnet/controls/FeatureControls.js.map +0 -1
  1439. package/dist/planmagnet/controls/FeatureTriage.d.ts.map +0 -1
  1440. package/dist/planmagnet/controls/FeatureTriage.js.map +0 -1
  1441. package/dist/planmagnet/controls/FeedbackControls.d.ts.map +0 -1
  1442. package/dist/planmagnet/controls/FeedbackControls.js.map +0 -1
  1443. package/dist/planmagnet/controls/LiveStatus.d.ts.map +0 -1
  1444. package/dist/planmagnet/controls/LiveStatus.js.map +0 -1
  1445. package/dist/planmagnet/controls/MilestoneControls.d.ts.map +0 -1
  1446. package/dist/planmagnet/controls/MilestoneControls.js.map +0 -1
  1447. package/dist/planmagnet/controls/ObjectiveControls.d.ts.map +0 -1
  1448. package/dist/planmagnet/controls/ObjectiveControls.js.map +0 -1
  1449. package/dist/planmagnet/controls/Pickers.d.ts.map +0 -1
  1450. package/dist/planmagnet/controls/Pickers.js.map +0 -1
  1451. package/dist/planmagnet/controls/PortfolioControls.d.ts.map +0 -1
  1452. package/dist/planmagnet/controls/PortfolioControls.js.map +0 -1
  1453. package/dist/planmagnet/controls/PrioritizationControls.d.ts.map +0 -1
  1454. package/dist/planmagnet/controls/PrioritizationControls.js.map +0 -1
  1455. package/dist/planmagnet/controls/ProgramControls.d.ts.map +0 -1
  1456. package/dist/planmagnet/controls/ProgramControls.js.map +0 -1
  1457. package/dist/planmagnet/controls/ProjectControls.d.ts.map +0 -1
  1458. package/dist/planmagnet/controls/ProjectControls.js.map +0 -1
  1459. package/dist/planmagnet/controls/QualityGateControls.d.ts.map +0 -1
  1460. package/dist/planmagnet/controls/QualityGateControls.js.map +0 -1
  1461. package/dist/planmagnet/controls/ReleaseControls.d.ts.map +0 -1
  1462. package/dist/planmagnet/controls/ReleaseControls.js.map +0 -1
  1463. package/dist/planmagnet/controls/RiskControls.d.ts.map +0 -1
  1464. package/dist/planmagnet/controls/RiskControls.js.map +0 -1
  1465. package/dist/planmagnet/controls/SyncControls.d.ts.map +0 -1
  1466. package/dist/planmagnet/controls/SyncControls.js.map +0 -1
  1467. package/dist/planmagnet/controls/TemplateControls.d.ts.map +0 -1
  1468. package/dist/planmagnet/controls/TemplateControls.js.map +0 -1
  1469. package/dist/planmagnet/controls/WebhookSubscriptionControls.d.ts.map +0 -1
  1470. package/dist/planmagnet/controls/WebhookSubscriptionControls.js.map +0 -1
  1471. package/dist/planmagnet/controls/WorkItemControls.d.ts.map +0 -1
  1472. package/dist/planmagnet/controls/WorkItemControls.js.map +0 -1
  1473. package/dist/planmagnet/create/CreateDialogs.d.ts.map +0 -1
  1474. package/dist/planmagnet/create/CreateDialogs.js.map +0 -1
  1475. package/dist/planmagnet/dashboards/DashboardUI.d.ts.map +0 -1
  1476. package/dist/planmagnet/dashboards/DashboardUI.js.map +0 -1
  1477. package/dist/planmagnet/dashboards/cards/DeliveryTimelineCard.d.ts.map +0 -1
  1478. package/dist/planmagnet/dashboards/cards/DeliveryTimelineCard.js.map +0 -1
  1479. package/dist/planmagnet/dashboards/cards/ObjectivesProgressCard.d.ts.map +0 -1
  1480. package/dist/planmagnet/dashboards/cards/ObjectivesProgressCard.js.map +0 -1
  1481. package/dist/planmagnet/dashboards/cards/PortfolioHealthCard.d.ts.map +0 -1
  1482. package/dist/planmagnet/dashboards/cards/PortfolioHealthCard.js.map +0 -1
  1483. package/dist/planmagnet/dashboards/cards/QualityMetricsCard.d.ts.map +0 -1
  1484. package/dist/planmagnet/dashboards/cards/QualityMetricsCard.js.map +0 -1
  1485. package/dist/planmagnet/dashboards/cards/RiskSeverityCard.d.ts.map +0 -1
  1486. package/dist/planmagnet/dashboards/cards/RiskSeverityCard.js.map +0 -1
  1487. package/dist/planmagnet/dashboards/cards/RoadmapHorizonCard.d.ts.map +0 -1
  1488. package/dist/planmagnet/dashboards/cards/RoadmapHorizonCard.js.map +0 -1
  1489. package/dist/planmagnet/dashboards/cards/SprintCapacityCard.d.ts.map +0 -1
  1490. package/dist/planmagnet/dashboards/cards/SprintCapacityCard.js.map +0 -1
  1491. package/dist/planmagnet/dashboards/cards/TaskCompletionCard.d.ts.map +0 -1
  1492. package/dist/planmagnet/dashboards/cards/TaskCompletionCard.js.map +0 -1
  1493. package/dist/planmagnet/dashboards/cards/TeamCapacityCard.d.ts.map +0 -1
  1494. package/dist/planmagnet/dashboards/cards/TeamCapacityCard.js.map +0 -1
  1495. package/dist/planmagnet/dashboards/cards/TeamOverviewCard.d.ts.map +0 -1
  1496. package/dist/planmagnet/dashboards/cards/TeamOverviewCard.js.map +0 -1
  1497. package/dist/planmagnet/dashboards/cards/TeamWorkloadCard.d.ts.map +0 -1
  1498. package/dist/planmagnet/dashboards/cards/TeamWorkloadCard.js.map +0 -1
  1499. package/dist/planmagnet/dashboards/cards/TimeLoggedCard.d.ts.map +0 -1
  1500. package/dist/planmagnet/dashboards/cards/TimeLoggedCard.js.map +0 -1
  1501. package/dist/planmagnet/dependency/DependencyGraph.d.ts.map +0 -1
  1502. package/dist/planmagnet/dependency/DependencyGraph.js.map +0 -1
  1503. package/dist/planmagnet/dependency/DependencyPanel.d.ts.map +0 -1
  1504. package/dist/planmagnet/dependency/DependencyPanel.js.map +0 -1
  1505. package/dist/planmagnet/dependency/GanttChart.d.ts.map +0 -1
  1506. package/dist/planmagnet/dependency/GanttChart.js.map +0 -1
  1507. package/dist/planmagnet/dependency/useProjectWorkItemsGraph.d.ts.map +0 -1
  1508. package/dist/planmagnet/dependency/useProjectWorkItemsGraph.js.map +0 -1
  1509. package/dist/planmagnet/discussion/WorkItemDiscussionPanel.d.ts.map +0 -1
  1510. package/dist/planmagnet/discussion/WorkItemDiscussionPanel.js.map +0 -1
  1511. package/dist/planmagnet/docs/DocDiffView.d.ts.map +0 -1
  1512. package/dist/planmagnet/docs/DocDiffView.js.map +0 -1
  1513. package/dist/planmagnet/docs/DocStatusBadge.d.ts.map +0 -1
  1514. package/dist/planmagnet/docs/DocStatusBadge.js.map +0 -1
  1515. package/dist/planmagnet/docs/DocSuggestionsPanel.d.ts.map +0 -1
  1516. package/dist/planmagnet/docs/DocSuggestionsPanel.js.map +0 -1
  1517. package/dist/planmagnet/docs/DocVersionCompare.d.ts.map +0 -1
  1518. package/dist/planmagnet/docs/DocVersionCompare.js.map +0 -1
  1519. package/dist/planmagnet/export/ExportWorkItemsButton.d.ts.map +0 -1
  1520. package/dist/planmagnet/export/ExportWorkItemsButton.js.map +0 -1
  1521. package/dist/planmagnet/export/workItemsCsv.d.ts.map +0 -1
  1522. package/dist/planmagnet/export/workItemsCsv.js.map +0 -1
  1523. package/dist/planmagnet/forecast/DeliveryForecastCard.d.ts.map +0 -1
  1524. package/dist/planmagnet/forecast/DeliveryForecastCard.js.map +0 -1
  1525. package/dist/planmagnet/forecast/ProjectOutlookCard.d.ts.map +0 -1
  1526. package/dist/planmagnet/forecast/ProjectOutlookCard.js.map +0 -1
  1527. package/dist/planmagnet/forecast/ProjectRiskSummaryCard.d.ts.map +0 -1
  1528. package/dist/planmagnet/forecast/ProjectRiskSummaryCard.js.map +0 -1
  1529. package/dist/planmagnet/forecast/ResourceForecastCard.d.ts.map +0 -1
  1530. package/dist/planmagnet/forecast/ResourceForecastCard.js.map +0 -1
  1531. package/dist/planmagnet/forecast/riskFlags.d.ts.map +0 -1
  1532. package/dist/planmagnet/forecast/riskFlags.js.map +0 -1
  1533. package/dist/planmagnet/hooks/useCounts.d.ts.map +0 -1
  1534. package/dist/planmagnet/hooks/useCounts.js.map +0 -1
  1535. package/dist/planmagnet/hooks/useEntityId.d.ts.map +0 -1
  1536. package/dist/planmagnet/hooks/useEntityId.js.map +0 -1
  1537. package/dist/planmagnet/hooks/useLiveRefresh.d.ts.map +0 -1
  1538. package/dist/planmagnet/hooks/useLiveRefresh.js.map +0 -1
  1539. package/dist/planmagnet/hooks/usePresence.d.ts.map +0 -1
  1540. package/dist/planmagnet/hooks/usePresence.js.map +0 -1
  1541. package/dist/planmagnet/hooks/useProjectWorkflow.d.ts.map +0 -1
  1542. package/dist/planmagnet/hooks/useProjectWorkflow.js.map +0 -1
  1543. package/dist/planmagnet/import/exportColumns.d.ts.map +0 -1
  1544. package/dist/planmagnet/import/exportColumns.js.map +0 -1
  1545. package/dist/planmagnet/index.d.ts.map +0 -1
  1546. package/dist/planmagnet/integrations/routes.d.ts.map +0 -1
  1547. package/dist/planmagnet/integrations/routes.js.map +0 -1
  1548. package/dist/planmagnet/integrations/syncTypes.d.ts.map +0 -1
  1549. package/dist/planmagnet/integrations/syncTypes.js.map +0 -1
  1550. package/dist/planmagnet/integrations/useSyncProviderCapabilities.d.ts.map +0 -1
  1551. package/dist/planmagnet/integrations/useSyncProviderCapabilities.js.map +0 -1
  1552. package/dist/planmagnet/links/CodeLinksPanel.d.ts.map +0 -1
  1553. package/dist/planmagnet/links/CodeLinksPanel.js.map +0 -1
  1554. package/dist/planmagnet/links/IssueLinksPanel.d.ts.map +0 -1
  1555. package/dist/planmagnet/links/IssueLinksPanel.js.map +0 -1
  1556. package/dist/planmagnet/meetings/MeetingActionItemsPanel.d.ts.map +0 -1
  1557. package/dist/planmagnet/meetings/MeetingActionItemsPanel.js.map +0 -1
  1558. package/dist/planmagnet/meetings/MeetingsCard.d.ts.map +0 -1
  1559. package/dist/planmagnet/meetings/MeetingsCard.js.map +0 -1
  1560. package/dist/planmagnet/meetings/ScheduleCeremoniesDialog.d.ts.map +0 -1
  1561. package/dist/planmagnet/meetings/ScheduleCeremoniesDialog.js.map +0 -1
  1562. package/dist/planmagnet/meetings/ScheduleMeetingDialog.d.ts.map +0 -1
  1563. package/dist/planmagnet/meetings/ScheduleMeetingDialog.js.map +0 -1
  1564. package/dist/planmagnet/meetings/UnlinkMeetingDialog.d.ts.map +0 -1
  1565. package/dist/planmagnet/meetings/UnlinkMeetingDialog.js.map +0 -1
  1566. package/dist/planmagnet/meetings/meetingActions.d.ts.map +0 -1
  1567. package/dist/planmagnet/meetings/meetingActions.js.map +0 -1
  1568. package/dist/planmagnet/meetings/meetingGraphql.d.ts.map +0 -1
  1569. package/dist/planmagnet/meetings/meetingGraphql.js.map +0 -1
  1570. package/dist/planmagnet/meetings/meetingModel.d.ts.map +0 -1
  1571. package/dist/planmagnet/meetings/meetingModel.js.map +0 -1
  1572. package/dist/planmagnet/milestones/MilestoneControls.d.ts.map +0 -1
  1573. package/dist/planmagnet/milestones/MilestoneControls.js.map +0 -1
  1574. package/dist/planmagnet/pages/ActivityActivityPagePage.d.ts.map +0 -1
  1575. package/dist/planmagnet/pages/ActivityActivityPagePage.js.map +0 -1
  1576. package/dist/planmagnet/pages/AiActivityPagePage.d.ts.map +0 -1
  1577. package/dist/planmagnet/pages/AiActivityPagePage.js.map +0 -1
  1578. package/dist/planmagnet/pages/AiPlanPagePage.d.ts.map +0 -1
  1579. package/dist/planmagnet/pages/AiPlanPagePage.js.map +0 -1
  1580. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.d.ts.map +0 -1
  1581. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js.map +0 -1
  1582. package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.d.ts.map +0 -1
  1583. package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.js.map +0 -1
  1584. package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.d.ts.map +0 -1
  1585. package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.js.map +0 -1
  1586. package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.d.ts.map +0 -1
  1587. package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.js.map +0 -1
  1588. package/dist/planmagnet/pages/CompetitorsCompetitorDetailPagePage.d.ts.map +0 -1
  1589. package/dist/planmagnet/pages/CompetitorsCompetitorDetailPagePage.js.map +0 -1
  1590. package/dist/planmagnet/pages/CompetitorsCompetitorsPagePage.d.ts.map +0 -1
  1591. package/dist/planmagnet/pages/CompetitorsCompetitorsPagePage.js.map +0 -1
  1592. package/dist/planmagnet/pages/CompetitorsCreateCompetitorPagePage.d.ts.map +0 -1
  1593. package/dist/planmagnet/pages/CompetitorsCreateCompetitorPagePage.js.map +0 -1
  1594. package/dist/planmagnet/pages/CompetitorsEditCompetitorPagePage.d.ts.map +0 -1
  1595. package/dist/planmagnet/pages/CompetitorsEditCompetitorPagePage.js.map +0 -1
  1596. package/dist/planmagnet/pages/DashboardDashboardPagePage.d.ts.map +0 -1
  1597. package/dist/planmagnet/pages/DashboardDashboardPagePage.js.map +0 -1
  1598. package/dist/planmagnet/pages/DashboardsExecutivePagePage.d.ts.map +0 -1
  1599. package/dist/planmagnet/pages/DashboardsExecutivePagePage.js.map +0 -1
  1600. package/dist/planmagnet/pages/DashboardsLeadershipPagePage.d.ts.map +0 -1
  1601. package/dist/planmagnet/pages/DashboardsLeadershipPagePage.js.map +0 -1
  1602. package/dist/planmagnet/pages/DashboardsProjectManagerPagePage.d.ts.map +0 -1
  1603. package/dist/planmagnet/pages/DashboardsProjectManagerPagePage.js.map +0 -1
  1604. package/dist/planmagnet/pages/DashboardsTeamUtilizationPagePage.d.ts.map +0 -1
  1605. package/dist/planmagnet/pages/DashboardsTeamUtilizationPagePage.js.map +0 -1
  1606. package/dist/planmagnet/pages/DocsDocDetailPagePage.d.ts.map +0 -1
  1607. package/dist/planmagnet/pages/DocsDocDetailPagePage.js.map +0 -1
  1608. package/dist/planmagnet/pages/DocsDocsPagePage.d.ts.map +0 -1
  1609. package/dist/planmagnet/pages/DocsDocsPagePage.js.map +0 -1
  1610. package/dist/planmagnet/pages/GoalsCreateObjectivePagePage.d.ts.map +0 -1
  1611. package/dist/planmagnet/pages/GoalsCreateObjectivePagePage.js.map +0 -1
  1612. package/dist/planmagnet/pages/GoalsGoalsPagePage.d.ts.map +0 -1
  1613. package/dist/planmagnet/pages/GoalsGoalsPagePage.js.map +0 -1
  1614. package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.d.ts.map +0 -1
  1615. package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.js.map +0 -1
  1616. package/dist/planmagnet/pages/IntegrationsNewSyncPagePage.d.ts.map +0 -1
  1617. package/dist/planmagnet/pages/IntegrationsNewSyncPagePage.js.map +0 -1
  1618. package/dist/planmagnet/pages/IntegrationsSyncDetailPagePage.d.ts.map +0 -1
  1619. package/dist/planmagnet/pages/IntegrationsSyncDetailPagePage.js.map +0 -1
  1620. package/dist/planmagnet/pages/IntegrationsSyncsPagePage.d.ts.map +0 -1
  1621. package/dist/planmagnet/pages/IntegrationsSyncsPagePage.js.map +0 -1
  1622. package/dist/planmagnet/pages/IntegrationsWebhooksPagePage.d.ts.map +0 -1
  1623. package/dist/planmagnet/pages/IntegrationsWebhooksPagePage.js.map +0 -1
  1624. package/dist/planmagnet/pages/MeetingsMeetingDetailPagePage.d.ts.map +0 -1
  1625. package/dist/planmagnet/pages/MeetingsMeetingDetailPagePage.js.map +0 -1
  1626. package/dist/planmagnet/pages/MeetingsMeetingsPagePage.d.ts.map +0 -1
  1627. package/dist/planmagnet/pages/MeetingsMeetingsPagePage.js.map +0 -1
  1628. package/dist/planmagnet/pages/NotFoundPage.d.ts.map +0 -1
  1629. package/dist/planmagnet/pages/NotFoundPage.js.map +0 -1
  1630. package/dist/planmagnet/pages/PortfoliosCreatePortfolioPagePage.d.ts.map +0 -1
  1631. package/dist/planmagnet/pages/PortfoliosCreatePortfolioPagePage.js.map +0 -1
  1632. package/dist/planmagnet/pages/PortfoliosEditPortfolioPagePage.d.ts.map +0 -1
  1633. package/dist/planmagnet/pages/PortfoliosEditPortfolioPagePage.js.map +0 -1
  1634. package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.d.ts.map +0 -1
  1635. package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.js.map +0 -1
  1636. package/dist/planmagnet/pages/PortfoliosPortfoliosPagePage.d.ts.map +0 -1
  1637. package/dist/planmagnet/pages/PortfoliosPortfoliosPagePage.js.map +0 -1
  1638. package/dist/planmagnet/pages/ProductsCreateProductPagePage.d.ts.map +0 -1
  1639. package/dist/planmagnet/pages/ProductsCreateProductPagePage.js.map +0 -1
  1640. package/dist/planmagnet/pages/ProductsCreateRoadmapPagePage.d.ts.map +0 -1
  1641. package/dist/planmagnet/pages/ProductsCreateRoadmapPagePage.js.map +0 -1
  1642. package/dist/planmagnet/pages/ProductsCustomerSatisfactionPagePage.d.ts.map +0 -1
  1643. package/dist/planmagnet/pages/ProductsCustomerSatisfactionPagePage.js.map +0 -1
  1644. package/dist/planmagnet/pages/ProductsEditProductPagePage.d.ts.map +0 -1
  1645. package/dist/planmagnet/pages/ProductsEditProductPagePage.js.map +0 -1
  1646. package/dist/planmagnet/pages/ProductsEditReleasePagePage.d.ts.map +0 -1
  1647. package/dist/planmagnet/pages/ProductsEditReleasePagePage.js.map +0 -1
  1648. package/dist/planmagnet/pages/ProductsEditRoadmapPagePage.d.ts.map +0 -1
  1649. package/dist/planmagnet/pages/ProductsEditRoadmapPagePage.js.map +0 -1
  1650. package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.d.ts.map +0 -1
  1651. package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.js.map +0 -1
  1652. package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.d.ts.map +0 -1
  1653. package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js.map +0 -1
  1654. package/dist/planmagnet/pages/ProductsFeaturesPagePage.d.ts.map +0 -1
  1655. package/dist/planmagnet/pages/ProductsFeaturesPagePage.js.map +0 -1
  1656. package/dist/planmagnet/pages/ProductsNewFeaturePagePage.d.ts.map +0 -1
  1657. package/dist/planmagnet/pages/ProductsNewFeaturePagePage.js.map +0 -1
  1658. package/dist/planmagnet/pages/ProductsPrioritizationPagePage.d.ts.map +0 -1
  1659. package/dist/planmagnet/pages/ProductsPrioritizationPagePage.js.map +0 -1
  1660. package/dist/planmagnet/pages/ProductsProductDetailPagePage.d.ts.map +0 -1
  1661. package/dist/planmagnet/pages/ProductsProductDetailPagePage.js.map +0 -1
  1662. package/dist/planmagnet/pages/ProductsProductFeatureDetailPagePage.d.ts.map +0 -1
  1663. package/dist/planmagnet/pages/ProductsProductFeatureDetailPagePage.js.map +0 -1
  1664. package/dist/planmagnet/pages/ProductsProductHierarchyPagePage.d.ts.map +0 -1
  1665. package/dist/planmagnet/pages/ProductsProductHierarchyPagePage.js.map +0 -1
  1666. package/dist/planmagnet/pages/ProductsProductLinesPagePage.d.ts.map +0 -1
  1667. package/dist/planmagnet/pages/ProductsProductLinesPagePage.js.map +0 -1
  1668. package/dist/planmagnet/pages/ProductsProductsPagePage.d.ts.map +0 -1
  1669. package/dist/planmagnet/pages/ProductsProductsPagePage.js.map +0 -1
  1670. package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.d.ts.map +0 -1
  1671. package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js.map +0 -1
  1672. package/dist/planmagnet/pages/ProductsReleasesPagePage.d.ts.map +0 -1
  1673. package/dist/planmagnet/pages/ProductsReleasesPagePage.js.map +0 -1
  1674. package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.d.ts.map +0 -1
  1675. package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.js.map +0 -1
  1676. package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.d.ts.map +0 -1
  1677. package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.js.map +0 -1
  1678. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.d.ts.map +0 -1
  1679. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js.map +0 -1
  1680. package/dist/planmagnet/pages/ProgramsCreateProgramPagePage.d.ts.map +0 -1
  1681. package/dist/planmagnet/pages/ProgramsCreateProgramPagePage.js.map +0 -1
  1682. package/dist/planmagnet/pages/ProgramsEditProgramPagePage.d.ts.map +0 -1
  1683. package/dist/planmagnet/pages/ProgramsEditProgramPagePage.js.map +0 -1
  1684. package/dist/planmagnet/pages/ProgramsProgramDetailPagePage.d.ts.map +0 -1
  1685. package/dist/planmagnet/pages/ProgramsProgramDetailPagePage.js.map +0 -1
  1686. package/dist/planmagnet/pages/ProgramsProgramsPagePage.d.ts.map +0 -1
  1687. package/dist/planmagnet/pages/ProgramsProgramsPagePage.js.map +0 -1
  1688. package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.d.ts.map +0 -1
  1689. package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.js.map +0 -1
  1690. package/dist/planmagnet/pages/ProjectsAtRiskPagePage.d.ts.map +0 -1
  1691. package/dist/planmagnet/pages/ProjectsAtRiskPagePage.js.map +0 -1
  1692. package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.d.ts.map +0 -1
  1693. package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.js.map +0 -1
  1694. package/dist/planmagnet/pages/ProjectsBudgetsPagePage.d.ts.map +0 -1
  1695. package/dist/planmagnet/pages/ProjectsBudgetsPagePage.js.map +0 -1
  1696. package/dist/planmagnet/pages/ProjectsCreateProjectPagePage.d.ts.map +0 -1
  1697. package/dist/planmagnet/pages/ProjectsCreateProjectPagePage.js.map +0 -1
  1698. package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.d.ts.map +0 -1
  1699. package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.js.map +0 -1
  1700. package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.d.ts.map +0 -1
  1701. package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.js.map +0 -1
  1702. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.d.ts.map +0 -1
  1703. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js.map +0 -1
  1704. package/dist/planmagnet/pages/ProjectsGanttPagePage.d.ts.map +0 -1
  1705. package/dist/planmagnet/pages/ProjectsGanttPagePage.js.map +0 -1
  1706. package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.d.ts.map +0 -1
  1707. package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.js.map +0 -1
  1708. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.d.ts.map +0 -1
  1709. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.js.map +0 -1
  1710. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.d.ts.map +0 -1
  1711. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js.map +0 -1
  1712. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.d.ts.map +0 -1
  1713. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js.map +0 -1
  1714. package/dist/planmagnet/pages/ProjectsPlanningPagePage.d.ts.map +0 -1
  1715. package/dist/planmagnet/pages/ProjectsPlanningPagePage.js.map +0 -1
  1716. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +0 -1
  1717. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +0 -1
  1718. package/dist/planmagnet/pages/ProjectsProjectsPagePage.d.ts.map +0 -1
  1719. package/dist/planmagnet/pages/ProjectsProjectsPagePage.js.map +0 -1
  1720. package/dist/planmagnet/pages/ProjectsQualityGatesPagePage.d.ts.map +0 -1
  1721. package/dist/planmagnet/pages/ProjectsQualityGatesPagePage.js.map +0 -1
  1722. package/dist/planmagnet/pages/ProjectsWorkflowPagePage.d.ts.map +0 -1
  1723. package/dist/planmagnet/pages/ProjectsWorkflowPagePage.js.map +0 -1
  1724. package/dist/planmagnet/pages/ReportsCreateReportPagePage.d.ts.map +0 -1
  1725. package/dist/planmagnet/pages/ReportsCreateReportPagePage.js.map +0 -1
  1726. package/dist/planmagnet/pages/ReportsEditReportPagePage.d.ts.map +0 -1
  1727. package/dist/planmagnet/pages/ReportsEditReportPagePage.js.map +0 -1
  1728. package/dist/planmagnet/pages/ReportsReportPagePage.d.ts.map +0 -1
  1729. package/dist/planmagnet/pages/ReportsReportPagePage.js.map +0 -1
  1730. package/dist/planmagnet/pages/ReportsReportsPagePage.d.ts.map +0 -1
  1731. package/dist/planmagnet/pages/ReportsReportsPagePage.js.map +0 -1
  1732. package/dist/planmagnet/pages/RisksRiskDetailPagePage.d.ts.map +0 -1
  1733. package/dist/planmagnet/pages/RisksRiskDetailPagePage.js.map +0 -1
  1734. package/dist/planmagnet/pages/RisksRiskRegisterPagePage.d.ts.map +0 -1
  1735. package/dist/planmagnet/pages/RisksRiskRegisterPagePage.js.map +0 -1
  1736. package/dist/planmagnet/pages/SprintsStartSprintPagePage.d.ts.map +0 -1
  1737. package/dist/planmagnet/pages/SprintsStartSprintPagePage.js.map +0 -1
  1738. package/dist/planmagnet/pages/TasksCreateTaskPagePage.d.ts.map +0 -1
  1739. package/dist/planmagnet/pages/TasksCreateTaskPagePage.js.map +0 -1
  1740. package/dist/planmagnet/pages/TasksEditTaskPagePage.d.ts.map +0 -1
  1741. package/dist/planmagnet/pages/TasksEditTaskPagePage.js.map +0 -1
  1742. package/dist/planmagnet/pages/TasksImportPagePage.d.ts.map +0 -1
  1743. package/dist/planmagnet/pages/TasksImportPagePage.js.map +0 -1
  1744. package/dist/planmagnet/pages/TasksMyDashboardPagePage.d.ts.map +0 -1
  1745. package/dist/planmagnet/pages/TasksMyDashboardPagePage.js.map +0 -1
  1746. package/dist/planmagnet/pages/TasksMyWorkPagePage.d.ts.map +0 -1
  1747. package/dist/planmagnet/pages/TasksMyWorkPagePage.js.map +0 -1
  1748. package/dist/planmagnet/pages/TasksTaskDetailPagePage.d.ts.map +0 -1
  1749. package/dist/planmagnet/pages/TasksTaskDetailPagePage.js.map +0 -1
  1750. package/dist/planmagnet/pages/TasksTasksPagePage.d.ts.map +0 -1
  1751. package/dist/planmagnet/pages/TasksTasksPagePage.js.map +0 -1
  1752. package/dist/planmagnet/pages/TasksTimeEntriesPagePage.d.ts.map +0 -1
  1753. package/dist/planmagnet/pages/TasksTimeEntriesPagePage.js.map +0 -1
  1754. package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.d.ts.map +0 -1
  1755. package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.js.map +0 -1
  1756. package/dist/planmagnet/pages/TasksTimesheetsPagePage.d.ts.map +0 -1
  1757. package/dist/planmagnet/pages/TasksTimesheetsPagePage.js.map +0 -1
  1758. package/dist/planmagnet/pages/TeamCreateTeamPagePage.d.ts.map +0 -1
  1759. package/dist/planmagnet/pages/TeamCreateTeamPagePage.js.map +0 -1
  1760. package/dist/planmagnet/pages/TeamInviteMemberPagePage.d.ts.map +0 -1
  1761. package/dist/planmagnet/pages/TeamInviteMemberPagePage.js.map +0 -1
  1762. package/dist/planmagnet/pages/TeamTeamDetailPagePage.d.ts.map +0 -1
  1763. package/dist/planmagnet/pages/TeamTeamDetailPagePage.js.map +0 -1
  1764. package/dist/planmagnet/pages/TeamTeamEditPagePage.d.ts.map +0 -1
  1765. package/dist/planmagnet/pages/TeamTeamEditPagePage.js.map +0 -1
  1766. package/dist/planmagnet/pages/TeamTeamPagePage.d.ts.map +0 -1
  1767. package/dist/planmagnet/pages/TeamTeamPagePage.js.map +0 -1
  1768. package/dist/planmagnet/pages/TeamTeamsListPagePage.d.ts.map +0 -1
  1769. package/dist/planmagnet/pages/TeamTeamsListPagePage.js.map +0 -1
  1770. package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.d.ts.map +0 -1
  1771. package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.js.map +0 -1
  1772. package/dist/planmagnet/pages/TemplatesTemplatesPagePage.d.ts.map +0 -1
  1773. package/dist/planmagnet/pages/TemplatesTemplatesPagePage.js.map +0 -1
  1774. package/dist/planmagnet/pages/WorkspaceCreateWorkspacePagePage.d.ts.map +0 -1
  1775. package/dist/planmagnet/pages/WorkspaceCreateWorkspacePagePage.js.map +0 -1
  1776. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.d.ts.map +0 -1
  1777. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js.map +0 -1
  1778. package/dist/planmagnet/pages/analytics/DeliveryKpisCard.d.ts.map +0 -1
  1779. package/dist/planmagnet/pages/analytics/DeliveryKpisCard.js.map +0 -1
  1780. package/dist/planmagnet/pages/analytics/MetricsCard.d.ts.map +0 -1
  1781. package/dist/planmagnet/pages/analytics/MetricsCard.js.map +0 -1
  1782. package/dist/planmagnet/pages/analytics/QualityMetricsCard.d.ts.map +0 -1
  1783. package/dist/planmagnet/pages/analytics/QualityMetricsCard.js.map +0 -1
  1784. package/dist/planmagnet/pages/analytics/SprintDeliveryCards.d.ts.map +0 -1
  1785. package/dist/planmagnet/pages/analytics/SprintDeliveryCards.js.map +0 -1
  1786. package/dist/planmagnet/pages/analytics/StatusFlowCard.d.ts.map +0 -1
  1787. package/dist/planmagnet/pages/analytics/StatusFlowCard.js.map +0 -1
  1788. package/dist/planmagnet/pages/analytics/ThroughputCard.d.ts.map +0 -1
  1789. package/dist/planmagnet/pages/analytics/ThroughputCard.js.map +0 -1
  1790. package/dist/planmagnet/pages/analytics/WorkBreakdownCard.d.ts.map +0 -1
  1791. package/dist/planmagnet/pages/analytics/WorkBreakdownCard.js.map +0 -1
  1792. package/dist/planmagnet/pages/analytics/analyticsRange.d.ts.map +0 -1
  1793. package/dist/planmagnet/pages/analytics/analyticsRange.js.map +0 -1
  1794. package/dist/planmagnet/people/People.d.ts.map +0 -1
  1795. package/dist/planmagnet/people/People.js.map +0 -1
  1796. package/dist/planmagnet/presence/PresenceAvatars.d.ts.map +0 -1
  1797. package/dist/planmagnet/presence/PresenceAvatars.js.map +0 -1
  1798. package/dist/planmagnet/product/FeatureLinkPanels.d.ts.map +0 -1
  1799. package/dist/planmagnet/product/FeatureLinkPanels.js.map +0 -1
  1800. package/dist/planmagnet/product/ProductControls.d.ts.map +0 -1
  1801. package/dist/planmagnet/product/ProductControls.js.map +0 -1
  1802. package/dist/planmagnet/product/ProductFeatureControls.d.ts.map +0 -1
  1803. package/dist/planmagnet/product/ProductFeatureControls.js.map +0 -1
  1804. package/dist/planmagnet/product/ProductFeatureLinkCard.d.ts.map +0 -1
  1805. package/dist/planmagnet/product/ProductFeatureLinkCard.js.map +0 -1
  1806. package/dist/planmagnet/product/ProductLineControls.d.ts.map +0 -1
  1807. package/dist/planmagnet/product/ProductLineControls.js.map +0 -1
  1808. package/dist/planmagnet/product/ProductTeamsPanel.d.ts.map +0 -1
  1809. package/dist/planmagnet/product/ProductTeamsPanel.js.map +0 -1
  1810. package/dist/planmagnet/product/WorkItemProductFeatureChip.d.ts.map +0 -1
  1811. package/dist/planmagnet/product/WorkItemProductFeatureChip.js.map +0 -1
  1812. package/dist/planmagnet/product/hierarchy.d.ts.map +0 -1
  1813. package/dist/planmagnet/product/hierarchy.js.map +0 -1
  1814. package/dist/planmagnet/product/hierarchyOperations.d.ts.map +0 -1
  1815. package/dist/planmagnet/product/hierarchyOperations.js.map +0 -1
  1816. package/dist/planmagnet/product/refusal.d.ts.map +0 -1
  1817. package/dist/planmagnet/product/refusal.js.map +0 -1
  1818. package/dist/planmagnet/product/routes.d.ts.map +0 -1
  1819. package/dist/planmagnet/product/routes.js.map +0 -1
  1820. package/dist/planmagnet/providers/PlanMagnetProvider.d.ts.map +0 -1
  1821. package/dist/planmagnet/providers/PlanMagnetProvider.js.map +0 -1
  1822. package/dist/planmagnet/releases/ReleaseChecklistCard.d.ts.map +0 -1
  1823. package/dist/planmagnet/releases/ReleaseChecklistCard.js.map +0 -1
  1824. package/dist/planmagnet/releases/ReleaseGatesCard.d.ts.map +0 -1
  1825. package/dist/planmagnet/releases/ReleaseGatesCard.js.map +0 -1
  1826. package/dist/planmagnet/releases/ReleaseNotesCard.d.ts.map +0 -1
  1827. package/dist/planmagnet/releases/ReleaseNotesCard.js.map +0 -1
  1828. package/dist/planmagnet/releases/ReleaseReadinessCard.d.ts.map +0 -1
  1829. package/dist/planmagnet/releases/ReleaseReadinessCard.js.map +0 -1
  1830. package/dist/planmagnet/releases/ReleaseWorkItemsCard.d.ts.map +0 -1
  1831. package/dist/planmagnet/releases/ReleaseWorkItemsCard.js.map +0 -1
  1832. package/dist/planmagnet/releases/useReleaseOptions.d.ts.map +0 -1
  1833. package/dist/planmagnet/releases/useReleaseOptions.js.map +0 -1
  1834. package/dist/planmagnet/reports/ExportMenu.d.ts.map +0 -1
  1835. package/dist/planmagnet/reports/ExportMenu.js.map +0 -1
  1836. package/dist/planmagnet/reports/PrintReportView.d.ts.map +0 -1
  1837. package/dist/planmagnet/reports/PrintReportView.js.map +0 -1
  1838. package/dist/planmagnet/reports/ReportBuilderCanvas.d.ts.map +0 -1
  1839. package/dist/planmagnet/reports/ReportBuilderCanvas.js.map +0 -1
  1840. package/dist/planmagnet/reports/ReportBuilderPage.d.ts.map +0 -1
  1841. package/dist/planmagnet/reports/ReportBuilderPage.js.map +0 -1
  1842. package/dist/planmagnet/reports/ReportRunHistory.d.ts.map +0 -1
  1843. package/dist/planmagnet/reports/ReportRunHistory.js.map +0 -1
  1844. package/dist/planmagnet/reports/ReportWidgetRenderer.d.ts.map +0 -1
  1845. package/dist/planmagnet/reports/ReportWidgetRenderer.js.map +0 -1
  1846. package/dist/planmagnet/reports/SchedulesPanel.d.ts.map +0 -1
  1847. package/dist/planmagnet/reports/SchedulesPanel.js.map +0 -1
  1848. package/dist/planmagnet/reports/ShareDialog.d.ts.map +0 -1
  1849. package/dist/planmagnet/reports/ShareDialog.js.map +0 -1
  1850. package/dist/planmagnet/reports/SharedReportPage.d.ts.map +0 -1
  1851. package/dist/planmagnet/reports/SharedReportPage.js.map +0 -1
  1852. package/dist/planmagnet/reports/WidgetEditorDialog.d.ts.map +0 -1
  1853. package/dist/planmagnet/reports/WidgetEditorDialog.js.map +0 -1
  1854. package/dist/planmagnet/reports/reportExportPptx.d.ts.map +0 -1
  1855. package/dist/planmagnet/reports/reportExportPptx.js.map +0 -1
  1856. package/dist/planmagnet/reports/reportExportXlsx.d.ts.map +0 -1
  1857. package/dist/planmagnet/reports/reportExportXlsx.js.map +0 -1
  1858. package/dist/planmagnet/reports/reportGraphql.d.ts.map +0 -1
  1859. package/dist/planmagnet/reports/reportGraphql.js.map +0 -1
  1860. package/dist/planmagnet/reports/reportModel.d.ts.map +0 -1
  1861. package/dist/planmagnet/reports/reportModel.js.map +0 -1
  1862. package/dist/planmagnet/reports/sharedReportRoute.d.ts.map +0 -1
  1863. package/dist/planmagnet/reports/sharedReportRoute.js.map +0 -1
  1864. package/dist/planmagnet/roadmaps/FeatureInitiativeCard.d.ts.map +0 -1
  1865. package/dist/planmagnet/roadmaps/FeatureInitiativeCard.js.map +0 -1
  1866. package/dist/planmagnet/roadmaps/RoadmapControls.d.ts.map +0 -1
  1867. package/dist/planmagnet/roadmaps/RoadmapControls.js.map +0 -1
  1868. package/dist/planmagnet/roadmaps/RoadmapNowNextLater.d.ts.map +0 -1
  1869. package/dist/planmagnet/roadmaps/RoadmapNowNextLater.js.map +0 -1
  1870. package/dist/planmagnet/roadmaps/RoadmapPresentation.d.ts.map +0 -1
  1871. package/dist/planmagnet/roadmaps/RoadmapPresentation.js.map +0 -1
  1872. package/dist/planmagnet/roadmaps/RoadmapReviewPanel.d.ts.map +0 -1
  1873. package/dist/planmagnet/roadmaps/RoadmapReviewPanel.js.map +0 -1
  1874. package/dist/planmagnet/roadmaps/RoadmapVersionsPanel.d.ts.map +0 -1
  1875. package/dist/planmagnet/roadmaps/RoadmapVersionsPanel.js.map +0 -1
  1876. package/dist/planmagnet/roadmaps/planningFocus.d.ts.map +0 -1
  1877. package/dist/planmagnet/roadmaps/planningFocus.js.map +0 -1
  1878. package/dist/planmagnet/satisfaction/DeliverySatisfactionSection.d.ts.map +0 -1
  1879. package/dist/planmagnet/satisfaction/DeliverySatisfactionSection.js.map +0 -1
  1880. package/dist/planmagnet/satisfaction/SatisfactionFigures.d.ts.map +0 -1
  1881. package/dist/planmagnet/satisfaction/SatisfactionFigures.js.map +0 -1
  1882. package/dist/planmagnet/satisfaction/SatisfactionImportDialog.d.ts.map +0 -1
  1883. package/dist/planmagnet/satisfaction/SatisfactionImportDialog.js.map +0 -1
  1884. package/dist/planmagnet/satisfaction/SatisfactionLinkFields.d.ts.map +0 -1
  1885. package/dist/planmagnet/satisfaction/SatisfactionLinkFields.js.map +0 -1
  1886. package/dist/planmagnet/satisfaction/SatisfactionReleaseSelect.d.ts.map +0 -1
  1887. package/dist/planmagnet/satisfaction/SatisfactionReleaseSelect.js.map +0 -1
  1888. package/dist/planmagnet/satisfaction/SatisfactionResponseDialog.d.ts.map +0 -1
  1889. package/dist/planmagnet/satisfaction/SatisfactionResponseDialog.js.map +0 -1
  1890. package/dist/planmagnet/satisfaction/SatisfactionResponsesTable.d.ts.map +0 -1
  1891. package/dist/planmagnet/satisfaction/SatisfactionResponsesTable.js.map +0 -1
  1892. package/dist/planmagnet/satisfaction/SatisfactionSummaryCard.d.ts.map +0 -1
  1893. package/dist/planmagnet/satisfaction/SatisfactionSummaryCard.js.map +0 -1
  1894. package/dist/planmagnet/satisfaction/SatisfactionWindowPicker.d.ts.map +0 -1
  1895. package/dist/planmagnet/satisfaction/SatisfactionWindowPicker.js.map +0 -1
  1896. package/dist/planmagnet/satisfaction/satisfaction.d.ts.map +0 -1
  1897. package/dist/planmagnet/satisfaction/satisfaction.js.map +0 -1
  1898. package/dist/planmagnet/satisfaction/satisfactionCsv.d.ts.map +0 -1
  1899. package/dist/planmagnet/satisfaction/satisfactionCsv.js.map +0 -1
  1900. package/dist/planmagnet/satisfaction/satisfactionForm.d.ts.map +0 -1
  1901. package/dist/planmagnet/satisfaction/satisfactionForm.js.map +0 -1
  1902. package/dist/planmagnet/satisfaction/satisfactionOperations.d.ts.map +0 -1
  1903. package/dist/planmagnet/satisfaction/satisfactionOperations.js.map +0 -1
  1904. package/dist/planmagnet/satisfaction/useSatisfactionAccess.d.ts.map +0 -1
  1905. package/dist/planmagnet/satisfaction/useSatisfactionAccess.js.map +0 -1
  1906. package/dist/planmagnet/skills/RequiredSkillsEditor.d.ts.map +0 -1
  1907. package/dist/planmagnet/skills/RequiredSkillsEditor.js.map +0 -1
  1908. package/dist/planmagnet/skills/SkillChips.d.ts.map +0 -1
  1909. package/dist/planmagnet/skills/SkillChips.js.map +0 -1
  1910. package/dist/planmagnet/skills/SkillCoverageCard.d.ts.map +0 -1
  1911. package/dist/planmagnet/skills/SkillCoverageCard.js.map +0 -1
  1912. package/dist/planmagnet/skills/WorkItemRequiredSkills.d.ts.map +0 -1
  1913. package/dist/planmagnet/skills/WorkItemRequiredSkills.js.map +0 -1
  1914. package/dist/planmagnet/skills/skillOperations.d.ts.map +0 -1
  1915. package/dist/planmagnet/skills/skillOperations.js.map +0 -1
  1916. package/dist/planmagnet/skills/skillTags.d.ts.map +0 -1
  1917. package/dist/planmagnet/skills/skillTags.js.map +0 -1
  1918. package/dist/planmagnet/skills/useRequiredSkillsDraft.d.ts.map +0 -1
  1919. package/dist/planmagnet/skills/useRequiredSkillsDraft.js.map +0 -1
  1920. package/dist/planmagnet/sprints/SprintControls.d.ts.map +0 -1
  1921. package/dist/planmagnet/sprints/SprintControls.js.map +0 -1
  1922. package/dist/planmagnet/sprints/SprintDates.d.ts.map +0 -1
  1923. package/dist/planmagnet/sprints/SprintDates.js.map +0 -1
  1924. package/dist/planmagnet/store/planmagnetStore.d.ts.map +0 -1
  1925. package/dist/planmagnet/store/planmagnetStore.js.map +0 -1
  1926. package/dist/planmagnet/team/PendingInvitations.d.ts.map +0 -1
  1927. package/dist/planmagnet/team/PendingInvitations.js.map +0 -1
  1928. package/dist/planmagnet/team/TeamControls.d.ts.map +0 -1
  1929. package/dist/planmagnet/team/TeamControls.js.map +0 -1
  1930. package/dist/planmagnet/team/UnmatchedCrewIdentities.d.ts.map +0 -1
  1931. package/dist/planmagnet/team/UnmatchedCrewIdentities.js.map +0 -1
  1932. package/dist/planmagnet/team/invitationEmail.d.ts.map +0 -1
  1933. package/dist/planmagnet/team/invitationEmail.js.map +0 -1
  1934. package/dist/planmagnet/time/TaskTimePanel.d.ts.map +0 -1
  1935. package/dist/planmagnet/time/TaskTimePanel.js.map +0 -1
  1936. package/dist/planmagnet/time/TimeEntryControls.d.ts.map +0 -1
  1937. package/dist/planmagnet/time/TimeEntryControls.js.map +0 -1
  1938. package/dist/planmagnet/time/TimesheetControls.d.ts.map +0 -1
  1939. package/dist/planmagnet/time/TimesheetControls.js.map +0 -1
  1940. package/dist/planmagnet/time/timeShared.d.ts.map +0 -1
  1941. package/dist/planmagnet/time/timeShared.js.map +0 -1
  1942. package/dist/planmagnet/types/index.d.ts.map +0 -1
  1943. package/dist/planmagnet/utils/cn.d.ts.map +0 -1
  1944. package/dist/planmagnet/utils/cn.js.map +0 -1
  1945. package/dist/planmagnet/utils/email.d.ts.map +0 -1
  1946. package/dist/planmagnet/utils/email.js.map +0 -1
  1947. package/dist/planmagnet/utils/formValidation.d.ts.map +0 -1
  1948. package/dist/planmagnet/utils/formValidation.js.map +0 -1
  1949. package/dist/planmagnet/utils/graphqlErrors.d.ts.map +0 -1
  1950. package/dist/planmagnet/utils/graphqlErrors.js.map +0 -1
  1951. package/dist/planmagnet/utils/lineDiff.d.ts.map +0 -1
  1952. package/dist/planmagnet/utils/lineDiff.js.map +0 -1
  1953. package/dist/planmagnet/utils/mutationResult.d.ts.map +0 -1
  1954. package/dist/planmagnet/utils/mutationResult.js.map +0 -1
  1955. package/dist/planmagnet/utils/navigation.d.ts.map +0 -1
  1956. package/dist/planmagnet/utils/navigation.js.map +0 -1
  1957. package/dist/planmagnet/utils/qualityGateCriteria.d.ts.map +0 -1
  1958. package/dist/planmagnet/utils/qualityGateCriteria.js.map +0 -1
  1959. package/dist/planmagnet/utils/rowNavigation.d.ts.map +0 -1
  1960. package/dist/planmagnet/utils/rowNavigation.js.map +0 -1
  1961. package/dist/planmagnet/utils/statusColor.d.ts.map +0 -1
  1962. package/dist/planmagnet/utils/statusColor.js.map +0 -1
  1963. package/dist/planmagnet/utils/urlParam.d.ts.map +0 -1
  1964. package/dist/planmagnet/utils/urlParam.js.map +0 -1
  1965. package/dist/planmagnet/webhooks/webhookTypes.d.ts.map +0 -1
  1966. package/dist/planmagnet/webhooks/webhookTypes.js.map +0 -1
  1967. package/dist/shared/hooks/useTr.d.ts.map +0 -1
  1968. package/dist/shared/hooks/useTr.js.map +0 -1
  1969. package/dist/shared/utils/i18n.d.ts.map +0 -1
  1970. package/dist/shared/utils/i18n.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProductsProductHierarchyPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProductsProductHierarchyPagePage.tsx"],"sourcesContent":["import { useDeferredValue, useMemo, useState, type ReactNode } from 'react';\nimport { useQuery } from '@apollo/client/react';\nimport { Badge, Button, Card, CardContent, Input } from '@burdenoff/fe-libs/ui';\nimport {\n Archive,\n ChevronDown,\n ChevronRight,\n ChevronsDownUp,\n ChevronsUpDown,\n CircleDot,\n Layers,\n ListTree,\n Loader2,\n Milestone,\n Package,\n Puzzle,\n} from 'lucide-react';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { detailPath } from '../utils/rowNavigation';\nimport { enumLabel } from '../controls/WorkItemControls';\nimport { ErrorLine } from '../controls/ConfirmButton';\nimport { PRODUCT_HIERARCHY } from '../product/hierarchyOperations';\nimport { ProductFeatureStatusBadge } from '../product/ProductFeatureControls';\nimport {\n allNodeKeys,\n buildProductHierarchy,\n epicKey,\n featureKey,\n filterProductHierarchy,\n hierarchyTotals,\n lineKey,\n productKey,\n type HierarchyEpic,\n type HierarchyFeature,\n type HierarchyGroup,\n type HierarchyLineRef,\n type HierarchyProduct,\n} from '../product/hierarchy';\n\n/**\n * Product hierarchy (PRM-01): Product line > Product > Feature > Epic > Story, end to end, read from what people\n * linked — nothing is inferred. Products in no line sit under \"No product line\". Every level collapses; search\n * narrows the tree to what matches and opens the path to each match; \"Show archived\" brings back archived lines,\n * products and features. Each name opens that record's own page, where the links are managed.\n */\n\ninterface HierarchyData {\n planmagnetProductLines: { items: HierarchyLineRef[]; totalCount: number };\n planmagnetProducts: { items: HierarchyProduct[]; totalCount: number };\n}\n\nfunction taskPath(id: string) {\n return `/tasks/task-detail-page?taskId=${encodeURIComponent(id)}`;\n}\n\n/** Lines and products open by default; features (their epics) and epics (their stories) on demand. */\nfunction defaultOpenKeys(groups: readonly HierarchyGroup[]): Set<string> {\n const keys = new Set<string>();\n for (const group of groups) {\n keys.add(lineKey(group.line));\n for (const product of group.products) keys.add(productKey(product.id));\n }\n return keys;\n}\n\nexport function ProductsProductHierarchyPagePage() {\n const tr = useTr();\n const { workspaceId } = usePlanMagnet();\n const navigate = usePlanMagnetNavigate();\n const [showArchived, setShowArchived] = useState(false);\n const [search, setSearch] = useState('');\n const deferredSearch = useDeferredValue(search);\n // null until the person expands or collapses something: the default view follows the data as it loads.\n const [openKeys, setOpenKeys] = useState<Set<string> | null>(null);\n\n const { data, previousData, loading, error } = useQuery<HierarchyData>(PRODUCT_HIERARCHY, {\n variables: {\n workspaceId: workspaceId ?? '',\n // Omitted filters list active and archived records alike.\n lineFilter: showArchived ? undefined : { isActive: true },\n productFilter: showArchived ? undefined : { isActive: true },\n includeArchivedFeatures: showArchived,\n },\n skip: !workspaceId,\n });\n const source = data ?? previousData;\n\n const groups = useMemo(\n () =>\n source\n ? buildProductHierarchy(\n source.planmagnetProductLines.items,\n source.planmagnetProducts.items\n )\n : [],\n [source]\n );\n const filtered = useMemo(\n () => filterProductHierarchy(groups, deferredSearch),\n [groups, deferredSearch]\n );\n const open = openKeys ?? defaultOpenKeys(groups);\n const isOpen = (key: string) => open.has(key);\n const toggle = (key: string) =>\n setOpenKeys((prev) => {\n const next = new Set(prev ?? defaultOpenKeys(groups));\n if (next.has(key)) next.delete(key);\n else next.add(key);\n return next;\n });\n\n const onSearch = (value: string) => {\n setSearch(value);\n // Open the path to every match as the person types, keeping whatever they opened themselves.\n const { expand } = filterProductHierarchy(groups, value);\n if (expand.size > 0) {\n setOpenKeys((prev) => new Set([...(prev ?? defaultOpenKeys(groups)), ...expand]));\n }\n };\n\n // Only before the first load: a refetch must not blank the page (it unmounts every component on it).\n if (loading && !source) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n );\n }\n\n if (error && !source) {\n return (\n <div className=\"p-6 text-destructive\">\n {tr(\n 'planmagnet.productHierarchy.errors.load',\n 'Failed to load the product hierarchy: {{message}}',\n { message: error.message }\n )}\n </div>\n );\n }\n\n const totals = hierarchyTotals(filtered.groups);\n const linesTruncated =\n !!source &&\n source.planmagnetProductLines.totalCount > source.planmagnetProductLines.items.length;\n const productsTruncated =\n !!source && source.planmagnetProducts.totalCount > source.planmagnetProducts.items.length;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex flex-wrap items-start justify-between gap-4\">\n <div>\n <h1 className=\"flex items-center gap-2 text-2xl font-semibold\">\n <ListTree className=\"h-6 w-6\" />\n {tr('planmagnet.productHierarchy.title', 'Product hierarchy')}\n </h1>\n <p className=\"mt-1 text-sm text-muted-foreground\">\n {tr(\n 'planmagnet.productHierarchy.subtitle',\n 'Product lines › products › features › epics › stories, as linked on each record’s page. Nothing here is inferred.'\n )}\n </p>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => navigate('/products/product-lines-page')}\n data-testid=\"product-hierarchy-manage-lines\"\n >\n <Layers className=\"mr-1 h-4 w-4\" />\n {tr('planmagnet.productHierarchy.manageLines', 'Product lines')}\n </Button>\n <Button\n size=\"sm\"\n variant={showArchived ? 'default' : 'outline'}\n aria-pressed={showArchived}\n onClick={() => setShowArchived((v) => !v)}\n data-testid=\"product-hierarchy-toggle-archived\"\n >\n <Archive className=\"mr-1 h-4 w-4\" />\n {tr('planmagnet.productHierarchy.showArchived', 'Show archived')}\n </Button>\n </div>\n </div>\n\n <div className=\"flex flex-wrap items-center gap-2\">\n <Input\n aria-label={tr('planmagnet.productHierarchy.search', 'Search the hierarchy')}\n placeholder={tr(\n 'planmagnet.productHierarchy.searchPlaceholder',\n 'Search lines, products, features, epics, stories…'\n )}\n value={search}\n onChange={(e) => onSearch(e.target.value)}\n className=\"max-w-sm\"\n data-testid=\"product-hierarchy-search\"\n />\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => setOpenKeys(allNodeKeys(groups))}\n data-testid=\"product-hierarchy-expand-all\"\n >\n <ChevronsUpDown className=\"mr-1 h-4 w-4\" />\n {tr('planmagnet.productHierarchy.expandAll', 'Expand all')}\n </Button>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n onClick={() => setOpenKeys(new Set())}\n data-testid=\"product-hierarchy-collapse-all\"\n >\n <ChevronsDownUp className=\"mr-1 h-4 w-4\" />\n {tr('planmagnet.productHierarchy.collapseAll', 'Collapse all')}\n </Button>\n </div>\n\n <p className=\"text-xs text-muted-foreground\" data-testid=\"product-hierarchy-totals\">\n {tr(\n 'planmagnet.productHierarchy.totals',\n '{{lines}} line(s) · {{products}} product(s) · {{features}} feature(s) · {{epics}} epic(s) · {{stories}} story/item(s)',\n {\n lines: totals.lines,\n products: totals.products,\n features: totals.features,\n epics: totals.epics,\n stories: totals.children,\n }\n )}\n </p>\n\n {error && (\n <ErrorLine\n message={tr(\n 'planmagnet.productHierarchy.errors.refresh',\n 'The hierarchy could not be refreshed: {{message}}',\n { message: error.message }\n )}\n />\n )}\n {(linesTruncated || productsTruncated) && (\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n 'planmagnet.productHierarchy.truncated',\n 'Only the first 100 product lines and 100 products are shown.'\n )}\n </p>\n )}\n\n {filtered.groups.length === 0 ? (\n <Card>\n <CardContent className=\"py-12 text-center text-sm text-muted-foreground\">\n {deferredSearch.trim()\n ? tr('planmagnet.productHierarchy.emptySearch', 'Nothing in the hierarchy matches.')\n : tr(\n 'planmagnet.productHierarchy.empty',\n 'No product lines or products yet. Create a product line, then put products in it from each product’s page.'\n )}\n </CardContent>\n </Card>\n ) : (\n <Card>\n <CardContent className=\"pt-4\">\n <ul className=\"space-y-1\" data-testid=\"product-hierarchy-tree\">\n {filtered.groups.map((group) => (\n <LineNode\n key={lineKey(group.line)}\n group={group}\n isOpen={isOpen}\n toggle={toggle}\n onOpenProduct={(id) => navigate(detailPath('/products/product-detail-page', id))}\n onOpenFeature={(id) =>\n navigate(detailPath('/products/product-feature-detail-page', id))\n }\n onOpenWorkItem={(id) => navigate(taskPath(id))}\n />\n ))}\n </ul>\n </CardContent>\n </Card>\n )}\n </div>\n );\n}\n\n// ─── Tree nodes ─────────────────────────────────────────────────────────────\n\ninterface TreeProps {\n isOpen: (key: string) => boolean;\n toggle: (key: string) => void;\n onOpenProduct: (id: string) => void;\n onOpenFeature: (id: string) => void;\n onOpenWorkItem: (id: string) => void;\n}\n\n/**\n * One row: an expand toggle (or a spacer for a leaf), then the row's own content. The content wraps rather than\n * squeezing: on a narrow screen the badges and counts move under the name instead of truncating it to a letter.\n */\nfunction TreeRow({\n nodeKey,\n label,\n expandable,\n isOpen,\n toggle,\n children,\n}: {\n nodeKey: string;\n label: string;\n expandable: boolean;\n isOpen: (key: string) => boolean;\n toggle: (key: string) => void;\n children: ReactNode;\n}) {\n const tr = useTr();\n const open = isOpen(nodeKey);\n return (\n <div className=\"flex min-w-0 items-start gap-2 py-1 text-sm\">\n {expandable ? (\n <button\n type=\"button\"\n className=\"shrink-0 rounded p-0.5 text-muted-foreground hover:bg-muted\"\n aria-expanded={open}\n aria-label={\n open\n ? tr('planmagnet.productHierarchy.collapseNamed', 'Collapse {{name}}', {\n name: label,\n })\n : tr('planmagnet.productHierarchy.expandNamed', 'Expand {{name}}', { name: label })\n }\n onClick={() => toggle(nodeKey)}\n >\n {open ? <ChevronDown className=\"h-4 w-4\" /> : <ChevronRight className=\"h-4 w-4\" />}\n </button>\n ) : (\n <span className=\"w-5 shrink-0\" aria-hidden=\"true\" />\n )}\n <div className=\"flex min-w-0 flex-1 flex-wrap items-center gap-x-2 gap-y-0.5\">{children}</div>\n </div>\n );\n}\n\nconst childListClass = 'ml-3 space-y-1 border-l pl-3';\n\nfunction LineNode({ group, ...tree }: TreeProps & { group: HierarchyGroup }) {\n const tr = useTr();\n const key = lineKey(group.line);\n const name = group.line?.name ?? tr('planmagnet.productHierarchy.noLine', 'No product line');\n return (\n <li data-testid=\"hierarchy-line\">\n <TreeRow\n nodeKey={key}\n label={name}\n expandable={group.products.length > 0}\n isOpen={tree.isOpen}\n toggle={tree.toggle}\n >\n {group.line ? (\n <Layers className=\"h-4 w-4 shrink-0 text-primary\" />\n ) : (\n <Package className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n )}\n <span\n className={\n group.line ? 'truncate font-semibold' : 'truncate font-semibold text-muted-foreground'\n }\n >\n {name}\n </span>\n {group.line?.archivedAt && (\n <Badge variant=\"outline\" className=\"text-xs\">\n {tr('planmagnet.productHierarchy.archived', 'Archived')}\n </Badge>\n )}\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {tr('planmagnet.productHierarchy.productCount', '{{count}} product(s)', {\n count: group.products.length,\n })}\n </span>\n </TreeRow>\n {tree.isOpen(key) && group.products.length > 0 && (\n <ul className={childListClass}>\n {group.products.map((product) => (\n <ProductNode key={product.id} product={product} {...tree} />\n ))}\n </ul>\n )}\n </li>\n );\n}\n\nfunction ProductNode({ product, ...tree }: TreeProps & { product: HierarchyProduct }) {\n const tr = useTr();\n const key = productKey(product.id);\n return (\n <li data-testid=\"hierarchy-product\">\n <TreeRow\n nodeKey={key}\n label={product.name}\n expandable={product.features.length > 0}\n isOpen={tree.isOpen}\n toggle={tree.toggle}\n >\n <Package className=\"h-4 w-4 shrink-0 text-primary\" />\n <button\n type=\"button\"\n className=\"min-w-0 truncate text-left font-medium hover:underline\"\n onClick={() => tree.onOpenProduct(product.id)}\n >\n {product.name}\n </button>\n <Badge variant=\"secondary\" className=\"text-xs\">\n {enumLabel(product.lifecycleStage)}\n </Badge>\n {product.archivedAt && (\n <Badge variant=\"outline\" className=\"text-xs\">\n {tr('planmagnet.productHierarchy.archived', 'Archived')}\n </Badge>\n )}\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {tr('planmagnet.productHierarchy.featureCount', '{{count}} feature(s)', {\n count: product.features.length,\n })}\n </span>\n </TreeRow>\n {tree.isOpen(key) && product.features.length > 0 && (\n <ul className={childListClass}>\n {product.features.map((feature) => (\n <FeatureNode key={feature.id} feature={feature} {...tree} />\n ))}\n </ul>\n )}\n </li>\n );\n}\n\nfunction FeatureNode({ feature, ...tree }: TreeProps & { feature: HierarchyFeature }) {\n const tr = useTr();\n const key = featureKey(feature.id);\n return (\n <li data-testid=\"hierarchy-feature\">\n <TreeRow\n nodeKey={key}\n label={feature.name}\n expandable={feature.epics.length > 0}\n isOpen={tree.isOpen}\n toggle={tree.toggle}\n >\n <Puzzle className=\"h-4 w-4 shrink-0 text-primary\" />\n <button\n type=\"button\"\n className=\"min-w-0 truncate text-left hover:underline\"\n onClick={() => tree.onOpenFeature(feature.id)}\n >\n {feature.name}\n </button>\n <ProductFeatureStatusBadge status={feature.status} />\n {feature.archivedAt && (\n <Badge variant=\"outline\" className=\"text-xs\">\n {tr('planmagnet.productHierarchy.archived', 'Archived')}\n </Badge>\n )}\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {tr('planmagnet.productHierarchy.epicCount', '{{count}} epic(s)', {\n count: feature.epics.length,\n })}\n </span>\n </TreeRow>\n {tree.isOpen(key) && feature.epics.length > 0 && (\n <ul className={childListClass}>\n {feature.epics.map((epic) => (\n <EpicNode key={epic.id} epic={epic} {...tree} />\n ))}\n </ul>\n )}\n </li>\n );\n}\n\nfunction EpicNode({ epic, ...tree }: TreeProps & { epic: HierarchyEpic }) {\n const tr = useTr();\n const key = epicKey(epic.id);\n return (\n <li data-testid=\"hierarchy-epic\">\n <TreeRow\n nodeKey={key}\n label={`${epic.key} ${epic.title}`}\n expandable={epic.children.length > 0}\n isOpen={tree.isOpen}\n toggle={tree.toggle}\n >\n <Milestone className=\"h-4 w-4 shrink-0 text-muted-foreground\" />\n <button\n type=\"button\"\n className=\"min-w-0 truncate text-left hover:underline\"\n onClick={() => tree.onOpenWorkItem(epic.id)}\n >\n <span className=\"mr-2 text-muted-foreground\">{epic.key}</span>\n {epic.title}\n </button>\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {enumLabel(epic.status)} ·{' '}\n {tr('planmagnet.productHierarchy.storyCount', '{{count}} story/item(s)', {\n count: epic.children.length,\n })}\n </span>\n </TreeRow>\n {tree.isOpen(key) && epic.children.length > 0 && (\n <ul className={childListClass}>\n {epic.children.map((child) => (\n <li key={child.id} data-testid=\"hierarchy-story\">\n <TreeRow\n nodeKey={`item:${child.id}`}\n label={child.title}\n expandable={false}\n isOpen={tree.isOpen}\n toggle={tree.toggle}\n >\n <CircleDot className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n <button\n type=\"button\"\n className=\"min-w-0 truncate text-left hover:underline\"\n onClick={() => tree.onOpenWorkItem(child.id)}\n >\n <span className=\"mr-2 text-muted-foreground\">{child.key}</span>\n {child.title}\n </button>\n <span className=\"shrink-0 text-xs text-muted-foreground\">\n {enumLabel(child.type)} · {enumLabel(child.status)}\n </span>\n </TreeRow>\n </li>\n ))}\n </ul>\n )}\n </li>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProductsProductLinesPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProductsProductLinesPagePage.tsx"],"names":[],"mappings":"AA8CA,wBAAgB,4BAA4B,4CAiP3C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProductsProductLinesPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProductsProductLinesPagePage.tsx"],"sourcesContent":["import { useDeferredValue, useState } from 'react';\nimport { useQuery } from '@apollo/client/react';\nimport {\n Badge,\n Button,\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Input,\n} from '@burdenoff/fe-libs/ui';\nimport { Archive, Layers, ListTree, Loader2 } from 'lucide-react';\nimport { useTr } from '../../shared/hooks/useTr';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { PersonName } from '../people/People';\nimport { ErrorLine } from '../controls/ConfirmButton';\nimport {\n ProductLineActions,\n ProductLineFormDialog,\n ProductLineProducts,\n type ProductLineProductRef,\n type ProductLineValues,\n} from '../product/ProductLineControls';\nimport { PRODUCT_LINES_PAGE } from '../product/hierarchyOperations';\n\n/**\n * Product lines (PRM-01): the top of the product hierarchy — Product line > Product > Feature > Epic > Story. Lists\n * lines with their products (search and \"show archived\" run on the server), and creates, edits, archives and\n * deletes them. A line never owns its products: archiving keeps them in it, deleting only takes them out of it.\n * Nothing is inferred — every product starts in no line until someone puts it in one.\n */\n\ninterface ProductLineNode extends ProductLineValues {\n createdAt: string;\n updatedAt: string;\n products: ProductLineProductRef[];\n}\n\ninterface ProductLinesData {\n planmagnetProductLines: {\n items: ProductLineNode[];\n pageInfo: { hasNextPage: boolean };\n totalCount: number;\n };\n}\n\nexport function ProductsProductLinesPagePage() {\n const tr = useTr();\n const { workspaceId } = usePlanMagnet();\n const navigate = usePlanMagnetNavigate();\n const [showArchived, setShowArchived] = useState(false);\n const [search, setSearch] = useState('');\n const deferred = useDeferredValue(search.trim());\n // What the last archive/delete did — its card may already be gone from the list.\n const [notice, setNotice] = useState<string | null>(null);\n\n const { data, previousData, loading, error } = useQuery<ProductLinesData>(PRODUCT_LINES_PAGE, {\n variables: {\n workspaceId: workspaceId ?? '',\n filter: {\n // isActive omitted lists active and archived lines alike.\n ...(showArchived ? {} : { isActive: true }),\n ...(deferred ? { search: deferred } : {}),\n },\n },\n skip: !workspaceId,\n });\n // A new search or the archived toggle keeps the current rows (and the search box) on screen meanwhile.\n const list = (data ?? previousData)?.planmagnetProductLines;\n\n // Only before the first load: a refetch must not blank the page (it unmounts every component on it).\n if (loading && !list) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n );\n }\n\n if (error && !list) {\n return (\n <div className=\"p-6 text-destructive\">\n {tr(\n 'planmagnet.productLines.errors.loadPage',\n 'Failed to load product lines: {{message}}',\n {\n message: error.message,\n }\n )}\n </div>\n );\n }\n\n const lines = list?.items ?? [];\n const totalCount = list?.totalCount ?? 0;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex flex-wrap items-start justify-between gap-4\">\n <div>\n <h1 className=\"flex items-center gap-2 text-2xl font-semibold\">\n <Layers className=\"h-6 w-6\" />\n {tr('planmagnet.productLines.title', 'Product lines')}\n </h1>\n <p className=\"mt-1 text-sm text-muted-foreground\">\n {tr(\n 'planmagnet.productLines.subtitle',\n 'Group related products into lines. A product belongs to at most one line; the line never owns it.'\n )}\n </p>\n </div>\n <div className=\"flex flex-wrap items-center gap-2\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => navigate('/products/product-hierarchy-page')}\n data-testid=\"product-lines-view-hierarchy\"\n >\n <ListTree className=\"mr-1 h-4 w-4\" />\n {tr('planmagnet.productLines.actions.viewHierarchy', 'View hierarchy')}\n </Button>\n <Button\n size=\"sm\"\n variant={showArchived ? 'default' : 'outline'}\n aria-pressed={showArchived}\n onClick={() => setShowArchived((v) => !v)}\n data-testid=\"product-lines-toggle-archived\"\n >\n <Archive className=\"mr-1 h-4 w-4\" />\n {tr('planmagnet.productLines.actions.showArchived', 'Show archived')}\n </Button>\n <ProductLineFormDialog />\n </div>\n </div>\n\n <div className=\"flex flex-wrap items-center gap-3\">\n <Input\n aria-label={tr('planmagnet.productLines.search', 'Search product lines')}\n placeholder={tr(\n 'planmagnet.productLines.searchPlaceholder',\n 'Search by name or description…'\n )}\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"max-w-xs\"\n data-testid=\"product-lines-search\"\n />\n <p className=\"text-sm text-muted-foreground\" data-testid=\"product-lines-count\">\n {totalCount === 1\n ? tr('planmagnet.productLines.countOne', '1 product line')\n : tr('planmagnet.productLines.count', '{{count}} product lines', { count: totalCount })}\n </p>\n </div>\n\n {notice && (\n <div\n role=\"status\"\n className=\"flex items-start justify-between gap-3 rounded-md bg-muted p-3 text-sm\"\n data-testid=\"product-lines-notice\"\n >\n <span>{notice}</span>\n <button\n type=\"button\"\n className=\"shrink-0 text-xs text-muted-foreground hover:underline\"\n onClick={() => setNotice(null)}\n >\n {tr('planmagnet.productLines.dismiss', 'Dismiss')}\n </button>\n </div>\n )}\n\n {error && (\n <ErrorLine\n message={tr(\n 'planmagnet.productLines.errors.refresh',\n 'The list could not be refreshed: {{message}}',\n {\n message: error.message,\n }\n )}\n />\n )}\n\n {lines.length === 0 ? (\n <Card>\n <CardContent className=\"py-12 text-center text-sm text-muted-foreground\">\n {deferred\n ? tr('planmagnet.productLines.emptySearch', 'No product line matches your search.')\n : showArchived\n ? tr(\n 'planmagnet.productLines.emptyAll',\n 'No product lines yet. Create one to group related products.'\n )\n : tr(\n 'planmagnet.productLines.empty',\n 'No active product lines. Create one to group related products, or show archived lines.'\n )}\n </CardContent>\n </Card>\n ) : (\n <div className=\"grid gap-4 lg:grid-cols-2\">\n {lines.map((line) => (\n <Card key={line.id} data-testid=\"product-line-card\">\n <CardHeader className=\"space-y-3\">\n <div className=\"flex flex-wrap items-start justify-between gap-3\">\n <div className=\"min-w-0\">\n <CardTitle className=\"flex items-center gap-2 text-base\">\n <Layers className=\"h-4 w-4 shrink-0 text-primary\" />\n <span className=\"truncate\">{line.name}</span>\n {line.archivedAt && (\n <Badge variant=\"outline\" className=\"text-xs\">\n {tr('planmagnet.productLines.archived', 'Archived')}\n </Badge>\n )}\n </CardTitle>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n {tr('planmagnet.productLines.owner', 'Owner')}:{' '}\n {line.ownerId ? (\n <PersonName id={line.ownerId} />\n ) : (\n tr('planmagnet.productLines.fields.noOwner', 'No owner')\n )}\n </p>\n </div>\n <ProductLineActions\n line={line}\n productCount={line.products.length}\n onArchived={(name) =>\n setNotice(\n showArchived\n ? tr(\n 'planmagnet.productLines.notice.archived',\n '“{{name}}” is archived.',\n {\n name,\n }\n )\n : tr(\n 'planmagnet.productLines.notice.archivedHidden',\n '“{{name}}” is archived and hidden from this list — turn on “Show archived” to see it. Its products stay in it.',\n { name }\n )\n )\n }\n onDeleted={(name) =>\n setNotice(\n tr(\n 'planmagnet.productLines.notice.deleted',\n '“{{name}}” was deleted. Its products are kept and now show under “No product line”.',\n { name }\n )\n )\n }\n />\n </div>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <p className=\"text-sm text-muted-foreground\">\n {line.description ||\n tr('planmagnet.productLines.noDescription', 'No description.')}\n </p>\n {line.archivedAt && (\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n 'planmagnet.productLines.archivedNote',\n 'Archived: its products stay in it, but it takes no new ones.'\n )}\n </p>\n )}\n <ProductLineProducts line={line} products={line.products} />\n </CardContent>\n </Card>\n ))}\n </div>\n )}\n\n {list?.pageInfo.hasNextPage && (\n <p className=\"text-xs text-muted-foreground\">\n {tr(\n 'planmagnet.productLines.truncated',\n 'Showing the first {{shown}} of {{total}} product lines — search to narrow the list.',\n { shown: lines.length, total: totalCount }\n )}\n </p>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProductsProductsPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProductsProductsPagePage.tsx"],"names":[],"mappings":"AA+EA,wBAAgB,wBAAwB,4CAmMvC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProductsProductsPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProductsProductsPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge, Button } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Package, Plus, Archive, Loader2, Map, GitBranch, Star } from 'lucide-react';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { rowLinkProps, detailPath } from '../utils/rowNavigation';\nimport { PersonName } from '../people/People';\nimport { enumLabel } from '../controls/WorkItemControls';\n\n/**\n * The real \"Products\" list (BOFF-8045). Before this shipped, this page listed Roadmaps\n * relabelled as products (CAPABILITY_REGISTER: \"not-built\") — it now queries the Product\n * entity directly, which links roadmaps/releases/feature requests/OKR objectives rather\n * than being one.\n */\n\nconst LIST_PRODUCTS = gql`\n query GetProducts(\n $workspaceId: ID!\n $filter: PlanmagnetProductFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetProducts(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items {\n id\n name\n description\n vision\n lifecycleStage\n ownerId\n archivedAt\n northStar {\n name\n unit\n target\n current\n progressRatio\n }\n roadmaps {\n id\n }\n releases {\n id\n }\n featureRequests {\n id\n }\n updatedAt\n }\n totalCount\n }\n }\n`;\n\ninterface ProductNorthStar {\n name: string;\n unit: string;\n target: number;\n current: number;\n progressRatio: number | null;\n}\n\ninterface ProductListNode {\n id: string;\n name: string;\n description: string | null;\n vision: string;\n lifecycleStage: string;\n ownerId: string;\n archivedAt: string | null;\n northStar: ProductNorthStar | null;\n roadmaps: { id: string }[];\n releases: { id: string }[];\n featureRequests: { id: string }[];\n updatedAt: string;\n}\n\nexport function ProductsProductsPagePage() {\n const { workspaceId } = usePlanMagnet();\n const navigate = usePlanMagnetNavigate();\n const { t } = useI18n();\n const [showArchived, setShowArchived] = useState(false);\n\n const { data, loading, error } = useQuery<{\n planmagnetProducts: { items: ProductListNode[]; totalCount: number };\n }>(LIST_PRODUCTS, {\n variables: {\n workspaceId,\n filter: showArchived ? undefined : { isActive: true },\n pagination: { first: 50 },\n },\n skip: !workspaceId,\n });\n\n // Only before the first load: a refetch must not blank the page.\n if (loading && !data) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n );\n }\n\n if (error) {\n return (\n <div className=\"p-6 text-destructive\">\n {t('planmagnet.products.errorLoading', 'Failed to load products')}: {error.message}\n </div>\n );\n }\n\n const products = data?.planmagnetProducts?.items ?? [];\n const totalProducts = data?.planmagnetProducts?.totalCount ?? 0;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold flex items-center gap-2\">\n <Package className=\"h-6 w-6\" /> {t('planmagnet.products.title', 'Products')}\n </h1>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {t(\n 'planmagnet.products.subtitle',\n 'Strategy entities that link roadmaps, releases, feature requests and OKRs'\n )}\n </p>\n </div>\n <div className=\"flex items-center gap-2\">\n <Button\n size=\"sm\"\n variant={showArchived ? 'default' : 'outline'}\n onClick={() => setShowArchived((v) => !v)}\n data-testid=\"products-toggle-archived\"\n >\n <Archive className=\"h-4 w-4 mr-1\" />\n {showArchived\n ? t('planmagnet.products.actions.hideArchived', 'Hide archived')\n : t('planmagnet.products.actions.showArchived', 'Show archived')}\n </Button>\n <Button size=\"sm\" onClick={() => navigate('/products/create-product-page')}>\n <Plus className=\"h-4 w-4 mr-1\" />\n {t('planmagnet.products.actions.newProduct', 'New Product')}\n </Button>\n </div>\n </div>\n\n <div className=\"grid gap-4 md:grid-cols-3\">\n {[\n {\n label: t('planmagnet.products.metrics.totalProducts', 'Total Products'),\n val: totalProducts,\n icon: Package,\n color: 'text-blue-500',\n },\n {\n label: t('planmagnet.products.metrics.roadmaps', 'Linked roadmaps'),\n val: products.reduce((sum, p) => sum + p.roadmaps.length, 0),\n icon: Map,\n color: 'text-green-500',\n },\n {\n label: t('planmagnet.products.metrics.releases', 'Linked releases'),\n val: products.reduce((sum, p) => sum + p.releases.length, 0),\n icon: GitBranch,\n color: 'text-purple-500',\n },\n ].map((s) => (\n <Card key={s.label}>\n <CardContent className=\"pt-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm text-muted-foreground\">{s.label}</p>\n <p className=\"text-2xl font-bold\">{s.val}</p>\n </div>\n <s.icon className={`h-8 w-8 ${s.color} opacity-60`} />\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n\n {products.length === 0 ? (\n <Card>\n <CardContent className=\"py-12 text-center text-sm text-muted-foreground\">\n {t('planmagnet.products.empty', 'No products yet. Create one to get started.')}\n </CardContent>\n </Card>\n ) : (\n <div className=\"grid gap-4 md:grid-cols-2 lg:grid-cols-2\">\n {products.map((product) => (\n <Card\n key={product.id}\n {...rowLinkProps(\n () => navigate(detailPath('/products/product-detail-page', product.id)),\n product.name\n )}\n >\n <CardHeader>\n <div className=\"flex items-center justify-between gap-2\">\n <CardTitle className=\"text-base\">{product.name}</CardTitle>\n <div className=\"flex items-center gap-1 shrink-0\">\n {product.archivedAt && (\n <Badge variant=\"outline\" className=\"text-xs\">\n {t('planmagnet.products.shared.archived', 'Archived')}\n </Badge>\n )}\n <Badge variant=\"secondary\" className=\"text-xs capitalize\">\n {enumLabel(product.lifecycleStage)}\n </Badge>\n </div>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-sm text-muted-foreground line-clamp-2\">\n {product.vision || t('planmagnet.products.shared.noVision', 'No vision set')}\n </p>\n <div className=\"grid grid-cols-3 gap-2 text-center\">\n <div className=\"rounded border p-2\">\n <p className=\"text-lg font-bold\">{product.roadmaps.length}</p>\n <p className=\"text-xs text-muted-foreground\">\n {t('planmagnet.products.shared.roadmaps', 'Roadmaps')}\n </p>\n </div>\n <div className=\"rounded border p-2\">\n <p className=\"text-lg font-bold\">{product.releases.length}</p>\n <p className=\"text-xs text-muted-foreground\">\n {t('planmagnet.products.shared.releases', 'Releases')}\n </p>\n </div>\n <div className=\"rounded border p-2\">\n <p className=\"text-lg font-bold\">{product.featureRequests.length}</p>\n <p className=\"text-xs text-muted-foreground\">\n <Star className=\"inline h-3 w-3 mr-0.5\" />\n {/* PRM-01: these are feature REQUESTS (customer feedback), not product features.\n A new key, so a locale that translated the old one as \"Features\" cannot keep\n the old wording. */}\n {t('planmagnet.products.shared.featureRequests', 'Feature requests')}\n </p>\n </div>\n </div>\n {product.northStar && (\n <div className=\"rounded border p-2 text-xs\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-muted-foreground\">{product.northStar.name}</span>\n <span className=\"font-medium\">\n {product.northStar.current} / {product.northStar.target}{' '}\n {product.northStar.unit}\n {product.northStar.progressRatio != null\n ? ` (${Math.round(product.northStar.progressRatio * 100)}%)`\n : ''}\n </span>\n </div>\n </div>\n )}\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span>\n {t('planmagnet.products.shared.owner', 'Owner')}:{' '}\n <PersonName id={product.ownerId} />\n </span>\n <span>\n {t('planmagnet.products.shared.updated', 'Updated')}{' '}\n {new Date(product.updatedAt).toLocaleDateString()}\n </span>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProductsReleaseDetailPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProductsReleaseDetailPagePage.tsx"],"names":[],"mappings":"AAiEA,wBAAgB,6BAA6B,4CAyM5C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProductsReleaseDetailPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProductsReleaseDetailPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge } from '@burdenoff/fe-libs/ui';\nimport { Markdown } from '@burdenoff/fe-libs/shared/components';\nimport { GitBranch, Calendar, Clock, Server, Loader2 } from 'lucide-react';\nimport { usePlanMagnet } from '../providers/PlanMagnetProvider';\nimport { useParams } from 'react-router';\nimport { PersonName } from '../people/People';\nimport { ReleaseNotesCard } from '../releases/ReleaseNotesCard';\nimport { ReleaseHeaderActions } from '../controls/ReleaseControls';\nimport { ReleaseGatesCard } from '../releases/ReleaseGatesCard';\nimport { ReleaseReadinessCard } from '../releases/ReleaseReadinessCard';\nimport { ReleaseChecklistCard } from '../releases/ReleaseChecklistCard';\nimport { ReleaseWorkItemsCard } from '../releases/ReleaseWorkItemsCard';\nimport { SatisfactionSummaryCard } from '../satisfaction/SatisfactionSummaryCard';\n\nconst GET_RELEASE = gql`\n query GetRelease($id: ID!) {\n planmagnetRelease(id: $id) {\n id\n workspaceId\n projectId\n name\n description\n version\n status\n plannedDate\n releasedAt\n releaseNotes\n ownerId\n tags\n metadata\n createdAt\n updatedAt\n workItems {\n id\n title\n status\n type\n priority\n }\n }\n }\n`;\n\ninterface WorkItemSummary {\n id: string;\n title: string;\n status: string;\n type: string;\n priority: string;\n}\n\nconst statusColor: Record<string, string> = {\n DRAFT: 'bg-gray-100 text-gray-800',\n PLANNING: 'bg-yellow-100 text-yellow-800',\n IN_PROGRESS: 'bg-blue-100 text-blue-800',\n READY: 'bg-orange-100 text-orange-800',\n RELEASED: 'bg-green-100 text-green-800',\n CANCELLED: 'bg-red-100 text-red-800',\n ROLLED_BACK: 'bg-red-100 text-red-800',\n};\n\nexport function ProductsReleaseDetailPagePage() {\n const { workspaceId } = usePlanMagnet();\n const params = useParams<{ id: string }>();\n const releaseId = params.id ?? '';\n\n const {\n data,\n loading,\n error,\n } = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useQuery<Record<string, any>>(GET_RELEASE, {\n variables: { id: releaseId },\n skip: !releaseId,\n });\n\n // Only before the first load: a refetch must not blank the page (it\n\n // unmounts every component on it and loses their state).\n\n if (loading && !data) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-destructive\">Failed to load release: {error.message}</div>;\n }\n\n const release = data?.planmagnetRelease;\n if (!release) return <div className=\"p-6 text-muted-foreground\">Release not found.</div>;\n\n const workItems: WorkItemSummary[] = release.workItems ?? [];\n // The release notes' classification (svc release-notes.ts): EPIC and STORY are features, BUG a fix, the rest other\n // — so these tiles agree with the notes on the same page and add up to the total (BOFF-7988).\n const featureItems = workItems.filter((w) => w.type === 'EPIC' || w.type === 'STORY');\n const bugItems = workItems.filter((w) => w.type === 'BUG');\n const otherItems = workItems.length - featureItems.length - bugItems.length;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <div className=\"flex items-center gap-2\">\n <GitBranch className=\"h-5 w-5 text-primary\" />\n <h1 className=\"text-2xl font-semibold\">{release.version}</h1>\n <span\n className={`text-xs px-2 py-0.5 rounded-full capitalize ${statusColor[release.status] ?? 'bg-gray-100'}`}\n >\n {release.status.toLowerCase().replace('_', ' ')}\n </span>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">{release.name}</p>\n </div>\n {/* Status, Edit and Delete (BOFF-7952): nothing could release, edit or delete a release. */}\n <ReleaseHeaderActions\n releaseId={release.id}\n version={release.version}\n status={release.status}\n />\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2 space-y-6\">\n <ReleaseReadinessCard\n releaseId={release.id}\n projectId={release.projectId || null}\n releaseStatus={release.status}\n plannedDate={release.plannedDate ?? null}\n />\n {/* PRM-19: the team's readiness criteria; a required one still open blocks releasing. */}\n <ReleaseChecklistCard releaseId={release.id} projectId={release.projectId || null} />\n <Card>\n <CardHeader>\n <CardTitle>Overview</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"text-sm prose prose-sm dark:prose-invert max-w-none\">\n {release.description ? (\n <Markdown>{release.description}</Markdown>\n ) : (\n <p>No description provided.</p>\n )}\n </div>\n <div className=\"grid grid-cols-4 gap-4\">\n <div className=\"text-center p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-semibold mt-1\">{featureItems.length}</p>\n <p className=\"text-xs text-muted-foreground\">Features</p>\n </div>\n <div className=\"text-center p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-semibold mt-1\">{bugItems.length}</p>\n <p className=\"text-xs text-muted-foreground\">Bug Fixes</p>\n </div>\n <div className=\"text-center p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-semibold mt-1\">{otherItems}</p>\n <p className=\"text-xs text-muted-foreground\">Other</p>\n </div>\n <div className=\"text-center p-3 bg-muted rounded-md\">\n <p className=\"text-lg font-semibold mt-1\">{workItems.length}</p>\n <p className=\"text-xs text-muted-foreground\">Total Items</p>\n </div>\n </div>\n </CardContent>\n </Card>\n\n <ReleaseGatesCard\n releaseId={release.id}\n projectId={release.projectId ?? null}\n releaseStatus={release.status}\n />\n <ReleaseNotesCard releaseId={release.id} notes={release.releaseNotes ?? null} />\n\n <ReleaseWorkItemsCard\n releaseId={release.id}\n projectId={release.projectId || null}\n items={workItems}\n />\n </div>\n\n <div className=\"space-y-6\">\n {/* ANR-21: CSAT and NPS from responses about this release (its own query). */}\n <SatisfactionSummaryCard scope={{ releaseId: release.id }} />\n <Card>\n <CardHeader>\n <CardTitle>Timeline</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3 text-sm\">\n <div className=\"flex items-center gap-2\">\n <Calendar className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-muted-foreground\">Planned:</span>\n <span className=\"font-medium\">\n {release.plannedDate\n ? new Date(release.plannedDate).toLocaleDateString()\n : 'Not set'}\n </span>\n </div>\n {release.releasedAt && (\n <div className=\"flex items-center gap-2\">\n <Clock className=\"h-4 w-4 text-green-500\" />\n <span className=\"text-muted-foreground\">Released:</span>\n <span className=\"font-medium\">\n {new Date(release.releasedAt).toLocaleDateString()}\n </span>\n </div>\n )}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Version</span>\n <span className=\"font-medium\">{release.version}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Status</span>\n <Badge variant=\"outline\" className=\"text-xs capitalize\">\n {release.status.toLowerCase().replace('_', ' ')}\n </Badge>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Owner</span>\n <span>\n <PersonName id={release.ownerId} />\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Created</span>\n <span>{new Date(release.createdAt).toLocaleDateString()}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Updated</span>\n <span>{new Date(release.updatedAt).toLocaleDateString()}</span>\n </div>\n </CardContent>\n </Card>\n\n {release.tags?.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Tags</CardTitle>\n </CardHeader>\n <CardContent className=\"flex flex-wrap gap-1\">\n {release.tags.map((tag: string) => (\n <Badge key={tag} variant=\"outline\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </CardContent>\n </Card>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProductsReleasesPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProductsReleasesPagePage.tsx"],"names":[],"mappings":"AA6EA,wBAAgB,wBAAwB,4CAsIvC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProductsReleasesPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProductsReleasesPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge, Button } from '@burdenoff/fe-libs/ui';\nimport { Calendar, Package, Loader2 } from 'lucide-react';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { rowLinkProps, detailPath } from '../utils/rowNavigation';\nimport { PersonName } from '../people/People';\nimport { NewReleaseDialog } from '../create/CreateDialogs';\n\nconst LIST_RELEASES = gql`\n query ListReleases(\n $workspaceId: ID!\n $filter: PlanmagnetReleaseFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetReleases(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items {\n id\n workspaceId\n projectId\n name\n description\n version\n status\n plannedDate\n releasedAt\n releaseNotes\n ownerId\n tags\n createdAt\n updatedAt\n }\n totalCount\n }\n }\n`;\n\ninterface ReleaseNode {\n id: string;\n name: string;\n description: string | null;\n version: string;\n status: string;\n plannedDate: string | null;\n releasedAt: string | null;\n releaseNotes: string | null;\n ownerId: string;\n tags: string[];\n createdAt: string;\n updatedAt: string;\n}\n\n// Every ReleaseStatus: STAGING and ROLLED_BACK had no tab (BOFF-7985).\nconst statusTabs = [\n 'all',\n 'DRAFT',\n 'PLANNING',\n 'IN_PROGRESS',\n 'READY',\n 'STAGING',\n 'RELEASED',\n 'ROLLED_BACK',\n 'CANCELLED',\n] as const;\nconst statusColor: Record<string, string> = {\n DRAFT: 'bg-gray-100 text-gray-800',\n PLANNING: 'bg-yellow-100 text-yellow-800',\n IN_PROGRESS: 'bg-blue-100 text-blue-800',\n READY: 'bg-orange-100 text-orange-800',\n RELEASED: 'bg-green-100 text-green-800',\n CANCELLED: 'bg-red-100 text-red-800',\n ROLLED_BACK: 'bg-red-100 text-red-800',\n};\n\nexport function ProductsReleasesPagePage() {\n const { workspaceId } = usePlanMagnet();\n const navigate = usePlanMagnetNavigate();\n const [activeTab, setActiveTab] = useState<string>('all');\n\n const {\n data,\n loading,\n error,\n } = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useQuery<Record<string, any>>(LIST_RELEASES, {\n variables: {\n workspaceId,\n filter: activeTab !== 'all' ? { status: activeTab } : undefined,\n pagination: { first: 50 },\n },\n skip: !workspaceId,\n });\n\n // Only before the first load: a refetch after a create must not blank the page.\n if (loading && !data) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-destructive\">Failed to load releases: {error.message}</div>;\n }\n\n const releases: ReleaseNode[] = data?.planmagnetReleases?.items ?? [];\n const totalCount = data?.planmagnetReleases?.totalCount ?? 0;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Releases</h1>\n {/* Under a tab, the count is of what matches it (BOFF-7990). */}\n <p className=\"text-sm text-muted-foreground\">\n {activeTab === 'all'\n ? `${totalCount} releases across all products`\n : `${totalCount} ${activeTab.toLowerCase().replace('_', ' ')} match`}\n </p>\n </div>\n <NewReleaseDialog\n onCreated={(id) => navigate(detailPath('/products/release-detail-page', id))}\n />\n </div>\n\n <div className=\"flex gap-1 border-b pb-1\">\n {statusTabs.map((tab) => (\n <button\n key={tab}\n onClick={() => setActiveTab(tab)}\n className={`px-3 py-1.5 text-sm rounded-md capitalize ${activeTab === tab ? 'bg-primary text-primary-foreground' : 'text-muted-foreground hover:bg-muted'}`}\n >\n {tab === 'all' ? 'All' : tab.toLowerCase().replace('_', ' ')}\n </button>\n ))}\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {releases.map((release) => (\n <Card\n key={release.id}\n {...rowLinkProps(\n () => navigate(detailPath('/products/release-detail-page', release.id)),\n release.name\n )}\n >\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-lg font-semibold\">{release.version}</span>\n </div>\n <span\n className={`text-xs px-2 py-0.5 rounded-full capitalize ${statusColor[release.status] ?? 'bg-gray-100'}`}\n >\n {release.status.toLowerCase().replace('_', ' ')}\n </span>\n </div>\n <CardTitle className=\"text-sm font-medium\">{release.name}</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-sm text-muted-foreground\">\n {release.description ?? 'No description'}\n </p>\n\n <div className=\"flex items-center gap-4 text-sm\">\n <div className=\"flex items-center gap-1 text-muted-foreground\">\n <Package className=\"h-3.5 w-3.5\" />\n Owner: <PersonName id={release.ownerId} />\n </div>\n <div className=\"flex items-center gap-1 text-muted-foreground\">\n <Calendar className=\"h-3.5 w-3.5\" />\n {release.plannedDate\n ? new Date(release.plannedDate).toLocaleDateString()\n : 'No date'}\n </div>\n </div>\n\n {release.tags.length > 0 && (\n <div className=\"flex gap-1 flex-wrap\">\n {release.tags.map((tag) => (\n <Badge key={tag} variant=\"outline\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </div>\n )}\n\n {release.releaseNotes && (\n <div className=\"border-t pt-2\">\n <p className=\"text-xs font-medium text-muted-foreground mb-1\">\n Release Notes Preview\n </p>\n <p className=\"text-xs text-muted-foreground line-clamp-3\">\n {release.releaseNotes}\n </p>\n </div>\n )}\n </CardContent>\n </Card>\n ))}\n </div>\n {releases.length === 0 && (\n <p className=\"text-center text-muted-foreground py-8\">No releases match this filter.</p>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProductsRoadmapAnalyticsPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.tsx"],"names":[],"mappings":"AAoDA,wBAAgB,gCAAgC,4CAuY/C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProductsRoadmapAnalyticsPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Button, Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { TrendingUp, Target, CheckCircle, AlertTriangle, BarChart3, Loader2 } from 'lucide-react';\nimport { useParams } from 'react-router';\nimport { useFeatureCounts } from '../hooks/useCounts';\nimport { planningFocusLabel } from '../roadmaps/planningFocus';\nimport { usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { useLiveRefresh, type LiveEvent } from '../hooks/useLiveRefresh';\nimport { LiveStatus } from '../controls/LiveStatus';\n\n// PRM-11: this page's one query — re-read on any roadmap- or item-level event, same shape as the detail page's\n// and the Now/Next/Later board's own `useLiveRefresh` calls (each page/component is its own self-contained\n// subscriber, over its own named query).\nconst ROADMAP_ANALYTICS_QUERIES = ['GetRoadmapAnalytics'];\n\nconst GET_ROADMAP_ANALYTICS = gql`\n query GetRoadmapAnalytics($id: ID!) {\n planmagnetRoadmap(id: $id) {\n id\n name\n description\n type\n planningFocus\n isPublic\n ownerId\n createdAt\n updatedAt\n items {\n id\n title\n status\n startDate\n endDate\n swimlane\n }\n }\n }\n`;\n\ninterface RoadmapItemNode {\n id: string;\n title: string;\n status: string;\n startDate: string | null;\n endDate: string | null;\n swimlane: string | null;\n}\n\nexport function ProductsRoadmapAnalyticsPagePage() {\n const params = useParams<{ id: string }>();\n const roadmapId = params.id ?? '';\n const navigate = usePlanMagnetNavigate();\n\n const {\n data,\n loading,\n error,\n } = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useQuery<Record<string, any>>(GET_ROADMAP_ANALYTICS, {\n variables: { id: roadmapId },\n skip: !roadmapId,\n });\n\n const featureCounts = useFeatureCounts();\n\n // PRM-11: once a DELETED event names the roadmap itself, show the clear \"This roadmap was deleted\" state below\n // instead of leaving the charts on stale data — see the same hook/comment on `ProductsRoadmapDetailPagePage`.\n const [roadmapDeleted, setRoadmapDeleted] = useState(false);\n const roadmapLive = useLiveRefresh({\n kind: 'roadmap',\n roadmapId,\n queries: ROADMAP_ANALYTICS_QUERIES,\n onEvent: (event: LiveEvent) => {\n if (event.kind === 'DELETED' && event.id === roadmapId) setRoadmapDeleted(true);\n },\n });\n\n if (roadmapDeleted) {\n return (\n <div className=\"space-y-3 p-6\" data-testid=\"roadmap-deleted\">\n <p className=\"text-sm text-muted-foreground\">This roadmap was deleted.</p>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => navigate('/products/roadmaps-page')}>\n Back to roadmaps\n </Button>\n </div>\n );\n }\n\n // Only before the first load: a refetch must not blank the page (it\n\n // unmounts every component on it and loses their state).\n\n if (loading && !data) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-destructive\">Failed to load analytics: {error.message}</div>;\n }\n\n const roadmap = data?.planmagnetRoadmap;\n if (!roadmap) {\n return (\n <div className=\"space-y-3 p-6\" data-testid=\"roadmap-not-found\">\n <p className=\"text-sm text-muted-foreground\">\n This roadmap does not exist in this workspace, or it was deleted.\n </p>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => navigate('/products/roadmaps-page')}>\n Back to roadmaps\n </Button>\n </div>\n );\n }\n\n const items: RoadmapItemNode[] = roadmap.items ?? [];\n\n // BOFF-7994: cancelled items no longer need doing — out of the progress denominator and out of \"overdue\".\n const isDone = (i: RoadmapItemNode) => i.status === 'COMPLETED' || i.status === 'DONE';\n const liveItems = items.filter((i) => i.status !== 'CANCELLED');\n const completedItems = liveItems.filter(isDone);\n const progress =\n liveItems.length > 0 ? Math.round((completedItems.length / liveItems.length) * 100) : 0;\n\n // Items by status\n const itemsByStatus: Record<string, number> = {};\n for (const item of items) {\n itemsByStatus[item.status] = (itemsByStatus[item.status] || 0) + 1;\n }\n\n // Feature request status across the WORKSPACE, from server counts (it was the 100 newest, counted in the browser).\n const featuresByStatus: Record<string, number> = featureCounts\n ? Object.fromEntries(Object.entries(featureCounts.byStatus).filter(([, n]) => n > 0))\n : {};\n\n // Items by swimlane\n const itemsBySwimlane: Record<string, number> = {};\n for (const item of items) {\n const lane = item.swimlane ?? 'Uncategorized';\n itemsBySwimlane[lane] = (itemsBySwimlane[lane] || 0) + 1;\n }\n\n // Items with overdue end dates\n const now = new Date();\n const overdueItems = liveItems.filter(\n (i) => i.endDate && new Date(i.endDate) < now && !isDone(i)\n );\n\n // \"On track\" replaces an undefined health score (0.7 x progress + 30 x not-overdue share, so an empty roadmap\n // scored 30/100): the share of OPEN items that are neither overdue nor flagged at risk or delayed.\n const openItems = liveItems.filter((i) => !isDone(i));\n const onTrack =\n openItems.length > 0\n ? Math.round(\n (openItems.filter(\n (i) => !overdueItems.includes(i) && i.status !== 'AT_RISK' && i.status !== 'DELAYED'\n ).length /\n openItems.length) *\n 100\n )\n : null;\n\n // Items due per month, keyed by YYYY-MM and sorted by DATE, the latest six kept (they were in storage order,\n // and the last six inserted were kept — out of order, recent months dropped).\n const velocityMap: Record<string, { planned: number; completed: number }> = {};\n for (const item of liveItems) {\n if (item.endDate) {\n const key = item.endDate.slice(0, 7);\n if (!velocityMap[key]) velocityMap[key] = { planned: 0, completed: 0 };\n velocityMap[key].planned += 1;\n if (isDone(item)) velocityMap[key].completed += 1;\n }\n }\n const velocityData = Object.entries(velocityMap)\n .sort(([a], [b]) => a.localeCompare(b))\n .slice(-6)\n .map(([key, vals]) => ({\n month: new Date(`${key}-01T00:00:00Z`).toLocaleDateString('en-US', {\n month: 'short',\n year: '2-digit',\n timeZone: 'UTC',\n }),\n ...vals,\n }));\n const maxVal = Math.max(...velocityData.map((d) => Math.max(d.planned, d.completed)), 1);\n\n return (\n <div className=\"space-y-6 p-6\">\n <div>\n <div className=\"flex items-center gap-2\">\n <h1 className=\"text-2xl font-semibold\">Roadmap Analytics</h1>\n <LiveStatus mode={roadmapLive.mode} />\n </div>\n <p className=\"text-sm text-muted-foreground\">\n {roadmap.name} - {planningFocusLabel(roadmap.planningFocus)}\n </p>\n </div>\n\n <div className=\"grid grid-cols-2 md:grid-cols-4 gap-4\">\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-muted-foreground text-xs\">\n <Target className=\"h-4 w-4\" />\n Open items on track\n </div>\n <p className=\"text-2xl font-bold mt-1\">{onTrack === null ? '—' : `${onTrack}%`}</p>\n <div className=\"w-full h-2 rounded-full bg-muted mt-2 overflow-hidden\">\n <div\n className=\"h-full rounded-full bg-success\"\n style={{ width: `${onTrack ?? 0}%` }}\n />\n </div>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-muted-foreground text-xs\">\n <TrendingUp className=\"h-4 w-4\" />\n Progress\n </div>\n <p className=\"text-2xl font-bold mt-1\">{progress}%</p>\n <p className=\"text-xs text-muted-foreground mt-1\">{items.length} items total</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-muted-foreground text-xs\">\n <CheckCircle className=\"h-4 w-4\" />\n Completed\n </div>\n <p className=\"text-2xl font-bold mt-1\">{completedItems.length}</p>\n <p className=\"text-xs text-muted-foreground mt-1\">items completed</p>\n </CardContent>\n </Card>\n <Card>\n <CardContent className=\"pt-4\">\n <div className=\"flex items-center gap-2 text-muted-foreground text-xs\">\n <AlertTriangle className=\"h-4 w-4\" />\n Overdue\n </div>\n <p className=\"text-2xl font-bold mt-1\">{overdueItems.length}</p>\n <p className=\"text-xs text-muted-foreground mt-1\">items past end date</p>\n </CardContent>\n </Card>\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <BarChart3 className=\"h-4 w-4\" />\n Item Velocity\n </CardTitle>\n </CardHeader>\n <CardContent>\n {velocityData.length === 0 ? (\n <p className=\"text-sm text-muted-foreground text-center py-8\">\n No timeline data available\n </p>\n ) : (\n <div className=\"flex items-end gap-2 h-48\">\n {velocityData.map((d) => (\n <div key={d.month} className=\"flex-1 flex flex-col items-center gap-1\">\n <div className=\"flex gap-0.5 items-end w-full justify-center h-40\">\n <div\n className=\"w-3 bg-primary/30 rounded-t\"\n style={{ height: `${(d.planned / maxVal) * 100}%` }}\n title={`Planned: ${d.planned}`}\n />\n <div\n className=\"w-3 bg-primary rounded-t\"\n style={{ height: `${(d.completed / maxVal) * 100}%` }}\n title={`Completed: ${d.completed}`}\n />\n </div>\n <span className=\"text-xs text-muted-foreground\">{d.month}</span>\n </div>\n ))}\n </div>\n )}\n <div className=\"flex gap-4 justify-center mt-3 text-xs\">\n <span className=\"flex items-center gap-1\">\n <span className=\"h-2 w-2 rounded bg-primary/30\" />\n Planned\n </span>\n <span className=\"flex items-center gap-1\">\n <span className=\"h-2 w-2 rounded bg-primary\" />\n Completed\n </span>\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Item Status Breakdown</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {Object.entries(itemsByStatus).map(([status, count]) => {\n const total = items.length;\n const pct = total > 0 ? Math.round((count / total) * 100) : 0;\n const colors: Record<string, string> = {\n TODO: 'bg-gray-400',\n PLANNED: 'bg-yellow-400',\n IN_PROGRESS: 'bg-blue-400',\n BLOCKED: 'bg-red-400',\n DONE: 'bg-green-400',\n COMPLETED: 'bg-green-400',\n };\n return (\n <div key={status}>\n <div className=\"flex justify-between text-sm mb-1\">\n <span className=\"capitalize\">{status.toLowerCase().replace('_', ' ')}</span>\n <span className=\"font-medium\">\n {count} ({pct}%)\n </span>\n </div>\n <div className=\"w-full h-2 rounded-full bg-muted overflow-hidden\">\n <div\n className={`h-full rounded-full ${colors[status] ?? 'bg-gray-300'}`}\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n );\n })}\n </CardContent>\n </Card>\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-2 gap-6\">\n <Card>\n <CardHeader>\n <CardTitle>Feature request status (workspace)</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {Object.entries(featuresByStatus).length === 0 ? (\n <p className=\"text-sm text-muted-foreground text-center py-4\">\n No feature request data\n </p>\n ) : (\n Object.entries(featuresByStatus).map(([status, count]) => {\n const total = featureCounts?.all ?? 0;\n const pct = total > 0 ? Math.round((count / total) * 100) : 0;\n const colors: Record<string, string> = {\n SUBMITTED: 'bg-gray-400',\n UNDER_REVIEW: 'bg-yellow-400',\n PLANNED: 'bg-blue-400',\n IN_PROGRESS: 'bg-purple-400',\n COMPLETED: 'bg-green-400',\n DECLINED: 'bg-red-400',\n };\n return (\n <div key={status}>\n <div className=\"flex justify-between text-sm mb-1\">\n <span className=\"capitalize\">{status.toLowerCase().replace('_', ' ')}</span>\n <span className=\"font-medium\">\n {count} ({pct}%)\n </span>\n </div>\n <div className=\"w-full h-2 rounded-full bg-muted overflow-hidden\">\n <div\n className={`h-full rounded-full ${colors[status] ?? 'bg-gray-300'}`}\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n );\n })\n )}\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Swimlane Distribution</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {Object.entries(itemsBySwimlane).length === 0 ? (\n <p className=\"text-sm text-muted-foreground text-center py-4\">No swimlane data</p>\n ) : (\n Object.entries(itemsBySwimlane).map(([lane, count]) => {\n const total = items.length;\n const pct = total > 0 ? Math.round((count / total) * 100) : 0;\n return (\n <div key={lane}>\n <div className=\"flex justify-between text-sm mb-1\">\n <span>{lane}</span>\n <span className=\"font-medium\">\n {count} ({pct}%)\n </span>\n </div>\n <div className=\"w-full h-2 rounded-full bg-muted overflow-hidden\">\n <div\n className=\"h-full rounded-full bg-primary\"\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n );\n })\n )}\n </CardContent>\n </Card>\n </div>\n\n {overdueItems.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Overdue Items</CardTitle>\n </CardHeader>\n <CardContent>\n <div className=\"space-y-3\">\n {overdueItems.map((item) => (\n <div\n key={item.id}\n className=\"flex items-center justify-between border rounded-md p-3\"\n >\n <div>\n <p className=\"text-sm font-medium\">{item.title}</p>\n <p className=\"text-xs text-muted-foreground\">\n Due: {item.endDate ? new Date(item.endDate).toLocaleDateString() : 'N/A'}\n </p>\n </div>\n <span className=\"text-xs px-2 py-0.5 rounded-full bg-red-100 text-red-800 capitalize\">\n {item.status.toLowerCase().replace('_', ' ')}\n </span>\n </div>\n ))}\n </div>\n </CardContent>\n </Card>\n )}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAiBA,IAAM,IAA4B,CAAC,sBAAsB,EAEnD,IAAwB,CAAG;;;;;;;;;;;;;;;;;;;;;;;AAiCjC,SAAgB,IAAmC;CAEjD,IAAM,IADS,GAA2B,CACjB,MAAM,IACzB,IAAW,GAAuB,EAElC,EACJ,SACA,YACA,aAGA,EAA8B,GAAuB;EACnD,WAAW,EAAE,IAAI,GAAW;EAC5B,MAAM,CAAC;EACR,CAAC,EAEE,IAAgB,GAAkB,EAIlC,CAAC,GAAgB,KAAqB,EAAS,GAAM,EACrD,IAAc,EAAe;EACjC,MAAM;EACN;EACA,SAAS;EACT,UAAU,MAAqB;AAC7B,GAAI,EAAM,SAAS,aAAa,EAAM,OAAO,KAAW,EAAkB,GAAK;;EAElF,CAAC;AAEF,KAAI,EACF,QACE,kBAAC,OAAD;EAAK,WAAU;EAAgB,eAAY;YAA3C,CACE,kBAAC,KAAD;GAAG,WAAU;aAAgC;GAA6B,CAAA,EAC1E,kBAAC,GAAD;GAAQ,MAAK;GAAK,SAAQ;GAAQ,eAAe,EAAS,0BAA0B;aAAE;GAE7E,CAAA,CACL;;AAQV,KAAI,KAAW,CAAC,EACd,QACE,kBAAC,OAAD;EAAK,WAAU;YACb,kBAAC,GAAD,EAAS,WAAU,8CAA+C,CAAA;EAC9D,CAAA;AAIV,KAAI,EACF,QAAO,kBAAC,OAAD;EAAK,WAAU;YAAf,CAAsC,8BAA2B,EAAM,QAAc;;CAG9F,IAAM,IAAU,GAAM;AACtB,KAAI,CAAC,EACH,QACE,kBAAC,OAAD;EAAK,WAAU;EAAgB,eAAY;YAA3C,CACE,kBAAC,KAAD;GAAG,WAAU;aAAgC;GAEzC,CAAA,EACJ,kBAAC,GAAD;GAAQ,MAAK;GAAK,SAAQ;GAAQ,eAAe,EAAS,0BAA0B;aAAE;GAE7E,CAAA,CACL;;CAIV,IAAM,IAA2B,EAAQ,SAAS,EAAE,EAG9C,KAAU,MAAuB,EAAE,WAAW,eAAe,EAAE,WAAW,QAC1E,IAAY,EAAM,QAAQ,MAAM,EAAE,WAAW,YAAY,EACzD,IAAiB,EAAU,OAAO,EAAO,EACzC,IACJ,EAAU,SAAS,IAAI,KAAK,MAAO,EAAe,SAAS,EAAU,SAAU,IAAI,GAAG,GAGlF,IAAwC,EAAE;AAChD,MAAK,IAAM,KAAQ,EACjB,GAAc,EAAK,WAAW,EAAc,EAAK,WAAW,KAAK;CAInE,IAAM,IAA2C,IAC7C,OAAO,YAAY,OAAO,QAAQ,EAAc,SAAS,CAAC,QAAQ,GAAG,OAAO,IAAI,EAAE,CAAC,GACnF,EAAE,EAGA,IAA0C,EAAE;AAClD,MAAK,IAAM,KAAQ,GAAO;EACxB,IAAM,IAAO,EAAK,YAAY;AAC9B,IAAgB,MAAS,EAAgB,MAAS,KAAK;;CAIzD,IAAM,oBAAM,IAAI,MAAM,EAChB,IAAe,EAAU,QAC5B,MAAM,EAAE,WAAW,IAAI,KAAK,EAAE,QAAQ,GAAG,KAAO,CAAC,EAAO,EAAE,CAC5D,EAIK,IAAY,EAAU,QAAQ,MAAM,CAAC,EAAO,EAAE,CAAC,EAC/C,IACJ,EAAU,SAAS,IACf,KAAK,MACF,EAAU,QACR,MAAM,CAAC,EAAa,SAAS,EAAE,IAAI,EAAE,WAAW,aAAa,EAAE,WAAW,UAC5E,CAAC,SACA,EAAU,SACV,IACH,GACD,MAIA,IAAsE,EAAE;AAC9E,MAAK,IAAM,KAAQ,EACjB,KAAI,EAAK,SAAS;EAChB,IAAM,IAAM,EAAK,QAAQ,MAAM,GAAG,EAAE;AAGpC,EAFK,EAAY,OAAM,EAAY,KAAO;GAAE,SAAS;GAAG,WAAW;GAAG,GACtE,EAAY,GAAK,WAAW,GACxB,EAAO,EAAK,KAAE,EAAY,GAAK,aAAa;;CAGpD,IAAM,IAAe,OAAO,QAAQ,EAAY,CAC7C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC,CACtC,MAAM,GAAG,CACT,KAAK,CAAC,GAAK,QAAW;EACrB,wBAAO,IAAI,KAAK,GAAG,EAAI,eAAe,EAAC,mBAAmB,SAAS;GACjE,OAAO;GACP,MAAM;GACN,UAAU;GACX,CAAC;EACF,GAAG;EACJ,EAAE,EACC,IAAS,KAAK,IAAI,GAAG,EAAa,KAAK,MAAM,KAAK,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,EAAE;AAExF,QACE,kBAAC,OAAD;EAAK,WAAU;YAAf;GACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,MAAD;KAAI,WAAU;eAAyB;KAAsB,CAAA,EAC7D,kBAAC,GAAD,EAAY,MAAM,EAAY,MAAQ,CAAA,CAClC;OACN,kBAAC,KAAD;IAAG,WAAU;cAAb;KACG,EAAQ;KAAK;KAAI,EAAmB,EAAQ,cAAc;KACzD;MACA,EAAA,CAAA;GAEN,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAa,WAAU;gBAAvB;OACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD,EAAQ,WAAU,WAAY,CAAA,EAAA,sBAE1B;;OACN,kBAAC,KAAD;QAAG,WAAU;kBAA2B,MAAY,OAAO,MAAM,GAAG,EAAQ;QAAO,CAAA;OACnF,kBAAC,OAAD;QAAK,WAAU;kBACb,kBAAC,OAAD;SACE,WAAU;SACV,OAAO,EAAE,OAAO,GAAG,KAAW,EAAE,IAAI;SACpC,CAAA;QACE,CAAA;OACM;SACT,CAAA;KACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAa,WAAU;gBAAvB;OACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD,EAAY,WAAU,WAAY,CAAA,EAAA,WAE9B;;OACN,kBAAC,KAAD;QAAG,WAAU;kBAAb,CAAwC,GAAS,IAAK;;OACtD,kBAAC,KAAD;QAAG,WAAU;kBAAb,CAAmD,EAAM,QAAO,eAAgB;;OACpE;SACT,CAAA;KACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAa,WAAU;gBAAvB;OACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD,EAAa,WAAU,WAAY,CAAA,EAAA,YAE/B;;OACN,kBAAC,KAAD;QAAG,WAAU;kBAA2B,EAAe;QAAW,CAAA;OAClE,kBAAC,KAAD;QAAG,WAAU;kBAAqC;QAAmB,CAAA;OACzD;SACT,CAAA;KACP,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;MAAa,WAAU;gBAAvB;OACE,kBAAC,OAAD;QAAK,WAAU;kBAAf,CACE,kBAAC,GAAD,EAAe,WAAU,WAAY,CAAA,EAAA,UAEjC;;OACN,kBAAC,KAAD;QAAG,WAAU;kBAA2B,EAAa;QAAW,CAAA;OAChE,kBAAC,KAAD;QAAG,WAAU;kBAAqC;QAAuB,CAAA;OAC7D;SACT,CAAA;KACH;;GAEN,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD;KAAW,WAAU;eAArB,CACE,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA,EAAA,gBAEvB;QACD,CAAA,EACb,kBAAC,GAAD,EAAA,UAAA,CACG,EAAa,WAAW,IACvB,kBAAC,KAAD;KAAG,WAAU;eAAiD;KAE1D,CAAA,GAEJ,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAa,KAAK,MACjB,kBAAC,OAAD;MAAmB,WAAU;gBAA7B,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,OAAD;QACE,WAAU;QACV,OAAO,EAAE,QAAQ,GAAI,EAAE,UAAU,IAAU,IAAI,IAAI;QACnD,OAAO,YAAY,EAAE;QACrB,CAAA,EACF,kBAAC,OAAD;QACE,WAAU;QACV,OAAO,EAAE,QAAQ,GAAI,EAAE,YAAY,IAAU,IAAI,IAAI;QACrD,OAAO,cAAc,EAAE;QACvB,CAAA,CACE;UACN,kBAAC,QAAD;OAAM,WAAU;iBAAiC,EAAE;OAAa,CAAA,CAC5D;QAdI,EAAE,MAcN,CACN;KACE,CAAA,EAER,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,QAAD;MAAM,WAAU;gBAAhB,CACE,kBAAC,QAAD,EAAM,WAAU,iCAAkC,CAAA,EAAA,UAE7C;SACP,kBAAC,QAAD;MAAM,WAAU;gBAAhB,CACE,kBAAC,QAAD,EAAM,WAAU,8BAA+B,CAAA,EAAA,YAE1C;QACH;OACM,EAAA,CAAA,CACT,EAAA,CAAA,EAEP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,yBAAiC,CAAA,EACjC,CAAA,EACb,kBAAC,GAAD;KAAa,WAAU;eACpB,OAAO,QAAQ,EAAc,CAAC,KAAK,CAAC,GAAQ,OAAW;MACtD,IAAM,IAAQ,EAAM,QACd,IAAM,IAAQ,IAAI,KAAK,MAAO,IAAQ,IAAS,IAAI,GAAG;AAS5D,aACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAc,EAAO,aAAa,CAAC,QAAQ,KAAK,IAAI;QAAQ,CAAA,EAC5E,kBAAC,QAAD;QAAM,WAAU;kBAAhB;SACG;SAAM;SAAG;SAAI;SACT;UACH;UACN,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,OAAD;QACE,WAAW,uBAlBoB;SACrC,MAAM;SACN,SAAS;SACT,aAAa;SACb,SAAS;SACT,MAAM;SACN,WAAW;SACZ,CAWgD,MAAW;QACpD,OAAO,EAAE,OAAO,GAAG,EAAI,IAAI;QAC3B,CAAA;OACE,CAAA,CACF,EAAA,EAbI,EAaJ;OAER;KACU,CAAA,CACT,EAAA,CAAA,CACH;;GAEN,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,sCAA8C,CAAA,EAC9C,CAAA,EACb,kBAAC,GAAD;KAAa,WAAU;eACpB,OAAO,QAAQ,EAAiB,CAAC,WAAW,IAC3C,kBAAC,KAAD;MAAG,WAAU;gBAAiD;MAE1D,CAAA,GAEJ,OAAO,QAAQ,EAAiB,CAAC,KAAK,CAAC,GAAQ,OAAW;MACxD,IAAM,IAAQ,GAAe,OAAO,GAC9B,IAAM,IAAQ,IAAI,KAAK,MAAO,IAAQ,IAAS,IAAI,GAAG;AAS5D,aACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD;QAAM,WAAU;kBAAc,EAAO,aAAa,CAAC,QAAQ,KAAK,IAAI;QAAQ,CAAA,EAC5E,kBAAC,QAAD;QAAM,WAAU;kBAAhB;SACG;SAAM;SAAG;SAAI;SACT;UACH;UACN,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,OAAD;QACE,WAAW,uBAlBoB;SACrC,WAAW;SACX,cAAc;SACd,SAAS;SACT,aAAa;SACb,WAAW;SACX,UAAU;SACX,CAWgD,MAAW;QACpD,OAAO,EAAE,OAAO,GAAG,EAAI,IAAI;QAC3B,CAAA;OACE,CAAA,CACF,EAAA,EAbI,EAaJ;OAER;KAEQ,CAAA,CACT,EAAA,CAAA,EAEP,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,yBAAiC,CAAA,EACjC,CAAA,EACb,kBAAC,GAAD;KAAa,WAAU;eACpB,OAAO,QAAQ,EAAgB,CAAC,WAAW,IAC1C,kBAAC,KAAD;MAAG,WAAU;gBAAiD;MAAoB,CAAA,GAElF,OAAO,QAAQ,EAAgB,CAAC,KAAK,CAAC,GAAM,OAAW;MACrD,IAAM,IAAQ,EAAM,QACd,IAAM,IAAQ,IAAI,KAAK,MAAO,IAAQ,IAAS,IAAI,GAAG;AAC5D,aACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,OAAD;OAAK,WAAU;iBAAf,CACE,kBAAC,QAAD,EAAA,UAAO,GAAY,CAAA,EACnB,kBAAC,QAAD;QAAM,WAAU;kBAAhB;SACG;SAAM;SAAG;SAAI;SACT;UACH;UACN,kBAAC,OAAD;OAAK,WAAU;iBACb,kBAAC,OAAD;QACE,WAAU;QACV,OAAO,EAAE,OAAO,GAAG,EAAI,IAAI;QAC3B,CAAA;OACE,CAAA,CACF,EAAA,EAbI,EAaJ;OAER;KAEQ,CAAA,CACT,EAAA,CAAA,CACH;;GAEL,EAAa,SAAS,KACrB,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAW,iBAAyB,CAAA,EACzB,CAAA,EACb,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAa,KAAK,MACjB,kBAAC,OAAD;KAEE,WAAU;eAFZ,CAIE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,KAAD;MAAG,WAAU;gBAAuB,EAAK;MAAU,CAAA,EACnD,kBAAC,KAAD;MAAG,WAAU;gBAAb,CAA6C,SACrC,EAAK,UAAU,IAAI,KAAK,EAAK,QAAQ,CAAC,oBAAoB,GAAG,MACjE;QACA,EAAA,CAAA,EACN,kBAAC,QAAD;MAAM,WAAU;gBACb,EAAK,OAAO,aAAa,CAAC,QAAQ,KAAK,IAAI;MACvC,CAAA,CACH;OAZC,EAAK,GAYN,CACN;IACE,CAAA,EACM,CAAA,CACT,EAAA,CAAA;GAEL"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProductsRoadmapDetailPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProductsRoadmapDetailPagePage.tsx"],"names":[],"mappings":"AAkHA,wBAAgB,6BAA6B,4CAsU5C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProductsRoadmapDetailPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProductsRoadmapDetailPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Button, Card, CardContent, CardHeader, CardTitle, Badge } from '@burdenoff/fe-libs/ui';\nimport { Map, Calendar, Loader2 } from 'lucide-react';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { useParams } from 'react-router';\nimport { PersonName } from '../people/People';\nimport { PlanningFocusBadge, planningFocusLabel } from '../roadmaps/planningFocus';\nimport {\n RemoveRoadmapItemButton,\n RoadmapHeaderActions,\n RoadmapItemDialog,\n} from '../roadmaps/RoadmapControls';\nimport { RoadmapNowNextLater } from '../roadmaps/RoadmapNowNextLater';\nimport { RoadmapPresentation } from '../roadmaps/RoadmapPresentation';\nimport { RoadmapReviewPanel } from '../roadmaps/RoadmapReviewPanel';\nimport { RoadmapVersionsPanel } from '../roadmaps/RoadmapVersionsPanel';\nimport { RoadmapDiscussionPanel, RoadmapItemCommentsButton } from '../comments/RoadmapComments';\nimport { readUrlParam, writeUrlParam } from '../utils/urlParam';\nimport { QuadrantBadge } from '../controls/PrioritizationControls';\nimport { usePresence } from '../hooks/usePresence';\nimport { PresenceAvatars } from '../presence/PresenceAvatars';\nimport { useLiveRefresh, type LiveEvent } from '../hooks/useLiveRefresh';\nimport { LiveStatus } from '../controls/LiveStatus';\n\n// PRM-11: this page's one query — re-read on any roadmap- or item-level event (`useLiveRefresh` below), same\n// \"one query, one refetch\" shape `PROJECT_DETAIL_QUERIES` uses on the project detail page.\nconst ROADMAP_DETAIL_QUERIES = ['GetRoadmapDetailPage'];\n\nconst GET_ROADMAP = gql`\n query GetRoadmapDetailPage($id: ID!) {\n planmagnetRoadmap(id: $id) {\n id\n workspaceId\n name\n description\n type\n planningFocus\n isPublic\n ownerId\n createdAt\n updatedAt\n items {\n id\n title\n description\n status\n startDate\n endDate\n color\n swimlane\n sortOrder\n projectId\n milestoneId\n horizon\n confidence\n riskLevel\n riskNote\n moscow\n kano\n valueScore\n effortScore\n valueEffortQuadrant\n featureRequestDemand {\n requests\n votes\n }\n }\n }\n }\n`;\n\ninterface RoadmapItemNode {\n id: string;\n title: string;\n description: string | null;\n status: string;\n startDate: string | null;\n endDate: string | null;\n color: string | null;\n swimlane: string | null;\n sortOrder: number;\n projectId: string | null;\n milestoneId: string | null;\n /** Now/Next/Later placement (PRM-06) — read here only to hand off to `RoadmapItemDialog`'s edit form; the\n * Now/Next/Later view itself reads and writes these through its own query/mutation, not this one. */\n horizon: string | null;\n confidence: number | null;\n riskLevel: string | null;\n riskNote: string | null;\n /** PRM-27 — read here only to show on the row and hand off to RoadmapItemDialog's edit form. */\n moscow: string | null;\n kano: string | null;\n valueScore: number | null;\n effortScore: number | null;\n valueEffortQuadrant: string | null;\n featureRequestDemand: { requests: number; votes: number } | null;\n}\n\ntype RoadmapView = 'timeline' | 'nnl';\nconst isRoadmapView = (v: string | null): v is RoadmapView => v === 'timeline' || v === 'nnl';\n\nconst statusColor: Record<string, string> = {\n TODO: 'bg-gray-100 text-gray-800',\n IN_PROGRESS: 'bg-blue-100 text-blue-800',\n DONE: 'bg-green-100 text-green-800',\n COMPLETED: 'bg-green-100 text-green-800',\n BLOCKED: 'bg-red-100 text-red-800',\n PLANNED: 'bg-yellow-100 text-yellow-800',\n};\n\nexport function ProductsRoadmapDetailPagePage() {\n const { workspaceId } = usePlanMagnet();\n const params = useParams<{ id: string }>();\n const roadmapId = params.id ?? '';\n const navigate = usePlanMagnetNavigate();\n // CWF-24: who else is looking at this roadmap right now.\n const presence = usePresence('ROADMAP', roadmapId || null);\n // PRM-11: once a DELETED event names the roadmap itself (`event.id === roadmapId` — not one of its items, see\n // `LiveEvent.roadmapId`), there is nothing left to refetch: jump straight to the clear \"This roadmap was\n // deleted\" state below instead of leaving the page on stale data until a refetch eventually confirms it (which\n // can lag the event by up to the debounce window), or racing a refetch against a record already gone.\n const [roadmapDeleted, setRoadmapDeleted] = useState(false);\n const roadmapLive = useLiveRefresh({\n kind: 'roadmap',\n roadmapId,\n queries: ROADMAP_DETAIL_QUERIES,\n onEvent: (event: LiveEvent) => {\n if (event.kind === 'DELETED' && event.id === roadmapId) setRoadmapDeleted(true);\n },\n });\n // Timeline | Now-Next-Later (PRM-06): persisted in the URL (`?view=nnl`) so the applied view is linkable and\n // survives a reload, without touching the host shell's own router — same technique as\n // `board/boardViewConfig.ts`'s `?view=` for saved board views (see `utils/urlParam.ts`).\n const [view, setViewState] = useState<RoadmapView>(() => {\n const fromUrl = readUrlParam('view');\n return isRoadmapView(fromUrl) ? fromUrl : 'timeline';\n });\n const setView = (next: RoadmapView) => {\n setViewState(next);\n writeUrlParam('view', next === 'timeline' ? null : next);\n };\n\n const {\n data,\n loading,\n error,\n } = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useQuery<Record<string, any>>(GET_ROADMAP, {\n variables: { id: roadmapId },\n skip: !roadmapId,\n });\n\n // PRM-11: authoritative the moment the live event says so — ahead of the loading/error checks below, which\n // only resolve once their own (possibly still in-flight, possibly debounced) refetch lands.\n if (roadmapDeleted) {\n return (\n <div className=\"space-y-3 p-6\" data-testid=\"roadmap-deleted\">\n <p className=\"text-sm text-muted-foreground\">This roadmap was deleted.</p>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => navigate('/products/roadmaps-page')}>\n Back to roadmaps\n </Button>\n </div>\n );\n }\n\n // Only before the first load: a refetch must not blank the page (it\n\n // unmounts every component on it and loses their state).\n\n if (loading && !data) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-destructive\">Failed to load roadmap: {error.message}</div>;\n }\n\n const roadmap = data?.planmagnetRoadmap;\n // Belt-and-braces fallback for a roadmap that was already gone before this page's own subscription ever saw a\n // DELETED event (e.g. deleted while this tab was on the polling fallback, or opened on an already-dead link) —\n // same \"does not exist, or it was deleted\" wording `ProjectsBudgetDetailPagePage`/`DocsDocDetailPagePage` use.\n if (!roadmap) {\n return (\n <div className=\"space-y-3 p-6\" data-testid=\"roadmap-not-found\">\n <p className=\"text-sm text-muted-foreground\">\n This roadmap does not exist in this workspace, or it was deleted.\n </p>\n <Button size=\"sm\" variant=\"ghost\" onClick={() => navigate('/products/roadmaps-page')}>\n Back to roadmaps\n </Button>\n </div>\n );\n }\n\n const items: RoadmapItemNode[] = (roadmap.items ?? [])\n .slice()\n .sort((a: RoadmapItemNode, b: RoadmapItemNode) => a.sortOrder - b.sortOrder);\n const completedItems = items.filter((i) => i.status === 'COMPLETED' || i.status === 'DONE');\n const progress = items.length > 0 ? Math.round((completedItems.length / items.length) * 100) : 0;\n\n const lanes = [...new Set(items.map((i) => i.swimlane).filter(Boolean))] as string[];\n\n // Group items by swimlane\n const swimlaneGroups: Record<string, RoadmapItemNode[]> = {};\n for (const item of items) {\n const lane = item.swimlane ?? 'Uncategorized';\n if (!swimlaneGroups[lane]) swimlaneGroups[lane] = [];\n swimlaneGroups[lane].push(item);\n }\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <div className=\"flex items-center gap-2\">\n <Map className=\"h-5 w-5 text-primary\" />\n <h1 className=\"text-2xl font-semibold\">{roadmap.name}</h1>\n <LiveStatus mode={roadmapLive.mode} />\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {roadmap.description ?? 'No description'}\n </p>\n <PresenceAvatars others={presence.others} />\n </div>\n <div className=\"flex flex-col items-end gap-2\">\n <div className=\"flex items-center gap-2\">\n {/* PRM-11: reuses this same `items` list (already carries horizon/confidence/risk/dates) rather\n than firing a query of its own. */}\n <RoadmapPresentation\n roadmapName={roadmap.name}\n roadmapDescription={roadmap.description}\n view={view}\n items={items}\n />\n <RoadmapHeaderActions roadmapId={roadmap.id} name={roadmap.name} />\n </div>\n <div className=\"flex gap-2\">\n <Badge variant={roadmap.isPublic ? 'default' : 'secondary'} className=\"capitalize\">\n {roadmap.isPublic ? 'public' : 'private'}\n </Badge>\n <PlanningFocusBadge focus={roadmap.planningFocus} />\n </div>\n </div>\n </div>\n\n <div className=\"grid grid-cols-2 md:grid-cols-5 gap-4\">\n {[\n { label: 'Progress', value: `${progress}%` },\n { label: 'Total Items', value: items.length },\n { label: 'Completed', value: completedItems.length },\n { label: 'Planning focus', value: planningFocusLabel(roadmap.planningFocus) },\n { label: 'Visibility', value: roadmap.isPublic ? 'Public' : 'Private' },\n ].map((s) => (\n <Card key={s.label}>\n <CardContent className=\"pt-4 text-center\">\n <p className=\"text-xs text-muted-foreground\">{s.label}</p>\n <p className=\"text-lg font-semibold capitalize\">{s.value}</p>\n </CardContent>\n </Card>\n ))}\n </div>\n\n <div\n className=\"flex items-center gap-2\"\n role=\"group\"\n aria-label=\"Roadmap view\"\n data-testid=\"roadmap-view-toggle\"\n >\n {(\n [\n { key: 'timeline', label: 'Timeline' },\n { key: 'nnl', label: 'Now / Next / Later' },\n ] as const\n ).map((v) => (\n <button\n key={v.key}\n type=\"button\"\n aria-pressed={view === v.key}\n onClick={() => setView(v.key)}\n className={`px-2 py-1 text-xs rounded-md ${view === v.key ? 'bg-primary text-primary-foreground' : 'bg-muted text-muted-foreground'}`}\n >\n {v.label}\n </button>\n ))}\n </div>\n\n {view === 'nnl' && <RoadmapNowNextLater roadmapId={roadmap.id} />}\n\n {view === 'timeline' && (\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2 space-y-6\">\n <Card>\n <CardHeader className=\"flex flex-row items-center justify-between gap-2\">\n <CardTitle>Progress Overview</CardTitle>\n <RoadmapItemDialog roadmapId={roadmap.id} lanes={lanes} />\n </CardHeader>\n <CardContent>\n <div className=\"flex justify-between text-sm mb-2\">\n <span className=\"text-muted-foreground\">Overall Completion</span>\n <span className=\"font-medium\">{progress}%</span>\n </div>\n <div className=\"w-full h-4 rounded-full bg-muted overflow-hidden\">\n <div\n className=\"h-full bg-primary rounded-full transition-all\"\n style={{ width: `${progress}%` }}\n />\n </div>\n </CardContent>\n </Card>\n\n {items.length === 0 && (\n <p className=\"rounded-md border border-dashed p-6 text-center text-sm text-muted-foreground\">\n This roadmap has no items yet. Use <span className=\"font-medium\">Add item</span> to\n plan the first one.\n </p>\n )}\n {Object.entries(swimlaneGroups).map(([lane, laneItems]) => (\n <Card key={lane}>\n <CardHeader>\n <CardTitle>\n {lane} ({laneItems.length})\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {laneItems.map((item) => (\n <div\n key={item.id}\n className=\"flex items-center justify-between border rounded-md p-3\"\n >\n <div>\n <p className=\"text-sm font-medium\">{item.title}</p>\n {/* PRM-24: demand behind the initiative, counted by the server. */}\n {item.featureRequestDemand && item.featureRequestDemand.requests > 0 && (\n <p\n className=\"text-xs text-muted-foreground\"\n data-testid=\"roadmap-item-demand\"\n >\n {item.featureRequestDemand.requests} feature request\n {item.featureRequestDemand.requests === 1 ? '' : 's'} ·{' '}\n {item.featureRequestDemand.votes} vote\n {item.featureRequestDemand.votes === 1 ? '' : 's'}\n </p>\n )}\n {item.description && (\n <p className=\"text-xs text-muted-foreground\">\n {item.description.length > 60\n ? `${item.description.slice(0, 60)}…`\n : item.description}\n </p>\n )}\n {(item.startDate || item.endDate) && (\n <div className=\"flex items-center gap-1 mt-1 text-xs text-muted-foreground\">\n <Calendar className=\"h-3 w-3\" />\n {item.startDate ? new Date(item.startDate).toLocaleDateString() : '?'}\n {' - '}\n {item.endDate ? new Date(item.endDate).toLocaleDateString() : '?'}\n </div>\n )}\n </div>\n <div className=\"flex items-center gap-2\">\n {item.color && (\n <div\n className=\"h-3 w-3 rounded-full\"\n style={{ backgroundColor: item.color }}\n />\n )}\n <span\n className={`text-xs px-2 py-0.5 rounded-full capitalize ${statusColor[item.status] ?? 'bg-gray-100'}`}\n >\n {item.status.toLowerCase().replace('_', ' ')}\n </span>\n {/* PRM-27 — read back from the server; hidden for the common case of an unscored item. */}\n <QuadrantBadge quadrant={item.valueEffortQuadrant} hideWhenUnscored />\n <RoadmapItemCommentsButton\n roadmapId={roadmap.id}\n itemId={item.id}\n itemTitle={item.title}\n />\n <RoadmapItemDialog roadmapId={roadmap.id} item={item} lanes={lanes} />\n <RemoveRoadmapItemButton id={item.id} title={item.title} />\n </div>\n </div>\n ))}\n </CardContent>\n </Card>\n ))}\n </div>\n\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Planning focus</span>\n <PlanningFocusBadge focus={roadmap.planningFocus} />\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Owner</span>\n <span>\n <PersonName id={roadmap.ownerId} />\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Created</span>\n <span>{new Date(roadmap.createdAt).toLocaleDateString()}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Updated</span>\n <span>{new Date(roadmap.updatedAt).toLocaleDateString()}</span>\n </div>\n </CardContent>\n </Card>\n </div>\n </div>\n )}\n\n {/* PRM-11: collaboration (discussion, review, versions) is roadmap-level state, not tied to either view\n above — shown regardless of the Timeline/Now-Next-Later toggle. */}\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2\">\n <RoadmapDiscussionPanel roadmapId={roadmap.id} />\n </div>\n <div className=\"space-y-6\">\n <RoadmapReviewPanel roadmapId={roadmap.id} />\n <RoadmapVersionsPanel roadmapId={roadmap.id} />\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProductsRoadmapsPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProductsRoadmapsPagePage.tsx"],"names":[],"mappings":"AAoEA,wBAAgB,wBAAwB,4CAqLvC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProductsRoadmapsPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProductsRoadmapsPagePage.tsx"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\nimport { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge, Button } from '@burdenoff/fe-libs/ui';\nimport { Map, Calendar, Plus, Filter, Loader2 } from 'lucide-react';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { rowLinkProps, detailPath } from '../utils/rowNavigation';\nimport { PersonName } from '../people/People';\nimport {\n PLANNING_FOCUSES,\n PlanningFocusBadge,\n planningFocusLabel,\n} from '../roadmaps/planningFocus';\n\nconst LIST_ROADMAPS = gql`\n query ListRoadmapsPage(\n $workspaceId: ID!\n $filter: PlanmagnetRoadmapFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetRoadmaps(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items {\n id\n workspaceId\n name\n description\n type\n planningFocus\n isPublic\n ownerId\n createdAt\n updatedAt\n items {\n id\n title\n status\n startDate\n endDate\n }\n }\n totalCount\n }\n }\n`;\n\ninterface RoadmapItemNode {\n id: string;\n title: string;\n status: string;\n startDate: string | null;\n endDate: string | null;\n}\n\ninterface RoadmapNode {\n id: string;\n name: string;\n description: string | null;\n type: string;\n planningFocus: string | null;\n isPublic: boolean;\n ownerId: string;\n createdAt: string;\n updatedAt: string;\n items: RoadmapItemNode[];\n}\n\nexport function ProductsRoadmapsPagePage() {\n const navigate = usePlanMagnetNavigate();\n const { workspaceId } = usePlanMagnet();\n const [focusFilter, setFocusFilter] = useState<string>('all');\n const [visFilter, setVisFilter] = useState<string>('all');\n\n const {\n data,\n loading,\n error,\n } = // eslint-disable-next-line @typescript-eslint/no-explicit-any\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n useQuery<Record<string, any>>(LIST_ROADMAPS, {\n // Filters run on the server (BOFF-7986): filtering the first 50 in the browser hid every match past the\n // 50th and could say \"no roadmaps match\" while matches existed.\n variables: {\n workspaceId,\n pagination: { first: 50 },\n filter: {\n ...(focusFilter === 'none'\n ? { hasPlanningFocus: false }\n : focusFilter !== 'all'\n ? { planningFocus: focusFilter }\n : {}),\n ...(visFilter !== 'all' ? { isPublic: visFilter === 'public' } : {}),\n },\n },\n skip: !workspaceId,\n });\n\n // Only before the first load: a refetch must not blank the page (it\n\n // unmounts every component on it and loses their state).\n\n if (loading && !data) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-destructive\">Failed to load roadmaps: {error.message}</div>;\n }\n\n const roadmaps: RoadmapNode[] = data?.planmagnetRoadmaps?.items ?? [];\n const totalCount = data?.planmagnetRoadmaps?.totalCount ?? 0;\n\n // Filter by what a roadmap is ABOUT. Every roadmap has the same display, so\n // filtering by it (the old \"Type: timeline\" chips) chose nothing (BOFF-7934).\n const focuses = ['all', ...PLANNING_FOCUSES, 'none'];\n const visibilities = ['all', 'public', 'private'];\n\n const filtered = roadmaps;\n const filteredView = focusFilter !== 'all' || visFilter !== 'all';\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Roadmaps</h1>\n <p className=\"text-sm text-muted-foreground\">\n {filteredView ? `${totalCount} match` : `${totalCount} roadmaps across all products`}\n </p>\n </div>\n <Button size=\"sm\" onClick={() => navigate('/products/create-roadmap-page')}>\n <Plus className=\"mr-1 h-4 w-4\" />\n New Roadmap\n </Button>\n </div>\n\n <div className=\"flex gap-4 flex-wrap\">\n <div className=\"flex items-center gap-2\">\n <Filter className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-sm text-muted-foreground\">Focus:</span>\n {focuses.map((f) => (\n <button\n key={f}\n type=\"button\"\n aria-pressed={focusFilter === f}\n onClick={() => setFocusFilter(f)}\n className={`px-2 py-1 text-xs rounded-md ${focusFilter === f ? 'bg-primary text-primary-foreground' : 'bg-muted text-muted-foreground'}`}\n >\n {f === 'all' ? 'All' : f === 'none' ? 'Not set' : planningFocusLabel(f)}\n </button>\n ))}\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground\">Visibility:</span>\n {visibilities.map((v) => (\n <button\n key={v}\n onClick={() => setVisFilter(v)}\n className={`px-2 py-1 text-xs rounded-md capitalize ${visFilter === v ? 'bg-primary text-primary-foreground' : 'bg-muted text-muted-foreground'}`}\n >\n {v}\n </button>\n ))}\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {filtered.map((rm) => {\n const itemCount = rm.items?.length ?? 0;\n const completedItems =\n rm.items?.filter((i) => i.status === 'COMPLETED' || i.status === 'DONE').length ?? 0;\n const progress = itemCount > 0 ? Math.round((completedItems / itemCount) * 100) : 0;\n const startDates = rm.items?.map((i) => i.startDate).filter(Boolean) ?? [];\n const endDates = rm.items?.map((i) => i.endDate).filter(Boolean) ?? [];\n const earliestStart = startDates.length > 0 ? startDates.sort()[0] : null;\n const latestEnd = endDates.length > 0 ? endDates.sort().reverse()[0] : null;\n\n return (\n <Card\n key={rm.id}\n {...rowLinkProps(\n () => navigate(detailPath('/products/roadmap-detail-page', rm.id)),\n rm.name\n )}\n >\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center justify-between\">\n <CardTitle className=\"text-base\">{rm.name}</CardTitle>\n <Badge variant={rm.isPublic ? 'default' : 'secondary'} className=\"capitalize\">\n {rm.isPublic ? 'public' : 'private'}\n </Badge>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-sm text-muted-foreground\">\n {rm.description ?? 'No description'}\n </p>\n <div className=\"flex items-center gap-2\">\n <PlanningFocusBadge focus={rm.planningFocus} />\n <Badge variant=\"outline\" className=\"text-xs capitalize\">\n {rm.isPublic ? 'public' : 'private'}\n </Badge>\n </div>\n <div>\n <div className=\"flex justify-between text-xs mb-1\">\n <span className=\"text-muted-foreground\">Progress</span>\n <span className=\"font-medium\">{progress}%</span>\n </div>\n <div className=\"w-full h-2 rounded-full bg-muted overflow-hidden\">\n <div\n className=\"h-full bg-primary rounded-full\"\n style={{ width: `${progress}%` }}\n />\n </div>\n </div>\n <div className=\"flex gap-4 text-xs text-muted-foreground\">\n <span className=\"flex items-center gap-1\">\n <Map className=\"h-3 w-3\" />\n {itemCount} items\n </span>\n </div>\n <div className=\"flex items-center justify-between text-xs text-muted-foreground border-t pt-2\">\n <span>\n Owner: <PersonName id={rm.ownerId} />\n </span>\n {earliestStart && latestEnd && (\n <span className=\"flex items-center gap-1\">\n <Calendar className=\"h-3 w-3\" />\n {new Date(earliestStart).toLocaleDateString()} -{' '}\n {new Date(latestEnd).toLocaleDateString()}\n </span>\n )}\n </div>\n </CardContent>\n </Card>\n );\n })}\n </div>\n {filtered.length === 0 && (\n <p className=\"text-center text-muted-foreground py-8\">\n No roadmaps match the selected filters.\n </p>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProgramsCreateProgramPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProgramsCreateProgramPagePage.tsx"],"names":[],"mappings":"AAoBA,wBAAgB,6BAA6B,4CA+M5C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProgramsCreateProgramPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProgramsCreateProgramPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useMutation } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Button, Input } from '@burdenoff/fe-libs/ui';\nimport { Save, X, FolderKanban, Loader2 } from 'lucide-react';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { throwOnError } from '../utils/mutationResult';\nimport { endBeforeStart } from '../utils/formValidation';\nimport { enumLabel } from '../controls/WorkItemControls';\nimport { PROGRAM_STATUSES } from '../controls/ProgramControls';\n\nconst CREATE_PROGRAM = gql`\n mutation CreateProgram($input: PlanmagnetCreateProgramInput!) {\n planmagnetCreateProgram(input: $input) {\n id\n name\n }\n }\n`;\n\nexport function ProgramsCreateProgramPagePage() {\n const { currentUser } = usePlanMagnet();\n const navigate = usePlanMagnetNavigate();\n\n const [form, setForm] = useState({\n name: '',\n description: '',\n status: 'PLANNING' as (typeof PROGRAM_STATUSES)[number],\n startDate: '',\n endDate: '',\n budgetTotal: '',\n currency: '',\n tags: '',\n });\n const [saveError, setSaveError] = useState<string | null>(null);\n const [createProgram, { loading: saving }] = useMutation(CREATE_PROGRAM, {\n refetchQueries: ['ListPrograms'],\n });\n\n const invalidDates = endBeforeStart(form.startDate, form.endDate);\n const invalidBudget = form.budgetTotal !== '' && Number(form.budgetTotal) < 0;\n\n const handleCreate = async () => {\n if (!form.name.trim() || invalidDates || invalidBudget) return;\n setSaveError(null);\n try {\n await throwOnError(\n createProgram({\n variables: {\n input: {\n name: form.name.trim(),\n description: form.description.trim() || undefined,\n status: form.status,\n startDate: form.startDate || undefined,\n endDate: form.endDate || undefined,\n ownerId: currentUser?.id ?? '',\n ...(form.budgetTotal !== '' ? { budgetTotal: Number(form.budgetTotal) } : {}),\n currency: form.currency.trim() || undefined,\n tags: form.tags\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean),\n },\n },\n })\n );\n navigate('/products/programs-page');\n } catch (e) {\n setSaveError(e instanceof Error ? e.message : 'The program could not be created.');\n }\n };\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Create Program</h1>\n <p className=\"text-sm text-muted-foreground\">\n Group related projects together for portfolio-level visibility and budget tracking.\n </p>\n </div>\n <div className=\"flex gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => navigate('/products/programs-page')}>\n <X className=\"mr-1 h-4 w-4\" />\n Cancel\n </Button>\n <Button\n size=\"sm\"\n onClick={handleCreate}\n disabled={saving || !form.name.trim() || invalidDates || invalidBudget}\n >\n {saving ? (\n <Loader2 className=\"mr-1 h-4 w-4 animate-spin\" />\n ) : (\n <Save className=\"mr-1 h-4 w-4\" />\n )}\n Create Program\n </Button>\n </div>\n </div>\n\n {saveError && (\n <div role=\"alert\" className=\"p-3 rounded-md bg-destructive/10 text-destructive text-sm\">\n Failed to create program: {saveError}\n </div>\n )}\n\n <Card>\n <CardHeader>\n <CardTitle className=\"flex items-center gap-2\">\n <FolderKanban className=\"h-4 w-4\" />\n Program Details\n </CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <label className=\"text-sm font-medium\">Name</label>\n <Input\n value={form.name}\n onChange={(e) => setForm({ ...form, name: e.target.value })}\n className=\"mt-1\"\n placeholder=\"e.g. Platform Modernization\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Description</label>\n <textarea\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[80px]\"\n value={form.description}\n onChange={(e) => setForm({ ...form, description: e.target.value })}\n placeholder=\"Describe what this program covers…\"\n />\n </div>\n <div>\n <label htmlFor=\"program-status\" className=\"text-sm font-medium\">\n Status\n </label>\n <select\n id=\"program-status\"\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\"\n value={form.status}\n onChange={(e) =>\n setForm({ ...form, status: e.target.value as (typeof PROGRAM_STATUSES)[number] })\n }\n >\n {PROGRAM_STATUSES.map((s) => (\n <option key={s} value={s}>\n {enumLabel(s)}\n </option>\n ))}\n </select>\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label htmlFor=\"program-start\" className=\"text-sm font-medium\">\n Start Date\n </label>\n <Input\n id=\"program-start\"\n type=\"date\"\n value={form.startDate}\n max={form.endDate || undefined}\n onChange={(e) => setForm({ ...form, startDate: e.target.value })}\n className=\"mt-1\"\n />\n </div>\n <div>\n <label htmlFor=\"program-end\" className=\"text-sm font-medium\">\n End Date\n </label>\n <Input\n id=\"program-end\"\n type=\"date\"\n value={form.endDate}\n min={form.startDate || undefined}\n onChange={(e) => setForm({ ...form, endDate: e.target.value })}\n aria-invalid={invalidDates}\n className=\"mt-1\"\n />\n </div>\n </div>\n {invalidDates && (\n <p role=\"alert\" className=\"text-sm text-destructive\">\n The end date is before the start date.\n </p>\n )}\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"text-sm font-medium\">Total Budget</label>\n <Input\n type=\"number\"\n min=\"0\"\n value={form.budgetTotal}\n onChange={(e) => setForm({ ...form, budgetTotal: e.target.value })}\n className=\"mt-1\"\n aria-invalid={invalidBudget}\n placeholder=\"0\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Currency</label>\n <Input\n value={form.currency}\n onChange={(e) => setForm({ ...form, currency: e.target.value })}\n className=\"mt-1\"\n placeholder=\"USD\"\n />\n </div>\n </div>\n {invalidBudget && (\n <p role=\"alert\" className=\"text-sm text-destructive\">\n The budget cannot be negative.\n </p>\n )}\n <div>\n <label className=\"text-sm font-medium\">Tags (comma-separated)</label>\n <Input\n value={form.tags}\n onChange={(e) => setForm({ ...form, tags: e.target.value })}\n className=\"mt-1\"\n placeholder=\"e.g. strategic, infra\"\n />\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProgramsEditProgramPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProgramsEditProgramPagePage.tsx"],"names":[],"mappings":"AA8CA,wBAAgB,2BAA2B,4CAyQ1C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProgramsEditProgramPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProgramsEditProgramPagePage.tsx"],"sourcesContent":["import { useState, useMemo } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery, useMutation } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Button, Input } from '@burdenoff/fe-libs/ui';\nimport { Save, ArrowLeft, Loader2 } from 'lucide-react';\nimport { useParams } from 'react-router';\nimport { usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { detailPath } from '../utils/rowNavigation';\nimport { throwOnError } from '../utils/mutationResult';\nimport { endBeforeStart } from '../utils/formValidation';\nimport { enumLabel } from '../controls/WorkItemControls';\nimport { PROGRAM_STATUSES } from '../controls/ProgramControls';\n\nconst GET_PROGRAM = gql`\n query GetProgramForEdit($id: ID!) {\n planmagnetProgram(id: $id) {\n id\n name\n description\n status\n startDate\n endDate\n budgetTotal\n currency\n tags\n }\n }\n`;\n\nconst UPDATE_PROGRAM = gql`\n mutation UpdateProgram($id: ID!, $input: PlanmagnetUpdateProgramInput!) {\n planmagnetUpdateProgram(id: $id, input: $input) {\n id\n name\n description\n status\n startDate\n endDate\n budgetTotal\n currency\n tags\n updatedAt\n }\n }\n`;\n\nexport function ProgramsEditProgramPagePage() {\n const navigate = usePlanMagnetNavigate();\n const params = useParams<{ id: string }>();\n const programId = params.id ?? '';\n\n const { data, loading, error } = useQuery<{\n planmagnetProgram: {\n id: string;\n name: string;\n description: string | null;\n status: string;\n startDate: string | null;\n endDate: string | null;\n budgetTotal: number | null;\n currency: string | null;\n tags: string[];\n } | null;\n }>(GET_PROGRAM, { variables: { id: programId }, skip: !programId });\n\n const [updateProgram, { loading: saving }] = useMutation(UPDATE_PROGRAM, {\n refetchQueries: ['ListPrograms', 'GetProgramForEdit', 'GetProgram'],\n awaitRefetchQueries: true,\n });\n const [saveError, setSaveError] = useState<string | null>(null);\n const [saved, setSaved] = useState(false);\n\n const program = data?.planmagnetProgram;\n\n const defaultForm = useMemo(\n () => ({\n name: program?.name ?? '',\n description: program?.description ?? '',\n status: program?.status ?? 'PLANNING',\n startDate: program?.startDate ? program.startDate.split('T')[0] : '',\n endDate: program?.endDate ? program.endDate.split('T')[0] : '',\n budgetTotal: program?.budgetTotal != null ? String(program.budgetTotal) : '',\n currency: program?.currency ?? '',\n tags: program?.tags?.join(', ') ?? '',\n }),\n [program]\n );\n\n const [formOverrides, setFormOverrides] = useState<Record<string, string>>({});\n const form = { ...defaultForm, ...formOverrides };\n const setForm = (val: Record<string, string>) => setFormOverrides(val);\n\n const statuses = (PROGRAM_STATUSES as readonly string[]).includes(form.status)\n ? PROGRAM_STATUSES\n : [form.status, ...PROGRAM_STATUSES];\n const invalidDates = endBeforeStart(form.startDate, form.endDate);\n const invalidBudget = form.budgetTotal !== '' && Number(form.budgetTotal) < 0;\n\n // Dates are sent only when changed (BOFF-7833 pattern): re-sending an untouched pair could refuse a plain\n // rename against a record stored with an older, looser rule.\n const handleSave = async () => {\n if (!program || !form.name.trim() || invalidDates || invalidBudget) return;\n const dateChanges = {\n ...(form.startDate !== defaultForm.startDate && { startDate: form.startDate || null }),\n ...(form.endDate !== defaultForm.endDate && { endDate: form.endDate || null }),\n };\n const tagList = (v: string) =>\n v\n .split(',')\n .map((t) => t.trim())\n .filter(Boolean);\n const next: Record<string, unknown> = {\n name: form.name.trim(),\n description: form.description.trim() || null,\n status: form.status,\n ...dateChanges,\n budgetTotal: form.budgetTotal !== '' ? Number(form.budgetTotal) : null,\n currency: form.currency.trim() || null,\n tags: tagList(form.tags),\n };\n const before: Record<string, unknown> = {\n name: defaultForm.name,\n description: defaultForm.description.trim() || null,\n status: defaultForm.status,\n budgetTotal: defaultForm.budgetTotal !== '' ? Number(defaultForm.budgetTotal) : null,\n currency: defaultForm.currency.trim() || null,\n tags: tagList(defaultForm.tags),\n };\n const input = Object.fromEntries(\n Object.entries(next).filter(\n ([k, v]) => k in dateChanges || JSON.stringify(v) !== JSON.stringify(before[k])\n )\n );\n setSaveError(null);\n setSaved(false);\n if (Object.keys(input).length === 0) {\n setSaved(true);\n return;\n }\n try {\n await throwOnError(updateProgram({ variables: { id: programId, input } }));\n setSaved(true);\n } catch (e) {\n setSaveError(e instanceof Error ? e.message : 'The program could not be saved.');\n }\n };\n\n // Only before the first load: a refetch must not blank the page (it unmounts every component on it and\n // loses their state).\n if (loading && !data) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-destructive\">Failed to load program: {error.message}</div>;\n }\n\n if (!program) return <div className=\"p-6 text-muted-foreground\">Program not found.</div>;\n\n return (\n <div className=\"space-y-6 p-6 max-w-4xl\">\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-3\">\n <Button\n variant=\"ghost\"\n size=\"sm\"\n aria-label=\"Back to the program\"\n onClick={() => navigate(detailPath('/products/program-detail-page', programId))}\n >\n <ArrowLeft className=\"h-4 w-4\" />\n </Button>\n <div>\n <h1 className=\"text-2xl font-semibold\">Edit Program</h1>\n <p className=\"text-sm text-muted-foreground\">{program.name}</p>\n </div>\n </div>\n <Button size=\"sm\" onClick={handleSave} disabled={saving || invalidDates || invalidBudget}>\n {saving ? (\n <Loader2 className=\"mr-1 h-4 w-4 animate-spin\" />\n ) : (\n <Save className=\"mr-1 h-4 w-4\" />\n )}\n Save Changes\n </Button>\n </div>\n\n {saved && (\n <div role=\"status\" className=\"p-3 bg-muted text-status-success-text rounded-md text-sm\">\n Changes saved.\n </div>\n )}\n {saveError && (\n <div role=\"alert\" className=\"p-3 rounded-md bg-destructive/10 text-destructive text-sm\">\n {saveError}\n </div>\n )}\n\n <Card>\n <CardHeader>\n <CardTitle>Program Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-4\">\n <div>\n <label className=\"text-sm font-medium\">Name</label>\n <Input\n value={form.name}\n onChange={(e) => setForm({ ...form, name: e.target.value })}\n className=\"mt-1\"\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Description</label>\n <textarea\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[80px]\"\n value={form.description}\n onChange={(e) => setForm({ ...form, description: e.target.value })}\n />\n </div>\n <div>\n <label htmlFor=\"program-edit-status\" className=\"text-sm font-medium\">\n Status\n </label>\n <select\n id=\"program-edit-status\"\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm\"\n value={form.status}\n onChange={(e) => setForm({ ...form, status: e.target.value })}\n >\n {statuses.map((s) => (\n <option key={s} value={s}>\n {enumLabel(s)}\n </option>\n ))}\n </select>\n </div>\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label htmlFor=\"program-edit-start\" className=\"text-sm font-medium\">\n Start Date\n </label>\n <Input\n id=\"program-edit-start\"\n type=\"date\"\n value={form.startDate}\n max={form.endDate || undefined}\n onChange={(e) => setForm({ ...form, startDate: e.target.value })}\n className=\"mt-1\"\n />\n </div>\n <div>\n <label htmlFor=\"program-edit-end\" className=\"text-sm font-medium\">\n End Date\n </label>\n <Input\n id=\"program-edit-end\"\n type=\"date\"\n value={form.endDate}\n min={form.startDate || undefined}\n onChange={(e) => setForm({ ...form, endDate: e.target.value })}\n aria-invalid={invalidDates}\n className=\"mt-1\"\n />\n </div>\n </div>\n {invalidDates && (\n <p role=\"alert\" className=\"text-sm text-destructive\">\n The end date is before the start date.\n </p>\n )}\n <div className=\"grid grid-cols-2 gap-4\">\n <div>\n <label className=\"text-sm font-medium\">Total Budget</label>\n <Input\n type=\"number\"\n min=\"0\"\n value={form.budgetTotal}\n onChange={(e) => setForm({ ...form, budgetTotal: e.target.value })}\n className=\"mt-1\"\n aria-invalid={invalidBudget}\n />\n </div>\n <div>\n <label className=\"text-sm font-medium\">Currency</label>\n <Input\n value={form.currency}\n onChange={(e) => setForm({ ...form, currency: e.target.value })}\n className=\"mt-1\"\n />\n </div>\n </div>\n {invalidBudget && (\n <p role=\"alert\" className=\"text-sm text-destructive\">\n The budget cannot be negative.\n </p>\n )}\n <div>\n <label className=\"text-sm font-medium\">Tags (comma-separated)</label>\n <Input\n value={form.tags}\n onChange={(e) => setForm({ ...form, tags: e.target.value })}\n className=\"mt-1\"\n />\n </div>\n </CardContent>\n </Card>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProgramsProgramDetailPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProgramsProgramDetailPagePage.tsx"],"names":[],"mappings":"AAwCA,wBAAgB,6BAA6B,4CAmJ5C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProgramsProgramDetailPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProgramsProgramDetailPagePage.tsx"],"sourcesContent":["import { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { Card, CardContent, CardHeader, CardTitle, Badge } from '@burdenoff/fe-libs/ui';\nimport { FolderKanban, Calendar, Loader2 } from 'lucide-react';\nimport { useParams } from 'react-router';\nimport { PersonName } from '../people/People';\nimport { enumLabel } from '../controls/WorkItemControls';\nimport { ProgramHeaderActions, ProgramProjectsCard } from '../controls/ProgramControls';\n\nconst GET_PROGRAM = gql`\n query GetProgram($id: ID!) {\n planmagnetProgram(id: $id) {\n id\n workspaceId\n name\n description\n status\n startDate\n endDate\n ownerId\n budgetTotal\n currency\n tags\n createdAt\n updatedAt\n projects {\n id\n name\n status\n }\n }\n }\n`;\n\ninterface ProjectNode {\n id: string;\n name: string;\n status: string;\n}\n\nexport function ProgramsProgramDetailPagePage() {\n const params = useParams<{ id: string }>();\n const programId = params.id ?? '';\n\n const { data, loading, error } = useQuery<{\n planmagnetProgram: {\n id: string;\n name: string;\n description: string | null;\n status: string;\n startDate: string | null;\n endDate: string | null;\n ownerId: string;\n budgetTotal: number | null;\n currency: string | null;\n tags: string[];\n createdAt: string;\n updatedAt: string;\n projects: ProjectNode[];\n } | null;\n }>(GET_PROGRAM, { variables: { id: programId }, skip: !programId });\n\n // Only before the first load: a refetch must not blank the page (it unmounts every component on it and\n // loses their state).\n if (loading && !data) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-destructive\">Failed to load program: {error.message}</div>;\n }\n\n const program = data?.planmagnetProgram;\n if (!program) return <div className=\"p-6 text-muted-foreground\">Program not found.</div>;\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <div className=\"flex items-center gap-2\">\n <FolderKanban className=\"h-5 w-5 text-primary\" />\n <h1 className=\"text-2xl font-semibold\">{program.name}</h1>\n <Badge variant=\"outline\" className=\"text-xs\">\n {enumLabel(program.status)}\n </Badge>\n </div>\n <p className=\"text-sm text-muted-foreground mt-1\">\n {program.projects.length} project{program.projects.length === 1 ? '' : 's'}\n </p>\n </div>\n <ProgramHeaderActions programId={program.id} name={program.name} status={program.status} />\n </div>\n\n <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n <div className=\"lg:col-span-2 space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Overview</CardTitle>\n </CardHeader>\n <CardContent>\n <p className=\"text-sm\">{program.description ?? 'No description provided.'}</p>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Projects</CardTitle>\n </CardHeader>\n <CardContent>\n <ProgramProjectsCard programId={program.id} projects={program.projects} />\n </CardContent>\n </Card>\n </div>\n\n <div className=\"space-y-6\">\n <Card>\n <CardHeader>\n <CardTitle>Timeline</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-3 text-sm\">\n <div className=\"flex items-center gap-2\">\n <Calendar className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-muted-foreground\">Start:</span>\n <span className=\"font-medium\">\n {program.startDate ? new Date(program.startDate).toLocaleDateString() : 'Not set'}\n </span>\n </div>\n <div className=\"flex items-center gap-2\">\n <Calendar className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-muted-foreground\">End:</span>\n <span className=\"font-medium\">\n {program.endDate ? new Date(program.endDate).toLocaleDateString() : 'Not set'}\n </span>\n </div>\n </CardContent>\n </Card>\n\n <Card>\n <CardHeader>\n <CardTitle>Details</CardTitle>\n </CardHeader>\n <CardContent className=\"space-y-2 text-sm\">\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Owner</span>\n <PersonName id={program.ownerId} />\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Budget</span>\n <span className=\"font-medium\">\n {program.budgetTotal != null\n ? `${program.currency ?? ''} ${program.budgetTotal.toLocaleString()}`.trim()\n : 'Not set'}\n </span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Created</span>\n <span>{new Date(program.createdAt).toLocaleDateString()}</span>\n </div>\n <div className=\"flex justify-between\">\n <span className=\"text-muted-foreground\">Updated</span>\n <span>{new Date(program.updatedAt).toLocaleDateString()}</span>\n </div>\n </CardContent>\n </Card>\n\n {program.tags.length > 0 && (\n <Card>\n <CardHeader>\n <CardTitle>Tags</CardTitle>\n </CardHeader>\n <CardContent className=\"flex flex-wrap gap-1\">\n {program.tags.map((tag) => (\n <Badge key={tag} variant=\"outline\" className=\"text-xs\">\n {tag}\n </Badge>\n ))}\n </CardContent>\n </Card>\n )}\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProgramsProgramsPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProgramsProgramsPagePage.tsx"],"names":[],"mappings":"AA6DA,wBAAgB,wBAAwB,4CAsIvC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProgramsProgramsPagePage.js","names":[],"sources":["../../../src/planmagnet/pages/ProgramsProgramsPagePage.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport {\n Card,\n CardContent,\n CardHeader,\n CardTitle,\n Badge,\n Button,\n Input,\n} from '@burdenoff/fe-libs/ui';\nimport { FolderKanban, Plus, Loader2 } from 'lucide-react';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { rowLinkProps, detailPath } from '../utils/rowNavigation';\nimport { PersonName } from '../people/People';\nimport { enumLabel } from '../controls/WorkItemControls';\nimport { PROGRAM_STATUSES } from '../controls/ProgramControls';\n\nconst LIST_PROGRAMS = gql`\n query ListPrograms(\n $workspaceId: ID!\n $filter: PlanmagnetProgramFilter\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetPrograms(workspaceId: $workspaceId, filter: $filter, pagination: $pagination) {\n items {\n id\n name\n description\n status\n startDate\n endDate\n ownerId\n budgetTotal\n currency\n tags\n updatedAt\n projects {\n id\n }\n }\n totalCount\n }\n }\n`;\n\ninterface ProgramNode {\n id: string;\n name: string;\n description: string | null;\n status: string;\n startDate: string | null;\n endDate: string | null;\n ownerId: string;\n budgetTotal: number | null;\n currency: string | null;\n tags: string[];\n projects: { id: string }[];\n}\n\nexport function ProgramsProgramsPagePage() {\n const navigate = usePlanMagnetNavigate();\n const { workspaceId } = usePlanMagnet();\n const [statusFilter, setStatusFilter] = useState<string>('all');\n const [search, setSearch] = useState('');\n\n const { data, loading, error } = useQuery<{\n planmagnetPrograms: { items: ProgramNode[]; totalCount: number };\n }>(LIST_PROGRAMS, {\n variables: {\n workspaceId,\n pagination: { first: 50 },\n filter: {\n ...(statusFilter !== 'all' ? { status: statusFilter } : {}),\n ...(search.trim() ? { search: search.trim() } : {}),\n },\n },\n skip: !workspaceId,\n });\n\n // Only before the first load: a refetch must not blank the page (it unmounts every component on it and\n // loses their state).\n if (loading && !data) {\n return (\n <div className=\"flex items-center justify-center p-12\">\n <Loader2 className=\"h-8 w-8 animate-spin text-muted-foreground\" />\n </div>\n );\n }\n\n if (error) {\n return <div className=\"p-6 text-destructive\">Failed to load programs: {error.message}</div>;\n }\n\n const programs = data?.planmagnetPrograms.items ?? [];\n const totalCount = data?.planmagnetPrograms.totalCount ?? 0;\n const statuses = ['all', ...PROGRAM_STATUSES];\n\n return (\n <div className=\"space-y-6 p-6\">\n <div className=\"flex items-center justify-between\">\n <div>\n <h1 className=\"text-2xl font-semibold\">Programs</h1>\n <p className=\"text-sm text-muted-foreground\">\n {totalCount} program{totalCount === 1 ? '' : 's'} across the workspace\n </p>\n </div>\n <Button size=\"sm\" onClick={() => navigate('/products/create-program-page')}>\n <Plus className=\"mr-1 h-4 w-4\" />\n New Program\n </Button>\n </div>\n\n <div className=\"flex flex-wrap items-center gap-4\">\n <Input\n aria-label=\"Search programs\"\n placeholder=\"Search by name…\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n className=\"max-w-xs\"\n />\n <div className=\"flex items-center gap-2 flex-wrap\">\n {statuses.map((s) => (\n <button\n key={s}\n type=\"button\"\n aria-pressed={statusFilter === s}\n onClick={() => setStatusFilter(s)}\n className={`px-2 py-1 text-xs rounded-md capitalize ${statusFilter === s ? 'bg-primary text-primary-foreground' : 'bg-muted text-muted-foreground'}`}\n >\n {s === 'all' ? 'All' : enumLabel(s)}\n </button>\n ))}\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n {programs.map((program) => (\n <Card\n key={program.id}\n {...rowLinkProps(\n () => navigate(detailPath('/products/program-detail-page', program.id)),\n program.name\n )}\n >\n <CardHeader className=\"pb-2\">\n <div className=\"flex items-center justify-between gap-2\">\n <CardTitle className=\"text-base flex items-center gap-2\">\n <FolderKanban className=\"h-4 w-4 text-primary\" />\n {program.name}\n </CardTitle>\n <Badge variant=\"outline\" className=\"text-xs\">\n {enumLabel(program.status)}\n </Badge>\n </div>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n <p className=\"text-sm text-muted-foreground\">\n {program.description ?? 'No description'}\n </p>\n <div className=\"flex items-center gap-4 text-xs text-muted-foreground\">\n <span>\n {program.projects.length} project{program.projects.length === 1 ? '' : 's'}\n </span>\n {program.startDate && program.endDate && (\n <span>\n {new Date(program.startDate).toLocaleDateString()} -{' '}\n {new Date(program.endDate).toLocaleDateString()}\n </span>\n )}\n </div>\n <div className=\"flex items-center justify-between text-xs text-muted-foreground border-t pt-2\">\n <span>\n Owner: <PersonName id={program.ownerId} />\n </span>\n <span>\n {program.budgetTotal != null\n ? `${program.currency ?? ''} ${program.budgetTotal.toLocaleString()}`.trim()\n : 'No budget set'}\n </span>\n </div>\n </CardContent>\n </Card>\n ))}\n </div>\n {programs.length === 0 && (\n <p className=\"text-center text-muted-foreground py-8\">\n {statusFilter !== 'all' || search\n ? 'No programs match the selected filters.'\n : 'No programs yet. Create one to group related projects together.'}\n </p>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ProjectsActiveProjectsPagePage.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/pages/ProjectsActiveProjectsPagePage.tsx"],"names":[],"mappings":"AA4CA,wBAAgB,8BAA8B,4CAqG7C"}