@burdenoff/microfe-planmagnet 2026.1008.2 → 2026.1008.3

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 (1969) 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 +0 -2
  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.js +0 -2
  793. package/dist/planmagnet/satisfaction/satisfactionCsv.js +0 -2
  794. package/dist/planmagnet/satisfaction/satisfactionForm.js +0 -2
  795. package/dist/planmagnet/satisfaction/satisfactionOperations.js +0 -2
  796. package/dist/planmagnet/satisfaction/useSatisfactionAccess.js +0 -2
  797. package/dist/planmagnet/skills/RequiredSkillsEditor.js +0 -2
  798. package/dist/planmagnet/skills/SkillChips.js +0 -2
  799. package/dist/planmagnet/skills/SkillCoverageCard.js +0 -2
  800. package/dist/planmagnet/skills/WorkItemRequiredSkills.js +0 -2
  801. package/dist/planmagnet/skills/skillOperations.js +0 -2
  802. package/dist/planmagnet/skills/skillTags.js +0 -2
  803. package/dist/planmagnet/skills/useRequiredSkillsDraft.js +0 -2
  804. package/dist/planmagnet/sprints/SprintControls.js +0 -2
  805. package/dist/planmagnet/sprints/SprintDates.js +0 -2
  806. package/dist/planmagnet/store/planmagnetStore.js +0 -2
  807. package/dist/planmagnet/team/PendingInvitations.js +0 -2
  808. package/dist/planmagnet/team/TeamControls.js +0 -2
  809. package/dist/planmagnet/team/UnmatchedCrewIdentities.js +0 -2
  810. package/dist/planmagnet/team/invitationEmail.js +0 -2
  811. package/dist/planmagnet/time/TaskTimePanel.js +0 -2
  812. package/dist/planmagnet/time/TimeEntryControls.js +0 -2
  813. package/dist/planmagnet/time/TimesheetControls.js +0 -2
  814. package/dist/planmagnet/time/timeShared.js +0 -2
  815. package/dist/planmagnet/utils/cn.js +0 -2
  816. package/dist/planmagnet/utils/email.js +0 -2
  817. package/dist/planmagnet/utils/formValidation.js +0 -2
  818. package/dist/planmagnet/utils/graphqlErrors.js +0 -2
  819. package/dist/planmagnet/utils/lineDiff.js +0 -2
  820. package/dist/planmagnet/utils/mutationResult.js +0 -2
  821. package/dist/planmagnet/utils/navigation.js +0 -2
  822. package/dist/planmagnet/utils/qualityGateCriteria.js +0 -2
  823. package/dist/planmagnet/utils/rowNavigation.js +0 -2
  824. package/dist/planmagnet/utils/statusColor.js +0 -2
  825. package/dist/planmagnet/utils/urlParam.js +0 -2
  826. package/dist/planmagnet/webhooks/webhookTypes.js +0 -2
  827. package/dist/shared/hooks/useTr.js +0 -2
  828. package/dist/shared/utils/i18n.js +0 -2
  829. package/package.json +2 -1
  830. package/dist/_virtual/__vite-browser-external.js.map +0 -1
  831. package/dist/components/Button.d.ts.map +0 -1
  832. package/dist/components/Button.stories.d.ts.map +0 -1
  833. package/dist/components/MarkdownEditor.d.ts.map +0 -1
  834. package/dist/components/MarkdownEditor.js.map +0 -1
  835. package/dist/dev/main.d.ts.map +0 -1
  836. package/dist/generated/global-operations.d.ts.map +0 -1
  837. package/dist/generated/global-types.d.ts.map +0 -1
  838. package/dist/generated/wspace-operations.d.ts.map +0 -1
  839. package/dist/generated/wspace-types.d.ts.map +0 -1
  840. package/dist/index.d.ts.map +0 -1
  841. package/dist/node_modules/@apollo/client/errors/CombinedGraphQLErrors.js.map +0 -1
  842. package/dist/node_modules/@apollo/client/errors/ServerError.js.map +0 -1
  843. package/dist/node_modules/@apollo/client/errors/utils.js.map +0 -1
  844. package/dist/node_modules/clsx/dist/clsx.js.map +0 -1
  845. package/dist/node_modules/d3-array/src/ascending.js.map +0 -1
  846. package/dist/node_modules/d3-array/src/bisect.js.map +0 -1
  847. package/dist/node_modules/d3-array/src/bisector.js.map +0 -1
  848. package/dist/node_modules/d3-array/src/descending.js.map +0 -1
  849. package/dist/node_modules/d3-array/src/max.js.map +0 -1
  850. package/dist/node_modules/d3-array/src/min.js.map +0 -1
  851. package/dist/node_modules/d3-array/src/number.js.map +0 -1
  852. package/dist/node_modules/d3-array/src/quantile.js.map +0 -1
  853. package/dist/node_modules/d3-array/src/quickselect.js.map +0 -1
  854. package/dist/node_modules/d3-array/src/range.js.map +0 -1
  855. package/dist/node_modules/d3-array/src/sort.js.map +0 -1
  856. package/dist/node_modules/d3-array/src/ticks.js.map +0 -1
  857. package/dist/node_modules/d3-color/src/color.js.map +0 -1
  858. package/dist/node_modules/d3-color/src/define.js.map +0 -1
  859. package/dist/node_modules/d3-format/src/defaultLocale.js.map +0 -1
  860. package/dist/node_modules/d3-format/src/exponent.js.map +0 -1
  861. package/dist/node_modules/d3-format/src/formatDecimal.js.map +0 -1
  862. package/dist/node_modules/d3-format/src/formatGroup.js.map +0 -1
  863. package/dist/node_modules/d3-format/src/formatNumerals.js.map +0 -1
  864. package/dist/node_modules/d3-format/src/formatPrefixAuto.js.map +0 -1
  865. package/dist/node_modules/d3-format/src/formatRounded.js.map +0 -1
  866. package/dist/node_modules/d3-format/src/formatSpecifier.js.map +0 -1
  867. package/dist/node_modules/d3-format/src/formatTrim.js.map +0 -1
  868. package/dist/node_modules/d3-format/src/formatTypes.js.map +0 -1
  869. package/dist/node_modules/d3-format/src/identity.js.map +0 -1
  870. package/dist/node_modules/d3-format/src/locale.js.map +0 -1
  871. package/dist/node_modules/d3-format/src/precisionFixed.js.map +0 -1
  872. package/dist/node_modules/d3-format/src/precisionPrefix.js.map +0 -1
  873. package/dist/node_modules/d3-format/src/precisionRound.js.map +0 -1
  874. package/dist/node_modules/d3-interpolate/src/array.js.map +0 -1
  875. package/dist/node_modules/d3-interpolate/src/basis.js.map +0 -1
  876. package/dist/node_modules/d3-interpolate/src/basisClosed.js.map +0 -1
  877. package/dist/node_modules/d3-interpolate/src/color.js.map +0 -1
  878. package/dist/node_modules/d3-interpolate/src/constant.js.map +0 -1
  879. package/dist/node_modules/d3-interpolate/src/date.js.map +0 -1
  880. package/dist/node_modules/d3-interpolate/src/number.js.map +0 -1
  881. package/dist/node_modules/d3-interpolate/src/numberArray.js.map +0 -1
  882. package/dist/node_modules/d3-interpolate/src/object.js.map +0 -1
  883. package/dist/node_modules/d3-interpolate/src/piecewise.js.map +0 -1
  884. package/dist/node_modules/d3-interpolate/src/rgb.js.map +0 -1
  885. package/dist/node_modules/d3-interpolate/src/round.js.map +0 -1
  886. package/dist/node_modules/d3-interpolate/src/string.js.map +0 -1
  887. package/dist/node_modules/d3-interpolate/src/value.js.map +0 -1
  888. package/dist/node_modules/d3-path/src/path.js.map +0 -1
  889. package/dist/node_modules/d3-scale/src/band.js.map +0 -1
  890. package/dist/node_modules/d3-scale/src/constant.js.map +0 -1
  891. package/dist/node_modules/d3-scale/src/continuous.js.map +0 -1
  892. package/dist/node_modules/d3-scale/src/diverging.js.map +0 -1
  893. package/dist/node_modules/d3-scale/src/identity.js.map +0 -1
  894. package/dist/node_modules/d3-scale/src/init.js.map +0 -1
  895. package/dist/node_modules/d3-scale/src/linear.js.map +0 -1
  896. package/dist/node_modules/d3-scale/src/log.js.map +0 -1
  897. package/dist/node_modules/d3-scale/src/nice.js.map +0 -1
  898. package/dist/node_modules/d3-scale/src/number.js.map +0 -1
  899. package/dist/node_modules/d3-scale/src/ordinal.js.map +0 -1
  900. package/dist/node_modules/d3-scale/src/pow.js.map +0 -1
  901. package/dist/node_modules/d3-scale/src/quantile.js.map +0 -1
  902. package/dist/node_modules/d3-scale/src/quantize.js.map +0 -1
  903. package/dist/node_modules/d3-scale/src/radial.js.map +0 -1
  904. package/dist/node_modules/d3-scale/src/sequential.js.map +0 -1
  905. package/dist/node_modules/d3-scale/src/sequentialQuantile.js.map +0 -1
  906. package/dist/node_modules/d3-scale/src/symlog.js.map +0 -1
  907. package/dist/node_modules/d3-scale/src/threshold.js.map +0 -1
  908. package/dist/node_modules/d3-scale/src/tickFormat.js.map +0 -1
  909. package/dist/node_modules/d3-scale/src/time.js.map +0 -1
  910. package/dist/node_modules/d3-scale/src/utcTime.js.map +0 -1
  911. package/dist/node_modules/d3-shape/src/area.js.map +0 -1
  912. package/dist/node_modules/d3-shape/src/array.js.map +0 -1
  913. package/dist/node_modules/d3-shape/src/constant.js.map +0 -1
  914. package/dist/node_modules/d3-shape/src/curve/basis.js.map +0 -1
  915. package/dist/node_modules/d3-shape/src/curve/basisClosed.js.map +0 -1
  916. package/dist/node_modules/d3-shape/src/curve/basisOpen.js.map +0 -1
  917. package/dist/node_modules/d3-shape/src/curve/bump.js.map +0 -1
  918. package/dist/node_modules/d3-shape/src/curve/linear.js.map +0 -1
  919. package/dist/node_modules/d3-shape/src/curve/linearClosed.js.map +0 -1
  920. package/dist/node_modules/d3-shape/src/curve/monotone.js.map +0 -1
  921. package/dist/node_modules/d3-shape/src/curve/natural.js.map +0 -1
  922. package/dist/node_modules/d3-shape/src/curve/step.js.map +0 -1
  923. package/dist/node_modules/d3-shape/src/line.js.map +0 -1
  924. package/dist/node_modules/d3-shape/src/math.js.map +0 -1
  925. package/dist/node_modules/d3-shape/src/noop.js.map +0 -1
  926. package/dist/node_modules/d3-shape/src/offset/expand.js.map +0 -1
  927. package/dist/node_modules/d3-shape/src/offset/none.js.map +0 -1
  928. package/dist/node_modules/d3-shape/src/offset/silhouette.js.map +0 -1
  929. package/dist/node_modules/d3-shape/src/offset/wiggle.js.map +0 -1
  930. package/dist/node_modules/d3-shape/src/order/none.js.map +0 -1
  931. package/dist/node_modules/d3-shape/src/path.js.map +0 -1
  932. package/dist/node_modules/d3-shape/src/point.js.map +0 -1
  933. package/dist/node_modules/d3-shape/src/stack.js.map +0 -1
  934. package/dist/node_modules/d3-shape/src/symbol/circle.js.map +0 -1
  935. package/dist/node_modules/d3-shape/src/symbol/cross.js.map +0 -1
  936. package/dist/node_modules/d3-shape/src/symbol/diamond.js.map +0 -1
  937. package/dist/node_modules/d3-shape/src/symbol/square.js.map +0 -1
  938. package/dist/node_modules/d3-shape/src/symbol/star.js.map +0 -1
  939. package/dist/node_modules/d3-shape/src/symbol/triangle.js.map +0 -1
  940. package/dist/node_modules/d3-shape/src/symbol/wye.js.map +0 -1
  941. package/dist/node_modules/d3-shape/src/symbol.js.map +0 -1
  942. package/dist/node_modules/d3-time/src/day.js.map +0 -1
  943. package/dist/node_modules/d3-time/src/duration.js.map +0 -1
  944. package/dist/node_modules/d3-time/src/hour.js.map +0 -1
  945. package/dist/node_modules/d3-time/src/interval.js.map +0 -1
  946. package/dist/node_modules/d3-time/src/millisecond.js.map +0 -1
  947. package/dist/node_modules/d3-time/src/minute.js.map +0 -1
  948. package/dist/node_modules/d3-time/src/month.js.map +0 -1
  949. package/dist/node_modules/d3-time/src/second.js.map +0 -1
  950. package/dist/node_modules/d3-time/src/ticks.js.map +0 -1
  951. package/dist/node_modules/d3-time/src/week.js.map +0 -1
  952. package/dist/node_modules/d3-time/src/year.js.map +0 -1
  953. package/dist/node_modules/d3-time-format/src/defaultLocale.js.map +0 -1
  954. package/dist/node_modules/d3-time-format/src/locale.js.map +0 -1
  955. package/dist/node_modules/decimal.js-light/decimal.js.map +0 -1
  956. package/dist/node_modules/eventemitter3/index.js.map +0 -1
  957. package/dist/node_modules/fast-equals/dist/es/index.js.map +0 -1
  958. package/dist/node_modules/fflate/esm/browser.js.map +0 -1
  959. package/dist/node_modules/internmap/src/index.js.map +0 -1
  960. package/dist/node_modules/jszip/dist/jszip.min.js.map +0 -1
  961. package/dist/node_modules/lodash/_DataView.js.map +0 -1
  962. package/dist/node_modules/lodash/_Hash.js.map +0 -1
  963. package/dist/node_modules/lodash/_ListCache.js.map +0 -1
  964. package/dist/node_modules/lodash/_Map.js.map +0 -1
  965. package/dist/node_modules/lodash/_MapCache.js.map +0 -1
  966. package/dist/node_modules/lodash/_Promise.js.map +0 -1
  967. package/dist/node_modules/lodash/_Set.js.map +0 -1
  968. package/dist/node_modules/lodash/_SetCache.js.map +0 -1
  969. package/dist/node_modules/lodash/_Stack.js.map +0 -1
  970. package/dist/node_modules/lodash/_Symbol.js.map +0 -1
  971. package/dist/node_modules/lodash/_Uint8Array.js.map +0 -1
  972. package/dist/node_modules/lodash/_WeakMap.js.map +0 -1
  973. package/dist/node_modules/lodash/_apply.js.map +0 -1
  974. package/dist/node_modules/lodash/_arrayEach.js.map +0 -1
  975. package/dist/node_modules/lodash/_arrayEvery.js.map +0 -1
  976. package/dist/node_modules/lodash/_arrayFilter.js.map +0 -1
  977. package/dist/node_modules/lodash/_arrayIncludes.js.map +0 -1
  978. package/dist/node_modules/lodash/_arrayIncludesWith.js.map +0 -1
  979. package/dist/node_modules/lodash/_arrayLikeKeys.js.map +0 -1
  980. package/dist/node_modules/lodash/_arrayMap.js.map +0 -1
  981. package/dist/node_modules/lodash/_arrayPush.js.map +0 -1
  982. package/dist/node_modules/lodash/_arraySome.js.map +0 -1
  983. package/dist/node_modules/lodash/_asciiToArray.js.map +0 -1
  984. package/dist/node_modules/lodash/_assignValue.js.map +0 -1
  985. package/dist/node_modules/lodash/_assocIndexOf.js.map +0 -1
  986. package/dist/node_modules/lodash/_baseAssign.js.map +0 -1
  987. package/dist/node_modules/lodash/_baseAssignIn.js.map +0 -1
  988. package/dist/node_modules/lodash/_baseAssignValue.js.map +0 -1
  989. package/dist/node_modules/lodash/_baseClone.js.map +0 -1
  990. package/dist/node_modules/lodash/_baseCreate.js.map +0 -1
  991. package/dist/node_modules/lodash/_baseEach.js.map +0 -1
  992. package/dist/node_modules/lodash/_baseEvery.js.map +0 -1
  993. package/dist/node_modules/lodash/_baseExtremum.js.map +0 -1
  994. package/dist/node_modules/lodash/_baseFindIndex.js.map +0 -1
  995. package/dist/node_modules/lodash/_baseFlatten.js.map +0 -1
  996. package/dist/node_modules/lodash/_baseFor.js.map +0 -1
  997. package/dist/node_modules/lodash/_baseForOwn.js.map +0 -1
  998. package/dist/node_modules/lodash/_baseGet.js.map +0 -1
  999. package/dist/node_modules/lodash/_baseGetAllKeys.js.map +0 -1
  1000. package/dist/node_modules/lodash/_baseGetTag.js.map +0 -1
  1001. package/dist/node_modules/lodash/_baseGt.js.map +0 -1
  1002. package/dist/node_modules/lodash/_baseHasIn.js.map +0 -1
  1003. package/dist/node_modules/lodash/_baseIndexOf.js.map +0 -1
  1004. package/dist/node_modules/lodash/_baseIsArguments.js.map +0 -1
  1005. package/dist/node_modules/lodash/_baseIsEqual.js.map +0 -1
  1006. package/dist/node_modules/lodash/_baseIsEqualDeep.js.map +0 -1
  1007. package/dist/node_modules/lodash/_baseIsMap.js.map +0 -1
  1008. package/dist/node_modules/lodash/_baseIsMatch.js.map +0 -1
  1009. package/dist/node_modules/lodash/_baseIsNaN.js.map +0 -1
  1010. package/dist/node_modules/lodash/_baseIsNative.js.map +0 -1
  1011. package/dist/node_modules/lodash/_baseIsSet.js.map +0 -1
  1012. package/dist/node_modules/lodash/_baseIsTypedArray.js.map +0 -1
  1013. package/dist/node_modules/lodash/_baseIteratee.js.map +0 -1
  1014. package/dist/node_modules/lodash/_baseKeys.js.map +0 -1
  1015. package/dist/node_modules/lodash/_baseKeysIn.js.map +0 -1
  1016. package/dist/node_modules/lodash/_baseLt.js.map +0 -1
  1017. package/dist/node_modules/lodash/_baseMap.js.map +0 -1
  1018. package/dist/node_modules/lodash/_baseMatches.js.map +0 -1
  1019. package/dist/node_modules/lodash/_baseMatchesProperty.js.map +0 -1
  1020. package/dist/node_modules/lodash/_baseOrderBy.js.map +0 -1
  1021. package/dist/node_modules/lodash/_baseProperty.js.map +0 -1
  1022. package/dist/node_modules/lodash/_basePropertyDeep.js.map +0 -1
  1023. package/dist/node_modules/lodash/_baseRange.js.map +0 -1
  1024. package/dist/node_modules/lodash/_baseRest.js.map +0 -1
  1025. package/dist/node_modules/lodash/_baseSetToString.js.map +0 -1
  1026. package/dist/node_modules/lodash/_baseSlice.js.map +0 -1
  1027. package/dist/node_modules/lodash/_baseSome.js.map +0 -1
  1028. package/dist/node_modules/lodash/_baseSortBy.js.map +0 -1
  1029. package/dist/node_modules/lodash/_baseSum.js.map +0 -1
  1030. package/dist/node_modules/lodash/_baseTimes.js.map +0 -1
  1031. package/dist/node_modules/lodash/_baseToString.js.map +0 -1
  1032. package/dist/node_modules/lodash/_baseTrim.js.map +0 -1
  1033. package/dist/node_modules/lodash/_baseUnary.js.map +0 -1
  1034. package/dist/node_modules/lodash/_baseUniq.js.map +0 -1
  1035. package/dist/node_modules/lodash/_baseUnset.js.map +0 -1
  1036. package/dist/node_modules/lodash/_cacheHas.js.map +0 -1
  1037. package/dist/node_modules/lodash/_castPath.js.map +0 -1
  1038. package/dist/node_modules/lodash/_castSlice.js.map +0 -1
  1039. package/dist/node_modules/lodash/_cloneArrayBuffer.js.map +0 -1
  1040. package/dist/node_modules/lodash/_cloneBuffer.js.map +0 -1
  1041. package/dist/node_modules/lodash/_cloneDataView.js.map +0 -1
  1042. package/dist/node_modules/lodash/_cloneRegExp.js.map +0 -1
  1043. package/dist/node_modules/lodash/_cloneSymbol.js.map +0 -1
  1044. package/dist/node_modules/lodash/_cloneTypedArray.js.map +0 -1
  1045. package/dist/node_modules/lodash/_compareAscending.js.map +0 -1
  1046. package/dist/node_modules/lodash/_compareMultiple.js.map +0 -1
  1047. package/dist/node_modules/lodash/_copyArray.js.map +0 -1
  1048. package/dist/node_modules/lodash/_copyObject.js.map +0 -1
  1049. package/dist/node_modules/lodash/_copySymbols.js.map +0 -1
  1050. package/dist/node_modules/lodash/_copySymbolsIn.js.map +0 -1
  1051. package/dist/node_modules/lodash/_coreJsData.js.map +0 -1
  1052. package/dist/node_modules/lodash/_createBaseEach.js.map +0 -1
  1053. package/dist/node_modules/lodash/_createBaseFor.js.map +0 -1
  1054. package/dist/node_modules/lodash/_createCaseFirst.js.map +0 -1
  1055. package/dist/node_modules/lodash/_createFind.js.map +0 -1
  1056. package/dist/node_modules/lodash/_createRange.js.map +0 -1
  1057. package/dist/node_modules/lodash/_createSet.js.map +0 -1
  1058. package/dist/node_modules/lodash/_customOmitClone.js.map +0 -1
  1059. package/dist/node_modules/lodash/_defineProperty.js.map +0 -1
  1060. package/dist/node_modules/lodash/_equalArrays.js.map +0 -1
  1061. package/dist/node_modules/lodash/_equalByTag.js.map +0 -1
  1062. package/dist/node_modules/lodash/_equalObjects.js.map +0 -1
  1063. package/dist/node_modules/lodash/_flatRest.js.map +0 -1
  1064. package/dist/node_modules/lodash/_freeGlobal.js.map +0 -1
  1065. package/dist/node_modules/lodash/_getAllKeys.js.map +0 -1
  1066. package/dist/node_modules/lodash/_getAllKeysIn.js.map +0 -1
  1067. package/dist/node_modules/lodash/_getMapData.js.map +0 -1
  1068. package/dist/node_modules/lodash/_getMatchData.js.map +0 -1
  1069. package/dist/node_modules/lodash/_getNative.js.map +0 -1
  1070. package/dist/node_modules/lodash/_getPrototype.js.map +0 -1
  1071. package/dist/node_modules/lodash/_getRawTag.js.map +0 -1
  1072. package/dist/node_modules/lodash/_getSymbols.js.map +0 -1
  1073. package/dist/node_modules/lodash/_getSymbolsIn.js.map +0 -1
  1074. package/dist/node_modules/lodash/_getTag.js.map +0 -1
  1075. package/dist/node_modules/lodash/_getValue.js.map +0 -1
  1076. package/dist/node_modules/lodash/_hasPath.js.map +0 -1
  1077. package/dist/node_modules/lodash/_hasUnicode.js.map +0 -1
  1078. package/dist/node_modules/lodash/_hashClear.js.map +0 -1
  1079. package/dist/node_modules/lodash/_hashDelete.js.map +0 -1
  1080. package/dist/node_modules/lodash/_hashGet.js.map +0 -1
  1081. package/dist/node_modules/lodash/_hashHas.js.map +0 -1
  1082. package/dist/node_modules/lodash/_hashSet.js.map +0 -1
  1083. package/dist/node_modules/lodash/_initCloneArray.js.map +0 -1
  1084. package/dist/node_modules/lodash/_initCloneByTag.js.map +0 -1
  1085. package/dist/node_modules/lodash/_initCloneObject.js.map +0 -1
  1086. package/dist/node_modules/lodash/_isFlattenable.js.map +0 -1
  1087. package/dist/node_modules/lodash/_isIndex.js.map +0 -1
  1088. package/dist/node_modules/lodash/_isIterateeCall.js.map +0 -1
  1089. package/dist/node_modules/lodash/_isKey.js.map +0 -1
  1090. package/dist/node_modules/lodash/_isKeyable.js.map +0 -1
  1091. package/dist/node_modules/lodash/_isMasked.js.map +0 -1
  1092. package/dist/node_modules/lodash/_isPrototype.js.map +0 -1
  1093. package/dist/node_modules/lodash/_isStrictComparable.js.map +0 -1
  1094. package/dist/node_modules/lodash/_listCacheClear.js.map +0 -1
  1095. package/dist/node_modules/lodash/_listCacheDelete.js.map +0 -1
  1096. package/dist/node_modules/lodash/_listCacheGet.js.map +0 -1
  1097. package/dist/node_modules/lodash/_listCacheHas.js.map +0 -1
  1098. package/dist/node_modules/lodash/_listCacheSet.js.map +0 -1
  1099. package/dist/node_modules/lodash/_mapCacheClear.js.map +0 -1
  1100. package/dist/node_modules/lodash/_mapCacheDelete.js.map +0 -1
  1101. package/dist/node_modules/lodash/_mapCacheGet.js.map +0 -1
  1102. package/dist/node_modules/lodash/_mapCacheHas.js.map +0 -1
  1103. package/dist/node_modules/lodash/_mapCacheSet.js.map +0 -1
  1104. package/dist/node_modules/lodash/_mapToArray.js.map +0 -1
  1105. package/dist/node_modules/lodash/_matchesStrictComparable.js.map +0 -1
  1106. package/dist/node_modules/lodash/_memoizeCapped.js.map +0 -1
  1107. package/dist/node_modules/lodash/_nativeCreate.js.map +0 -1
  1108. package/dist/node_modules/lodash/_nativeKeys.js.map +0 -1
  1109. package/dist/node_modules/lodash/_nativeKeysIn.js.map +0 -1
  1110. package/dist/node_modules/lodash/_nodeUtil.js.map +0 -1
  1111. package/dist/node_modules/lodash/_objectToString.js.map +0 -1
  1112. package/dist/node_modules/lodash/_overArg.js.map +0 -1
  1113. package/dist/node_modules/lodash/_overRest.js.map +0 -1
  1114. package/dist/node_modules/lodash/_parent.js.map +0 -1
  1115. package/dist/node_modules/lodash/_root.js.map +0 -1
  1116. package/dist/node_modules/lodash/_setCacheAdd.js.map +0 -1
  1117. package/dist/node_modules/lodash/_setCacheHas.js.map +0 -1
  1118. package/dist/node_modules/lodash/_setToArray.js.map +0 -1
  1119. package/dist/node_modules/lodash/_setToString.js.map +0 -1
  1120. package/dist/node_modules/lodash/_shortOut.js.map +0 -1
  1121. package/dist/node_modules/lodash/_stackClear.js.map +0 -1
  1122. package/dist/node_modules/lodash/_stackDelete.js.map +0 -1
  1123. package/dist/node_modules/lodash/_stackGet.js.map +0 -1
  1124. package/dist/node_modules/lodash/_stackHas.js.map +0 -1
  1125. package/dist/node_modules/lodash/_stackSet.js.map +0 -1
  1126. package/dist/node_modules/lodash/_strictIndexOf.js.map +0 -1
  1127. package/dist/node_modules/lodash/_stringToArray.js.map +0 -1
  1128. package/dist/node_modules/lodash/_stringToPath.js.map +0 -1
  1129. package/dist/node_modules/lodash/_toKey.js.map +0 -1
  1130. package/dist/node_modules/lodash/_toSource.js.map +0 -1
  1131. package/dist/node_modules/lodash/_trimmedEndIndex.js.map +0 -1
  1132. package/dist/node_modules/lodash/_unicodeToArray.js.map +0 -1
  1133. package/dist/node_modules/lodash/constant.js.map +0 -1
  1134. package/dist/node_modules/lodash/debounce.js.map +0 -1
  1135. package/dist/node_modules/lodash/eq.js.map +0 -1
  1136. package/dist/node_modules/lodash/every.js.map +0 -1
  1137. package/dist/node_modules/lodash/find.js.map +0 -1
  1138. package/dist/node_modules/lodash/findIndex.js.map +0 -1
  1139. package/dist/node_modules/lodash/flatMap.js.map +0 -1
  1140. package/dist/node_modules/lodash/flatten.js.map +0 -1
  1141. package/dist/node_modules/lodash/get.js.map +0 -1
  1142. package/dist/node_modules/lodash/hasIn.js.map +0 -1
  1143. package/dist/node_modules/lodash/identity.js.map +0 -1
  1144. package/dist/node_modules/lodash/isArguments.js.map +0 -1
  1145. package/dist/node_modules/lodash/isArray.js.map +0 -1
  1146. package/dist/node_modules/lodash/isArrayLike.js.map +0 -1
  1147. package/dist/node_modules/lodash/isBoolean.js.map +0 -1
  1148. package/dist/node_modules/lodash/isBuffer.js.map +0 -1
  1149. package/dist/node_modules/lodash/isEqual.js.map +0 -1
  1150. package/dist/node_modules/lodash/isFunction.js.map +0 -1
  1151. package/dist/node_modules/lodash/isLength.js.map +0 -1
  1152. package/dist/node_modules/lodash/isMap.js.map +0 -1
  1153. package/dist/node_modules/lodash/isNaN.js.map +0 -1
  1154. package/dist/node_modules/lodash/isNil.js.map +0 -1
  1155. package/dist/node_modules/lodash/isNumber.js.map +0 -1
  1156. package/dist/node_modules/lodash/isObject.js.map +0 -1
  1157. package/dist/node_modules/lodash/isObjectLike.js.map +0 -1
  1158. package/dist/node_modules/lodash/isPlainObject.js.map +0 -1
  1159. package/dist/node_modules/lodash/isSet.js.map +0 -1
  1160. package/dist/node_modules/lodash/isString.js.map +0 -1
  1161. package/dist/node_modules/lodash/isSymbol.js.map +0 -1
  1162. package/dist/node_modules/lodash/isTypedArray.js.map +0 -1
  1163. package/dist/node_modules/lodash/keys.js.map +0 -1
  1164. package/dist/node_modules/lodash/keysIn.js.map +0 -1
  1165. package/dist/node_modules/lodash/last.js.map +0 -1
  1166. package/dist/node_modules/lodash/map.js.map +0 -1
  1167. package/dist/node_modules/lodash/mapValues.js.map +0 -1
  1168. package/dist/node_modules/lodash/max.js.map +0 -1
  1169. package/dist/node_modules/lodash/maxBy.js.map +0 -1
  1170. package/dist/node_modules/lodash/memoize.js.map +0 -1
  1171. package/dist/node_modules/lodash/min.js.map +0 -1
  1172. package/dist/node_modules/lodash/noop.js.map +0 -1
  1173. package/dist/node_modules/lodash/now.js.map +0 -1
  1174. package/dist/node_modules/lodash/omit.js.map +0 -1
  1175. package/dist/node_modules/lodash/property.js.map +0 -1
  1176. package/dist/node_modules/lodash/range.js.map +0 -1
  1177. package/dist/node_modules/lodash/some.js.map +0 -1
  1178. package/dist/node_modules/lodash/sortBy.js.map +0 -1
  1179. package/dist/node_modules/lodash/stubArray.js.map +0 -1
  1180. package/dist/node_modules/lodash/stubFalse.js.map +0 -1
  1181. package/dist/node_modules/lodash/sumBy.js.map +0 -1
  1182. package/dist/node_modules/lodash/throttle.js.map +0 -1
  1183. package/dist/node_modules/lodash/toFinite.js.map +0 -1
  1184. package/dist/node_modules/lodash/toInteger.js.map +0 -1
  1185. package/dist/node_modules/lodash/toNumber.js.map +0 -1
  1186. package/dist/node_modules/lodash/toString.js.map +0 -1
  1187. package/dist/node_modules/lodash/uniqBy.js.map +0 -1
  1188. package/dist/node_modules/lodash/upperFirst.js.map +0 -1
  1189. package/dist/node_modules/object-assign/index.js.map +0 -1
  1190. package/dist/node_modules/pptxgenjs/dist/pptxgen.es.js.map +0 -1
  1191. package/dist/node_modules/prop-types/checkPropTypes.js.map +0 -1
  1192. package/dist/node_modules/prop-types/factoryWithThrowingShims.js.map +0 -1
  1193. package/dist/node_modules/prop-types/factoryWithTypeCheckers.js.map +0 -1
  1194. package/dist/node_modules/prop-types/index.js.map +0 -1
  1195. package/dist/node_modules/prop-types/lib/ReactPropTypesSecret.js.map +0 -1
  1196. package/dist/node_modules/prop-types/lib/has.js.map +0 -1
  1197. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js.map +0 -1
  1198. package/dist/node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js.map +0 -1
  1199. package/dist/node_modules/prop-types/node_modules/react-is/index.js.map +0 -1
  1200. package/dist/node_modules/react-is/cjs/react-is.development.js.map +0 -1
  1201. package/dist/node_modules/react-is/cjs/react-is.production.min.js.map +0 -1
  1202. package/dist/node_modules/react-is/index.js.map +0 -1
  1203. package/dist/node_modules/react-smooth/es6/Animate.js.map +0 -1
  1204. package/dist/node_modules/react-smooth/es6/AnimateManager.js.map +0 -1
  1205. package/dist/node_modules/react-smooth/es6/configUpdate.js.map +0 -1
  1206. package/dist/node_modules/react-smooth/es6/easing.js.map +0 -1
  1207. package/dist/node_modules/react-smooth/es6/index.js.map +0 -1
  1208. package/dist/node_modules/react-smooth/es6/setRafTimeout.js.map +0 -1
  1209. package/dist/node_modules/react-smooth/es6/util.js.map +0 -1
  1210. package/dist/node_modules/recharts/es6/cartesian/Area.js.map +0 -1
  1211. package/dist/node_modules/recharts/es6/cartesian/Bar.js.map +0 -1
  1212. package/dist/node_modules/recharts/es6/cartesian/Brush.js.map +0 -1
  1213. package/dist/node_modules/recharts/es6/cartesian/CartesianAxis.js.map +0 -1
  1214. package/dist/node_modules/recharts/es6/cartesian/CartesianGrid.js.map +0 -1
  1215. package/dist/node_modules/recharts/es6/cartesian/ErrorBar.js.map +0 -1
  1216. package/dist/node_modules/recharts/es6/cartesian/Line.js.map +0 -1
  1217. package/dist/node_modules/recharts/es6/cartesian/ReferenceArea.js.map +0 -1
  1218. package/dist/node_modules/recharts/es6/cartesian/ReferenceDot.js.map +0 -1
  1219. package/dist/node_modules/recharts/es6/cartesian/ReferenceLine.js.map +0 -1
  1220. package/dist/node_modules/recharts/es6/cartesian/XAxis.js.map +0 -1
  1221. package/dist/node_modules/recharts/es6/cartesian/YAxis.js.map +0 -1
  1222. package/dist/node_modules/recharts/es6/cartesian/getEquidistantTicks.js.map +0 -1
  1223. package/dist/node_modules/recharts/es6/cartesian/getTicks.js.map +0 -1
  1224. package/dist/node_modules/recharts/es6/chart/AccessibilityManager.js.map +0 -1
  1225. package/dist/node_modules/recharts/es6/chart/AreaChart.js.map +0 -1
  1226. package/dist/node_modules/recharts/es6/chart/BarChart.js.map +0 -1
  1227. package/dist/node_modules/recharts/es6/chart/LineChart.js.map +0 -1
  1228. package/dist/node_modules/recharts/es6/chart/Sankey.js.map +0 -1
  1229. package/dist/node_modules/recharts/es6/chart/Treemap.js.map +0 -1
  1230. package/dist/node_modules/recharts/es6/chart/generateCategoricalChart.js.map +0 -1
  1231. package/dist/node_modules/recharts/es6/component/Cell.js.map +0 -1
  1232. package/dist/node_modules/recharts/es6/component/Cursor.js.map +0 -1
  1233. package/dist/node_modules/recharts/es6/component/DefaultLegendContent.js.map +0 -1
  1234. package/dist/node_modules/recharts/es6/component/DefaultTooltipContent.js.map +0 -1
  1235. package/dist/node_modules/recharts/es6/component/Label.js.map +0 -1
  1236. package/dist/node_modules/recharts/es6/component/LabelList.js.map +0 -1
  1237. package/dist/node_modules/recharts/es6/component/Legend.js.map +0 -1
  1238. package/dist/node_modules/recharts/es6/component/ResponsiveContainer.js.map +0 -1
  1239. package/dist/node_modules/recharts/es6/component/Text.js.map +0 -1
  1240. package/dist/node_modules/recharts/es6/component/Tooltip.js.map +0 -1
  1241. package/dist/node_modules/recharts/es6/component/TooltipBoundingBox.js.map +0 -1
  1242. package/dist/node_modules/recharts/es6/container/Layer.js.map +0 -1
  1243. package/dist/node_modules/recharts/es6/container/Surface.js.map +0 -1
  1244. package/dist/node_modules/recharts/es6/context/chartLayoutContext.js.map +0 -1
  1245. package/dist/node_modules/recharts/es6/shape/Cross.js.map +0 -1
  1246. package/dist/node_modules/recharts/es6/shape/Curve.js.map +0 -1
  1247. package/dist/node_modules/recharts/es6/shape/Dot.js.map +0 -1
  1248. package/dist/node_modules/recharts/es6/shape/Polygon.js.map +0 -1
  1249. package/dist/node_modules/recharts/es6/shape/Rectangle.js.map +0 -1
  1250. package/dist/node_modules/recharts/es6/shape/Sector.js.map +0 -1
  1251. package/dist/node_modules/recharts/es6/shape/Symbols.js.map +0 -1
  1252. package/dist/node_modules/recharts/es6/shape/Trapezoid.js.map +0 -1
  1253. package/dist/node_modules/recharts/es6/util/ActiveShapeUtils.js.map +0 -1
  1254. package/dist/node_modules/recharts/es6/util/BarUtils.js.map +0 -1
  1255. package/dist/node_modules/recharts/es6/util/CartesianUtils.js.map +0 -1
  1256. package/dist/node_modules/recharts/es6/util/ChartUtils.js.map +0 -1
  1257. package/dist/node_modules/recharts/es6/util/Constants.js.map +0 -1
  1258. package/dist/node_modules/recharts/es6/util/CssPrefixUtils.js.map +0 -1
  1259. package/dist/node_modules/recharts/es6/util/DOMUtils.js.map +0 -1
  1260. package/dist/node_modules/recharts/es6/util/DataUtils.js.map +0 -1
  1261. package/dist/node_modules/recharts/es6/util/DetectReferenceElementsDomain.js.map +0 -1
  1262. package/dist/node_modules/recharts/es6/util/Events.js.map +0 -1
  1263. package/dist/node_modules/recharts/es6/util/Global.js.map +0 -1
  1264. package/dist/node_modules/recharts/es6/util/IfOverflowMatches.js.map +0 -1
  1265. package/dist/node_modules/recharts/es6/util/LogUtils.js.map +0 -1
  1266. package/dist/node_modules/recharts/es6/util/PolarUtils.js.map +0 -1
  1267. package/dist/node_modules/recharts/es6/util/ReactUtils.js.map +0 -1
  1268. package/dist/node_modules/recharts/es6/util/ReduceCSSCalc.js.map +0 -1
  1269. package/dist/node_modules/recharts/es6/util/ShallowEqual.js.map +0 -1
  1270. package/dist/node_modules/recharts/es6/util/TickUtils.js.map +0 -1
  1271. package/dist/node_modules/recharts/es6/util/calculateViewBox.js.map +0 -1
  1272. package/dist/node_modules/recharts/es6/util/cursor/getCursorPoints.js.map +0 -1
  1273. package/dist/node_modules/recharts/es6/util/cursor/getCursorRectangle.js.map +0 -1
  1274. package/dist/node_modules/recharts/es6/util/cursor/getRadialCursorPoints.js.map +0 -1
  1275. package/dist/node_modules/recharts/es6/util/getEveryNthWithCondition.js.map +0 -1
  1276. package/dist/node_modules/recharts/es6/util/getLegendProps.js.map +0 -1
  1277. package/dist/node_modules/recharts/es6/util/isDomainSpecifiedByUser.js.map +0 -1
  1278. package/dist/node_modules/recharts/es6/util/payload/getUniqPayload.js.map +0 -1
  1279. package/dist/node_modules/recharts/es6/util/tooltip/translate.js.map +0 -1
  1280. package/dist/node_modules/recharts/es6/util/types.js.map +0 -1
  1281. package/dist/node_modules/recharts-scale/es6/getNiceTickValues.js.map +0 -1
  1282. package/dist/node_modules/recharts-scale/es6/util/arithmetic.js.map +0 -1
  1283. package/dist/node_modules/recharts-scale/es6/util/utils.js.map +0 -1
  1284. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +0 -1
  1285. package/dist/node_modules/tiny-invariant/dist/esm/tiny-invariant.js.map +0 -1
  1286. package/dist/node_modules/victory-vendor/es/d3-scale.js.map +0 -1
  1287. package/dist/node_modules/write-excel-file/modules/export/convertFileContentToUint8ArrayBrowser.js.map +0 -1
  1288. package/dist/node_modules/write-excel-file/modules/export/convertFilesContentToUint8Arrays.js.map +0 -1
  1289. package/dist/node_modules/write-excel-file/modules/export/downloadBlob.js.map +0 -1
  1290. package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileBrowser.js.map +0 -1
  1291. package/dist/node_modules/write-excel-file/modules/export/writeXlsxFileUniversal.js.map +0 -1
  1292. package/dist/node_modules/write-excel-file/modules/getSheetData/getSheetData.js.map +0 -1
  1293. package/dist/node_modules/write-excel-file/modules/xlsx/features/conditionalFormatting.js.map +0 -1
  1294. package/dist/node_modules/write-excel-file/modules/xlsx/features/images.js.map +0 -1
  1295. package/dist/node_modules/write-excel-file/modules/xlsx/features/stickyRowsOrColumns.js.map +0 -1
  1296. package/dist/node_modules/write-excel-file/modules/xlsx/files/_Content_Types_.xml.js.map +0 -1
  1297. package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.js.map +0 -1
  1298. package/dist/node_modules/write-excel-file/modules/xlsx/files/drawing.xml.rels.js.map +0 -1
  1299. package/dist/node_modules/write-excel-file/modules/xlsx/files/rels.js.map +0 -1
  1300. package/dist/node_modules/write-excel-file/modules/xlsx/files/sharedStrings.xml.js.map +0 -1
  1301. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/cell.js.map +0 -1
  1302. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/column.js.map +0 -1
  1303. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/columns.js.map +0 -1
  1304. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/drawingReference.js.map +0 -1
  1305. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/helpers/getCellStyleProperties.js.map +0 -1
  1306. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/mergedCellsDescription.js.map +0 -1
  1307. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageMargins.js.map +0 -1
  1308. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/pageSetup.js.map +0 -1
  1309. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/processMergedCells.js.map +0 -1
  1310. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/row.js.map +0 -1
  1311. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheet.xml.js.map +0 -1
  1312. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetData.js.map +0 -1
  1313. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml/sheetViews.js.map +0 -1
  1314. package/dist/node_modules/write-excel-file/modules/xlsx/files/sheet.xml.rels.js.map +0 -1
  1315. package/dist/node_modules/write-excel-file/modules/xlsx/files/styles.xml.js.map +0 -1
  1316. package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.js.map +0 -1
  1317. package/dist/node_modules/write-excel-file/modules/xlsx/files/workbook.xml.rels.js.map +0 -1
  1318. package/dist/node_modules/write-excel-file/modules/xlsx/generateXlsxFileContents.js.map +0 -1
  1319. package/dist/node_modules/write-excel-file/modules/xlsx/getFeatures.js.map +0 -1
  1320. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/convertDateToSerialNumber.js.map +0 -1
  1321. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getAdditionalContent.js.map +0 -1
  1322. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getElementXml.js.map +0 -1
  1323. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/getWrittenFiles.js.map +0 -1
  1324. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/features/transformContent.js.map +0 -1
  1325. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getAlignmentXml.js.map +0 -1
  1326. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getBorderXml.js.map +0 -1
  1327. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getCellAddress.js.map +0 -1
  1328. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFileExtensionForContentType.js.map +0 -1
  1329. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFillXml.js.map +0 -1
  1330. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getFontXml.js.map +0 -1
  1331. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getOrderOfSiblings.js.map +0 -1
  1332. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/getXlsxColorForHexColor.js.map +0 -1
  1333. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasAlignment.js.map +0 -1
  1334. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasBorder.js.map +0 -1
  1335. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFill.js.map +0 -1
  1336. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/hasFont.js.map +0 -1
  1337. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isCellObject.js.map +0 -1
  1338. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/isObject.js.map +0 -1
  1339. package/dist/node_modules/write-excel-file/modules/xlsx/helpers/orderOfSiblings.js.map +0 -1
  1340. package/dist/node_modules/write-excel-file/modules/xlsx/initializeSharedStrings.js.map +0 -1
  1341. package/dist/node_modules/write-excel-file/modules/xlsx/initializeSheets.js.map +0 -1
  1342. package/dist/node_modules/write-excel-file/modules/xlsx/initializeStyles.js.map +0 -1
  1343. package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetData.js.map +0 -1
  1344. package/dist/node_modules/write-excel-file/modules/xlsx/validateSheetName.js.map +0 -1
  1345. package/dist/node_modules/write-excel-file/modules/xml/appendMarkupInsideElement.js.map +0 -1
  1346. package/dist/node_modules/write-excel-file/modules/xml/applyEnclosingElementOffset.js.map +0 -1
  1347. package/dist/node_modules/write-excel-file/modules/xml/escapeXmlSpecialCharacters.js.map +0 -1
  1348. package/dist/node_modules/write-excel-file/modules/xml/findElement.js.map +0 -1
  1349. package/dist/node_modules/write-excel-file/modules/xml/findElementInsideElement.js.map +0 -1
  1350. package/dist/node_modules/write-excel-file/modules/xml/findElementsNonRecursive_.js.map +0 -1
  1351. package/dist/node_modules/write-excel-file/modules/xml/getAttributesString.js.map +0 -1
  1352. package/dist/node_modules/write-excel-file/modules/xml/getChildElements.js.map +0 -1
  1353. package/dist/node_modules/write-excel-file/modules/xml/getClosingTagMarkup.js.map +0 -1
  1354. package/dist/node_modules/write-excel-file/modules/xml/getMarkupInsideElement.js.map +0 -1
  1355. package/dist/node_modules/write-excel-file/modules/xml/getOpeningTagMarkup.js.map +0 -1
  1356. package/dist/node_modules/write-excel-file/modules/xml/getSelfClosingTagMarkup.js.map +0 -1
  1357. package/dist/node_modules/write-excel-file/modules/xml/insertElementMarkupAccordingToOrderOfSiblings.js.map +0 -1
  1358. package/dist/node_modules/write-excel-file/modules/xml/prependMarkupInsideElement.js.map +0 -1
  1359. package/dist/node_modules/write-excel-file/modules/xml/removeInvalidXmlCharacters.js.map +0 -1
  1360. package/dist/node_modules/write-excel-file/modules/xml/replaceElement.js.map +0 -1
  1361. package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeName.js.map +0 -1
  1362. package/dist/node_modules/write-excel-file/modules/xml/sanitizeAttributeValue.js.map +0 -1
  1363. package/dist/node_modules/write-excel-file/modules/xml/sanitizeTextContent.js.map +0 -1
  1364. package/dist/node_modules/write-excel-file/modules/xml/setMarkupInsideElement.js.map +0 -1
  1365. package/dist/node_modules/write-excel-file/modules/zip/zipToArrayBuffer.js.map +0 -1
  1366. package/dist/planmagnet/PlanMagnetRoot.d.ts.map +0 -1
  1367. package/dist/planmagnet/PlanMagnetRoot.js.map +0 -1
  1368. package/dist/planmagnet/PlanMagnetRoutes.d.ts.map +0 -1
  1369. package/dist/planmagnet/PlanMagnetRoutes.js.map +0 -1
  1370. package/dist/planmagnet/activity/activityDescribe.d.ts.map +0 -1
  1371. package/dist/planmagnet/activity/activityDescribe.js.map +0 -1
  1372. package/dist/planmagnet/activity/relativeTime.d.ts.map +0 -1
  1373. package/dist/planmagnet/activity/relativeTime.js.map +0 -1
  1374. package/dist/planmagnet/admin/PlanMagnetAdminRoot.d.ts.map +0 -1
  1375. package/dist/planmagnet/admin/PlanMagnetAdminRoot.js.map +0 -1
  1376. package/dist/planmagnet/automation/AutomationExecutionsPanel.d.ts.map +0 -1
  1377. package/dist/planmagnet/automation/AutomationExecutionsPanel.js.map +0 -1
  1378. package/dist/planmagnet/automation/AutomationRuleFields.d.ts.map +0 -1
  1379. package/dist/planmagnet/automation/AutomationRuleFields.js.map +0 -1
  1380. package/dist/planmagnet/automation/automationRuleTypes.d.ts.map +0 -1
  1381. package/dist/planmagnet/automation/automationRuleTypes.js.map +0 -1
  1382. package/dist/planmagnet/board/BoardViewBar.d.ts.map +0 -1
  1383. package/dist/planmagnet/board/BoardViewBar.js.map +0 -1
  1384. package/dist/planmagnet/board/BulkActions.d.ts.map +0 -1
  1385. package/dist/planmagnet/board/BulkActions.js.map +0 -1
  1386. package/dist/planmagnet/board/ProjectBoard.d.ts.map +0 -1
  1387. package/dist/planmagnet/board/ProjectBoard.js.map +0 -1
  1388. package/dist/planmagnet/board/boardViewConfig.d.ts.map +0 -1
  1389. package/dist/planmagnet/board/boardViewConfig.js.map +0 -1
  1390. package/dist/planmagnet/budgets/BudgetControls.d.ts.map +0 -1
  1391. package/dist/planmagnet/budgets/BudgetControls.js.map +0 -1
  1392. package/dist/planmagnet/budgets/ExpenseControls.d.ts.map +0 -1
  1393. package/dist/planmagnet/budgets/ExpenseControls.js.map +0 -1
  1394. package/dist/planmagnet/budgets/ProjectBudgetsSummary.d.ts.map +0 -1
  1395. package/dist/planmagnet/budgets/ProjectBudgetsSummary.js.map +0 -1
  1396. package/dist/planmagnet/budgets/budgetMath.d.ts.map +0 -1
  1397. package/dist/planmagnet/budgets/budgetMath.js.map +0 -1
  1398. package/dist/planmagnet/comments/CommentAttachmentUpload.d.ts.map +0 -1
  1399. package/dist/planmagnet/comments/CommentAttachmentUpload.js.map +0 -1
  1400. package/dist/planmagnet/comments/CommentAttachments.d.ts.map +0 -1
  1401. package/dist/planmagnet/comments/CommentAttachments.js.map +0 -1
  1402. package/dist/planmagnet/comments/CommentBody.d.ts.map +0 -1
  1403. package/dist/planmagnet/comments/CommentBody.js.map +0 -1
  1404. package/dist/planmagnet/comments/CommentThread.d.ts.map +0 -1
  1405. package/dist/planmagnet/comments/CommentThread.js.map +0 -1
  1406. package/dist/planmagnet/comments/MentionComposer.d.ts.map +0 -1
  1407. package/dist/planmagnet/comments/MentionComposer.js.map +0 -1
  1408. package/dist/planmagnet/comments/RoadmapComments.d.ts.map +0 -1
  1409. package/dist/planmagnet/comments/RoadmapComments.js.map +0 -1
  1410. package/dist/planmagnet/comments/TargetComments.d.ts.map +0 -1
  1411. package/dist/planmagnet/comments/TargetComments.js.map +0 -1
  1412. package/dist/planmagnet/comments/WorkItemActivity.d.ts.map +0 -1
  1413. package/dist/planmagnet/comments/WorkItemActivity.js.map +0 -1
  1414. package/dist/planmagnet/comments/WorkItemComments.d.ts.map +0 -1
  1415. package/dist/planmagnet/comments/WorkItemComments.js.map +0 -1
  1416. package/dist/planmagnet/comments/commentAttachmentUploadClient.d.ts.map +0 -1
  1417. package/dist/planmagnet/comments/commentAttachmentUploadClient.js.map +0 -1
  1418. package/dist/planmagnet/comments/commentImageTokens.d.ts.map +0 -1
  1419. package/dist/planmagnet/comments/commentImageTokens.js.map +0 -1
  1420. package/dist/planmagnet/comments/commentTokens.d.ts.map +0 -1
  1421. package/dist/planmagnet/comments/commentTokens.js.map +0 -1
  1422. package/dist/planmagnet/comments/fileDisplay.d.ts.map +0 -1
  1423. package/dist/planmagnet/comments/fileDisplay.js.map +0 -1
  1424. package/dist/planmagnet/comments/useCommentFileUrl.d.ts.map +0 -1
  1425. package/dist/planmagnet/comments/useCommentFileUrl.js.map +0 -1
  1426. package/dist/planmagnet/controls/AutomationRuleControls.d.ts.map +0 -1
  1427. package/dist/planmagnet/controls/AutomationRuleControls.js.map +0 -1
  1428. package/dist/planmagnet/controls/CompetitorControls.d.ts.map +0 -1
  1429. package/dist/planmagnet/controls/CompetitorControls.js.map +0 -1
  1430. package/dist/planmagnet/controls/ConfirmButton.d.ts.map +0 -1
  1431. package/dist/planmagnet/controls/ConfirmButton.js.map +0 -1
  1432. package/dist/planmagnet/controls/CustomFieldControls.d.ts.map +0 -1
  1433. package/dist/planmagnet/controls/CustomFieldControls.js.map +0 -1
  1434. package/dist/planmagnet/controls/CustomFieldValuesPanel.d.ts.map +0 -1
  1435. package/dist/planmagnet/controls/CustomFieldValuesPanel.js.map +0 -1
  1436. package/dist/planmagnet/controls/FeatureControls.d.ts.map +0 -1
  1437. package/dist/planmagnet/controls/FeatureControls.js.map +0 -1
  1438. package/dist/planmagnet/controls/FeatureTriage.d.ts.map +0 -1
  1439. package/dist/planmagnet/controls/FeatureTriage.js.map +0 -1
  1440. package/dist/planmagnet/controls/FeedbackControls.d.ts.map +0 -1
  1441. package/dist/planmagnet/controls/FeedbackControls.js.map +0 -1
  1442. package/dist/planmagnet/controls/LiveStatus.d.ts.map +0 -1
  1443. package/dist/planmagnet/controls/LiveStatus.js.map +0 -1
  1444. package/dist/planmagnet/controls/MilestoneControls.d.ts.map +0 -1
  1445. package/dist/planmagnet/controls/MilestoneControls.js.map +0 -1
  1446. package/dist/planmagnet/controls/ObjectiveControls.d.ts.map +0 -1
  1447. package/dist/planmagnet/controls/ObjectiveControls.js.map +0 -1
  1448. package/dist/planmagnet/controls/Pickers.d.ts.map +0 -1
  1449. package/dist/planmagnet/controls/Pickers.js.map +0 -1
  1450. package/dist/planmagnet/controls/PortfolioControls.d.ts.map +0 -1
  1451. package/dist/planmagnet/controls/PortfolioControls.js.map +0 -1
  1452. package/dist/planmagnet/controls/PrioritizationControls.d.ts.map +0 -1
  1453. package/dist/planmagnet/controls/PrioritizationControls.js.map +0 -1
  1454. package/dist/planmagnet/controls/ProgramControls.d.ts.map +0 -1
  1455. package/dist/planmagnet/controls/ProgramControls.js.map +0 -1
  1456. package/dist/planmagnet/controls/ProjectControls.d.ts.map +0 -1
  1457. package/dist/planmagnet/controls/ProjectControls.js.map +0 -1
  1458. package/dist/planmagnet/controls/QualityGateControls.d.ts.map +0 -1
  1459. package/dist/planmagnet/controls/QualityGateControls.js.map +0 -1
  1460. package/dist/planmagnet/controls/ReleaseControls.d.ts.map +0 -1
  1461. package/dist/planmagnet/controls/ReleaseControls.js.map +0 -1
  1462. package/dist/planmagnet/controls/RiskControls.d.ts.map +0 -1
  1463. package/dist/planmagnet/controls/RiskControls.js.map +0 -1
  1464. package/dist/planmagnet/controls/SyncControls.d.ts.map +0 -1
  1465. package/dist/planmagnet/controls/SyncControls.js.map +0 -1
  1466. package/dist/planmagnet/controls/TemplateControls.d.ts.map +0 -1
  1467. package/dist/planmagnet/controls/TemplateControls.js.map +0 -1
  1468. package/dist/planmagnet/controls/WebhookSubscriptionControls.d.ts.map +0 -1
  1469. package/dist/planmagnet/controls/WebhookSubscriptionControls.js.map +0 -1
  1470. package/dist/planmagnet/controls/WorkItemControls.d.ts.map +0 -1
  1471. package/dist/planmagnet/controls/WorkItemControls.js.map +0 -1
  1472. package/dist/planmagnet/create/CreateDialogs.d.ts.map +0 -1
  1473. package/dist/planmagnet/create/CreateDialogs.js.map +0 -1
  1474. package/dist/planmagnet/dashboards/DashboardUI.d.ts.map +0 -1
  1475. package/dist/planmagnet/dashboards/DashboardUI.js.map +0 -1
  1476. package/dist/planmagnet/dashboards/cards/DeliveryTimelineCard.d.ts.map +0 -1
  1477. package/dist/planmagnet/dashboards/cards/DeliveryTimelineCard.js.map +0 -1
  1478. package/dist/planmagnet/dashboards/cards/ObjectivesProgressCard.d.ts.map +0 -1
  1479. package/dist/planmagnet/dashboards/cards/ObjectivesProgressCard.js.map +0 -1
  1480. package/dist/planmagnet/dashboards/cards/PortfolioHealthCard.d.ts.map +0 -1
  1481. package/dist/planmagnet/dashboards/cards/PortfolioHealthCard.js.map +0 -1
  1482. package/dist/planmagnet/dashboards/cards/QualityMetricsCard.d.ts.map +0 -1
  1483. package/dist/planmagnet/dashboards/cards/QualityMetricsCard.js.map +0 -1
  1484. package/dist/planmagnet/dashboards/cards/RiskSeverityCard.d.ts.map +0 -1
  1485. package/dist/planmagnet/dashboards/cards/RiskSeverityCard.js.map +0 -1
  1486. package/dist/planmagnet/dashboards/cards/RoadmapHorizonCard.d.ts.map +0 -1
  1487. package/dist/planmagnet/dashboards/cards/RoadmapHorizonCard.js.map +0 -1
  1488. package/dist/planmagnet/dashboards/cards/SprintCapacityCard.d.ts.map +0 -1
  1489. package/dist/planmagnet/dashboards/cards/SprintCapacityCard.js.map +0 -1
  1490. package/dist/planmagnet/dashboards/cards/TaskCompletionCard.d.ts.map +0 -1
  1491. package/dist/planmagnet/dashboards/cards/TaskCompletionCard.js.map +0 -1
  1492. package/dist/planmagnet/dashboards/cards/TeamCapacityCard.d.ts.map +0 -1
  1493. package/dist/planmagnet/dashboards/cards/TeamCapacityCard.js.map +0 -1
  1494. package/dist/planmagnet/dashboards/cards/TeamOverviewCard.d.ts.map +0 -1
  1495. package/dist/planmagnet/dashboards/cards/TeamOverviewCard.js.map +0 -1
  1496. package/dist/planmagnet/dashboards/cards/TeamWorkloadCard.d.ts.map +0 -1
  1497. package/dist/planmagnet/dashboards/cards/TeamWorkloadCard.js.map +0 -1
  1498. package/dist/planmagnet/dashboards/cards/TimeLoggedCard.d.ts.map +0 -1
  1499. package/dist/planmagnet/dashboards/cards/TimeLoggedCard.js.map +0 -1
  1500. package/dist/planmagnet/dependency/DependencyGraph.d.ts.map +0 -1
  1501. package/dist/planmagnet/dependency/DependencyGraph.js.map +0 -1
  1502. package/dist/planmagnet/dependency/DependencyPanel.d.ts.map +0 -1
  1503. package/dist/planmagnet/dependency/DependencyPanel.js.map +0 -1
  1504. package/dist/planmagnet/dependency/GanttChart.d.ts.map +0 -1
  1505. package/dist/planmagnet/dependency/GanttChart.js.map +0 -1
  1506. package/dist/planmagnet/dependency/useProjectWorkItemsGraph.d.ts.map +0 -1
  1507. package/dist/planmagnet/dependency/useProjectWorkItemsGraph.js.map +0 -1
  1508. package/dist/planmagnet/discussion/WorkItemDiscussionPanel.d.ts.map +0 -1
  1509. package/dist/planmagnet/discussion/WorkItemDiscussionPanel.js.map +0 -1
  1510. package/dist/planmagnet/docs/DocDiffView.d.ts.map +0 -1
  1511. package/dist/planmagnet/docs/DocDiffView.js.map +0 -1
  1512. package/dist/planmagnet/docs/DocStatusBadge.d.ts.map +0 -1
  1513. package/dist/planmagnet/docs/DocStatusBadge.js.map +0 -1
  1514. package/dist/planmagnet/docs/DocSuggestionsPanel.d.ts.map +0 -1
  1515. package/dist/planmagnet/docs/DocSuggestionsPanel.js.map +0 -1
  1516. package/dist/planmagnet/docs/DocVersionCompare.d.ts.map +0 -1
  1517. package/dist/planmagnet/docs/DocVersionCompare.js.map +0 -1
  1518. package/dist/planmagnet/export/ExportWorkItemsButton.d.ts.map +0 -1
  1519. package/dist/planmagnet/export/ExportWorkItemsButton.js.map +0 -1
  1520. package/dist/planmagnet/export/workItemsCsv.d.ts.map +0 -1
  1521. package/dist/planmagnet/export/workItemsCsv.js.map +0 -1
  1522. package/dist/planmagnet/forecast/DeliveryForecastCard.d.ts.map +0 -1
  1523. package/dist/planmagnet/forecast/DeliveryForecastCard.js.map +0 -1
  1524. package/dist/planmagnet/forecast/ProjectOutlookCard.d.ts.map +0 -1
  1525. package/dist/planmagnet/forecast/ProjectOutlookCard.js.map +0 -1
  1526. package/dist/planmagnet/forecast/ProjectRiskSummaryCard.d.ts.map +0 -1
  1527. package/dist/planmagnet/forecast/ProjectRiskSummaryCard.js.map +0 -1
  1528. package/dist/planmagnet/forecast/ResourceForecastCard.d.ts.map +0 -1
  1529. package/dist/planmagnet/forecast/ResourceForecastCard.js.map +0 -1
  1530. package/dist/planmagnet/forecast/riskFlags.d.ts.map +0 -1
  1531. package/dist/planmagnet/forecast/riskFlags.js.map +0 -1
  1532. package/dist/planmagnet/hooks/useCounts.d.ts.map +0 -1
  1533. package/dist/planmagnet/hooks/useCounts.js.map +0 -1
  1534. package/dist/planmagnet/hooks/useEntityId.d.ts.map +0 -1
  1535. package/dist/planmagnet/hooks/useEntityId.js.map +0 -1
  1536. package/dist/planmagnet/hooks/useLiveRefresh.d.ts.map +0 -1
  1537. package/dist/planmagnet/hooks/useLiveRefresh.js.map +0 -1
  1538. package/dist/planmagnet/hooks/usePresence.d.ts.map +0 -1
  1539. package/dist/planmagnet/hooks/usePresence.js.map +0 -1
  1540. package/dist/planmagnet/hooks/useProjectWorkflow.d.ts.map +0 -1
  1541. package/dist/planmagnet/hooks/useProjectWorkflow.js.map +0 -1
  1542. package/dist/planmagnet/import/exportColumns.d.ts.map +0 -1
  1543. package/dist/planmagnet/import/exportColumns.js.map +0 -1
  1544. package/dist/planmagnet/index.d.ts.map +0 -1
  1545. package/dist/planmagnet/integrations/routes.d.ts.map +0 -1
  1546. package/dist/planmagnet/integrations/routes.js.map +0 -1
  1547. package/dist/planmagnet/integrations/syncTypes.d.ts.map +0 -1
  1548. package/dist/planmagnet/integrations/syncTypes.js.map +0 -1
  1549. package/dist/planmagnet/integrations/useSyncProviderCapabilities.d.ts.map +0 -1
  1550. package/dist/planmagnet/integrations/useSyncProviderCapabilities.js.map +0 -1
  1551. package/dist/planmagnet/links/CodeLinksPanel.d.ts.map +0 -1
  1552. package/dist/planmagnet/links/CodeLinksPanel.js.map +0 -1
  1553. package/dist/planmagnet/links/IssueLinksPanel.d.ts.map +0 -1
  1554. package/dist/planmagnet/links/IssueLinksPanel.js.map +0 -1
  1555. package/dist/planmagnet/meetings/MeetingActionItemsPanel.d.ts.map +0 -1
  1556. package/dist/planmagnet/meetings/MeetingActionItemsPanel.js.map +0 -1
  1557. package/dist/planmagnet/meetings/MeetingsCard.d.ts.map +0 -1
  1558. package/dist/planmagnet/meetings/MeetingsCard.js.map +0 -1
  1559. package/dist/planmagnet/meetings/ScheduleCeremoniesDialog.d.ts.map +0 -1
  1560. package/dist/planmagnet/meetings/ScheduleCeremoniesDialog.js.map +0 -1
  1561. package/dist/planmagnet/meetings/ScheduleMeetingDialog.d.ts.map +0 -1
  1562. package/dist/planmagnet/meetings/ScheduleMeetingDialog.js.map +0 -1
  1563. package/dist/planmagnet/meetings/UnlinkMeetingDialog.d.ts.map +0 -1
  1564. package/dist/planmagnet/meetings/UnlinkMeetingDialog.js.map +0 -1
  1565. package/dist/planmagnet/meetings/meetingActions.d.ts.map +0 -1
  1566. package/dist/planmagnet/meetings/meetingActions.js.map +0 -1
  1567. package/dist/planmagnet/meetings/meetingGraphql.d.ts.map +0 -1
  1568. package/dist/planmagnet/meetings/meetingGraphql.js.map +0 -1
  1569. package/dist/planmagnet/meetings/meetingModel.d.ts.map +0 -1
  1570. package/dist/planmagnet/meetings/meetingModel.js.map +0 -1
  1571. package/dist/planmagnet/milestones/MilestoneControls.d.ts.map +0 -1
  1572. package/dist/planmagnet/milestones/MilestoneControls.js.map +0 -1
  1573. package/dist/planmagnet/pages/ActivityActivityPagePage.d.ts.map +0 -1
  1574. package/dist/planmagnet/pages/ActivityActivityPagePage.js.map +0 -1
  1575. package/dist/planmagnet/pages/AiActivityPagePage.d.ts.map +0 -1
  1576. package/dist/planmagnet/pages/AiActivityPagePage.js.map +0 -1
  1577. package/dist/planmagnet/pages/AiPlanPagePage.d.ts.map +0 -1
  1578. package/dist/planmagnet/pages/AiPlanPagePage.js.map +0 -1
  1579. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.d.ts.map +0 -1
  1580. package/dist/planmagnet/pages/AnalyticsAnalyticsPagePage.js.map +0 -1
  1581. package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.d.ts.map +0 -1
  1582. package/dist/planmagnet/pages/AutomationAutomationRuleDetailPagePage.js.map +0 -1
  1583. package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.d.ts.map +0 -1
  1584. package/dist/planmagnet/pages/AutomationAutomationRulesPagePage.js.map +0 -1
  1585. package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.d.ts.map +0 -1
  1586. package/dist/planmagnet/pages/AutomationCreateAutomationRulePagePage.js.map +0 -1
  1587. package/dist/planmagnet/pages/CompetitorsCompetitorDetailPagePage.d.ts.map +0 -1
  1588. package/dist/planmagnet/pages/CompetitorsCompetitorDetailPagePage.js.map +0 -1
  1589. package/dist/planmagnet/pages/CompetitorsCompetitorsPagePage.d.ts.map +0 -1
  1590. package/dist/planmagnet/pages/CompetitorsCompetitorsPagePage.js.map +0 -1
  1591. package/dist/planmagnet/pages/CompetitorsCreateCompetitorPagePage.d.ts.map +0 -1
  1592. package/dist/planmagnet/pages/CompetitorsCreateCompetitorPagePage.js.map +0 -1
  1593. package/dist/planmagnet/pages/CompetitorsEditCompetitorPagePage.d.ts.map +0 -1
  1594. package/dist/planmagnet/pages/CompetitorsEditCompetitorPagePage.js.map +0 -1
  1595. package/dist/planmagnet/pages/DashboardDashboardPagePage.d.ts.map +0 -1
  1596. package/dist/planmagnet/pages/DashboardDashboardPagePage.js.map +0 -1
  1597. package/dist/planmagnet/pages/DashboardsExecutivePagePage.d.ts.map +0 -1
  1598. package/dist/planmagnet/pages/DashboardsExecutivePagePage.js.map +0 -1
  1599. package/dist/planmagnet/pages/DashboardsLeadershipPagePage.d.ts.map +0 -1
  1600. package/dist/planmagnet/pages/DashboardsLeadershipPagePage.js.map +0 -1
  1601. package/dist/planmagnet/pages/DashboardsProjectManagerPagePage.d.ts.map +0 -1
  1602. package/dist/planmagnet/pages/DashboardsProjectManagerPagePage.js.map +0 -1
  1603. package/dist/planmagnet/pages/DashboardsTeamUtilizationPagePage.d.ts.map +0 -1
  1604. package/dist/planmagnet/pages/DashboardsTeamUtilizationPagePage.js.map +0 -1
  1605. package/dist/planmagnet/pages/DocsDocDetailPagePage.d.ts.map +0 -1
  1606. package/dist/planmagnet/pages/DocsDocDetailPagePage.js.map +0 -1
  1607. package/dist/planmagnet/pages/DocsDocsPagePage.d.ts.map +0 -1
  1608. package/dist/planmagnet/pages/DocsDocsPagePage.js.map +0 -1
  1609. package/dist/planmagnet/pages/GoalsCreateObjectivePagePage.d.ts.map +0 -1
  1610. package/dist/planmagnet/pages/GoalsCreateObjectivePagePage.js.map +0 -1
  1611. package/dist/planmagnet/pages/GoalsGoalsPagePage.d.ts.map +0 -1
  1612. package/dist/planmagnet/pages/GoalsGoalsPagePage.js.map +0 -1
  1613. package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.d.ts.map +0 -1
  1614. package/dist/planmagnet/pages/GoalsObjectiveDetailPagePage.js.map +0 -1
  1615. package/dist/planmagnet/pages/IntegrationsNewSyncPagePage.d.ts.map +0 -1
  1616. package/dist/planmagnet/pages/IntegrationsNewSyncPagePage.js.map +0 -1
  1617. package/dist/planmagnet/pages/IntegrationsSyncDetailPagePage.d.ts.map +0 -1
  1618. package/dist/planmagnet/pages/IntegrationsSyncDetailPagePage.js.map +0 -1
  1619. package/dist/planmagnet/pages/IntegrationsSyncsPagePage.d.ts.map +0 -1
  1620. package/dist/planmagnet/pages/IntegrationsSyncsPagePage.js.map +0 -1
  1621. package/dist/planmagnet/pages/IntegrationsWebhooksPagePage.d.ts.map +0 -1
  1622. package/dist/planmagnet/pages/IntegrationsWebhooksPagePage.js.map +0 -1
  1623. package/dist/planmagnet/pages/MeetingsMeetingDetailPagePage.d.ts.map +0 -1
  1624. package/dist/planmagnet/pages/MeetingsMeetingDetailPagePage.js.map +0 -1
  1625. package/dist/planmagnet/pages/MeetingsMeetingsPagePage.d.ts.map +0 -1
  1626. package/dist/planmagnet/pages/MeetingsMeetingsPagePage.js.map +0 -1
  1627. package/dist/planmagnet/pages/NotFoundPage.d.ts.map +0 -1
  1628. package/dist/planmagnet/pages/NotFoundPage.js.map +0 -1
  1629. package/dist/planmagnet/pages/PortfoliosCreatePortfolioPagePage.d.ts.map +0 -1
  1630. package/dist/planmagnet/pages/PortfoliosCreatePortfolioPagePage.js.map +0 -1
  1631. package/dist/planmagnet/pages/PortfoliosEditPortfolioPagePage.d.ts.map +0 -1
  1632. package/dist/planmagnet/pages/PortfoliosEditPortfolioPagePage.js.map +0 -1
  1633. package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.d.ts.map +0 -1
  1634. package/dist/planmagnet/pages/PortfoliosPortfolioDetailPagePage.js.map +0 -1
  1635. package/dist/planmagnet/pages/PortfoliosPortfoliosPagePage.d.ts.map +0 -1
  1636. package/dist/planmagnet/pages/PortfoliosPortfoliosPagePage.js.map +0 -1
  1637. package/dist/planmagnet/pages/ProductsCreateProductPagePage.d.ts.map +0 -1
  1638. package/dist/planmagnet/pages/ProductsCreateProductPagePage.js.map +0 -1
  1639. package/dist/planmagnet/pages/ProductsCreateRoadmapPagePage.d.ts.map +0 -1
  1640. package/dist/planmagnet/pages/ProductsCreateRoadmapPagePage.js.map +0 -1
  1641. package/dist/planmagnet/pages/ProductsCustomerSatisfactionPagePage.d.ts.map +0 -1
  1642. package/dist/planmagnet/pages/ProductsCustomerSatisfactionPagePage.js.map +0 -1
  1643. package/dist/planmagnet/pages/ProductsEditProductPagePage.d.ts.map +0 -1
  1644. package/dist/planmagnet/pages/ProductsEditProductPagePage.js.map +0 -1
  1645. package/dist/planmagnet/pages/ProductsEditReleasePagePage.d.ts.map +0 -1
  1646. package/dist/planmagnet/pages/ProductsEditReleasePagePage.js.map +0 -1
  1647. package/dist/planmagnet/pages/ProductsEditRoadmapPagePage.d.ts.map +0 -1
  1648. package/dist/planmagnet/pages/ProductsEditRoadmapPagePage.js.map +0 -1
  1649. package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.d.ts.map +0 -1
  1650. package/dist/planmagnet/pages/ProductsFeatureAnalyticsPagePage.js.map +0 -1
  1651. package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.d.ts.map +0 -1
  1652. package/dist/planmagnet/pages/ProductsFeatureDetailPagePage.js.map +0 -1
  1653. package/dist/planmagnet/pages/ProductsFeaturesPagePage.d.ts.map +0 -1
  1654. package/dist/planmagnet/pages/ProductsFeaturesPagePage.js.map +0 -1
  1655. package/dist/planmagnet/pages/ProductsNewFeaturePagePage.d.ts.map +0 -1
  1656. package/dist/planmagnet/pages/ProductsNewFeaturePagePage.js.map +0 -1
  1657. package/dist/planmagnet/pages/ProductsPrioritizationPagePage.d.ts.map +0 -1
  1658. package/dist/planmagnet/pages/ProductsPrioritizationPagePage.js.map +0 -1
  1659. package/dist/planmagnet/pages/ProductsProductDetailPagePage.d.ts.map +0 -1
  1660. package/dist/planmagnet/pages/ProductsProductDetailPagePage.js.map +0 -1
  1661. package/dist/planmagnet/pages/ProductsProductFeatureDetailPagePage.d.ts.map +0 -1
  1662. package/dist/planmagnet/pages/ProductsProductFeatureDetailPagePage.js.map +0 -1
  1663. package/dist/planmagnet/pages/ProductsProductHierarchyPagePage.d.ts.map +0 -1
  1664. package/dist/planmagnet/pages/ProductsProductHierarchyPagePage.js.map +0 -1
  1665. package/dist/planmagnet/pages/ProductsProductLinesPagePage.d.ts.map +0 -1
  1666. package/dist/planmagnet/pages/ProductsProductLinesPagePage.js.map +0 -1
  1667. package/dist/planmagnet/pages/ProductsProductsPagePage.d.ts.map +0 -1
  1668. package/dist/planmagnet/pages/ProductsProductsPagePage.js.map +0 -1
  1669. package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.d.ts.map +0 -1
  1670. package/dist/planmagnet/pages/ProductsReleaseDetailPagePage.js.map +0 -1
  1671. package/dist/planmagnet/pages/ProductsReleasesPagePage.d.ts.map +0 -1
  1672. package/dist/planmagnet/pages/ProductsReleasesPagePage.js.map +0 -1
  1673. package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.d.ts.map +0 -1
  1674. package/dist/planmagnet/pages/ProductsRoadmapAnalyticsPagePage.js.map +0 -1
  1675. package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.d.ts.map +0 -1
  1676. package/dist/planmagnet/pages/ProductsRoadmapDetailPagePage.js.map +0 -1
  1677. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.d.ts.map +0 -1
  1678. package/dist/planmagnet/pages/ProductsRoadmapsPagePage.js.map +0 -1
  1679. package/dist/planmagnet/pages/ProgramsCreateProgramPagePage.d.ts.map +0 -1
  1680. package/dist/planmagnet/pages/ProgramsCreateProgramPagePage.js.map +0 -1
  1681. package/dist/planmagnet/pages/ProgramsEditProgramPagePage.d.ts.map +0 -1
  1682. package/dist/planmagnet/pages/ProgramsEditProgramPagePage.js.map +0 -1
  1683. package/dist/planmagnet/pages/ProgramsProgramDetailPagePage.d.ts.map +0 -1
  1684. package/dist/planmagnet/pages/ProgramsProgramDetailPagePage.js.map +0 -1
  1685. package/dist/planmagnet/pages/ProgramsProgramsPagePage.d.ts.map +0 -1
  1686. package/dist/planmagnet/pages/ProgramsProgramsPagePage.js.map +0 -1
  1687. package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.d.ts.map +0 -1
  1688. package/dist/planmagnet/pages/ProjectsActiveProjectsPagePage.js.map +0 -1
  1689. package/dist/planmagnet/pages/ProjectsAtRiskPagePage.d.ts.map +0 -1
  1690. package/dist/planmagnet/pages/ProjectsAtRiskPagePage.js.map +0 -1
  1691. package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.d.ts.map +0 -1
  1692. package/dist/planmagnet/pages/ProjectsBudgetDetailPagePage.js.map +0 -1
  1693. package/dist/planmagnet/pages/ProjectsBudgetsPagePage.d.ts.map +0 -1
  1694. package/dist/planmagnet/pages/ProjectsBudgetsPagePage.js.map +0 -1
  1695. package/dist/planmagnet/pages/ProjectsCreateProjectPagePage.d.ts.map +0 -1
  1696. package/dist/planmagnet/pages/ProjectsCreateProjectPagePage.js.map +0 -1
  1697. package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.d.ts.map +0 -1
  1698. package/dist/planmagnet/pages/ProjectsCriticalPathPagePage.js.map +0 -1
  1699. package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.d.ts.map +0 -1
  1700. package/dist/planmagnet/pages/ProjectsCustomFieldsPagePage.js.map +0 -1
  1701. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.d.ts.map +0 -1
  1702. package/dist/planmagnet/pages/ProjectsEditProjectPagePage.js.map +0 -1
  1703. package/dist/planmagnet/pages/ProjectsGanttPagePage.d.ts.map +0 -1
  1704. package/dist/planmagnet/pages/ProjectsGanttPagePage.js.map +0 -1
  1705. package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.d.ts.map +0 -1
  1706. package/dist/planmagnet/pages/ProjectsMilestoneDetailPagePage.js.map +0 -1
  1707. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.d.ts.map +0 -1
  1708. package/dist/planmagnet/pages/ProjectsMilestonesPagePage.js.map +0 -1
  1709. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.d.ts.map +0 -1
  1710. package/dist/planmagnet/pages/ProjectsPlanningDetailPagePage.js.map +0 -1
  1711. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.d.ts.map +0 -1
  1712. package/dist/planmagnet/pages/ProjectsPlanningEditPagePage.js.map +0 -1
  1713. package/dist/planmagnet/pages/ProjectsPlanningPagePage.d.ts.map +0 -1
  1714. package/dist/planmagnet/pages/ProjectsPlanningPagePage.js.map +0 -1
  1715. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.d.ts.map +0 -1
  1716. package/dist/planmagnet/pages/ProjectsProjectDetailPagePage.js.map +0 -1
  1717. package/dist/planmagnet/pages/ProjectsProjectsPagePage.d.ts.map +0 -1
  1718. package/dist/planmagnet/pages/ProjectsProjectsPagePage.js.map +0 -1
  1719. package/dist/planmagnet/pages/ProjectsQualityGatesPagePage.d.ts.map +0 -1
  1720. package/dist/planmagnet/pages/ProjectsQualityGatesPagePage.js.map +0 -1
  1721. package/dist/planmagnet/pages/ProjectsWorkflowPagePage.d.ts.map +0 -1
  1722. package/dist/planmagnet/pages/ProjectsWorkflowPagePage.js.map +0 -1
  1723. package/dist/planmagnet/pages/ReportsCreateReportPagePage.d.ts.map +0 -1
  1724. package/dist/planmagnet/pages/ReportsCreateReportPagePage.js.map +0 -1
  1725. package/dist/planmagnet/pages/ReportsEditReportPagePage.d.ts.map +0 -1
  1726. package/dist/planmagnet/pages/ReportsEditReportPagePage.js.map +0 -1
  1727. package/dist/planmagnet/pages/ReportsReportPagePage.d.ts.map +0 -1
  1728. package/dist/planmagnet/pages/ReportsReportPagePage.js.map +0 -1
  1729. package/dist/planmagnet/pages/ReportsReportsPagePage.d.ts.map +0 -1
  1730. package/dist/planmagnet/pages/ReportsReportsPagePage.js.map +0 -1
  1731. package/dist/planmagnet/pages/RisksRiskDetailPagePage.d.ts.map +0 -1
  1732. package/dist/planmagnet/pages/RisksRiskDetailPagePage.js.map +0 -1
  1733. package/dist/planmagnet/pages/RisksRiskRegisterPagePage.d.ts.map +0 -1
  1734. package/dist/planmagnet/pages/RisksRiskRegisterPagePage.js.map +0 -1
  1735. package/dist/planmagnet/pages/SprintsStartSprintPagePage.d.ts.map +0 -1
  1736. package/dist/planmagnet/pages/SprintsStartSprintPagePage.js.map +0 -1
  1737. package/dist/planmagnet/pages/TasksCreateTaskPagePage.d.ts.map +0 -1
  1738. package/dist/planmagnet/pages/TasksCreateTaskPagePage.js.map +0 -1
  1739. package/dist/planmagnet/pages/TasksEditTaskPagePage.d.ts.map +0 -1
  1740. package/dist/planmagnet/pages/TasksEditTaskPagePage.js.map +0 -1
  1741. package/dist/planmagnet/pages/TasksImportPagePage.d.ts.map +0 -1
  1742. package/dist/planmagnet/pages/TasksImportPagePage.js.map +0 -1
  1743. package/dist/planmagnet/pages/TasksMyDashboardPagePage.d.ts.map +0 -1
  1744. package/dist/planmagnet/pages/TasksMyDashboardPagePage.js.map +0 -1
  1745. package/dist/planmagnet/pages/TasksMyWorkPagePage.d.ts.map +0 -1
  1746. package/dist/planmagnet/pages/TasksMyWorkPagePage.js.map +0 -1
  1747. package/dist/planmagnet/pages/TasksTaskDetailPagePage.d.ts.map +0 -1
  1748. package/dist/planmagnet/pages/TasksTaskDetailPagePage.js.map +0 -1
  1749. package/dist/planmagnet/pages/TasksTasksPagePage.d.ts.map +0 -1
  1750. package/dist/planmagnet/pages/TasksTasksPagePage.js.map +0 -1
  1751. package/dist/planmagnet/pages/TasksTimeEntriesPagePage.d.ts.map +0 -1
  1752. package/dist/planmagnet/pages/TasksTimeEntriesPagePage.js.map +0 -1
  1753. package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.d.ts.map +0 -1
  1754. package/dist/planmagnet/pages/TasksTimesheetDetailPagePage.js.map +0 -1
  1755. package/dist/planmagnet/pages/TasksTimesheetsPagePage.d.ts.map +0 -1
  1756. package/dist/planmagnet/pages/TasksTimesheetsPagePage.js.map +0 -1
  1757. package/dist/planmagnet/pages/TeamCreateTeamPagePage.d.ts.map +0 -1
  1758. package/dist/planmagnet/pages/TeamCreateTeamPagePage.js.map +0 -1
  1759. package/dist/planmagnet/pages/TeamInviteMemberPagePage.d.ts.map +0 -1
  1760. package/dist/planmagnet/pages/TeamInviteMemberPagePage.js.map +0 -1
  1761. package/dist/planmagnet/pages/TeamTeamDetailPagePage.d.ts.map +0 -1
  1762. package/dist/planmagnet/pages/TeamTeamDetailPagePage.js.map +0 -1
  1763. package/dist/planmagnet/pages/TeamTeamEditPagePage.d.ts.map +0 -1
  1764. package/dist/planmagnet/pages/TeamTeamEditPagePage.js.map +0 -1
  1765. package/dist/planmagnet/pages/TeamTeamPagePage.d.ts.map +0 -1
  1766. package/dist/planmagnet/pages/TeamTeamPagePage.js.map +0 -1
  1767. package/dist/planmagnet/pages/TeamTeamsListPagePage.d.ts.map +0 -1
  1768. package/dist/planmagnet/pages/TeamTeamsListPagePage.js.map +0 -1
  1769. package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.d.ts.map +0 -1
  1770. package/dist/planmagnet/pages/TemplatesEditTemplatePagePage.js.map +0 -1
  1771. package/dist/planmagnet/pages/TemplatesTemplatesPagePage.d.ts.map +0 -1
  1772. package/dist/planmagnet/pages/TemplatesTemplatesPagePage.js.map +0 -1
  1773. package/dist/planmagnet/pages/WorkspaceCreateWorkspacePagePage.d.ts.map +0 -1
  1774. package/dist/planmagnet/pages/WorkspaceCreateWorkspacePagePage.js.map +0 -1
  1775. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.d.ts.map +0 -1
  1776. package/dist/planmagnet/pages/analytics/DeliveryHealthCards.js.map +0 -1
  1777. package/dist/planmagnet/pages/analytics/DeliveryKpisCard.d.ts.map +0 -1
  1778. package/dist/planmagnet/pages/analytics/DeliveryKpisCard.js.map +0 -1
  1779. package/dist/planmagnet/pages/analytics/MetricsCard.d.ts.map +0 -1
  1780. package/dist/planmagnet/pages/analytics/MetricsCard.js.map +0 -1
  1781. package/dist/planmagnet/pages/analytics/QualityMetricsCard.d.ts.map +0 -1
  1782. package/dist/planmagnet/pages/analytics/QualityMetricsCard.js.map +0 -1
  1783. package/dist/planmagnet/pages/analytics/SprintDeliveryCards.d.ts.map +0 -1
  1784. package/dist/planmagnet/pages/analytics/SprintDeliveryCards.js.map +0 -1
  1785. package/dist/planmagnet/pages/analytics/StatusFlowCard.d.ts.map +0 -1
  1786. package/dist/planmagnet/pages/analytics/StatusFlowCard.js.map +0 -1
  1787. package/dist/planmagnet/pages/analytics/ThroughputCard.d.ts.map +0 -1
  1788. package/dist/planmagnet/pages/analytics/ThroughputCard.js.map +0 -1
  1789. package/dist/planmagnet/pages/analytics/WorkBreakdownCard.d.ts.map +0 -1
  1790. package/dist/planmagnet/pages/analytics/WorkBreakdownCard.js.map +0 -1
  1791. package/dist/planmagnet/pages/analytics/analyticsRange.d.ts.map +0 -1
  1792. package/dist/planmagnet/pages/analytics/analyticsRange.js.map +0 -1
  1793. package/dist/planmagnet/people/People.d.ts.map +0 -1
  1794. package/dist/planmagnet/people/People.js.map +0 -1
  1795. package/dist/planmagnet/presence/PresenceAvatars.d.ts.map +0 -1
  1796. package/dist/planmagnet/presence/PresenceAvatars.js.map +0 -1
  1797. package/dist/planmagnet/product/FeatureLinkPanels.d.ts.map +0 -1
  1798. package/dist/planmagnet/product/FeatureLinkPanels.js.map +0 -1
  1799. package/dist/planmagnet/product/ProductControls.d.ts.map +0 -1
  1800. package/dist/planmagnet/product/ProductControls.js.map +0 -1
  1801. package/dist/planmagnet/product/ProductFeatureControls.d.ts.map +0 -1
  1802. package/dist/planmagnet/product/ProductFeatureControls.js.map +0 -1
  1803. package/dist/planmagnet/product/ProductFeatureLinkCard.d.ts.map +0 -1
  1804. package/dist/planmagnet/product/ProductFeatureLinkCard.js.map +0 -1
  1805. package/dist/planmagnet/product/ProductLineControls.d.ts.map +0 -1
  1806. package/dist/planmagnet/product/ProductLineControls.js.map +0 -1
  1807. package/dist/planmagnet/product/ProductTeamsPanel.d.ts.map +0 -1
  1808. package/dist/planmagnet/product/ProductTeamsPanel.js.map +0 -1
  1809. package/dist/planmagnet/product/WorkItemProductFeatureChip.d.ts.map +0 -1
  1810. package/dist/planmagnet/product/WorkItemProductFeatureChip.js.map +0 -1
  1811. package/dist/planmagnet/product/hierarchy.d.ts.map +0 -1
  1812. package/dist/planmagnet/product/hierarchy.js.map +0 -1
  1813. package/dist/planmagnet/product/hierarchyOperations.d.ts.map +0 -1
  1814. package/dist/planmagnet/product/hierarchyOperations.js.map +0 -1
  1815. package/dist/planmagnet/product/refusal.d.ts.map +0 -1
  1816. package/dist/planmagnet/product/refusal.js.map +0 -1
  1817. package/dist/planmagnet/product/routes.d.ts.map +0 -1
  1818. package/dist/planmagnet/product/routes.js.map +0 -1
  1819. package/dist/planmagnet/providers/PlanMagnetProvider.d.ts.map +0 -1
  1820. package/dist/planmagnet/providers/PlanMagnetProvider.js.map +0 -1
  1821. package/dist/planmagnet/releases/ReleaseChecklistCard.d.ts.map +0 -1
  1822. package/dist/planmagnet/releases/ReleaseChecklistCard.js.map +0 -1
  1823. package/dist/planmagnet/releases/ReleaseGatesCard.d.ts.map +0 -1
  1824. package/dist/planmagnet/releases/ReleaseGatesCard.js.map +0 -1
  1825. package/dist/planmagnet/releases/ReleaseNotesCard.d.ts.map +0 -1
  1826. package/dist/planmagnet/releases/ReleaseNotesCard.js.map +0 -1
  1827. package/dist/planmagnet/releases/ReleaseReadinessCard.d.ts.map +0 -1
  1828. package/dist/planmagnet/releases/ReleaseReadinessCard.js.map +0 -1
  1829. package/dist/planmagnet/releases/ReleaseWorkItemsCard.d.ts.map +0 -1
  1830. package/dist/planmagnet/releases/ReleaseWorkItemsCard.js.map +0 -1
  1831. package/dist/planmagnet/releases/useReleaseOptions.d.ts.map +0 -1
  1832. package/dist/planmagnet/releases/useReleaseOptions.js.map +0 -1
  1833. package/dist/planmagnet/reports/ExportMenu.d.ts.map +0 -1
  1834. package/dist/planmagnet/reports/ExportMenu.js.map +0 -1
  1835. package/dist/planmagnet/reports/PrintReportView.d.ts.map +0 -1
  1836. package/dist/planmagnet/reports/PrintReportView.js.map +0 -1
  1837. package/dist/planmagnet/reports/ReportBuilderCanvas.d.ts.map +0 -1
  1838. package/dist/planmagnet/reports/ReportBuilderCanvas.js.map +0 -1
  1839. package/dist/planmagnet/reports/ReportBuilderPage.d.ts.map +0 -1
  1840. package/dist/planmagnet/reports/ReportBuilderPage.js.map +0 -1
  1841. package/dist/planmagnet/reports/ReportRunHistory.d.ts.map +0 -1
  1842. package/dist/planmagnet/reports/ReportRunHistory.js.map +0 -1
  1843. package/dist/planmagnet/reports/ReportWidgetRenderer.d.ts.map +0 -1
  1844. package/dist/planmagnet/reports/ReportWidgetRenderer.js.map +0 -1
  1845. package/dist/planmagnet/reports/SchedulesPanel.d.ts.map +0 -1
  1846. package/dist/planmagnet/reports/SchedulesPanel.js.map +0 -1
  1847. package/dist/planmagnet/reports/ShareDialog.d.ts.map +0 -1
  1848. package/dist/planmagnet/reports/ShareDialog.js.map +0 -1
  1849. package/dist/planmagnet/reports/SharedReportPage.d.ts.map +0 -1
  1850. package/dist/planmagnet/reports/SharedReportPage.js.map +0 -1
  1851. package/dist/planmagnet/reports/WidgetEditorDialog.d.ts.map +0 -1
  1852. package/dist/planmagnet/reports/WidgetEditorDialog.js.map +0 -1
  1853. package/dist/planmagnet/reports/reportExportPptx.d.ts.map +0 -1
  1854. package/dist/planmagnet/reports/reportExportPptx.js.map +0 -1
  1855. package/dist/planmagnet/reports/reportExportXlsx.d.ts.map +0 -1
  1856. package/dist/planmagnet/reports/reportExportXlsx.js.map +0 -1
  1857. package/dist/planmagnet/reports/reportGraphql.d.ts.map +0 -1
  1858. package/dist/planmagnet/reports/reportGraphql.js.map +0 -1
  1859. package/dist/planmagnet/reports/reportModel.d.ts.map +0 -1
  1860. package/dist/planmagnet/reports/reportModel.js.map +0 -1
  1861. package/dist/planmagnet/reports/sharedReportRoute.d.ts.map +0 -1
  1862. package/dist/planmagnet/reports/sharedReportRoute.js.map +0 -1
  1863. package/dist/planmagnet/roadmaps/FeatureInitiativeCard.d.ts.map +0 -1
  1864. package/dist/planmagnet/roadmaps/FeatureInitiativeCard.js.map +0 -1
  1865. package/dist/planmagnet/roadmaps/RoadmapControls.d.ts.map +0 -1
  1866. package/dist/planmagnet/roadmaps/RoadmapControls.js.map +0 -1
  1867. package/dist/planmagnet/roadmaps/RoadmapNowNextLater.d.ts.map +0 -1
  1868. package/dist/planmagnet/roadmaps/RoadmapNowNextLater.js.map +0 -1
  1869. package/dist/planmagnet/roadmaps/RoadmapPresentation.d.ts.map +0 -1
  1870. package/dist/planmagnet/roadmaps/RoadmapPresentation.js.map +0 -1
  1871. package/dist/planmagnet/roadmaps/RoadmapReviewPanel.d.ts.map +0 -1
  1872. package/dist/planmagnet/roadmaps/RoadmapReviewPanel.js.map +0 -1
  1873. package/dist/planmagnet/roadmaps/RoadmapVersionsPanel.d.ts.map +0 -1
  1874. package/dist/planmagnet/roadmaps/RoadmapVersionsPanel.js.map +0 -1
  1875. package/dist/planmagnet/roadmaps/planningFocus.d.ts.map +0 -1
  1876. package/dist/planmagnet/roadmaps/planningFocus.js.map +0 -1
  1877. package/dist/planmagnet/satisfaction/DeliverySatisfactionSection.d.ts.map +0 -1
  1878. package/dist/planmagnet/satisfaction/DeliverySatisfactionSection.js.map +0 -1
  1879. package/dist/planmagnet/satisfaction/SatisfactionFigures.d.ts.map +0 -1
  1880. package/dist/planmagnet/satisfaction/SatisfactionFigures.js.map +0 -1
  1881. package/dist/planmagnet/satisfaction/SatisfactionImportDialog.d.ts.map +0 -1
  1882. package/dist/planmagnet/satisfaction/SatisfactionImportDialog.js.map +0 -1
  1883. package/dist/planmagnet/satisfaction/SatisfactionLinkFields.d.ts.map +0 -1
  1884. package/dist/planmagnet/satisfaction/SatisfactionLinkFields.js.map +0 -1
  1885. package/dist/planmagnet/satisfaction/SatisfactionReleaseSelect.d.ts.map +0 -1
  1886. package/dist/planmagnet/satisfaction/SatisfactionReleaseSelect.js.map +0 -1
  1887. package/dist/planmagnet/satisfaction/SatisfactionResponseDialog.d.ts.map +0 -1
  1888. package/dist/planmagnet/satisfaction/SatisfactionResponseDialog.js.map +0 -1
  1889. package/dist/planmagnet/satisfaction/SatisfactionResponsesTable.d.ts.map +0 -1
  1890. package/dist/planmagnet/satisfaction/SatisfactionResponsesTable.js.map +0 -1
  1891. package/dist/planmagnet/satisfaction/SatisfactionSummaryCard.d.ts.map +0 -1
  1892. package/dist/planmagnet/satisfaction/SatisfactionSummaryCard.js.map +0 -1
  1893. package/dist/planmagnet/satisfaction/SatisfactionWindowPicker.d.ts.map +0 -1
  1894. package/dist/planmagnet/satisfaction/SatisfactionWindowPicker.js.map +0 -1
  1895. package/dist/planmagnet/satisfaction/satisfaction.d.ts.map +0 -1
  1896. package/dist/planmagnet/satisfaction/satisfaction.js.map +0 -1
  1897. package/dist/planmagnet/satisfaction/satisfactionCsv.d.ts.map +0 -1
  1898. package/dist/planmagnet/satisfaction/satisfactionCsv.js.map +0 -1
  1899. package/dist/planmagnet/satisfaction/satisfactionForm.d.ts.map +0 -1
  1900. package/dist/planmagnet/satisfaction/satisfactionForm.js.map +0 -1
  1901. package/dist/planmagnet/satisfaction/satisfactionOperations.d.ts.map +0 -1
  1902. package/dist/planmagnet/satisfaction/satisfactionOperations.js.map +0 -1
  1903. package/dist/planmagnet/satisfaction/useSatisfactionAccess.d.ts.map +0 -1
  1904. package/dist/planmagnet/satisfaction/useSatisfactionAccess.js.map +0 -1
  1905. package/dist/planmagnet/skills/RequiredSkillsEditor.d.ts.map +0 -1
  1906. package/dist/planmagnet/skills/RequiredSkillsEditor.js.map +0 -1
  1907. package/dist/planmagnet/skills/SkillChips.d.ts.map +0 -1
  1908. package/dist/planmagnet/skills/SkillChips.js.map +0 -1
  1909. package/dist/planmagnet/skills/SkillCoverageCard.d.ts.map +0 -1
  1910. package/dist/planmagnet/skills/SkillCoverageCard.js.map +0 -1
  1911. package/dist/planmagnet/skills/WorkItemRequiredSkills.d.ts.map +0 -1
  1912. package/dist/planmagnet/skills/WorkItemRequiredSkills.js.map +0 -1
  1913. package/dist/planmagnet/skills/skillOperations.d.ts.map +0 -1
  1914. package/dist/planmagnet/skills/skillOperations.js.map +0 -1
  1915. package/dist/planmagnet/skills/skillTags.d.ts.map +0 -1
  1916. package/dist/planmagnet/skills/skillTags.js.map +0 -1
  1917. package/dist/planmagnet/skills/useRequiredSkillsDraft.d.ts.map +0 -1
  1918. package/dist/planmagnet/skills/useRequiredSkillsDraft.js.map +0 -1
  1919. package/dist/planmagnet/sprints/SprintControls.d.ts.map +0 -1
  1920. package/dist/planmagnet/sprints/SprintControls.js.map +0 -1
  1921. package/dist/planmagnet/sprints/SprintDates.d.ts.map +0 -1
  1922. package/dist/planmagnet/sprints/SprintDates.js.map +0 -1
  1923. package/dist/planmagnet/store/planmagnetStore.d.ts.map +0 -1
  1924. package/dist/planmagnet/store/planmagnetStore.js.map +0 -1
  1925. package/dist/planmagnet/team/PendingInvitations.d.ts.map +0 -1
  1926. package/dist/planmagnet/team/PendingInvitations.js.map +0 -1
  1927. package/dist/planmagnet/team/TeamControls.d.ts.map +0 -1
  1928. package/dist/planmagnet/team/TeamControls.js.map +0 -1
  1929. package/dist/planmagnet/team/UnmatchedCrewIdentities.d.ts.map +0 -1
  1930. package/dist/planmagnet/team/UnmatchedCrewIdentities.js.map +0 -1
  1931. package/dist/planmagnet/team/invitationEmail.d.ts.map +0 -1
  1932. package/dist/planmagnet/team/invitationEmail.js.map +0 -1
  1933. package/dist/planmagnet/time/TaskTimePanel.d.ts.map +0 -1
  1934. package/dist/planmagnet/time/TaskTimePanel.js.map +0 -1
  1935. package/dist/planmagnet/time/TimeEntryControls.d.ts.map +0 -1
  1936. package/dist/planmagnet/time/TimeEntryControls.js.map +0 -1
  1937. package/dist/planmagnet/time/TimesheetControls.d.ts.map +0 -1
  1938. package/dist/planmagnet/time/TimesheetControls.js.map +0 -1
  1939. package/dist/planmagnet/time/timeShared.d.ts.map +0 -1
  1940. package/dist/planmagnet/time/timeShared.js.map +0 -1
  1941. package/dist/planmagnet/types/index.d.ts.map +0 -1
  1942. package/dist/planmagnet/utils/cn.d.ts.map +0 -1
  1943. package/dist/planmagnet/utils/cn.js.map +0 -1
  1944. package/dist/planmagnet/utils/email.d.ts.map +0 -1
  1945. package/dist/planmagnet/utils/email.js.map +0 -1
  1946. package/dist/planmagnet/utils/formValidation.d.ts.map +0 -1
  1947. package/dist/planmagnet/utils/formValidation.js.map +0 -1
  1948. package/dist/planmagnet/utils/graphqlErrors.d.ts.map +0 -1
  1949. package/dist/planmagnet/utils/graphqlErrors.js.map +0 -1
  1950. package/dist/planmagnet/utils/lineDiff.d.ts.map +0 -1
  1951. package/dist/planmagnet/utils/lineDiff.js.map +0 -1
  1952. package/dist/planmagnet/utils/mutationResult.d.ts.map +0 -1
  1953. package/dist/planmagnet/utils/mutationResult.js.map +0 -1
  1954. package/dist/planmagnet/utils/navigation.d.ts.map +0 -1
  1955. package/dist/planmagnet/utils/navigation.js.map +0 -1
  1956. package/dist/planmagnet/utils/qualityGateCriteria.d.ts.map +0 -1
  1957. package/dist/planmagnet/utils/qualityGateCriteria.js.map +0 -1
  1958. package/dist/planmagnet/utils/rowNavigation.d.ts.map +0 -1
  1959. package/dist/planmagnet/utils/rowNavigation.js.map +0 -1
  1960. package/dist/planmagnet/utils/statusColor.d.ts.map +0 -1
  1961. package/dist/planmagnet/utils/statusColor.js.map +0 -1
  1962. package/dist/planmagnet/utils/urlParam.d.ts.map +0 -1
  1963. package/dist/planmagnet/utils/urlParam.js.map +0 -1
  1964. package/dist/planmagnet/webhooks/webhookTypes.d.ts.map +0 -1
  1965. package/dist/planmagnet/webhooks/webhookTypes.js.map +0 -1
  1966. package/dist/shared/hooks/useTr.d.ts.map +0 -1
  1967. package/dist/shared/hooks/useTr.js.map +0 -1
  1968. package/dist/shared/utils/i18n.d.ts.map +0 -1
  1969. package/dist/shared/utils/i18n.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"RiskControls.js","names":[],"sources":["../../../src/planmagnet/controls/RiskControls.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useMutation } from '@apollo/client/react';\nimport {\n Button,\n Input,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n ResponsiveDialogTrigger,\n} from '@burdenoff/fe-libs/ui';\nimport { Pencil, Trash2 } from 'lucide-react';\nimport { usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { throwOnError, LEAVES_PAGE_CONTEXT } from '../utils/mutationResult';\nimport { ConfirmButton, ErrorLine } from './ConfirmButton';\nimport { enumLabel, AssigneeSelect } from './WorkItemControls';\n\n/**\n * Risk register controls (BOFF-8047). The register API (planmagnetCreateRisk/UpdateRisk/DeleteRisk,\n * planmagnetRisks, planmagnetRiskMatrix) has been served and prod-verified since the risk module shipped —\n * `CAPABILITY_REGISTER.md` carried it `api-only` because no page reached it. Status moves freely between the\n * six `RiskStatus` values (the service enforces only the 1-5 likelihood/impact range, not a transition table),\n * so — like Milestones — this is a plain select rather than an allowed-moves picker.\n */\n\nexport const RISK_STATUSES = [\n 'IDENTIFIED',\n 'ANALYZING',\n 'MITIGATING',\n 'ACCEPTED',\n 'RESOLVED',\n 'CLOSED',\n] as const;\n\nexport const RISK_SEVERITIES = ['CRITICAL', 'HIGH', 'MEDIUM', 'LOW', 'NEGLIGIBLE'] as const;\n\nconst RISK_QUERIES = ['GetRiskDetail', 'GetRisks', 'GetRiskMatrix', 'GetProjectDetail'];\n\nconst UPDATE = gql`\n mutation RiskControlsUpdate($id: ID!, $input: PlanmagnetUpdateRiskInput!) {\n planmagnetUpdateRisk(id: $id, input: $input) {\n id\n title\n description\n severity\n status\n likelihood\n impact\n riskScore\n category\n mitigationPlan\n contingencyPlan\n ownerId\n dueDate\n resolvedAt\n }\n }\n`;\nconst DELETE = gql`\n mutation RiskControlsDelete($id: ID!) {\n planmagnetDeleteRisk(id: $id)\n }\n`;\n\nexport interface RiskValues {\n id: string;\n title: string;\n description: string | null;\n severity: string;\n status: string;\n likelihood: number;\n impact: number;\n category: string | null;\n mitigationPlan: string | null;\n contingencyPlan: string | null;\n ownerId: string | null;\n dueDate: string | null;\n}\n\nconst day = (iso: string | null) => (iso ? iso.slice(0, 10) : '');\n\nexport function RiskHeaderActions({ risk }: { risk: RiskValues }) {\n const navigate = usePlanMagnetNavigate();\n const [update, updateState] = useMutation(UPDATE, {\n refetchQueries: RISK_QUERIES,\n awaitRefetchQueries: true,\n });\n const [remove, removeState] = useMutation(DELETE, {\n refetchQueries: RISK_QUERIES.filter((q) => q !== 'GetRiskDetail'),\n context: LEAVES_PAGE_CONTEXT,\n });\n const [error, setError] = useState<string | null>(null);\n const busy = updateState.loading || removeState.loading;\n const statuses = (RISK_STATUSES as readonly string[]).includes(risk.status)\n ? RISK_STATUSES\n : [risk.status, ...RISK_STATUSES];\n\n const onStatus = async (status: string) => {\n setError(null);\n const input: Record<string, unknown> = { status };\n // Resolving or closing a risk that has never been resolved records the date; re-opening clears it.\n if (\n (status === 'RESOLVED' || status === 'CLOSED') &&\n risk.status !== 'RESOLVED' &&\n risk.status !== 'CLOSED'\n ) {\n input.resolvedAt = new Date().toISOString().slice(0, 10);\n } else if (status !== 'RESOLVED' && status !== 'CLOSED') {\n input.resolvedAt = null;\n }\n try {\n await throwOnError(update({ variables: { id: risk.id, input } }));\n } catch (e) {\n setError(e instanceof Error ? e.message : 'The status could not be changed.');\n }\n };\n const onDelete = async () => {\n setError(null);\n try {\n await throwOnError(remove({ variables: { id: risk.id } }));\n navigate('/risks/risk-register-page');\n } catch (e) {\n setError(e instanceof Error ? e.message : 'The risk could not be deleted.');\n }\n };\n\n return (\n <div className=\"flex flex-col items-end gap-2\">\n <div className=\"flex flex-wrap items-center justify-end gap-2\">\n <select\n aria-label=\"Status\"\n data-testid=\"risk-status\"\n className=\"rounded-md border border-input bg-background px-2 py-1 text-sm disabled:opacity-60\"\n value={risk.status}\n disabled={busy}\n onChange={(e) => {\n if (e.target.value !== risk.status) void onStatus(e.target.value);\n }}\n >\n {statuses.map((s) => (\n <option key={s} value={s}>\n {enumLabel(s)}\n </option>\n ))}\n </select>\n <RiskEditDialog risk={risk} />\n <ConfirmButton\n label=\"Delete\"\n variant=\"outline\"\n icon={<Trash2 className=\"mr-1 h-4 w-4\" />}\n title={`Delete \"${risk.title}\"?`}\n description=\"The risk is removed from the register. This cannot be undone here.\"\n confirmLabel=\"Delete risk\"\n destructive\n disabled={busy}\n onConfirm={() => void onDelete()}\n />\n </div>\n {error && <ErrorLine message={error} />}\n </div>\n );\n}\n\nconst FIELD = 'mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm';\nconst SCORES = [1, 2, 3, 4, 5] as const;\n\n/** Title, severity, likelihood/impact, category, mitigation/contingency plans, owner and due date. */\nfunction RiskEditDialog({ risk }: { risk: RiskValues }) {\n const initial = {\n title: risk.title,\n description: risk.description ?? '',\n severity: risk.severity,\n likelihood: risk.likelihood,\n impact: risk.impact,\n category: risk.category ?? '',\n mitigationPlan: risk.mitigationPlan ?? '',\n contingencyPlan: risk.contingencyPlan ?? '',\n ownerId: risk.ownerId ?? '',\n dueDate: day(risk.dueDate),\n };\n const [open, setOpen] = useState(false);\n const [form, setForm] = useState(initial);\n const [error, setError] = useState<string | null>(null);\n const [update, state] = useMutation(UPDATE, {\n refetchQueries: RISK_QUERIES,\n awaitRefetchQueries: true,\n });\n\n const save = async () => {\n setError(null);\n const input: Record<string, unknown> = {};\n if (form.title.trim() !== initial.title) input.title = form.title.trim();\n if (form.description.trim() !== initial.description.trim())\n input.description = form.description.trim() || null;\n if (form.severity !== initial.severity) input.severity = form.severity;\n if (form.likelihood !== initial.likelihood) input.likelihood = form.likelihood;\n if (form.impact !== initial.impact) input.impact = form.impact;\n if (form.category.trim() !== initial.category.trim())\n input.category = form.category.trim() || null;\n if (form.mitigationPlan.trim() !== initial.mitigationPlan.trim())\n input.mitigationPlan = form.mitigationPlan.trim() || null;\n if (form.contingencyPlan.trim() !== initial.contingencyPlan.trim())\n input.contingencyPlan = form.contingencyPlan.trim() || null;\n if (form.ownerId !== initial.ownerId) input.ownerId = form.ownerId || null;\n if (form.dueDate !== initial.dueDate) input.dueDate = form.dueDate || null;\n if (Object.keys(input).length === 0) {\n setOpen(false);\n return;\n }\n try {\n await throwOnError(update({ variables: { id: risk.id, input } }));\n setOpen(false);\n } catch (e) {\n setError(e instanceof Error ? e.message : 'The risk could not be saved.');\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={(next) => {\n setOpen(next);\n if (next) setForm(initial);\n else setError(null);\n }}\n >\n <ResponsiveDialogTrigger asChild>\n <Button size=\"sm\" variant=\"outline\" data-testid=\"risk-edit\">\n <Pencil className=\"mr-1 h-4 w-4\" />\n Edit\n </Button>\n </ResponsiveDialogTrigger>\n <ResponsiveDialogContent className=\"max-w-lg max-h-[85vh] overflow-y-auto\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Edit risk</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>Only changed fields are saved.</ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n <div className=\"space-y-3\">\n <div>\n <label htmlFor=\"risk-edit-title\" className=\"text-sm font-medium\">\n Title\n </label>\n <Input\n id=\"risk-edit-title\"\n className=\"mt-1\"\n value={form.title}\n onChange={(e) => setForm({ ...form, title: e.target.value })}\n />\n </div>\n <div className=\"grid grid-cols-3 gap-3\">\n <div>\n <label htmlFor=\"risk-edit-severity\" className=\"text-sm font-medium\">\n Severity\n </label>\n <select\n id=\"risk-edit-severity\"\n className={FIELD}\n value={form.severity}\n onChange={(e) => setForm({ ...form, severity: e.target.value })}\n >\n {(RISK_SEVERITIES as readonly string[]).includes(form.severity)\n ? RISK_SEVERITIES.map((s) => (\n <option key={s} value={s}>\n {enumLabel(s)}\n </option>\n ))\n : [form.severity, ...RISK_SEVERITIES].map((s) => (\n <option key={s} value={s}>\n {enumLabel(s)}\n </option>\n ))}\n </select>\n </div>\n <div>\n <label htmlFor=\"risk-edit-likelihood\" className=\"text-sm font-medium\">\n Likelihood\n </label>\n <select\n id=\"risk-edit-likelihood\"\n className={FIELD}\n value={form.likelihood}\n onChange={(e) => setForm({ ...form, likelihood: Number(e.target.value) })}\n >\n {SCORES.map((s) => (\n <option key={s} value={s}>\n {s}\n </option>\n ))}\n </select>\n </div>\n <div>\n <label htmlFor=\"risk-edit-impact\" className=\"text-sm font-medium\">\n Impact\n </label>\n <select\n id=\"risk-edit-impact\"\n className={FIELD}\n value={form.impact}\n onChange={(e) => setForm({ ...form, impact: Number(e.target.value) })}\n >\n {SCORES.map((s) => (\n <option key={s} value={s}>\n {s}\n </option>\n ))}\n </select>\n </div>\n </div>\n <div>\n <label htmlFor=\"risk-edit-category\" className=\"text-sm font-medium\">\n Category\n </label>\n <Input\n id=\"risk-edit-category\"\n className=\"mt-1\"\n value={form.category}\n onChange={(e) => setForm({ ...form, category: e.target.value })}\n />\n </div>\n <div>\n <label htmlFor=\"risk-edit-owner\" className=\"text-sm font-medium\">\n Owner\n </label>\n <div className=\"mt-1\">\n <AssigneeSelect\n id=\"risk-edit-owner\"\n value={form.ownerId}\n onChange={(ownerId) => setForm({ ...form, ownerId })}\n />\n </div>\n </div>\n <div>\n <label htmlFor=\"risk-edit-due\" className=\"text-sm font-medium\">\n Due date\n </label>\n <Input\n id=\"risk-edit-due\"\n type=\"date\"\n className=\"mt-1\"\n value={form.dueDate}\n onChange={(e) => setForm({ ...form, dueDate: e.target.value })}\n />\n </div>\n <div>\n <label htmlFor=\"risk-edit-description\" className=\"text-sm font-medium\">\n Description\n </label>\n <textarea\n id=\"risk-edit-description\"\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[64px]\"\n value={form.description}\n onChange={(e) => setForm({ ...form, description: e.target.value })}\n />\n </div>\n <div>\n <label htmlFor=\"risk-edit-mitigation\" className=\"text-sm font-medium\">\n Mitigation plan\n </label>\n <textarea\n id=\"risk-edit-mitigation\"\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[64px]\"\n value={form.mitigationPlan}\n onChange={(e) => setForm({ ...form, mitigationPlan: e.target.value })}\n />\n </div>\n <div>\n <label htmlFor=\"risk-edit-contingency\" className=\"text-sm font-medium\">\n Contingency plan\n </label>\n <textarea\n id=\"risk-edit-contingency\"\n className=\"mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm min-h-[64px]\"\n value={form.contingencyPlan}\n onChange={(e) => setForm({ ...form, contingencyPlan: e.target.value })}\n />\n </div>\n {error && <ErrorLine message={error} />}\n </div>\n <ResponsiveDialogFooter>\n <Button variant=\"outline\" onClick={() => setOpen(false)}>\n Cancel\n </Button>\n <Button onClick={() => void save()} disabled={form.title.trim() === '' || state.loading}>\n {state.loading ? 'Saving…' : 'Save'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SyncControls.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/controls/SyncControls.tsx"],"names":[],"mappings":"AAgCA,OAAO,EASL,KAAK,kBAAkB,EACvB,KAAK,SAAS,EAEd,KAAK,aAAa,EAClB,KAAK,aAAa,EAEnB,MAAM,2BAA2B,CAAC;AAEnC;;;;;;;GAOG;AAEH,eAAO,MAAM,iBAAiB,UAAgB,CAAC;AAC/C,eAAO,MAAM,mBAAmB,UAA8C,CAAC;AAc/E,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,2CAM7D;AAQD,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,2CAMhE;AAED,wBAAgB,mBAAmB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,2CAMjE;AAED,8GAA8G;AAC9G,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,GAAS,EACT,SAAmC,EACnC,MAAM,GACP,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,2CAwBA;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,2CAyBlE;AAmBD;;yBAEyB;AACzB,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,QAAQ,EACR,IAAW,GACZ,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAC3C,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAC;CACzB,2CAuCA;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,aAAa,CAAA;CAAE,2CA4BzE;AAmBD,oGAAoG;AACpG,wBAAgB,iBAAiB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,2CA6CvF;AAYD;4FAC4F;AAC5F,wBAAgB,oBAAoB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,2CA+ClE;AAQD,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,KAAK;AACL,0GAA0G;AAC1G,SAAS,GACV,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB,2CAmCA;AAcD;;;uDAGuD;AACvD,wBAAgB,sBAAsB,CAAC,EAAE,UAAU,EAAE,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,2CAyD5E;AAED,eAAO,MAAM,6BAA6B,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAQ5E,CAAC;AA2BF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,aAAa,CAAC;IACzB,gBAAgB,EAAE,kBAAkB,CAAC;IACrC,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,2CA+S9D"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"SyncControls.js","names":[],"sources":["../../../src/planmagnet/controls/SyncControls.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useMutation, useQuery } from '@apollo/client/react';\nimport {\n Badge,\n Button,\n Input,\n Textarea,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n ResponsiveDialogTrigger,\n} from '@burdenoff/fe-libs/ui';\nimport {\n AlertTriangle,\n ChevronDown,\n ChevronUp,\n Loader2,\n Pause,\n Pencil,\n Play,\n PlugZap,\n X,\n} from 'lucide-react';\nimport { throwOnError } from '../utils/mutationResult';\nimport { isForbidden, mutationErrorMessage } from '../utils/graphqlErrors';\nimport { ConfirmButton, ErrorLine } from './ConfirmButton';\nimport { enumLabel } from './WorkItemControls';\nimport { useSyncProviderCapabilities } from '../integrations/useSyncProviderCapabilities';\nimport {\n CONFLICT_RESOLUTIONS,\n directionLabel,\n directionSupported,\n GITHUB_FIELD_MAPPING_DEFAULTS,\n isValidGithubOwner,\n isValidGithubRepo,\n parseGithubFieldMapping,\n SYNC_DIRECTIONS,\n type ConflictResolution,\n type RunHealth,\n type SyncConnectionTestResult,\n type SyncDirection,\n type SyncRunResult,\n type SyncStatus,\n} from '../integrations/syncTypes';\n\n/**\n * Shared row/detail controls for External Sync (AUT-09/10/24/40): status badges, health, run/pause/resume/test\n * actions and conflict resolution. Every write here follows the same two rules the rest of this MFE does\n * (`utils/mutationResult.ts`, `utils/graphqlErrors.ts`): a refused mutation is surfaced, never swallowed, and a\n * FORBIDDEN refusal reads as \"your role can view but not change this\" rather than a raw GraphQL error string —\n * this page cannot know ahead of time whether the viewer's role allows a given write, so it always offers the\n * action and reports the refusal if and when it happens, rather than guessing at a client-side role check.\n */\n\nexport const SYNC_LIST_QUERIES = ['SyncsList'];\nexport const SYNC_DETAIL_QUERIES = ['SyncDetail', 'SyncRuns', 'SyncConflicts'];\n\nconst STATUS_VARIANT: Record<\n SyncStatus,\n 'default' | 'success' | 'warning' | 'info' | 'secondary' | 'destructive' | 'outline'\n> = {\n IDLE: 'secondary',\n SYNCING: 'info',\n SUCCESS: 'success',\n FAILED: 'destructive',\n PAUSED: 'warning',\n DISABLED: 'outline',\n};\n\nexport function SyncStatusBadge({ status }: { status: string }) {\n return (\n <Badge variant={STATUS_VARIANT[status as SyncStatus] ?? 'outline'} className=\"text-xs\">\n {enumLabel(status)}\n </Badge>\n );\n}\n\nconst RUN_STATUS_VARIANT: Record<string, 'success' | 'destructive' | 'warning'> = {\n SUCCEEDED: 'success',\n FAILED: 'destructive',\n PARTIAL: 'warning',\n};\n\nexport function SyncRunStatusBadge({ status }: { status: string }) {\n return (\n <Badge variant={RUN_STATUS_VARIANT[status] ?? 'secondary'} className=\"text-xs\">\n {enumLabel(status)}\n </Badge>\n );\n}\n\nexport function ConflictStatusBadge({ status }: { status: string }) {\n return (\n <Badge variant={status === 'OPEN' ? 'warning' : 'secondary'} className=\"text-xs\">\n {enumLabel(status)}\n </Badge>\n );\n}\n\n/** A long string (a sync's `lastSyncError`, an issue body) collapsed to `max` chars with an expand toggle. */\nexport function TruncatedText({\n text,\n max = 140,\n className = 'text-muted-foreground',\n testId,\n}: {\n text: string;\n max?: number;\n className?: string;\n testId?: string;\n}) {\n const [expanded, setExpanded] = useState(false);\n if (text.length <= max) return <span className={className}>{text}</span>;\n return (\n <span data-testid={testId}>\n <span className={className}>{expanded ? text : `${text.slice(0, max)}…`}</span>{' '}\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-0.5 text-xs font-medium text-primary hover:underline\"\n aria-expanded={expanded}\n onClick={() => setExpanded((v) => !v)}\n >\n {expanded ? (\n <>\n Show less <ChevronUp className=\"h-3 w-3\" aria-hidden=\"true\" />\n </>\n ) : (\n <>\n Show more <ChevronDown className=\"h-3 w-3\" aria-hidden=\"true\" />\n </>\n )}\n </button>\n </span>\n );\n}\n\n/**\n * Last run time/status + consecutive-failure streak (AUT-09/22). `consecutiveFailures` is 0 once the latest run\n * did not fail — highlighted only while it is actually nonzero, never merely because the last run failed once\n * and then recovered.\n */\nexport function SyncHealthSummary({ health }: { health: RunHealth }) {\n return (\n <div className=\"flex flex-wrap items-center gap-2 text-xs\" data-testid=\"sync-health\">\n {health.lastRunAt ? (\n <>\n <span className=\"text-muted-foreground\">\n Last run {new Date(health.lastRunAt).toLocaleString()}\n </span>\n {health.lastStatus && <SyncRunStatusBadge status={health.lastStatus} />}\n </>\n ) : (\n <span className=\"text-muted-foreground\">Never run</span>\n )}\n {health.consecutiveFailures > 0 && (\n <span className=\"inline-flex items-center gap-1 font-medium text-status-error-text\">\n <AlertTriangle className=\"h-3 w-3\" aria-hidden=\"true\" />\n {health.consecutiveFailures} run{health.consecutiveFailures === 1 ? '' : 's'} failed in a\n row\n </span>\n )}\n <span className=\"text-muted-foreground\">\n {health.runsLast7Days} run(s) in the last 7 days\n </span>\n </div>\n );\n}\n\nconst START_SYNC = gql`\n mutation SyncControlsStartSync($id: ID!) {\n planmagnetStartSync(id: $id) {\n syncId\n success\n itemsCreated\n itemsUpdated\n itemsSkipped\n errorCount\n errors\n conflictCount\n durationMs\n syncedAt\n }\n }\n`;\n\n/** \"Run now\" (AUT-40): starts a sync in the direction `ExternalSync.direction` already records, and reports the\n * real result — including an honest `NOT_IMPLEMENTED` outcome for a provider with no live connector, never a\n * fabricated success. */\nexport function RunNowButton({\n syncId,\n onResult,\n size = 'sm',\n}: {\n syncId: string;\n onResult?: (result: SyncRunResult) => void;\n size?: 'sm' | 'default';\n}) {\n const [start, state] = useMutation<{ planmagnetStartSync: SyncRunResult }>(START_SYNC, {\n refetchQueries: [...SYNC_LIST_QUERIES, ...SYNC_DETAIL_QUERIES],\n });\n const [error, setError] = useState<string | null>(null);\n\n const run = async () => {\n setError(null);\n try {\n const res = await throwOnError(start({ variables: { id: syncId } }));\n if (res.data) onResult?.(res.data.planmagnetStartSync);\n } catch (e) {\n setError(\n isForbidden(e)\n ? 'Your role can view integrations but not change them.'\n : mutationErrorMessage(e, 'The sync could not be started.')\n );\n }\n };\n\n return (\n <div className=\"flex flex-col items-start gap-1\">\n <Button\n size={size}\n variant=\"outline\"\n disabled={state.loading}\n onClick={() => void run()}\n data-testid=\"sync-run-now\"\n >\n {state.loading ? (\n <Loader2 className=\"mr-1 h-4 w-4 animate-spin\" />\n ) : (\n <PlugZap className=\"mr-1 h-4 w-4\" />\n )}\n Run now\n </Button>\n {error && <ErrorLine message={error} />}\n </div>\n );\n}\n\n/**\n * What `planmagnetStartSync` actually did (AUT-40). A completed run is a normal GraphQL success even when the\n * sync itself failed on every item — bad token, unreachable provider, a refused status transition, … — the\n * service records `success: false` with `errors` populated rather than throwing (see\n * `sync.service.ts`'s `runGithubImport`/`runGithubExport`). This is the one place that outcome is rendered, so\n * every `RunNowButton` call site wires its `onResult` here instead of relying on a delayed list/detail refetch.\n */\nexport function SyncRunResultSummary({ result }: { result: SyncRunResult }) {\n return (\n <div\n role=\"status\"\n className={`space-y-1 rounded-md border p-3 text-sm ${\n result.success\n ? 'border-border bg-muted text-status-success-text'\n : 'border-destructive/40 text-status-error-text'\n }`}\n data-testid=\"sync-run-result\"\n >\n <p className=\"font-medium\">{result.success ? 'Sync run succeeded.' : 'Sync run failed.'}</p>\n <p className=\"text-xs text-muted-foreground\">\n {result.itemsCreated} created · {result.itemsUpdated} updated · {result.itemsSkipped}{' '}\n skipped\n {result.conflictCount > 0\n ? ` · ${result.conflictCount} conflict${result.conflictCount === 1 ? '' : 's'}`\n : ''}\n </p>\n {result.errors && result.errors.length > 0 && (\n <ul className=\"list-disc space-y-0.5 pl-4 text-xs\">\n {result.errors.map((message, i) => (\n <li key={i}>{message}</li>\n ))}\n </ul>\n )}\n </div>\n );\n}\n\nconst PAUSE_SYNC = gql`\n mutation SyncControlsPause($id: ID!) {\n planmagnetPauseExternalSync(id: $id) {\n id\n status\n }\n }\n`;\nconst RESUME_SYNC = gql`\n mutation SyncControlsResume($id: ID!) {\n planmagnetResumeExternalSync(id: $id) {\n id\n status\n }\n }\n`;\n\n/** Pause when active, Resume when PAUSED — the only two states these two mutations move between. */\nexport function PauseResumeButton({ syncId, status }: { syncId: string; status: string }) {\n const [pause, pauseState] = useMutation(PAUSE_SYNC, { refetchQueries: SYNC_LIST_QUERIES });\n const [resume, resumeState] = useMutation(RESUME_SYNC, { refetchQueries: SYNC_LIST_QUERIES });\n const [error, setError] = useState<string | null>(null);\n const loading = pauseState.loading || resumeState.loading;\n const paused = status === 'PAUSED';\n\n const toggle = async () => {\n setError(null);\n try {\n if (paused) {\n await throwOnError(resume({ variables: { id: syncId } }));\n } else {\n await throwOnError(pause({ variables: { id: syncId } }));\n }\n } catch (e) {\n setError(\n isForbidden(e)\n ? 'Your role can view integrations but not change them.'\n : mutationErrorMessage(e, `The sync could not be ${paused ? 'resumed' : 'paused'}.`)\n );\n }\n };\n\n return (\n <div className=\"flex flex-col items-start gap-1\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n disabled={loading}\n onClick={() => void toggle()}\n data-testid={paused ? 'sync-resume' : 'sync-pause'}\n >\n {loading ? (\n <Loader2 className=\"mr-1 h-4 w-4 animate-spin\" />\n ) : paused ? (\n <Play className=\"mr-1 h-4 w-4\" />\n ) : (\n <Pause className=\"mr-1 h-4 w-4\" />\n )}\n {paused ? 'Resume' : 'Pause'}\n </Button>\n {error && <ErrorLine message={error} />}\n </div>\n );\n}\n\nconst TEST_SYNC = gql`\n mutation SyncControlsTest($id: ID!) {\n planmagnetTestExternalSync(id: $id) {\n ok\n message\n rateLimitRemaining\n }\n }\n`;\n\n/** AUT-23/20 — probes the connection through the real connector, writing nothing. Offered whenever the page can\n * reach it; a provider with no live connector still answers, honestly, with `ok: false`. */\nexport function TestConnectionButton({ syncId }: { syncId: string }) {\n const [test, state] = useMutation<{ planmagnetTestExternalSync: SyncConnectionTestResult }>(\n TEST_SYNC\n );\n const [result, setResult] = useState<SyncConnectionTestResult | null>(null);\n const [error, setError] = useState<string | null>(null);\n\n const run = async () => {\n setError(null);\n setResult(null);\n try {\n const res = await throwOnError(test({ variables: { id: syncId } }));\n if (res.data) setResult(res.data.planmagnetTestExternalSync);\n } catch (e) {\n setError(\n isForbidden(e)\n ? 'Your role can view integrations but not change them.'\n : mutationErrorMessage(e, 'The connection could not be tested.')\n );\n }\n };\n\n return (\n <div className=\"flex flex-col items-start gap-1\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n disabled={state.loading}\n onClick={() => void run()}\n data-testid=\"sync-test-connection\"\n >\n {state.loading ? <Loader2 className=\"mr-1 h-4 w-4 animate-spin\" /> : null}\n Test connection\n </Button>\n {result && (\n <p\n className={`text-sm ${result.ok ? 'text-status-success-text' : 'text-status-error-text'}`}\n data-testid=\"sync-test-result\"\n >\n {result.ok ? 'Connected: ' : 'Failed: '}\n {result.message}\n {result.rateLimitRemaining !== null && ` (${result.rateLimitRemaining} calls remaining)`}\n </p>\n )}\n {error && <ErrorLine message={error} />}\n </div>\n );\n}\n\nconst DELETE_SYNC = gql`\n mutation SyncControlsDelete($id: ID!) {\n planmagnetDeleteExternalSync(id: $id)\n }\n`;\n\nexport function DeleteSyncButton({\n syncId,\n label,\n /** Passed by the detail page, which leaves for the list afterward — see LEAVES_PAGE_CONTEXT's own doc. */\n onDeleted,\n}: {\n syncId: string;\n label: string;\n onDeleted?: () => void;\n}) {\n const [remove, { loading }] = useMutation(DELETE_SYNC, { refetchQueries: SYNC_LIST_QUERIES });\n const [error, setError] = useState<string | null>(null);\n\n const onDelete = async () => {\n setError(null);\n try {\n await throwOnError(remove({ variables: { id: syncId } }));\n onDeleted?.();\n } catch (e) {\n setError(\n isForbidden(e)\n ? 'Your role can view integrations but not change them.'\n : mutationErrorMessage(e, 'The sync could not be deleted.')\n );\n }\n };\n\n return (\n <div className=\"flex flex-col items-end gap-1\">\n <ConfirmButton\n label=\"Delete\"\n variant=\"outline\"\n icon={<X className=\"mr-1 h-4 w-4\" />}\n title={`Delete \"${label}\"?`}\n description=\"This stops the sync and removes its configuration and run/conflict history. Work items already created from it are kept.\"\n confirmLabel=\"Delete sync\"\n destructive\n disabled={loading}\n onConfirm={() => void onDelete()}\n testId=\"sync-delete\"\n />\n {error && <ErrorLine message={error} />}\n </div>\n );\n}\n\nconst RESOLVE_CONFLICT = gql`\n mutation SyncControlsResolveConflict($id: ID!, $resolution: PlanmagnetSyncConflictResolution!) {\n planmagnetResolveSyncConflict(id: $id, resolution: $resolution) {\n id\n status\n resolution\n resolvedAt\n resolvedBy\n }\n }\n`;\n\n/** AUT-10/24 — SOURCE_WINS/TARGET_WINS actually push/pull the winning side's data; MANUAL just closes the flag.\n * A refused or failed resolution (e.g. the provider call itself fails) throws server-side and leaves the\n * conflict OPEN rather than recording a resolution that never happened — so on error this shows the reason and\n * the conflict stays in the list exactly as it was. */\nexport function ConflictResolveActions({ conflictId }: { conflictId: string }) {\n const [resolve, state] = useMutation(RESOLVE_CONFLICT, { refetchQueries: SYNC_DETAIL_QUERIES });\n const [error, setError] = useState<string | null>(null);\n const [pending, setPending] = useState<ConflictResolution | null>(null);\n\n const act = async (resolution: ConflictResolution) => {\n setError(null);\n setPending(resolution);\n try {\n await throwOnError(resolve({ variables: { id: conflictId, resolution } }));\n } catch (e) {\n setError(\n isForbidden(e)\n ? 'Your role can view integrations but not change them.'\n : mutationErrorMessage(e, 'The conflict could not be resolved.')\n );\n } finally {\n setPending(null);\n }\n };\n\n return (\n <div className=\"flex flex-col items-start gap-1\" data-testid=\"sync-conflict-resolve\">\n <div className=\"flex flex-wrap gap-2\">\n <Button\n size=\"sm\"\n disabled={state.loading}\n onClick={() => void act('SOURCE_WINS')}\n data-testid=\"sync-conflict-keep-local\"\n >\n {pending === 'SOURCE_WINS' && <Loader2 className=\"mr-1 h-4 w-4 animate-spin\" />}\n Keep PlanMagnet\n </Button>\n <Button\n size=\"sm\"\n variant=\"outline\"\n disabled={state.loading}\n onClick={() => void act('TARGET_WINS')}\n data-testid=\"sync-conflict-take-provider\"\n >\n {pending === 'TARGET_WINS' && <Loader2 className=\"mr-1 h-4 w-4 animate-spin\" />}\n Take provider\n </Button>\n <Button\n size=\"sm\"\n variant=\"ghost\"\n disabled={state.loading}\n onClick={() => void act('MANUAL')}\n data-testid=\"sync-conflict-dismiss\"\n >\n {pending === 'MANUAL' && <Loader2 className=\"mr-1 h-4 w-4 animate-spin\" />}\n Dismiss (manual)\n </Button>\n </div>\n {error && <ErrorLine message={error} />}\n </div>\n );\n}\n\nexport const CONFLICT_STRATEGY_EXPLANATION: Record<ConflictResolution, string> = {\n SOURCE_WINS:\n 'PlanMagnet wins — the local work item overwrites the provider on a detected conflict.',\n TARGET_WINS: 'Provider wins — the external tool overwrites PlanMagnet on a detected conflict.',\n // AUT-24 — field-level merge, not a whole-side pick: see PlanmagnetSyncConflictResolution's own doc comment.\n MERGE:\n \"Merge — keep this project's title and description, take the remote status, priority, labels and due date.\",\n MANUAL: 'Flag and skip — a conflict is recorded and left alone until resolved here.',\n};\n\nconst FIELD = 'mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm';\n\nconst GET_SYNC_CONNECTION = gql`\n query SyncControlsConnection($id: ID!) {\n planmagnetExternalSync(id: $id) {\n id\n connectionConfig\n }\n }\n`;\n\nconst UPDATE_SYNC = gql`\n mutation SyncControlsUpdate($id: ID!, $input: PlanmagnetUpdateExternalSyncInput!) {\n planmagnetUpdateExternalSync(id: $id, input: $input) {\n id\n direction\n conflictStrategy\n fieldMapping\n syncFilters\n externalProjectId\n externalProjectUrl\n }\n }\n`;\n\nexport interface EditableSync {\n id: string;\n provider: string;\n direction: SyncDirection;\n conflictStrategy: ConflictResolution;\n fieldMapping: unknown;\n syncFilters: unknown;\n}\n\n/**\n * The one \"Edit settings\" surface for a sync: direction, conflict strategy, field mapping and sync filters, plus\n * — for GITHUB only, where `connectionConfig`'s shape is real and known (`{ token, owner, repo }`) — an explicit\n * \"Replace connection\" group. The token is never pre-filled (it reads back as `[REDACTED]`, which must never be\n * echoed into the input or resent as if it were real); owner/repo are not secret and DO read back real values, so\n * they pre-fill and stay editable. Because `PlanmagnetUpdateExternalSyncInput.connectionConfig` REPLACES the\n * whole stored config rather than merging, changing owner or repo without also supplying a fresh token would\n * discard the stored token — so the form requires all three together whenever any of the three changed, and\n * sends none of them (keeping the stored connection untouched) when none did.\n */\nexport function EditSyncDialog({ sync }: { sync: EditableSync }) {\n const [open, setOpen] = useState(false);\n const isGithub = sync.provider === 'GITHUB';\n const { capabilities } = useSyncProviderCapabilities();\n const capability = capabilities.find((c) => c.provider === sync.provider);\n const allowedDirections = capability\n ? SYNC_DIRECTIONS.filter((d) => directionSupported(capability, d))\n : SYNC_DIRECTIONS;\n\n const initialMapping = parseGithubFieldMapping(sync.fieldMapping);\n const initialFiltersText = sync.syncFilters ? JSON.stringify(sync.syncFilters, null, 2) : '';\n\n const [direction, setDirection] = useState<SyncDirection>(sync.direction);\n const [conflictStrategy, setConflictStrategy] = useState<ConflictResolution>(\n sync.conflictStrategy\n );\n const [priorityPrefix, setPriorityPrefix] = useState(initialMapping.priority);\n const [dueDatePrefix, setDueDatePrefix] = useState(initialMapping.dueDate);\n const [filtersText, setFiltersText] = useState(initialFiltersText);\n const [filtersError, setFiltersError] = useState<string | null>(null);\n // Raw user edits, '' meaning \"untouched\". `effectiveOwner`/`effectiveRepo` below fall back to the real,\n // non-secret value the query loads — no `useEffect` seeding required (and none of the cascading-render risk\n // it brings): until the user types, the field simply displays the loaded value; the moment they type anything,\n // their edit takes over, even if it round-trips to the same text.\n const [owner, setOwner] = useState('');\n const [repo, setRepo] = useState('');\n const [token, setToken] = useState('');\n const [error, setError] = useState<string | null>(null);\n\n const { data: connectionData } = useQuery<{\n planmagnetExternalSync: { id: string; connectionConfig: Record<string, unknown> } | null;\n }>(GET_SYNC_CONNECTION, { variables: { id: sync.id }, skip: !open || !isGithub });\n\n const config = connectionData?.planmagnetExternalSync?.connectionConfig;\n const loadedOwner = typeof config?.owner === 'string' ? config.owner : '';\n const loadedRepo = typeof config?.repo === 'string' ? config.repo : '';\n const effectiveOwner = owner || loadedOwner;\n const effectiveRepo = repo || loadedRepo;\n\n const resetForm = () => {\n setDirection(sync.direction);\n setConflictStrategy(sync.conflictStrategy);\n setPriorityPrefix(initialMapping.priority);\n setDueDatePrefix(initialMapping.dueDate);\n setFiltersText(initialFiltersText);\n setFiltersError(null);\n setOwner('');\n setRepo('');\n setToken('');\n setError(null);\n };\n\n const [update, state] = useMutation(UPDATE_SYNC, {\n refetchQueries: [...SYNC_LIST_QUERIES, ...SYNC_DETAIL_QUERIES],\n });\n\n const connectionChanged =\n isGithub &&\n !!config &&\n (effectiveOwner !== loadedOwner || effectiveRepo !== loadedRepo || token.trim() !== '');\n const mappingChanged =\n priorityPrefix.trim() !== initialMapping.priority ||\n dueDatePrefix.trim() !== initialMapping.dueDate;\n const filtersChanged = filtersText.trim() !== initialFiltersText.trim();\n\n const save = async () => {\n setError(null);\n setFiltersError(null);\n const input: Record<string, unknown> = {};\n if (direction !== sync.direction) input.direction = direction;\n if (conflictStrategy !== sync.conflictStrategy) input.conflictStrategy = conflictStrategy;\n if (mappingChanged) {\n input.fieldMapping = {\n ...(priorityPrefix.trim() ? { priority: priorityPrefix.trim() } : {}),\n ...(dueDatePrefix.trim() ? { dueDate: dueDatePrefix.trim() } : {}),\n };\n }\n if (filtersChanged) {\n const trimmed = filtersText.trim();\n if (!trimmed) {\n input.syncFilters = null;\n } else {\n try {\n input.syncFilters = JSON.parse(trimmed);\n } catch {\n setFiltersError('Sync filters must be valid JSON.');\n return;\n }\n }\n }\n if (connectionChanged) {\n if (!token.trim() || !effectiveOwner.trim() || !effectiveRepo.trim()) {\n setError('Changing the owner, repo or token requires all three — re-enter the token too.');\n return;\n }\n if (!isValidGithubOwner(effectiveOwner) || !isValidGithubRepo(effectiveRepo)) {\n setError(\n 'Owner and repo must look like real GitHub names (letters, digits, \"-\", \"_\", \".\").'\n );\n return;\n }\n input.connectionConfig = {\n token: token.trim(),\n owner: effectiveOwner.trim(),\n repo: effectiveRepo.trim(),\n };\n }\n if (Object.keys(input).length === 0) {\n setOpen(false);\n return;\n }\n try {\n await throwOnError(update({ variables: { id: sync.id, input } }));\n setOpen(false);\n } catch (e) {\n setError(\n isForbidden(e)\n ? 'Your role can view integrations but not change them.'\n : mutationErrorMessage(e, 'The sync could not be saved.')\n );\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={(next) => {\n setOpen(next);\n if (!next) resetForm();\n }}\n >\n <ResponsiveDialogTrigger asChild>\n <Button size=\"sm\" variant=\"outline\" data-testid=\"sync-edit-settings\">\n <Pencil className=\"mr-1 h-4 w-4\" />\n Edit settings\n </Button>\n </ResponsiveDialogTrigger>\n <ResponsiveDialogContent className=\"max-w-lg max-h-[85vh] overflow-y-auto\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Edit sync settings</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>Only changed fields are saved.</ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n <div className=\"space-y-4\">\n <div>\n <span className=\"text-sm font-medium\">Direction</span>\n <div className=\"mt-1 flex flex-col gap-1\" role=\"radiogroup\" aria-label=\"Direction\">\n {allowedDirections.map((d) => (\n <label key={d} className=\"flex items-center gap-2 text-sm\">\n <input\n type=\"radio\"\n name=\"sync-edit-direction\"\n checked={direction === d}\n onChange={() => setDirection(d)}\n />\n {directionLabel(d)}\n </label>\n ))}\n </div>\n </div>\n <div>\n <label htmlFor=\"sync-edit-strategy\" className=\"text-sm font-medium\">\n Conflict strategy\n </label>\n <select\n id=\"sync-edit-strategy\"\n className={FIELD}\n value={conflictStrategy}\n onChange={(e) => setConflictStrategy(e.target.value as ConflictResolution)}\n >\n {CONFLICT_RESOLUTIONS.map((r) => (\n <option key={r} value={r}>\n {enumLabel(r)}\n </option>\n ))}\n </select>\n <p className=\"mt-1 text-xs text-muted-foreground\">\n {CONFLICT_STRATEGY_EXPLANATION[conflictStrategy]}\n </p>\n </div>\n {isGithub && (\n <div className=\"space-y-2 rounded-md border p-3\">\n <p className=\"text-sm font-medium\">Field mapping (GitHub labels)</p>\n <p className=\"text-xs text-muted-foreground\">\n GitHub issues have no native priority or due-date field — PlanMagnet encodes each as\n a label of the form <code>prefix+value</code> (e.g. <code>priority:HIGH</code>).\n Leave blank to use the built-in prefix.\n </p>\n <div>\n <label\n htmlFor=\"sync-edit-priority-prefix\"\n className=\"text-xs text-muted-foreground\"\n >\n Priority label prefix (default &quot;{GITHUB_FIELD_MAPPING_DEFAULTS.priority}\n &quot;)\n </label>\n <Input\n id=\"sync-edit-priority-prefix\"\n className=\"mt-1\"\n placeholder={GITHUB_FIELD_MAPPING_DEFAULTS.priority}\n value={priorityPrefix}\n onChange={(e) => setPriorityPrefix(e.target.value)}\n />\n </div>\n <div>\n <label htmlFor=\"sync-edit-duedate-prefix\" className=\"text-xs text-muted-foreground\">\n Due-date label prefix (default &quot;{GITHUB_FIELD_MAPPING_DEFAULTS.dueDate}\n &quot;)\n </label>\n <Input\n id=\"sync-edit-duedate-prefix\"\n className=\"mt-1\"\n placeholder={GITHUB_FIELD_MAPPING_DEFAULTS.dueDate}\n value={dueDatePrefix}\n onChange={(e) => setDueDatePrefix(e.target.value)}\n />\n </div>\n </div>\n )}\n <div>\n <label htmlFor=\"sync-edit-filters\" className=\"text-sm font-medium\">\n Sync filters (advanced, JSON)\n </label>\n <p className=\"text-xs text-muted-foreground\">\n Stored on the sync but not yet read by any run — reserved for a future filtering\n feature. Leave blank unless you know you need this.\n </p>\n <Textarea\n id=\"sync-edit-filters\"\n className=\"mt-1 font-mono text-xs min-h-[72px]\"\n value={filtersText}\n onChange={(e) => setFiltersText(e.target.value)}\n />\n {filtersError && <ErrorLine message={filtersError} />}\n </div>\n {isGithub && (\n <div className=\"space-y-2 rounded-md border p-3\">\n <p className=\"text-sm font-medium\">Replace connection</p>\n <p className=\"text-xs text-muted-foreground\">\n The token is never shown once saved. Changing the owner, repo or token requires\n re-entering all three — PlanMagnet cannot resend the stored token for you.\n </p>\n <div>\n <label htmlFor=\"sync-edit-owner\" className=\"text-xs text-muted-foreground\">\n Owner\n </label>\n <Input\n id=\"sync-edit-owner\"\n className=\"mt-1\"\n value={effectiveOwner}\n onChange={(e) => setOwner(e.target.value)}\n />\n </div>\n <div>\n <label htmlFor=\"sync-edit-repo\" className=\"text-xs text-muted-foreground\">\n Repository\n </label>\n <Input\n id=\"sync-edit-repo\"\n className=\"mt-1\"\n value={effectiveRepo}\n onChange={(e) => setRepo(e.target.value)}\n />\n </div>\n <div>\n <label htmlFor=\"sync-edit-token\" className=\"text-xs text-muted-foreground\">\n Replace token\n </label>\n <Input\n id=\"sync-edit-token\"\n type=\"password\"\n autoComplete=\"off\"\n className=\"mt-1\"\n placeholder=\"Leave blank to keep the current token\"\n value={token}\n onChange={(e) => setToken(e.target.value)}\n data-testid=\"sync-edit-token\"\n />\n </div>\n </div>\n )}\n {error && <ErrorLine message={error} />}\n </div>\n <ResponsiveDialogFooter>\n <Button\n variant=\"outline\"\n onClick={() => {\n resetForm();\n setOpen(false);\n }}\n >\n Cancel\n </Button>\n <Button\n onClick={() => void save()}\n disabled={state.loading}\n data-testid=\"sync-edit-submit\"\n >\n {state.loading ? 'Saving…' : 'Save'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TemplateControls.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/controls/TemplateControls.tsx"],"names":[],"mappings":"AAeA,qHAAqH;AACrH,eAAO,MAAM,gBAAgB,UAAmC,CAAC;AAQjE;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,UAAU,EACV,IAAI,EACJ,SAAS,EACT,SAAS,GACV,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB,2CAqDA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TemplateControls.js","names":[],"sources":["../../../src/planmagnet/controls/TemplateControls.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useMutation } from '@apollo/client/react';\nimport {\n Button,\n Tooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from '@burdenoff/fe-libs/ui';\nimport { Trash2 } from 'lucide-react';\nimport { ConfirmButton, ErrorLine } from './ConfirmButton';\nimport { throwOnError, LEAVES_PAGE_CONTEXT } from '../utils/mutationResult';\nimport { usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\n\n/** Every query that lists or shows a template, so a delete or edit is visible everywhere without a manual reload. */\nexport const TEMPLATE_QUERIES = ['TemplatesList', 'GetTemplate'];\n\nconst DELETE = gql`\n mutation TemplateControlsDelete($id: ID!) {\n planmagnetDeleteProjectTemplate(id: $id)\n }\n`;\n\n/**\n * Deleting a built-in template is technically accepted by the service (nothing in `TemplateService.delete`\n * checks `isBuiltIn`), but a system-provided starting point disappearing under an ordinary edit is the kind of\n * surprise a production UI should not hand out for free — so this button stays disabled for one, with the\n * reason in a tooltip, rather than silently letting a click remove it.\n */\nexport function TemplateDeleteButton({\n templateId,\n name,\n isBuiltIn,\n onDeleted,\n}: {\n templateId: string;\n name: string;\n isBuiltIn: boolean;\n onDeleted?: () => void;\n}) {\n const navigate = usePlanMagnetNavigate();\n const [remove, { loading }] = useMutation(DELETE, {\n refetchQueries: TEMPLATE_QUERIES.filter((q) => q !== 'GetTemplate'),\n context: LEAVES_PAGE_CONTEXT,\n });\n const [error, setError] = useState<string | null>(null);\n\n const onDelete = async () => {\n setError(null);\n try {\n await throwOnError(remove({ variables: { id: templateId } }));\n if (onDeleted) onDeleted();\n else navigate('/templates/templates-page');\n } catch (e) {\n setError(e instanceof Error ? e.message : 'The template could not be deleted.');\n }\n };\n\n if (isBuiltIn) {\n return (\n <TooltipProvider>\n <Tooltip>\n <TooltipTrigger asChild>\n <span>\n <Button size=\"sm\" variant=\"outline\" disabled data-testid=\"template-delete\">\n <Trash2 className=\"mr-1 h-4 w-4\" />\n Delete\n </Button>\n </span>\n </TooltipTrigger>\n <TooltipContent>Built-in templates can&apos;t be deleted.</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n );\n }\n\n return (\n <div className=\"flex flex-col items-end gap-1\">\n <ConfirmButton\n label=\"Delete\"\n variant=\"outline\"\n icon={<Trash2 className=\"mr-1 h-4 w-4\" />}\n title={`Delete \"${name}\"?`}\n description=\"Projects already created from it are unaffected. This cannot be undone here.\"\n confirmLabel=\"Delete template\"\n destructive\n disabled={loading}\n onConfirm={() => void onDelete()}\n />\n {error && <ErrorLine message={error} />}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;AAgBA,IAAa,IAAmB,CAAC,iBAAiB,cAAc,EAE1D,IAAS,CAAG;;;;;AAYlB,SAAgB,EAAqB,EACnC,eACA,SACA,cACA,gBAMC;CACD,IAAM,IAAW,GAAuB,EAClC,CAAC,GAAQ,EAAE,gBAAa,EAAY,GAAQ;EAChD,gBAAgB,EAAiB,QAAQ,MAAM,MAAM,cAAc;EACnE,SAAS;EACV,CAAC,EACI,CAAC,GAAO,KAAY,EAAwB,KAAK,EAEjD,IAAW,YAAY;AAC3B,IAAS,KAAK;AACd,MAAI;AAEF,GADA,MAAM,EAAa,EAAO,EAAE,WAAW,EAAE,IAAI,GAAY,EAAE,CAAC,CAAC,EACzD,IAAW,GAAW,GACrB,EAAS,4BAA4B;WACnC,GAAG;AACV,KAAS,aAAa,QAAQ,EAAE,UAAU,qCAAqC;;;AAsBnF,QAlBI,IAEA,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UAAA,CACE,kBAAC,GAAD;EAAgB,SAAA;YACd,kBAAC,QAAD,EAAA,UACE,kBAAC,GAAD;GAAQ,MAAK;GAAK,SAAQ;GAAU,UAAA;GAAS,eAAY;aAAzD,CACE,kBAAC,GAAD,EAAQ,WAAU,gBAAiB,CAAA,EAAA,SAE5B;MACJ,CAAA;EACQ,CAAA,EACjB,kBAAC,GAAD,EAAA,UAAgB,wCAA0D,CAAA,CAClE,EAAA,CAAA,EACM,CAAA,GAKpB,kBAAC,OAAD;EAAK,WAAU;YAAf,CACE,kBAAC,GAAD;GACE,OAAM;GACN,SAAQ;GACR,MAAM,kBAAC,GAAD,EAAQ,WAAU,gBAAiB,CAAA;GACzC,OAAO,WAAW,EAAK;GACvB,aAAY;GACZ,cAAa;GACb,aAAA;GACA,UAAU;GACV,iBAAiB,KAAK,GAAU;GAChC,CAAA,EACD,KAAS,kBAAC,GAAD,EAAW,SAAS,GAAS,CAAA,CACnC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"WebhookSubscriptionControls.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/controls/WebhookSubscriptionControls.tsx"],"names":[],"mappings":"AAuBA,OAAO,EAIL,KAAK,sBAAsB,EAE5B,MAAM,0BAA0B,CAAC;AAElC;;;;GAIG;AAEH,eAAO,MAAM,oBAAoB,UAA+B,CAAC;AASjE,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,2CAUhE;AAOD,wBAAgB,0BAA0B,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,2CASxE;AAED,0GAA0G;AAC1G,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,2CAclE;AAqHD;;;;;GAKG;AACH,wBAAgB,+BAA+B,4CA8G9C;AAgBD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,EAAE,cAAc,EAAE,EAAE;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,2CAyEvF;AAkBD;;8GAE8G;AAC9G,wBAAgB,oBAAoB,CAAC,EAAE,YAAY,EAAE,EAAE;IAAE,YAAY,EAAE,sBAAsB,CAAA;CAAE,2CAwE9F;AAQD,wBAAgB,+BAA+B,CAAC,EAAE,cAAc,EAAE,EAAE;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,2CAkC7F;AA+BD;+CAC+C;AAC/C,wBAAgB,kBAAkB,CAAC,EAAE,cAAc,EAAE,EAAE;IAAE,cAAc,EAAE,MAAM,CAAA;CAAE,2CAiHhF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"WebhookSubscriptionControls.js","names":[],"sources":["../../../src/planmagnet/controls/WebhookSubscriptionControls.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useMutation, useQuery } from '@apollo/client/react';\nimport {\n Badge,\n Button,\n Checkbox,\n Input,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n ResponsiveDialogTrigger,\n} from '@burdenoff/fe-libs/ui';\nimport { copyTextToClipboard } from '@burdenoff/fe-libs/sharing';\nimport { Check, Copy, KeyRound, Loader2, Pause, Play, Plus, Power, X } from 'lucide-react';\nimport { throwOnError } from '../utils/mutationResult';\nimport { isForbidden, mutationErrorMessage } from '../utils/graphqlErrors';\nimport { ConfirmButton, ErrorLine } from './ConfirmButton';\nimport { TruncatedText } from './SyncControls';\nimport { TRIGGER_TYPES, triggerTypeLabel } from '../automation/automationRuleTypes';\nimport {\n isPlausibleWebhookUrl,\n webhookEventOptionSuffix,\n type WebhookDeliveryStatus,\n type WebhookSubscriptionRow,\n type WebhookSubscriptionStatus,\n} from '../webhooks/webhookTypes';\n\n/**\n * Outbound webhook subscriptions (AUT-33) — create/rotate/status/delete controls, shared by\n * `pages/IntegrationsWebhooksPagePage.tsx`. See `webhooks/webhookTypes.ts` for the backing shapes and the real\n * SDL doc comments they are grounded in.\n */\n\nexport const WEBHOOK_LIST_QUERIES = ['WebhookSubscriptionsList'];\nconst options = { refetchQueries: WEBHOOK_LIST_QUERIES };\n\nconst STATUS_VARIANT: Record<WebhookSubscriptionStatus, 'success' | 'warning' | 'outline'> = {\n ACTIVE: 'success',\n PAUSED: 'warning',\n DISABLED: 'outline',\n};\n\nexport function WebhookStatusBadge({ status }: { status: string }) {\n return (\n <Badge\n variant={STATUS_VARIANT[status as WebhookSubscriptionStatus] ?? 'outline'}\n className=\"text-xs\"\n data-testid=\"webhook-status-badge\"\n >\n {status === 'ACTIVE' ? 'Active' : status === 'PAUSED' ? 'Paused' : 'Disabled'}\n </Badge>\n );\n}\n\nconst DELIVERY_STATUS_VARIANT: Record<WebhookDeliveryStatus, 'success' | 'destructive'> = {\n SUCCESS: 'success',\n FAILED: 'destructive',\n};\n\nexport function WebhookDeliveryStatusBadge({ status }: { status: string }) {\n return (\n <Badge\n variant={DELIVERY_STATUS_VARIANT[status as WebhookDeliveryStatus] ?? 'outline'}\n className=\"text-xs\"\n >\n {status === 'SUCCESS' ? 'Success' : 'Failed'}\n </Badge>\n );\n}\n\n/** Which `PlanmagnetAutomationTriggerType` values this subscription is delivered for, as small badges. */\nexport function WebhookEventBadges({ events }: { events: string[] }) {\n if (events.length === 0) {\n return <span className=\"text-xs text-muted-foreground\">No events selected</span>;\n }\n return (\n <div className=\"flex flex-wrap gap-1\" data-testid=\"webhook-event-badges\">\n {events.map((event) => (\n <Badge key={event} variant=\"outline\" className=\"text-xs\">\n {triggerTypeLabel(event)}\n {webhookEventOptionSuffix(event)}\n </Badge>\n ))}\n </div>\n );\n}\n\n/** The events checklist shared by the create dialog — every `PlanmagnetAutomationTriggerType` value, with\n * `WEBHOOK` visibly marked \"not live yet\" rather than hidden (a subscription can be prepared for it ahead of\n * BOFF-8238 shipping, same precedent the automation rule builder's own trigger select follows). */\nfunction EventsChecklist({\n idPrefix,\n selected,\n onChange,\n disabled = false,\n}: {\n idPrefix: string;\n selected: string[];\n onChange: (next: string[]) => void;\n disabled?: boolean;\n}) {\n const toggle = (event: string) =>\n onChange(selected.includes(event) ? selected.filter((e) => e !== event) : [...selected, event]);\n return (\n <div\n role=\"group\"\n aria-label=\"Events\"\n className=\"grid grid-cols-1 gap-1.5 sm:grid-cols-2\"\n data-testid=\"webhook-events-checklist\"\n >\n {TRIGGER_TYPES.map((event) => (\n <label\n key={event}\n htmlFor={`${idPrefix}-event-${event}`}\n className=\"flex items-center gap-2 rounded-md border border-input px-2 py-1.5 text-sm\"\n >\n <Checkbox\n id={`${idPrefix}-event-${event}`}\n data-testid={`webhook-event-${event}`}\n checked={selected.includes(event)}\n onCheckedChange={() => toggle(event)}\n disabled={disabled}\n />\n {triggerTypeLabel(event)}\n {webhookEventOptionSuffix(event) && (\n <span className=\"text-xs text-muted-foreground\">{webhookEventOptionSuffix(event)}</span>\n )}\n </label>\n ))}\n </div>\n );\n}\n\nconst CREATE_WEBHOOK_SUBSCRIPTION = gql`\n mutation WebhookSubscriptionCreate($input: PlanmagnetCreateWebhookSubscriptionInput!) {\n planmagnetCreateWebhookSubscription(input: $input) {\n secret\n subscription {\n id\n url\n events\n status\n consecutiveFailures\n lastDeliveryAt\n lastDeliveryStatus\n createdAt\n createdBy\n updatedAt\n updatedBy\n disabledAt\n }\n }\n }\n`;\n\ninterface SubscriptionWithSecret {\n secret: string;\n subscription: WebhookSubscriptionRow;\n}\n\n/** The secret-shown-once panel, identical in the create dialog and the rotate dialog below: copy it now, it\n * cannot be read back from the API again. */\nfunction SecretRevealPanel({ secret }: { secret: string }) {\n const [copied, setCopied] = useState(false);\n const copy = async () => {\n try {\n await copyTextToClipboard(secret);\n setCopied(true);\n } catch {\n setCopied(false);\n }\n };\n return (\n <div\n className=\"space-y-2 rounded-md border border-primary bg-primary/5 p-3\"\n data-testid=\"webhook-secret-reveal\"\n >\n <p className=\"text-sm font-medium\">Signing secret — copy it now.</p>\n <p className=\"text-xs text-muted-foreground\">\n You will not see this again. If you lose it, rotate the secret to get a new one.\n </p>\n <div className=\"flex items-center gap-2\">\n <Input\n readOnly\n value={secret}\n className=\"font-mono text-xs\"\n data-testid=\"webhook-secret-value\"\n />\n <Button\n size=\"sm\"\n variant=\"outline\"\n onClick={() => void copy()}\n data-testid=\"webhook-secret-copy\"\n >\n {copied ? <Check className=\"h-4 w-4\" /> : <Copy className=\"h-4 w-4\" />}\n {copied ? 'Copied' : 'Copy'}\n </Button>\n </div>\n </div>\n );\n}\n\n/**\n * \"New subscription\": https:// URL + events checklist, then the signing secret shown exactly once. Every way of\n * closing (the footer button, the X, Escape, an outside click) goes through one `close()` — see\n * `reports/ShareDialog.tsx`'s own fix (#45) for why setting `open` directly on the controlled dialog is not\n * enough: the footer button used to skip the reset there, and the just-created secret reappeared on reopen.\n */\nexport function CreateWebhookSubscriptionDialog() {\n const [open, setOpen] = useState(false);\n const [url, setUrl] = useState('');\n const [events, setEvents] = useState<string[]>([]);\n const [error, setError] = useState<string | null>(null);\n const [justCreated, setJustCreated] = useState<SubscriptionWithSecret | null>(null);\n const [create, state] = useMutation<{\n planmagnetCreateWebhookSubscription: SubscriptionWithSecret;\n }>(CREATE_WEBHOOK_SUBSCRIPTION, options);\n\n const urlValid = isPlausibleWebhookUrl(url);\n const canSave = urlValid && events.length > 0 && !state.loading;\n\n const close = () => {\n setOpen(false);\n setUrl('');\n setEvents([]);\n setJustCreated(null);\n setError(null);\n };\n\n const submit = async () => {\n if (!canSave) return;\n setError(null);\n try {\n const result = await throwOnError(\n create({ variables: { input: { url: url.trim(), events } } })\n );\n const created = result.data?.planmagnetCreateWebhookSubscription;\n if (created) setJustCreated(created);\n } catch (e) {\n setError(\n isForbidden(e)\n ? 'Your role can view webhook subscriptions but not create them.'\n : mutationErrorMessage(e, 'The subscription could not be created.')\n );\n }\n };\n\n return (\n <ResponsiveDialog open={open} onOpenChange={(next) => (next ? setOpen(true) : close())}>\n <ResponsiveDialogTrigger asChild>\n <Button size=\"sm\" data-testid=\"webhook-create-open\">\n <Plus className=\"mr-1 h-4 w-4\" />\n New subscription\n </Button>\n </ResponsiveDialogTrigger>\n <ResponsiveDialogContent className=\"max-h-[85vh] max-w-lg overflow-y-auto\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>New webhook subscription</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n PlanMagnet POSTs a signed event payload to this URL as the events below happen.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n\n {!justCreated ? (\n <div className=\"space-y-3\">\n <div>\n <label htmlFor=\"webhook-create-url\" className=\"text-sm font-medium\">\n URL\n </label>\n <Input\n id=\"webhook-create-url\"\n data-testid=\"webhook-create-url\"\n className=\"mt-1\"\n placeholder=\"https://example.com/webhooks/planmagnet\"\n value={url}\n aria-invalid={url !== '' && !urlValid}\n onChange={(e) => setUrl(e.target.value)}\n />\n {url !== '' && !urlValid && <ErrorLine message=\"Must be an absolute https:// URL.\" />}\n </div>\n <div>\n <p className=\"text-sm font-medium\">Events</p>\n <div className=\"mt-1\">\n <EventsChecklist idPrefix=\"webhook-create\" selected={events} onChange={setEvents} />\n </div>\n {events.length === 0 && (\n <p className=\"mt-1 text-xs text-muted-foreground\">Choose at least one event.</p>\n )}\n </div>\n {error && <ErrorLine message={error} />}\n </div>\n ) : (\n <SecretRevealPanel secret={justCreated.secret} />\n )}\n\n <ResponsiveDialogFooter>\n {!justCreated ? (\n <>\n <Button variant=\"outline\" onClick={close}>\n Cancel\n </Button>\n <Button\n onClick={() => void submit()}\n disabled={!canSave}\n data-testid=\"webhook-create-submit\"\n >\n {state.loading ? 'Creating…' : 'Create subscription'}\n </Button>\n </>\n ) : (\n <Button onClick={close} data-testid=\"webhook-create-done\">\n Done\n </Button>\n )}\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n\nconst ROTATE_WEBHOOK_SUBSCRIPTION_SECRET = gql`\n mutation WebhookSubscriptionRotateSecret($id: ID!) {\n planmagnetRotateWebhookSubscriptionSecret(id: $id) {\n secret\n subscription {\n id\n status\n consecutiveFailures\n updatedAt\n }\n }\n }\n`;\n\n/**\n * \"Rotate secret\": the old secret stops verifying deliveries immediately, the new one is shown exactly once.\n * Same one-`close()`-for-every-exit discipline as the create dialog above.\n */\nexport function RotateWebhookSecretButton({ subscriptionId }: { subscriptionId: string }) {\n const [open, setOpen] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [justRotated, setJustRotated] = useState<SubscriptionWithSecret | null>(null);\n const [rotate, state] = useMutation<{\n planmagnetRotateWebhookSubscriptionSecret: SubscriptionWithSecret;\n }>(ROTATE_WEBHOOK_SUBSCRIPTION_SECRET, options);\n\n const close = () => {\n setOpen(false);\n setJustRotated(null);\n setError(null);\n };\n\n const submit = async () => {\n setError(null);\n try {\n const result = await throwOnError(rotate({ variables: { id: subscriptionId } }));\n const rotated = result.data?.planmagnetRotateWebhookSubscriptionSecret;\n if (rotated) setJustRotated(rotated);\n } catch (e) {\n setError(\n isForbidden(e)\n ? 'Your role can view webhook subscriptions but not rotate their secret.'\n : mutationErrorMessage(e, 'The secret could not be rotated.')\n );\n }\n };\n\n return (\n <ResponsiveDialog open={open} onOpenChange={(next) => (next ? setOpen(true) : close())}>\n <ResponsiveDialogTrigger asChild>\n <Button size=\"sm\" variant=\"outline\" data-testid=\"webhook-rotate-open\">\n <KeyRound className=\"mr-1 h-4 w-4\" />\n Rotate secret\n </Button>\n </ResponsiveDialogTrigger>\n <ResponsiveDialogContent className=\"max-w-md\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>Rotate signing secret?</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n The current secret stops verifying deliveries immediately. Update the receiving endpoint\n with the new one before closing this dialog.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n {!justRotated ? (\n <div className=\"space-y-2\">{error && <ErrorLine message={error} />}</div>\n ) : (\n <SecretRevealPanel secret={justRotated.secret} />\n )}\n <ResponsiveDialogFooter>\n {!justRotated ? (\n <>\n <Button variant=\"outline\" onClick={close}>\n Cancel\n </Button>\n <Button\n onClick={() => void submit()}\n disabled={state.loading}\n data-testid=\"webhook-rotate-submit\"\n >\n {state.loading ? 'Rotating…' : 'Rotate secret'}\n </Button>\n </>\n ) : (\n <Button onClick={close} data-testid=\"webhook-rotate-done\">\n Done\n </Button>\n )}\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n\nconst UPDATE_WEBHOOK_SUBSCRIPTION_STATUS = gql`\n mutation WebhookSubscriptionUpdateStatus(\n $id: ID!\n $input: PlanmagnetUpdateWebhookSubscriptionInput!\n ) {\n planmagnetUpdateWebhookSubscription(id: $id, input: $input) {\n id\n status\n consecutiveFailures\n disabledAt\n updatedAt\n updatedBy\n }\n }\n`;\n\n/** Pause/Resume/Disable/Re-enable — every transition `PlanmagnetWebhookSubscriptionStatus` allows, via the one\n * update mutation (its own doc comment: \"PAUSED/ACTIVE are the owner's own choice; setting DISABLED by hand is\n * also accepted\"). Re-activating (PAUSED or DISABLED -> ACTIVE) resets `consecutiveFailures` server-side. */\nexport function WebhookStatusActions({ subscription }: { subscription: WebhookSubscriptionRow }) {\n const [update, state] = useMutation(UPDATE_WEBHOOK_SUBSCRIPTION_STATUS, options);\n const [error, setError] = useState<string | null>(null);\n\n const setStatus = async (status: WebhookSubscriptionStatus) => {\n setError(null);\n try {\n await throwOnError(update({ variables: { id: subscription.id, input: { status } } }));\n } catch (e) {\n setError(\n isForbidden(e)\n ? 'Your role can view webhook subscriptions but not change them.'\n : mutationErrorMessage(e, 'The status could not be changed.')\n );\n }\n };\n\n return (\n <div className=\"flex flex-col items-start gap-1\">\n <div className=\"flex flex-wrap gap-2\">\n {subscription.status === 'ACTIVE' && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n disabled={state.loading}\n onClick={() => void setStatus('PAUSED')}\n data-testid=\"webhook-pause\"\n >\n <Pause className=\"mr-1 h-4 w-4\" />\n Pause\n </Button>\n )}\n {subscription.status === 'PAUSED' && (\n <Button\n size=\"sm\"\n variant=\"outline\"\n disabled={state.loading}\n onClick={() => void setStatus('ACTIVE')}\n data-testid=\"webhook-resume\"\n >\n <Play className=\"mr-1 h-4 w-4\" />\n Resume\n </Button>\n )}\n {subscription.status === 'DISABLED' ? (\n <Button\n size=\"sm\"\n variant=\"outline\"\n disabled={state.loading}\n onClick={() => void setStatus('ACTIVE')}\n data-testid=\"webhook-reenable\"\n >\n <Power className=\"mr-1 h-4 w-4\" />\n Re-enable\n </Button>\n ) : (\n <Button\n size=\"sm\"\n variant=\"outline\"\n disabled={state.loading}\n onClick={() => void setStatus('DISABLED')}\n data-testid=\"webhook-disable\"\n >\n <Power className=\"mr-1 h-4 w-4\" />\n Disable\n </Button>\n )}\n {state.loading && <Loader2 className=\"h-4 w-4 animate-spin text-muted-foreground\" />}\n </div>\n {error && <ErrorLine message={error} />}\n </div>\n );\n}\n\nconst DELETE_WEBHOOK_SUBSCRIPTION = gql`\n mutation WebhookSubscriptionDelete($id: ID!) {\n planmagnetDeleteWebhookSubscription(id: $id)\n }\n`;\n\nexport function DeleteWebhookSubscriptionButton({ subscriptionId }: { subscriptionId: string }) {\n const [remove, state] = useMutation(DELETE_WEBHOOK_SUBSCRIPTION, options);\n const [error, setError] = useState<string | null>(null);\n\n const onDelete = async () => {\n setError(null);\n try {\n await throwOnError(remove({ variables: { id: subscriptionId } }));\n } catch (e) {\n setError(\n isForbidden(e)\n ? 'Your role can view webhook subscriptions but not delete them.'\n : mutationErrorMessage(e, 'The subscription could not be deleted.')\n );\n }\n };\n\n return (\n <div className=\"flex flex-col items-end gap-1\">\n <ConfirmButton\n label=\"Delete\"\n variant=\"outline\"\n icon={<X className=\"mr-1 h-4 w-4\" />}\n title=\"Delete this webhook subscription?\"\n description=\"Deliveries stop immediately. Its delivery log is removed with it. This cannot be undone.\"\n confirmLabel=\"Delete subscription\"\n destructive\n disabled={state.loading}\n onConfirm={() => void onDelete()}\n testId=\"webhook-delete\"\n />\n {error && <ErrorLine message={error} />}\n </div>\n );\n}\n\nconst WEBHOOK_SUBSCRIPTION_DELIVERIES = gql`\n query WebhookSubscriptionDeliveries(\n $subscriptionId: ID!\n $pagination: PlanmagnetPaginationInput\n ) {\n planmagnetWebhookSubscriptionDeliveries(\n subscriptionId: $subscriptionId\n pagination: $pagination\n ) {\n totalCount\n pageInfo {\n hasNextPage\n endCursor\n }\n items {\n id\n event\n status\n responseStatus\n attempts\n error\n deliveredAt\n }\n }\n }\n`;\n\nconst DELIVERIES_PAGE = 20;\n\n/** The delivery log for one subscription (AUT-33): event, status, response status, attempts, error, time —\n * newest first, loaded only once expanded. */\nexport function WebhookDeliveryLog({ subscriptionId }: { subscriptionId: string }) {\n const [loadingMore, setLoadingMore] = useState(false);\n const { data, loading, error, fetchMore } = useQuery<{\n planmagnetWebhookSubscriptionDeliveries: {\n totalCount: number;\n pageInfo: { hasNextPage: boolean; endCursor: string | null };\n items: {\n id: string;\n event: string;\n status: string;\n responseStatus: number | null;\n attempts: number;\n error: string | null;\n deliveredAt: string;\n }[];\n };\n }>(WEBHOOK_SUBSCRIPTION_DELIVERIES, {\n variables: { subscriptionId, pagination: { first: DELIVERIES_PAGE } },\n });\n\n const list = data?.planmagnetWebhookSubscriptionDeliveries;\n const deliveries = list?.items ?? [];\n\n const loadMore = async () => {\n const after = list?.pageInfo.endCursor;\n if (!after) return;\n setLoadingMore(true);\n try {\n await fetchMore({\n variables: { pagination: { first: DELIVERIES_PAGE, after } },\n updateQuery: (prev, { fetchMoreResult }) => ({\n planmagnetWebhookSubscriptionDeliveries: {\n ...fetchMoreResult.planmagnetWebhookSubscriptionDeliveries,\n items: [\n ...prev.planmagnetWebhookSubscriptionDeliveries.items,\n ...fetchMoreResult.planmagnetWebhookSubscriptionDeliveries.items,\n ],\n },\n }),\n });\n } finally {\n setLoadingMore(false);\n }\n };\n\n return (\n <div className=\"space-y-2\" data-testid=\"webhook-deliveries\">\n {error && (\n <p role=\"alert\" className=\"text-sm text-destructive\">\n Deliveries could not be loaded: {error.message}\n </p>\n )}\n {loading && !data && <p className=\"text-sm text-muted-foreground\">Loading deliveries…</p>}\n {list && deliveries.length === 0 && (\n <p className=\"py-4 text-center text-sm text-muted-foreground\">No deliveries yet.</p>\n )}\n {deliveries.length > 0 && (\n <div className=\"overflow-x-auto\">\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"text-left text-muted-foreground\">\n <th className=\"py-1 pr-3 font-medium\">Time</th>\n <th className=\"py-1 pr-3 font-medium\">Event</th>\n <th className=\"py-1 pr-3 font-medium\">Status</th>\n <th className=\"py-1 pr-3 font-medium\">Response</th>\n <th className=\"py-1 pr-3 font-medium\">Attempts</th>\n <th className=\"py-1 font-medium\">Error</th>\n </tr>\n </thead>\n <tbody>\n {deliveries.map((delivery) => (\n <tr\n key={delivery.id}\n className=\"border-t align-top\"\n data-testid=\"webhook-delivery-row\"\n >\n <td className=\"py-1.5 pr-3 whitespace-nowrap\">\n {new Date(delivery.deliveredAt).toLocaleString()}\n </td>\n <td className=\"py-1.5 pr-3 whitespace-nowrap\">\n {triggerTypeLabel(delivery.event)}\n </td>\n <td className=\"py-1.5 pr-3\">\n <WebhookDeliveryStatusBadge status={delivery.status} />\n </td>\n <td className=\"py-1.5 pr-3 whitespace-nowrap\">\n {delivery.responseStatus ?? <span className=\"text-muted-foreground\">—</span>}\n </td>\n <td className=\"py-1.5 pr-3\">{delivery.attempts}</td>\n <td className=\"py-1.5 text-status-error-text\">\n {delivery.error ? (\n <TruncatedText\n text={delivery.error}\n max={120}\n className=\"text-status-error-text\"\n />\n ) : (\n <span className=\"text-muted-foreground\">—</span>\n )}\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )}\n {list?.pageInfo.hasNextPage && (\n <Button size=\"sm\" variant=\"outline\" onClick={() => void loadMore()} disabled={loadingMore}>\n {loadingMore ? 'Loading…' : `Show more (${deliveries.length} of ${list.totalCount})`}\n </Button>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"WorkItemControls.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/controls/WorkItemControls.tsx"],"names":[],"mappings":"AAYA;;;;;;;;GAQG;AAEH,eAAO,MAAM,kBAAkB,0FAQrB,CAAC;AACX,eAAO,MAAM,oBAAoB,wDAAyD,CAAC;AAE3F,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG/C;AAmCD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM;kBAMvB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;EASnD;AAED,wDAAwD;AACxD,wBAAgB,kBAAkB,CAAC,EACjC,UAAU,EACV,KAAK,EACL,KAAK,EACL,OAAO,EACP,KAAK,GACN,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf,2CAyBA;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,UAAU,EACV,SAAS,EACT,KAAK,GACN,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,2CA8BA;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;;;;;;;;EAmBtE;AAED,mGAAmG;AACnG,wBAAgB,cAAc,CAAC,EAC7B,EAAE,EACF,KAAK,EACL,QAAQ,EACR,QAAgB,EAChB,SAAwB,EACxB,SAAsB,GACvB,EAAE;IACD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4FAA4F;IAC5F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qFAAqF;IACrF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CAkCA;AAED,2DAA2D;AAC3D,wBAAgB,sBAAsB,CAAC,EACrC,UAAU,EACV,UAAU,GACX,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B,2CAcA;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,UAAU,EACV,OAAO,GACR,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB,2CAsBA;AAED,kDAAkD;AAClD,wBAAgB,qBAAqB,CAAC,EACpC,UAAU,EACV,KAAK,GACN,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,2CA6CA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"WorkItemControls.js","names":[],"sources":["../../../src/planmagnet/controls/WorkItemControls.tsx"],"sourcesContent":["import { useState } from 'react';\nimport { gql } from '@apollo/client';\nimport { useMutation } from '@apollo/client/react';\nimport { useWorkspaceDirectory } from '@burdenoff/fe-libs/sharing';\nimport { Button } from '@burdenoff/fe-libs/ui';\nimport { Pencil, Trash2 } from 'lucide-react';\nimport { allowedTargets, useProjectWorkflow, workflowLabel } from '../hooks/useProjectWorkflow';\nimport { usePersonProfile } from '../people/People';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { throwOnError, LEAVES_PAGE_CONTEXT } from '../utils/mutationResult';\nimport { ConfirmButton, ErrorLine } from './ConfirmButton';\n\n/**\n * Task controls (BOFF-7938, BOFF-7939). Until 2026-09-27 the task detail page was read-only: no status, priority or\n * assignee control, no Edit link (the Edit Task page existed but nothing led to it) and no Delete. A task's status\n * could only change by dragging its card on a project board, and nobody could be assigned at all — so every Team\n * page, sprint \"Team Members\" list and board card read \"Unassigned\".\n *\n * Every control saves through planmagnetUpdateWorkItem, the same path the board uses, so a status change records\n * its history (activity feed, cycle time) exactly like a drag. A refusal keeps the stored value and shows the reason.\n */\n\nexport const WORK_ITEM_STATUSES = [\n 'BACKLOG',\n 'TODO',\n 'IN_PROGRESS',\n 'IN_REVIEW',\n 'TESTING',\n 'DONE',\n 'CANCELLED',\n] as const;\nexport const WORK_ITEM_PRIORITIES = ['NONE', 'LOW', 'MEDIUM', 'HIGH', 'CRITICAL'] as const;\n\nexport function enumLabel(value: string): string {\n const words = value.toLowerCase().replace(/_/g, ' ');\n return words.charAt(0).toUpperCase() + words.slice(1);\n}\n\nconst UPDATE_WORK_ITEM = gql`\n mutation WorkItemControlsUpdate($id: ID!, $input: PlanmagnetUpdateWorkItemInput!) {\n planmagnetUpdateWorkItem(id: $id, input: $input) {\n id\n status\n priority\n assigneeId\n }\n }\n`;\nconst DELETE_WORK_ITEM = gql`\n mutation WorkItemControlsDelete($id: ID!) {\n planmagnetDeleteWorkItem(id: $id)\n }\n`;\n\n/** Every query that shows a task's status, priority or assignee. */\nconst LIST_QUERIES = [\n 'GetWorkItems',\n 'GetWorkItemCounts',\n 'ProjectBoard',\n 'GetDashboardData',\n // BOFF-8048: My Work reads the same underlying rows by assigneeId — an inline edit made elsewhere (the board, the\n // detail page) must not leave a stale row sitting in a workspace member's My Work list.\n 'GetMyWorkItems',\n];\nconst DETAIL_QUERIES = ['GetWorkItemDetail', 'WorkItemActivity', ...LIST_QUERIES];\n\nconst selectClass =\n 'rounded-md border border-input bg-background px-2 py-1 text-sm disabled:opacity-60 max-w-[12rem]';\nconst dateInputClass =\n 'rounded-md border border-input bg-background px-2 py-1 text-sm disabled:opacity-60';\n\n/**\n * Shared by every inline-edit control on this page and on My Work (BOFF-8048): saves through\n * planmagnetUpdateWorkItem and surfaces a refusal (workflow, validation) as `error` rather than swallowing it —\n * see utils/mutationResult.ts. Exported so a page composing several of these controls in one row (My Work) can also\n * drive its own due-date input through the identical save path without re-deriving it.\n */\nexport function useWorkItemUpdate(workItemId: string) {\n const [update, state] = useMutation(UPDATE_WORK_ITEM, {\n refetchQueries: DETAIL_QUERIES,\n awaitRefetchQueries: true,\n });\n const [error, setError] = useState<string | null>(null);\n const save = async (input: Record<string, unknown>) => {\n setError(null);\n try {\n await throwOnError(update({ variables: { id: workItemId, input } }));\n } catch (e) {\n setError(e instanceof Error ? e.message : 'The task could not be updated.');\n }\n };\n return { save, saving: state.loading, error };\n}\n\n/** A status or priority select that saves on change. */\nexport function WorkItemEnumSelect({\n workItemId,\n field,\n value,\n options,\n label,\n}: {\n workItemId: string;\n field: 'status' | 'priority';\n value: string;\n options: readonly string[];\n label: string;\n}) {\n const { save, saving, error } = useWorkItemUpdate(workItemId);\n // A stored value the list does not know (older data) stays selectable rather than silently showing another one.\n const all = options.includes(value) ? options : [value, ...options];\n return (\n <div className=\"flex flex-col items-end gap-1\">\n <select\n aria-label={label}\n data-testid={`task-${field}`}\n className={selectClass}\n value={value}\n disabled={saving}\n onChange={(e) => {\n if (e.target.value !== value) void save({ [field]: e.target.value });\n }}\n >\n {all.map((option) => (\n <option key={option} value={option}>\n {enumLabel(option)}\n </option>\n ))}\n </select>\n {error && <ErrorLine message={error} />}\n </div>\n );\n}\n\n/**\n * The status select (BOFF-8043): the project's names for its statuses, and only the moves its workflow allows — the\n * server refuses anything else anyway, with the reason shown below the select.\n */\nexport function WorkItemStatusSelect({\n workItemId,\n projectId,\n value,\n}: {\n workItemId: string;\n projectId: string;\n value: string;\n}) {\n const workflow = useProjectWorkflow(projectId);\n const { save, saving, error } = useWorkItemUpdate(workItemId);\n const options = allowedTargets(workflow, value, WORK_ITEM_STATUSES);\n return (\n <div className=\"flex flex-col items-end gap-1\">\n <select\n aria-label=\"Status\"\n data-testid=\"task-status\"\n className={selectClass}\n value={value}\n disabled={saving}\n onChange={(e) => {\n if (e.target.value !== value) void save({ status: e.target.value });\n }}\n >\n {options.map((option) => (\n <option key={option} value={option}>\n {workflowLabel(workflow, option)}\n </option>\n ))}\n </select>\n {workflow?.enforceTransitions && (\n <span className=\"text-[11px] text-muted-foreground\">\n Only the moves this project allows\n </span>\n )}\n {error && <ErrorLine message={error} />}\n </div>\n );\n}\n\n/**\n * Workspace members for an assignee picker, from the fe-libs workspace directory (what the sharing picker uses; any\n * member can read it). Option values are USER ids. `planmagnetWorkspaceEditors` is not used: it needs PlanMagnet\n * admin rights, so an ordinary member would get an empty picker.\n */\nexport function useAssigneeOptions(currentId: string | null | undefined) {\n const { workspaceId, authToken, apiGatewayUrl } = usePlanMagnet();\n const directory = useWorkspaceDirectory({\n workspaceId: workspaceId ?? '',\n authToken: authToken ?? undefined,\n apiGatewayUrl: apiGatewayUrl ?? undefined,\n });\n const current = usePersonProfile(currentId);\n const options = directory.members.map((m) => ({ id: m.id, name: m.name }));\n // The current assignee may be outside the loaded page (or no longer a member): keep them selectable by name.\n if (currentId && current && !options.some((o) => o.id === currentId)) {\n options.unshift({ id: currentId, name: current.displayName });\n }\n return {\n options,\n loading: directory.loading,\n hasMore: directory.hasMore,\n fetchMore: directory.fetchMore,\n };\n}\n\n/** A plain workspace-member select (for forms). '' means `noneLabel` (\"Unassigned\" by default). */\nexport function AssigneeSelect({\n id,\n value,\n onChange,\n disabled = false,\n noneLabel = 'Unassigned',\n ariaLabel = 'Assignee',\n}: {\n id?: string;\n value: string;\n onChange: (userId: string) => void;\n disabled?: boolean;\n /** BOFF-8044: e.g. \"No lead\" when reused for a Team's leadId, which isn't an \"assignee\". */\n noneLabel?: string;\n /** The control's accessible name when it has no visible `<label>` (i.e. no `id`). */\n ariaLabel?: string;\n}) {\n const { options, loading, hasMore, fetchMore } = useAssigneeOptions(value || null);\n return (\n <div className=\"flex flex-col gap-1\">\n <select\n id={id}\n aria-label={id ? undefined : ariaLabel}\n data-testid=\"assignee-select\"\n className={selectClass}\n value={value}\n disabled={disabled}\n onChange={(e) => onChange(e.target.value)}\n >\n <option value=\"\">{noneLabel}</option>\n {options.map((o) => (\n <option key={o.id} value={o.id}>\n {o.name}\n </option>\n ))}\n </select>\n {loading && options.length === 0 && (\n <span className=\"text-xs text-muted-foreground\">Loading members…</span>\n )}\n {hasMore && (\n <button\n type=\"button\"\n className=\"self-start text-xs text-primary hover:underline\"\n onClick={fetchMore}\n >\n Show more members\n </button>\n )}\n </div>\n );\n}\n\n/** The task detail's assignee control: saves on change. */\nexport function WorkItemAssigneeSelect({\n workItemId,\n assigneeId,\n}: {\n workItemId: string;\n assigneeId: string | null;\n}) {\n const { save, saving, error } = useWorkItemUpdate(workItemId);\n return (\n <div className=\"flex flex-col items-end gap-1\">\n <AssigneeSelect\n value={assigneeId ?? ''}\n disabled={saving}\n onChange={(next) => {\n if (next !== (assigneeId ?? '')) void save({ assigneeId: next || null });\n }}\n />\n {error && <ErrorLine message={error} />}\n </div>\n );\n}\n\n/**\n * The due-date inline control (BOFF-8048): a plain date input saving straight through\n * planmagnetUpdateWorkItem's `dueDate: DateTime` scalar — an already-implemented real scalar (see\n * utils/datetime-scalar.ts), so the epoch-serialization trap that hits a GraphQL `String` date field does not\n * apply here. Clearing the field saves `null` (no due date) rather than being unclearable once set.\n */\nexport function WorkItemDueDateInput({\n workItemId,\n dueDate,\n}: {\n workItemId: string;\n dueDate: string | null;\n}) {\n const { save, saving, error } = useWorkItemUpdate(workItemId);\n // <input type=\"date\"> works in yyyy-mm-dd; dueDate arrives as a full ISO DateTime.\n const value = dueDate ? dueDate.slice(0, 10) : '';\n return (\n <div className=\"flex flex-col items-end gap-1\">\n <input\n type=\"date\"\n aria-label=\"Due date\"\n data-testid=\"task-due-date\"\n className={dateInputClass}\n value={value}\n disabled={saving}\n onChange={(e) => {\n const next = e.target.value;\n if (next === value) return;\n void save({ dueDate: next ? new Date(`${next}T00:00:00.000Z`).toISOString() : null });\n }}\n />\n {error && <ErrorLine message={error} />}\n </div>\n );\n}\n\n/** Edit and Delete for the task detail header. */\nexport function WorkItemHeaderActions({\n workItemId,\n title,\n}: {\n workItemId: string;\n title: string;\n}) {\n const navigate = usePlanMagnetNavigate();\n const [remove, removeState] = useMutation(DELETE_WORK_ITEM, {\n refetchQueries: LIST_QUERIES,\n context: LEAVES_PAGE_CONTEXT,\n });\n const [error, setError] = useState<string | null>(null);\n\n const onDelete = async () => {\n setError(null);\n try {\n await throwOnError(remove({ variables: { id: workItemId } }));\n navigate('/tasks/tasks-page');\n } catch (e) {\n setError(e instanceof Error ? e.message : 'The task could not be deleted.');\n }\n };\n\n return (\n <div className=\"flex flex-col items-end gap-2\">\n <div className=\"flex gap-2\">\n <Button\n size=\"sm\"\n variant=\"outline\"\n data-testid=\"task-edit\"\n onClick={() => navigate(`/tasks/edit-task-page?taskId=${encodeURIComponent(workItemId)}`)}\n >\n <Pencil className=\"mr-1 h-4 w-4\" />\n Edit\n </Button>\n <ConfirmButton\n label=\"Delete\"\n variant=\"outline\"\n icon={<Trash2 className=\"mr-1 h-4 w-4\" />}\n title={`Delete \"${title}\"?`}\n description=\"The task is deleted and disappears from boards, sprints and releases. This cannot be undone here.\"\n confirmLabel=\"Delete task\"\n destructive\n disabled={removeState.loading}\n onConfirm={() => void onDelete()}\n />\n </div>\n {error && <ErrorLine message={error} />}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CreateDialogs.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/create/CreateDialogs.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AA6LjD,wBAAgB,gBAAgB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,2CAsGzF;AAcD,wBAAgB,kBAAkB,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,2CA+F7F;AAsBD;gBACgB;AAChB,wBAAgB,4BAA4B,CAAC,EAC3C,SAAS,EAAE,cAAc,EACzB,WAAW,EACX,SAAS,EACT,OAAO,GACR,EAAE;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,2CA0FA;AAaD,wBAAgB,mBAAmB,CAAC,EAClC,UAAU,EACV,YAAY,EACZ,SAAS,GACV,EAAE;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC,2CAoGA;AA8CD,sHAAsH;AACtH,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EAAE,cAAc,EACzB,SAAS,GACV,EAAE;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC,2CAgJA;AAiBD,wBAAgB,oBAAoB,CAAC,EACnC,SAAS,EAAE,cAAc,EACzB,gBAAgB,EAChB,SAAS,EACT,OAAO,GACR,EAAE;IACD,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iGAAiG;IACjG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB,2CA6IA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CreateDialogs.js","names":[],"sources":["../../../src/planmagnet/create/CreateDialogs.tsx"],"sourcesContent":["import { useState, type ReactNode } from 'react';\nimport { gql } from '@apollo/client';\nimport { useMutation, useQuery } from '@apollo/client/react';\nimport {\n Button,\n Input,\n ResponsiveDialog,\n ResponsiveDialogContent,\n ResponsiveDialogDescription,\n ResponsiveDialogFooter,\n ResponsiveDialogHeader,\n ResponsiveDialogTitle,\n ResponsiveDialogTrigger,\n} from '@burdenoff/fe-libs/ui';\nimport { Plus } from 'lucide-react';\nimport { usePlanMagnet, usePlanMagnetNavigate } from '../providers/PlanMagnetProvider';\nimport { throwOnError } from '../utils/mutationResult';\nimport { AssigneeSelect, enumLabel } from '../controls/WorkItemControls';\nimport { RISK_SEVERITIES } from '../controls/RiskControls';\nimport { CriteriaRowsEditor } from '../controls/QualityGateControls';\nimport { useReleaseOptions } from '../releases/useReleaseOptions';\nimport { type CriteriaItem, criteriaItemsToJson } from '../utils/qualityGateCriteria';\n\n/**\n * Create dialogs for records whose list pages had a dead \"New …\" button, or\n * none at all (QA report 2026-09-23: C4 New Release had no onClick; H7 there\n * was no way to create a milestone). Both mutations were already served and\n * verified in prod; only the UI trigger was missing.\n */\n\nconst DIALOG_PROJECTS = gql`\n query CreateDialogProjects($workspaceId: ID!) {\n planmagnetProjects(workspaceId: $workspaceId, pagination: { first: 100 }) {\n items {\n id\n name\n }\n }\n }\n`;\n\nconst FIELD = 'mt-1 w-full rounded-md border border-input bg-background px-3 py-2 text-sm';\n\nfunction ErrorLine({ message }: { message: string }) {\n return (\n <p role=\"alert\" className=\"text-sm text-destructive\">\n {message}\n </p>\n );\n}\n\n/**\n * C2 (BOFF-7833): the picker used to show one \"No projects\" option for three different situations —\n * still loading, the query failed, and genuinely no projects. It now says which, offers a retry on\n * failure, and a way to create a project when there are none.\n */\ninterface ProjectsState {\n projects: Array<{ id: string; name: string }>;\n loading: boolean;\n error: string | null;\n retry: () => void;\n}\n\nfunction useDialogProjects(open: boolean): ProjectsState {\n const { workspaceId } = usePlanMagnet();\n const { data, loading, error, refetch } = useQuery<{\n planmagnetProjects: { items: Array<{ id: string; name: string }> };\n }>(DIALOG_PROJECTS, {\n variables: { workspaceId: workspaceId ?? '' },\n skip: !open || !workspaceId,\n });\n return {\n projects: data?.planmagnetProjects.items ?? [],\n loading: loading && !data,\n error: error ? error.message : null,\n retry: () => void refetch(),\n };\n}\n\nfunction ProjectField({\n id,\n value,\n onChange,\n state,\n}: {\n id: string;\n value: string;\n onChange: (id: string) => void;\n state: ProjectsState;\n}) {\n const navigate = usePlanMagnetNavigate();\n const { projects, loading, error, retry } = state;\n const empty = !loading && !error && projects.length === 0;\n return (\n <div>\n <label htmlFor={id} className=\"text-sm font-medium\">\n Project\n </label>\n <select id={id} className={FIELD} value={value} onChange={(e) => onChange(e.target.value)}>\n {projects.length === 0 && (\n <option value=\"\">\n {loading\n ? 'Loading projects…'\n : error\n ? 'Projects could not be loaded'\n : 'No projects yet'}\n </option>\n )}\n {projects.map((p) => (\n <option key={p.id} value={p.id}>\n {p.name}\n </option>\n ))}\n </select>\n {error && (\n <p role=\"alert\" className=\"mt-1 flex items-center gap-2 text-xs text-destructive\">\n {error}\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"ghost\"\n className=\"h-6 px-2 text-xs\"\n onClick={retry}\n >\n Retry\n </Button>\n </p>\n )}\n {empty && (\n <p className=\"mt-1 text-xs text-muted-foreground\">\n <button\n type=\"button\"\n className=\"underline\"\n onClick={() => navigate('/projects/create-project-page')}\n >\n Create a project first\n </button>\n </p>\n )}\n </div>\n );\n}\n\nfunction TextField({\n id,\n label,\n value,\n onChange,\n type = 'text',\n placeholder,\n}: {\n id: string;\n label: string;\n value: string;\n onChange: (value: string) => void;\n type?: string;\n placeholder?: string;\n}) {\n return (\n <div>\n <label htmlFor={id} className=\"text-sm font-medium\">\n {label}\n </label>\n <Input\n id={id}\n type={type}\n className=\"mt-1\"\n value={value}\n placeholder={placeholder}\n onChange={(e) => onChange(e.target.value)}\n />\n </div>\n );\n}\n\nconst messageOf = (e: unknown, fallback: string) => (e instanceof Error ? e.message : fallback);\n\n// ─── New release (C4) ────────────────────────────────────────────────────────\n\nconst CREATE_RELEASE = gql`\n mutation CreateDialogRelease($input: PlanmagnetCreateReleaseInput!) {\n planmagnetCreateRelease(input: $input) {\n id\n }\n }\n`;\n\nconst EMPTY_RELEASE = { name: '', version: '', projectId: '', plannedDate: '', description: '' };\n\nexport function NewReleaseDialog({ onCreated }: { onCreated: (releaseId: string) => void }) {\n const [open, setOpen] = useState(false);\n const [form, setForm] = useState(EMPTY_RELEASE);\n const [error, setError] = useState<string | null>(null);\n const projectsState = useDialogProjects(open);\n const { projects } = projectsState;\n const projectId = form.projectId || projects[0]?.id || '';\n const [create, { loading }] = useMutation<{ planmagnetCreateRelease: { id: string } }>(\n CREATE_RELEASE,\n { refetchQueries: ['ListReleases'], awaitRefetchQueries: true }\n );\n\n const canSubmit =\n form.name.trim() !== '' && form.version.trim() !== '' && projectId !== '' && !loading;\n\n const handleCreate = async () => {\n setError(null);\n try {\n const result = await throwOnError(\n create({\n variables: {\n input: {\n name: form.name.trim(),\n version: form.version.trim(),\n projectId,\n plannedDate: form.plannedDate || undefined,\n description: form.description.trim() || undefined,\n },\n },\n })\n );\n const id = result.data?.planmagnetCreateRelease.id;\n setForm(EMPTY_RELEASE);\n setOpen(false);\n if (id) onCreated(id);\n } catch (e) {\n setError(messageOf(e, 'The release could not be created.'));\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={(next) => {\n setOpen(next);\n if (!next) setError(null);\n }}\n >\n <ResponsiveDialogTrigger asChild>\n <Button size=\"sm\">\n <Plus className=\"mr-1 h-4 w-4\" />\n New Release\n </Button>\n </ResponsiveDialogTrigger>\n <ResponsiveDialogContent className=\"max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>New release</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>The release starts in Planning.</ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n <div className=\"space-y-3\">\n <TextField\n id=\"new-release-name\"\n label=\"Name\"\n value={form.name}\n onChange={(name) => setForm({ ...form, name })}\n />\n <TextField\n id=\"new-release-version\"\n label=\"Version\"\n placeholder=\"e.g. 1.4.0\"\n value={form.version}\n onChange={(version) => setForm({ ...form, version })}\n />\n <ProjectField\n id=\"new-release-project\"\n value={projectId}\n onChange={(id) => setForm({ ...form, projectId: id })}\n state={projectsState}\n />\n <TextField\n id=\"new-release-date\"\n label=\"Planned date\"\n type=\"date\"\n value={form.plannedDate}\n onChange={(plannedDate) => setForm({ ...form, plannedDate })}\n />\n <TextField\n id=\"new-release-description\"\n label=\"Description\"\n value={form.description}\n onChange={(description) => setForm({ ...form, description })}\n />\n </div>\n {error && <ErrorLine message={error} />}\n <ResponsiveDialogFooter>\n <Button onClick={handleCreate} disabled={!canSubmit} data-testid=\"new-release-submit\">\n {loading ? 'Creating…' : 'Create release'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n\n// ─── New milestone (H7) ──────────────────────────────────────────────────────\n\nconst CREATE_MILESTONE = gql`\n mutation CreateDialogMilestone($input: PlanmagnetCreateMilestoneInput!) {\n planmagnetCreateMilestone(input: $input) {\n id\n }\n }\n`;\n\nconst EMPTY_MILESTONE = { name: '', projectId: '', dueDate: '', description: '' };\n\nexport function NewMilestoneDialog({ onCreated }: { onCreated: (milestoneId: string) => void }) {\n const [open, setOpen] = useState(false);\n const [form, setForm] = useState(EMPTY_MILESTONE);\n const [error, setError] = useState<string | null>(null);\n const projectsState = useDialogProjects(open);\n const { projects } = projectsState;\n const projectId = form.projectId || projects[0]?.id || '';\n const [create, { loading }] = useMutation<{ planmagnetCreateMilestone: { id: string } }>(\n CREATE_MILESTONE,\n { refetchQueries: ['GetMilestones'], awaitRefetchQueries: true }\n );\n\n const canSubmit = form.name.trim() !== '' && projectId !== '' && !loading;\n\n const handleCreate = async () => {\n setError(null);\n try {\n const result = await throwOnError(\n create({\n variables: {\n input: {\n name: form.name.trim(),\n projectId,\n dueDate: form.dueDate || undefined,\n description: form.description.trim() || undefined,\n },\n },\n })\n );\n const id = result.data?.planmagnetCreateMilestone.id;\n setForm(EMPTY_MILESTONE);\n setOpen(false);\n if (id) onCreated(id);\n } catch (e) {\n setError(messageOf(e, 'The milestone could not be created.'));\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={(next) => {\n setOpen(next);\n if (!next) setError(null);\n }}\n >\n <ResponsiveDialogTrigger asChild>\n <Button size=\"sm\">\n <Plus className=\"mr-1 h-4 w-4\" />\n New Milestone\n </Button>\n </ResponsiveDialogTrigger>\n <ResponsiveDialogContent className=\"max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>New milestone</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n The milestone starts as Pending.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n <div className=\"space-y-3\">\n <TextField\n id=\"new-milestone-name\"\n label=\"Name\"\n value={form.name}\n onChange={(name) => setForm({ ...form, name })}\n />\n <ProjectField\n id=\"new-milestone-project\"\n value={projectId}\n onChange={(id) => setForm({ ...form, projectId: id })}\n state={projectsState}\n />\n <TextField\n id=\"new-milestone-due\"\n label=\"Due date\"\n type=\"date\"\n value={form.dueDate}\n onChange={(dueDate) => setForm({ ...form, dueDate })}\n />\n <TextField\n id=\"new-milestone-description\"\n label=\"Description\"\n value={form.description}\n onChange={(description) => setForm({ ...form, description })}\n />\n </div>\n {error && <ErrorLine message={error} />}\n <ResponsiveDialogFooter>\n <Button onClick={handleCreate} disabled={!canSubmit} data-testid=\"new-milestone-submit\">\n {loading ? 'Creating…' : 'Create milestone'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n\n// ─── New template from project (BOFF-8047) ──────────────────────────────────\n//\n// Project templates (capability register: `api-only`, \"No UI anywhere\"). The only creation path this dialog\n// exposes is `planmagnetCreateTemplateFromProject` — capturing an existing, working project's methodology and\n// status as a reusable starting point — rather than a blank-JSON `planmagnetCreateProjectTemplate` form, which\n// would ask a user to hand-author `configuration`/`boardConfig`/`sprintConfig` JSON with nothing to check it\n// against.\n\nconst CREATE_TEMPLATE_FROM_PROJECT = gql`\n mutation CreateDialogTemplateFromProject($projectId: ID!, $name: String!, $description: String) {\n planmagnetCreateTemplateFromProject(\n projectId: $projectId\n name: $name\n description: $description\n ) {\n id\n }\n }\n`;\n\n/** `projectId`/`projectName` pre-fill the dialog when opened from a project's own page; otherwise the user\n * picks one. */\nexport function NewTemplateFromProjectDialog({\n projectId: fixedProjectId,\n projectName,\n onCreated,\n trigger,\n}: {\n projectId?: string;\n projectName?: string;\n onCreated: (templateId: string) => void;\n trigger?: ReactNode;\n}) {\n const [open, setOpen] = useState(false);\n const [name, setName] = useState(projectName ? `${projectName} template` : '');\n const [description, setDescription] = useState('');\n const [projectId, setProjectId] = useState(fixedProjectId ?? '');\n const [error, setError] = useState<string | null>(null);\n const projectsState = useDialogProjects(open && !fixedProjectId);\n const { projects } = projectsState;\n const effectiveProjectId = fixedProjectId ?? (projectId || projects[0]?.id || '');\n const [create, { loading }] = useMutation<{\n planmagnetCreateTemplateFromProject: { id: string };\n }>(CREATE_TEMPLATE_FROM_PROJECT, {\n refetchQueries: ['TemplatesList'],\n awaitRefetchQueries: true,\n });\n\n const canSubmit = name.trim() !== '' && effectiveProjectId !== '' && !loading;\n\n const handleCreate = async () => {\n setError(null);\n try {\n const result = await throwOnError(\n create({\n variables: {\n projectId: effectiveProjectId,\n name: name.trim(),\n description: description.trim() || undefined,\n },\n })\n );\n const id = result.data?.planmagnetCreateTemplateFromProject.id;\n setName('');\n setDescription('');\n setOpen(false);\n if (id) onCreated(id);\n } catch (e) {\n setError(messageOf(e, 'The template could not be created.'));\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={(next) => {\n setOpen(next);\n if (!next) setError(null);\n }}\n >\n <ResponsiveDialogTrigger asChild>\n {trigger ?? (\n <Button size=\"sm\" data-testid=\"new-template-trigger\">\n <Plus className=\"mr-1 h-4 w-4\" />\n New template\n </Button>\n )}\n </ResponsiveDialogTrigger>\n <ResponsiveDialogContent className=\"max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>New template from project</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Captures this project&apos;s methodology and status as a reusable template. The project\n itself is unchanged.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n <div className=\"space-y-3\">\n <TextField id=\"new-template-name\" label=\"Template name\" value={name} onChange={setName} />\n {!fixedProjectId && (\n <ProjectField\n id=\"new-template-project\"\n value={effectiveProjectId}\n onChange={setProjectId}\n state={projectsState}\n />\n )}\n <TextField\n id=\"new-template-description\"\n label=\"Description\"\n value={description}\n onChange={setDescription}\n />\n </div>\n {error && <ErrorLine message={error} />}\n <ResponsiveDialogFooter>\n <Button onClick={handleCreate} disabled={!canSubmit} data-testid=\"new-template-submit\">\n {loading ? 'Creating…' : 'Create template'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n\n// ─── Apply template (create a project from a template, BOFF-8047) ──────────\n\nconst APPLY_TEMPLATE = gql`\n mutation CreateDialogApplyTemplate($input: PlanmagnetApplyTemplateInput!) {\n planmagnetApplyTemplate(input: $input) {\n id\n name\n }\n }\n`;\n\nexport function ApplyTemplateDialog({\n templateId,\n templateName,\n onApplied,\n}: {\n templateId: string;\n templateName: string;\n onApplied: (projectId: string) => void;\n}) {\n const { currentUser } = usePlanMagnet();\n const [open, setOpen] = useState(false);\n const [projectName, setProjectName] = useState('');\n const [projectDescription, setProjectDescription] = useState('');\n const [ownerId, setOwnerId] = useState('');\n const [error, setError] = useState<string | null>(null);\n const [apply, { loading }] = useMutation<{\n planmagnetApplyTemplate: { id: string; name: string };\n }>(APPLY_TEMPLATE, {\n refetchQueries: ['GetProjects', 'GetActiveProjects', 'GetDashboardData'],\n awaitRefetchQueries: true,\n });\n const effectiveOwnerId = ownerId || currentUser?.id || '';\n\n const canSubmit = projectName.trim() !== '' && effectiveOwnerId !== '' && !loading;\n\n const handleApply = async () => {\n setError(null);\n try {\n const result = await throwOnError(\n apply({\n variables: {\n input: {\n templateId,\n projectName: projectName.trim(),\n projectDescription: projectDescription.trim() || undefined,\n ownerId: effectiveOwnerId,\n },\n },\n })\n );\n const id = result.data?.planmagnetApplyTemplate.id;\n setProjectName('');\n setProjectDescription('');\n setOpen(false);\n if (id) onApplied(id);\n } catch (e) {\n setError(messageOf(e, 'The project could not be created from this template.'));\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={(next) => {\n setOpen(next);\n if (next) setOwnerId(currentUser?.id ?? '');\n else setError(null);\n }}\n >\n <ResponsiveDialogTrigger asChild>\n <Button size=\"sm\" variant=\"outline\" data-testid=\"apply-template-trigger\">\n <Plus className=\"mr-1 h-4 w-4\" />\n Use template\n </Button>\n </ResponsiveDialogTrigger>\n <ResponsiveDialogContent className=\"max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>New project from &quot;{templateName}&quot;</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Creates a project using this template&apos;s methodology and status. It counts toward\n the workspace&apos;s project quota like any other project.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n <div className=\"space-y-3\">\n <TextField\n id=\"apply-template-name\"\n label=\"Project name\"\n value={projectName}\n onChange={setProjectName}\n />\n <TextField\n id=\"apply-template-description\"\n label=\"Description\"\n value={projectDescription}\n onChange={setProjectDescription}\n />\n <div>\n <label htmlFor=\"apply-template-owner\" className=\"text-sm font-medium\">\n Owner\n </label>\n <div className=\"mt-1\">\n <AssigneeSelect\n id=\"apply-template-owner\"\n value={effectiveOwnerId}\n onChange={setOwnerId}\n />\n </div>\n </div>\n </div>\n {error && <ErrorLine message={error} />}\n <ResponsiveDialogFooter>\n <Button onClick={handleApply} disabled={!canSubmit} data-testid=\"apply-template-submit\">\n {loading ? 'Creating…' : 'Create project'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n\n// ─── New risk (BOFF-8047) ────────────────────────────────────────────────────\n\nconst CREATE_RISK = gql`\n mutation CreateDialogRisk($input: PlanmagnetCreateRiskInput!) {\n planmagnetCreateRisk(input: $input) {\n id\n }\n }\n`;\n\nconst SCORES = [1, 2, 3, 4, 5] as const;\n\nfunction ScoreField({\n id,\n label,\n value,\n onChange,\n}: {\n id: string;\n label: string;\n value: number;\n onChange: (value: number) => void;\n}) {\n return (\n <div>\n <label htmlFor={id} className=\"text-sm font-medium\">\n {label}\n </label>\n <select\n id={id}\n className={FIELD}\n value={value}\n onChange={(e) => onChange(Number(e.target.value))}\n >\n {SCORES.map((s) => (\n <option key={s} value={s}>\n {s}\n </option>\n ))}\n </select>\n </div>\n );\n}\n\n/** projectId, when given, pins the risk to that project and hides the project picker (opened from a project page). */\nexport function NewRiskDialog({\n projectId: fixedProjectId,\n onCreated,\n}: {\n projectId?: string;\n onCreated: (riskId: string) => void;\n}) {\n const EMPTY_RISK = {\n title: '',\n projectId: fixedProjectId ?? '',\n severity: 'MEDIUM' as (typeof RISK_SEVERITIES)[number],\n likelihood: 3,\n impact: 3,\n category: '',\n description: '',\n };\n const [open, setOpen] = useState(false);\n const [form, setForm] = useState(EMPTY_RISK);\n const [error, setError] = useState<string | null>(null);\n const projectsState = useDialogProjects(open && !fixedProjectId);\n const { projects } = projectsState;\n const projectId = fixedProjectId || form.projectId || projects[0]?.id || '';\n const [create, { loading }] = useMutation<{ planmagnetCreateRisk: { id: string } }>(CREATE_RISK, {\n refetchQueries: ['GetRisks', 'GetRiskMatrix', 'GetProjectDetail'],\n awaitRefetchQueries: true,\n });\n\n const canSubmit = form.title.trim() !== '' && projectId !== '' && !loading;\n\n const handleCreate = async () => {\n setError(null);\n try {\n const result = await throwOnError(\n create({\n variables: {\n input: {\n title: form.title.trim(),\n projectId,\n severity: form.severity,\n likelihood: form.likelihood,\n impact: form.impact,\n category: form.category.trim() || undefined,\n description: form.description.trim() || undefined,\n },\n },\n })\n );\n const id = result.data?.planmagnetCreateRisk.id;\n setForm(EMPTY_RISK);\n setOpen(false);\n if (id) onCreated(id);\n } catch (e) {\n setError(messageOf(e, 'The risk could not be created.'));\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={(next) => {\n setOpen(next);\n if (next) setForm(EMPTY_RISK);\n else setError(null);\n }}\n >\n <ResponsiveDialogTrigger asChild>\n <Button size=\"sm\" data-testid=\"new-risk-trigger\">\n <Plus className=\"mr-1 h-4 w-4\" />\n New Risk\n </Button>\n </ResponsiveDialogTrigger>\n <ResponsiveDialogContent className=\"max-w-lg\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>New risk</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n The risk starts as Identified. Likelihood and impact are each scored 1 (rare/minor) to 5\n (near-certain/severe).\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n <div className=\"space-y-3\">\n <TextField\n id=\"new-risk-title\"\n label=\"Title\"\n value={form.title}\n onChange={(title) => setForm({ ...form, title })}\n />\n {!fixedProjectId && (\n <ProjectField\n id=\"new-risk-project\"\n value={projectId}\n onChange={(id) => setForm({ ...form, projectId: id })}\n state={projectsState}\n />\n )}\n <div>\n <label htmlFor=\"new-risk-severity\" className=\"text-sm font-medium\">\n Severity\n </label>\n <select\n id=\"new-risk-severity\"\n className={FIELD}\n value={form.severity}\n onChange={(e) =>\n setForm({ ...form, severity: e.target.value as (typeof RISK_SEVERITIES)[number] })\n }\n >\n {RISK_SEVERITIES.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-3\">\n <ScoreField\n id=\"new-risk-likelihood\"\n label=\"Likelihood\"\n value={form.likelihood}\n onChange={(likelihood) => setForm({ ...form, likelihood })}\n />\n <ScoreField\n id=\"new-risk-impact\"\n label=\"Impact\"\n value={form.impact}\n onChange={(impact) => setForm({ ...form, impact })}\n />\n </div>\n <TextField\n id=\"new-risk-category\"\n label=\"Category\"\n placeholder=\"e.g. schedule, budget, technical\"\n value={form.category}\n onChange={(category) => setForm({ ...form, category })}\n />\n <TextField\n id=\"new-risk-description\"\n label=\"Description\"\n value={form.description}\n onChange={(description) => setForm({ ...form, description })}\n />\n </div>\n {error && <ErrorLine message={error} />}\n <ResponsiveDialogFooter>\n <Button onClick={handleCreate} disabled={!canSubmit} data-testid=\"new-risk-submit\">\n {loading ? 'Creating…' : 'Create risk'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n\n// ─── New quality gate (GAP-02) ────────────────────────────────────────────────\n\nconst CREATE_QUALITY_GATE = gql`\n mutation NewQualityGateDialogCreate($input: PlanmagnetCreateQualityGateInput!) {\n planmagnetCreateQualityGate(input: $input) {\n id\n }\n }\n`;\n\n/** The releases of one project, for the optional \"holds a release\" field. Fetched only once a project is chosen. */\nfunction useProjectReleases(open: boolean, projectId: string) {\n return useReleaseOptions(open && projectId !== '', projectId);\n}\n\nexport function NewQualityGateDialog({\n projectId: fixedProjectId,\n defaultProjectId,\n onCreated,\n trigger,\n}: {\n /** Creates in this project, with no project chooser. */\n projectId?: string;\n /** Preselects this project in the chooser (e.g. the page's project filter); still changeable. */\n defaultProjectId?: string;\n onCreated?: (gateId: string) => void;\n trigger?: ReactNode;\n}) {\n const EMPTY_GATE = {\n name: '',\n projectId: fixedProjectId ?? defaultProjectId ?? '',\n description: '',\n releaseId: '',\n criteria: [] as CriteriaItem[],\n };\n const [open, setOpen] = useState(false);\n const [form, setForm] = useState(EMPTY_GATE);\n const [error, setError] = useState<string | null>(null);\n const projectsState = useDialogProjects(open && !fixedProjectId);\n const { projects } = projectsState;\n const projectId = fixedProjectId || form.projectId || projects[0]?.id || '';\n const releasesState = useProjectReleases(open, projectId);\n const [create, { loading }] = useMutation<{ planmagnetCreateQualityGate: { id: string } }>(\n CREATE_QUALITY_GATE,\n { refetchQueries: ['QualityGatesList'], awaitRefetchQueries: true }\n );\n\n const canSubmit = form.name.trim() !== '' && projectId !== '' && !loading;\n\n const handleCreate = async () => {\n setError(null);\n try {\n const result = await throwOnError(\n create({\n variables: {\n input: {\n projectId,\n name: form.name.trim(),\n description: form.description.trim() || undefined,\n criteria: criteriaItemsToJson(form.criteria),\n releaseId: form.releaseId || undefined,\n },\n },\n })\n );\n const id = result.data?.planmagnetCreateQualityGate.id;\n setForm(EMPTY_GATE);\n setOpen(false);\n if (id) onCreated?.(id);\n } catch (e) {\n setError(messageOf(e, 'The quality gate could not be created.'));\n }\n };\n\n return (\n <ResponsiveDialog\n open={open}\n onOpenChange={(next) => {\n setOpen(next);\n if (next) setForm(EMPTY_GATE);\n else setError(null);\n }}\n >\n <ResponsiveDialogTrigger asChild>\n {trigger ?? (\n <Button size=\"sm\" data-testid=\"quality-gate-new-trigger\">\n <Plus className=\"mr-1 h-4 w-4\" />\n New quality gate\n </Button>\n )}\n </ResponsiveDialogTrigger>\n <ResponsiveDialogContent className=\"max-w-lg max-h-[85vh] overflow-y-auto\">\n <ResponsiveDialogHeader>\n <ResponsiveDialogTitle>New quality gate</ResponsiveDialogTitle>\n <ResponsiveDialogDescription>\n Starts as Pending. Add the criteria it must meet — you can add or edit them later.\n </ResponsiveDialogDescription>\n </ResponsiveDialogHeader>\n <div className=\"space-y-3\">\n {!fixedProjectId && (\n <ProjectField\n id=\"quality-gate-new-project\"\n value={projectId}\n onChange={(id) => setForm({ ...form, projectId: id, releaseId: '' })}\n state={projectsState}\n />\n )}\n <TextField\n id=\"quality-gate-new-name\"\n label=\"Name\"\n value={form.name}\n onChange={(name) => setForm({ ...form, name })}\n />\n <TextField\n id=\"quality-gate-new-description\"\n label=\"Description\"\n value={form.description}\n onChange={(description) => setForm({ ...form, description })}\n />\n <div>\n <label htmlFor=\"quality-gate-new-release\" className=\"text-sm font-medium\">\n Holds a release (optional)\n </label>\n <select\n id=\"quality-gate-new-release\"\n className={FIELD}\n value={form.releaseId}\n disabled={!projectId}\n onChange={(e) => setForm({ ...form, releaseId: e.target.value })}\n >\n <option value=\"\">\n {!projectId\n ? 'Choose a project first'\n : releasesState.loading\n ? 'Loading releases…'\n : 'No release'}\n </option>\n {releasesState.releases.map((r) => (\n <option key={r.id} value={r.id}>\n {r.name} ({r.version})\n </option>\n ))}\n </select>\n </div>\n <div>\n <span className=\"text-sm font-medium\">Criteria</span>\n <div className=\"mt-1\">\n <CriteriaRowsEditor\n idPrefix=\"quality-gate-new\"\n items={form.criteria}\n onChange={(criteria) => setForm({ ...form, criteria })}\n />\n </div>\n </div>\n </div>\n {error && <ErrorLine message={error} />}\n <ResponsiveDialogFooter>\n <Button\n onClick={handleCreate}\n disabled={!canSubmit}\n data-testid=\"quality-gate-new-submit\"\n >\n {loading ? 'Creating…' : 'Create gate'}\n </Button>\n </ResponsiveDialogFooter>\n </ResponsiveDialogContent>\n </ResponsiveDialog>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DashboardUI.d.ts","sourceRoot":"","sources":["../../../src/planmagnet/dashboards/DashboardUI.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC;;;;;;;GAOG;AAEH;4FAC4F;AAC5F,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,2CAWvF;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IACnD,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAC5B,IAAI,EACJ,KAAK,EACL,UAAU,EACV,OAAO,EACP,KAAK,EACL,KAAK,EACL,YAAY,EACZ,SAAS,EACT,QAAQ,GACT,EAAE,kBAAkB,2CA+CpB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,QAAQ,GACT,EAAE;IACD,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IACnD,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAOA;AAED,iHAAiH;AACjH,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,2CAQ/F;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,2CAyCxF;AAED,iGAAiG;AACjG,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAExE;AAED,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,+GAA+G;AAC/G,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DashboardUI.js","names":[],"sources":["../../../src/planmagnet/dashboards/DashboardUI.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { Card, CardContent, CardHeader, CardTitle } from '@burdenoff/fe-libs/ui';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { ArrowRight } from 'lucide-react';\nimport { isForbidden } from '../utils/graphqlErrors';\n\n/**\n * Shared building blocks for the four role dashboards (ANR-06/07/28, CWF-31): every card on every dashboard\n * follows the same contract — a title, a one-line definition of what the number means, and loading/empty/\n * error/forbidden states, so a viewer never has to guess whether a blank card means \"nothing to show\" or \"this\n * broke\". `isForbidden` is the same RBAC-denial detector `releases/ReleaseReadinessCard.tsx`'s local `denied()`\n * generalizes from (see `utils/graphqlErrors.ts`) — a card whose resource the caller's role cannot read says so\n * instead of leaking an unreadable error string or silently rendering empty.\n */\n\n/** A one-line link out of a card into the page that can show more. Rendered as a real button, not a link styled\n * to look clickable, since it runs client-side navigation rather than following an href. */\nexport function DrillDownLink({ label, onClick }: { label: string; onClick: () => void }) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className=\"inline-flex items-center gap-1 text-xs font-medium text-primary hover:underline\"\n >\n {label}\n <ArrowRight className=\"h-3 w-3\" aria-hidden={true} />\n </button>\n );\n}\n\nexport interface DashboardCardProps {\n icon: ReactNode;\n title: string;\n /** One line: what the number(s) on this card mean and where they come from. */\n definition: string;\n loading: boolean;\n error?: unknown;\n /** True when the query succeeded but there is nothing to show. */\n empty?: boolean;\n emptyMessage?: string;\n drillDown?: { label: string; onClick: () => void };\n children: ReactNode;\n}\n\n/**\n * The full card shell: title + definition + icon in the header, then one of loading / forbidden / error / empty\n * / content in the body, then an optional drill-down link. Use this for a card built fresh for the dashboards.\n * For a card that already exists as its own `<Card>` (e.g. `BudgetPerformanceCard`), wrap it in\n * `DashboardCardShell` instead so its own header isn't duplicated.\n */\nexport function DashboardCard({\n icon,\n title,\n definition,\n loading,\n error,\n empty,\n emptyMessage,\n drillDown,\n children,\n}: DashboardCardProps) {\n const { t } = useI18n();\n const forbidden = isForbidden(error);\n const testId = forbidden ? 'dashboard-card-forbidden' : 'dashboard-card';\n\n let body: ReactNode;\n if (error) {\n body = (\n <p className=\"text-sm text-muted-foreground\">\n {forbidden\n ? t('planmagnet.dashboards.forbidden', 'You do not have access to {{title}}.', { title })\n : t('planmagnet.dashboards.error', 'Could not be loaded: {{message}}', {\n message: error instanceof Error ? error.message : 'unknown error',\n })}\n </p>\n );\n } else if (loading) {\n body = (\n <p className=\"text-sm text-muted-foreground\">\n {t('planmagnet.dashboards.loading', 'Loading…')}\n </p>\n );\n } else if (empty) {\n body = (\n <p className=\"text-sm text-muted-foreground\">\n {emptyMessage ?? t('planmagnet.dashboards.empty', 'Nothing to show yet.')}\n </p>\n );\n } else {\n body = children;\n }\n\n return (\n <Card data-testid={testId}>\n <CardHeader className=\"space-y-1\">\n <CardTitle className=\"flex items-center gap-2 text-base\">\n {icon}\n {title}\n </CardTitle>\n <p className=\"text-xs text-muted-foreground\">{definition}</p>\n </CardHeader>\n <CardContent className=\"space-y-3\">\n {body}\n {drillDown && !loading ? <DrillDownLink {...drillDown} /> : null}\n </CardContent>\n </Card>\n );\n}\n\n/**\n * Wraps an already-complete card component (it renders its own `<Card>`, title and loading/empty/error states —\n * `BudgetPerformanceCard`, `CycleTimeCard`, `SprintBurndownCard`, `SprintVelocityCard`) so it carries the\n * `dashboard-card` testid and an optional drill-down link without duplicating its header.\n */\nexport function DashboardCardShell({\n drillDown,\n children,\n}: {\n drillDown?: { label: string; onClick: () => void };\n children: ReactNode;\n}) {\n return (\n <div data-testid=\"dashboard-card\" className=\"space-y-2\">\n {children}\n {drillDown ? <div className=\"px-1\">{<DrillDownLink {...drillDown} />}</div> : null}\n </div>\n );\n}\n\n/** A small number-and-label tile, the same shape `analytics/DeliveryHealthCards.tsx`'s local `StatTile` uses. */\nexport function StatTile({ label, value, hint }: { label: string; value: string; hint?: string }) {\n return (\n <div className=\"rounded-md border p-3\">\n <p className=\"text-xs text-muted-foreground\">{label}</p>\n <p className=\"mt-1 text-2xl font-semibold\">{value}</p>\n {hint ? <p className=\"mt-0.5 text-xs text-muted-foreground\">{hint}</p> : null}\n </div>\n );\n}\n\n/**\n * A labelled 0-100% meter, using the semantic `primary` token — never a raw color. `percent: null` means\n * \"not measured\" (e.g. a rate whose denominator was 0 — nothing completed in the window to score), and\n * renders an empty dashed track with a \"—\" label instead of a fabricated 0%. A 0%-filled bar is visually\n * indistinguishable from \"measured and it's zero\" (total delivery failure), so coercing null to 0 here\n * would mislead a viewer skimming the card — the caller's null case must flow through, never `?? 0`.\n */\nexport function PercentBar({ percent, label }: { percent: number | null; label?: string }) {\n if (percent == null) {\n return (\n <div className=\"space-y-1\">\n {label ? (\n <div className=\"flex justify-between text-xs text-muted-foreground\">\n <span>{label}</span>\n <span>—</span>\n </div>\n ) : null}\n <div\n aria-hidden=\"true\"\n className=\"h-2 w-full overflow-hidden rounded-full border border-dashed border-muted-foreground/30\"\n />\n </div>\n );\n }\n const pct = Math.max(0, Math.min(100, Math.round(percent)));\n return (\n <div className=\"space-y-1\">\n {label ? (\n <div className=\"flex justify-between text-xs text-muted-foreground\">\n <span>{label}</span>\n <span>{pct}%</span>\n </div>\n ) : null}\n <div\n role=\"meter\"\n aria-valuemin={0}\n aria-valuemax={100}\n aria-valuenow={pct}\n aria-label={label ?? `${pct}%`}\n className=\"h-2 w-full overflow-hidden rounded-full bg-muted\"\n >\n <div\n className=\"h-full rounded-full bg-primary transition-all\"\n style={{ width: `${pct}%` }}\n />\n </div>\n </div>\n );\n}\n\n/** \"—\" for a rate that is null because its denominator was 0 — never a fabricated 0% or 100%. */\nexport function ratePercentLabel(rate: number | null | undefined): string {\n return rate == null ? '—' : `${Math.round(rate * 100)}%`;\n}\n\n/** Minutes read naturally as hours (one decimal below 10h, whole hours above). */\nexport function formatHours(minutes: number): string {\n const hours = minutes / 60;\n return `${hours < 10 ? hours.toFixed(1) : Math.round(hours)} h`;\n}\n\n/** Cap-aware \"N of TOTAL\" wording for a list a card intentionally truncates instead of paginating in place. */\nexport function cappedSubtitle(shown: number, total: number, noun: string): string {\n return total > shown ? `Showing ${shown} of ${total} ${noun}` : `${total} ${noun}`;\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DeliveryTimelineCard.d.ts","sourceRoot":"","sources":["../../../../src/planmagnet/dashboards/cards/DeliveryTimelineCard.tsx"],"names":[],"mappings":"AA6CA,wBAAgB,oBAAoB,CAAC,EACnC,WAAW,EACX,SAAS,EACT,OAAO,EACP,WAAW,GACZ,EAAE;IACD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,2CAyFA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"DeliveryTimelineCard.js","names":[],"sources":["../../../../src/planmagnet/dashboards/cards/DeliveryTimelineCard.tsx"],"sourcesContent":["import { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { CalendarClock } from 'lucide-react';\nimport { DashboardCard, PercentBar, ratePercentLabel } from '../DashboardUI';\n\n/**\n * Timeline adherence (ANR-06): `planmagnetDeliveryKpis` (ANR-21) over the trailing 90 days — on-time rates for\n * sprints, releases and milestones, plus scope adherence (committed vs. delivered points). Workspace-wide, one\n * query, the server's own rates — never recomputed client-side.\n */\nconst GET_DELIVERY_KPIS = gql`\n query DashboardDeliveryKpis($workspaceId: ID!, $startDate: DateTime, $endDate: DateTime) {\n planmagnetDeliveryKpis(workspaceId: $workspaceId, startDate: $startDate, endDate: $endDate) {\n sprintCount\n sprintOnTimeRate\n releaseCount\n releaseOnTimeRate\n milestoneCount\n milestoneOnTimeRate\n scopeAdherence {\n adherenceRate\n committedPoints\n deliveredPoints\n }\n }\n }\n`;\n\ninterface DeliveryKpisData {\n planmagnetDeliveryKpis: {\n sprintCount: number;\n sprintOnTimeRate: number | null;\n releaseCount: number;\n releaseOnTimeRate: number | null;\n milestoneCount: number;\n milestoneOnTimeRate: number | null;\n scopeAdherence: {\n adherenceRate: number | null;\n committedPoints: number;\n deliveredPoints: number;\n };\n };\n}\n\nexport function DeliveryTimelineCard({\n workspaceId,\n startDate,\n endDate,\n onDrillDown,\n}: {\n workspaceId?: string | null;\n startDate: string;\n endDate: string;\n onDrillDown: () => void;\n}) {\n const { t } = useI18n();\n const { data, loading, error } = useQuery<DeliveryKpisData>(GET_DELIVERY_KPIS, {\n variables: { workspaceId, startDate, endDate },\n skip: !workspaceId,\n });\n const kpis = data?.planmagnetDeliveryKpis;\n const nothingCompleted =\n !!kpis && kpis.sprintCount === 0 && kpis.releaseCount === 0 && kpis.milestoneCount === 0;\n\n return (\n <DashboardCard\n icon={<CalendarClock className=\"h-4 w-4\" />}\n title={t('planmagnet.dashboards.exec.timeline.title', 'Timeline adherence')}\n definition={t(\n 'planmagnet.dashboards.exec.timeline.definition',\n 'On-time delivery and scope adherence, over sprints/releases/milestones completed in the last 90 days.'\n )}\n loading={loading && !data}\n error={error}\n empty={nothingCompleted}\n emptyMessage={t(\n 'planmagnet.dashboards.exec.timeline.empty',\n 'Nothing completed in the last 90 days.'\n )}\n drillDown={{\n label: t('planmagnet.dashboards.exec.timeline.drillDown', 'Open delivery analytics'),\n onClick: onDrillDown,\n }}\n >\n {kpis ? (\n <div className=\"space-y-3\">\n <div className=\"grid grid-cols-3 gap-3\">\n <div>\n <PercentBar\n percent={kpis.sprintOnTimeRate == null ? null : kpis.sprintOnTimeRate * 100}\n label={t('planmagnet.dashboards.exec.timeline.sprints', 'Sprints on time')}\n />\n <p className=\"mt-1 text-xs text-muted-foreground\">\n {kpis.sprintOnTimeRate == null\n ? t('planmagnet.dashboards.exec.timeline.noPlan', 'no plan to measure against')\n : `${kpis.sprintCount} ${t('planmagnet.dashboards.exec.timeline.completed', 'completed')}`}\n </p>\n </div>\n <div>\n <PercentBar\n percent={kpis.releaseOnTimeRate == null ? null : kpis.releaseOnTimeRate * 100}\n label={t('planmagnet.dashboards.exec.timeline.releases', 'Releases on time')}\n />\n <p className=\"mt-1 text-xs text-muted-foreground\">\n {kpis.releaseOnTimeRate == null\n ? t('planmagnet.dashboards.exec.timeline.noPlan', 'no plan to measure against')\n : `${kpis.releaseCount} ${t('planmagnet.dashboards.exec.timeline.completed', 'completed')}`}\n </p>\n </div>\n <div>\n <PercentBar\n percent={kpis.milestoneOnTimeRate == null ? null : kpis.milestoneOnTimeRate * 100}\n label={t('planmagnet.dashboards.exec.timeline.milestones', 'Milestones on time')}\n />\n <p className=\"mt-1 text-xs text-muted-foreground\">\n {kpis.milestoneOnTimeRate == null\n ? t('planmagnet.dashboards.exec.timeline.noPlan', 'no plan to measure against')\n : `${kpis.milestoneCount} ${t('planmagnet.dashboards.exec.timeline.completed', 'completed')}`}\n </p>\n </div>\n </div>\n <div className=\"border-t pt-3\">\n <div className=\"flex items-center justify-between text-xs text-muted-foreground\">\n <span>\n {t('planmagnet.dashboards.exec.timeline.scopeAdherence', 'Scope adherence')}\n </span>\n <span>{ratePercentLabel(kpis.scopeAdherence.adherenceRate)}</span>\n </div>\n <p className=\"mt-0.5 text-xs text-muted-foreground\">\n {t(\n 'planmagnet.dashboards.exec.timeline.scopeAdherenceDetail',\n '{{delivered}} of {{committed}} committed points delivered, across completed sprints with a plan.',\n {\n delivered: kpis.scopeAdherence.deliveredPoints,\n committed: kpis.scopeAdherence.committedPoints,\n }\n )}\n </p>\n </div>\n </div>\n ) : null}\n </DashboardCard>\n );\n}\n"],"mappings":";;;;;;;AAWA,IAAM,IAAoB,CAAG;;;;;;;;;;;;;;;;;AAkC7B,SAAgB,EAAqB,EACnC,gBACA,cACA,YACA,kBAMC;CACD,IAAM,EAAE,SAAM,GAAS,EACjB,EAAE,SAAM,YAAS,aAAU,EAA2B,GAAmB;EAC7E,WAAW;GAAE;GAAa;GAAW;GAAS;EAC9C,MAAM,CAAC;EACR,CAAC,EACI,IAAO,GAAM,wBACb,IACJ,CAAC,CAAC,KAAQ,EAAK,gBAAgB,KAAK,EAAK,iBAAiB,KAAK,EAAK,mBAAmB;AAEzF,QACE,kBAAC,GAAD;EACE,MAAM,kBAAC,GAAD,EAAe,WAAU,WAAY,CAAA;EAC3C,OAAO,EAAE,6CAA6C,qBAAqB;EAC3E,YAAY,EACV,kDACA,wGACD;EACD,SAAS,KAAW,CAAC;EACd;EACP,OAAO;EACP,cAAc,EACZ,6CACA,yCACD;EACD,WAAW;GACT,OAAO,EAAE,iDAAiD,0BAA0B;GACpF,SAAS;GACV;YAEA,IACC,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,OAAD;IAAK,WAAU;cAAf;KACE,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MACE,SAAS,EAAK,oBAAoB,OAAO,OAAO,EAAK,mBAAmB;MACxE,OAAO,EAAE,+CAA+C,kBAAkB;MAC1E,CAAA,EACF,kBAAC,KAAD;MAAG,WAAU;gBACV,EAAK,oBAAoB,OACtB,EAAE,8CAA8C,6BAA6B,GAC7E,GAAG,EAAK,YAAY,GAAG,EAAE,iDAAiD,YAAY;MACxF,CAAA,CACA,EAAA,CAAA;KACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MACE,SAAS,EAAK,qBAAqB,OAAO,OAAO,EAAK,oBAAoB;MAC1E,OAAO,EAAE,gDAAgD,mBAAmB;MAC5E,CAAA,EACF,kBAAC,KAAD;MAAG,WAAU;gBACV,EAAK,qBAAqB,OACvB,EAAE,8CAA8C,6BAA6B,GAC7E,GAAG,EAAK,aAAa,GAAG,EAAE,iDAAiD,YAAY;MACzF,CAAA,CACA,EAAA,CAAA;KACN,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,GAAD;MACE,SAAS,EAAK,uBAAuB,OAAO,OAAO,EAAK,sBAAsB;MAC9E,OAAO,EAAE,kDAAkD,qBAAqB;MAChF,CAAA,EACF,kBAAC,KAAD;MAAG,WAAU;gBACV,EAAK,uBAAuB,OACzB,EAAE,8CAA8C,6BAA6B,GAC7E,GAAG,EAAK,eAAe,GAAG,EAAE,iDAAiD,YAAY;MAC3F,CAAA,CACA,EAAA,CAAA;KACF;OACN,kBAAC,OAAD;IAAK,WAAU;cAAf,CACE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,QAAD,EAAA,UACG,EAAE,sDAAsD,kBAAkB,EACtE,CAAA,EACP,kBAAC,QAAD,EAAA,UAAO,EAAiB,EAAK,eAAe,cAAc,EAAQ,CAAA,CAC9D;QACN,kBAAC,KAAD;KAAG,WAAU;eACV,EACC,4DACA,oGACA;MACE,WAAW,EAAK,eAAe;MAC/B,WAAW,EAAK,eAAe;MAChC,CACF;KACC,CAAA,CACA;MACF;OACJ;EACU,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ObjectivesProgressCard.d.ts","sourceRoot":"","sources":["../../../../src/planmagnet/dashboards/cards/ObjectivesProgressCard.tsx"],"names":[],"mappings":"AA4CA,wBAAgB,sBAAsB,CAAC,EACrC,WAAW,EACX,KAAK,EACL,UAAU,EACV,WAAW,GACZ,EAAE;IACD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,2CA+CA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ObjectivesProgressCard.js","names":[],"sources":["../../../../src/planmagnet/dashboards/cards/ObjectivesProgressCard.tsx"],"sourcesContent":["import { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Flag } from 'lucide-react';\nimport { DashboardCard, PercentBar, cappedSubtitle } from '../DashboardUI';\n\n/**\n * Strategic goal progress (ANR-06 \"Executive\", reused by CWF-31 \"Leadership\"'s product-strategy section —\n * same data, same card, two hosts). `progress` on `PlanmagnetObjective` is the live average of its key\n * results' own progress, computed server-side (`planmagnet-specs`); this card only ever reads it.\n */\nconst GET_ACTIVE_OBJECTIVES = gql`\n query DashboardActiveObjectives($workspaceId: ID!) {\n planmagnetObjectives(\n workspaceId: $workspaceId\n filter: { status: ACTIVE }\n pagination: { first: 8 }\n ) {\n items {\n id\n title\n progress\n periodLabel\n keyResults {\n id\n }\n }\n totalCount\n }\n }\n`;\n\ninterface ObjectiveRow {\n id: string;\n title: string;\n progress: number;\n periodLabel: string;\n keyResults: { id: string }[];\n}\n\ninterface ObjectivesData {\n planmagnetObjectives: { items: ObjectiveRow[]; totalCount: number };\n}\n\nexport function ObjectivesProgressCard({\n workspaceId,\n title,\n definition,\n onDrillDown,\n}: {\n workspaceId?: string | null;\n title?: string;\n definition?: string;\n onDrillDown: () => void;\n}) {\n const { t } = useI18n();\n const { data, loading, error } = useQuery<ObjectivesData>(GET_ACTIVE_OBJECTIVES, {\n variables: { workspaceId },\n skip: !workspaceId,\n });\n const objectives = data?.planmagnetObjectives.items ?? [];\n const totalCount = data?.planmagnetObjectives.totalCount ?? objectives.length;\n\n return (\n <DashboardCard\n icon={<Flag className=\"h-4 w-4\" />}\n title={title ?? t('planmagnet.dashboards.objectives.title', 'Strategic goal progress')}\n definition={\n definition ??\n t(\n 'planmagnet.dashboards.objectives.definition',\n 'Active objectives and their progress — the average of each one’s key results.'\n )\n }\n loading={loading && !data}\n error={error}\n empty={!loading && objectives.length === 0}\n emptyMessage={t('planmagnet.dashboards.objectives.empty', 'No active objectives right now.')}\n drillDown={{\n label: t('planmagnet.dashboards.viewAll', 'View all objectives'),\n onClick: onDrillDown,\n }}\n >\n <div className=\"space-y-3\">\n <p className=\"text-xs text-muted-foreground\">\n {cappedSubtitle(objectives.length, totalCount, 'active objective(s)')}\n </p>\n {objectives.map((o) => (\n <div key={o.id}>\n <PercentBar percent={o.progress} label={o.title} />\n <p className=\"mt-0.5 text-xs text-muted-foreground\">\n {o.periodLabel} ·{' '}\n {t('planmagnet.dashboards.objectives.keyResults', '{{count}} key result(s)', {\n count: o.keyResults.length,\n })}\n </p>\n </div>\n ))}\n </div>\n </DashboardCard>\n );\n}\n"],"mappings":";;;;;;;AAWA,IAAM,IAAwB,CAAG;;;;;;;;;;;;;;;;;;;;AAiCjC,SAAgB,EAAuB,EACrC,gBACA,UACA,eACA,kBAMC;CACD,IAAM,EAAE,SAAM,GAAS,EACjB,EAAE,SAAM,YAAS,aAAU,EAAyB,GAAuB;EAC/E,WAAW,EAAE,gBAAa;EAC1B,MAAM,CAAC;EACR,CAAC,EACI,IAAa,GAAM,qBAAqB,SAAS,EAAE,EACnD,IAAa,GAAM,qBAAqB,cAAc,EAAW;AAEvE,QACE,kBAAC,GAAD;EACE,MAAM,kBAAC,GAAD,EAAM,WAAU,WAAY,CAAA;EAClC,OAAO,KAAS,EAAE,0CAA0C,0BAA0B;EACtF,YACE,KACA,EACE,+CACA,gFACD;EAEH,SAAS,KAAW,CAAC;EACd;EACP,OAAO,CAAC,KAAW,EAAW,WAAW;EACzC,cAAc,EAAE,0CAA0C,kCAAkC;EAC5F,WAAW;GACT,OAAO,EAAE,iCAAiC,sBAAsB;GAChE,SAAS;GACV;YAED,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,KAAD;IAAG,WAAU;cACV,EAAe,EAAW,QAAQ,GAAY,sBAAsB;IACnE,CAAA,EACH,EAAW,KAAK,MACf,kBAAC,OAAD,EAAA,UAAA,CACE,kBAAC,GAAD;IAAY,SAAS,EAAE;IAAU,OAAO,EAAE;IAAS,CAAA,EACnD,kBAAC,KAAD;IAAG,WAAU;cAAb;KACG,EAAE;KAAY;KAAG;KACjB,EAAE,+CAA+C,2BAA2B,EAC3E,OAAO,EAAE,WAAW,QACrB,CAAC;KACA;MACA,EAAA,EARI,EAAE,GAQN,CACN,CACE;;EACQ,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"PortfolioHealthCard.d.ts","sourceRoot":"","sources":["../../../../src/planmagnet/dashboards/cards/PortfolioHealthCard.tsx"],"names":[],"mappings":"AA6DA,wBAAgB,mBAAmB,CAAC,EAClC,WAAW,EACX,WAAW,GACZ,EAAE;IACD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,2CA2EA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"PortfolioHealthCard.js","names":[],"sources":["../../../../src/planmagnet/dashboards/cards/PortfolioHealthCard.tsx"],"sourcesContent":["import { gql } from '@apollo/client';\nimport { useQuery } from '@apollo/client/react';\nimport { useI18n } from '@burdenoff/fe-libs/shared/providers/shell/I18nProvider';\nimport { Briefcase } from 'lucide-react';\nimport { DashboardCard, cappedSubtitle } from '../DashboardUI';\n\n/**\n * Portfolio health (ANR-06): `planmagnetPortfolios` and, for each, its own `projects { status }` —\n * ONE request, no per-portfolio follow-up query. `Portfolio`/`PlanmagnetProject` carry no dedicated\n * \"health\" field (confirmed against `graphql/wspace.graphql`); health here is the same status-mix\n * read the server actually exposes, not a fabricated score.\n */\n// \"first: 8\" below is a literal, not a JS constant, on purpose: graphql-schema-drift's extractor only\n// resolves interpolations of same-file backtick STRING constants, not numbers, so the two \"8\"s here and\n// in cappedSubtitle's caller must be kept in sync by hand.\nconst GET_PORTFOLIO_HEALTH = gql`\n query DashboardPortfolioHealth($workspaceId: ID!) {\n planmagnetPortfolios(workspaceId: $workspaceId, pagination: { first: 8 }) {\n items {\n id\n name\n status\n budgetTotal\n currency\n projects {\n id\n status\n }\n }\n totalCount\n }\n }\n`;\n\ninterface PortfolioRow {\n id: string;\n name: string;\n status: string;\n budgetTotal: number | null;\n currency: string | null;\n projects: { id: string; status: string }[];\n}\n\ninterface PortfolioHealthData {\n planmagnetPortfolios: { items: PortfolioRow[]; totalCount: number };\n}\n\nconst AT_RISK_STATUSES = new Set(['ON_HOLD', 'CANCELLED']);\n\nfunction money(amount: number, currency: string | null): string {\n try {\n return new Intl.NumberFormat(undefined, {\n style: 'currency',\n currency: currency ?? 'USD',\n maximumFractionDigits: 0,\n }).format(amount);\n } catch {\n return `${Math.round(amount).toLocaleString()} ${currency ?? ''}`.trim();\n }\n}\n\nexport function PortfolioHealthCard({\n workspaceId,\n onDrillDown,\n}: {\n workspaceId?: string | null;\n onDrillDown: () => void;\n}) {\n const { t } = useI18n();\n const { data, loading, error } = useQuery<PortfolioHealthData>(GET_PORTFOLIO_HEALTH, {\n variables: { workspaceId },\n skip: !workspaceId,\n });\n const portfolios = data?.planmagnetPortfolios.items ?? [];\n const totalCount = data?.planmagnetPortfolios.totalCount ?? portfolios.length;\n\n return (\n <DashboardCard\n icon={<Briefcase className=\"h-4 w-4\" />}\n title={t('planmagnet.dashboards.exec.portfolios.title', 'Portfolio health')}\n definition={t(\n 'planmagnet.dashboards.exec.portfolios.definition',\n 'Every portfolio and how its projects are distributed by status.'\n )}\n loading={loading && !data}\n error={error}\n empty={!loading && portfolios.length === 0}\n emptyMessage={t('planmagnet.dashboards.exec.portfolios.empty', 'No portfolios yet.')}\n drillDown={{\n label: t('planmagnet.dashboards.viewAll', 'View all portfolios'),\n onClick: onDrillDown,\n }}\n >\n <div className=\"space-y-3\">\n <p className=\"text-xs text-muted-foreground\">\n {cappedSubtitle(portfolios.length, totalCount, 'portfolio(s)')}\n </p>\n <table className=\"w-full text-sm\">\n <thead>\n <tr className=\"text-left text-xs text-muted-foreground\">\n <th className=\"py-1 pr-2 font-normal\">\n {t('planmagnet.dashboards.exec.portfolios.name', 'Portfolio')}\n </th>\n <th className=\"py-1 pr-2 text-right font-normal\">\n {t('planmagnet.dashboards.exec.portfolios.projects', 'Projects')}\n </th>\n <th className=\"py-1 pr-2 text-right font-normal\">\n {t('planmagnet.dashboards.exec.portfolios.atRisk', 'At risk')}\n </th>\n <th className=\"py-1 text-right font-normal\">\n {t('planmagnet.dashboards.exec.portfolios.budget', 'Budget')}\n </th>\n </tr>\n </thead>\n <tbody>\n {portfolios.map((p) => {\n const atRisk = p.projects.filter((proj) => AT_RISK_STATUSES.has(proj.status)).length;\n return (\n <tr key={p.id} className=\"border-t align-middle\">\n <td className=\"py-1.5 pr-2\">\n <span className=\"font-medium\">{p.name}</span>\n <span className=\"ml-1.5 text-xs text-muted-foreground\">\n {p.status.toLowerCase()}\n </span>\n </td>\n <td className=\"py-1.5 pr-2 text-right tabular-nums\">{p.projects.length}</td>\n <td\n className={`py-1.5 pr-2 text-right tabular-nums ${atRisk > 0 ? 'text-status-warning-text' : ''}`}\n >\n {atRisk}\n </td>\n <td className=\"py-1.5 text-right tabular-nums\">\n {p.budgetTotal != null ? money(p.budgetTotal, p.currency) : '—'}\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n </DashboardCard>\n );\n}\n"],"mappings":";;;;;;;AAeA,IAAM,IAAuB,CAAG;;;;;;;;;;;;;;;;;GAgC1B,IAAmB,IAAI,IAAI,CAAC,WAAW,YAAY,CAAC;AAE1D,SAAS,EAAM,GAAgB,GAAiC;AAC9D,KAAI;AACF,SAAO,IAAI,KAAK,aAAa,KAAA,GAAW;GACtC,OAAO;GACP,UAAU,KAAY;GACtB,uBAAuB;GACxB,CAAC,CAAC,OAAO,EAAO;SACX;AACN,SAAO,GAAG,KAAK,MAAM,EAAO,CAAC,gBAAgB,CAAC,GAAG,KAAY,KAAK,MAAM;;;AAI5E,SAAgB,EAAoB,EAClC,gBACA,kBAIC;CACD,IAAM,EAAE,SAAM,GAAS,EACjB,EAAE,SAAM,YAAS,aAAU,EAA8B,GAAsB;EACnF,WAAW,EAAE,gBAAa;EAC1B,MAAM,CAAC;EACR,CAAC,EACI,IAAa,GAAM,qBAAqB,SAAS,EAAE,EACnD,IAAa,GAAM,qBAAqB,cAAc,EAAW;AAEvE,QACE,kBAAC,GAAD;EACE,MAAM,kBAAC,GAAD,EAAW,WAAU,WAAY,CAAA;EACvC,OAAO,EAAE,+CAA+C,mBAAmB;EAC3E,YAAY,EACV,oDACA,kEACD;EACD,SAAS,KAAW,CAAC;EACd;EACP,OAAO,CAAC,KAAW,EAAW,WAAW;EACzC,cAAc,EAAE,+CAA+C,qBAAqB;EACpF,WAAW;GACT,OAAO,EAAE,iCAAiC,sBAAsB;GAChE,SAAS;GACV;YAED,kBAAC,OAAD;GAAK,WAAU;aAAf,CACE,kBAAC,KAAD;IAAG,WAAU;cACV,EAAe,EAAW,QAAQ,GAAY,eAAe;IAC5D,CAAA,EACJ,kBAAC,SAAD;IAAO,WAAU;cAAjB,CACE,kBAAC,SAAD,EAAA,UACE,kBAAC,MAAD;KAAI,WAAU;eAAd;MACE,kBAAC,MAAD;OAAI,WAAU;iBACX,EAAE,8CAA8C,YAAY;OAC1D,CAAA;MACL,kBAAC,MAAD;OAAI,WAAU;iBACX,EAAE,kDAAkD,WAAW;OAC7D,CAAA;MACL,kBAAC,MAAD;OAAI,WAAU;iBACX,EAAE,gDAAgD,UAAU;OAC1D,CAAA;MACL,kBAAC,MAAD;OAAI,WAAU;iBACX,EAAE,gDAAgD,SAAS;OACzD,CAAA;MACF;QACC,CAAA,EACR,kBAAC,SAAD,EAAA,UACG,EAAW,KAAK,MAAM;KACrB,IAAM,IAAS,EAAE,SAAS,QAAQ,MAAS,EAAiB,IAAI,EAAK,OAAO,CAAC,CAAC;AAC9E,YACE,kBAAC,MAAD;MAAe,WAAU;gBAAzB;OACE,kBAAC,MAAD;QAAI,WAAU;kBAAd,CACE,kBAAC,QAAD;SAAM,WAAU;mBAAe,EAAE;SAAY,CAAA,EAC7C,kBAAC,QAAD;SAAM,WAAU;mBACb,EAAE,OAAO,aAAa;SAClB,CAAA,CACJ;;OACL,kBAAC,MAAD;QAAI,WAAU;kBAAuC,EAAE,SAAS;QAAY,CAAA;OAC5E,kBAAC,MAAD;QACE,WAAW,uCAAuC,IAAS,IAAI,6BAA6B;kBAE3F;QACE,CAAA;OACL,kBAAC,MAAD;QAAI,WAAU;kBACX,EAAE,eAAe,OAA0C,MAAnC,EAAM,EAAE,aAAa,EAAE,SAAS;QACtD,CAAA;OACF;QAhBI,EAAE,GAgBN;MAEP,EACI,CAAA,CACF;MACJ;;EACQ,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"QualityMetricsCard.d.ts","sourceRoot":"","sources":["../../../../src/planmagnet/dashboards/cards/QualityMetricsCard.tsx"],"names":[],"mappings":"AA+CA,wBAAgB,kBAAkB,CAAC,EACjC,WAAW,EACX,SAAS,EACT,SAAS,EACT,OAAO,EACP,WAAW,GACZ,EAAE;IACD,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,2CAkEA"}